@vectros-ai/mcp-server 0.5.0 → 0.5.1
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.
- package/CHANGELOG.md +11 -0
- package/README.md +3 -0
- package/dist/cli-http.js +4 -2
- package/dist/cli-http.js.map +1 -1
- package/dist/cli-http.mjs +4 -2
- package/dist/cli-http.mjs.map +1 -1
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +4 -2
- package/dist/cli.mjs.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/cli-http.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server.ts","../../../node_modules/@vectros-ai/sdk/dist/index.mjs","../src/auth.ts","../src/build-info.ts","../src/log.ts","../src/identity.ts","../src/base-url.ts","../src/tools/hybrid_search.ts","../src/sse.ts","../src/tools/errors.ts","../src/tools/record_query.ts","../src/paging.ts","../src/tools/record_get.ts","../src/tools/record_create.ts","../src/tools/record_update.ts","../src/tools/record_delete.ts","../src/tools/rag_ask.ts","../src/tools/document_ask.ts","../src/tools/list_schemas.ts","../src/tools/document_get.ts","../src/tools/document_query.ts","../src/tools/document_update.ts","../src/tools/document_delete.ts","../src/tools/folder_query.ts","../src/tools/folder_create.ts","../src/tools/folder_update.ts","../src/tools/folder_delete.ts","../src/tools/current_identity.ts","../src/tools/document_ingest.ts","../src/tools/lookup_principal.ts","../src/tools/version_history.ts","../src/tools/types.ts","../src/tools/index.ts","../src/resources/schemas.ts","../src/resources/identity.ts","../src/resources/types.ts","../src/resources/index.ts","../src/zod-to-json-schema.ts","../src/transport/http.ts","../src/parse-tools-env.ts","../src/cli-http.ts"],"sourcesContent":["/**\n * VectrosMCPServer — the public class. Composes:\n * - API-key parse + warnings\n * - Vectros SDK client construction\n * - MCP Server with the v0.1 tool catalog registered\n * - The `tools: [...]` opt-in filter (CodeBlock.js contract)\n *\n * Transport (stdio for v0.1) is connected separately via\n * `server.connect(transport)`. The CLI entry wires stdio.\n *\n * Public surface — see the design doc § \"Configuration\"\n * for the constructor-options shape.\n */\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { VectrosClient } from '@vectros-ai/sdk';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport {\n CallToolRequestSchema,\n ListResourcesRequestSchema,\n ListToolsRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\n\nimport { parseApiKey, warnOnSuboptimalKey } from './auth.js';\nimport { BUILD_INFO } from './build-info.js';\nimport { createLogger, type Logger } from './log.js';\nimport { resolveIdentity } from './identity.js';\nimport { validateBaseUrl } from './base-url.js';\nimport { ALL_TOOL_FACTORIES, type ToolName, TOOL_NAMES } from './tools/index.js';\nimport type { ToolDefinition, ToolExtra, ToolResult } from './tools/types.js';\nimport { toolError } from './tools/errors.js';\nimport {\n ALL_RESOURCE_FACTORIES,\n type ResourceName,\n RESOURCE_NAMES,\n} from './resources/index.js';\nimport type { ResourceDefinition } from './resources/types.js';\nimport { zodShapeToJsonSchema } from './zod-to-json-schema.js';\n\nconst DEFAULT_ENVIRONMENT = 'https://api.vectros.ai';\n\nexport interface VectrosMCPServerOptions {\n /** Vectros API key. REQUIRED. Recommended shape: ssk_live_... or ssk_test_.... */\n apiKey: string;\n /** Opt-in tool filter. Default: all v0.1 tools enabled. */\n tools?: ToolName[];\n /**\n * Opt-in resource filter (v0.2+). Default: all resources enabled.\n * Pass `[]` to register zero resources (server advertises no\n * resources capability via tools/list).\n */\n resources?: ResourceName[];\n /**\n * Vectros API base URL. Default: https://api.vectros.ai. The SDK\n * calls this `environment`; we keep the docs-aligned name on our\n * surface to match the design doc.\n */\n apiBaseUrl?: string;\n /** Provide a logger to capture server output. Default: pino → stderr. */\n logger?: Logger;\n /**\n * Which transport this server will be wired up with. Optional; only\n * affects tool behavior that depends on partner-local-fs access\n * (currently `document_ingest`'s filePath mode is stdio-only). The\n * CLI entry points set this — `cli.ts` passes 'stdio', the v0.2\n * `cli-http.ts` passes 'http'. Programmatic embedders default to\n * 'stdio' semantics if omitted.\n */\n transport?: 'stdio' | 'http';\n /**\n * If true (default in v0.2), perform a GET /v1/ping check during\n * `connect()` to fail-fast on bad credentials BEFORE the MCP\n * client sends its first tool call. The default is safe — partners\n * who don't want the network roundtrip on startup can set false,\n * but the trade-off is \"credential failures surface mid-tool-call\n * rather than at startup.\"\n *\n * The CLI honors `VECTROS_MCP_SKIP_PING_VALIDATION=1` env var as\n * an explicit opt-out (sets this to false). Useful in CI / dev\n * environments where the API isn't reachable.\n */\n validateOnStart?: boolean;\n /**\n * Filesystem root that `document_ingest`'s stdio `filePath` mode is\n * jailed to. Overrides `VECTROS_MCP_INGEST_ROOT`; when both are\n * absent the tool defaults to `process.cwd()`.\n */\n ingestRoot?: string;\n}\n\nexport class VectrosMCPServer {\n private readonly server: Server;\n private readonly log: Logger;\n private readonly tools: ToolDefinition[];\n private readonly resources: ResourceDefinition[];\n private readonly apiKey: string;\n private readonly environment: string;\n private readonly validateOnStart: boolean;\n\n constructor(opts: VectrosMCPServerOptions) {\n this.log = opts.logger ?? createLogger();\n\n // Auth — parse + warn (fail-fast on malformed).\n const keyInfo = parseApiKey(opts.apiKey);\n warnOnSuboptimalKey(keyInfo, this.log);\n this.log.info(\n { keyPrefix: keyInfo.prefix, keyEnv: keyInfo.env },\n 'authenticated against Vectros',\n );\n\n // SDK client. Validate the base URL here too (R1 F-06a) — the CLI entry\n // points validate before construction, but a programmatic embedder reaches\n // this directly; an unvalidated host would exfiltrate the API key via\n // /v1/ping. Throws InvalidBaseUrlError on a non-Vectros / insecure host.\n const environment = opts.apiBaseUrl ?? DEFAULT_ENVIRONMENT;\n validateBaseUrl(environment, { warn: (m) => this.log.warn(m) });\n const client = new VectrosClient({ token: opts.apiKey, environment });\n\n // Stash for connect-time validation.\n this.apiKey = opts.apiKey;\n this.environment = environment;\n this.validateOnStart = opts.validateOnStart ?? true;\n\n // Build the enabled tool set.\n const requested = opts.tools ?? [...TOOL_NAMES];\n const invalid = requested.filter((n) => !TOOL_NAMES.includes(n as ToolName));\n if (invalid.length > 0) {\n throw new Error(\n `Unknown tool names in opts.tools: ${invalid.join(', ')}. ` +\n `Valid names: ${TOOL_NAMES.join(', ')}.`,\n );\n }\n this.tools = requested.map((name) => {\n const factory = ALL_TOOL_FACTORIES[name];\n return factory({\n client,\n log: this.log,\n apiKey: opts.apiKey,\n environment,\n transport: opts.transport,\n ingestRoot: opts.ingestRoot,\n });\n });\n this.log.info(\n { tools: this.tools.map((t) => t.name) },\n `${this.tools.length} tool(s) enabled`,\n );\n\n // Build the enabled resource set (v0.2+).\n const requestedResources = opts.resources ?? [...RESOURCE_NAMES];\n const invalidResources = requestedResources.filter(\n (n) => !RESOURCE_NAMES.includes(n as ResourceName),\n );\n if (invalidResources.length > 0) {\n throw new Error(\n `Unknown resource names in opts.resources: ${invalidResources.join(', ')}. ` +\n `Valid names: ${RESOURCE_NAMES.join(', ')}.`,\n );\n }\n this.resources = requestedResources.map((name) => {\n const factory = ALL_RESOURCE_FACTORIES[name];\n return factory({\n client,\n log: this.log,\n apiKey: opts.apiKey,\n environment,\n });\n });\n this.log.info(\n { resources: this.resources.map((r) => r.name) },\n `${this.resources.length} resource(s) enabled`,\n );\n\n // MCP Server instance — advertise both tools + resources\n // capabilities (resources only if any are registered).\n const capabilities: { tools: object; resources?: object } = { tools: {} };\n if (this.resources.length > 0) {\n capabilities.resources = {};\n }\n this.server = new Server(\n { name: '@vectros-ai/mcp-server', version: BUILD_INFO.mcpServer },\n { capabilities },\n );\n\n this.wireHandlers();\n }\n\n /**\n * Wire `tools/list` and `tools/call` JSON-RPC handlers on the\n * underlying MCP Server. Each tool's handler is wrapped to convert\n * thrown errors into `isError: true` tool results.\n */\n private wireHandlers(): void {\n // SDK type-union disambiguation note: setRequestHandler's return\n // type is a ServerResult union that includes a Managed-Agents\n // `{task: {...}}` variant. Our handlers return CallToolResult-\n // shaped objects (`{content, isError?}`) — assignable at runtime\n // but TypeScript's strict-distributive union check can't pick\n // the right variant. Cast the return to `unknown` to suppress.\n this.server.setRequestHandler(ListToolsRequestSchema, async () =>\n ({\n tools: this.tools.map((t) => ({\n name: t.name,\n title: t.title,\n description: t.description,\n inputSchema: zodShapeToJsonSchema(t.inputSchema),\n })),\n }) as unknown as never,\n );\n\n this.server.setRequestHandler(CallToolRequestSchema, async (req, extra) => {\n const tool = this.tools.find((t) => t.name === req.params.name);\n let result: ToolResult;\n if (!tool) {\n result = toolError(req.params.name ?? 'unknown', new Error('No such tool.'));\n } else {\n // Validate args via zod.\n const parsed = z.object(tool.inputSchema).safeParse(req.params.arguments ?? {});\n if (!parsed.success) {\n result = toolError(tool.name, new Error(`Invalid arguments: ${parsed.error.message}`));\n } else {\n try {\n // The MCP SDK's `extra` object exposes sendNotification +\n // _meta.progressToken. Cast through unknown — the SDK's\n // generated types over-constrain the notification shape.\n result = await tool.handler(\n parsed.data as Record<string, unknown>,\n extra as unknown as ToolExtra,\n );\n } catch (err) {\n // Defensive — tool handlers should already catch internally.\n result = toolError(tool.name, err);\n }\n }\n }\n // See header comment on the ListToolsRequestSchema handler for\n // why this cast is needed.\n return result as unknown as never;\n });\n\n // Resources — only wire if any are registered. Skipping the\n // handler-wire when resources=[] means the MCP server doesn't\n // accept resources/list calls at all, matching the \"advertise\n // no resources capability\" behavior in the constructor.\n if (this.resources.length > 0) {\n this.server.setRequestHandler(ListResourcesRequestSchema, async () =>\n ({\n resources: this.resources.map((r) => ({\n uri: r.uri,\n name: r.name,\n title: r.title,\n description: r.description,\n mimeType: r.mimeType,\n })),\n }) as unknown as never,\n );\n\n this.server.setRequestHandler(ReadResourceRequestSchema, async (req) => {\n const uri = req.params.uri;\n const resource = this.resources.find((r) => r.uri === uri);\n if (!resource) {\n // MCP spec: unknown URI → throw an error (the SDK converts\n // to a JSON-RPC error response). No \"isError\" flag like\n // tools — resources use protocol-level errors.\n throw new Error(`No such resource URI: ${uri}`);\n }\n try {\n const text = await resource.read();\n return {\n contents: [\n {\n uri: resource.uri,\n mimeType: resource.mimeType,\n text,\n },\n ],\n } as unknown as never;\n } catch (err) {\n this.log.warn(\n { resource: resource.name, uri, err: String(err) },\n 'resource read failed',\n );\n throw err;\n }\n });\n }\n }\n\n /**\n * Connect the underlying MCP Server to a transport (stdio, HTTP,\n * etc.). Returns when the connection is established; the server\n * continues serving until the transport closes.\n *\n * If `validateOnStart` (default true) is enabled, performs a\n * GET /v1/ping check BEFORE wiring the transport. On failure,\n * throws — the partner's MCP client sees a startup error instead\n * of a confusing \"tools work but the first call 401s\" experience.\n */\n async connect(transport: Transport): Promise<void> {\n if (this.validateOnStart) {\n await this.validateCredentials();\n }\n await this.server.connect(transport);\n this.log.info({ transport: transport.constructor.name }, 'MCP server connected');\n }\n\n /**\n * GET /v1/ping with the configured credential. Throws on non-2xx.\n * Called by `connect()` if `validateOnStart` is true.\n *\n * Uses `resolveIdentity` so it stays in lockstep with the\n * graceful-degradation contract (works whether backend has shipped\n * the extended ping shape or not — we only care about the 2xx vs\n * non-2xx signal for validation).\n */\n private async validateCredentials(): Promise<void> {\n try {\n await resolveIdentity({\n log: this.log,\n apiKey: this.apiKey,\n environment: this.environment,\n });\n this.log.info(\n { url: `${this.environment.replace(/\\/$/, '')}/v1/ping` },\n 'startup ping validation ok',\n );\n } catch (err) {\n this.log.fatal(\n { err: err instanceof Error ? err.message : String(err) },\n 'startup ping validation failed — check credential + base URL',\n );\n throw err;\n }\n }\n\n /** Close the underlying MCP Server. Idempotent. */\n async close(): Promise<void> {\n await this.server.close();\n }\n\n /**\n * Names of the tools registered on this server, in registration\n * order. Useful for tests + diagnostic logs. Read-only — the\n * registered set is fixed at construction time.\n */\n get registeredToolNames(): readonly ToolName[] {\n return this.tools.map((t) => t.name);\n }\n\n /**\n * Names of the resources registered on this server, in\n * registration order. Read-only.\n */\n get registeredResourceNames(): readonly ResourceName[] {\n return this.resources.map((r) => r.name);\n }\n}\n\n","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// api/index.ts\nvar api_exports = {};\n__export(api_exports, {\n AccessProfileRequest: () => AccessProfileRequest,\n AppContextResponse: () => AppContextResponse,\n BadRequestError: () => BadRequestError,\n BatchLookupResult: () => BatchLookupResult,\n BatchWriteRequest: () => BatchWriteRequest,\n BatchWriteResult: () => BatchWriteResult,\n ChatMessage: () => ChatMessage,\n ClientRequest: () => ClientRequest,\n ConflictError: () => ConflictError,\n ContentDeltaEvent: () => ContentDeltaEvent,\n ContentTooLargeError: () => ContentTooLargeError,\n DocumentContextEvent: () => DocumentContextEvent,\n DocumentLookupRequest: () => DocumentLookupRequest,\n DocumentRequest: () => DocumentRequest,\n DocumentResponse: () => DocumentResponse,\n DoneEvent: () => DoneEvent,\n ErasureCertificate: () => ErasureCertificate,\n ErasureRequest: () => ErasureRequest,\n ErasureRequestResponse: () => ErasureRequestResponse,\n ErrorEvent: () => ErrorEvent,\n ExportManifest: () => ExportManifest,\n ExportRequest: () => ExportRequest,\n ExportRequestResponse: () => ExportRequestResponse,\n FieldDef: () => FieldDef,\n FileUploadRequest: () => FileUploadRequest,\n ForbiddenError: () => ForbiddenError,\n IdentityLookupRequest: () => IdentityLookupRequest,\n InternalServerError: () => InternalServerError,\n ListClientsRequestOrder: () => ListClientsRequestOrder,\n ListOrgsRequestOrder: () => ListOrgsRequestOrder,\n ListUsersRequestOrder: () => ListUsersRequestOrder,\n LookupDocumentsRequestOrder: () => LookupDocumentsRequestOrder,\n LookupRecordsRequestOrder: () => LookupRecordsRequestOrder,\n ModelDataVersionResponse: () => ModelDataVersionResponse,\n NotFoundError: () => NotFoundError,\n NotImplementedError: () => NotImplementedError,\n OrgRequest: () => OrgRequest,\n PaymentRequiredError: () => PaymentRequiredError,\n PingResponse: () => PingResponse,\n RagSearch: () => RagSearch,\n ReadAccessLogResponse: () => ReadAccessLogResponse,\n RecordLookupRequest: () => RecordLookupRequest,\n RecordRequest: () => RecordRequest,\n RecordResponse: () => RecordResponse,\n RenderHintDef: () => RenderHintDef,\n SchemaRequest: () => SchemaRequest,\n SchemaResponse: () => SchemaResponse,\n ScopedKeyResponse: () => ScopedKeyResponse,\n SearchRequest: () => SearchRequest,\n SearchResult: () => SearchResult,\n SearchResultsEvent: () => SearchResultsEvent,\n TooManyRequestsError: () => TooManyRequestsError,\n TruncationWarningEvent: () => TruncationWarningEvent,\n UnauthorizedError: () => UnauthorizedError,\n UserRequest: () => UserRequest,\n UserResponse: () => UserResponse,\n auth: () => auth_exports,\n compliance: () => compliance_exports,\n documents: () => documents_exports,\n folders: () => folders_exports,\n identity: () => identity_exports,\n inference: () => inference_exports,\n records: () => records_exports,\n schemas: () => schemas_exports,\n search: () => search_exports\n});\n\n// core/json.ts\nvar toJson = (value, replacer, space) => {\n return JSON.stringify(value, replacer, space);\n};\nfunction fromJson(text, reviver) {\n return JSON.parse(text, reviver);\n}\n\n// errors/VectrosError.ts\nvar VectrosError = class extends Error {\n constructor({\n message,\n statusCode,\n body,\n rawResponse,\n cause\n }) {\n super(buildMessage({ message, statusCode, body }));\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n this.statusCode = statusCode;\n this.body = body;\n this.rawResponse = rawResponse;\n if (cause != null) {\n this.cause = cause;\n }\n }\n};\nfunction buildMessage({\n message,\n statusCode,\n body\n}) {\n const lines = [];\n if (message != null) {\n lines.push(message);\n }\n if (statusCode != null) {\n lines.push(`Status code: ${statusCode.toString()}`);\n }\n if (body != null) {\n lines.push(`Body: ${toJson(body, void 0, 2)}`);\n }\n return lines.join(\"\\n\");\n}\n\n// errors/VectrosTimeoutError.ts\nvar VectrosTimeoutError = class extends Error {\n constructor(message, opts) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n if (opts?.cause != null) {\n this.cause = opts.cause;\n }\n }\n};\n\n// api/errors/BadRequestError.ts\nvar BadRequestError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"BadRequestError\",\n statusCode: 400,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/ConflictError.ts\nvar ConflictError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"ConflictError\",\n statusCode: 409,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/ContentTooLargeError.ts\nvar ContentTooLargeError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"ContentTooLargeError\",\n statusCode: 413,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/ForbiddenError.ts\nvar ForbiddenError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"ForbiddenError\",\n statusCode: 403,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/InternalServerError.ts\nvar InternalServerError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"InternalServerError\",\n statusCode: 500,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/NotFoundError.ts\nvar NotFoundError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"NotFoundError\",\n statusCode: 404,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/NotImplementedError.ts\nvar NotImplementedError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"NotImplementedError\",\n statusCode: 501,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/PaymentRequiredError.ts\nvar PaymentRequiredError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"PaymentRequiredError\",\n statusCode: 402,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/TooManyRequestsError.ts\nvar TooManyRequestsError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"TooManyRequestsError\",\n statusCode: 429,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/UnauthorizedError.ts\nvar UnauthorizedError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"UnauthorizedError\",\n statusCode: 401,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/resources/auth/index.ts\nvar auth_exports = {};\n\n// api/resources/compliance/client/requests/ErasureRequest.ts\nvar ErasureRequest;\n((ErasureRequest2) => {\n ErasureRequest2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n ErasureRequest2.AuditDisposition = {\n RetainRedacted: \"retain-redacted\",\n Purge: \"purge\"\n };\n})(ErasureRequest || (ErasureRequest = {}));\n\n// api/resources/compliance/client/requests/ExportRequest.ts\nvar ExportRequest;\n((ExportRequest2) => {\n ExportRequest2.Scope = {\n Tenant: \"tenant\",\n Subject: \"subject\"\n };\n ExportRequest2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n ExportRequest2.Format = {\n Ndjson: \"ndjson\"\n };\n})(ExportRequest || (ExportRequest = {}));\n\n// api/resources/compliance/index.ts\nvar compliance_exports = {};\n__export(compliance_exports, {\n ErasureRequest: () => ErasureRequest,\n ExportRequest: () => ExportRequest\n});\n\n// api/resources/documents/client/requests/DocumentLookupRequest.ts\nvar DocumentLookupRequest;\n((DocumentLookupRequest2) => {\n DocumentLookupRequest2.Order = {\n Asc: \"asc\",\n Desc: \"desc\"\n };\n})(DocumentLookupRequest || (DocumentLookupRequest = {}));\n\n// api/resources/documents/client/requests/FileUploadRequest.ts\nvar FileUploadRequest;\n((FileUploadRequest2) => {\n FileUploadRequest2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(FileUploadRequest || (FileUploadRequest = {}));\n\n// api/resources/documents/index.ts\nvar documents_exports = {};\n__export(documents_exports, {\n DocumentLookupRequest: () => DocumentLookupRequest,\n FileUploadRequest: () => FileUploadRequest,\n LookupDocumentsRequestOrder: () => LookupDocumentsRequestOrder\n});\n\n// api/resources/documents/types/LookupDocumentsRequestOrder.ts\nvar LookupDocumentsRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/folders/index.ts\nvar folders_exports = {};\n\n// api/resources/identity/index.ts\nvar identity_exports = {};\n__export(identity_exports, {\n ListClientsRequestOrder: () => ListClientsRequestOrder,\n ListOrgsRequestOrder: () => ListOrgsRequestOrder,\n ListUsersRequestOrder: () => ListUsersRequestOrder\n});\n\n// api/resources/identity/types/ListClientsRequestOrder.ts\nvar ListClientsRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/identity/types/ListOrgsRequestOrder.ts\nvar ListOrgsRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/identity/types/ListUsersRequestOrder.ts\nvar ListUsersRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/inference/index.ts\nvar inference_exports = {};\n\n// api/resources/records/client/requests/BatchWriteRequest.ts\nvar BatchWriteRequest;\n((BatchWriteRequest2) => {\n BatchWriteRequest2.Atomicity = {\n AllOrNothing: \"all_or_nothing\",\n BestEffort: \"best_effort\"\n };\n})(BatchWriteRequest || (BatchWriteRequest = {}));\n\n// api/resources/records/client/requests/RecordLookupRequest.ts\nvar RecordLookupRequest;\n((RecordLookupRequest2) => {\n RecordLookupRequest2.Order = {\n Asc: \"asc\",\n Desc: \"desc\"\n };\n})(RecordLookupRequest || (RecordLookupRequest = {}));\n\n// api/resources/records/index.ts\nvar records_exports = {};\n__export(records_exports, {\n BatchWriteRequest: () => BatchWriteRequest,\n LookupRecordsRequestOrder: () => LookupRecordsRequestOrder,\n RecordLookupRequest: () => RecordLookupRequest\n});\n\n// api/resources/records/types/LookupRecordsRequestOrder.ts\nvar LookupRecordsRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/schemas/index.ts\nvar schemas_exports = {};\n\n// api/resources/search/client/requests/SearchRequest.ts\nvar SearchRequest;\n((SearchRequest2) => {\n SearchRequest2.Mode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\"\n };\n SearchRequest2.TextMode = {\n Or: \"OR\",\n And: \"AND\",\n Phrase: \"PHRASE\",\n Complex: \"COMPLEX\"\n };\n let ContentTypes;\n ((ContentTypes2) => {\n ContentTypes2.Item = {\n Documents: \"documents\",\n Records: \"records\"\n };\n })(ContentTypes = SearchRequest2.ContentTypes || (SearchRequest2.ContentTypes = {}));\n})(SearchRequest || (SearchRequest = {}));\n\n// api/resources/search/index.ts\nvar search_exports = {};\n__export(search_exports, {\n SearchRequest: () => SearchRequest\n});\n\n// api/types/AccessProfileRequest.ts\nvar AccessProfileRequest;\n((AccessProfileRequest2) => {\n AccessProfileRequest2.Status = {\n Active: \"active\",\n Suspended: \"suspended\"\n };\n})(AccessProfileRequest || (AccessProfileRequest = {}));\n\n// api/types/AppContextResponse.ts\nvar AppContextResponse;\n((AppContextResponse2) => {\n AppContextResponse2.Status = {\n Active: \"active\",\n Purging: \"purging\",\n Deleted: \"deleted\"\n };\n})(AppContextResponse || (AppContextResponse = {}));\n\n// api/types/BatchLookupResult.ts\nvar BatchLookupResult;\n((BatchLookupResult2) => {\n BatchLookupResult2.Status = {\n Resolved: \"resolved\",\n NotFound: \"not_found\",\n Ambiguous: \"ambiguous\"\n };\n})(BatchLookupResult || (BatchLookupResult = {}));\n\n// api/types/BatchWriteResult.ts\nvar BatchWriteResult;\n((BatchWriteResult2) => {\n BatchWriteResult2.Status = {\n Created: \"created\",\n Updated: \"updated\",\n Conflict: \"conflict\",\n Invalid: \"invalid\"\n };\n})(BatchWriteResult || (BatchWriteResult = {}));\n\n// api/types/ChatMessage.ts\nvar ChatMessage;\n((ChatMessage2) => {\n ChatMessage2.Role = {\n System: \"system\",\n User: \"user\",\n Assistant: \"assistant\"\n };\n})(ChatMessage || (ChatMessage = {}));\n\n// api/types/ClientRequest.ts\nvar ClientRequest;\n((ClientRequest2) => {\n ClientRequest2.Status = {\n Active: \"ACTIVE\",\n Suspended: \"SUSPENDED\"\n };\n})(ClientRequest || (ClientRequest = {}));\n\n// api/types/ContentDeltaEvent.ts\nvar ContentDeltaEvent;\n((ContentDeltaEvent2) => {\n ContentDeltaEvent2.Event = {\n ContentDelta: \"content_delta\"\n };\n})(ContentDeltaEvent || (ContentDeltaEvent = {}));\n\n// api/types/DocumentContextEvent.ts\nvar DocumentContextEvent;\n((DocumentContextEvent2) => {\n DocumentContextEvent2.Event = {\n DocumentContext: \"document_context\"\n };\n})(DocumentContextEvent || (DocumentContextEvent = {}));\n\n// api/types/DocumentRequest.ts\nvar DocumentRequest;\n((DocumentRequest2) => {\n DocumentRequest2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(DocumentRequest || (DocumentRequest = {}));\n\n// api/types/DocumentResponse.ts\nvar DocumentResponse;\n((DocumentResponse2) => {\n DocumentResponse2.Status = {\n PendingUpload: \"PENDING_UPLOAD\",\n Uploaded: \"UPLOADED\",\n Extracting: \"EXTRACTING\",\n PendingIndex: \"PENDING_INDEX\",\n Indexed: \"INDEXED\",\n Stored: \"STORED\",\n Failed: \"FAILED\"\n };\n DocumentResponse2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(DocumentResponse || (DocumentResponse = {}));\n\n// api/types/DoneEvent.ts\nvar DoneEvent;\n((DoneEvent2) => {\n DoneEvent2.Event = {\n Done: \"done\"\n };\n})(DoneEvent || (DoneEvent = {}));\n\n// api/types/ErasureCertificate.ts\nvar ErasureCertificate;\n((ErasureCertificate2) => {\n ErasureCertificate2.AuditDisposition = {\n RetainRedacted: \"retain-redacted\",\n Purge: \"purge\"\n };\n})(ErasureCertificate || (ErasureCertificate = {}));\n\n// api/types/ErasureRequestResponse.ts\nvar ErasureRequestResponse;\n((ErasureRequestResponse2) => {\n ErasureRequestResponse2.Status = {\n Accepted: \"accepted\",\n Processing: \"processing\",\n Completed: \"completed\",\n Failed: \"failed\"\n };\n ErasureRequestResponse2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n})(ErasureRequestResponse || (ErasureRequestResponse = {}));\n\n// api/types/ErrorEvent.ts\nvar ErrorEvent;\n((ErrorEvent2) => {\n ErrorEvent2.Event = {\n Error: \"error\"\n };\n})(ErrorEvent || (ErrorEvent = {}));\n\n// api/types/ExportManifest.ts\nvar ExportManifest;\n((ExportManifest2) => {\n ExportManifest2.Format = {\n Ndjson: \"ndjson\"\n };\n})(ExportManifest || (ExportManifest = {}));\n\n// api/types/ExportRequestResponse.ts\nvar ExportRequestResponse;\n((ExportRequestResponse2) => {\n ExportRequestResponse2.Status = {\n Accepted: \"accepted\",\n Processing: \"processing\",\n Completed: \"completed\",\n Failed: \"failed\"\n };\n ExportRequestResponse2.Scope = {\n Tenant: \"tenant\",\n Subject: \"subject\"\n };\n ExportRequestResponse2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n})(ExportRequestResponse || (ExportRequestResponse = {}));\n\n// api/types/FieldDef.ts\nvar FieldDef;\n((FieldDef2) => {\n FieldDef2.FieldType = {\n String: \"string\",\n Number: \"number\",\n Boolean: \"boolean\",\n Date: \"date\",\n Enum: \"enum\",\n Array: \"array\",\n Object: \"object\",\n Reference: \"reference\"\n };\n FieldDef2.TargetSurface = {\n Record: \"record\",\n Document: \"document\",\n User: \"user\",\n Org: \"org\",\n Client: \"client\"\n };\n})(FieldDef || (FieldDef = {}));\n\n// api/types/IdentityLookupRequest.ts\nvar IdentityLookupRequest;\n((IdentityLookupRequest2) => {\n IdentityLookupRequest2.Order = {\n Asc: \"asc\",\n Desc: \"desc\"\n };\n})(IdentityLookupRequest || (IdentityLookupRequest = {}));\n\n// api/types/ModelDataVersionResponse.ts\nvar ModelDataVersionResponse;\n((ModelDataVersionResponse2) => {\n ModelDataVersionResponse2.ChangeType = {\n Create: \"CREATE\",\n Update: \"UPDATE\",\n Delete: \"DELETE\"\n };\n})(ModelDataVersionResponse || (ModelDataVersionResponse = {}));\n\n// api/types/OrgRequest.ts\nvar OrgRequest;\n((OrgRequest2) => {\n OrgRequest2.Status = {\n Active: \"ACTIVE\",\n Suspended: \"SUSPENDED\"\n };\n})(OrgRequest || (OrgRequest = {}));\n\n// api/types/PingResponse.ts\nvar PingResponse;\n((PingResponse2) => {\n PingResponse2.Environment = {\n Staging: \"staging\",\n Production: \"production\"\n };\n PingResponse2.PrincipalType = {\n RootKey: \"root_key\",\n ScopedKey: \"scoped_key\",\n Token: \"token\"\n };\n})(PingResponse || (PingResponse = {}));\n\n// api/types/RagSearch.ts\nvar RagSearch;\n((RagSearch2) => {\n RagSearch2.Mode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\"\n };\n let ContentTypes;\n ((ContentTypes2) => {\n ContentTypes2.Item = {\n Documents: \"documents\",\n Records: \"records\"\n };\n })(ContentTypes = RagSearch2.ContentTypes || (RagSearch2.ContentTypes = {}));\n})(RagSearch || (RagSearch = {}));\n\n// api/types/ReadAccessLogResponse.ts\nvar ReadAccessLogResponse;\n((ReadAccessLogResponse2) => {\n ReadAccessLogResponse2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n ReadAccessLogResponse2.Action = {\n Read: \"read\",\n List: \"list\",\n Lookup: \"lookup\",\n Search: \"search\",\n Rag: \"rag\"\n };\n})(ReadAccessLogResponse || (ReadAccessLogResponse = {}));\n\n// api/types/RecordRequest.ts\nvar RecordRequest;\n((RecordRequest2) => {\n RecordRequest2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(RecordRequest || (RecordRequest = {}));\n\n// api/types/RecordResponse.ts\nvar RecordResponse;\n((RecordResponse2) => {\n RecordResponse2.IndexStatus = {\n PendingIndex: \"PENDING_INDEX\",\n Indexed: \"INDEXED\",\n Failed: \"FAILED\"\n };\n RecordResponse2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(RecordResponse || (RecordResponse = {}));\n\n// api/types/RenderHintDef.ts\nvar RenderHintDef;\n((RenderHintDef2) => {\n RenderHintDef2.Widget = {\n Text: \"text\",\n Textarea: \"textarea\",\n Select: \"select\",\n Date: \"date\",\n Checkbox: \"checkbox\"\n };\n})(RenderHintDef || (RenderHintDef = {}));\n\n// api/types/SchemaRequest.ts\nvar SchemaRequest;\n((SchemaRequest2) => {\n SchemaRequest2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n SchemaRequest2.StorageProfile = {\n Standard: \"STANDARD\",\n LowLatency: \"LOW_LATENCY\",\n LargePayload: \"LARGE_PAYLOAD\"\n };\n let AllowedSurfaces;\n ((AllowedSurfaces2) => {\n AllowedSurfaces2.Item = {\n Record: \"record\",\n Document: \"document\",\n User: \"user\",\n Org: \"org\",\n Client: \"client\"\n };\n })(AllowedSurfaces = SchemaRequest2.AllowedSurfaces || (SchemaRequest2.AllowedSurfaces = {}));\n})(SchemaRequest || (SchemaRequest = {}));\n\n// api/types/SchemaResponse.ts\nvar SchemaResponse;\n((SchemaResponse2) => {\n SchemaResponse2.StorageProfile = {\n Standard: \"STANDARD\",\n LowLatency: \"LOW_LATENCY\",\n LargePayload: \"LARGE_PAYLOAD\"\n };\n SchemaResponse2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n let AllowedSurfaces;\n ((AllowedSurfaces2) => {\n AllowedSurfaces2.Item = {\n Record: \"record\",\n Document: \"document\",\n User: \"user\",\n Org: \"org\",\n Client: \"client\"\n };\n })(AllowedSurfaces = SchemaResponse2.AllowedSurfaces || (SchemaResponse2.AllowedSurfaces = {}));\n})(SchemaResponse || (SchemaResponse = {}));\n\n// api/types/ScopedKeyResponse.ts\nvar ScopedKeyResponse;\n((ScopedKeyResponse2) => {\n ScopedKeyResponse2.UserType = {\n Human: \"HUMAN\",\n Service: \"SERVICE\"\n };\n ScopedKeyResponse2.Status = {\n Active: \"active\",\n Revoked: \"revoked\"\n };\n ScopedKeyResponse2.KeyType = {\n Scoped: \"scoped\"\n };\n})(ScopedKeyResponse || (ScopedKeyResponse = {}));\n\n// api/types/SearchResult.ts\nvar SearchResult;\n((SearchResult2) => {\n SearchResult2.SourceType = {\n PartnerDocument: \"PartnerDocument\",\n GenericRecord: \"GenericRecord\"\n };\n})(SearchResult || (SearchResult = {}));\n\n// api/types/SearchResultsEvent.ts\nvar SearchResultsEvent;\n((SearchResultsEvent2) => {\n SearchResultsEvent2.Event = {\n SearchResults: \"search_results\"\n };\n})(SearchResultsEvent || (SearchResultsEvent = {}));\n\n// api/types/TruncationWarningEvent.ts\nvar TruncationWarningEvent;\n((TruncationWarningEvent2) => {\n TruncationWarningEvent2.Event = {\n TruncationWarning: \"truncation_warning\"\n };\n TruncationWarningEvent2.Reason = {\n ContextWindowBudget: \"context_window_budget\"\n };\n})(TruncationWarningEvent || (TruncationWarningEvent = {}));\n\n// api/types/UserRequest.ts\nvar UserRequest;\n((UserRequest2) => {\n UserRequest2.Status = {\n Active: \"ACTIVE\",\n Suspended: \"SUSPENDED\",\n Pending: \"PENDING\"\n };\n UserRequest2.Type = {\n Human: \"HUMAN\",\n Service: \"SERVICE\"\n };\n})(UserRequest || (UserRequest = {}));\n\n// api/types/UserResponse.ts\nvar UserResponse;\n((UserResponse2) => {\n UserResponse2.Status = {\n Active: \"ACTIVE\",\n Suspended: \"SUSPENDED\",\n Pending: \"PENDING\"\n };\n UserResponse2.Type = {\n Human: \"HUMAN\",\n Service: \"SERVICE\"\n };\n})(UserResponse || (UserResponse = {}));\n\n// core/auth/AuthProvider.ts\nfunction isAuthProvider(value) {\n return typeof value === \"object\" && value !== null && \"getAuthRequest\" in value && typeof value.getAuthRequest === \"function\";\n}\n\n// core/auth/NoOpAuthProvider.ts\nvar NoOpAuthProvider = class {\n getAuthRequest() {\n return Promise.resolve({ headers: {} });\n }\n};\n\n// core/fetcher/EndpointSupplier.ts\nvar EndpointSupplier = {\n get: async (supplier, arg) => {\n if (typeof supplier === \"function\") {\n return supplier(arg);\n } else {\n return supplier;\n }\n }\n};\n\n// core/logging/logger.ts\nvar LogLevel = {\n Debug: \"debug\",\n Info: \"info\",\n Warn: \"warn\",\n Error: \"error\"\n};\nvar logLevelMap = {\n [LogLevel.Debug]: 1,\n [LogLevel.Info]: 2,\n [LogLevel.Warn]: 3,\n [LogLevel.Error]: 4\n};\nvar ConsoleLogger = class {\n debug(message, ...args) {\n console.debug(message, ...args);\n }\n info(message, ...args) {\n console.info(message, ...args);\n }\n warn(message, ...args) {\n console.warn(message, ...args);\n }\n error(message, ...args) {\n console.error(message, ...args);\n }\n};\nvar Logger = class {\n /**\n * Creates a new logger instance.\n * @param config - Logger configuration\n */\n constructor(config) {\n this.level = logLevelMap[config.level];\n this.logger = config.logger;\n this.silent = config.silent;\n }\n /**\n * Checks if a log level should be output based on configuration.\n * @param level - The log level to check\n * @returns True if the level should be logged\n */\n shouldLog(level) {\n return !this.silent && this.level <= logLevelMap[level];\n }\n /**\n * Checks if debug logging is enabled.\n * @returns True if debug logs should be output\n */\n isDebug() {\n return this.shouldLog(LogLevel.Debug);\n }\n /**\n * Logs a debug message if debug logging is enabled.\n * @param message - The message to log\n * @param args - Additional arguments to log\n */\n debug(message, ...args) {\n if (this.isDebug()) {\n this.logger.debug(message, ...args);\n }\n }\n /**\n * Checks if info logging is enabled.\n * @returns True if info logs should be output\n */\n isInfo() {\n return this.shouldLog(LogLevel.Info);\n }\n /**\n * Logs an info message if info logging is enabled.\n * @param message - The message to log\n * @param args - Additional arguments to log\n */\n info(message, ...args) {\n if (this.isInfo()) {\n this.logger.info(message, ...args);\n }\n }\n /**\n * Checks if warning logging is enabled.\n * @returns True if warning logs should be output\n */\n isWarn() {\n return this.shouldLog(LogLevel.Warn);\n }\n /**\n * Logs a warning message if warning logging is enabled.\n * @param message - The message to log\n * @param args - Additional arguments to log\n */\n warn(message, ...args) {\n if (this.isWarn()) {\n this.logger.warn(message, ...args);\n }\n }\n /**\n * Checks if error logging is enabled.\n * @returns True if error logs should be output\n */\n isError() {\n return this.shouldLog(LogLevel.Error);\n }\n /**\n * Logs an error message if error logging is enabled.\n * @param message - The message to log\n * @param args - Additional arguments to log\n */\n error(message, ...args) {\n if (this.isError()) {\n this.logger.error(message, ...args);\n }\n }\n};\nfunction createLogger(config) {\n if (config == null) {\n return defaultLogger;\n }\n if (config instanceof Logger) {\n return config;\n }\n config = config ?? {};\n config.level ?? (config.level = LogLevel.Info);\n config.logger ?? (config.logger = new ConsoleLogger());\n config.silent ?? (config.silent = true);\n return new Logger(config);\n}\nvar defaultLogger = new Logger({\n level: LogLevel.Info,\n logger: new ConsoleLogger(),\n silent: true\n});\n\n// core/url/qs.ts\nvar defaultQsOptions = {\n arrayFormat: \"indices\",\n encode: true\n};\nfunction encodeValue(value, shouldEncode) {\n if (value === void 0) {\n return \"\";\n }\n if (value === null) {\n return \"\";\n }\n const stringValue = String(value);\n return shouldEncode ? encodeURIComponent(stringValue) : stringValue;\n}\nfunction stringifyObject(obj, prefix = \"\", options) {\n const parts = [];\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}[${key}]` : key;\n if (value === void 0) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n const effectiveFormat = options.arrayFormat;\n if (effectiveFormat === \"comma\") {\n const encodedKey = options.encode ? encodeURIComponent(fullKey) : fullKey;\n const encodedValues = value.filter((item) => item !== void 0 && item !== null).map((item) => encodeValue(item, options.encode));\n if (encodedValues.length > 0) {\n parts.push(`${encodedKey}=${encodedValues.join(\",\")}`);\n }\n } else {\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n if (item === void 0) {\n continue;\n }\n if (typeof item === \"object\" && !Array.isArray(item) && item !== null) {\n const arrayKey = effectiveFormat === \"indices\" ? `${fullKey}[${i}]` : fullKey;\n parts.push(...stringifyObject(item, arrayKey, options));\n } else {\n const arrayKey = effectiveFormat === \"indices\" ? `${fullKey}[${i}]` : fullKey;\n const encodedKey = options.encode ? encodeURIComponent(arrayKey) : arrayKey;\n parts.push(`${encodedKey}=${encodeValue(item, options.encode)}`);\n }\n }\n }\n } else if (typeof value === \"object\" && value !== null) {\n if (Object.keys(value).length === 0) {\n continue;\n }\n parts.push(...stringifyObject(value, fullKey, options));\n } else {\n const encodedKey = options.encode ? encodeURIComponent(fullKey) : fullKey;\n parts.push(`${encodedKey}=${encodeValue(value, options.encode)}`);\n }\n }\n return parts;\n}\nfunction toQueryString(obj, options) {\n if (obj == null || typeof obj !== \"object\") {\n return \"\";\n }\n const parts = stringifyObject(obj, \"\", {\n ...defaultQsOptions,\n ...options\n });\n return parts.join(\"&\");\n}\n\n// core/fetcher/createRequestUrl.ts\nfunction createRequestUrl(baseUrl, queryParameters) {\n const queryString = toQueryString(queryParameters, { arrayFormat: \"repeat\" });\n return queryString ? `${baseUrl}?${queryString}` : baseUrl;\n}\n\n// core/fetcher/BinaryResponse.ts\nfunction getBinaryResponse(response) {\n const binaryResponse = {\n get bodyUsed() {\n return response.bodyUsed;\n },\n stream: () => response.body,\n arrayBuffer: response.arrayBuffer.bind(response),\n blob: response.blob.bind(response)\n };\n if (\"bytes\" in response && typeof response.bytes === \"function\") {\n binaryResponse.bytes = response.bytes.bind(response);\n }\n return binaryResponse;\n}\n\n// core/fetcher/getResponseBody.ts\nasync function getResponseBody(response, responseType) {\n switch (responseType) {\n case \"binary-response\":\n return getBinaryResponse(response);\n case \"blob\":\n return await response.blob();\n case \"arrayBuffer\":\n return await response.arrayBuffer();\n case \"sse\":\n if (response.body == null) {\n return {\n ok: false,\n error: {\n reason: \"body-is-null\",\n statusCode: response.status\n }\n };\n }\n return response.body;\n case \"streaming\":\n if (response.body == null) {\n return {\n ok: false,\n error: {\n reason: \"body-is-null\",\n statusCode: response.status\n }\n };\n }\n return response.body;\n case \"text\":\n return await response.text();\n }\n const text = await response.text();\n if (text.length > 0) {\n try {\n const responseBody = fromJson(text);\n return responseBody;\n } catch (_err) {\n return {\n ok: false,\n error: {\n reason: \"non-json\",\n statusCode: response.status,\n rawBody: text\n }\n };\n }\n }\n return void 0;\n}\n\n// core/fetcher/getErrorResponseBody.ts\nasync function getErrorResponseBody(response) {\n let contentType = response.headers.get(\"Content-Type\")?.toLowerCase();\n if (contentType == null || contentType.length === 0) {\n return getResponseBody(response);\n }\n if (contentType.indexOf(\";\") !== -1) {\n contentType = contentType.split(\";\")[0]?.trim() ?? \"\";\n }\n switch (contentType) {\n case \"application/hal+json\":\n case \"application/json\":\n case \"application/ld+json\":\n case \"application/problem+json\":\n case \"application/vnd.api+json\":\n case \"text/json\": {\n const text = await response.text();\n return text.length > 0 ? fromJson(text) : void 0;\n }\n default:\n if (contentType.startsWith(\"application/vnd.\") && contentType.endsWith(\"+json\")) {\n const text = await response.text();\n return text.length > 0 ? fromJson(text) : void 0;\n }\n return await response.text();\n }\n}\n\n// core/fetcher/getFetchFn.ts\nasync function getFetchFn() {\n return fetch;\n}\n\n// core/fetcher/getRequestBody.ts\nasync function getRequestBody({ body, type }) {\n if (type === \"form\") {\n return toQueryString(body, { arrayFormat: \"repeat\", encode: true });\n }\n if (type.includes(\"json\")) {\n return toJson(body);\n } else {\n return body;\n }\n}\n\n// core/fetcher/Headers.ts\nvar Headers2;\nif (typeof globalThis.Headers !== \"undefined\") {\n Headers2 = globalThis.Headers;\n} else {\n Headers2 = class Headers3 {\n constructor(init) {\n this.headers = /* @__PURE__ */ new Map();\n if (init) {\n if (init instanceof Headers3) {\n init.forEach((value, key) => this.append(key, value));\n } else if (Array.isArray(init)) {\n for (const [key, value] of init) {\n if (typeof key === \"string\" && typeof value === \"string\") {\n this.append(key, value);\n } else {\n throw new TypeError(\"Each header entry must be a [string, string] tuple\");\n }\n }\n } else {\n for (const [key, value] of Object.entries(init)) {\n if (typeof value === \"string\") {\n this.append(key, value);\n } else {\n throw new TypeError(\"Header values must be strings\");\n }\n }\n }\n }\n }\n append(name, value) {\n const key = name.toLowerCase();\n const existing = this.headers.get(key) || [];\n this.headers.set(key, [...existing, value]);\n }\n delete(name) {\n const key = name.toLowerCase();\n this.headers.delete(key);\n }\n get(name) {\n const key = name.toLowerCase();\n const values = this.headers.get(key);\n return values ? values.join(\", \") : null;\n }\n has(name) {\n const key = name.toLowerCase();\n return this.headers.has(key);\n }\n set(name, value) {\n const key = name.toLowerCase();\n this.headers.set(key, [value]);\n }\n forEach(callbackfn, thisArg) {\n const boundCallback = thisArg ? callbackfn.bind(thisArg) : callbackfn;\n this.headers.forEach((values, key) => boundCallback(values.join(\", \"), key, this));\n }\n getSetCookie() {\n return this.headers.get(\"set-cookie\") || [];\n }\n *entries() {\n for (const [key, values] of this.headers.entries()) {\n yield [key, values.join(\", \")];\n }\n }\n *keys() {\n yield* this.headers.keys();\n }\n *values() {\n for (const values of this.headers.values()) {\n yield values.join(\", \");\n }\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n };\n}\n\n// core/fetcher/signals.ts\nvar TIMEOUT = \"timeout\";\nfunction getTimeoutSignal(timeoutMs) {\n const controller = new AbortController();\n const abortId = setTimeout(() => controller.abort(TIMEOUT), timeoutMs);\n return { signal: controller.signal, abortId };\n}\nfunction anySignal(...args) {\n const signals = args.length === 1 && Array.isArray(args[0]) ? args[0] : args;\n const controller = new AbortController();\n for (const signal of signals) {\n if (signal.aborted) {\n controller.abort(signal?.reason);\n break;\n }\n signal.addEventListener(\"abort\", () => controller.abort(signal?.reason), {\n signal: controller.signal\n });\n }\n return controller.signal;\n}\n\n// core/fetcher/makeRequest.ts\nvar _cacheNoStoreSupported;\nfunction isCacheNoStoreSupported() {\n if (_cacheNoStoreSupported != null) {\n return _cacheNoStoreSupported;\n }\n try {\n new Request(\"http://localhost\", { cache: \"no-store\" });\n _cacheNoStoreSupported = true;\n } catch {\n _cacheNoStoreSupported = false;\n }\n return _cacheNoStoreSupported;\n}\nvar makeRequest = async (fetchFn, url, method, headers, requestBody, timeoutMs, abortSignal, withCredentials, duplex, disableCache) => {\n const signals = [];\n let timeoutAbortId;\n if (timeoutMs != null) {\n const { signal, abortId } = getTimeoutSignal(timeoutMs);\n timeoutAbortId = abortId;\n signals.push(signal);\n }\n if (abortSignal != null) {\n signals.push(abortSignal);\n }\n const newSignals = anySignal(signals);\n const response = await fetchFn(url, {\n method,\n headers,\n body: requestBody,\n signal: newSignals,\n credentials: withCredentials ? \"include\" : void 0,\n // @ts-ignore\n duplex,\n ...disableCache && isCacheNoStoreSupported() ? { cache: \"no-store\" } : {}\n });\n if (timeoutAbortId != null) {\n clearTimeout(timeoutAbortId);\n }\n return response;\n};\n\n// core/fetcher/RawResponse.ts\nvar abortRawResponse = {\n headers: new Headers2(),\n redirected: false,\n status: 499,\n statusText: \"Client Closed Request\",\n type: \"error\",\n url: \"\"\n};\nvar unknownRawResponse = {\n headers: new Headers2(),\n redirected: false,\n status: 0,\n statusText: \"Unknown Error\",\n type: \"error\",\n url: \"\"\n};\nfunction toRawResponse(response) {\n return {\n headers: response.headers,\n redirected: response.redirected,\n status: response.status,\n statusText: response.statusText,\n type: response.type,\n url: response.url\n };\n}\n\n// core/fetcher/requestWithRetries.ts\nvar INITIAL_RETRY_DELAY = 1e3;\nvar MAX_RETRY_DELAY = 6e4;\nvar DEFAULT_MAX_RETRIES = 2;\nvar JITTER_FACTOR = 0.2;\nfunction isRetryableStatusCode(statusCode) {\n return [408, 429].includes(statusCode) || statusCode >= 500;\n}\nfunction addPositiveJitter(delay) {\n const jitterMultiplier = 1 + Math.random() * JITTER_FACTOR;\n return delay * jitterMultiplier;\n}\nfunction addSymmetricJitter(delay) {\n const jitterMultiplier = 1 + (Math.random() - 0.5) * JITTER_FACTOR;\n return delay * jitterMultiplier;\n}\nfunction getRetryDelayFromHeaders(response, retryAttempt) {\n const retryAfter = response.headers.get(\"Retry-After\");\n if (retryAfter) {\n const retryAfterSeconds = parseInt(retryAfter, 10);\n if (!Number.isNaN(retryAfterSeconds) && retryAfterSeconds > 0) {\n return Math.min(retryAfterSeconds * 1e3, MAX_RETRY_DELAY);\n }\n const retryAfterDate = new Date(retryAfter);\n if (!Number.isNaN(retryAfterDate.getTime())) {\n const delay = retryAfterDate.getTime() - Date.now();\n if (delay > 0) {\n return Math.min(Math.max(delay, 0), MAX_RETRY_DELAY);\n }\n }\n }\n const rateLimitReset = response.headers.get(\"X-RateLimit-Reset\");\n if (rateLimitReset) {\n const resetTime = parseInt(rateLimitReset, 10);\n if (!Number.isNaN(resetTime)) {\n const delay = resetTime * 1e3 - Date.now();\n if (delay > 0) {\n return addPositiveJitter(Math.min(delay, MAX_RETRY_DELAY));\n }\n }\n }\n return addSymmetricJitter(Math.min(INITIAL_RETRY_DELAY * 2 ** retryAttempt, MAX_RETRY_DELAY));\n}\nasync function requestWithRetries(requestFn, maxRetries = DEFAULT_MAX_RETRIES) {\n let response = await requestFn();\n for (let i = 0; i < maxRetries; ++i) {\n if (isRetryableStatusCode(response.status)) {\n const delay = getRetryDelayFromHeaders(response, i);\n await new Promise((resolve) => setTimeout(resolve, delay));\n response = await requestFn();\n } else {\n break;\n }\n }\n return response;\n}\n\n// core/fetcher/Fetcher.ts\nvar SENSITIVE_HEADERS = /* @__PURE__ */ new Set([\n \"authorization\",\n \"www-authenticate\",\n \"x-api-key\",\n \"api-key\",\n \"apikey\",\n \"x-api-token\",\n \"x-auth-token\",\n \"auth-token\",\n \"cookie\",\n \"set-cookie\",\n \"proxy-authorization\",\n \"proxy-authenticate\",\n \"x-csrf-token\",\n \"x-xsrf-token\",\n \"x-session-token\",\n \"x-access-token\"\n]);\nfunction redactHeaders(headers) {\n const filtered = {};\n for (const [key, value] of headers instanceof Headers2 ? headers.entries() : Object.entries(headers)) {\n if (SENSITIVE_HEADERS.has(key.toLowerCase())) {\n filtered[key] = \"[REDACTED]\";\n } else {\n filtered[key] = value;\n }\n }\n return filtered;\n}\nvar SENSITIVE_QUERY_PARAMS = /* @__PURE__ */ new Set([\n \"api_key\",\n \"api-key\",\n \"apikey\",\n \"token\",\n \"access_token\",\n \"access-token\",\n \"auth_token\",\n \"auth-token\",\n \"password\",\n \"passwd\",\n \"secret\",\n \"api_secret\",\n \"api-secret\",\n \"apisecret\",\n \"key\",\n \"session\",\n \"session_id\",\n \"session-id\"\n]);\nfunction redactQueryParameters(queryParameters) {\n if (queryParameters == null) {\n return void 0;\n }\n const redacted = {};\n for (const [key, value] of Object.entries(queryParameters)) {\n redacted[key] = SENSITIVE_QUERY_PARAMS.has(key.toLowerCase()) ? \"[REDACTED]\" : value;\n }\n return redacted;\n}\nfunction redactUrl(url) {\n const protocolIndex = url.indexOf(\"://\");\n if (protocolIndex === -1) return url;\n const afterProtocol = protocolIndex + 3;\n const pathStart = url.indexOf(\"/\", afterProtocol);\n let queryStart = url.indexOf(\"?\", afterProtocol);\n let fragmentStart = url.indexOf(\"#\", afterProtocol);\n const firstDelimiter = Math.min(\n pathStart === -1 ? url.length : pathStart,\n queryStart === -1 ? url.length : queryStart,\n fragmentStart === -1 ? url.length : fragmentStart\n );\n let atIndex = -1;\n for (let i = afterProtocol; i < firstDelimiter; i++) {\n if (url[i] === \"@\") {\n atIndex = i;\n }\n }\n if (atIndex !== -1) {\n url = `${url.slice(0, afterProtocol)}[REDACTED]@${url.slice(atIndex + 1)}`;\n }\n queryStart = url.indexOf(\"?\");\n if (queryStart === -1) return url;\n fragmentStart = url.indexOf(\"#\", queryStart);\n const queryEnd = fragmentStart !== -1 ? fragmentStart : url.length;\n const queryString = url.slice(queryStart + 1, queryEnd);\n if (queryString.length === 0) return url;\n const lower = queryString.toLowerCase();\n const hasSensitive = lower.includes(\"token\") || lower.includes(\"key\") || lower.includes(\"password\") || lower.includes(\"passwd\") || lower.includes(\"secret\") || lower.includes(\"session\") || lower.includes(\"auth\");\n if (!hasSensitive) {\n return url;\n }\n const redactedParams = [];\n const params = queryString.split(\"&\");\n for (const param of params) {\n const equalIndex = param.indexOf(\"=\");\n if (equalIndex === -1) {\n redactedParams.push(param);\n continue;\n }\n const key = param.slice(0, equalIndex);\n let shouldRedact = SENSITIVE_QUERY_PARAMS.has(key.toLowerCase());\n if (!shouldRedact && key.includes(\"%\")) {\n try {\n const decodedKey = decodeURIComponent(key);\n shouldRedact = SENSITIVE_QUERY_PARAMS.has(decodedKey.toLowerCase());\n } catch {\n }\n }\n redactedParams.push(shouldRedact ? `${key}=[REDACTED]` : param);\n }\n return url.slice(0, queryStart + 1) + redactedParams.join(\"&\") + url.slice(queryEnd);\n}\nasync function getHeaders(args) {\n const newHeaders = new Headers2();\n newHeaders.set(\n \"Accept\",\n args.responseType === \"json\" ? \"application/json\" : args.responseType === \"text\" ? \"text/plain\" : args.responseType === \"sse\" ? \"text/event-stream\" : \"*/*\"\n );\n if (args.body !== void 0 && args.contentType != null) {\n newHeaders.set(\"Content-Type\", args.contentType);\n }\n if (args.headers == null) {\n return newHeaders;\n }\n for (const [key, value] of Object.entries(args.headers)) {\n const result = await EndpointSupplier.get(value, { endpointMetadata: args.endpointMetadata ?? {} });\n if (typeof result === \"string\") {\n newHeaders.set(key, result);\n continue;\n }\n if (result == null) {\n continue;\n }\n newHeaders.set(key, `${result}`);\n }\n return newHeaders;\n}\nasync function fetcherImpl(args) {\n let url = args.url;\n if (args.queryString != null && args.queryString.length > 0) {\n url = `${url}?${args.queryString}`;\n } else {\n url = createRequestUrl(args.url, args.queryParameters);\n }\n const requestBody = await getRequestBody({\n body: args.body,\n type: args.requestType ?? \"other\"\n });\n const fetchFn = args.fetchFn ?? await getFetchFn();\n const headers = await getHeaders(args);\n const logger = createLogger(args.logging);\n if (logger.isDebug()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n headers: redactHeaders(headers),\n queryParameters: redactQueryParameters(args.queryParameters),\n hasBody: requestBody != null\n };\n logger.debug(\"Making HTTP request\", metadata);\n }\n try {\n const response = await requestWithRetries(\n async () => makeRequest(\n fetchFn,\n url,\n args.method,\n headers,\n requestBody,\n args.timeoutMs,\n args.abortSignal,\n args.withCredentials,\n args.duplex,\n args.responseType === \"streaming\" || args.responseType === \"sse\"\n ),\n args.maxRetries\n );\n if (response.status >= 200 && response.status < 400) {\n if (logger.isDebug()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n statusCode: response.status,\n responseHeaders: redactHeaders(response.headers)\n };\n logger.debug(\"HTTP request succeeded\", metadata);\n }\n const body = await getResponseBody(response, args.responseType);\n return {\n ok: true,\n body,\n headers: response.headers,\n rawResponse: toRawResponse(response)\n };\n } else {\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n statusCode: response.status,\n responseHeaders: redactHeaders(Object.fromEntries(response.headers.entries()))\n };\n logger.error(\"HTTP request failed with error status\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"status-code\",\n statusCode: response.status,\n body: await getErrorResponseBody(response)\n },\n rawResponse: toRawResponse(response)\n };\n }\n } catch (error) {\n if (args.abortSignal?.aborted) {\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url)\n };\n logger.error(\"HTTP request was aborted\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"unknown\",\n errorMessage: \"The user aborted a request\",\n cause: error\n },\n rawResponse: abortRawResponse\n };\n } else if (error instanceof Error && error.name === \"AbortError\") {\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n timeoutMs: args.timeoutMs\n };\n logger.error(\"HTTP request timed out\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"timeout\",\n cause: error\n },\n rawResponse: abortRawResponse\n };\n } else if (error instanceof Error) {\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n errorMessage: error.message\n };\n logger.error(\"HTTP request failed with error\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"unknown\",\n errorMessage: error.message,\n cause: error\n },\n rawResponse: unknownRawResponse\n };\n }\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n error: toJson(error)\n };\n logger.error(\"HTTP request failed with unknown error\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"unknown\",\n errorMessage: toJson(error),\n cause: error\n },\n rawResponse: unknownRawResponse\n };\n }\n}\nvar fetcher = fetcherImpl;\n\n// core/fetcher/HttpResponsePromise.ts\nvar HttpResponsePromise = class _HttpResponsePromise extends Promise {\n constructor(promise) {\n super((resolve) => {\n resolve(void 0);\n });\n this.innerPromise = promise;\n }\n /**\n * Creates an `HttpResponsePromise` from a function that returns a promise.\n *\n * @param fn - A function that returns a promise resolving to a `WithRawResponse` object.\n * @param args - Arguments to pass to the function.\n * @returns An `HttpResponsePromise` instance.\n */\n static fromFunction(fn, ...args) {\n return new _HttpResponsePromise(fn(...args));\n }\n /**\n * Creates a function that returns an `HttpResponsePromise` from a function that returns a promise.\n *\n * @param fn - A function that returns a promise resolving to a `WithRawResponse` object.\n * @returns A function that returns an `HttpResponsePromise` instance.\n */\n static interceptFunction(fn) {\n return (...args) => {\n return _HttpResponsePromise.fromPromise(fn(...args));\n };\n }\n /**\n * Creates an `HttpResponsePromise` from an existing promise.\n *\n * @param promise - A promise resolving to a `WithRawResponse` object.\n * @returns An `HttpResponsePromise` instance.\n */\n static fromPromise(promise) {\n return new _HttpResponsePromise(promise);\n }\n /**\n * Creates an `HttpResponsePromise` from an executor function.\n *\n * @param executor - A function that takes resolve and reject callbacks to create a promise.\n * @returns An `HttpResponsePromise` instance.\n */\n static fromExecutor(executor) {\n const promise = new Promise(executor);\n return new _HttpResponsePromise(promise);\n }\n /**\n * Creates an `HttpResponsePromise` from a resolved result.\n *\n * @param result - A `WithRawResponse` object to resolve immediately.\n * @returns An `HttpResponsePromise` instance.\n */\n static fromResult(result) {\n const promise = Promise.resolve(result);\n return new _HttpResponsePromise(promise);\n }\n unwrap() {\n if (!this.unwrappedPromise) {\n this.unwrappedPromise = this.innerPromise.then(({ data }) => data);\n }\n return this.unwrappedPromise;\n }\n /** @inheritdoc */\n then(onfulfilled, onrejected) {\n return this.unwrap().then(onfulfilled, onrejected);\n }\n /** @inheritdoc */\n catch(onrejected) {\n return this.unwrap().catch(onrejected);\n }\n /** @inheritdoc */\n finally(onfinally) {\n return this.unwrap().finally(onfinally);\n }\n /**\n * Retrieves the data and raw response.\n *\n * @returns A promise resolving to a `WithRawResponse` object.\n */\n async withRawResponse() {\n return await this.innerPromise;\n }\n};\n\n// core/url/join.ts\nfunction join(base, ...segments) {\n if (!base) {\n return \"\";\n }\n if (segments.length === 0) {\n return base;\n }\n if (base.includes(\"://\")) {\n let url;\n try {\n url = new URL(base);\n } catch {\n return joinPath(base, ...segments);\n }\n const lastSegment = segments[segments.length - 1];\n const shouldPreserveTrailingSlash = lastSegment?.endsWith(\"/\");\n for (const segment of segments) {\n const cleanSegment = trimSlashes(segment);\n if (cleanSegment) {\n url.pathname = joinPathSegments(url.pathname, cleanSegment);\n }\n }\n if (shouldPreserveTrailingSlash && !url.pathname.endsWith(\"/\")) {\n url.pathname += \"/\";\n }\n return url.toString();\n }\n return joinPath(base, ...segments);\n}\nfunction joinPath(base, ...segments) {\n if (segments.length === 0) {\n return base;\n }\n let result = base;\n const lastSegment = segments[segments.length - 1];\n const shouldPreserveTrailingSlash = lastSegment?.endsWith(\"/\");\n for (const segment of segments) {\n const cleanSegment = trimSlashes(segment);\n if (cleanSegment) {\n result = joinPathSegments(result, cleanSegment);\n }\n }\n if (shouldPreserveTrailingSlash && !result.endsWith(\"/\")) {\n result += \"/\";\n }\n return result;\n}\nfunction joinPathSegments(left, right) {\n if (left.endsWith(\"/\")) {\n return left + right;\n }\n return `${left}/${right}`;\n}\nfunction trimSlashes(str) {\n if (!str) return str;\n let start = 0;\n let end = str.length;\n if (str.startsWith(\"/\")) start = 1;\n if (str.endsWith(\"/\")) end = str.length - 1;\n return start === 0 && end === str.length ? str : str.slice(start, end);\n}\n\n// core/fetcher/Supplier.ts\nvar Supplier = {\n get: async (supplier) => {\n if (typeof supplier === \"function\") {\n return supplier();\n } else {\n return supplier;\n }\n }\n};\n\n// core/fetcher/makePassthroughRequest.ts\nasync function makePassthroughRequest(input, init, clientOptions, requestOptions) {\n const logger = createLogger(clientOptions.logging);\n let url;\n let effectiveInit = init;\n if (input instanceof Request) {\n url = input.url;\n if (init == null) {\n effectiveInit = {\n method: input.method,\n headers: Object.fromEntries(input.headers.entries()),\n body: input.body,\n signal: input.signal,\n credentials: input.credentials,\n cache: input.cache,\n redirect: input.redirect,\n referrer: input.referrer,\n integrity: input.integrity,\n mode: input.mode\n };\n }\n } else {\n url = input instanceof URL ? input.toString() : input;\n }\n const baseUrl = (clientOptions.baseUrl != null ? await Supplier.get(clientOptions.baseUrl) : void 0) ?? (clientOptions.environment != null ? await Supplier.get(clientOptions.environment) : void 0);\n let fullUrl;\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n fullUrl = url;\n } else if (baseUrl != null) {\n fullUrl = join(baseUrl, url);\n } else {\n fullUrl = url;\n }\n const mergedHeaders = {};\n if (clientOptions.headers != null) {\n for (const [key, value] of Object.entries(clientOptions.headers)) {\n const resolved = await EndpointSupplier.get(value, { endpointMetadata: {} });\n if (resolved != null) {\n mergedHeaders[key.toLowerCase()] = `${resolved}`;\n }\n }\n }\n if (clientOptions.getAuthHeaders != null) {\n const authHeaders = await clientOptions.getAuthHeaders();\n for (const [key, value] of Object.entries(authHeaders)) {\n mergedHeaders[key.toLowerCase()] = value;\n }\n }\n if (effectiveInit?.headers != null) {\n const initHeaders = effectiveInit.headers instanceof Headers ? Object.fromEntries(effectiveInit.headers.entries()) : Array.isArray(effectiveInit.headers) ? Object.fromEntries(effectiveInit.headers) : effectiveInit.headers;\n for (const [key, value] of Object.entries(initHeaders)) {\n if (value != null) {\n mergedHeaders[key.toLowerCase()] = value;\n }\n }\n }\n if (requestOptions?.headers != null) {\n for (const [key, value] of Object.entries(requestOptions.headers)) {\n mergedHeaders[key.toLowerCase()] = value;\n }\n }\n const method = effectiveInit?.method ?? \"GET\";\n const body = effectiveInit?.body;\n const timeoutInSeconds = requestOptions?.timeoutInSeconds ?? clientOptions.timeoutInSeconds;\n const timeoutMs = timeoutInSeconds != null ? timeoutInSeconds * 1e3 : void 0;\n const maxRetries = requestOptions?.maxRetries ?? clientOptions.maxRetries;\n const abortSignal = requestOptions?.abortSignal ?? effectiveInit?.signal ?? void 0;\n const fetchFn = clientOptions.fetch ?? await getFetchFn();\n if (logger.isDebug()) {\n logger.debug(\"Making passthrough HTTP request\", {\n method,\n url: fullUrl,\n hasBody: body != null\n });\n }\n const response = await requestWithRetries(\n async () => makeRequest(\n fetchFn,\n fullUrl,\n method,\n mergedHeaders,\n body ?? void 0,\n timeoutMs,\n abortSignal,\n effectiveInit?.credentials === \"include\",\n void 0,\n // duplex\n false\n // disableCache\n ),\n maxRetries\n );\n if (logger.isDebug()) {\n logger.debug(\"Passthrough HTTP request completed\", {\n method,\n url: fullUrl,\n statusCode: response.status\n });\n }\n return response;\n}\n\n// core/logging/index.ts\nvar logging_exports = {};\n__export(logging_exports, {\n ConsoleLogger: () => ConsoleLogger,\n LogLevel: () => LogLevel,\n Logger: () => Logger,\n createLogger: () => createLogger\n});\n\n// core/runtime/runtime.ts\nvar RUNTIME = evaluateRuntime();\nfunction evaluateRuntime() {\n const isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n if (isBrowser) {\n return {\n type: \"browser\",\n version: window.navigator.userAgent\n };\n }\n const isCloudflare = typeof globalThis !== \"undefined\" && globalThis?.navigator?.userAgent === \"Cloudflare-Workers\";\n if (isCloudflare) {\n return {\n type: \"workerd\"\n };\n }\n const isEdgeRuntime = typeof EdgeRuntime === \"string\";\n if (isEdgeRuntime) {\n return {\n type: \"edge-runtime\"\n };\n }\n const isWebWorker = typeof self === \"object\" && typeof self?.importScripts === \"function\" && (self.constructor?.name === \"DedicatedWorkerGlobalScope\" || self.constructor?.name === \"ServiceWorkerGlobalScope\" || self.constructor?.name === \"SharedWorkerGlobalScope\");\n if (isWebWorker) {\n return {\n type: \"web-worker\"\n };\n }\n const isDeno = typeof Deno !== \"undefined\" && typeof Deno.version !== \"undefined\" && typeof Deno.version.deno !== \"undefined\";\n if (isDeno) {\n return {\n type: \"deno\",\n version: Deno.version.deno\n };\n }\n const isBun = typeof Bun !== \"undefined\" && typeof Bun.version !== \"undefined\";\n if (isBun) {\n return {\n type: \"bun\",\n version: Bun.version\n };\n }\n const isReactNative = typeof navigator !== \"undefined\" && navigator?.product === \"ReactNative\";\n if (isReactNative) {\n return {\n type: \"react-native\"\n };\n }\n const _process = typeof process !== \"undefined\" ? process : void 0;\n const isNode = typeof _process !== \"undefined\" && typeof _process.versions?.node === \"string\";\n if (isNode) {\n return {\n type: \"node\",\n version: _process.versions.node,\n parsedVersion: Number(_process.versions.node.split(\".\")[0])\n };\n }\n return {\n type: \"unknown\"\n };\n}\n\n// core/stream/Stream.ts\nvar DATA_PREFIX = \"data:\";\nvar EVENT_PREFIX = \"event:\";\nvar Stream = class {\n constructor({ stream, parse, eventShape, signal }) {\n this.controller = new AbortController();\n this.stream = stream;\n this.parse = parse;\n if (eventShape.type === \"sse\") {\n this.prefix = DATA_PREFIX;\n this.messageTerminator = \"\\n\";\n this.streamTerminator = eventShape.streamTerminator;\n this.eventDiscriminator = eventShape.eventDiscriminator;\n } else {\n this.messageTerminator = eventShape.messageTerminator;\n }\n signal?.addEventListener(\"abort\", () => this.controller.abort());\n if (typeof TextDecoder !== \"undefined\") {\n this.decoder = new TextDecoder(\"utf-8\");\n }\n }\n async *iterMessages() {\n if (this.eventDiscriminator != null) {\n yield* this.iterSseEvents();\n } else {\n yield* this.iterDataMessages();\n }\n }\n async *iterDataMessages() {\n const stream = readableStreamAsyncIterable(this.stream);\n let buf = \"\";\n let prefixSeen = false;\n for await (const chunk of stream) {\n buf += this.decodeChunk(chunk);\n let terminatorIndex;\n while ((terminatorIndex = buf.indexOf(this.messageTerminator)) >= 0) {\n let line = buf.slice(0, terminatorIndex);\n buf = buf.slice(terminatorIndex + this.messageTerminator.length);\n if (!line.trim()) {\n continue;\n }\n if (!prefixSeen && this.prefix != null) {\n const prefixIndex = line.indexOf(this.prefix);\n if (prefixIndex === -1) {\n continue;\n }\n prefixSeen = true;\n line = line.slice(prefixIndex + this.prefix.length);\n }\n if (this.streamTerminator != null && line.includes(this.streamTerminator)) {\n return;\n }\n const message = await this.parse(fromJson(line));\n yield message;\n prefixSeen = false;\n }\n }\n }\n async *iterSseEvents() {\n const stream = readableStreamAsyncIterable(this.stream);\n let buf = \"\";\n let eventType;\n let dataValue;\n for await (const chunk of stream) {\n buf += this.decodeChunk(chunk);\n let terminatorIndex;\n while ((terminatorIndex = buf.indexOf(\"\\n\")) >= 0) {\n const line = buf.slice(0, terminatorIndex).replace(/\\r$/, \"\");\n buf = buf.slice(terminatorIndex + 1);\n if (!line.trim()) {\n if (dataValue != null) {\n const message = await this.dispatchSseEvent(dataValue, eventType);\n if (message == null) {\n return;\n }\n yield message;\n }\n eventType = void 0;\n dataValue = void 0;\n continue;\n }\n if (line.startsWith(EVENT_PREFIX)) {\n eventType = line.slice(EVENT_PREFIX.length).trim();\n } else if (line.startsWith(DATA_PREFIX)) {\n const val = line.slice(DATA_PREFIX.length).trim();\n dataValue = dataValue != null ? `${dataValue}\n${val}` : val;\n }\n }\n }\n if (dataValue != null) {\n const message = await this.dispatchSseEvent(dataValue, eventType);\n if (message != null) {\n yield message;\n }\n }\n }\n /**\n * Parses and returns a single SSE event, or returns null if the event is a stream terminator.\n */\n async dispatchSseEvent(dataValue, eventType) {\n if (this.streamTerminator != null && dataValue.includes(this.streamTerminator)) {\n return null;\n }\n return this.parse(this.injectDiscriminator(fromJson(dataValue), eventType));\n }\n injectDiscriminator(parsed, eventType) {\n if (this.eventDiscriminator == null || eventType == null) {\n return parsed;\n }\n if (parsed == null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return parsed;\n }\n const obj = parsed;\n if (this.eventDiscriminator in obj) {\n return parsed;\n }\n return { [this.eventDiscriminator]: eventType, ...obj };\n }\n async *[Symbol.asyncIterator]() {\n for await (const message of this.iterMessages()) {\n yield message;\n }\n }\n decodeChunk(chunk) {\n let decoded = \"\";\n if (this.decoder != null) {\n decoded += this.decoder.decode(chunk, { stream: true });\n } else if (RUNTIME.type === \"node\" && typeof chunk !== \"undefined\") {\n decoded += Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n }\n return decoded;\n }\n};\nfunction readableStreamAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator]) {\n return stream;\n }\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done) {\n reader.releaseLock();\n }\n return result;\n } catch (e) {\n reader.releaseLock();\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: void 0 };\n },\n [Symbol.asyncIterator]() {\n return this;\n }\n };\n}\n\n// core/url/index.ts\nvar url_exports = {};\n__export(url_exports, {\n encodePathParam: () => encodePathParam,\n join: () => join,\n queryBuilder: () => queryBuilder,\n toQueryString: () => toQueryString\n});\n\n// core/url/encodePathParam.ts\nfunction encodePathParam(param) {\n if (param === null) {\n return \"null\";\n }\n const typeofParam = typeof param;\n switch (typeofParam) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n case \"number\":\n case \"boolean\":\n break;\n default:\n param = String(param);\n break;\n }\n return encodeURIComponent(param);\n}\n\n// core/url/QueryStringBuilder.ts\nfunction queryBuilder() {\n return new QueryStringBuilder();\n}\nvar QueryStringBuilder = class {\n constructor() {\n this.parts = /* @__PURE__ */ new Map();\n }\n /**\n * Adds a query parameter, serializing it immediately.\n *\n * By default arrays use \"repeat\" format (`key=a&key=b`).\n * Pass `{ style: \"comma\" }` for OpenAPI `explode: false` parameters\n * to get comma-separated values (`key=a,b,c`).\n *\n * Null / undefined values are silently skipped.\n */\n add(key, value, options) {\n if (value === void 0 || value === null) {\n return this;\n }\n const serialized = toQueryString(\n { [key]: value },\n { arrayFormat: options?.style === \"comma\" ? \"comma\" : \"repeat\" }\n );\n if (serialized.length > 0) {\n this.parts.set(key, serialized);\n }\n return this;\n }\n /**\n * Adds multiple query parameters at once from a record.\n * All parameters use the default \"repeat\" array format.\n * Null / undefined values are silently skipped.\n */\n addMany(params) {\n if (params != null) {\n for (const [key, value] of Object.entries(params)) {\n this.add(key, value);\n }\n }\n return this;\n }\n /**\n * Merges additional query parameters supplied at call-time via\n * `requestOptions.queryParams`. Overrides existing keys (last-write-wins).\n */\n mergeAdditional(additionalParams) {\n if (additionalParams != null) {\n for (const [key, value] of Object.entries(additionalParams)) {\n if (value === void 0 || value === null) {\n continue;\n }\n const serialized = toQueryString({ [key]: value }, { arrayFormat: \"repeat\" });\n if (serialized.length > 0) {\n this.parts.set(key, serialized);\n }\n }\n }\n return this;\n }\n /**\n * Returns the assembled query string (without the leading `?`).\n * Returns an empty string when no parameters were added.\n */\n build() {\n return [...this.parts.values()].join(\"&\");\n }\n};\n\n// auth/BearerAuthProvider.ts\nvar TOKEN_PARAM = \"token\";\nvar BearerAuthProvider = class _BearerAuthProvider {\n constructor(options) {\n this.options = options;\n }\n static canCreate(options) {\n return options?.[TOKEN_PARAM] != null;\n }\n async getAuthRequest({\n endpointMetadata\n } = {}) {\n const token = await Supplier.get(this.options[TOKEN_PARAM]);\n if (token == null) {\n throw new VectrosError({\n message: _BearerAuthProvider.AUTH_CONFIG_ERROR_MESSAGE\n });\n }\n return {\n headers: { Authorization: `Bearer ${token}` }\n };\n }\n};\n((BearerAuthProvider2) => {\n BearerAuthProvider2.AUTH_SCHEME = \"BearerAuth\";\n BearerAuthProvider2.AUTH_CONFIG_ERROR_MESSAGE = `Please provide '${TOKEN_PARAM}' when initializing the client`;\n function createInstance(options) {\n return new BearerAuthProvider2(options);\n }\n BearerAuthProvider2.createInstance = createInstance;\n})(BearerAuthProvider || (BearerAuthProvider = {}));\n\n// core/headers.ts\nfunction mergeHeaders(...headersArray) {\n const result = {};\n for (const [key, value] of headersArray.filter((headers) => headers != null).flatMap((headers) => Object.entries(headers))) {\n const insensitiveKey = key.toLowerCase();\n if (value != null) {\n result[insensitiveKey] = value;\n } else if (insensitiveKey in result) {\n delete result[insensitiveKey];\n }\n }\n return result;\n}\n\n// BaseClient.ts\nfunction normalizeClientOptions(options) {\n const headers = mergeHeaders(\n {\n \"X-Fern-Language\": \"JavaScript\",\n \"X-Fern-Runtime\": RUNTIME.type,\n \"X-Fern-Runtime-Version\": RUNTIME.version\n },\n options?.headers\n );\n return {\n ...options,\n logging: logging_exports.createLogger(options?.logging),\n headers\n };\n}\nfunction normalizeClientOptionsWithAuth(options) {\n const normalized = normalizeClientOptions(options);\n if (options.auth === false) {\n normalized.authProvider = new NoOpAuthProvider();\n return normalized;\n }\n if (options.auth != null) {\n if (typeof options.auth === \"function\") {\n normalized.authProvider = { getAuthRequest: options.auth };\n return normalized;\n }\n if (isAuthProvider(options.auth)) {\n normalized.authProvider = options.auth;\n return normalized;\n }\n Object.assign(normalized, options.auth);\n }\n const normalizedWithNoOpAuthProvider = withNoOpAuthProvider(normalized);\n normalized.authProvider ?? (normalized.authProvider = new BearerAuthProvider(normalizedWithNoOpAuthProvider));\n return normalized;\n}\nfunction withNoOpAuthProvider(options) {\n return {\n ...options,\n authProvider: new NoOpAuthProvider()\n };\n}\n\n// errors/handleNonStatusCodeError.ts\nfunction handleNonStatusCodeError(error, rawResponse, method, path) {\n switch (error.reason) {\n case \"non-json\":\n throw new VectrosError({\n statusCode: error.statusCode,\n body: error.rawBody,\n rawResponse\n });\n case \"body-is-null\":\n throw new VectrosError({\n statusCode: error.statusCode,\n rawResponse\n });\n case \"timeout\":\n throw new VectrosTimeoutError(`Timeout exceeded when calling ${method} ${path}.`, {\n cause: error.cause\n });\n case \"unknown\":\n throw new VectrosError({\n message: error.errorMessage,\n rawResponse,\n cause: error.cause\n });\n default:\n throw new VectrosError({\n message: \"Unknown error\",\n rawResponse\n });\n }\n}\n\n// api/resources/auth/client/Client.ts\nvar AuthClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns the platform's JWT signing public key in RFC 7517 JWKS format. Use it with any JWKS-aware JWT library to verify `inv_*` invite tokens, `st_*` scoped tokens, and other platform-signed tokens locally, without calling back to the API for each verification. The response carries a one-hour `Cache-Control`, so cache it and re-fetch roughly hourly rather than on every verification. The `kid` value changes when the key rotates; re-fetch this document whenever you encounter a token signed with an unknown `kid`.\n *\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.InternalServerError}\n *\n * @example\n * await client.auth.getJwks()\n */\n getJwks(requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getJwks(requestOptions));\n }\n async __getJwks(requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/auth/jwks\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 500:\n throw new InternalServerError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/auth/jwks\");\n }\n /**\n * Returns a page of per-subject PHI read-access rows: who read which subject's PHI, when, against which record, and whether any sensitive value was actually revealed in plaintext. Metadata only — never the PHI itself. This is the disclosure-accounting surface from which a covered entity derives its HIPAA §164.528 accounting of disclosures. Provide at least one query axis: a subject (`subjectType` + `subjectId`, plus optional `clientId`) within a `contextId` for the primary accounting query; `resourceId` within a `contextId` for 'who read this record'; `callerKeyId` for 'what did this credential read' (account-wide forensic); or `contextId` alone to enumerate a whole context. `from`/`to` bound the time window. Results are scoped to your account, derived from your token — never from input. Requires the `access-log:r` scope.\n *\n * @param {Vectros.GetAccessLogRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.getAccessLog({\n * subjectType: \"user\",\n * subjectId: \"user_abc123\",\n * contextId: \"ctx_intake\",\n * clientId: \"client_xyz789\",\n * action: \"read\",\n * callerKeyId: \"key_abc123\",\n * resourceType: \"intake_form\",\n * resourceId: \"rec_456\"\n * })\n */\n getAccessLog(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAccessLog(request, requestOptions));\n }\n async __getAccessLog(request = {}, requestOptions) {\n const {\n subjectType,\n subjectId,\n contextId,\n clientId,\n from: from_,\n to,\n action,\n callerKeyId,\n resourceType,\n resourceId,\n revealedSensitive,\n startFrom,\n limit\n } = request;\n const _queryParams = {\n subjectType,\n subjectId,\n contextId,\n clientId,\n from: from_,\n to,\n action,\n callerKeyId,\n resourceType,\n resourceId,\n revealedSensitive,\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/access-log\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/access-log\");\n }\n /**\n * Lists all of your scoped API keys (`ssk_*`) across both your live and test environments. Revoked keys are excluded. Requires the `keys:r` scope.\n *\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.listScopedKeys()\n */\n listScopedKeys(requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listScopedKeys(requestOptions));\n }\n async __listScopedKeys(requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/keys/scoped\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/keys/scoped\");\n }\n /**\n * Creates a scoped API key (an `ssk_*` secret) that inherits its permissions from an existing access profile in your account. The call is idempotent on the combination of tenant, context, user, and key name: re-issuing the same request returns the existing key WITHOUT re-disclosing its raw secret. The raw key is returned ONLY in this response — store it securely, as it cannot be retrieved again. Requires the `keys:c` scope.\n *\n * @param {Vectros.CreateScopedKeyRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.createScopedKey({\n * keyName: \"research-bot production\",\n * tenantId: \"ten_live_xxx\",\n * contextId: \"myapp\",\n * userId: \"alice-001\"\n * })\n */\n createScopedKey(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createScopedKey(request, requestOptions));\n }\n async __createScopedKey(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/keys/scoped\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/admin/keys/scoped\");\n }\n /**\n * Returns the metadata for a single scoped API key. The raw secret is NOT included — it is only ever returned once, when the key is first created. Requires the `keys:r` scope.\n *\n * @param {Vectros.GetScopedKeyRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getScopedKey({\n * keyId: \"keyId\"\n * })\n */\n getScopedKey(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getScopedKey(request, requestOptions));\n }\n async __getScopedKey(request, requestOptions) {\n const { keyId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/admin/keys/scoped/${url_exports.encodePathParam(keyId)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/keys/scoped/{keyId}\");\n }\n /**\n * Revokes a scoped API key. Its status changes to `revoked` and it stops working within about 5 minutes, the maximum time authorization is cached. Revocation is permanent. Requires the `keys:d` scope.\n *\n * @param {Vectros.RevokeScopedKeyRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.revokeScopedKey({\n * keyId: \"keyId\"\n * })\n */\n revokeScopedKey(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__revokeScopedKey(request, requestOptions));\n }\n async __revokeScopedKey(request, requestOptions) {\n const { keyId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/admin/keys/scoped/${url_exports.encodePathParam(keyId)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"DELETE\",\n \"/v1/admin/keys/scoped/{keyId}\"\n );\n }\n /**\n * Returns recent API call logs for your account. Each entry represents one API request; request and response bodies are never logged. `startTime` and `endTime` must be ISO-8601 UTC (e.g. `2025-01-15T09:00:00Z`); `endTime` defaults to now. Filter by resource, method, key id, or context id, or set `errorsOnly` to see only failures. Results are scoped to your account, derived from your token — never from input. Requires the `logs:r` scope.\n *\n * @param {Vectros.GetAdminLogsRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.getAdminLogs({\n * startTime: \"startTime\",\n * resource: \"documents\",\n * method: \"POST\",\n * keyId: \"key_abc123\",\n * contextId: \"ctx_intake\"\n * })\n */\n getAdminLogs(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAdminLogs(request, requestOptions));\n }\n async __getAdminLogs(request, requestOptions) {\n const { startTime, endTime, resource, method, keyId, contextId, errorsOnly, limit } = request;\n const _queryParams = {\n startTime,\n endTime,\n resource,\n method,\n keyId,\n contextId,\n errorsOnly,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/logs\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/logs\");\n }\n /**\n * Returns the access profiles assigned within the given app context — in effect, who has access to this context and with what scopes. Each profile binds a principal to either a set of inline scopes or a referenced role. Results are paginated. Requires the `profiles:r` scope.\n *\n * @param {Vectros.ListAccessProfilesRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.listAccessProfiles({\n * contextId: \"myapp\"\n * })\n */\n listAccessProfiles(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listAccessProfiles(request, requestOptions));\n }\n async __listAccessProfiles(request, requestOptions) {\n const { contextId, startFrom, limit } = request;\n const _queryParams = {\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/profiles\"\n );\n }\n /**\n * Creates a new access profile under the given app context. This call is idempotent by `principalId`: if a profile with the same `principalId` already exists, the existing profile is returned (with status 200) instead of creating a duplicate. You must provide exactly one of `scopes` (an inline list of scopes) or `roleId` (a reference to a role); supplying both, or neither, is rejected. `identityOverrides` may set only `orgId` and `clientId`; any other key (including the account identifier or `userId`) is rejected. If you use a scoped credential, the profile's effective scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:c` scope.\n *\n * @param {Vectros.CreateAccessProfileRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.createAccessProfile({\n * contextId: \"contextId\",\n * body: {\n * principalId: \"usr_6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * }\n * })\n */\n createAccessProfile(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createAccessProfile(request, requestOptions));\n }\n async __createAccessProfile(request, requestOptions) {\n const { contextId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles`\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"POST\",\n \"/v1/app-contexts/{contextId}/profiles\"\n );\n }\n /**\n * Returns a paginated list of the app contexts in your account. Each app context is a namespace that groups the access profiles and roles for one of your applications. Requires the `app-contexts:r` scope.\n *\n * @param {Vectros.ListAppContextsRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.listAppContexts()\n */\n listAppContexts(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listAppContexts(request, requestOptions));\n }\n async __listAppContexts(request = {}, requestOptions) {\n const { startFrom, limit } = request;\n const _queryParams = {\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/app-contexts\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/app-contexts\");\n }\n /**\n * Creates a new app context. This call is idempotent by `contextId`: if an app context with the same `contextId` already exists, the existing app context is returned (with status 200) instead of creating a duplicate. The reserved `contextId` value `vectros-admin` cannot be created through this endpoint; it is provisioned automatically for your account. Requires the `app-contexts:c` scope.\n *\n * @param {Vectros.AppContextRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.createAppContext({\n * contextId: \"myapp\",\n * name: \"My Internal App\"\n * })\n */\n createAppContext(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createAppContext(request, requestOptions));\n }\n async __createAppContext(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/app-contexts\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/app-contexts\");\n }\n /**\n * Returns the roles defined under the given app context. A role is a reusable, named bundle of scopes that access profiles can reference instead of listing scopes inline. Results are paginated. Requires the `profiles:r` scope.\n *\n * @param {Vectros.ListRolesRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.listRoles({\n * contextId: \"myapp\"\n * })\n */\n listRoles(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listRoles(request, requestOptions));\n }\n async __listRoles(request, requestOptions) {\n const { contextId, startFrom, limit } = request;\n const _queryParams = {\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/roles\"\n );\n }\n /**\n * Creates a new role under the given app context. This call is idempotent by `roleId`: if a role with the same `roleId` already exists, the existing role is returned (with status 200) instead of creating a duplicate. If you use a scoped credential, the role's scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:c` scope.\n *\n * @param {Vectros.CreateRoleRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.createRole({\n * contextId: \"contextId\",\n * body: {\n * roleId: \"engineering-member\",\n * name: \"Engineering Team Member\",\n * scopes: [{\n * allowed_actions: [\"read\", \"write\"]\n * }]\n * }\n * })\n */\n createRole(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createRole(request, requestOptions));\n }\n async __createRole(request, requestOptions) {\n const { contextId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles`\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"POST\",\n \"/v1/app-contexts/{contextId}/roles\"\n );\n }\n /**\n * Returns a single access profile by its `principalId` within the given app context. Requires the `profiles:r` scope.\n *\n * @param {Vectros.GetAccessProfileRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getAccessProfile({\n * contextId: \"contextId\",\n * principalId: \"principalId\"\n * })\n */\n getAccessProfile(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAccessProfile(request, requestOptions));\n }\n async __getAccessProfile(request, requestOptions) {\n const { contextId, principalId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles/${url_exports.encodePathParam(principalId)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/profiles/{principalId}\"\n );\n }\n /**\n * Updates an access profile. This is a partial update: any field you omit (or send as null) keeps its existing value. A profile must reference either inline `scopes` or a `roleId`, never both — so setting `scopes` clears any `roleId`, and setting `roleId` clears any inline `scopes`. The `contextId` and `principalId` are immutable. Status changes (for example active to suspended) take effect within about five minutes. If you use a scoped credential, the profile's effective scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:u` scope.\n *\n * @param {Vectros.UpdateAccessProfileRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.updateAccessProfile({\n * contextId: \"contextId\",\n * principalId: \"principalId\",\n * body: {\n * principalId: \"usr_6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * }\n * })\n */\n updateAccessProfile(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateAccessProfile(request, requestOptions));\n }\n async __updateAccessProfile(request, requestOptions) {\n const { contextId, principalId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles/${url_exports.encodePathParam(principalId)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"PUT\",\n \"/v1/app-contexts/{contextId}/profiles/{principalId}\"\n );\n }\n /**\n * Deletes an access profile. Within about five minutes (the access-profile cache lifetime), token minting for this principal in this context will be denied. Requires the `profiles:d` scope.\n *\n * @param {Vectros.DeleteAccessProfileRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.deleteAccessProfile({\n * contextId: \"contextId\",\n * principalId: \"principalId\"\n * })\n */\n deleteAccessProfile(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteAccessProfile(request, requestOptions));\n }\n async __deleteAccessProfile(request, requestOptions) {\n const { contextId, principalId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles/${url_exports.encodePathParam(principalId)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"DELETE\",\n \"/v1/app-contexts/{contextId}/profiles/{principalId}\"\n );\n }\n /**\n * Returns a single app context by its `contextId`. Requires the `app-contexts:r` scope.\n *\n * @param {Vectros.GetAppContextRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getAppContext({\n * contextId: \"myapp\"\n * })\n */\n getAppContext(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAppContext(request, requestOptions));\n }\n async __getAppContext(request, requestOptions) {\n const { contextId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/app-contexts/{contextId}\");\n }\n /**\n * Updates the name and/or description of an app context. This is a partial update: any field you omit (or send as null) keeps its existing value. The `contextId` is immutable and is taken from the URL path, so any `contextId` in the request body is ignored. Requires the `app-contexts:u` scope.\n *\n * @param {Vectros.UpdateAppContextRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.updateAppContext({\n * contextId: \"contextId\",\n * body: {\n * contextId: \"myapp\",\n * name: \"My Internal App\"\n * }\n * })\n */\n updateAppContext(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateAppContext(request, requestOptions));\n }\n async __updateAppContext(request, requestOptions) {\n const { contextId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/app-contexts/{contextId}\");\n }\n /**\n * Permanently deletes an app context and everything in it — every record, document, folder, schema, role, and access profile belonging to the context. This is irreversible. The deletion runs asynchronously: the call returns 202 immediately and the context's data drains in the background. Poll the context's `status` field to observe when the teardown completes (`purging` while draining, then `deleted`). To guard against accidental deletion, you must echo the contextId back in the `confirm` query parameter (`?confirm={contextId}`). The reserved `default` and `vectros-admin` contexts cannot be deleted. This operation requires a root API key (one beginning with `sk_`): no scoped credential, not even one with full wildcard (`*`) scope, can trigger this teardown.\n *\n * @param {Vectros.DeleteAppContextRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.deleteAppContext({\n * contextId: \"contextId\"\n * })\n */\n deleteAppContext(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteAppContext(request, requestOptions));\n }\n async __deleteAppContext(request, requestOptions) {\n const { contextId, confirm } = request;\n const _queryParams = {\n confirm\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"DELETE\",\n \"/v1/app-contexts/{contextId}\"\n );\n }\n /**\n * Returns a single role by its `roleId` within the given app context. Requires the `profiles:r` scope.\n *\n * @param {Vectros.GetRoleRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getRole({\n * contextId: \"contextId\",\n * roleId: \"roleId\"\n * })\n */\n getRole(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRole(request, requestOptions));\n }\n async __getRole(request, requestOptions) {\n const { contextId, roleId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles/${url_exports.encodePathParam(roleId)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/roles/{roleId}\"\n );\n }\n /**\n * Updates a role. This is a partial update: any field you omit (or send as null) keeps its existing value. The `roleId` and `contextId` are immutable. Scope changes take effect for access profiles that reference this role within about five minutes. If you use a scoped credential, the role's scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:u` scope.\n *\n * @param {Vectros.UpdateRoleRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.updateRole({\n * contextId: \"contextId\",\n * roleId: \"roleId\",\n * body: {\n * roleId: \"engineering-member\",\n * name: \"Engineering Team Member\",\n * scopes: [{\n * allowed_actions: [\"read\", \"write\"]\n * }]\n * }\n * })\n */\n updateRole(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateRole(request, requestOptions));\n }\n async __updateRole(request, requestOptions) {\n const { contextId, roleId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles/${url_exports.encodePathParam(roleId)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"PUT\",\n \"/v1/app-contexts/{contextId}/roles/{roleId}\"\n );\n }\n /**\n * Deletes a role. A role that is still referenced by one or more access profiles cannot be deleted: the request is rejected with 409. Reassign or delete those profiles first, then retry. Requires the `profiles:d` scope.\n *\n * @param {Vectros.DeleteRoleRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.deleteRole({\n * contextId: \"contextId\",\n * roleId: \"roleId\"\n * })\n */\n deleteRole(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteRole(request, requestOptions));\n }\n async __deleteRole(request, requestOptions) {\n const { contextId, roleId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles/${url_exports.encodePathParam(roleId)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"DELETE\",\n \"/v1/app-contexts/{contextId}/roles/{roleId}\"\n );\n }\n /**\n * Returns the audit trail of changes (create, update, and delete events) for an access profile, most recent first. Version history is always recorded for every access profile; there is no setting to turn it off. Results are paginated. Requires the `profiles:r` scope.\n *\n * @param {Vectros.GetAccessProfileVersionsRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getAccessProfileVersions({\n * contextId: \"contextId\",\n * principalId: \"principalId\"\n * })\n */\n getAccessProfileVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAccessProfileVersions(request, requestOptions));\n }\n async __getAccessProfileVersions(request, requestOptions) {\n const { contextId, principalId, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles/${url_exports.encodePathParam(principalId)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/profiles/{principalId}/versions\"\n );\n }\n /**\n * Returns the audit trail of changes (create, update, and delete events) for a role, newest first. Version history is always recorded for every role; there is no setting to turn it off. Results are paginated. Requires the `profiles:r` scope.\n *\n * @param {Vectros.GetRoleVersionsRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getRoleVersions({\n * contextId: \"myapp\",\n * roleId: \"roleId\"\n * })\n */\n getRoleVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRoleVersions(request, requestOptions));\n }\n async __getRoleVersions(request, requestOptions) {\n const { contextId, roleId, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles/${url_exports.encodePathParam(roleId)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/roles/{roleId}/versions\"\n );\n }\n /**\n * Returns full usage detail for the requested calendar month, broken down by category (search, documents, and records) with per-category credit estimates and a split between your live and test environments. Defaults to the current month when `year` and `month` are omitted. Requires the `billing:r` scope on scoped tokens; API keys always have access.\n *\n * @param {Vectros.GetUsageRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.getUsage({\n * contextId: \"default\"\n * })\n */\n getUsage(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getUsage(request, requestOptions));\n }\n async __getUsage(request = {}, requestOptions) {\n const { year, month, contextId } = request;\n const _queryParams = {\n year,\n month,\n contextId\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/usage\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/usage\");\n }\n /**\n * Returns the identity bound to your credential — your account, principal type, key id, and scope details — so you can confirm who you are authenticated as and that the credential is valid. MCP clients use this to render \"signed in as ...\" in a chat UI without a separate identity endpoint.\n *\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.auth.ping()\n */\n ping(requestOptions) {\n return HttpResponsePromise.fromPromise(this.__ping(requestOptions));\n }\n async __ping(requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/ping\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/ping\");\n }\n /**\n * Returns the access profiles for the given principal across all of your contexts. Use this to answer questions like \"which apps does this user have access to?\" — for example, to build a member-access summary. Results are confined to your account. Requires the `profiles:r` scope.\n *\n * @param {Vectros.ListProfilesForPrincipalRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.listProfilesForPrincipal({\n * principalId: \"usr_6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n listProfilesForPrincipal(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listProfilesForPrincipal(request, requestOptions));\n }\n async __listProfilesForPrincipal(request, requestOptions) {\n const { principalId, startFrom, limit } = request;\n const _queryParams = {\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/principals/${url_exports.encodePathParam(principalId)}/profiles`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/principals/{principalId}/profiles\"\n );\n }\n /**\n * Creates a short-lived JWT bearer token restricted to specific actions and, optionally, to a particular user, organization, or client. Use this to hand a narrowly-scoped credential to a browser or downstream service so it never sees your root API key. Only callable with a root API key (`sk_*`).\n *\n * @param {Vectros.TokenRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.mintToken({\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * scope: {\n * allowedActions: [\"records:crud\", \"schemas:r\"],\n * identity: {\n * \"userId\": \"550e8400-e29b-41d4-a716-446655440000\"\n * },\n * dataScope: {\n * \"orgId\": [\"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"]\n * }\n * },\n * expiresInSeconds: 3600\n * })\n */\n mintToken(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__mintToken(request, requestOptions));\n }\n async __mintToken(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/auth/token\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/auth/token\");\n }\n /**\n * Invite a new member to one of your app contexts by email. Creates a pending user with a pre-resolved access profile (their permissions on accept) and signs an invitation token. This call is idempotent on the combination of context and email: re-inviting the same email in the same context rotates the token and resends the invitation rather than creating a duplicate. Returns HTTP 201 on a new invite or a successful resend. Returns 409 if that email already belongs to an active or suspended member of the app context, or already has an identity elsewhere in your account (an email can currently belong to only one tenant per account, i.e. your test and live environments cannot share an email). When `sendEmail` is false, the response includes the raw token and a ready-to-use accept link so you can deliver the invitation through your own email provider. Requires the `admin:users` scope.\n *\n * @param {Vectros.CreateInviteRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.auth.createInvite({\n * email: \"bob@example.com\",\n * contextId: \"myapp\",\n * accessProfile: {}\n * })\n */\n createInvite(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createInvite(request, requestOptions));\n }\n async __createInvite(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users/invite\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/users/invite\");\n }\n /**\n * Resend an outstanding invitation, identified by its email and app context. Rotates the invitation token and extends its expiry, then (when `sendEmail` is true) re-delivers the email. Rotating the token invalidates any previously issued link for this invitation, so only the newest link works. The invitee's pending permissions are left unchanged. Requires the `admin:users` scope.\n *\n * @param {Vectros.CreateInviteRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.resendInvite({\n * email: \"bob@example.com\",\n * contextId: \"myapp\",\n * accessProfile: {}\n * })\n */\n resendInvite(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__resendInvite(request, requestOptions));\n }\n async __resendInvite(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users/invite/resend\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/users/invite/resend\");\n }\n};\n\n// api/resources/compliance/client/Client.ts\nvar ComplianceClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Submits a right-to-erasure request for a single end-subject (a user, client, or organization). Erasure removes exactly the data the subject solely owns across the declared contexts, plus the subject's identity and lookup rows. It never touches another account's data and never cascades into another subject's data. The request is asynchronous: it returns 202 with a `requestId`; poll `GET /v1/erasure-requests/{id}` until the job completes to obtain the completion certificate. Requires a root API key — a scoped credential is rejected with 403.\n *\n * @param {Vectros.ErasureRequest} request\n * @param {ComplianceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.compliance.createErasureRequest({\n * subjectType: \"user\"\n * })\n */\n createErasureRequest(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createErasureRequest(request, requestOptions));\n }\n async __createErasureRequest(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/erasure-requests\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/erasure-requests\");\n }\n /**\n * Polls an erasure request by id. While the job is still running this returns its status only; once it completes, the response also includes the verifiable completion certificate (which contexts were swept, per-context deletion counts, and reports of dangling references and shared rows that were left intact). Requires a root API key.\n *\n * @param {Vectros.GetErasureRequestRequest} request\n * @param {ComplianceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.compliance.getErasureRequest({\n * id: \"er_550e8400e29b41d4a716446655440000\"\n * })\n */\n getErasureRequest(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getErasureRequest(request, requestOptions));\n }\n async __getErasureRequest(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/erasure-requests/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/erasure-requests/{id}\");\n }\n /**\n * Submits an asynchronous job to export your account's data, or a single end-subject's data, across the requested contexts. The request returns 202 with an `exportJobId`; poll `GET /v1/admin/export/{id}` until the job completes to obtain a short-lived presigned download URL and a manifest describing the payload. Requires a root API key — a scoped credential is rejected with 403.\n *\n * @param {Vectros.ExportRequest} request\n * @param {ComplianceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.compliance.createExport()\n */\n createExport(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createExport(request, requestOptions));\n }\n async __createExport(request = {}, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/export\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/admin/export\");\n }\n /**\n * Polls an export job by id. While the job is still running this returns its status only; once it completes, the response also includes a short-lived presigned download URL and a manifest (format version and per-context counts). Requires a root API key.\n *\n * @param {Vectros.GetExportRequest} request\n * @param {ComplianceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.compliance.getExport({\n * id: \"exp_550e8400e29b41d4a716446655440000\"\n * })\n */\n getExport(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getExport(request, requestOptions));\n }\n async __getExport(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/admin/export/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/export/{id}\");\n }\n};\n\n// api/resources/documents/client/Client.ts\nvar DocumentsClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns a paginated list of your documents, optionally filtered by folder (`folderId`) and/or owner (`userId`, `orgId`, or `clientId`). The response is a `{data, nextCursor}` envelope; pass `nextCursor` back as `startFrom` to fetch the next page. Requires the `documents:r` scope.\n *\n * @param {Vectros.ListDocumentsRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.documents.listDocuments({\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * clientId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * folderId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * startFrom: \"doc_prev123\"\n * })\n */\n listDocuments(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listDocuments(request, requestOptions));\n }\n async __listDocuments(request = {}, requestOptions) {\n const { userId, orgId, clientId, folderId, startFrom, limit } = request;\n const _queryParams = {\n userId,\n orgId,\n clientId,\n folderId,\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents\");\n }\n /**\n * Creates a document from a raw text string and queues it for asynchronous indexing so it becomes searchable. Requires the `documents:c` scope.\n *\n * @param {Vectros.DocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.documents.ingestDocument({\n * title: \"Patient Intake Form \\u2014 Jane Doe\"\n * })\n */\n ingestDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__ingestDocument(request, requestOptions));\n }\n async __ingestDocument(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/documents\");\n }\n /**\n * Returns a single document by its ID, including its full structured payload. Requires the `documents:r` scope.\n *\n * @param {Vectros.GetDocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.getDocument({\n * id: \"id\"\n * })\n */\n getDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getDocument(request, requestOptions));\n }\n async __getDocument(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/{id}\");\n }\n /**\n * Replaces the mutable fields of a document. This is a full replacement of the payload — to merge fields instead, use PATCH. If you supply new `text`, the document body is re-ingested and re-queued for indexing. Requires the `documents:u` scope.\n *\n * @param {Vectros.UpdateDocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.documents.updateDocument({\n * id: \"id\",\n * body: {\n * title: \"Patient Intake Form \\u2014 Jane Doe\"\n * }\n * })\n */\n updateDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateDocument(request, requestOptions));\n }\n async __updateDocument(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/documents/{id}\");\n }\n /**\n * Permanently deletes the document and removes it from the search index. This cannot be undone. Requires the `documents:d` scope.\n *\n * @param {Vectros.DeleteDocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.deleteDocument({\n * id: \"id\"\n * })\n */\n deleteDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteDocument(request, requestOptions));\n }\n async __deleteDocument(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/documents/{id}\");\n }\n /**\n * Partially updates a document using an RFC 7386 JSON Merge Patch. The `payload` object is deep-merged: keys you send overwrite existing values (recursing into nested objects), a key set to `null` is deleted, and keys you omit are preserved — unlike PUT, which replaces the whole payload. Top-level fields (`title`, `storeText`, `folderId`, `schemaId`, ownership) are set when present and left unchanged when omitted; sending a top-level field as `null` is rejected. Supplying `text` re-ingests the document body (same as PUT). `indexMode` and `externalId` are immutable and rejected if present. The merged result is validated against the bound schema. Pass `expectedVersion` for optimistic concurrency (409 on conflict). Requires the `documents:u` scope.\n *\n * @param {Vectros.PatchDocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.documents.patchDocument({\n * id: \"id\",\n * body: {\n * title: \"Patient Intake Form \\u2014 Jane Doe\"\n * }\n * })\n */\n patchDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__patchDocument(request, requestOptions));\n }\n async __patchDocument(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}`\n ),\n method: \"PATCH\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PATCH\", \"/v1/documents/{id}\");\n }\n /**\n * Finds documents of a given type by a schema-declared lookup field. The document must be bound to a schema (via `schemaId`) that declares the field as a lookup field. A lookup on a sensitive field is rejected here, because the value would appear in the URL query string; use POST /v1/documents/lookup (the request-body variant) for a sensitive field instead. Results are paginated: set `limit` for the page size and feed the returned `nextCursor` back as `startFrom` to fetch the next page. The response is a `{data, nextCursor}` envelope. Requires the `documents:r` scope.\n *\n * @param {Vectros.LookupDocumentsRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.documents.lookupDocuments({\n * type: \"invoice\",\n * field: \"po_number\",\n * value: \"PO-1001\",\n * prefix: \"PO-2024\",\n * startFrom: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n lookupDocuments(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupDocuments(request, requestOptions));\n }\n async __lookupDocuments(request, requestOptions) {\n const { type: type_, field, value, from: from_, to, prefix, startFrom, limit, order } = request;\n const _queryParams = {\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n startFrom,\n limit,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents/lookup\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/lookup\");\n }\n /**\n * Request-body equivalent of GET /v1/documents/lookup. Use this when looking up by a sensitive field: the value travels in the request body (and is blind-indexed server-side) instead of the URL query string, so it never lands in access, CDN, or proxy logs. The GET variant rejects `value` for a sensitive field and directs you here. Requires the `documents:r` scope.\n *\n * @param {Vectros.DocumentLookupRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.documents.lookupDocumentsByBody({\n * type: \"invoice\",\n * field: \"mrn\"\n * })\n */\n lookupDocumentsByBody(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupDocumentsByBody(request, requestOptions));\n }\n async __lookupDocumentsByBody(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/documents/lookup\");\n }\n /**\n * Returns a short-lived presigned S3 GET URL for the original uploaded file. Only available for file-backed documents (created via POST /v1/documents/upload); text-only documents return 400. Requires the `documents:r` scope.\n *\n * @param {Vectros.GetDocumentDownloadUrlRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.getDocumentDownloadUrl({\n * id: \"id\"\n * })\n */\n getDocumentDownloadUrl(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getDocumentDownloadUrl(request, requestOptions));\n }\n async __getDocumentDownloadUrl(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}/download`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/{id}/download\");\n }\n /**\n * Returns the full extracted or ingested text body for documents that were stored with `storeText=true`. Returns 404 when the document does not exist or when no text is available (because `storeText` was false, or extraction has not yet completed). Requires the `documents:r` scope.\n *\n * @param {Vectros.GetDocumentTextRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.getDocumentText({\n * id: \"id\"\n * })\n */\n getDocumentText(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getDocumentText(request, requestOptions));\n }\n async __getDocumentText(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}/text`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/{id}/text\");\n }\n /**\n * Returns the audit trail of changes (CREATE, UPDATE, DELETE) for a document. History is recorded only for documents bound to a schema that has audit history enabled (the default for typed documents); untyped documents have no version history. The response is a `{data, nextCursor}` envelope. Requires the `documents:r` scope.\n *\n * @param {Vectros.GetDocumentVersionsRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.getDocumentVersions({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getDocumentVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getDocumentVersions(request, requestOptions));\n }\n async __getDocumentVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/{id}/versions\");\n }\n /**\n * Starts a file-based document by returning a short-lived presigned S3 PUT URL. Upload the file bytes directly to `uploadUrl`; the document is then automatically queued for text extraction and asynchronous indexing. Requires the `documents:c` scope.\n *\n * @param {Vectros.FileUploadRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.documents.uploadDocument({\n * fileName: \"patient_intake_2024_01_15.pdf\",\n * fileType: \"application/pdf\"\n * })\n */\n uploadDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__uploadDocument(request, requestOptions));\n }\n async __uploadDocument(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents/upload\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/documents/upload\");\n }\n};\n\n// api/resources/folders/client/Client.ts\nvar FoldersClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns a paginated list of your folders. Pass `parentFolderId` to list the direct children of a specific folder (tree navigation); omit it for a flat list across your account. You can also filter by owner using `userId`, `orgId`, or `clientId`. Results are returned as a `{data, nextCursor}` envelope — pass `nextCursor` as `startFrom` to fetch the next page. Requires the `folders:r` scope.\n *\n * @param {Vectros.ListFoldersRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.folders.listFolders({\n * parentFolderId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * clientId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * startFrom: \"fld_prev123\"\n * })\n */\n listFolders(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listFolders(request, requestOptions));\n }\n async __listFolders(request = {}, requestOptions) {\n const { parentFolderId, orgId, userId, clientId, startFrom, limit } = request;\n const _queryParams = {\n parentFolderId,\n orgId,\n userId,\n clientId,\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/folders\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/folders\");\n }\n /**\n * Creates a folder to organize your documents and records. If `parentFolderId` is omitted, the folder is created under your context's default root folder. Requires the `folders:c` scope.\n *\n * @param {Vectros.FolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.folders.createFolder({\n * name: \"Patient Records 2024\"\n * })\n */\n createFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createFolder(request, requestOptions));\n }\n async __createFolder(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/folders\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/folders\");\n }\n /**\n * Retrieves a single folder by its ID. Requires the `folders:r` scope.\n *\n * @param {Vectros.GetFolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.folders.getFolder({\n * id: \"id\"\n * })\n */\n getFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getFolder(request, requestOptions));\n }\n async __getFolder(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/folders/{id}\");\n }\n /**\n * Replaces a folder's name and description. Omitted fields are preserved (a null does not clear a field). The slug and parent folder are immutable and cannot be changed here. Requires the `folders:u` scope.\n *\n * @param {Vectros.UpdateFolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.folders.updateFolder({\n * id: \"id\",\n * body: {\n * name: \"Patient Records 2024\"\n * }\n * })\n */\n updateFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateFolder(request, requestOptions));\n }\n async __updateFolder(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/folders/{id}\");\n }\n /**\n * Permanently deletes a folder. The folder must be empty (contain no documents or sub-folders) and must not be protected. Your context's root folder is protected and cannot be deleted. Requires the `folders:d` scope.\n *\n * @param {Vectros.DeleteFolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.folders.deleteFolder({\n * id: \"id\"\n * })\n */\n deleteFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteFolder(request, requestOptions));\n }\n async __deleteFolder(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/folders/{id}\");\n }\n /**\n * Partially updates a folder using an RFC 7386 JSON Merge Patch. The `name`, `description`, and ownership fields (`userId`, `orgId`, `clientId`) are applied when present and left unchanged when omitted; sending any of these as null is rejected, because clearing a field is not supported in this release (omit it instead). `slug` and `parentFolderId` are immutable — a folder cannot be re-slugged or moved via the API — and the request is rejected if either is present. Pass `expectedVersion` for optimistic concurrency (you get a 409 if the folder changed since you last read it). Requires the `folders:u` scope.\n *\n * @param {Vectros.PatchFolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.folders.patchFolder({\n * id: \"id\",\n * body: {\n * name: \"Patient Records 2024\"\n * }\n * })\n */\n patchFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__patchFolder(request, requestOptions));\n }\n async __patchFolder(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}`\n ),\n method: \"PATCH\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PATCH\", \"/v1/folders/{id}\");\n }\n /**\n * Returns the audit trail of changes (create, update, and delete events) for a folder, newest first. Folder version history is always recorded; there is no setting to turn it off. Results are returned as a `{data, nextCursor}` envelope — pass `nextCursor` as `startFrom` to fetch the next page. Requires the `folders:r` scope.\n *\n * @param {Vectros.GetFolderVersionsRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.folders.getFolderVersions({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getFolderVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getFolderVersions(request, requestOptions));\n }\n async __getFolderVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/folders/{id}/versions\");\n }\n};\n\n// api/resources/identity/client/Client.ts\nvar IdentityClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns a paginated list of clients in your account. Narrow the results with `orgId` or `userId`, or use `externalId` for an exact lookup by your own identifier. For schema-bound clients, you can also query by a schema-declared lookup field using `type`, `field`, and one lookup mode (`value` for equality, `from`/`to` for a range, or `prefix`). The response is a `{data, nextCursor}` envelope; pass `nextCursor` back as `startFrom` to fetch the next page. Requires the `clients:r` scope.\n *\n * @param {Vectros.ListClientsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.identity.listClients({\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * externalId: \"patient_789\",\n * startFrom: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * type: \"client_v1\",\n * field: \"industry\",\n * value: \"healthcare\",\n * prefix: \"health\"\n * })\n */\n listClients(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listClients(request, requestOptions));\n }\n async __listClients(request = {}, requestOptions) {\n const {\n orgId,\n userId,\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order\n } = request;\n const _queryParams = {\n orgId,\n userId,\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/clients\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/clients\");\n }\n /**\n * Creates a new client identity in your account. This call is idempotent on `externalId`: if a client with the same `externalId` already exists, the existing record is returned instead of creating a duplicate. Requires the `clients:c` scope.\n *\n * @param {Vectros.ClientRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.createClient({\n * externalId: \"patient_789\"\n * })\n */\n createClient(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createClient(request, requestOptions));\n }\n async __createClient(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/clients\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/clients\");\n }\n /**\n * Returns a single client by its Vectros-assigned UUID. Requires the `clients:r` scope.\n *\n * @param {Vectros.GetClientRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getClient({\n * id: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\"\n * })\n */\n getClient(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getClient(request, requestOptions));\n }\n async __getClient(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/clients/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/clients/{id}\");\n }\n /**\n * Updates mutable fields on an existing client. Omitted fields are preserved (a null does not clear a field); when `payload` is supplied it replaces the stored payload in full rather than being deep-merged. Requires the `clients:u` scope.\n *\n * @param {Vectros.UpdateClientRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.updateClient({\n * id: \"id\",\n * body: {\n * externalId: \"patient_789\"\n * }\n * })\n */\n updateClient(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateClient(request, requestOptions));\n }\n async __updateClient(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/clients/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/clients/{id}\");\n }\n /**\n * Permanently deletes the client. This action cannot be undone. Requires the `clients:d` scope.\n *\n * @param {Vectros.DeleteClientRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.deleteClient({\n * id: \"id\"\n * })\n */\n deleteClient(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteClient(request, requestOptions));\n }\n async __deleteClient(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/clients/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/clients/{id}\");\n }\n /**\n * Body-based equivalent of the `type`/`field`/`value` lookup on `GET /v1/clients`. Use this when looking up by a sensitive (blind-indexed) field: the value travels in the request body rather than the URL. The `GET` list rejects a sensitive field's value and directs you here. The response is a `{data, nextCursor}` envelope. Requires the `clients:r` scope.\n *\n * @param {Vectros.IdentityLookupRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.lookupClients({\n * type: \"person_v1\",\n * field: \"ssn\"\n * })\n */\n lookupClients(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupClients(request, requestOptions));\n }\n async __lookupClients(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/clients/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/clients/lookup\");\n }\n /**\n * Returns the audit trail of changes to a client, newest first. Identity auditing is always on, so this history is always available; sensitive field values are redacted in each version. The response is a `{data, nextCursor}` envelope. Requires the `clients:r` scope.\n *\n * @param {Vectros.GetClientVersionsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getClientVersions({\n * id: \"id\"\n * })\n */\n getClientVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getClientVersions(request, requestOptions));\n }\n async __getClientVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/clients/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/clients/{id}/versions\");\n }\n /**\n * Returns a paginated list of organizations in your account. Filter by `userId` to return only the organizations owned by a specific user, or by `externalId` for an exact lookup using your own identifier. You can also query schema-declared lookup fields by supplying `type` and `field` together with one lookup mode (`value` for equality, `from`/`to` for a range, or `prefix`). Requires the `orgs:r` scope.\n *\n * @param {Vectros.ListOrgsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.identity.listOrgs({\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * externalId: \"clinic_001\",\n * startFrom: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * type: \"org_v1\",\n * field: \"region\",\n * value: \"us-east\",\n * prefix: \"us-\"\n * })\n */\n listOrgs(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listOrgs(request, requestOptions));\n }\n async __listOrgs(request = {}, requestOptions) {\n const {\n userId,\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order\n } = request;\n const _queryParams = {\n userId,\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/orgs\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/orgs\");\n }\n /**\n * Creates a new organization in your account. This call is idempotent on `externalId`: if an organization with the same `externalId` already exists, the existing record is returned instead of creating a duplicate. Requires the `orgs:c` scope.\n *\n * @param {Vectros.OrgRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.createOrg({\n * externalId: \"clinic_001\"\n * })\n */\n createOrg(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createOrg(request, requestOptions));\n }\n async __createOrg(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/orgs\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/orgs\");\n }\n /**\n * Retrieves a single organization by its Vectros-assigned ID, returning its current name, status, payload, and schema binding. Requires the `orgs:r` scope.\n *\n * @param {Vectros.GetOrgRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getOrg({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getOrg(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getOrg(request, requestOptions));\n }\n async __getOrg(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/orgs/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/orgs/{id}\");\n }\n /**\n * Updates the mutable fields of an organization. Omitted fields are preserved (a null value does not clear a field), and the `payload` object is replaced in full when supplied rather than deep-merged. Requires the `orgs:u` scope.\n *\n * @param {Vectros.UpdateOrgRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.updateOrg({\n * id: \"id\",\n * body: {\n * externalId: \"clinic_001\"\n * }\n * })\n */\n updateOrg(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateOrg(request, requestOptions));\n }\n async __updateOrg(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/orgs/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/orgs/{id}\");\n }\n /**\n * Permanently deletes an organization. This action cannot be undone. Requires the `orgs:d` scope.\n *\n * @param {Vectros.DeleteOrgRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.deleteOrg({\n * id: \"id\"\n * })\n */\n deleteOrg(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteOrg(request, requestOptions));\n }\n async __deleteOrg(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/orgs/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/orgs/{id}\");\n }\n /**\n * Looks up organizations by a schema-declared field value, with the search criteria sent in the request body instead of the URL. Use this when looking up by a sensitive field: the value travels in the body and is never exposed in the URL. This is the body-based equivalent of the `type`/`field`/`value` lookup on `GET /v1/orgs`, which rejects sensitive-field values and directs you here. Returns a `{data, nextCursor}` envelope. Requires the `orgs:r` scope.\n *\n * @param {Vectros.IdentityLookupRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.lookupOrgs({\n * type: \"person_v1\",\n * field: \"ssn\"\n * })\n */\n lookupOrgs(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupOrgs(request, requestOptions));\n }\n async __lookupOrgs(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/orgs/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/orgs/lookup\");\n }\n /**\n * Returns the audit trail of changes made to an organization, newest first. Version history is always recorded for identity entities, and sensitive field values are redacted in the history. Requires the `orgs:r` scope.\n *\n * @param {Vectros.GetOrgVersionsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getOrgVersions({\n * id: \"id\"\n * })\n */\n getOrgVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getOrgVersions(request, requestOptions));\n }\n async __getOrgVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/orgs/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/orgs/{id}/versions\");\n }\n /**\n * Returns a paginated list of the users in your account. Pass `externalId` to look up a single user by your own identifier. To filter on schema-declared lookup fields, supply `type` and `field` together with one lookup mode: `value` (exact match), `from`+`to` (range), or `prefix`. Requires the `users:r` scope.\n *\n * @param {Vectros.ListUsersRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.identity.listUsers({\n * externalId: \"usr_12345\",\n * startFrom: \"550e8400-e29b-41d4-a716-446655440000\",\n * type: \"person_v1\",\n * field: \"team\",\n * value: \"engineering\",\n * prefix: \"eng\"\n * })\n */\n listUsers(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listUsers(request, requestOptions));\n }\n async __listUsers(request = {}, requestOptions) {\n const { externalId, startFrom, limit, type: type_, field, value, from: from_, to, prefix, order } = request;\n const _queryParams = {\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/users\");\n }\n /**\n * Creates a user identity in your account. The operation is idempotent on `externalId`: if a user with the same `externalId` already exists, the existing record is returned instead of creating a duplicate. Requires the `users:c` scope.\n *\n * @param {Vectros.UserRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.createUser({\n * externalId: \"usr_12345\"\n * })\n */\n createUser(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createUser(request, requestOptions));\n }\n async __createUser(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/users\");\n }\n /**\n * Retrieves a single user by its Vectros-assigned ID. Requires the `users:r` scope.\n *\n * @param {Vectros.GetUserRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getUser({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n getUser(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getUser(request, requestOptions));\n }\n async __getUser(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/users/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/users/{id}\");\n }\n /**\n * Updates mutable fields on an existing user (such as email, status, payload, or schema binding). The `type` field is immutable after creation. This endpoint also activates an invited user: a PUT that moves a PENDING user to ACTIVE and carries `inviteToken`, `externalSubject`, and `emailVerifiedAttestation=true` completes the invitation. Requires the `users:u` scope.\n *\n * @param {Vectros.UpdateUserRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.updateUser({\n * id: \"550e8400-e29b-41d4-a716-446655440000\",\n * body: {\n * externalId: \"usr_12345\"\n * }\n * })\n */\n updateUser(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateUser(request, requestOptions));\n }\n async __updateUser(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/users/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/users/{id}\");\n }\n /**\n * Permanently deletes a user identity. This cannot be undone. If the user is a pending invitation, the associated access profile created for that invitation is also removed. Requires the `users:d` scope.\n *\n * @param {Vectros.DeleteUserRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.deleteUser({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n deleteUser(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteUser(request, requestOptions));\n }\n async __deleteUser(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/users/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/users/{id}\");\n }\n /**\n * Looks up users by a schema lookup field, with the query criteria carried in the request body rather than the URL. Use this when looking up by a sensitive (blind-indexed) field: the value is blind-indexed server-side and never appears in the URL, request logs, or proxies. The query semantics are identical to the GET /v1/users lookup, which rejects sensitive-field values and directs you here. Returns a page in the `{data, nextCursor}` envelope. Requires the `users:r` scope.\n *\n * @param {Vectros.IdentityLookupRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.lookupUsers({\n * type: \"person_v1\",\n * field: \"ssn\"\n * })\n */\n lookupUsers(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupUsers(request, requestOptions));\n }\n async __lookupUsers(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/users/lookup\");\n }\n /**\n * Returns the audit trail of changes to a user, most recent first. Identity history is always recorded and always available. Sensitive field values are redacted in every historical version. Returns a page in the `{data, nextCursor}` envelope. Requires the `users:r` scope.\n *\n * @param {Vectros.GetUserVersionsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getUserVersions({\n * id: \"id\"\n * })\n */\n getUserVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getUserVersions(request, requestOptions));\n }\n async __getUserVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/users/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/users/{id}/versions\");\n }\n};\n\n// api/resources/inference/client/Client.ts\nvar InferenceClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns every inference model available to you, including each model's context window, the plan tiers it's available on, and the exact credit rates charged per 1K input and output tokens. Use this to populate model pickers and to validate a request before calling `/v1/chat`, `/v1/rag`, or `/v1/documents/{id}/ask`.\n *\n * @param {InferenceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.inference.listInferenceModels()\n */\n listInferenceModels(requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listInferenceModels(requestOptions));\n }\n async __listInferenceModels(requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/models\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/models\");\n }\n /**\n * Streams a model response as Server-Sent Events (SSE). Send the full conversation history in the `messages` array; a message with role `system` is extracted and used as the system prompt. Token cost is debited from your pre-paid inference balance (in cents), and a small per-call flat fee is debited from your monthly platform credit allowance. Requires the `inference:r` scope.\n */\n chatInference(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__chatInference(request, requestOptions));\n }\n async __chatInference(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/chat\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n responseType: \"sse\",\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return {\n data: new Stream({\n stream: _response.body,\n parse: (data) => data,\n signal: requestOptions?.abortSignal,\n eventShape: {\n type: \"sse\"\n }\n }),\n rawResponse: _response.rawResponse\n };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 401:\n throw new UnauthorizedError(_response.error.body, _response.rawResponse);\n case 402:\n throw new PaymentRequiredError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 429:\n throw new TooManyRequestsError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/chat\");\n }\n /**\n * Loads a single document's extracted text, supplies it as context, and streams a model answer about it. The document must be fully indexed. If the document exceeds the 32K-token cap, the call returns 413 with no credits charged — use `POST /v1/rag` instead to answer over larger or multi-document collections. Requires the `inference:r` scope.\n */\n documentAsk(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__documentAsk(request, requestOptions));\n }\n async __documentAsk(request, requestOptions) {\n const { id, ..._body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}/ask`\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n responseType: \"sse\",\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return {\n data: new Stream({\n stream: _response.body,\n parse: (data) => data,\n signal: requestOptions?.abortSignal,\n eventShape: {\n type: \"sse\"\n }\n }),\n rawResponse: _response.rawResponse\n };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 401:\n throw new UnauthorizedError(_response.error.body, _response.rawResponse);\n case 402:\n throw new PaymentRequiredError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n case 413:\n throw new ContentTooLargeError(_response.error.body, _response.rawResponse);\n case 429:\n throw new TooManyRequestsError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/documents/{id}/ask\");\n }\n /**\n * Runs hybrid search over your indexed content, then streams a model answer grounded in the top results. The SSE stream emits a `search_results` event first (carrying the matched results and their metadata), an optional `truncation_warning` if lower-scoring results were dropped to fit the model's context window, then `content_delta` chunks, and finally a terminal `done` event. Requires the `inference:r` scope.\n */\n ragInference(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__ragInference(request, requestOptions));\n }\n async __ragInference(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/rag\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n responseType: \"sse\",\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return {\n data: new Stream({\n stream: _response.body,\n parse: (data) => data,\n signal: requestOptions?.abortSignal,\n eventShape: {\n type: \"sse\"\n }\n }),\n rawResponse: _response.rawResponse\n };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 401:\n throw new UnauthorizedError(_response.error.body, _response.rawResponse);\n case 402:\n throw new PaymentRequiredError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 429:\n throw new TooManyRequestsError(_response.error.body, _response.rawResponse);\n case 500:\n throw new InternalServerError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/rag\");\n }\n};\n\n// api/resources/records/client/Client.ts\nvar RecordsClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Reserved endpoint for fetching multiple records by ID in one call. When available, the response will contain only the records you can see; any IDs that do not exist or are outside your scope are silently omitted (there is no per-ID existence signal), matching the not-found behavior of the single-record GET. It currently returns 501 (not implemented). The documented 200 response schema is the stable shape this endpoint will use once available. Requires the `records:r` scope.\n *\n * @param {Vectros.BatchGetRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.records.batchGetRecords()\n */\n batchGetRecords(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__batchGetRecords(request, requestOptions));\n }\n async __batchGetRecords(request = {}, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/batch-get\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records/batch-get\");\n }\n /**\n * Reserved endpoint for batch lookup and reference resolution. The published response shape correlates results to each input and carries a per-item status envelope. It currently returns 501 (not implemented). The documented 200 response schema is the stable shape this endpoint will use once available. Requires the `records:r` scope.\n *\n * @param {Vectros.BatchLookupRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.records.batchLookupRecords()\n */\n batchLookupRecords(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__batchLookupRecords(request, requestOptions));\n }\n async __batchLookupRecords(request = {}, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/lookup/batch\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records/lookup/batch\");\n }\n /**\n * Reserved endpoint for bulk record writes. The published response shape includes a per-item partial-failure envelope and an atomicity flag. It currently returns 501 (not implemented). The documented 200 response schema is the stable shape this endpoint will use once available, published now so SDK integrations against it will not break when it ships. Requires the `records:c` scope.\n *\n * @param {Vectros.BatchWriteRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.records.batchWriteRecords()\n */\n batchWriteRecords(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__batchWriteRecords(request, requestOptions));\n }\n async __batchWriteRecords(request = {}, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/batch\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records/batch\");\n }\n /**\n * Returns a paginated list of records in your account as a `{data, nextCursor}` page. Supply exactly one of `type`, `folderId`, or `recent=true` to choose the mode: `type` lists all records of a single type; `folderId` lists all records in a folder (any type); and `recent=true` returns the account-wide recently-updated feed across all types, newest first. You may combine `type` with `folderId` to list a single type within a folder. The owner filters (`userId`, `orgId`, `clientId`) further narrow the type and folder modes; the `recent` feed is standalone and ignores all filters. Each token only sees the record types it is scoped to read. Requires the `records:r` scope. By default the response returns the indexed projection of each record; set `includePayload=true` to include full payloads.\n *\n * @param {Vectros.ListRecordsRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.records.listRecords({\n * type: \"intake_form\",\n * folderId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * clientId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * startFrom: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n listRecords(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listRecords(request, requestOptions));\n }\n async __listRecords(request = {}, requestOptions) {\n const { type: type_, folderId, userId, orgId, clientId, startFrom, limit, includePayload, recent } = request;\n const _queryParams = {\n type: type_,\n folderId,\n userId,\n orgId,\n clientId,\n startFrom,\n limit,\n includePayload,\n recent\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records\");\n }\n /**\n * Creates a new record of a given type. The `payload` is validated against that type's schema before the record is stored. Identify the type by sending `typeName`, `schemaId`, or both (they must agree); if you send only `schemaId`, the type is taken from that schema. Optionally supply an `externalId` to make the create idempotent — if a record with the same `externalId` already exists in your context, that existing record is returned unchanged instead of a duplicate being created. Requires the `records:c:<type>` scope.\n *\n * @param {Vectros.RecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.records.createRecord({\n * typeName: \"intake_form\",\n * schemaId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * payload: {\n * \"first_name\": \"Jane\",\n * \"email\": \"jane@example.com\"\n * },\n * folderId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\"\n * })\n */\n createRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createRecord(request, requestOptions));\n }\n async __createRecord(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records\");\n }\n /**\n * Retrieves a single record by its Vectros-assigned ID, including its full payload (payloads that were externalized to object storage are rehydrated for this response). Sensitive fields are masked according to the record's schema. Requires the `records:r:<type>` scope. A record outside your account or scope returns 404 (not found) rather than revealing its existence.\n *\n * @param {Vectros.GetRecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.records.getRecord({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n getRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRecord(request, requestOptions));\n }\n async __getRecord(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records/{id}\");\n }\n /**\n * Replaces a record's payload and mutable fields. This is a full replacement: the `payload` you send overwrites the existing payload entirely, so include every field you want to keep (use the PATCH endpoint to change only specific fields). `typeName` and `schemaId` are immutable and cannot be changed. The new payload is validated against the record's schema. Pass `expectedVersion` to make the update conditional on the record not having changed since you last read it (optimistic concurrency). Requires the `records:u:<type>` scope.\n *\n * @param {Vectros.UpdateRecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.records.updateRecord({\n * id: \"550e8400-e29b-41d4-a716-446655440000\",\n * body: {}\n * })\n */\n updateRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateRecord(request, requestOptions));\n }\n async __updateRecord(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/records/{id}\");\n }\n /**\n * Permanently deletes a record. This is a hard delete: the record is removed and a tombstone plus an audit-trail entry are recorded (you can later retrieve the tombstone via `GET /v1/records/{id}/tombstone`). Requires the `records:d:<type>` scope.\n *\n * @param {Vectros.DeleteRecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.records.deleteRecord({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n deleteRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteRecord(request, requestOptions));\n }\n async __deleteRecord(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/records/{id}\");\n }\n /**\n * Partially updates a record using an RFC 7386 JSON Merge Patch. The `payload` object is deep-merged into the existing payload: keys you send overwrite (recursing into nested objects), a key set to null is deleted, and keys you omit are left unchanged — so you can change a single field without re-sending the rest (unlike the full-replacement PUT). Top-level fields (`status`, `folderId`, `userId`, `orgId`, `clientId`) are set when present and left unchanged when omitted; sending a top-level field as null is rejected (clearing a top-level field is not supported in this release — omit it instead). `typeName`, `schemaId`, `externalId`, and `indexMode` are immutable and rejected if present. The merged result is validated against the schema. Pass `expectedVersion` to make the patch conditional (optimistic concurrency, 409 on conflict). Requires the `records:u:<type>` scope.\n *\n * @param {Vectros.PatchRecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.records.patchRecord({\n * id: \"550e8400-e29b-41d4-a716-446655440000\",\n * body: {\n * payload: {\n * \"status\": \"done\"\n * },\n * expectedVersion: 5\n * }\n * })\n */\n patchRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__patchRecord(request, requestOptions));\n }\n async __patchRecord(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}`\n ),\n method: \"PATCH\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PATCH\", \"/v1/records/{id}\");\n }\n /**\n * Finds records by the value of a lookup field declared on the type's schema. Provide exactly one lookup mode: `value` (exact match), `from`+`to` (inclusive range, ascending by value), or `prefix` (string fields only, ascending). Range and prefix lookups are not supported on a sensitive field, because its value is stored as a blind index and has no sortable order. An exact-`value` lookup on a sensitive field is also rejected on this GET endpoint — the value must not appear in the URL — so use the `POST /v1/records/lookup` body variant for sensitive fields. Results are paginated: set `limit` for the page size and pass the returned `nextCursor` back as `startFrom` for the next page. Requires the `records:r:<type>` scope.\n *\n * @param {Vectros.LookupRecordsRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.records.lookupRecords({\n * type: \"intake_form\",\n * field: \"email\",\n * value: \"jane@example.com\",\n * prefix: \"jane\",\n * startFrom: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n lookupRecords(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupRecords(request, requestOptions));\n }\n async __lookupRecords(request, requestOptions) {\n const { type: type_, field, value, from: from_, to, prefix, startFrom, limit, includePayload, order } = request;\n const _queryParams = {\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n startFrom,\n limit,\n includePayload,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/lookup\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records/lookup\");\n }\n /**\n * Body-based equivalent of `GET /v1/records/lookup`. Use this when looking up by a sensitive field: the value travels in the request body (and is blind-indexed server-side) instead of in the URL query string, so it never lands in access, CDN, or proxy logs. The GET variant rejects an exact-value lookup on a sensitive field and directs you here. Non-sensitive exact-value, range (`from`+`to`), and prefix lookups also work here. Returns the same `{data, nextCursor}` envelope and uses the same pagination as the GET variant. Requires the `records:r:<type>` scope.\n *\n * @param {Vectros.RecordLookupRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.records.lookupRecordsByBody({\n * type: \"intake_form\",\n * field: \"ssn\"\n * })\n */\n lookupRecordsByBody(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupRecordsByBody(request, requestOptions));\n }\n async __lookupRecordsByBody(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records/lookup\");\n }\n /**\n * Returns the tombstone left behind when a record was hard-deleted, confirming the deletion and recording when it happened. Look it up using the deleted record's original ID. Requires the `records:r:<type>` scope.\n *\n * @param {Vectros.GetRecordTombstoneRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.records.getRecordTombstone({\n * id: \"id\"\n * })\n */\n getRecordTombstone(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRecordTombstone(request, requestOptions));\n }\n async __getRecordTombstone(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}/tombstone`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records/{id}/tombstone\");\n }\n /**\n * Returns the audit trail of past versions for a record, as a paginated `{data, nextCursor}` page. This is available only when the record type's schema has audit history enabled (the default); if it is disabled, the endpoint returns 409. Requires the `records:r:<type>` scope.\n *\n * @param {Vectros.GetRecordVersionsRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.records.getRecordVersions({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n getRecordVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRecordVersions(request, requestOptions));\n }\n async __getRecordVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records/{id}/versions\");\n }\n};\n\n// api/resources/schemas/client/Client.ts\nvar SchemasClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns a paginated list of the record schemas defined in your account. Filter by `userId` or `orgId` to scope to an owner, by `surface` to list the types bindable to one surface, or by `recordType` to resolve the single schema for a type directly. Filtering by an identity surface (user, org, or client) lists your account-wide identity schemas regardless of the calling context; filtering by record or document lists within the calling context. Requires the `schemas:r` scope.\n *\n * @param {Vectros.ListSchemasRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.schemas.listSchemas({\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * surface: \"document\",\n * recordType: \"intake_form\",\n * startFrom: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n listSchemas(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listSchemas(request, requestOptions));\n }\n async __listSchemas(request = {}, requestOptions) {\n const { userId, orgId, surface, recordType, startFrom, limit } = request;\n const _queryParams = {\n userId,\n orgId,\n surface,\n recordType,\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/schemas\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/schemas\");\n }\n /**\n * Defines a new record type with optional field definitions, validation rules, and lookup indexes. Idempotent by `typeName` within the same ownership scope: re-creating an existing `typeName` returns the existing schema rather than failing. Requires the `schemas:w` scope.\n *\n * @param {Vectros.SchemaRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.schemas.createSchema({\n * typeName: \"intake_form\",\n * displayName: \"Client Intake Form\",\n * description: \"Captures initial client information\",\n * fields: [{\n * fieldId: \"first_name\",\n * fieldType: \"string\",\n * required: true,\n * searchable: true\n * }, {\n * fieldId: \"email\",\n * fieldType: \"string\",\n * required: true\n * }],\n * lookupFields: [{\n * fieldName: \"email\",\n * unique: true\n * }],\n * capabilities: {\n * \"auditHistory\": true\n * },\n * allowedSurfaces: [\"record\"]\n * })\n */\n createSchema(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createSchema(request, requestOptions));\n }\n async __createSchema(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/schemas\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/schemas\");\n }\n /**\n * Retrieves a single record schema by its id. Requires the `schemas:r` scope.\n *\n * @param {Vectros.GetSchemaRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.schemas.getSchema({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getSchema(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getSchema(request, requestOptions));\n }\n async __getSchema(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/schemas/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/schemas/{id}\");\n }\n /**\n * Updates a record schema. Fields you omit are preserved; `typeName` is immutable and cannot be changed. Collection fields (`fields`, `lookupFields`, `renderHints`, `capabilities`) are replaced in full when supplied. Requires the `schemas:w` scope.\n *\n * @param {Vectros.UpdateSchemaRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.schemas.updateSchema({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * body: {\n * typeName: \"intake_form\",\n * displayName: \"Client Intake Form\",\n * allowedSurfaces: [\"record\"]\n * }\n * })\n */\n updateSchema(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateSchema(request, requestOptions));\n }\n async __updateSchema(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/schemas/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/schemas/{id}\");\n }\n /**\n * Permanently deletes a record schema. The request is refused with 409 if records of this type still exist — delete those records first, since every record must reference a live schema. Requires the `schemas:w` scope.\n *\n * @param {Vectros.DeleteSchemaRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.schemas.deleteSchema({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n deleteSchema(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteSchema(request, requestOptions));\n }\n async __deleteSchema(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/schemas/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/schemas/{id}\");\n }\n /**\n * Returns the audit trail of changes to a record schema, newest first (create, update, and delete). Schema version history is always recorded — there is no per-schema toggle to disable it. Requires the `schemas:r` scope.\n *\n * @param {Vectros.GetSchemaVersionsRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.schemas.getSchemaVersions({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getSchemaVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getSchemaVersions(request, requestOptions));\n }\n async __getSchemaVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/schemas/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/schemas/{id}/versions\");\n }\n};\n\n// api/resources/search/client/Client.ts\nvar SearchClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Runs a hybrid, semantic, or text search across the content you have indexed. By default it returns both documents and records in a single unified result set; pass `contentTypes` to narrow the results (for example `[\"documents\"]`). Each result carries a `sourceType` discriminator (`PartnerDocument` or `GenericRecord`) so you can branch on the type. Requires the `search:r` scope.\n *\n * @param {Vectros.SearchRequest} request\n * @param {SearchClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.search.content({\n * query: \"patient intake form diabetes\"\n * })\n */\n content(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__content(request, requestOptions));\n }\n async __content(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/search\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/search\");\n }\n};\n\n// Client.ts\nvar VectrosClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n get auth() {\n return this._auth ?? (this._auth = new AuthClient(this._options));\n }\n get identity() {\n return this._identity ?? (this._identity = new IdentityClient(this._options));\n }\n get documents() {\n return this._documents ?? (this._documents = new DocumentsClient(this._options));\n }\n get compliance() {\n return this._compliance ?? (this._compliance = new ComplianceClient(this._options));\n }\n get folders() {\n return this._folders ?? (this._folders = new FoldersClient(this._options));\n }\n get inference() {\n return this._inference ?? (this._inference = new InferenceClient(this._options));\n }\n get records() {\n return this._records ?? (this._records = new RecordsClient(this._options));\n }\n get schemas() {\n return this._schemas ?? (this._schemas = new SchemasClient(this._options));\n }\n get search() {\n return this._search ?? (this._search = new SearchClient(this._options));\n }\n /**\n * Make a passthrough request using the SDK's configured auth, retry, logging, etc.\n * This is useful for making requests to endpoints not yet supported in the SDK.\n * The input can be a URL string, URL object, or Request object. Relative paths are resolved against the configured base URL.\n *\n * @param {Request | string | URL} input - The URL, path, or Request object.\n * @param {RequestInit} init - Standard fetch RequestInit options.\n * @param {core.PassthroughRequest.RequestOptions} requestOptions - Per-request overrides (timeout, retries, headers, abort signal).\n * @returns {Promise<Response>} A standard Response object.\n */\n async fetch(input, init, requestOptions) {\n return makePassthroughRequest(\n input,\n init,\n {\n baseUrl: this._options.baseUrl ?? this._options.environment,\n headers: this._options.headers,\n timeoutInSeconds: this._options.timeoutInSeconds,\n maxRetries: this._options.maxRetries,\n fetch: this._options.fetch,\n logging: this._options.logging,\n getAuthHeaders: async () => (await this._options.authProvider.getAuthRequest()).headers\n },\n requestOptions\n );\n }\n};\n\n// core/logging/exports.ts\nvar logging;\n((logging2) => {\n logging2.LogLevel = LogLevel;\n logging2.ConsoleLogger = ConsoleLogger;\n})(logging || (logging = {}));\nexport {\n api_exports as Vectros,\n VectrosClient,\n VectrosError,\n VectrosTimeoutError,\n logging\n};\n","/**\n * API key format validation + credential-type warnings.\n *\n * Vectros has three credential types:\n * sk_* — root API key. Wildcard scope. Too broad for desktop MCP;\n * warn the user on accept.\n * ssk_* — server-side scoped key. Long-lived, narrowable scope.\n * The RECOMMENDED credential for MCP. Accept silently.\n * st_* — short-lived KMS-signed JWT (1h default / 24h max).\n * Will expire mid-session; warn the user on accept.\n *\n * See the Vectros developer documentation on the auth model and\n * scoped tokens (\"When ssk_* is the right call\") for the full rationale.\n */\nimport type { Logger } from './log.js';\n\nexport type KeyPrefix = 'sk' | 'ssk' | 'st';\nexport type KeyEnv = 'live' | 'test';\n\nexport interface KeyInfo {\n prefix: KeyPrefix;\n env: KeyEnv;\n raw: string;\n}\n\nconst KEY_RE = /^(sk|ssk|st)_(live|test)_/;\n\nexport class InvalidApiKeyError extends Error {\n constructor(reason: string) {\n super(`Invalid VECTROS_API_KEY: ${reason}`);\n this.name = 'InvalidApiKeyError';\n }\n}\n\n/**\n * Parse and validate the API key. Throws `InvalidApiKeyError` on\n * malformed keys (caller should let the exception propagate — bad\n * creds are a fail-fast condition at startup).\n */\nexport function parseApiKey(raw: string | undefined): KeyInfo {\n if (!raw || raw.trim().length === 0) {\n throw new InvalidApiKeyError(\n 'env var is missing or empty. ' +\n 'Set VECTROS_API_KEY to a Vectros key (recommended: ssk_live_... or ssk_test_...).',\n );\n }\n const match = raw.match(KEY_RE);\n if (!match) {\n throw new InvalidApiKeyError(\n `key must start with sk_, ssk_, or st_ followed by \"live_\" or \"test_\". Got prefix \"${raw.slice(0, 12)}...\".`,\n );\n }\n return {\n prefix: match[1] as KeyPrefix,\n env: match[2] as KeyEnv,\n raw,\n };\n}\n\n/**\n * Warn (via logger) on credential types that are technically valid\n * but not ideal for an MCP server:\n * - sk_* — wildcard scope is too broad for desktop credentials\n * - st_* — short-lived; will expire mid-session\n *\n * ssk_* passes silently — it's the recommended shape.\n */\nexport function warnOnSuboptimalKey(key: KeyInfo, log: Logger): void {\n if (key.prefix === 'sk') {\n log.warn(\n { prefix: key.prefix, env: key.env },\n 'wildcard-scope key (sk_*) on a desktop MCP server is overly broad. ' +\n 'For production, prefer a scoped ssk_* key bound to a narrowed AccessProfile. ' +\n 'See the Vectros scoped-token documentation (\"Recommended AccessProfile for MCP\").',\n );\n } else if (key.prefix === 'st') {\n log.warn(\n { prefix: key.prefix, env: key.env },\n 'short-lived token (st_*) will expire mid-session (1h default, 24h max). ' +\n 'For long-running MCP installs, prefer a long-lived ssk_* key.',\n );\n }\n // ssk_* — no warning.\n}\n","/**\n * Build-time provenance for the published MCP server.\n *\n * `@vectros-ai/sdk` is **bundled** into the binary (tsup `noExternal`), so at\n * runtime there is no `node_modules/@vectros-ai/sdk` to read its version from —\n * the only way to know which SDK a given `@vectros-ai/mcp-server` build shipped\n * is to capture it at build time.\n *\n * tsup's `define` (see tsup.config.ts) replaces the `__*_VERSION__` tokens with\n * the versions RESOLVED AT BUILD TIME. Under `tsx` (the test runner, no tsup\n * define) the tokens are undefined → the `'dev'` fallback; the `typeof` guard\n * keeps the else-branch from ReferenceError-ing.\n */\ndeclare const __MCP_VERSION__: string | undefined;\ndeclare const __SDK_VERSION__: string | undefined;\n\nexport const BUILD_INFO = {\n mcpServer: typeof __MCP_VERSION__ !== 'undefined' ? __MCP_VERSION__ : 'dev',\n sdk: typeof __SDK_VERSION__ !== 'undefined' ? __SDK_VERSION__ : 'dev',\n} as const;\n\n/** One-line provenance string, e.g. `vectros-mcp-server 0.5.0 (sdk 0.29.5)`. */\nexport function formatBuildInfo(): string {\n return `vectros-mcp-server ${BUILD_INFO.mcpServer} (sdk ${BUILD_INFO.sdk})`;\n}\n","/**\n * Structured logger — pino, always to stderr.\n *\n * CRITICAL: stdout is reserved for the MCP JSON-RPC stream when the\n * server runs over stdio transport. Anything written to stdout that\n * is not a valid JSON-RPC message corrupts the protocol and the\n * client disconnects.\n *\n * Every log line goes to stderr. There are no exceptions.\n */\nimport pino, { type Logger } from 'pino';\n\nexport interface LogContext {\n debug?: boolean;\n}\n\n/**\n * Build a stderr-destined logger.\n *\n * Pass `debug: true` (or set `VECTROS_MCP_DEBUG=1`) to lower the\n * level to `debug`. Default is `info`.\n */\nexport function createLogger(ctx: LogContext = {}): Logger {\n const debugEnabled = ctx.debug ?? process.env.VECTROS_MCP_DEBUG === '1';\n // pino.destination(2) — file descriptor 2 = stderr. NOT stdout.\n return pino(\n {\n level: debugEnabled ? 'debug' : 'info',\n base: { component: '@vectros-ai/mcp-server' },\n timestamp: pino.stdTimeFunctions.isoTime,\n },\n pino.destination(2),\n );\n}\n\nexport type { Logger };\n","/**\n * Shared identity-resolution helper.\n *\n * Used by BOTH `current_identity` tool AND `identity` resource —\n * single source of truth for the graceful-degradation contract (see\n * the design doc § Identity & exploration →\n * current_identity + § \"Backend deliverables surfaced by MCP v0.2\").\n *\n * Bypasses the SDK because `client.auth.ping()` is typed\n * `Promise<void>` and discards the response body — see\n * src/tools/current_identity.ts header for the full reasoning.\n */\nimport type { Logger } from './log.js';\n\nexport interface IdentityShape {\n status: 'ok';\n environment?: 'staging' | 'production';\n principalType?: 'root_key' | 'scoped_key' | 'token';\n // Extended fields (present once backend ships extended /v1/ping):\n tenantId?: string;\n principalKeyId?: string;\n principalLabel?: string;\n allowedActions?: string[];\n dataScope?: { userId?: string; orgId?: string };\n tokenExpiresAt?: number;\n // Allow pass-through of any future backend-added fields without\n // requiring an MCP server release.\n [key: string]: unknown;\n}\n\nexport function deriveEnvironment(\n environment: string | undefined,\n): 'staging' | 'production' | undefined {\n if (!environment) return undefined;\n if (environment.includes('staging')) return 'staging';\n if (environment.includes('api.vectros.ai')) return 'production';\n return undefined;\n}\n\nexport function derivePrincipalType(\n apiKey: string | undefined,\n): 'root_key' | 'scoped_key' | 'token' | undefined {\n if (!apiKey) return undefined;\n const prefix = apiKey.split('_')[0];\n if (prefix === 'sk') return 'root_key';\n if (prefix === 'ssk') return 'scoped_key';\n if (prefix === 'st') return 'token';\n return undefined;\n}\n\nexport interface ResolveIdentityCtx {\n log: Logger;\n apiKey?: string;\n environment?: string;\n}\n\n/**\n * Resolve identity: raw GET /v1/ping + client-side derivation,\n * merged with extended-shape graceful-degradation semantics.\n *\n * Throws if /v1/ping returns non-2xx (auth failure or upstream).\n * Caller is responsible for wrapping into a tool/resource error.\n *\n * Returns the derived-only shape when apiKey or environment is\n * missing (e.g., test mocks omit them, or programmatic embedders\n * skip them).\n */\nexport async function resolveIdentity({\n log,\n apiKey,\n environment,\n}: ResolveIdentityCtx): Promise<IdentityShape> {\n const derived: IdentityShape = {\n status: 'ok',\n environment: deriveEnvironment(environment),\n principalType: derivePrincipalType(apiKey),\n };\n\n if (!apiKey || !environment) {\n log.debug({ component: 'identity', mode: 'derived-only' }, 'identity derived (no fetch)');\n return derived;\n }\n\n const url = `${environment.replace(/\\/$/, '')}/v1/ping`;\n const res = await fetch(url, {\n headers: { Authorization: `Bearer ${apiKey}` },\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => '');\n const e = new Error(`HTTP ${res.status}: ${body || res.statusText}`) as Error & {\n statusCode: number;\n };\n e.statusCode = res.status;\n throw e;\n }\n\n // Parse body if any. Old endpoint returns empty body; extended\n // endpoint returns identity JSON.\n let extended: Record<string, unknown> = {};\n const rawBody = await res.text();\n if (rawBody.trim().length > 0) {\n try {\n extended = JSON.parse(rawBody) as Record<string, unknown>;\n } catch {\n log.debug(\n { component: 'identity', rawBodyLen: rawBody.length },\n 'identity: ping body not JSON, using derived shape only',\n );\n }\n }\n\n // Merge derived + extended. Extended fields override derived\n // (backend is authoritative once it ships them).\n const merged: IdentityShape = { ...derived, ...extended, status: 'ok' };\n\n log.debug(\n {\n component: 'identity',\n mode: rawBody.trim().length > 0 ? 'extended' : 'derived',\n fields: Object.keys(merged),\n },\n 'identity resolved',\n );\n\n return merged;\n}\n","/**\n * Base-URL validator — credential-exfil guard.\n *\n * `VECTROS_API_BASE_URL` flows unchecked into `resolveIdentity`, which sends\n * `Authorization: Bearer ${VECTROS_API_KEY}` to `${baseUrl}/v1/ping` — so an\n * attacker-supplied base URL exfiltrates the operator's API key (commonly a\n * root `sk_*`). Same vector the CLI has via the Cognito bearer.\n *\n * This validates the URL BEFORE the server attaches any credential:\n * - require `https://` — except `http://` to a loopback host (localhost/\n * 127.0.0.1/::1), for local proxying/dev;\n * - require the host to be an official Vectros host: `vectros.ai` or a\n * `*.vectros.ai` subdomain (strict suffix match — `api.vectros.ai.evil.com`\n * and `evilvectros.ai` are rejected);\n * - a loud, explicit opt-out (`VECTROS_ALLOW_INSECURE_BASE_URL=1`) permits\n * an arbitrary host for a trusted local proxy, AFTER a warning.\n *\n * Mirrors `packages/cli/src/base-url.ts`. Kept as a tiny per-package module\n * rather than a new shared workspace dependency. Warnings go to stderr (or an\n * injected logger) — NEVER stdout (stdio-transport purity).\n */\n\n/** The official Vectros apex + subdomain suffix. */\nconst ALLOWED_HOST_APEX = 'vectros.ai';\nconst ALLOWED_HOST_SUFFIX = '.vectros.ai';\n\n/** Env var that loudly opts out of the host allow-list (trusted local proxy). */\nexport const INSECURE_BASE_URL_ENV = 'VECTROS_ALLOW_INSECURE_BASE_URL';\n\n/** Thrown when a base URL fails validation. */\nexport class InvalidBaseUrlError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidBaseUrlError';\n }\n}\n\nexport interface ValidateBaseUrlOptions {\n /**\n * When true, permit any http/https host (loud opt-out). Defaults to reading\n * {@link INSECURE_BASE_URL_ENV} from the environment.\n */\n allowInsecure?: boolean;\n /** Sink for the loud opt-out warning. Defaults to stderr (stdout-purity). */\n warn?: (msg: string) => void;\n}\n\n/** localhost / 127.0.0.1 / ::1 (URL.hostname keeps IPv6 brackets). */\nfunction isLoopbackHost(hostname: string): boolean {\n const h = hostname.toLowerCase();\n return h === 'localhost' || h === '127.0.0.1' || h === '::1' || h === '[::1]';\n}\n\nfunction insecureOptOutFromEnv(): boolean {\n const v = (process.env[INSECURE_BASE_URL_ENV] ?? '').toLowerCase();\n return v === '1' || v === 'true' || v === 'yes';\n}\n\nfunction defaultWarn(msg: string): void {\n // stderr only — stdout carries the MCP protocol on the stdio transport.\n process.stderr.write(`${msg}\\n`);\n}\n\n/**\n * Validate a base URL and return it unchanged on success. Throws\n * {@link InvalidBaseUrlError} otherwise.\n */\nexport function validateBaseUrl(rawUrl: string, opts: ValidateBaseUrlOptions = {}): string {\n let url: URL;\n try {\n url = new URL(rawUrl);\n } catch {\n throw new InvalidBaseUrlError(\n `Invalid base URL ${JSON.stringify(rawUrl)} — not a parseable absolute URL ` +\n `(expected e.g. https://api.vectros.ai).`,\n );\n }\n\n const allowInsecure = opts.allowInsecure ?? insecureOptOutFromEnv();\n const scheme = url.protocol;\n // Strip a single trailing dot (the FQDN form `api.vectros.ai.` is a legit\n // alias of the real host) so the suffix/loopback checks treat them alike.\n const host = url.hostname.toLowerCase().replace(/\\.$/, '');\n const loopback = isLoopbackHost(host);\n\n if (allowInsecure) {\n if (scheme !== 'https:' && scheme !== 'http:') {\n throw new InvalidBaseUrlError(\n `Refusing base URL with scheme \"${scheme}\" — only http/https are supported.`,\n );\n }\n (opts.warn ?? defaultWarn)(\n `WARNING: ${INSECURE_BASE_URL_ENV} is set — sending Vectros credentials to ` +\n `UNVALIDATED host \"${url.host}\". This bypasses the base-URL allow-list and can leak ` +\n `your API key. Unset it unless you are intentionally proxying to a trusted local endpoint.`,\n );\n return rawUrl;\n }\n\n if (scheme === 'http:') {\n if (!loopback) {\n throw new InvalidBaseUrlError(\n `Refusing insecure http:// base URL for non-loopback host \"${url.host}\". ` +\n `Use https:// (or set ${INSECURE_BASE_URL_ENV}=1 to override for a trusted local proxy).`,\n );\n }\n return rawUrl;\n }\n if (scheme !== 'https:') {\n throw new InvalidBaseUrlError(\n `Refusing base URL with scheme \"${scheme}\" — only https:// (or http:// to localhost) is allowed.`,\n );\n }\n\n if (loopback) return rawUrl;\n if (host === ALLOWED_HOST_APEX || host.endsWith(ALLOWED_HOST_SUFFIX)) {\n return rawUrl;\n }\n\n throw new InvalidBaseUrlError(\n `Refusing base URL host \"${url.host}\" — not an official Vectros host (expected vectros.ai ` +\n `or a *.vectros.ai subdomain). Set ${INSECURE_BASE_URL_ENV}=1 to override (e.g. for a ` +\n `trusted local proxy); never point the MCP server at an untrusted host while authenticated.`,\n );\n}\n","/**\n * hybrid_search — wraps `client.search.content(...)` → `POST /v1/search`.\n *\n * MCP-specific limits (smaller than the underlying API defaults):\n * default limit = 3\n * max limit = 10\n *\n * Why: a tool's JSON result is injected directly into the LLM's\n * context window. The API default of 10 hits × ~1k tokens of\n * contextText each = 10k tokens injected per call. With the API max\n * of 50, that's 50k tokens — blows past most model windows and costs\n * the user a fortune. See the design doc § \"Token economy\".\n *\n * Agents that need more results paginate via `offset`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst MCP_DEFAULT_LIMIT = 3;\nconst MCP_MAX_LIMIT = 10;\n\nconst inputSchema = {\n query: z.string().min(1, 'query must be non-empty').describe('Natural-language or keyword query.'),\n mode: z\n .enum(['HYBRID', 'TEXT', 'SEMANTIC'])\n .optional()\n .describe('HYBRID (BM25 + dense, default), TEXT (BM25 only), or SEMANTIC (dense only).'),\n textMode: z\n .enum(['OR', 'AND', 'PHRASE'])\n .optional()\n .describe(\n 'Keyword-match precision for the BM25 leg (TEXT/HYBRID modes). OR = any term (broad recall), ' +\n 'AND = all terms (higher precision), PHRASE = contiguous phrase. Default: PHRASE (slop 3) in HYBRID, ' +\n 'OR in TEXT. (The advanced raw-query COMPLEX mode is intentionally not exposed here.)',\n ),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(\n `Max hits to return. MCP-specific cap of ${MCP_MAX_LIMIT} (vs API max of 50) to protect ` +\n 'the agent context window. Default 3. Use offset for pagination.',\n ),\n offset: z.number().int().min(0).optional().describe('Skip the first N hits — for pagination.'),\n folderId: z.string().optional().describe('Scope to content in this EXACT folder (Vectros folder id).'),\n rootFolderId: z\n .string()\n .optional()\n .describe('Scope to content under this folder AND all its descendants (subtree-root folder id).'),\n // Content narrowing.\n contentTypes: z\n .array(z.enum(['documents', 'records']))\n .optional()\n .describe('Narrow to content types. [\"documents\"] or [\"records\"]; omit for unified (both).'),\n typeName: z\n .string()\n .optional()\n .describe('Restrict record hits to this schema type (e.g. \"patient\"). No-op for documents.'),\n filters: z\n .record(z.unknown())\n .optional()\n .describe(\n 'Field-level metadata filters (AND-combined). Value = scalar (equality), array (OR-set), or ' +\n 'operator map: $eq/$ne/$gt/$gte/$lt/$lte (scalar) or $in/$nin (array). ' +\n 'e.g. {\"status\":\"open\"} or {\"price\":{\"$gte\":100,\"$lte\":500}}.',\n ),\n // Ownership.\n userId: z.string().optional().describe('Restrict to content owned by this user (Vectros UUID).'),\n orgId: z.string().optional().describe('Restrict to content belonging to this org (Vectros UUID).'),\n clientId: z.string().optional().describe('Restrict to content associated with this client (Vectros UUID).'),\n // Date window.\n createdAfter: z\n .string()\n .optional()\n .describe('Restrict to content created at/after this ISO 8601 UTC timestamp.'),\n createdBefore: z\n .string()\n .optional()\n .describe('Restrict to content created at/before this ISO 8601 UTC timestamp.'),\n // Relevance tuning.\n minSimilarity: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('Minimum semantic similarity (0.0–1.0); results below are excluded.'),\n minTextRelevance: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('Minimum relative keyword (BM25) relevance (0.0–1.0); the keyword-leg analogue of minSimilarity.'),\n uniqueDocuments: z\n .boolean()\n .optional()\n .describe('When true, return at most one chunk per source document.'),\n requireComplete: z\n .boolean()\n .optional()\n .describe(\n 'When true, fail closed (HTTP 503) if a search backend is unavailable rather than silently returning ' +\n 'partial/degraded results. Default false (degrade to the surviving engine; the result still flags degraded).',\n ),\n};\n\nconst hybridSearch: ToolFactory = ({ client, log }) => ({\n name: 'hybrid_search',\n title: 'Hybrid search',\n description:\n 'Search the partner tenant\\'s indexed content (documents + structured records) using hybrid BM25 + dense ranking. ' +\n 'Returns up to 10 results (default 3) with citations and surrounding context for grounding follow-up reasoning. ' +\n 'Narrow with contentTypes/typeName/filters, ownership (userId/orgId/clientId), folder scope, a created date window, ' +\n 'keyword precision (textMode OR/AND/PHRASE), relevance floors (minSimilarity/minTextRelevance), uniqueDocuments, ' +\n 'and requireComplete (fail closed on a degraded backend). Tenant-isolated; the caller\\'s scoped key fully ' +\n 'constrains which content is visible.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const mode = (args.mode as 'HYBRID' | 'TEXT' | 'SEMANTIC' | undefined) ?? 'HYBRID';\n try {\n const result = await client.search.content({\n query: args.query as string,\n mode,\n textMode: args.textMode as Vectros.SearchRequest.TextMode | undefined,\n limit,\n offset: args.offset as number | undefined,\n folderId: args.folderId as string | undefined,\n rootFolderId: args.rootFolderId as string | undefined,\n contentTypes: args.contentTypes as Vectros.SearchRequest.ContentTypes.Item[] | undefined,\n typeName: args.typeName as string | undefined,\n filters: args.filters as Record<string, Vectros.FilterValue> | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n createdAfter: args.createdAfter as string | undefined,\n createdBefore: args.createdBefore as string | undefined,\n minSimilarity: args.minSimilarity as number | undefined,\n minTextRelevance: args.minTextRelevance as number | undefined,\n uniqueDocuments: args.uniqueDocuments as boolean | undefined,\n requireComplete: args.requireComplete as boolean | undefined,\n });\n log.debug(\n { tool: 'hybrid_search', mode, limit, returned: result.results?.length },\n 'hybrid_search ok',\n );\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'hybrid_search', err: String(err) }, 'hybrid_search failed');\n return toolError('hybrid_search', err);\n }\n },\n});\n\nexport default hybridSearch;\n","/**\n * SSE-stream consumer with MCP progress emission.\n *\n * The Vectros SDK's inference methods (`client.inference.ragInference`,\n * `client.inference.documentAsk`) return `AsyncIterable<Event>` where\n * each event has shape:\n *\n * { event: 'search_results', ... } // rag only, fires first\n * { event: 'document_context', ... } // document_ask only, fires first\n * { event: 'content_delta', delta: '...' } // many; aggregate\n * { event: 'truncation_warning', ... } // optional\n * { event: 'done', inputTokens, outputTokens, model, ...credits }\n * { event: 'error', message: '...', code: '...' }\n *\n * NOTE (SDK 0.23): the delta field is `delta` (NOT `text`), and `done`\n * carries flat token/billing fields (NOT a nested `usage` object). Reading\n * the pre-0.23 names silently aggregates an EMPTY answer — the SDK stream is\n * consumed via an `as` cast so tsc can't catch the drift; only a live smoke\n * does. See tests/03-rag-ask + tests/11 against staging.\n *\n * This helper:\n * 1. Iterates the stream.\n * 2. Aggregates `content_delta.delta` into a single answer string.\n * 3. Captures the once-only events (`search_results`,\n * `document_context`, `truncation_warning`, `done`) into the\n * result envelope (`done` minus its discriminator → `usage`).\n * 4. Emits each `content_delta` as an MCP progress notification\n * via the `onProgress` callback so the MCP client doesn't\n * timeout the tool call on a 30-45s RAG generation. See\n * the design doc § \"Long-running tool calls\".\n *\n * The helper is decoupled from the MCP SDK — the `onProgress`\n * callback is wired by the tool implementation against the\n * RequestHandlerExtra.sendNotification API.\n */\n\nexport type SseEvent =\n | { event: 'search_results'; [k: string]: unknown }\n | { event: 'document_context'; [k: string]: unknown }\n | { event: 'content_delta'; delta: string }\n | { event: 'truncation_warning'; [k: string]: unknown }\n | { event: 'done'; [k: string]: unknown }\n | { event: 'error'; message?: string; [k: string]: unknown };\n\nexport interface AggregatedResult {\n /** Full concatenated text from all `content_delta` events. */\n answer: string;\n /** The `search_results` event payload, if present (rag_ask only). */\n searchResults?: Record<string, unknown>;\n /** The `document_context` event payload, if present (document_ask only). */\n documentContext?: Record<string, unknown>;\n /** The `truncation_warning` event payload, if present. */\n truncationWarning?: Record<string, unknown>;\n /** The `done` event payload (token + billing fields), if present. */\n usage?: Record<string, unknown>;\n}\n\nexport type ProgressEmitter = (chunk: { text: string; total: number }) => void | Promise<void>;\n\nexport class StreamError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'StreamError';\n }\n}\n\n/**\n * Consume an SSE-event stream, emit progress notifications per\n * `content_delta`, and return the aggregated result envelope.\n *\n * @param stream AsyncIterable from `client.inference.ragInference`\n * or `client.inference.documentAsk`.\n * @param onProgress Called once per `content_delta` event. The\n * `total` field is the running cumulative character\n * count of the answer buffer (useful for MCP\n * progress percent if the client wants it).\n * If omitted, no progress notifications are\n * emitted (handy for tests).\n *\n * @throws StreamError if the stream emits an `event: 'error'` event.\n */\nexport async function consumeStream<T extends SseEvent>(\n stream: AsyncIterable<T>,\n onProgress?: ProgressEmitter,\n): Promise<AggregatedResult> {\n let answer = '';\n let searchResults: Record<string, unknown> | undefined;\n let documentContext: Record<string, unknown> | undefined;\n let truncationWarning: Record<string, unknown> | undefined;\n let usage: Record<string, unknown> | undefined;\n\n for await (const ev of stream) {\n switch (ev.event) {\n case 'search_results': {\n const { event: _e, ...rest } = ev;\n searchResults = rest;\n break;\n }\n case 'document_context': {\n const { event: _e, ...rest } = ev;\n documentContext = rest;\n break;\n }\n case 'content_delta': {\n // SDK 0.23: the chunk field is `delta` (was `text` pre-0.23).\n const delta = (ev as { delta?: string }).delta ?? '';\n answer += delta;\n if (onProgress) {\n await onProgress({ text: delta, total: answer.length });\n }\n break;\n }\n case 'truncation_warning': {\n const { event: _e, ...rest } = ev;\n truncationWarning = rest;\n break;\n }\n case 'done': {\n // SDK 0.23: `done` carries flat token/billing fields (inputTokens,\n // outputTokens, model, …credits) — not a nested `usage`. Capture the\n // whole payload minus the discriminator.\n const { event: _e, ...rest } = ev;\n usage = rest;\n break;\n }\n case 'error': {\n const message = (ev as { message?: string }).message ?? 'Unknown stream error';\n throw new StreamError(message);\n }\n }\n }\n\n return { answer, searchResults, documentContext, truncationWarning, usage };\n}\n","/**\n * Shared error-to-tool-result formatting.\n *\n * All tool errors map to MCP `isError: true` responses — never\n * thrown out of the handler. This keeps the JSON-RPC stream clean\n * and lets the agent recover from a tool failure rather than the\n * MCP client tearing down the whole session.\n */\nimport type { ToolResult } from './types.js';\nimport { StreamError } from '../sse.js';\n\ninterface VectrosErrorShape {\n statusCode?: number;\n message?: string;\n name?: string;\n}\n\n/**\n * Format an unknown error into a tool result. Pulls out the\n * Vectros SDK error code + message if present.\n *\n * @param toolName for log + result framing\n * @param err the thrown value (Error or unknown)\n * @param docPointer optional URL to surface for partner-actionable errors\n */\nexport function toolError(toolName: string, err: unknown, docPointer?: string): ToolResult {\n let summary = `${toolName} failed`;\n let detail = String(err);\n\n if (err instanceof StreamError) {\n summary = `${toolName} stream error`;\n detail = err.message;\n } else if (err instanceof Error) {\n const e = err as Error & VectrosErrorShape;\n detail = e.message;\n if (e.statusCode) {\n summary = `${toolName} failed: HTTP ${e.statusCode}`;\n } else if (e.name && e.name !== 'Error') {\n summary = `${toolName} failed: ${e.name}`;\n }\n }\n\n const pointer = docPointer ? `\\n\\nSee: ${docPointer}` : '';\n\n return {\n isError: true,\n content: [\n {\n type: 'text',\n text: `${summary}\\n${detail}${pointer}`,\n },\n ],\n };\n}\n","/**\n * record_query — read structured records, two modes (auto-detected by args):\n *\n * field present → LOOKUP on a lookup-indexed field, one of:\n * • equality: `value`\n * • range: `from` + `to`\n * • prefix: `prefix`\n * no field → LIST by type (+ optional ownership filters)\n *\n * Lookups route through `lookupRecordsByBody` (POST /v1/records/lookup), NOT the\n * GET variant: the POST body supports equality/range/prefix uniformly, is the\n * REQUIRED path for SENSITIVE lookup fields (the GET variant 400s — the value\n * can't ride the URL query string), and never leaks values into access/proxy\n * logs. One path, no GET/POST branching, no sensitivity sniffing.\n *\n * MCP-specific limits (smaller than the API defaults): default 3 / max 10 —\n * records inject directly into the agent context window (token economy; see\n * the design doc § \"Token economy\"). The MCP `limit` is the cap:\n * one page returns at most `limit` records, so there is no hidden truncation\n * beyond the documented ceiling. Cursor pagination past the first page is\n * intentionally not exposed.\n *\n * SDK 0.23 returns the `{ data, nextCursor }` page envelope; we unwrap to the\n * bare `RecordResponse[]` (the v0.1/v0.2 agent contract) via `pageItems`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems } from '../paging.js';\n\nconst MCP_DEFAULT_LIMIT = 3;\nconst MCP_MAX_LIMIT = 10;\n\nconst inputSchema = {\n type: z\n .string()\n .min(1, 'type (record type) is required')\n .describe('Record type / schema name (e.g. \"patient\", \"clinical_note\").'),\n // Lookup-mode args — provide `field` plus EXACTLY ONE of: value | from+to | prefix.\n field: z\n .string()\n .optional()\n .describe('Lookup mode: name of the lookup-indexed field to query by.'),\n value: z.string().optional().describe('Lookup mode (equality): exact-match value for `field`.'),\n from: z\n .string()\n .optional()\n .describe('Lookup mode (range): inclusive lower bound; requires `to`. Non-sensitive fields only.'),\n to: z\n .string()\n .optional()\n .describe('Lookup mode (range): inclusive upper bound; requires `from`.'),\n prefix: z\n .string()\n .optional()\n .describe('Lookup mode (prefix): match values starting with this. String, non-sensitive fields only.'),\n order: z\n .enum(['asc', 'desc'])\n .optional()\n .describe(\n 'Lookup mode: sort direction by the looked-up field. `asc` (default) or `desc` — use `desc` with a range/' +\n 'prefix lookup to get the most-recent / highest values first (e.g. latest-N). Ignored in list mode.',\n ),\n // List-mode args:\n userId: z.string().optional().describe('List mode: scope to records owned by this user.'),\n orgId: z.string().optional().describe('List mode: scope to records owned by this org.'),\n clientId: z.string().optional().describe('List mode: scope to records associated with this client.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(\n `Max records to return. MCP-specific cap of ${MCP_MAX_LIMIT} (vs API max of 100) ` +\n 'to protect the agent context window. Default 3.',\n ),\n};\n\nconst recordQuery: ToolFactory = ({ client, log }) => ({\n name: 'record_query',\n title: 'Record query (list or lookup)',\n description:\n 'Query structured records of a given type. Two modes:\\n' +\n ' • Lookup on a lookup-indexed field: pass `field` plus exactly one of `value` (exact), ' +\n '`from`+`to` (range), or `prefix`. Works on sensitive fields too.\\n' +\n ' • List by type: omit `field`; optionally filter by `userId`/`orgId`/`clientId`.\\n' +\n 'Returns up to 10 records (default 3). Mode is auto-detected from the arguments present.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const type = args.type as string;\n const field = args.field as string | undefined;\n const value = args.value as string | undefined;\n const from = args.from as string | undefined;\n const to = args.to as string | undefined;\n const prefix = args.prefix as string | undefined;\n try {\n let records: Vectros.RecordResponse[];\n if (field) {\n // Lookup mode — validate exactly one lookup shape was supplied.\n const hasEquality = value !== undefined;\n const hasRange = from !== undefined || to !== undefined;\n const hasPrefix = prefix !== undefined;\n const modes = Number(hasEquality) + Number(hasRange) + Number(hasPrefix);\n if (modes === 0) {\n return toolError(\n 'record_query',\n new Error(\n `lookup on field '${field}' needs one of: 'value' (exact), 'from'+'to' (range), or 'prefix'.`,\n ),\n );\n }\n if (modes > 1) {\n return toolError(\n 'record_query',\n new Error(\"'value', 'from'/'to', and 'prefix' are mutually exclusive — provide exactly one.\"),\n );\n }\n if (hasRange && !(from !== undefined && to !== undefined)) {\n return toolError('record_query', new Error(\"range lookup requires both 'from' and 'to'.\"));\n }\n // POST-body lookup: sensitive-safe (value never in the URL), all modes in one path.\n const page = await client.records.lookupRecordsByBody({\n type,\n field,\n value,\n from,\n to,\n prefix,\n order: args.order as 'asc' | 'desc' | undefined,\n limit,\n });\n records = pageItems(page);\n log.debug(\n { tool: 'record_query', mode: 'lookup', type, field, returned: records.length },\n 'record_query lookup ok',\n );\n } else {\n // List mode — filter by ownership + type.\n const page = await client.records.listRecords({\n type,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n limit,\n });\n records = pageItems(page);\n log.debug(\n { tool: 'record_query', mode: 'list', type, limit, returned: records.length },\n 'record_query list ok',\n );\n }\n return {\n content: [{ type: 'text', text: JSON.stringify(records, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'record_query', err: String(err) }, 'record_query failed');\n return toolError('record_query', err);\n }\n },\n});\n\nexport default recordQuery;\n","/**\n * Pagination helpers for the `{ data, nextCursor }` page envelope.\n *\n * As of SDK 0.23 (surface-freeze), the\n * list/lookup partner-API methods — `schemas.listSchemas`,\n * `records.listRecords`, `records.lookupRecords` — return this paged envelope\n * rather than a bare array. The MCP tools serialize their result straight into\n * the agent's context window, so we unwrap the envelope here to keep the\n * agent-facing output a flat array (the v0.1/v0.2 contract) and absorb the\n * shape change in exactly one, unit-tested place.\n *\n * These are pure helpers (no SDK/IO coupling — the caller injects the\n * page-fetcher), so they're the unit-test target rather than the tool\n * handlers' SDK plumbing.\n */\n\n/** The paged-response envelope: a page of items + an opaque next-page cursor. */\nexport interface Page<T> {\n /** Items on this page, in the endpoint's natural order. Empty (or absent) when no results. */\n data?: T[] | undefined;\n /** Opaque cursor for the next page; null/absent when no more pages remain. Treat as opaque. */\n nextCursor?: (string | null) | undefined;\n}\n\n/** Unwrap a single page to its items — the agent-facing bare array. */\nexport function pageItems<T>(page: Page<T>): T[] {\n return page.data ?? [];\n}\n\n/**\n * Drain every page of a cursor-paginated endpoint into one flat array.\n *\n * `fetchPage(startFrom)` fetches a single page; the previous page's\n * `nextCursor` is fed back as the next `startFrom`. The loop terminates on a\n * FALSY `nextCursor` (null / undefined / empty string) — never on an empty\n * `data` array. That distinction matters: terminating on page *fullness*\n * instead of cursor *nullity* is exactly the bug that infinite-loops the old\n * `getAllResults()`-style iterators under the 0.23 null-cursor semantics\n * (a non-full final page legitimately carries a null cursor).\n */\nexport async function drainPages<T>(\n fetchPage: (startFrom?: string) => Promise<Page<T>>,\n): Promise<T[]> {\n const all: T[] = [];\n let startFrom: string | undefined;\n for (;;) {\n const page = await fetchPage(startFrom);\n if (page.data?.length) all.push(...page.data);\n const next = page.nextCursor;\n if (!next) break;\n startFrom = next;\n }\n return all;\n}\n","/**\n * record_get — fetch one structured record by id, including its full payload.\n * Wraps `client.records.getRecord()`.\n *\n * Complements record_query / hybrid_search (which return the indexed\n * projection): use record_get when you have an id and need the complete record.\n * A very large payload is truncated to protect the agent context window — the\n * same token-economy guard document_get applies to document text. When that\n * happens the structured `payload` is dropped and replaced with a `payloadPreview`\n * string + `payloadTruncated: true` + `payloadTotalChars`, so the truncated value\n * is never an invalid-JSON string masquerading as the object payload.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\n// ~8k tokens; mirrors document_get's text cap.\nconst MAX_PAYLOAD_CHARS = 32_000;\n\nconst inputSchema = {\n id: z\n .string()\n .min(1, 'id is required')\n .describe('The Vectros record id (e.g. from record_query or hybrid_search).'),\n};\n\nconst recordGet: ToolFactory = ({ client, log }) => ({\n name: 'record_get',\n title: 'Get a record by id',\n description:\n 'Fetch a single structured record by its Vectros id, including the full payload. ' +\n 'Use after record_query / hybrid_search surfaces an id and you need the complete record. ' +\n 'Very large payloads are truncated to protect the agent context window.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n try {\n const record = await client.records.getRecord({ id });\n const out: Record<string, unknown> = { ...record };\n if (record.payload !== undefined) {\n const json = JSON.stringify(record.payload);\n if (json.length > MAX_PAYLOAD_CHARS) {\n // Don't ship a sliced JSON string in the structured `payload` slot — it\n // would be invalid JSON and mislead a consumer that expects an object.\n // Mirror document_get's text handling: drop the oversized payload and\n // surface a clearly-labelled string preview + a truncation flag.\n delete out.payload;\n out.payloadPreview = json.slice(0, MAX_PAYLOAD_CHARS);\n out.payloadTruncated = true;\n out.payloadTotalChars = json.length;\n }\n }\n log.debug(\n { tool: 'record_get', id, truncated: out.payloadTruncated === true },\n 'record_get ok',\n );\n return { content: [{ type: 'text', text: JSON.stringify(out, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'record_get', id, err: String(err) }, 'record_get failed');\n return toolError('record_get', err);\n }\n },\n});\n\nexport default recordGet;\n","/**\n * record_create — create a structured record. Wraps `client.records.createRecord()`.\n *\n * The agent supplies the human-friendly `type` (typeName) and the server resolves\n * the schema from it (recordType is unique per tenant + context), so the agent\n * never carries schema ids and the tool makes a single round-trip — no schema\n * pre-fetch.\n *\n * Idempotent by `externalId`: re-creating with the same externalId returns the\n * existing record rather than duplicating.\n *\n * Requires the credential to allow `records:c` — a read-only key gets a clean\n * permission error (the tool never tears down the session).\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n type: z\n .string()\n .min(1, 'type is required')\n .describe('Record type / schema name (e.g. \"task\"). Must match an existing schema — see list_schemas.'),\n fields: z\n .record(z.string(), z.unknown())\n .describe(\n 'The record payload — a JSON object of field→value, validated against the type schema. ' +\n 'Call list_schemas to learn required fields, types, and enum values.',\n ),\n externalId: z\n .string()\n .optional()\n .describe(\n 'Stable caller-supplied id. Immutable; unique per type. Re-creating with the same externalId ' +\n 'returns the existing record (idempotent) — use it to make creates safely retryable.',\n ),\n indexMode: z\n .enum(['HYBRID', 'SEMANTIC', 'TEXT', 'NONE'])\n .optional()\n .describe(\n 'Search-index strategy for this record, set at create only (immutable after). HYBRID (BM25 + dense), ' +\n 'SEMANTIC (dense only), TEXT (BM25 only), NONE (store-only — never appears in hybrid_search/rag_ask; ' +\n 'still retrievable by id and structured-field lookup). Omit to inherit the type schema\\'s default; if ' +\n 'the schema default is NONE and you want this record searchable, set it here — it cannot be changed later.',\n ),\n status: z.string().optional().describe('Record lifecycle status. Defaults to ACTIVE server-side.'),\n folderId: z.string().optional().describe('Group this record into a folder.'),\n userId: z.string().optional().describe('Owning user id.'),\n orgId: z.string().optional().describe('Owning organization id.'),\n clientId: z.string().optional().describe('Associated client id.'),\n};\n\nconst recordCreate: ToolFactory = ({ client, log }) => ({\n name: 'record_create',\n title: 'Create a record',\n description:\n 'Create a structured record of a given type. Provide `type` and `fields` (the payload, validated ' +\n 'against the type schema — call list_schemas first to learn required fields and enums). Idempotent ' +\n 'by `externalId`. Requires the key to allow records:c.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const type = args.type as string;\n try {\n // The server resolves the schema from `typeName` — pass it directly, no\n // schemaId pre-fetch. An unknown type returns a clean 4xx from the API.\n const created = await client.records.createRecord({\n typeName: type,\n payload: args.fields as Record<string, unknown>,\n externalId: args.externalId as string | undefined,\n indexMode: args.indexMode as 'HYBRID' | 'SEMANTIC' | 'TEXT' | 'NONE' | undefined,\n status: args.status as string | undefined,\n folderId: args.folderId as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n });\n log.debug({ tool: 'record_create', type, id: created.id }, 'record_create ok');\n return { content: [{ type: 'text', text: JSON.stringify(created, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'record_create', type, err: String(err) }, 'record_create failed');\n return toolError('record_create', err);\n }\n },\n});\n\nexport default recordCreate;\n","/**\n * record_update — update a record's fields. Wraps `client.records.patchRecord()`\n * (RFC-7386 JSON Merge Patch).\n *\n * The caller's `fields` are sent as the patch payload: the server DEEP-MERGES\n * them into the stored payload — keys you send overwrite (recursing into nested\n * objects), a key set to `null` is deleted, and keys you omit are preserved. No\n * read-modify-write and no race window (contrast the old GET-then-full-replace).\n * `typeName`/`schemaId` are immutable and must not be sent on a patch.\n *\n * Optimistic concurrency: pass the `version` you last read as `expectedVersion`.\n * If the record changed since, the server rejects with a 409 conflict — re-read\n * (record_get) and retry. Omit `expectedVersion` for last-write-wins.\n *\n * Requires the credential to allow `records:u`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n id: z.string().min(1, 'id is required').describe('The Vectros record id to update.'),\n fields: z\n .record(z.string(), z.unknown())\n .describe(\n 'Field→value changes DEEP-MERGED into the existing payload: keys you send overwrite (recursing into ' +\n 'nested objects), a key set to `null` is deleted, and unspecified fields are preserved.',\n ),\n status: z\n .string()\n .optional()\n .describe('Set the record lifecycle status (e.g. ARCHIVED) — archive/workflow without physical deletion.'),\n expectedVersion: z\n .number()\n .int()\n .optional()\n .describe(\n 'Optimistic concurrency: the version you last read. If the record changed since, the update is ' +\n 'refused as a conflict (re-read and retry). Omit for last-write-wins.',\n ),\n};\n\nconst recordUpdate: ToolFactory = ({ client, log }) => ({\n name: 'record_update',\n title: 'Update a record',\n description:\n 'Update a record by id. The provided `fields` are DEEP-MERGED into the existing payload (unspecified ' +\n 'fields are preserved; a field set to `null` is deleted). Pass `expectedVersion` (the version you last ' +\n 'read) for safe concurrent edits — a stale update is refused (409). Use `status` to archive without ' +\n 'deleting. Requires the key to allow records:u.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n const fields = args.fields as Record<string, unknown>;\n const status = args.status as string | undefined;\n const expectedVersion = args.expectedVersion as number | undefined;\n try {\n // RFC-7386 merge-patch: send only what's changing. typeName/schemaId are\n // immutable and rejected if present, so they are intentionally omitted.\n const body: Vectros.RecordRequest = { payload: fields };\n if (status !== undefined) body.status = status;\n if (expectedVersion !== undefined) body.expectedVersion = expectedVersion;\n\n const updated = await client.records.patchRecord({ id, body });\n log.debug({ tool: 'record_update', id }, 'record_update ok');\n return { content: [{ type: 'text', text: JSON.stringify(updated, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'record_update', id, err: String(err) }, 'record_update failed');\n return toolError('record_update', err);\n }\n },\n});\n\nexport default recordUpdate;\n","/**\n * record_delete — permanently delete a record by id. Wraps\n * `client.records.deleteRecord()` (leaves a tombstone server-side).\n *\n * Scope-gated: the credential must allow `records:d`. A key without it gets a\n * clean permission error (the tool returns isError, never tears down the\n * session). The flagship blueprints deliberately omit records:d, so hard-delete\n * is dark there by default — for archive/soft-delete use record_update to set\n * the record `status` instead.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n id: z.string().min(1, 'id is required').describe('The Vectros record id to delete.'),\n};\n\nconst recordDelete: ToolFactory = ({ client, log }) => ({\n name: 'record_delete',\n title: 'Delete a record',\n description:\n 'Permanently delete a record by id (leaves a tombstone). Requires the key to allow records:d — a key ' +\n 'without it gets a permission error. To archive without deleting, use record_update to set status instead.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n try {\n await client.records.deleteRecord({ id });\n log.debug({ tool: 'record_delete', id }, 'record_delete ok');\n return { content: [{ type: 'text', text: JSON.stringify({ deleted: true, id }, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'record_delete', id, err: String(err) }, 'record_delete failed');\n return toolError('record_delete', err);\n }\n },\n});\n\nexport default recordDelete;\n","/**\n * rag_ask — wraps `client.inference.ragInference(...)` → `POST /v1/rag`.\n *\n * RAG generation can take 30-45s (longer with Opus). MCP clients\n * have tool-execution timeouts that fire well inside that window.\n *\n * Two mechanisms keep this tool reliable:\n * 1. SSE deltas are aggregated into a single final response (MCP\n * tools are request/response — they don't natively stream).\n * 2. Per `content_delta` we emit an MCP `notifications/progress`\n * to keep the JSON-RPC connection warm so the client doesn't\n * timeout the tool call before we return.\n *\n * See the design doc § \"Long-running tool calls\" for\n * the architectural rule.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { consumeStream, type SseEvent } from '../sse.js';\nimport { toolError } from './errors.js';\n\nconst SEARCH_MCP_DEFAULT_LIMIT = 5;\nconst SEARCH_MCP_MAX_LIMIT = 10;\n\nconst inputSchema = {\n query: z.string().min(1, 'query must be non-empty').describe('Question to ground against retrieved content.'),\n instructions: z\n .string()\n .optional()\n .describe(\n 'System prompt that overrides the default for the generation step — e.g. \"answer only from the provided ' +\n 'context, cite sources, be concise\". Default: a generic answer-from-context instruction.',\n ),\n model: z\n .string()\n .optional()\n .describe(\n 'Inference model alias (e.g. claude-haiku-4-5, claude-sonnet-4-6, claude-opus-4-8). ' +\n 'Default = tier-appropriate Haiku. See GET /v1/models for the catalog the calling key can reach.',\n ),\n search: z\n .object({\n mode: z.enum(['HYBRID', 'TEXT', 'SEMANTIC']).optional().describe('Retrieval mode. Default HYBRID.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(SEARCH_MCP_MAX_LIMIT)\n .optional()\n .describe(`Passages to retrieve before generating. Default ${SEARCH_MCP_DEFAULT_LIMIT}, max ${SEARCH_MCP_MAX_LIMIT}.`),\n // Retrieval scoping — parity with hybrid_search so an agent can ground the\n // answer on a specific owner / folder / type / metadata subset, not just the\n // whole-tenant corpus.\n userId: z.string().optional().describe('Restrict retrieval to content owned by this user (Vectros UUID).'),\n orgId: z.string().optional().describe('Restrict retrieval to content owned by this org (Vectros UUID).'),\n clientId: z.string().optional().describe('Restrict retrieval to content tagged with this client (Vectros UUID).'),\n folderId: z.string().optional().describe('Restrict retrieval to this exact folder.'),\n rootFolderId: z.string().optional().describe('Restrict retrieval to this folder and all its descendants.'),\n typeName: z.string().optional().describe('Restrict record retrieval to this schema type.'),\n contentTypes: z\n .array(z.enum(['documents', 'records']))\n .optional()\n .describe('Narrow retrieval to content types. [\"documents\"] or [\"records\"]; omit for both.'),\n filters: z\n .record(z.unknown())\n .optional()\n .describe(\n 'Field-level metadata filters (AND-combined). Value = scalar (equality), array (OR-set), or operator ' +\n 'map ($eq/$ne/$gt/$gte/$lt/$lte, $in/$nin). e.g. {\"status\":\"open\"}.',\n ),\n createdAfter: z.string().optional().describe('Restrict to content created at/after this ISO 8601 UTC timestamp.'),\n createdBefore: z.string().optional().describe('Restrict to content created at/before this ISO 8601 UTC timestamp.'),\n requireComplete: z\n .boolean()\n .optional()\n .describe('Fail closed (503) on a degraded search backend instead of grounding on partial results. Default false.'),\n })\n .optional()\n .describe('Retrieval params + scoping. Default mode HYBRID, limit ' + SEARCH_MCP_DEFAULT_LIMIT + '.'),\n maxTokens: z.number().int().min(1).optional().describe('Max output tokens.'),\n temperature: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('Sampling temperature (0.0–1.0). Default 0.3 — lower favors deterministic, retrieval-grounded answers.'),\n};\n\nconst ragAsk: ToolFactory = ({ client, log }) => ({\n name: 'rag_ask',\n title: 'RAG ask (corpus-wide)',\n description:\n 'Ask a question grounded against the partner tenant\\'s indexed content. ' +\n 'Vectros performs a hybrid search, injects the top-K passages into the prompt, ' +\n 'and streams a model answer back. Scope retrieval with `search` (ownership, folder, type, metadata filters, ' +\n 'date window) to ground on a subset — e.g. one patient or one folder — and steer generation with ' +\n '`instructions` / `temperature`. The full answer is returned as a single response; ' +\n 'progress notifications keep the call alive during the 30-45s generation window. ' +\n 'Inference runs in-perimeter against AWS Bedrock — PHI never leaves the BAA boundary.',\n inputSchema,\n handler: async (args, extra): Promise<ToolResult> => {\n try {\n const searchArg = (args.search ?? {}) as {\n mode?: 'HYBRID' | 'TEXT' | 'SEMANTIC';\n limit?: number;\n userId?: string;\n orgId?: string;\n clientId?: string;\n folderId?: string;\n rootFolderId?: string;\n typeName?: string;\n contentTypes?: Array<'documents' | 'records'>;\n filters?: Record<string, unknown>;\n createdAfter?: string;\n createdBefore?: string;\n requireComplete?: boolean;\n };\n const search: Vectros.RagSearch = {\n mode: searchArg.mode ?? 'HYBRID',\n limit: searchArg.limit ?? SEARCH_MCP_DEFAULT_LIMIT,\n userId: searchArg.userId,\n orgId: searchArg.orgId,\n clientId: searchArg.clientId,\n folderId: searchArg.folderId,\n rootFolderId: searchArg.rootFolderId,\n typeName: searchArg.typeName,\n contentTypes: searchArg.contentTypes as Vectros.RagSearch.ContentTypes.Item[] | undefined,\n filters: searchArg.filters as Record<string, Vectros.FilterValue> | undefined,\n createdAfter: searchArg.createdAfter,\n createdBefore: searchArg.createdBefore,\n requireComplete: searchArg.requireComplete,\n };\n const stream = (await client.inference.ragInference({\n query: args.query as string,\n instructions: args.instructions as string | undefined,\n model: args.model as string | undefined,\n search,\n maxTokens: args.maxTokens as number | undefined,\n temperature: args.temperature as number | undefined,\n })) as AsyncIterable<SseEvent>;\n\n const progressToken = extra._meta?.progressToken;\n const onProgress = progressToken !== undefined && extra.sendNotification\n ? async (chunk: { text: string; total: number }) => {\n await extra.sendNotification!({\n method: 'notifications/progress',\n params: {\n progressToken,\n progress: chunk.total,\n message: chunk.text,\n },\n });\n }\n : undefined;\n\n const aggregated = await consumeStream(stream, onProgress);\n\n log.debug(\n {\n tool: 'rag_ask',\n answerLength: aggregated.answer.length,\n usage: aggregated.usage,\n },\n 'rag_ask ok',\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n answer: aggregated.answer,\n searchResults: aggregated.searchResults,\n truncationWarning: aggregated.truncationWarning,\n usage: aggregated.usage,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n log.warn({ tool: 'rag_ask', err: String(err) }, 'rag_ask failed');\n return toolError(\n 'rag_ask',\n err,\n 'https://docs.vectros.ai/feature-inference#known-limitations',\n );\n }\n },\n});\n\nexport default ragAsk;\n","/**\n * document_ask — wraps `client.inference.documentAsk(...)` →\n * `POST /v1/documents/{id}/ask`.\n *\n * Same SSE-aggregation + progress-notifications pattern as rag_ask.\n * See sibling file for full architectural commentary.\n *\n * Differences vs rag_ask:\n * - Scoped to a single document, not a corpus\n * - No `search_results` event; emits `document_context` instead\n * - Returns structured 413 on documents exceeding the 32k-input-token cap\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { consumeStream, type SseEvent } from '../sse.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n documentId: z.string().min(1, 'documentId is required').describe('ID of the document to ask against.'),\n prompt: z.string().min(1, 'prompt is required').describe('Question to ask about the document.'),\n model: z\n .string()\n .optional()\n .describe(\n 'Inference model alias. Default = tier-appropriate Haiku. ' +\n 'See GET /v1/models for the catalog the calling key can reach.',\n ),\n maxTokens: z.number().int().min(1).optional().describe('Max output tokens.'),\n};\n\nconst documentAsk: ToolFactory = ({ client, log }) => ({\n name: 'document_ask',\n title: 'Document ask (single-document)',\n description:\n 'Ask a question against a single indexed document. Returns a grounded answer with the document context that informed it. ' +\n 'For documents exceeding the input-token cap, the API returns a structured 413 with `estimatedTokens` and `limitTokens`. ' +\n 'Inference runs in-perimeter against AWS Bedrock — PHI never leaves the BAA boundary.',\n inputSchema,\n handler: async (args, extra): Promise<ToolResult> => {\n try {\n const stream = (await client.inference.documentAsk({\n id: args.documentId as string,\n prompt: args.prompt as string,\n model: args.model as string | undefined,\n maxTokens: args.maxTokens as number | undefined,\n })) as AsyncIterable<SseEvent>;\n\n const progressToken = extra._meta?.progressToken;\n const onProgress = progressToken !== undefined && extra.sendNotification\n ? async (chunk: { text: string; total: number }) => {\n await extra.sendNotification!({\n method: 'notifications/progress',\n params: {\n progressToken,\n progress: chunk.total,\n message: chunk.text,\n },\n });\n }\n : undefined;\n\n const aggregated = await consumeStream(stream, onProgress);\n\n log.debug(\n {\n tool: 'document_ask',\n documentId: args.documentId,\n answerLength: aggregated.answer.length,\n usage: aggregated.usage,\n },\n 'document_ask ok',\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n answer: aggregated.answer,\n documentContext: aggregated.documentContext,\n usage: aggregated.usage,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n log.warn({ tool: 'document_ask', err: String(err) }, 'document_ask failed');\n return toolError(\n 'document_ask',\n err,\n 'https://docs.vectros.ai/feature-inference#known-limitations',\n );\n }\n },\n});\n\nexport default documentAsk;\n","/**\n * list_schemas — wraps `client.schemas.listSchemas()` → `GET /v1/schemas`.\n *\n * Makes `record_query` discoverable: the agent calls `list_schemas`\n * first to learn what record types exist (and which fields are\n * lookup-indexed for exact-match queries), then constructs a valid\n * `record_query` call against one of them.\n *\n * Args are optional ownership filters that pass through to the SDK.\n * Default behavior (no args) returns every schema the credential can\n * see — scoped by AccessProfile for `ssk_*` keys.\n *\n * As of SDK 0.23 `listSchemas` returns the `{ data, nextCursor }` page\n * envelope (page size 20, server-capped at 100) — not a bare array. We\n * DRAIN every page (schemas are small metadata objects; the full catalog\n * fits agent context) and serialize the flat `SchemaResponse[]`, preserving\n * the v0.1/v0.2 bare-array agent contract across the envelope change. See\n * src/paging.ts.\n *\n * No MCP-specific result cap applies — unlike record_query/hybrid_search,\n * the full schema catalog is the point of this tool.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { drainPages } from '../paging.js';\n\nconst inputSchema = {\n userId: z\n .string()\n .optional()\n .describe(\n 'Filter to schemas visible to a specific user. Optional; default returns all schemas the credential can see.',\n ),\n orgId: z\n .string()\n .optional()\n .describe(\n 'Filter to schemas visible to a specific org. Optional; default returns all schemas the credential can see.',\n ),\n surface: z\n .enum(['record', 'document', 'user', 'org', 'client'])\n .optional()\n .describe(\n 'Filter to schemas bindable to this surface — e.g. `document` to list only document types, or `record` ' +\n 'for record types. The identity surfaces (user/org/client) are account-wide. Optional.',\n ),\n recordType: z\n .string()\n .optional()\n .describe(\n 'Resolve the single schema for this record type (its natural handle, e.g. \"patient\") instead of listing — ' +\n 'returns a one-element result, or empty if none. Combine with `surface=user|org|client` for an identity ' +\n 'schema. Takes precedence over userId/orgId. Optional.',\n ),\n};\n\nconst listSchemas: ToolFactory = ({ client, log }) => ({\n name: 'list_schemas',\n title: 'List record schemas',\n description:\n 'List the structured-record schema catalog for the partner tenant. ' +\n 'Each schema describes a record type (e.g. \"patient\", \"clinical_note\") — its fields, lookup-indexed fields, and capabilities. ' +\n 'Use this to discover what record types exist before calling `record_query`. ' +\n 'Filter with `surface` (record/document/user/org/client — e.g. only document types), `recordType` (resolve ' +\n 'one schema by its type name), or `userId`/`orgId`; default returns everything the credential can see.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const userId = args.userId as string | undefined;\n const orgId = args.orgId as string | undefined;\n const surface = args.surface as 'record' | 'document' | 'user' | 'org' | 'client' | undefined;\n const recordType = args.recordType as string | undefined;\n try {\n // Drain the paged envelope into the full catalog (flat array).\n const schemas = await drainPages<Vectros.SchemaResponse>((startFrom) =>\n client.schemas.listSchemas({ userId, orgId, surface, recordType, startFrom }),\n );\n log.debug(\n { tool: 'list_schemas', userId, orgId, surface, recordType, returned: schemas.length },\n 'list_schemas ok',\n );\n return {\n content: [{ type: 'text', text: JSON.stringify(schemas, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'list_schemas', err: String(err) }, 'list_schemas failed');\n return toolError('list_schemas', err);\n }\n },\n});\n\nexport default listSchemas;\n","/**\n * document_get — wraps `client.documents.getDocument({id})` plus\n * (optionally) `client.documents.getDocumentText({id})` and/or\n * `client.documents.getDocumentDownloadUrl({id})`.\n *\n * Returns document metadata, optionally with full text inline and/or a\n * presigned download URL for the original file.\n *\n * MCP-specific text truncation: when `includeText: true`, the text\n * is capped at ~8,000 tokens (≈ 32,000 chars at the standard\n * 4-chars-per-token English heuristic). Caps the agent's context\n * burn from a single tool call and forces the agent toward\n * `document_ask` for question-driven extraction on large documents.\n * Truncation surfaces as `truncated: true` in the response.\n *\n * `getDocumentText` returns 404 when the document was ingested\n * without `storeText: true`. We handle this gracefully — surface\n * `textAvailable: false` in the response so the agent knows\n * `document_ask` is the right next step instead of returning isError.\n *\n * See the design doc § Documents → document_get.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\n// ~8K tokens at 4 chars/token (rough English heuristic). Conservative\n// — better to truncate slightly early than to blow past an agent's\n// context window mid-tool-call.\nconst MAX_TEXT_CHARS = 32_000;\n\nconst inputSchema = {\n documentId: z\n .string()\n .min(1, 'documentId is required')\n .describe('The document ID returned by document_ingest or hybrid_search.'),\n includeText: z\n .boolean()\n .optional()\n .describe(\n 'If true, fetch and include the document text (capped at ~8K tokens, truncated: true flag if cut). ' +\n 'Default false — metadata only. For larger documents, prefer `document_ask` over dumping text into context.',\n ),\n includeDownloadUrl: z\n .boolean()\n .optional()\n .describe(\n 'If true, also return a short-lived presigned `downloadUrl` for the original file (file-backed documents ' +\n 'only — the way to retrieve the raw bytes of a document ingested via file mode). Default false. ' +\n 'Unavailable for text-only documents — `downloadAvailable: false` is set instead.',\n ),\n};\n\nfunction truncateText(text: string): { text: string; truncated: boolean } {\n if (text.length <= MAX_TEXT_CHARS) return { text, truncated: false };\n return { text: text.slice(0, MAX_TEXT_CHARS), truncated: true };\n}\n\n/**\n * Is this a \"the document has no retrievable file/text\" response rather than a\n * real error? getDocumentText 404s when ingested without storeText; a download\n * URL is 404/400 for a text-only (non-file) document. Both mean \"not available\n * for this document\", which we surface as a flag rather than isError.\n */\nfunction isNotAvailable(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const e = err as Error & { statusCode?: number };\n return e.statusCode === 404 || e.statusCode === 400;\n}\n\nconst documentGet: ToolFactory = ({ client, log }) => ({\n name: 'document_get',\n title: 'Get document metadata (and optionally text)',\n description:\n 'Fetch metadata for a single document by id. Pass `includeText: true` to also fetch the text body ' +\n '(capped at ~8K tokens; `truncated: true` flag if cut). If the document was ingested without ' +\n '`storeText: true`, text is unavailable — `textAvailable: false` flag is set and the agent should ' +\n 'use `document_ask` for question-driven extraction instead. Pass `includeDownloadUrl: true` to also ' +\n 'get a short-lived presigned `downloadUrl` for the original file (file-backed documents only). ' +\n 'Returns full DocumentResponse from the SDK.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.documentId as string;\n const includeText = (args.includeText as boolean | undefined) ?? false;\n const includeDownloadUrl = (args.includeDownloadUrl as boolean | undefined) ?? false;\n\n try {\n const doc = await client.documents.getDocument({ id });\n\n let extra: Record<string, unknown> = {};\n\n if (includeText) {\n // Second call — swallow 404 gracefully (ingested without storeText).\n try {\n const textResponse = await client.documents.getDocumentText({ id });\n const rawText = textResponse?.text ?? '';\n const { text, truncated } = truncateText(rawText);\n extra = { ...extra, text, truncated, textAvailable: true };\n } catch (textErr) {\n if (isNotAvailable(textErr)) {\n log.debug(\n { tool: 'document_get', id },\n 'document_get text unavailable (ingested without storeText)',\n );\n extra = { ...extra, textAvailable: false };\n } else {\n throw textErr; // a real error — surface it\n }\n }\n }\n\n if (includeDownloadUrl) {\n // Presigned file URL — 404/400 for a text-only document (no backing file).\n try {\n const dl = await client.documents.getDocumentDownloadUrl({ id });\n extra = {\n ...extra,\n downloadUrl: dl?.downloadUrl,\n downloadExpires: dl?.expires,\n downloadFileType: dl?.fileType,\n downloadAvailable: true,\n };\n } catch (dlErr) {\n if (isNotAvailable(dlErr)) {\n log.debug({ tool: 'document_get', id }, 'document_get download unavailable (not a file document)');\n extra = { ...extra, downloadAvailable: false };\n } else {\n throw dlErr; // a real error — surface it\n }\n }\n }\n\n log.debug({ tool: 'document_get', id, includeText, includeDownloadUrl }, 'document_get ok');\n return {\n content: [\n { type: 'text', text: JSON.stringify(includeText || includeDownloadUrl ? { ...doc, ...extra } : doc, null, 2) },\n ],\n };\n } catch (err) {\n log.warn({ tool: 'document_get', id, err: String(err) }, 'document_get failed');\n return toolError('document_get', err);\n }\n },\n});\n\nexport default documentGet;\n","/**\n * document_query — read document metadata, two modes (auto-detected by args):\n *\n * field present → LOOKUP on a lookup-indexed field, one of:\n * • equality: `value`\n * • range: `from` + `to` (range-enabled fields)\n * • prefix: `prefix` (range-enabled string fields)\n * `type` (the document's bound schema type) is required here.\n * no field → LIST by folder / owner. `listDocuments` filters by folderId +\n * userId/orgId/clientId only (documents are typed via their\n * bound schema, so there is no `type` list filter).\n *\n * Lookups route through `lookupDocumentsByBody` (POST), NOT the GET variant: the\n * POST body supports equality/range/prefix uniformly, is REQUIRED for SENSITIVE\n * lookup fields (the GET variant 400s — the value can't ride the URL), and never\n * leaks values into access/proxy logs. One path, no GET/POST branching.\n *\n * MCP-specific limits (smaller than the API defaults): default 3 / max 10 —\n * document metadata injects directly into the agent context window (token\n * economy). The MCP `limit` is the cap: one page, at most `limit` documents.\n *\n * The `{ data, nextCursor }` page envelope (DocumentPage / DocumentLookupPage)\n * unwraps to the bare `DocumentResponse[]` via `pageItems`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems } from '../paging.js';\n\nconst MCP_DEFAULT_LIMIT = 3;\nconst MCP_MAX_LIMIT = 10;\n\nconst inputSchema = {\n // Lookup-mode args — provide `field` plus EXACTLY ONE of: value | from+to | prefix.\n field: z\n .string()\n .optional()\n .describe('Lookup mode: name of the lookup-indexed field to query by.'),\n value: z\n .string()\n .optional()\n .describe('Lookup mode (equality): exact-match value for `field`. Works on sensitive fields too.'),\n from: z\n .string()\n .optional()\n .describe('Lookup mode (range): inclusive lower bound; requires `to`. Range-enabled, non-sensitive fields only.'),\n to: z\n .string()\n .optional()\n .describe('Lookup mode (range): inclusive upper bound; requires `from`.'),\n prefix: z\n .string()\n .optional()\n .describe('Lookup mode (prefix): match values starting with this. Range-enabled string fields only.'),\n order: z\n .enum(['asc', 'desc'])\n .optional()\n .describe(\n 'Lookup mode: sort direction by the looked-up field. `asc` (default) or `desc` — use `desc` with a range/' +\n 'prefix lookup to get the most-recent / highest values first (e.g. latest-N). Ignored in list mode.',\n ),\n type: z\n .string()\n .optional()\n .describe('Lookup mode: the document type (the bound schema\\'s type). Required with `field`.'),\n // List-mode args:\n folderId: z.string().optional().describe('List mode: only documents in this folder (Vectros folder id).'),\n userId: z.string().optional().describe('List mode: scope to documents owned by this user.'),\n orgId: z.string().optional().describe('List mode: scope to documents belonging to this org.'),\n clientId: z.string().optional().describe('List mode: scope to documents associated with this client.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(\n `Max documents to return. MCP-specific cap of ${MCP_MAX_LIMIT} (vs API max of 100) ` +\n 'to protect the agent context window. Default 3.',\n ),\n};\n\nconst documentQuery: ToolFactory = ({ client, log }) => ({\n name: 'document_query',\n title: 'Document query (list or lookup)',\n description:\n 'Query document metadata. Two modes:\\n' +\n ' • Lookup on a lookup-indexed field: pass `type` and `field` plus exactly one of ' +\n '`value` (exact), `from`+`to` (range), or `prefix`. Works on sensitive fields ' +\n '(equality only there); range/prefix need a range-enabled field.\\n' +\n ' • List: omit `field`; optionally filter by `folderId`/`userId`/`orgId`/`clientId`.\\n' +\n 'Returns up to 10 documents (default 3) as a bare array. Mode is auto-detected. ' +\n 'Use document_get for the full text/download URL of one document.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const field = args.field as string | undefined;\n const value = args.value as string | undefined;\n const from = args.from as string | undefined;\n const to = args.to as string | undefined;\n const prefix = args.prefix as string | undefined;\n const type = args.type as string | undefined;\n try {\n let documents: Vectros.DocumentResponse[];\n if (field) {\n // Lookup mode — validate exactly one lookup shape, then require `type`.\n const hasEquality = value !== undefined;\n const hasRange = from !== undefined || to !== undefined;\n const hasPrefix = prefix !== undefined;\n const modes = Number(hasEquality) + Number(hasRange) + Number(hasPrefix);\n if (modes === 0) {\n return toolError(\n 'document_query',\n new Error(\n `lookup on field '${field}' needs one of: 'value' (exact), 'from'+'to' (range), or 'prefix'.`,\n ),\n );\n }\n if (modes > 1) {\n return toolError(\n 'document_query',\n new Error(\"'value', 'from'/'to', and 'prefix' are mutually exclusive — provide exactly one.\"),\n );\n }\n if (hasRange && !(from !== undefined && to !== undefined)) {\n return toolError('document_query', new Error(\"range lookup requires both 'from' and 'to'.\"));\n }\n if (type === undefined) {\n return toolError(\n 'document_query',\n new Error(\"lookup requires 'type' (the document's bound schema type) alongside 'field'.\"),\n );\n }\n // POST-body lookup: sensitive-safe (value never in the URL), all modes in one path.\n const page = await client.documents.lookupDocumentsByBody({\n type,\n field,\n value,\n from,\n to,\n prefix,\n order: args.order as 'asc' | 'desc' | undefined,\n limit,\n });\n documents = pageItems(page);\n log.debug(\n { tool: 'document_query', mode: 'lookup', type, field, returned: documents.length },\n 'document_query lookup ok',\n );\n } else {\n // List mode — filter by folder + ownership.\n const page = await client.documents.listDocuments({\n folderId: args.folderId as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n limit,\n });\n documents = pageItems(page);\n log.debug(\n { tool: 'document_query', mode: 'list', limit, returned: documents.length },\n 'document_query list ok',\n );\n }\n return { content: [{ type: 'text', text: JSON.stringify(documents, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'document_query', err: String(err) }, 'document_query failed');\n return toolError('document_query', err);\n }\n },\n});\n\nexport default documentQuery;\n","/**\n * document_update — update a document's metadata / typed payload. Wraps\n * `client.documents.patchDocument()` (RFC-7386 JSON Merge Patch).\n *\n * PATCH semantics (from the SDK contract):\n * • `payload`, when supplied, is DEEP-MERGED into the stored payload (keys you\n * send overwrite, a key set to `null` is deleted, omitted keys preserved) —\n * no read-modify-write, no wipe trap.\n * • Top-level fields (`title`, `folderId`, `storeText`, ownership) are set when\n * present and left unchanged when omitted.\n * • `indexMode`/`externalId` are immutable and rejected if present; `folderId`\n * can be SET but not cleared.\n *\n * Optimistic concurrency: pass the `version` you last read as `expectedVersion`.\n * If the document changed since, the server rejects with a 409 conflict (re-read\n * via document_get and retry). Omit `expectedVersion` for last-write-wins.\n *\n * Requires the credential to allow `documents:u`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n documentId: z.string().min(1, 'documentId is required').describe('The Vectros document id to update.'),\n title: z.string().optional().describe('New title. Omit to keep the current title.'),\n fields: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\n 'Typed-payload field→value changes DEEP-MERGED into the existing payload (a field set to `null` is ' +\n 'deleted; unspecified fields preserved). Omit to leave the payload unchanged.',\n ),\n folderId: z.string().optional().describe('Move the document into this folder (cannot be cleared once set).'),\n storeText: z.boolean().optional().describe('Whether the raw text is stored + retrievable.'),\n userId: z.string().optional().describe('Reassign the owning user (Vectros UUID).'),\n orgId: z.string().optional().describe('Reassign the owning org (Vectros UUID).'),\n clientId: z.string().optional().describe('Reassign the associated client (Vectros UUID).'),\n expectedVersion: z\n .number()\n .int()\n .optional()\n .describe(\n 'Optimistic concurrency: the version you last read. If the document changed since, the update is ' +\n 'refused as a conflict (re-read and retry). Omit for last-write-wins.',\n ),\n};\n\nconst documentUpdate: ToolFactory = ({ client, log }) => ({\n name: 'document_update',\n title: 'Update a document',\n description:\n 'Update a document by id. `fields` are DEEP-MERGED into the existing typed payload (unspecified fields ' +\n 'preserved; a field set to `null` is deleted); title/folderId/ownership are updated when provided and ' +\n 'preserved otherwise. Pass `expectedVersion` (the version you last read) for safe concurrent edits — a ' +\n 'stale update is refused (409). Requires the key to allow documents:u.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const documentId = args.documentId as string;\n const title = args.title as string | undefined;\n const fields = args.fields as Record<string, unknown> | undefined;\n const folderId = args.folderId as string | undefined;\n const storeText = args.storeText as boolean | undefined;\n const userId = args.userId as string | undefined;\n const orgId = args.orgId as string | undefined;\n const clientId = args.clientId as string | undefined;\n const expectedVersion = args.expectedVersion as number | undefined;\n try {\n // RFC-7386 merge-patch: send only what's changing. The server preserves\n // omitted top-level fields and deep-merges `payload`, so no read-modify-write\n // and no title-carry-forward is needed. `title` is omitted when the caller\n // isn't changing it; the shared DocumentRequest type marks it required (it is\n // for PUT), so the patch body is assembled untyped and cast at the call.\n const body: Record<string, unknown> = {};\n if (title !== undefined) body.title = title;\n if (fields !== undefined) body.payload = fields;\n if (folderId !== undefined) body.folderId = folderId;\n if (storeText !== undefined) body.storeText = storeText;\n if (userId !== undefined) body.userId = userId;\n if (orgId !== undefined) body.orgId = orgId;\n if (clientId !== undefined) body.clientId = clientId;\n if (expectedVersion !== undefined) body.expectedVersion = expectedVersion;\n\n const updated = await client.documents.patchDocument({\n id: documentId,\n body: body as Vectros.DocumentRequest,\n });\n log.debug({ tool: 'document_update', documentId }, 'document_update ok');\n return { content: [{ type: 'text', text: JSON.stringify(updated, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'document_update', documentId, err: String(err) }, 'document_update failed');\n return toolError('document_update', err);\n }\n },\n});\n\nexport default documentUpdate;\n","/**\n * document_delete — permanently delete a document by id. Wraps\n * `client.documents.deleteDocument()`.\n *\n * Scope-gated: the credential must allow `documents:d`. A key without it gets a\n * clean permission error (the tool returns isError, never tears down the\n * session). Deleting a document removes it and its indexed content.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n documentId: z.string().min(1, 'documentId is required').describe('The Vectros document id to delete.'),\n};\n\nconst documentDelete: ToolFactory = ({ client, log }) => ({\n name: 'document_delete',\n title: 'Delete a document',\n description:\n 'Permanently delete a document by id (removes it and its indexed content). Requires the key to allow ' +\n 'documents:d — a key without it gets a permission error.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const documentId = args.documentId as string;\n try {\n await client.documents.deleteDocument({ id: documentId });\n log.debug({ tool: 'document_delete', documentId }, 'document_delete ok');\n return {\n content: [{ type: 'text', text: JSON.stringify({ deleted: true, id: documentId }, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'document_delete', documentId, err: String(err) }, 'document_delete failed');\n return toolError('document_delete', err);\n }\n },\n});\n\nexport default documentDelete;\n","/**\n * folder_query — read folders, two modes (auto-detected by args):\n *\n * id present → GET one folder (`getFolder`) → single FolderResponse object.\n * no id → LIST (`listFolders`): direct children of `parentId` (tree\n * navigation) or a flat tenant list; optional ownership filters.\n * → `{ data: FolderResponse[], nextCursor }`. Unlike the\n * record/document list tools, folder listing exposes the page\n * cursor: folders are small, navigation is the point, and a\n * tenant can hold more folders than one page — so silently\n * truncating the tree would lose folders with no way to reach\n * them. Pass the returned `nextCursor` back as `startFrom`.\n *\n * MCP-specific limit (smaller than the API default): default 10 / max 50 —\n * folder rows are small (no payload), so the cap is looser than records/docs\n * but still bounded for the agent context window.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems } from '../paging.js';\n\nconst MCP_DEFAULT_LIMIT = 10;\nconst MCP_MAX_LIMIT = 50;\n\nconst inputSchema = {\n id: z.string().optional().describe('Get mode: fetch this single folder by id.'),\n parentId: z\n .string()\n .optional()\n .describe('List mode: direct children of this folder (tree navigation). Omit for a flat tenant list.'),\n userId: z.string().optional().describe('List mode: scope to folders owned by this user.'),\n orgId: z.string().optional().describe('List mode: scope to folders belonging to this org.'),\n clientId: z.string().optional().describe('List mode: scope to folders associated with this client.'),\n startFrom: z\n .string()\n .optional()\n .describe('List mode: pagination cursor — pass the `nextCursor` from the previous page to fetch the next.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(`List mode: max folders to return. MCP cap of ${MCP_MAX_LIMIT} (vs API 100). Default 10.`),\n};\n\nconst folderQuery: ToolFactory = ({ client, log }) => ({\n name: 'folder_query',\n title: 'Folder query (list or get)',\n description:\n 'Read folders. Two modes:\\n' +\n ' • Get: pass `id` → returns the single folder.\\n' +\n ' • List: omit `id`; pass `parentId` for a folder\\'s direct children (tree navigation) or omit for a ' +\n 'flat tenant list. Optionally filter by `userId`/`orgId`/`clientId`.\\n' +\n 'List mode returns `{ data, nextCursor }` (default 10, max 50 per page); pass `nextCursor` back as ' +\n '`startFrom` to page through all folders. Get mode returns the single folder object.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string | undefined;\n try {\n if (id) {\n const folder = await client.folders.getFolder({ id });\n log.debug({ tool: 'folder_query', mode: 'get', id }, 'folder_query get ok');\n return { content: [{ type: 'text', text: JSON.stringify(folder, null, 2) }] };\n }\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const page = await client.folders.listFolders({\n parentFolderId: args.parentId as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n startFrom: args.startFrom as string | undefined,\n limit,\n });\n const folders: Vectros.FolderResponse[] = pageItems(page);\n const nextCursor = page.nextCursor ?? null;\n log.debug({ tool: 'folder_query', mode: 'list', limit, returned: folders.length }, 'folder_query list ok');\n return { content: [{ type: 'text', text: JSON.stringify({ data: folders, nextCursor }, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'folder_query', err: String(err) }, 'folder_query failed');\n return toolError('folder_query', err);\n }\n },\n});\n\nexport default folderQuery;\n","/**\n * folder_create — create a folder. Wraps `client.folders.createFolder()`.\n *\n * Idempotent by `slug` within (tenant, context, parent): the slug is the\n * idempotency key for blueprint-declared folders and is derived from the name\n * when omitted. `parentId` places the folder under a parent (create-only — a\n * folder cannot be moved later via the API).\n *\n * Requires the credential to allow `folders:c`.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n name: z.string().min(1, 'name is required').describe('Folder display name.'),\n description: z.string().optional().describe('Optional description of the folder\\'s purpose.'),\n parentId: z\n .string()\n .optional()\n .describe('Parent folder id — places the folder under this parent. Omit for the context default root. Create-only.'),\n slug: z\n .string()\n .optional()\n .describe('Optional stable slug (sibling-unique; idempotency key). Lowercase letters/digits/hyphens. Derived from name when omitted.'),\n userId: z.string().optional().describe('Owning user (Vectros UUID).'),\n orgId: z.string().optional().describe('Owning org (Vectros UUID).'),\n clientId: z.string().optional().describe('Associated client (Vectros UUID).'),\n};\n\nconst folderCreate: ToolFactory = ({ client, log }) => ({\n name: 'folder_create',\n title: 'Create a folder',\n description:\n 'Create a folder to organize documents and records. Pass `parentId` to nest it (create-only — folders ' +\n 'cannot be moved later). Idempotent by `slug` within the parent. Requires the key to allow folders:c.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n try {\n const folder = await client.folders.createFolder({\n name: args.name as string,\n description: args.description as string | undefined,\n parentFolderId: args.parentId as string | undefined,\n slug: args.slug as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n });\n log.debug({ tool: 'folder_create', id: folder.id, name: folder.name }, 'folder_create ok');\n return { content: [{ type: 'text', text: JSON.stringify(folder, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'folder_create', err: String(err) }, 'folder_create failed');\n return toolError('folder_create', err);\n }\n },\n});\n\nexport default folderCreate;\n","/**\n * folder_update — rename / re-describe / re-own a folder. Wraps\n * `client.folders.patchFolder()` (RFC-7386 JSON Merge Patch), consistent with\n * record_update / document_update.\n *\n * PATCH semantics (from the SDK contract):\n * • Top-level fields (`name`, `description`, ownership) are SET when present\n * and left unchanged when omitted; sending one as `null` is rejected.\n * • `parentFolderId` is set at CREATE only and IGNORED on update — a folder\n * cannot be moved via the API (so this tool exposes no move arg).\n *\n * Using PATCH (not the full-replacement PUT) means the body doesn't require\n * `name`, so — unlike a PUT — there's no read-to-carry-name-forward round-trip.\n *\n * Optimistic concurrency: pass the `version` you last read as `expectedVersion`.\n * If the folder changed since, the server rejects with a 409 conflict (re-read\n * via folder_query and retry). Omit for last-write-wins.\n *\n * Requires the credential to allow `folders:u`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n id: z.string().min(1, 'id is required').describe('The Vectros folder id to update.'),\n name: z.string().optional().describe('New folder name. Omit to keep the current name.'),\n description: z.string().optional().describe('New description. Omit to leave unchanged.'),\n userId: z.string().optional().describe('Reassign the owning user (Vectros UUID).'),\n orgId: z.string().optional().describe('Reassign the owning org (Vectros UUID).'),\n clientId: z.string().optional().describe('Reassign the associated client (Vectros UUID).'),\n expectedVersion: z\n .number()\n .int()\n .optional()\n .describe(\n 'Optimistic concurrency: the version you last read. If the folder changed since, the update is refused ' +\n 'as a conflict (re-read and retry). Omit for last-write-wins.',\n ),\n};\n\nconst folderUpdate: ToolFactory = ({ client, log }) => ({\n name: 'folder_update',\n title: 'Update a folder',\n description:\n 'Update a folder\\'s name / description / ownership by id (RFC-7386 merge — omitted fields preserved). Pass ' +\n '`expectedVersion` (the version you last read) for safe concurrent edits — a stale update is refused (409). ' +\n 'Folders cannot be moved (re-parenting is not supported by the API). Requires the key to allow folders:u.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n const name = args.name as string | undefined;\n const description = args.description as string | undefined;\n const userId = args.userId as string | undefined;\n const orgId = args.orgId as string | undefined;\n const clientId = args.clientId as string | undefined;\n const expectedVersion = args.expectedVersion as number | undefined;\n try {\n // RFC-7386 merge-patch: send only what's changing — no read-to-carry-name\n // forward (PATCH doesn't require name). The shared FolderRequest type marks\n // `name` required (it is for PUT), so the patch body is assembled untyped\n // and cast at the call, mirroring document_update.\n const body: Partial<Vectros.FolderRequest> = {};\n if (name !== undefined) body.name = name;\n if (description !== undefined) body.description = description;\n if (userId !== undefined) body.userId = userId;\n if (orgId !== undefined) body.orgId = orgId;\n if (clientId !== undefined) body.clientId = clientId;\n if (expectedVersion !== undefined) body.expectedVersion = expectedVersion;\n\n const updated = await client.folders.patchFolder({ id, body: body as Vectros.FolderRequest });\n log.debug({ tool: 'folder_update', id }, 'folder_update ok');\n return { content: [{ type: 'text', text: JSON.stringify(updated, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'folder_update', id, err: String(err) }, 'folder_update failed');\n return toolError('folder_update', err);\n }\n },\n});\n\nexport default folderUpdate;\n","/**\n * folder_delete — permanently delete a folder by id. Wraps\n * `client.folders.deleteFolder()`.\n *\n * Scope-gated: the credential must allow `folders:d`. A key without it gets a\n * clean permission error. Protected folders (e.g. a context root, isProtected:\n * true) cannot be deleted — the API rejects it and the tool surfaces the error.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n id: z.string().min(1, 'id is required').describe('The Vectros folder id to delete.'),\n};\n\nconst folderDelete: ToolFactory = ({ client, log }) => ({\n name: 'folder_delete',\n title: 'Delete a folder',\n description:\n 'Permanently delete a folder by id. Requires the key to allow folders:d — a key without it gets a ' +\n 'permission error. Protected folders (e.g. a context root) cannot be deleted.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n try {\n await client.folders.deleteFolder({ id });\n log.debug({ tool: 'folder_delete', id }, 'folder_delete ok');\n return { content: [{ type: 'text', text: JSON.stringify({ deleted: true, id }, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'folder_delete', id, err: String(err) }, 'folder_delete failed');\n return toolError('folder_delete', err);\n }\n },\n});\n\nexport default folderDelete;\n","/**\n * current_identity — wraps `/v1/ping` for \"who am I authed as?\"\n * surface.\n *\n * Thin wrapper over `resolveIdentity` from `../identity.js` — that\n * helper is also used by the `identity` resource so both surfaces\n * stay in lockstep. See the helper header for the\n * graceful-degradation contract details.\n *\n * Design contract (from the design doc § Identity &\n * exploration → current_identity + § \"Backend deliverables surfaced\n * by MCP v0.2\"):\n *\n * Target response shape: status, tenantId, environment,\n * principalType, principalKeyId, principalLabel?, allowedActions?,\n * dataScope?, tokenExpiresAt?.\n *\n * Until backend ships the extended /v1/ping response, returns a\n * minimal derived shape (status + environment + principalType).\n * Fields appear automatically as backend rolls out — no MCP server\n * version bump required.\n */\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { resolveIdentity } from '../identity.js';\n\nconst inputSchema = {\n // No args — current_identity describes the current credential.\n};\n\nconst currentIdentity: ToolFactory = ({ log, apiKey, environment }) => ({\n name: 'current_identity',\n title: 'Current identity (tenant + principal scope)',\n description:\n \"Describe the credential the MCP server is operating under. Returns tenantId, environment \" +\n \"(staging|production), principalType (root_key|scoped_key|token), principalKeyId, and (for scoped \" +\n \"keys) allowedActions + dataScope. Use this when the user asks 'what can you do here?' or 'what \" +\n \"tenant am I in?'. Calls GET /v1/ping under the hood. \" +\n \"Backend may still be rolling out the extended /v1/ping response shape — until then this tool \" +\n \"returns a minimal shape; richer fields appear automatically as backend ships.\",\n inputSchema,\n handler: async (): Promise<ToolResult> => {\n try {\n const identity = await resolveIdentity({ log, apiKey, environment });\n return {\n content: [{ type: 'text', text: JSON.stringify(identity, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'current_identity', err: String(err) }, 'current_identity failed');\n return toolError('current_identity', err);\n }\n },\n});\n\nexport default currentIdentity;\n","/**\n * document_ingest — dual-mode document creation.\n *\n * Wraps `client.documents.ingestDocument()` (inline text body) OR\n * `client.documents.uploadDocument()` (file upload via presigned URL).\n * Mode auto-selected from args:\n * - `text` present → inline ingest (single SDK call)\n * - `filePath` present → upload flow (3 steps: uploadDocument()\n * for presigned URL → PUT bytes → return)\n *\n * Either `text` or `filePath` MUST be present; both is an error.\n *\n * **Transport asymmetry (locked v0.2 design — see\n * the design doc § Documents → document_ingest):**\n *\n * stdio transport:\n * - `text` → ingestDocument()\n * - `filePath` → read local fs, uploadDocument(), PUT bytes\n *\n * HTTP transport:\n * - `text` → ingestDocument() (same as stdio)\n * - `filePath` → REJECTED at validation time. Remote MCP servers\n * can't read the partner's filesystem. Partner\n * must use text mode or call SDK directly.\n *\n * The rejection on HTTP+filePath is intentional and load-bearing —\n * silently failing-or-succeeding-weirdly would be worse than a\n * clear error message pointing to the workaround.\n */\nimport { z } from 'zod';\nimport { readFile, realpath } from 'node:fs/promises';\nimport { basename, extname, resolve, relative, isAbsolute } from 'node:path';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\n/** Thrown when a filePath escapes the ingest jail. */\nclass IngestPathError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'IngestPathError';\n }\n}\n\n/**\n * Path segments that are never ingestable, even when they sit inside the\n * configured root (defense-in-depth on top of the jail). Lower-cased.\n */\nconst DENIED_SEGMENTS = new Set([\n '.ssh',\n '.aws',\n '.gnupg',\n '.kube',\n '.docker',\n]);\n/** Sensitive basenames denied regardless of directory. Lower-cased. */\nconst DENIED_BASENAMES = new Set([\n '.env',\n 'credentials',\n 'id_rsa',\n 'id_ed25519',\n 'id_ecdsa',\n 'id_dsa',\n '.npmrc',\n '.netrc',\n '.pgpass',\n]);\n\n/**\n * Canonicalize `filePath` and confine it to `ingestRoot`. Returns the\n * canonical (symlink-resolved) absolute path on success; throws\n * {@link IngestPathError} on a traversal / absolute / symlink escape, a path\n * outside the root, a non-existent file, or a denied sensitive path.\n *\n * The model supplies `filePath`; a prompt-injection adversary would otherwise\n * read `~/.aws/credentials` / `~/.ssh/id_rsa` and exfiltrate it as a document.\n *\n * Threat model: the confused deputy is the AGENT (model authority) vs the\n * OPERATOR's secrets, with server + agent running as the same OS user. A\n * realpath→readFile TOCTOU (a separate local process swapping the file\n * mid-call) is out of scope — an attacker with write access inside the ingest\n * root already shares the operator's trust boundary.\n */\nasync function resolveJailedPath(filePath: string, ingestRoot: string): Promise<string> {\n let canonicalRoot: string;\n try {\n canonicalRoot = await realpath(resolve(ingestRoot));\n } catch {\n throw new IngestPathError(\n `the document ingest root \"${ingestRoot}\" does not exist or is not accessible. ` +\n `Set VECTROS_MCP_INGEST_ROOT to a readable directory.`,\n );\n }\n\n // resolve() lets an ABSOLUTE filePath override the root entirely — that is\n // caught by the containment check below (the canonical path won't be inside\n // the root). realpath() resolves symlinks, defeating in-root symlink escapes.\n const requested = resolve(canonicalRoot, filePath);\n let canonical: string;\n try {\n canonical = await realpath(requested);\n } catch {\n throw new IngestPathError(\n `Cannot read filePath \"${filePath}\": no such file under the ingest root \"${canonicalRoot}\".`,\n );\n }\n\n const rel = relative(canonicalRoot, canonical);\n if (rel === '' || rel.startsWith('..') || isAbsolute(rel)) {\n throw new IngestPathError(\n `filePath \"${filePath}\" resolves outside the allowed ingest root \"${canonicalRoot}\". ` +\n `Set VECTROS_MCP_INGEST_ROOT to permit a different directory.`,\n );\n }\n\n const lowerSegs = canonical.toLowerCase().split(/[\\\\/]+/);\n if (lowerSegs.some((s) => DENIED_SEGMENTS.has(s)) || DENIED_BASENAMES.has(basename(canonical).toLowerCase())) {\n throw new IngestPathError(\n `filePath \"${filePath}\" matches a denied sensitive-path pattern and cannot be ingested.`,\n );\n }\n\n return canonical;\n}\n\n// Minimal MIME-type lookup for common file types. Partners can\n// explicitly pass fileType to override.\nconst EXT_TO_MIME: Record<string, string> = {\n '.pdf': 'application/pdf',\n '.txt': 'text/plain',\n '.md': 'text/markdown',\n '.html': 'text/html',\n '.htm': 'text/html',\n '.json': 'application/json',\n '.csv': 'text/csv',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.doc': 'application/msword',\n '.rtf': 'application/rtf',\n};\n\nfunction inferMimeType(filePath: string): string {\n const ext = extname(filePath).toLowerCase();\n return EXT_TO_MIME[ext] ?? 'application/octet-stream';\n}\n\nconst inputSchema = {\n title: z\n .string()\n .min(1, 'title is required')\n .describe('Human-readable document title — appears in search results and the UI.'),\n indexMode: z\n .enum(['HYBRID', 'SEMANTIC', 'TEXT', 'NONE'])\n .optional()\n .describe(\n 'Index strategy. HYBRID (BM25 + dense, default; best for general retrieval), ' +\n 'SEMANTIC (dense only; concept-driven queries), TEXT (BM25 only; exact-match / keyword), ' +\n 'NONE (store-only / archival — retrievable by id and structured-field lookup but never in search results). ' +\n 'Omit to inherit the bound schema\\'s default.',\n ),\n externalId: z\n .string()\n .optional()\n .describe(\n 'Stable caller-supplied id. Immutable; unique per type within your context. Re-ingesting with the same ' +\n 'externalId returns the existing document (idempotent) instead of creating a duplicate — use it to make ' +\n 'ingests safely retryable and as the key other records reference. Mirrors record_create.',\n ),\n schemaId: z\n .string()\n .optional()\n .describe(\n 'Bind this document to a record schema. When set, `payload` is validated against the schema and its ' +\n 'lookup fields become directly queryable via document_query (records parity). Resolve a schema id from ' +\n 'its type via list_schemas. Omit for an untyped document.',\n ),\n payload: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\n 'The document\\'s structured data — a flat key/value object. With `schemaId`, declared fields are validated ' +\n 'and lookup fields indexed; undeclared keys pass through as free-form and are searchable via the ' +\n 'hybrid_search `filters` param. Without a schema it is stored as free-form metadata.',\n ),\n\n // Inline text mode (mutually exclusive with filePath):\n text: z\n .string()\n .min(1)\n .optional()\n .describe('Text body to ingest inline. Mutually exclusive with filePath. Either text or filePath is required.'),\n storeText: z\n .boolean()\n .optional()\n .describe(\n 'If true (default), the text body is stored alongside the index so document_get(includeText:true) ' +\n 'can retrieve it later. Set false to index only — saves storage cost on large corpora but ' +\n 'document_get(includeText) will return textAvailable:false.',\n ),\n\n // File upload mode (mutually exclusive with text; stdio-transport-only):\n filePath: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Local filesystem path to upload. Mutually exclusive with text. ' +\n 'STDIO TRANSPORT ONLY — rejected on HTTP transport (remote MCP servers can\\'t read your filesystem; ' +\n 'use text mode or call the SDK\\'s uploadDocument directly). ' +\n 'Must resolve INSIDE the configured ingest root (VECTROS_MCP_INGEST_ROOT, else the server\\'s working ' +\n 'directory); paths that escape it (traversal/absolute/symlink) or match a sensitive pattern are rejected.',\n ),\n fileType: z\n .string()\n .optional()\n .describe('MIME type of the file (e.g. \"application/pdf\"). Inferred from filePath extension if omitted.'),\n\n // Common (both modes):\n folderId: z\n .string()\n .optional()\n .describe('Optional folder to ingest into. Default: tenant root.'),\n userId: z.string().optional().describe('Owning user ID. Optional.'),\n orgId: z.string().optional().describe('Owning org ID. Optional.'),\n clientId: z.string().optional().describe('Owning client ID. Optional.'),\n};\n\nconst documentIngest: ToolFactory = ({ client, log, transport, ingestRoot }) => ({\n name: 'document_ingest',\n title: 'Ingest a new document (text body or file upload)',\n description:\n 'Create a new document in the partner tenant. Two modes:\\n' +\n ' • Text mode: pass `text` (string body). Single-call. Use for crawled content, notes, generated text.\\n' +\n ' • File mode: pass `filePath` (local path on the MCP server\\'s host machine). STDIO-TRANSPORT ONLY — ' +\n 'rejected on HTTP transport. MCP server reads the bytes, requests a presigned upload URL, and PUTs them. ' +\n 'Returns when the upload is accepted (status: PENDING_INDEX); poll with `document_get` to confirm INDEXED.\\n' +\n 'Either `text` or `filePath` must be present; both is an error. ' +\n 'Idempotent by `externalId` (re-ingest returns the existing document, not a duplicate). Pass `schemaId` + ' +\n '`payload` for a typed, lookup-queryable document (records parity). ' +\n 'indexMode defaults to HYBRID for untyped documents (omit to inherit a bound schema\\'s default). ' +\n 'storeText defaults to true (set false to skip storing the text body).',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const title = args.title as string;\n const text = args.text as string | undefined;\n const filePath = args.filePath as string | undefined;\n const schemaId = args.schemaId as string | undefined;\n // Preserve the legacy default (HYBRID) for untyped documents; when a schema is\n // bound, omit indexMode so the schema's declared default is inherited (the API\n // rejects a request with neither). An explicit value — including NONE — always wins.\n const indexMode =\n (args.indexMode as 'HYBRID' | 'SEMANTIC' | 'TEXT' | 'NONE' | undefined) ??\n (schemaId ? undefined : 'HYBRID');\n\n // Mode validation — exactly one of text/filePath.\n if (!text && !filePath) {\n return toolError(\n 'document_ingest',\n new Error('Either `text` (inline body) or `filePath` (local file) is required.'),\n );\n }\n if (text && filePath) {\n return toolError(\n 'document_ingest',\n new Error('`text` and `filePath` are mutually exclusive — pass exactly one.'),\n );\n }\n\n // Transport gate — HTTP transport rejects filePath.\n if (filePath && transport === 'http') {\n return toolError(\n 'document_ingest',\n new Error(\n 'filePath mode is not supported on HTTP transport. The remote MCP server cannot read your local filesystem. ' +\n 'Use `text` mode (pass the content inline) or call the @vectros-ai/sdk uploadDocument method directly from your own code.',\n ),\n );\n }\n\n const common = {\n folderId: args.folderId as string | undefined,\n payload: args.payload as Record<string, unknown> | undefined,\n schemaId,\n externalId: args.externalId as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n };\n\n try {\n // ── Text mode ────────────────────────────────────────────────\n if (text) {\n const storeText = (args.storeText as boolean | undefined) ?? true;\n const result = await client.documents.ingestDocument({\n title,\n text,\n indexMode,\n storeText,\n ...common,\n });\n log.debug(\n { tool: 'document_ingest', mode: 'text', id: result?.id, indexMode },\n 'document_ingest text ok',\n );\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n };\n }\n\n // ── File mode (stdio transport) ──────────────────────────────\n // 3-step flow per recon: uploadDocument → PUT bytes → return.\n // Caller can poll with document_get to confirm INDEXED.\n //\n // SECURITY: the path is model-supplied; jail it to the configured\n // ingest root (VECTROS_MCP_INGEST_ROOT, else the process cwd) and reject\n // traversal / absolute / symlink escapes BEFORE reading any bytes.\n const root = ingestRoot ?? process.env.VECTROS_MCP_INGEST_ROOT ?? process.cwd();\n let safePath: string;\n try {\n safePath = await resolveJailedPath(filePath!, root);\n } catch (err) {\n return toolError('document_ingest', err instanceof Error ? err : new Error(String(err)));\n }\n\n let bytes: Buffer;\n try {\n bytes = await readFile(safePath);\n } catch (err) {\n // Friendlier error than the default fs.readFile message.\n const msg = err instanceof Error ? err.message : String(err);\n return toolError(\n 'document_ingest',\n new Error(`Cannot read filePath: ${msg}. Verify the path exists on the MCP server's host machine.`),\n );\n }\n\n const fileName = basename(safePath);\n const fileType = (args.fileType as string | undefined) ?? inferMimeType(safePath);\n\n const upload = await client.documents.uploadDocument({\n fileName,\n fileType,\n indexMode,\n ...common,\n });\n\n const uploadUrl = upload?.uploadUrl as string | undefined;\n const docId = upload?.id as string | undefined;\n if (!uploadUrl || !docId) {\n return toolError(\n 'document_ingest',\n new Error(`Unexpected uploadDocument response: missing uploadUrl or id. Got: ${JSON.stringify(upload)}`),\n );\n }\n\n // PUT bytes to presigned URL. No Authorization header (the URL\n // carries its own signature via query params).\n const putRes = await fetch(uploadUrl, {\n method: 'PUT',\n headers: { 'Content-Type': fileType },\n body: bytes,\n });\n\n if (!putRes.ok) {\n const detail = await putRes.text().catch(() => '');\n return toolError(\n 'document_ingest',\n new Error(\n `Presigned PUT failed (HTTP ${putRes.status}): ${detail || putRes.statusText}. ` +\n 'The document record was created but the file upload did not complete; the document is in an incomplete state.',\n ),\n );\n }\n\n log.debug(\n { tool: 'document_ingest', mode: 'file', id: docId, fileName, fileType, bytes: bytes.length },\n 'document_ingest file ok',\n );\n\n // Return the upload response — caller can poll document_get(id)\n // to confirm INDEXED. We don't poll here; that's the agent's job.\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n ...upload,\n status: 'PENDING_INDEX',\n _note:\n 'File uploaded; indexing is asynchronous. Poll document_get(id) until status is INDEXED.',\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n log.warn({ tool: 'document_ingest', err: String(err) }, 'document_ingest failed');\n return toolError('document_ingest', err);\n }\n },\n});\n\nexport default documentIngest;\n","/**\n * lookup_principal — resolve a user / org / client identity, two modes\n * (auto-detected by args):\n *\n * externalId present → RESOLVE your own identifier to the Vectros UUID\n * (`list{Users,Orgs,Clients}({externalId})`). Returns a\n * one-element array, or empty if no match.\n * field present → LOOKUP on a schema-declared lookup field, one of:\n * • equality: `value`\n * • range: `from` + `to`\n * • prefix: `prefix`\n * (`type` — the identity schema's record type — is\n * required here.) Routed through the POST-body lookup\n * (`lookup{Users,Orgs,Clients}`), which is sensitive-safe\n * (the value never rides the URL query string).\n *\n * Why this exists: the ownership filters on record_query / document_query /\n * hybrid_search / rag_ask take the Vectros-assigned UUID, but an agent usually\n * holds its OWN identifier (the partner's externalId). This tool bridges the\n * two — resolve once, then scope reads by the returned id.\n *\n * Read-only: requires the credential to allow the relevant read scope\n * (`users:r` / `orgs:r` / `clients:r`). It never creates or mutates identities —\n * identity CRUD stays off the agent tool surface by design.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems, type Page } from '../paging.js';\n\nconst MCP_DEFAULT_LIMIT = 10;\nconst MCP_MAX_LIMIT = 50;\n\nconst inputSchema = {\n kind: z\n .enum(['user', 'org', 'client'])\n .describe('Which principal to look up: a user, an organization, or a client.'),\n externalId: z\n .string()\n .optional()\n .describe(\n 'Resolve mode: your own stable identifier for the principal. Returns the single matching principal ' +\n '(with its Vectros UUID), or an empty array if none. The fastest path to the UUID the ownership ' +\n 'filters need. Takes precedence if both this and a `field` lookup are supplied.',\n ),\n // Lookup-mode args — provide `field` plus EXACTLY ONE of: value | from+to | prefix.\n type: z\n .string()\n .optional()\n .describe('Lookup mode: the identity schema\\'s record type (e.g. \"person_v1\"). Required with `field`.'),\n field: z\n .string()\n .optional()\n .describe('Lookup mode: name of the schema-declared lookup field to query by (e.g. \"email\").'),\n value: z.string().optional().describe('Lookup mode (equality): exact-match value for `field`. Works on sensitive fields.'),\n from: z.string().optional().describe('Lookup mode (range): inclusive lower bound; requires `to`. Non-sensitive fields only.'),\n to: z.string().optional().describe('Lookup mode (range): inclusive upper bound; requires `from`.'),\n prefix: z\n .string()\n .optional()\n .describe('Lookup mode (prefix): match values starting with this. Range-enabled string fields only.'),\n order: z\n .enum(['asc', 'desc'])\n .optional()\n .describe('Lookup mode: sort direction by the looked-up field. `asc` (default) or `desc`.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(`Max principals to return. MCP cap of ${MCP_MAX_LIMIT} (vs API 100). Default ${MCP_DEFAULT_LIMIT}.`),\n};\n\nconst lookupPrincipal: ToolFactory = ({ client, log }) => ({\n name: 'lookup_principal',\n title: 'Look up a user / org / client identity',\n description:\n 'Resolve a user, org, or client identity. Two modes:\\n' +\n ' • Resolve by your own id: pass `externalId` → the matching principal incl. its Vectros UUID (the id the ' +\n 'ownership filters on record_query / hybrid_search / rag_ask expect).\\n' +\n ' • Lookup by a schema field: pass `type` and `field` plus exactly one of `value` (exact), `from`+`to` ' +\n '(range), or `prefix`. Sensitive-field-safe. (If both `externalId` and a `field` lookup are given, ' +\n '`externalId` wins.) Returns up to 50 principals (default 10) as a bare array. ' +\n 'Read-only — does not create or modify identities.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const kind = args.kind as 'user' | 'org' | 'client';\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const externalId = args.externalId as string | undefined;\n const type = args.type as string | undefined;\n const field = args.field as string | undefined;\n const value = args.value as string | undefined;\n const from = args.from as string | undefined;\n const to = args.to as string | undefined;\n const prefix = args.prefix as string | undefined;\n const order = args.order as 'asc' | 'desc' | undefined;\n\n try {\n let page: Page<unknown>;\n if (externalId !== undefined) {\n // Resolve mode — externalId → UUID. One SDK call per kind (the request\n // shapes differ per kind but all accept externalId + limit).\n if (kind === 'user') {\n page = await client.identity.listUsers({ externalId, limit });\n } else if (kind === 'org') {\n page = await client.identity.listOrgs({ externalId, limit });\n } else {\n page = await client.identity.listClients({ externalId, limit });\n }\n log.debug({ tool: 'lookup_principal', mode: 'resolve', kind }, 'lookup_principal resolve ok');\n } else if (field !== undefined) {\n // Lookup mode — validate exactly one lookup shape, then require `type`.\n const hasEquality = value !== undefined;\n const hasRange = from !== undefined || to !== undefined;\n const hasPrefix = prefix !== undefined;\n const modes = Number(hasEquality) + Number(hasRange) + Number(hasPrefix);\n if (modes === 0) {\n return toolError(\n 'lookup_principal',\n new Error(`lookup on field '${field}' needs one of: 'value' (exact), 'from'+'to' (range), or 'prefix'.`),\n );\n }\n if (modes > 1) {\n return toolError(\n 'lookup_principal',\n new Error(\"'value', 'from'/'to', and 'prefix' are mutually exclusive — provide exactly one.\"),\n );\n }\n if (hasRange && !(from !== undefined && to !== undefined)) {\n return toolError('lookup_principal', new Error(\"range lookup requires both 'from' and 'to'.\"));\n }\n if (type === undefined) {\n return toolError(\n 'lookup_principal',\n new Error(\"lookup requires 'type' (the identity schema's record type) alongside 'field'.\"),\n );\n }\n // POST-body lookup: sensitive-safe (value never in the URL), all modes in one path.\n const req = { type, field, value, from, to, prefix, order, limit };\n if (kind === 'user') {\n page = await client.identity.lookupUsers(req);\n } else if (kind === 'org') {\n page = await client.identity.lookupOrgs(req);\n } else {\n page = await client.identity.lookupClients(req);\n }\n log.debug({ tool: 'lookup_principal', mode: 'lookup', kind, type, field }, 'lookup_principal lookup ok');\n } else {\n return toolError(\n 'lookup_principal',\n new Error(\"provide `externalId` (resolve) or `type`+`field`+a lookup mode (lookup).\"),\n );\n }\n\n const principals = pageItems(page);\n return { content: [{ type: 'text', text: JSON.stringify(principals, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'lookup_principal', kind, err: String(err) }, 'lookup_principal failed');\n return toolError('lookup_principal', err);\n }\n },\n});\n\nexport default lookupPrincipal;\n","/**\n * version_history — read the change/audit trail for a record or document. Wraps\n * `client.records.getRecordVersions()` / `client.documents.getDocumentVersions()`.\n *\n * Returns the version entries (CREATE / UPDATE / DELETE, with actor + timestamp +\n * the per-change diff) for one entity, so an agent can answer \"what changed and\n * when\" without leaving the tool surface. History is recorded only for entities\n * bound to a schema with audit history enabled (the default for typed records /\n * documents); an untyped entity has no history and returns an empty trail.\n *\n * The trail can be long, so — like folder_query — this exposes the page cursor:\n * the result is `{ data, nextCursor }`; pass `nextCursor` back as `startFrom` to\n * walk older entries. Requires the relevant read scope (`records:r` /\n * `documents:r`).\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems } from '../paging.js';\n\nconst inputSchema = {\n resourceType: z\n .enum(['record', 'document'])\n .describe('Which kind of entity the id refers to: a record or a document.'),\n id: z.string().min(1, 'id is required').describe('The Vectros id of the record or document whose history you want.'),\n startFrom: z\n .string()\n .optional()\n .describe('Pagination cursor — pass the `nextCursor` from the previous page to fetch older entries.'),\n};\n\nconst versionHistory: ToolFactory = ({ client, log }) => ({\n name: 'version_history',\n title: 'Version history (record or document)',\n description:\n 'Read the audit/version trail (CREATE/UPDATE/DELETE, with actor, timestamp, and diff) for a single record ' +\n 'or document. Pass `resourceType` (record|document) and `id`. Returns `{ data, nextCursor }`; pass ' +\n '`nextCursor` back as `startFrom` to page through older entries. Entities without audit history (untyped) ' +\n 'return an empty trail. Read-only.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const resourceType = args.resourceType as 'record' | 'document';\n const id = args.id as string;\n const startFrom = args.startFrom as string | undefined;\n try {\n const page: Vectros.ModelDataVersionPage =\n resourceType === 'record'\n ? await client.records.getRecordVersions({ id, startFrom })\n : await client.documents.getDocumentVersions({ id, startFrom });\n const versions = pageItems(page);\n const nextCursor = page.nextCursor ?? null;\n log.debug(\n { tool: 'version_history', resourceType, id, returned: versions.length },\n 'version_history ok',\n );\n return { content: [{ type: 'text', text: JSON.stringify({ data: versions, nextCursor }, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'version_history', resourceType, id, err: String(err) }, 'version_history failed');\n return toolError('version_history', err);\n }\n },\n});\n\nexport default versionHistory;\n","/**\n * Shared tool-definition shape.\n *\n * Each tool is built as a factory that takes the Vectros SDK client\n * (already authenticated) + a logger, and returns the registration\n * payload for `server.registerTool()` plus the handler. The server\n * class iterates the array and registers each one.\n */\nimport type { ZodRawShape } from 'zod';\nimport type { VectrosClient } from '@vectros-ai/sdk';\nimport type { Logger } from '../log.js';\n\n/**\n * Names of all REGISTERED tools — the contract for what\n * `tools: [...]` accepts and what default construction registers.\n *\n * MUST stay in lockstep with `ALL_TOOL_FACTORIES` in `./index.ts` —\n * every name here needs a factory there, and vice versa. The server\n * iterates this list at construction; an unimplemented name throws.\n *\n * v0.1 (shipped 2026-05-30): hybrid_search, record_query, rag_ask, document_ask\n * v0.2 (shipped): list_schemas, document_get, current_identity, document_ingest\n * launch data-plane I/O: record_get, record_create, record_update, record_delete (tier 1);\n * document_query (tier 2);\n * document_update, document_delete, folder_query,\n * folder_create, folder_update, folder_delete (tier 3)\n * (see the data-plane surface doc)\n * parity sweep: lookup_principal (identity resolution for the\n * ownership filters), version_history (record/document\n * audit trail)\n */\nexport const TOOL_NAMES = [\n 'hybrid_search',\n 'record_query',\n 'record_get',\n 'record_create',\n 'record_update',\n 'record_delete',\n 'rag_ask',\n 'document_ask',\n 'list_schemas',\n 'document_get',\n 'document_query',\n 'document_update',\n 'document_delete',\n 'folder_query',\n 'folder_create',\n 'folder_update',\n 'folder_delete',\n 'current_identity',\n 'document_ingest',\n 'lookup_principal',\n 'version_history',\n] as const;\nexport type ToolName = (typeof TOOL_NAMES)[number];\n\n/**\n * MCP tool-handler context. The MCP SDK passes this as the second\n * arg to tool handlers. We type it loosely — the bits we use are\n * `sendNotification` (for progress) and `signal` (for abort).\n */\nexport interface ToolExtra {\n sendNotification?: (notification: {\n method: 'notifications/progress';\n params: {\n progressToken: string | number;\n progress: number;\n total?: number;\n message?: string;\n };\n }) => Promise<void>;\n _meta?: { progressToken?: string | number };\n signal?: AbortSignal;\n}\n\n/**\n * MCP tool-result shape — what every handler returns. The MCP SDK\n * normalizes this into a `tools/call` response.\n */\nexport interface ToolResult {\n content: Array<{ type: 'text'; text: string }>;\n isError?: boolean;\n}\n\nexport interface ToolDefinition<S extends ZodRawShape = ZodRawShape> {\n name: ToolName;\n title: string;\n description: string;\n inputSchema: S;\n handler: (args: Record<string, unknown>, extra: ToolExtra) => Promise<ToolResult>;\n}\n\nexport interface ToolFactoryContext {\n client: VectrosClient;\n log: Logger;\n /**\n * The API key the server was constructed with. Optional in the\n * type because most tools don't need it (the SDK `client` carries\n * it implicitly) and test mocks shouldn't have to provide it.\n * Production server.ts ALWAYS supplies it.\n *\n * Only `current_identity` uses this — for raw-fetch access to\n * /v1/ping that the SDK's typed `ping()` discards (it's typed\n * `Promise<void>` and throws away the response body).\n * Graceful-degradation contract requires raw access until the\n * SDK regenerates for the extended ping shape.\n */\n apiKey?: string;\n /** The resolved API base URL. Same rationale as `apiKey`. */\n environment?: string;\n /**\n * Which transport is wired up. Optional in the type because most\n * tools are transport-agnostic and test mocks shouldn't have to\n * provide it. Production CLI entry points (`cli.ts` for stdio,\n * `cli-http.ts` for HTTP) pass the appropriate value.\n *\n * Only `document_ingest` uses this — to reject `filePath` mode on\n * HTTP transport (remote MCP server can't touch the partner's\n * local filesystem; design doc § Documents → document_ingest).\n * Undefined treated as 'stdio' (the v0.1 default).\n */\n transport?: 'stdio' | 'http';\n /**\n * Filesystem root that `document_ingest`'s stdio `filePath` mode is\n * jailed to. A model-supplied path is canonicalized and must\n * resolve INSIDE this root; traversal / absolute-escape / symlink-escape\n * are rejected. Defaults to `VECTROS_MCP_INGEST_ROOT ?? process.cwd()`.\n * Only `document_ingest` reads it.\n */\n ingestRoot?: string;\n}\n\nexport type ToolFactory = (ctx: ToolFactoryContext) => ToolDefinition;\n","/**\n * Tool registry — the v0.1 catalog. Each tool is a factory that the\n * server instantiates with the SDK client + logger.\n *\n * Order here is the order tools appear in `tools/list` responses to\n * the MCP client. Putting search first is intentional — it's the\n * tool with the broadest read use case.\n */\nimport type { ToolFactory } from './types.js';\nimport hybridSearch from './hybrid_search.js';\nimport recordQuery from './record_query.js';\nimport recordGet from './record_get.js';\nimport recordCreate from './record_create.js';\nimport recordUpdate from './record_update.js';\nimport recordDelete from './record_delete.js';\nimport ragAsk from './rag_ask.js';\nimport documentAsk from './document_ask.js';\nimport listSchemas from './list_schemas.js';\nimport documentGet from './document_get.js';\nimport documentQuery from './document_query.js';\nimport documentUpdate from './document_update.js';\nimport documentDelete from './document_delete.js';\nimport folderQuery from './folder_query.js';\nimport folderCreate from './folder_create.js';\nimport folderUpdate from './folder_update.js';\nimport folderDelete from './folder_delete.js';\nimport currentIdentity from './current_identity.js';\nimport documentIngest from './document_ingest.js';\nimport lookupPrincipal from './lookup_principal.js';\nimport versionHistory from './version_history.js';\n\nexport const ALL_TOOL_FACTORIES: Record<string, ToolFactory> = {\n hybrid_search: hybridSearch,\n record_query: recordQuery,\n record_get: recordGet,\n record_create: recordCreate,\n record_update: recordUpdate,\n record_delete: recordDelete,\n rag_ask: ragAsk,\n document_ask: documentAsk,\n list_schemas: listSchemas,\n document_get: documentGet,\n document_query: documentQuery,\n document_update: documentUpdate,\n document_delete: documentDelete,\n folder_query: folderQuery,\n folder_create: folderCreate,\n folder_update: folderUpdate,\n folder_delete: folderDelete,\n current_identity: currentIdentity,\n document_ingest: documentIngest,\n lookup_principal: lookupPrincipal,\n version_history: versionHistory,\n};\n\nexport { TOOL_NAMES, type ToolName, type ToolDefinition, type ToolFactory } from './types.js';\n","/**\n * schemas resource at `vectros://schemas`.\n *\n * Parallel to the `list_schemas` tool — same data, different access\n * pattern. MCP clients can list/read resources passively (without\n * a tool call) to surface ambient context to the agent.\n *\n * Returns the full schema catalog as JSON text (mimeType\n * application/json). Honors the credential's AccessProfile scope —\n * exactly what `list_schemas` returns with no filters.\n *\n * `listSchemas` returns the `{ data, nextCursor }` page envelope (SDK\n * 0.23); we drain every page into the flat `SchemaResponse[]` so the\n * resource body stays a bare array — in lockstep with the `list_schemas`\n * tool. See src/paging.ts.\n */\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ResourceFactory } from './types.js';\nimport { drainPages } from '../paging.js';\n\nconst schemasResource: ResourceFactory = ({ client }) => ({\n name: 'schemas',\n uri: 'vectros://schemas',\n title: 'Record schema catalog',\n description:\n 'The structured-record schema catalog visible to the current credential. Each schema describes a ' +\n 'record type (e.g. \"patient\", \"clinical_note\"), its fields, lookup-indexed fields, and capabilities. ' +\n 'Equivalent to calling the `list_schemas` tool with no filters.',\n mimeType: 'application/json',\n read: async (): Promise<string> => {\n const schemas = await drainPages<Vectros.SchemaResponse>((startFrom) =>\n client.schemas.listSchemas({ startFrom }),\n );\n return JSON.stringify(schemas, null, 2);\n },\n});\n\nexport default schemasResource;\n","/**\n * identity resource at `vectros://identity`.\n *\n * Parallel to the `current_identity` tool — same data, different\n * access pattern. Lets the MCP client passively know the\n * credential's tenant + principal scope without an explicit tool\n * call, useful for ambient \"you're authed as X\" UX hints.\n *\n * Delegates to the shared `resolveIdentity` helper so the tool +\n * resource stay in lockstep on the graceful-degradation contract.\n */\nimport type { ResourceFactory } from './types.js';\nimport { resolveIdentity } from '../identity.js';\n\nconst identityResource: ResourceFactory = ({ log, apiKey, environment }) => ({\n name: 'identity',\n uri: 'vectros://identity',\n title: 'Current identity (tenant + principal scope)',\n description:\n 'The tenant + principal scope the MCP server is authenticated as. Returns the same payload as the ' +\n '`current_identity` tool: status, environment, principalType, principalKeyId, and (for scoped keys) ' +\n 'allowedActions + dataScope. Until backend ships the extended /v1/ping response, returns a minimal ' +\n 'derived shape; richer fields appear automatically as backend rolls out.',\n mimeType: 'application/json',\n read: async (): Promise<string> => {\n const identity = await resolveIdentity({ log, apiKey, environment });\n return JSON.stringify(identity, null, 2);\n },\n});\n\nexport default identityResource;\n","/**\n * Shared resource-definition shape — mirror of the tool factory\n * pattern in ../tools/types.ts.\n *\n * MCP resources are read-only data discoverable via resources/list +\n * resources/read JSON-RPC calls. Each resource has a stable URI,\n * a human-readable name + description, a MIME type, and a `read()`\n * function that returns its text content.\n */\nimport type { ZodRawShape } from 'zod';\nimport type { VectrosClient } from '@vectros-ai/sdk';\nimport type { Logger } from '../log.js';\n\n/**\n * Names of all REGISTERED resources — the contract for what\n * `resources: [...]` filter accepts.\n *\n * MUST stay in lockstep with `ALL_RESOURCE_FACTORIES` in\n * `./index.ts` — every name here needs a factory there, and vice\n * versa. The server iterates this list at construction; an\n * unimplemented name throws.\n */\nexport const RESOURCE_NAMES = ['schemas', 'identity'] as const;\nexport type ResourceName = (typeof RESOURCE_NAMES)[number];\n\nexport interface ResourceDefinition {\n name: ResourceName;\n uri: string;\n title: string;\n description: string;\n mimeType: string;\n /** Returns the resource's text content (JSON-encoded data). */\n read: () => Promise<string>;\n}\n\nexport interface ResourceFactoryContext {\n client: VectrosClient;\n log: Logger;\n /** API key — needed by `identity` resource for raw /v1/ping fetch. */\n apiKey?: string;\n /** API base URL — same rationale as `apiKey`. */\n environment?: string;\n}\n\nexport type ResourceFactory = (ctx: ResourceFactoryContext) => ResourceDefinition;\n\n/** Re-exports used by tests. */\nexport type { ZodRawShape };\n","/**\n * Resource registry — the v0.2 catalog. Each resource is a factory\n * that the server instantiates with the SDK client + logger + (for\n * the identity resource) the API key + environment.\n *\n * Order here is the order resources appear in `resources/list`\n * responses to the MCP client.\n *\n * MUST stay in lockstep with `RESOURCE_NAMES` in `./types.ts` —\n * every name in the type union has a factory here.\n */\nimport type { ResourceFactory } from './types.js';\nimport schemasResource from './schemas.js';\nimport identityResource from './identity.js';\n\nexport const ALL_RESOURCE_FACTORIES: Record<string, ResourceFactory> = {\n schemas: schemasResource,\n identity: identityResource,\n};\n\nexport {\n RESOURCE_NAMES,\n type ResourceName,\n type ResourceDefinition,\n type ResourceFactory,\n} from './types.js';\n","/**\n * Custom zod → JSON Schema converter.\n *\n * We do this in-tree (rather than depending on `zod-to-json-schema`)\n * because we only need to support the small subset of zod shapes our\n * tool input schemas use: object, string, number, boolean, enum,\n * array, plus the unwrap-modifier triad (optional / default /\n * nullable). The output is the JSON Schema fragment that MCP's\n * `tools/list` response embeds for each tool.\n *\n * Exported separately from server.ts so it can be unit-tested in\n * isolation. The integration test sees the converted output via\n * `tools/list`, but doesn't assert the converted-shape semantics\n * (e.g., that required fields drop their unwrapped modifier).\n */\nimport { z } from 'zod';\n\n/**\n * Convert a zod raw-shape object (the value passed to `z.object(...)`)\n * into a JSON Schema object describing the same shape.\n */\nexport function zodShapeToJsonSchema(\n shape: Record<string, z.ZodTypeAny>,\n): Record<string, unknown> {\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n for (const [name, schema] of Object.entries(shape)) {\n properties[name] = zodTypeToJsonSchema(schema);\n if (!schema.isOptional()) required.push(name);\n }\n const out: Record<string, unknown> = { type: 'object', properties };\n if (required.length > 0) out.required = required;\n return out;\n}\n\n/**\n * Convert a single zod type into a JSON Schema fragment. Unwraps\n * Optional / Default / Nullable layers transparently — the\n * `required` list in the parent object tracks whether a field is\n * required separately.\n */\nexport function zodTypeToJsonSchema(schema: z.ZodTypeAny): Record<string, unknown> {\n // Capture the description BEFORE unwrapping — wrappers carry it.\n const description = (schema as unknown as { description?: string }).description;\n\n // Unwrap modifiers.\n let current: z.ZodTypeAny = schema;\n while (\n current instanceof z.ZodOptional ||\n current instanceof z.ZodDefault ||\n current instanceof z.ZodNullable\n ) {\n current = (current as unknown as { _def: { innerType: z.ZodTypeAny } })._def.innerType;\n }\n\n const base: Record<string, unknown> = description ? { description } : {};\n\n if (current instanceof z.ZodString) {\n return { ...base, type: 'string' };\n }\n if (current instanceof z.ZodNumber) {\n return { ...base, type: 'number' };\n }\n if (current instanceof z.ZodBoolean) {\n return { ...base, type: 'boolean' };\n }\n if (current instanceof z.ZodEnum) {\n return {\n ...base,\n type: 'string',\n enum: (current as z.ZodEnum<[string, ...string[]]>).options,\n };\n }\n if (current instanceof z.ZodArray) {\n return {\n ...base,\n type: 'array',\n items: zodTypeToJsonSchema((current as z.ZodArray<z.ZodTypeAny>).element),\n };\n }\n if (current instanceof z.ZodObject) {\n return {\n ...base,\n ...zodShapeToJsonSchema((current as z.ZodObject<z.ZodRawShape>).shape),\n };\n }\n if (current instanceof z.ZodRecord) {\n // `z.record(...)` → an open-keyed object. Describe it as `type: object`\n // with `additionalProperties` carrying the value schema, so the field\n // advertises a real shape to MCP clients instead of an empty fragment.\n const valueType = (current as unknown as { _def: { valueType: z.ZodTypeAny } })._def.valueType;\n return {\n ...base,\n type: 'object',\n additionalProperties: zodTypeToJsonSchema(valueType),\n };\n }\n // Fallback — let the MCP SDK be tolerant.\n return { ...base };\n}\n","/**\n * Streamable HTTP transport (v0.2+).\n *\n * Wraps the MCP SDK's `StreamableHTTPServerTransport` in a Node\n * `http.Server` that routes `POST /mcp` + `GET /mcp` to the\n * SDK's request handler.\n *\n * **v0.2 single-tenant model:** the MCP server uses the env\n * `VECTROS_API_KEY` for all upstream Vectros calls — the\n * Authorization header on incoming HTTP requests is NOT mapped to\n * an upstream credential (that's a v1.0+ multi-tenant feature). The\n * optional `bearerToken` opt provides client-to-server auth: if set,\n * incoming requests must present `Authorization: Bearer <token>`\n * matching exactly, or they get a 401. Recommended for any\n * deployment beyond localhost.\n *\n * **Stateful sessions:** the SDK generates a session ID per\n * initialization (uses `crypto.randomUUID()`). Session ID flows back\n * to the client in response headers; subsequent requests carry it\n * in `mcp-session-id` header. Session state is in-memory.\n *\n * Health check: `GET /` returns 200 with a simple JSON body. Useful\n * for k8s readiness probes, ALB target groups, etc.\n */\nimport { createServer, type IncomingMessage, type ServerResponse, type Server as HttpServer } from 'node:http';\nimport { randomUUID } from 'node:crypto';\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { Logger } from '../log.js';\nimport type { VectrosMCPServer } from '../server.js';\n\nexport interface HttpTransportOptions {\n /** Port to listen on. Default 8765. */\n port?: number;\n /** Host to bind to. Default 127.0.0.1 (localhost-only). Pass '0.0.0.0' for all interfaces. */\n host?: string;\n /**\n * Optional client→server bearer token. If set, incoming HTTP\n * requests must present `Authorization: Bearer <token>` matching\n * EXACTLY (constant-time-compare under the hood); else 401.\n * Strongly recommended for any deployment beyond localhost.\n */\n bearerToken?: string;\n /**\n * Extra allowed `Host` header values (in addition to the bind\n * host:port + localhost aliases that are always allowed). Used for\n * DNS-rebinding protection — a request whose Host is not in the\n * allow-list is rejected with 403. Reverse-proxy deployments set\n * this to the public hostname(s). See {@link VECTROS_MCP_HTTP_ALLOWED_HOSTS}.\n */\n allowedHosts?: string[];\n /**\n * Extra allowed `Origin` header values (in addition to the\n * http(s) origins of the allowed hosts). A request that PRESENTS an\n * Origin not in the allow-list is rejected with 403; a request with\n * NO Origin (non-browser MCP clients) is allowed. See\n * {@link VECTROS_MCP_HTTP_ALLOWED_ORIGINS}.\n */\n allowedOrigins?: string[];\n /** MCP server instance to handle requests. */\n mcpServer: VectrosMCPServer;\n /** Logger; defaults to a no-op if missing. */\n log: Logger;\n}\n\nexport interface HttpTransportHandle {\n /** Address the server is bound to. */\n address: { host: string; port: number };\n /** Stops the server. Idempotent. */\n close: () => Promise<void>;\n}\n\n/** Constant-time string compare. Avoids timing-attack on the bearer-token check. */\nfunction constantTimeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return diff === 0;\n}\n\n/** True if `host` is a loopback bind address (no network exposure). */\nexport function isLoopbackBindHost(host: string): boolean {\n const h = host.toLowerCase();\n return h === '127.0.0.1' || h === 'localhost' || h === '::1' || h === '[::1]';\n}\n\n/**\n * Whether to refuse starting the HTTP transport: a non-loopback bind with no\n * bearer token is an open credential proxy on the network. An explicit opt-out\n * (`VECTROS_MCP_HTTP_ALLOW_INSECURE=1`) overrides. Pure — unit-tested.\n */\nexport function shouldRefuseInsecureBind(host: string, hasBearer: boolean, allowInsecure: boolean): boolean {\n return !isLoopbackBindHost(host) && !hasBearer && !allowInsecure;\n}\n\n/** localhost / 127.0.0.1 / ::1 aliases for a given host (DNS-rebinding allow-list). */\nfunction loopbackAliases(host: string): string[] {\n const h = host.toLowerCase();\n if (h === '127.0.0.1' || h === 'localhost') return ['127.0.0.1', 'localhost'];\n if (h === '::1' || h === '[::1]') return ['::1', '[::1]'];\n return [h];\n}\n\n/**\n * Build the set of allowed `Host` header values from the bind host + port,\n * plus any operator-configured extras. Includes both `host` and `host:port`\n * forms (clients may omit the port for a default-port deployment) and the\n * loopback aliases so `localhost` ↔ `127.0.0.1` both work.\n */\nfunction buildAllowedHosts(host: string, port: number, extra: string[] = []): Set<string> {\n const set = new Set<string>();\n // Always allow loopback Host values (a rebound browser sends the attacker\n // DOMAIN as Host, never the loopback literal), plus the bind host:port. This\n // lets a `localhost` client reach a `0.0.0.0` bind without extra config.\n const hosts = [...loopbackAliases(host), '127.0.0.1', 'localhost', '::1', '[::1]'];\n for (const h of hosts) {\n set.add(h.toLowerCase());\n set.add(`${h.toLowerCase()}:${port}`);\n }\n for (const e of extra) set.add(e.trim().toLowerCase());\n return set;\n}\n\n/** Build the allowed `Origin` values: http(s) origins of every allowed host + extras. */\nfunction buildAllowedOrigins(allowedHosts: Set<string>, extra: string[] = []): Set<string> {\n const set = new Set<string>();\n for (const h of allowedHosts) {\n set.add(`http://${h}`);\n set.add(`https://${h}`);\n }\n for (const e of extra) set.add(e.trim().toLowerCase().replace(/\\/$/, ''));\n return set;\n}\n\n/**\n * DNS-rebinding / cross-origin guard. The MCP SDK's transport-level\n * `enableDnsRebindingProtection` flags are `@deprecated` in favour of\n * external middleware (this), so we validate Host + Origin ourselves:\n * - `Host` must be in the allow-list (a rebound browser sends the attacker\n * domain as Host → rejected even though it connected to the loopback IP);\n * - if `Origin` is PRESENT it must be in the allow-list (blocks a malicious\n * web page driving the local server cross-origin); a request with NO\n * Origin (the normal non-browser MCP client) is allowed.\n *\n * Returns null when ok, or a short rejection reason.\n */\nfunction checkHostAndOrigin(\n req: IncomingMessage,\n allowedHosts: Set<string>,\n allowedOrigins: Set<string>,\n): string | null {\n const host = (req.headers.host ?? '').toLowerCase();\n if (!host || !allowedHosts.has(host)) {\n return `disallowed Host header \"${req.headers.host ?? ''}\"`;\n }\n const origin = req.headers.origin;\n if (origin !== undefined && origin !== '' && !allowedOrigins.has(origin.toLowerCase().replace(/\\/$/, ''))) {\n return `disallowed Origin header \"${origin}\"`;\n }\n return null;\n}\n\n/** Comma-split a header/env list into trimmed non-empty values. */\nfunction splitList(value: string[] | undefined): string[] {\n return (value ?? []).flatMap((v) => v.split(',')).map((s) => s.trim()).filter(Boolean);\n}\n\n/**\n * Construct + start an HTTP server bound to the MCP server. Resolves\n * when the socket is listening (after `server.listen` 'listening'\n * event fires).\n */\nexport async function startHttpTransport(opts: HttpTransportOptions): Promise<HttpTransportHandle> {\n const port = opts.port ?? 8765;\n const host = opts.host ?? '127.0.0.1';\n const { mcpServer, log, bearerToken } = opts;\n\n // DNS-rebinding / cross-origin allow-lists. Populated after listen() so the\n // OS-assigned port (port: 0) is reflected; the handler closure reads them\n // and no request can arrive before listen resolves.\n let allowedHosts = new Set<string>();\n let allowedOrigins = new Set<string>();\n\n // Create the MCP transport (stateful — session ID per initialization).\n const mcpTransport = new StreamableHTTPServerTransport({\n sessionIdGenerator: () => randomUUID(),\n });\n\n // Wire the MCP server to this transport.\n await mcpServer.connect(mcpTransport);\n\n const httpServer: HttpServer = createServer(async (req: IncomingMessage, res: ServerResponse) => {\n // Health check — unauthenticated, separate from /mcp. Exempt from the\n // Host/Origin check too: probes (ALB/k8s) legitimately send arbitrary Host.\n if (req.method === 'GET' && (req.url === '/' || req.url === '/healthz')) {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ status: 'ok', service: 'vectros-mcp-server' }));\n return;\n }\n\n // DNS-rebinding / cross-origin guard — BEFORE auth, so a rebound browser\n // page can't even reach the bearer check.\n const rebindReason = checkHostAndOrigin(req, allowedHosts, allowedOrigins);\n if (rebindReason) {\n log.warn(\n { url: req.url, ip: req.socket.remoteAddress, host: req.headers.host, origin: req.headers.origin },\n `HTTP request rejected: ${rebindReason}`,\n );\n res.writeHead(403, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'forbidden', reason: 'host_or_origin_not_allowed' }));\n return;\n }\n\n // Client→server bearer token check (if configured).\n if (bearerToken) {\n const provided = (req.headers.authorization ?? '').replace(/^Bearer\\s+/i, '');\n if (!provided || !constantTimeEqual(provided, bearerToken)) {\n log.warn({ url: req.url, ip: req.socket.remoteAddress }, 'HTTP request rejected: bad bearer token');\n res.writeHead(401, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'unauthorized' }));\n return;\n }\n }\n\n // Route /mcp to the SDK transport. Other paths → 404.\n if (req.url === '/mcp' || req.url?.startsWith('/mcp?') || req.url?.startsWith('/mcp/')) {\n try {\n await mcpTransport.handleRequest(req, res);\n } catch (err) {\n log.error({ err: String(err), url: req.url }, 'HTTP request handler failed');\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'internal_error' }));\n }\n }\n return;\n }\n\n res.writeHead(404, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'not_found', hint: 'MCP endpoint is at /mcp' }));\n });\n\n await new Promise<void>((resolve, reject) => {\n httpServer.once('error', reject);\n httpServer.listen(port, host, () => {\n httpServer.removeListener('error', reject);\n resolve();\n });\n });\n\n const addr = httpServer.address();\n const resolvedPort = typeof addr === 'object' && addr ? addr.port : port;\n\n // Now that the port is known, build the DNS-rebinding allow-lists. The\n // handler closure reads these; requests can only arrive after listen above.\n allowedHosts = buildAllowedHosts(host, resolvedPort, splitList(opts.allowedHosts));\n allowedOrigins = buildAllowedOrigins(allowedHosts, splitList(opts.allowedOrigins));\n\n log.info(\n {\n transport: 'StreamableHTTP',\n host,\n port: resolvedPort,\n bearerToken: bearerToken ? 'set' : 'none',\n allowedHosts: [...allowedHosts],\n },\n `MCP server listening on http://${host}:${resolvedPort}/mcp`,\n );\n\n if (!bearerToken) {\n log.warn(\n 'HTTP transport started WITHOUT bearer token — anyone who can reach this port can call Vectros with your credentials. ' +\n 'Set VECTROS_MCP_HTTP_BEARER_TOKEN (or the bearerToken constructor opt) for any non-localhost deployment.',\n );\n }\n\n return {\n address: { host, port: resolvedPort },\n close: () =>\n new Promise<void>((resolve, reject) => {\n httpServer.close((err) => (err ? reject(err) : resolve()));\n }),\n };\n}\n","/**\n * Parse the `VECTROS_MCP_TOOLS` env var into a validated ToolName[].\n *\n * undefined / empty → undefined (caller defaults to all tools)\n * CSV of valid names → ToolName[]\n * any invalid name → throws (caller maps to fail-fast exit)\n *\n * Exported as a pure function so it can be unit-tested without\n * spawning the CLI. cli.ts wraps the throw → process.exit(1).\n */\nimport { TOOL_NAMES, type ToolName } from './tools/index.js';\n\nexport function parseToolsEnv(value: string | undefined): ToolName[] | undefined {\n if (!value || value.trim().length === 0) return undefined;\n const requested = value\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n if (requested.length === 0) return undefined;\n const invalid = requested.filter((n) => !TOOL_NAMES.includes(n as ToolName));\n if (invalid.length > 0) {\n throw new Error(\n `VECTROS_MCP_TOOLS contains unknown tool names: ${invalid.join(', ')}. ` +\n `Valid: ${TOOL_NAMES.join(', ')}.`,\n );\n }\n return requested as ToolName[];\n}\n","#!/usr/bin/env node\n/**\n * HTTP CLI entry (v0.2+) — sibling to cli.ts. Starts the MCP server\n * with Streamable HTTP transport instead of stdio.\n *\n * Run as: `vectros-mcp-server-http` or `npx -y @vectros-ai/mcp-server vectros-mcp-server-http`.\n *\n * Env vars (additions to the stdio set — see cli.ts for the rest):\n * VECTROS_MCP_HTTP_PORT optional; default 8765\n * VECTROS_MCP_HTTP_HOST optional; default 127.0.0.1\n * (localhost-only; pass 0.0.0.0\n * for all interfaces)\n * VECTROS_MCP_HTTP_BEARER_TOKEN optional but STRONGLY RECOMMENDED\n * for non-localhost deployments.\n * Clients must present\n * `Authorization: Bearer <token>`\n * on every request. REQUIRED when\n * binding a non-loopback host unless\n * VECTROS_MCP_HTTP_ALLOW_INSECURE=1.\n * VECTROS_MCP_HTTP_ALLOWED_HOSTS optional; comma-separated extra Host\n * header values to allow (DNS-rebinding\n * protection). Set to the public\n * hostname(s) behind a reverse proxy.\n * VECTROS_MCP_HTTP_ALLOWED_ORIGINS optional; comma-separated extra Origin\n * header values to allow.\n * VECTROS_MCP_HTTP_ALLOW_INSECURE optional; \"1\" permits a non-loopback\n * bind without a bearer token (NOT\n * recommended).\n *\n * Exit codes (same as stdio CLI):\n * 0 clean shutdown\n * 1 fatal startup error\n * 2 uncaught runtime error\n *\n * Note: same three-file pattern as cli.ts — see CONVENTIONS §46.\n * main() runs unconditionally; helpers in parse-tools-env.ts are\n * unit-testable directly.\n */\nimport { VectrosMCPServer } from './server.js';\nimport { startHttpTransport, shouldRefuseInsecureBind } from './transport/http.js';\nimport { createLogger } from './log.js';\nimport type { ToolName } from './tools/index.js';\nimport { InvalidApiKeyError } from './auth.js';\nimport { parseToolsEnv } from './parse-tools-env.js';\nimport { validateBaseUrl, InvalidBaseUrlError } from './base-url.js';\n\nasync function main(): Promise<void> {\n const log = createLogger();\n\n const apiKey = process.env.VECTROS_API_KEY;\n const apiBaseUrl = process.env.VECTROS_API_BASE_URL;\n\n // Validate any env-supplied base URL BEFORE the server attaches the API key\n // (R1 F-06a) — see cli.ts for the credential-exfil rationale.\n if (apiBaseUrl !== undefined) {\n try {\n validateBaseUrl(apiBaseUrl, { warn: (m) => log.warn(m) });\n } catch (err) {\n const msg = err instanceof InvalidBaseUrlError ? err.message : String(err);\n log.fatal({ err: msg }, 'invalid VECTROS_API_BASE_URL');\n process.exit(1);\n }\n }\n\n const port = process.env.VECTROS_MCP_HTTP_PORT\n ? Number.parseInt(process.env.VECTROS_MCP_HTTP_PORT, 10)\n : undefined;\n const host = process.env.VECTROS_MCP_HTTP_HOST;\n const bearerToken = process.env.VECTROS_MCP_HTTP_BEARER_TOKEN || undefined;\n const allowedHosts = process.env.VECTROS_MCP_HTTP_ALLOWED_HOSTS\n ? [process.env.VECTROS_MCP_HTTP_ALLOWED_HOSTS]\n : undefined;\n const allowedOrigins = process.env.VECTROS_MCP_HTTP_ALLOWED_ORIGINS\n ? [process.env.VECTROS_MCP_HTTP_ALLOWED_ORIGINS]\n : undefined;\n\n if (port !== undefined && (!Number.isFinite(port) || port < 1 || port > 65535)) {\n log.fatal({ port: process.env.VECTROS_MCP_HTTP_PORT }, 'invalid VECTROS_MCP_HTTP_PORT (must be 1-65535)');\n process.exit(1);\n }\n\n // Refuse to bind a non-loopback host without a bearer token: that is\n // an open credential proxy on the network. An explicit opt-out is required.\n const effectiveHost = host ?? '127.0.0.1';\n const allowInsecureHttp = ['1', 'true', 'yes'].includes(\n (process.env.VECTROS_MCP_HTTP_ALLOW_INSECURE ?? '').toLowerCase(),\n );\n if (shouldRefuseInsecureBind(effectiveHost, Boolean(bearerToken), allowInsecureHttp)) {\n log.fatal(\n { host: effectiveHost },\n 'refusing to bind a non-loopback host without VECTROS_MCP_HTTP_BEARER_TOKEN — anyone who can ' +\n 'reach this port could call Vectros with your credentials. Set a bearer token, or set ' +\n 'VECTROS_MCP_HTTP_ALLOW_INSECURE=1 to override (NOT recommended).',\n );\n process.exit(1);\n }\n\n let tools: ToolName[] | undefined;\n try {\n tools = parseToolsEnv(process.env.VECTROS_MCP_TOOLS);\n } catch (err) {\n log.fatal({ err: String(err) }, 'invalid VECTROS_MCP_TOOLS');\n process.exit(1);\n }\n\n const skipFlag = (process.env.VECTROS_MCP_SKIP_PING_VALIDATION ?? '').toLowerCase();\n const validateOnStart = !(skipFlag === '1' || skipFlag === 'true');\n\n let server: VectrosMCPServer;\n try {\n server = new VectrosMCPServer({\n apiKey: apiKey as string,\n tools,\n apiBaseUrl,\n logger: log,\n validateOnStart,\n transport: 'http',\n });\n } catch (err) {\n if (err instanceof InvalidApiKeyError) {\n log.fatal({ err: err.message }, 'startup failed: invalid API key');\n } else {\n log.fatal({ err: String(err) }, 'startup failed');\n }\n process.exit(1);\n }\n\n let handle: Awaited<ReturnType<typeof startHttpTransport>>;\n try {\n handle = await startHttpTransport({\n mcpServer: server,\n log,\n port,\n host,\n bearerToken,\n allowedHosts,\n allowedOrigins,\n });\n } catch (err) {\n log.fatal({ err: String(err) }, 'failed to start HTTP transport');\n process.exit(2);\n }\n\n const shutdown = async (signal: string) => {\n log.info({ signal }, 'shutdown requested');\n try {\n await handle.close();\n await server.close();\n } catch (err) {\n log.warn({ err: String(err) }, 'error during shutdown');\n }\n process.exit(0);\n };\n process.on('SIGINT', () => void shutdown('SIGINT'));\n process.on('SIGTERM', () => void shutdown('SIGTERM'));\n\n // Stays alive until SIGINT/SIGTERM — the HTTP server keeps the\n // event loop busy via its listening socket.\n}\n\nmain().catch((err) => {\n process.stderr.write(`fatal: ${err instanceof Error ? err.stack : String(err)}\\n`);\n process.exit(2);\n});\n"],"mappings":"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","names":["resolve","z","createLogger","z","MCP_DEFAULT_LIMIT","MCP_MAX_LIMIT","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","MCP_DEFAULT_LIMIT","MCP_MAX_LIMIT","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","MCP_DEFAULT_LIMIT","MCP_MAX_LIMIT","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","inputSchema","z","inputSchema","z","z","MCP_DEFAULT_LIMIT","MCP_MAX_LIMIT","inputSchema","z","z","inputSchema","z","z","createLogger","z","resolve","createLogger"]}
|
|
1
|
+
{"version":3,"sources":["../src/server.ts","../../../node_modules/@vectros-ai/sdk/dist/index.mjs","../src/auth.ts","../src/build-info.ts","../src/log.ts","../src/identity.ts","../src/base-url.ts","../src/tools/hybrid_search.ts","../src/sse.ts","../src/tools/errors.ts","../src/tools/record_query.ts","../src/paging.ts","../src/tools/record_get.ts","../src/tools/record_create.ts","../src/tools/record_update.ts","../src/tools/record_delete.ts","../src/tools/rag_ask.ts","../src/tools/document_ask.ts","../src/tools/list_schemas.ts","../src/tools/document_get.ts","../src/tools/document_query.ts","../src/tools/document_update.ts","../src/tools/document_delete.ts","../src/tools/folder_query.ts","../src/tools/folder_create.ts","../src/tools/folder_update.ts","../src/tools/folder_delete.ts","../src/tools/current_identity.ts","../src/tools/document_ingest.ts","../src/tools/lookup_principal.ts","../src/tools/version_history.ts","../src/tools/types.ts","../src/tools/index.ts","../src/resources/schemas.ts","../src/resources/identity.ts","../src/resources/types.ts","../src/resources/index.ts","../src/zod-to-json-schema.ts","../src/transport/http.ts","../src/parse-tools-env.ts","../src/cli-http.ts"],"sourcesContent":["/**\n * VectrosMCPServer — the public class. Composes:\n * - API-key parse + warnings\n * - Vectros SDK client construction\n * - MCP Server with the v0.1 tool catalog registered\n * - The `tools: [...]` opt-in filter (CodeBlock.js contract)\n *\n * Transport (stdio for v0.1) is connected separately via\n * `server.connect(transport)`. The CLI entry wires stdio.\n *\n * Public surface — see the design doc § \"Configuration\"\n * for the constructor-options shape.\n */\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { VectrosClient } from '@vectros-ai/sdk';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport {\n CallToolRequestSchema,\n ListResourcesRequestSchema,\n ListToolsRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\n\nimport { parseApiKey, warnOnSuboptimalKey } from './auth.js';\nimport { BUILD_INFO } from './build-info.js';\nimport { createLogger, type Logger } from './log.js';\nimport { resolveIdentity } from './identity.js';\nimport { validateBaseUrl } from './base-url.js';\nimport { ALL_TOOL_FACTORIES, type ToolName, TOOL_NAMES } from './tools/index.js';\nimport type { ToolDefinition, ToolExtra, ToolResult } from './tools/types.js';\nimport { toolError } from './tools/errors.js';\nimport {\n ALL_RESOURCE_FACTORIES,\n type ResourceName,\n RESOURCE_NAMES,\n} from './resources/index.js';\nimport type { ResourceDefinition } from './resources/types.js';\nimport { zodShapeToJsonSchema } from './zod-to-json-schema.js';\n\nconst DEFAULT_ENVIRONMENT = 'https://api.vectros.ai';\n\nexport interface VectrosMCPServerOptions {\n /** Vectros API key. REQUIRED. Recommended shape: ssk_live_... or ssk_test_.... */\n apiKey: string;\n /** Opt-in tool filter. Default: all v0.1 tools enabled. */\n tools?: ToolName[];\n /**\n * Opt-in resource filter (v0.2+). Default: all resources enabled.\n * Pass `[]` to register zero resources (server advertises no\n * resources capability via tools/list).\n */\n resources?: ResourceName[];\n /**\n * Vectros API base URL. Default: https://api.vectros.ai. The SDK\n * calls this `environment`; we keep the docs-aligned name on our\n * surface to match the design doc.\n */\n apiBaseUrl?: string;\n /** Provide a logger to capture server output. Default: pino → stderr. */\n logger?: Logger;\n /**\n * Which transport this server will be wired up with. Optional; only\n * affects tool behavior that depends on partner-local-fs access\n * (currently `document_ingest`'s filePath mode is stdio-only). The\n * CLI entry points set this — `cli.ts` passes 'stdio', the v0.2\n * `cli-http.ts` passes 'http'. Programmatic embedders default to\n * 'stdio' semantics if omitted.\n */\n transport?: 'stdio' | 'http';\n /**\n * If true (default in v0.2), perform a GET /v1/ping check during\n * `connect()` to fail-fast on bad credentials BEFORE the MCP\n * client sends its first tool call. The default is safe — partners\n * who don't want the network roundtrip on startup can set false,\n * but the trade-off is \"credential failures surface mid-tool-call\n * rather than at startup.\"\n *\n * The CLI honors `VECTROS_MCP_SKIP_PING_VALIDATION=1` env var as\n * an explicit opt-out (sets this to false). Useful in CI / dev\n * environments where the API isn't reachable.\n */\n validateOnStart?: boolean;\n /**\n * Filesystem root that `document_ingest`'s stdio `filePath` mode is\n * jailed to. Overrides `VECTROS_MCP_INGEST_ROOT`; when both are\n * absent the tool defaults to `process.cwd()`.\n */\n ingestRoot?: string;\n}\n\nexport class VectrosMCPServer {\n private readonly server: Server;\n private readonly log: Logger;\n private readonly tools: ToolDefinition[];\n private readonly resources: ResourceDefinition[];\n private readonly apiKey: string;\n private readonly environment: string;\n private readonly validateOnStart: boolean;\n\n constructor(opts: VectrosMCPServerOptions) {\n this.log = opts.logger ?? createLogger();\n\n // Auth — parse + warn (fail-fast on malformed).\n const keyInfo = parseApiKey(opts.apiKey);\n warnOnSuboptimalKey(keyInfo, this.log);\n this.log.info(\n { keyPrefix: keyInfo.prefix, keyEnv: keyInfo.env },\n 'authenticated against Vectros',\n );\n\n // SDK client. Validate the base URL here too (R1 F-06a) — the CLI entry\n // points validate before construction, but a programmatic embedder reaches\n // this directly; an unvalidated host would exfiltrate the API key via\n // /v1/ping. Throws InvalidBaseUrlError on a non-Vectros / insecure host.\n const environment = opts.apiBaseUrl ?? DEFAULT_ENVIRONMENT;\n validateBaseUrl(environment, { warn: (m) => this.log.warn(m) });\n const client = new VectrosClient({ token: opts.apiKey, environment });\n\n // Stash for connect-time validation.\n this.apiKey = opts.apiKey;\n this.environment = environment;\n this.validateOnStart = opts.validateOnStart ?? true;\n\n // Build the enabled tool set.\n const requested = opts.tools ?? [...TOOL_NAMES];\n const invalid = requested.filter((n) => !TOOL_NAMES.includes(n as ToolName));\n if (invalid.length > 0) {\n throw new Error(\n `Unknown tool names in opts.tools: ${invalid.join(', ')}. ` +\n `Valid names: ${TOOL_NAMES.join(', ')}.`,\n );\n }\n this.tools = requested.map((name) => {\n const factory = ALL_TOOL_FACTORIES[name];\n return factory({\n client,\n log: this.log,\n apiKey: opts.apiKey,\n environment,\n transport: opts.transport,\n ingestRoot: opts.ingestRoot,\n });\n });\n this.log.info(\n { tools: this.tools.map((t) => t.name) },\n `${this.tools.length} tool(s) enabled`,\n );\n\n // Build the enabled resource set (v0.2+).\n const requestedResources = opts.resources ?? [...RESOURCE_NAMES];\n const invalidResources = requestedResources.filter(\n (n) => !RESOURCE_NAMES.includes(n as ResourceName),\n );\n if (invalidResources.length > 0) {\n throw new Error(\n `Unknown resource names in opts.resources: ${invalidResources.join(', ')}. ` +\n `Valid names: ${RESOURCE_NAMES.join(', ')}.`,\n );\n }\n this.resources = requestedResources.map((name) => {\n const factory = ALL_RESOURCE_FACTORIES[name];\n return factory({\n client,\n log: this.log,\n apiKey: opts.apiKey,\n environment,\n });\n });\n this.log.info(\n { resources: this.resources.map((r) => r.name) },\n `${this.resources.length} resource(s) enabled`,\n );\n\n // MCP Server instance — advertise both tools + resources\n // capabilities (resources only if any are registered).\n const capabilities: { tools: object; resources?: object } = { tools: {} };\n if (this.resources.length > 0) {\n capabilities.resources = {};\n }\n this.server = new Server(\n { name: '@vectros-ai/mcp-server', version: BUILD_INFO.mcpServer },\n { capabilities },\n );\n\n this.wireHandlers();\n }\n\n /**\n * Wire `tools/list` and `tools/call` JSON-RPC handlers on the\n * underlying MCP Server. Each tool's handler is wrapped to convert\n * thrown errors into `isError: true` tool results.\n */\n private wireHandlers(): void {\n // SDK type-union disambiguation note: setRequestHandler's return\n // type is a ServerResult union that includes a Managed-Agents\n // `{task: {...}}` variant. Our handlers return CallToolResult-\n // shaped objects (`{content, isError?}`) — assignable at runtime\n // but TypeScript's strict-distributive union check can't pick\n // the right variant. Cast the return to `unknown` to suppress.\n this.server.setRequestHandler(ListToolsRequestSchema, async () =>\n ({\n tools: this.tools.map((t) => ({\n name: t.name,\n title: t.title,\n description: t.description,\n inputSchema: zodShapeToJsonSchema(t.inputSchema),\n })),\n }) as unknown as never,\n );\n\n this.server.setRequestHandler(CallToolRequestSchema, async (req, extra) => {\n const tool = this.tools.find((t) => t.name === req.params.name);\n let result: ToolResult;\n if (!tool) {\n result = toolError(req.params.name ?? 'unknown', new Error('No such tool.'));\n } else {\n // Validate args via zod.\n const parsed = z.object(tool.inputSchema).safeParse(req.params.arguments ?? {});\n if (!parsed.success) {\n result = toolError(tool.name, new Error(`Invalid arguments: ${parsed.error.message}`));\n } else {\n try {\n // The MCP SDK's `extra` object exposes sendNotification +\n // _meta.progressToken. Cast through unknown — the SDK's\n // generated types over-constrain the notification shape.\n result = await tool.handler(\n parsed.data as Record<string, unknown>,\n extra as unknown as ToolExtra,\n );\n } catch (err) {\n // Defensive — tool handlers should already catch internally.\n result = toolError(tool.name, err);\n }\n }\n }\n // See header comment on the ListToolsRequestSchema handler for\n // why this cast is needed.\n return result as unknown as never;\n });\n\n // Resources — only wire if any are registered. Skipping the\n // handler-wire when resources=[] means the MCP server doesn't\n // accept resources/list calls at all, matching the \"advertise\n // no resources capability\" behavior in the constructor.\n if (this.resources.length > 0) {\n this.server.setRequestHandler(ListResourcesRequestSchema, async () =>\n ({\n resources: this.resources.map((r) => ({\n uri: r.uri,\n name: r.name,\n title: r.title,\n description: r.description,\n mimeType: r.mimeType,\n })),\n }) as unknown as never,\n );\n\n this.server.setRequestHandler(ReadResourceRequestSchema, async (req) => {\n const uri = req.params.uri;\n const resource = this.resources.find((r) => r.uri === uri);\n if (!resource) {\n // MCP spec: unknown URI → throw an error (the SDK converts\n // to a JSON-RPC error response). No \"isError\" flag like\n // tools — resources use protocol-level errors.\n throw new Error(`No such resource URI: ${uri}`);\n }\n try {\n const text = await resource.read();\n return {\n contents: [\n {\n uri: resource.uri,\n mimeType: resource.mimeType,\n text,\n },\n ],\n } as unknown as never;\n } catch (err) {\n this.log.warn(\n { resource: resource.name, uri, err: String(err) },\n 'resource read failed',\n );\n throw err;\n }\n });\n }\n }\n\n /**\n * Connect the underlying MCP Server to a transport (stdio, HTTP,\n * etc.). Returns when the connection is established; the server\n * continues serving until the transport closes.\n *\n * If `validateOnStart` (default true) is enabled, performs a\n * GET /v1/ping check BEFORE wiring the transport. On failure,\n * throws — the partner's MCP client sees a startup error instead\n * of a confusing \"tools work but the first call 401s\" experience.\n */\n async connect(transport: Transport): Promise<void> {\n if (this.validateOnStart) {\n await this.validateCredentials();\n }\n await this.server.connect(transport);\n this.log.info({ transport: transport.constructor.name }, 'MCP server connected');\n }\n\n /**\n * GET /v1/ping with the configured credential. Throws on non-2xx.\n * Called by `connect()` if `validateOnStart` is true.\n *\n * Uses `resolveIdentity` so it stays in lockstep with the\n * graceful-degradation contract (works whether backend has shipped\n * the extended ping shape or not — we only care about the 2xx vs\n * non-2xx signal for validation).\n */\n private async validateCredentials(): Promise<void> {\n try {\n await resolveIdentity({\n log: this.log,\n apiKey: this.apiKey,\n environment: this.environment,\n });\n this.log.info(\n { url: `${this.environment.replace(/\\/$/, '')}/v1/ping` },\n 'startup ping validation ok',\n );\n } catch (err) {\n this.log.fatal(\n { err: err instanceof Error ? err.message : String(err) },\n 'startup ping validation failed — check credential + base URL',\n );\n throw err;\n }\n }\n\n /** Close the underlying MCP Server. Idempotent. */\n async close(): Promise<void> {\n await this.server.close();\n }\n\n /**\n * Names of the tools registered on this server, in registration\n * order. Useful for tests + diagnostic logs. Read-only — the\n * registered set is fixed at construction time.\n */\n get registeredToolNames(): readonly ToolName[] {\n return this.tools.map((t) => t.name);\n }\n\n /**\n * Names of the resources registered on this server, in\n * registration order. Read-only.\n */\n get registeredResourceNames(): readonly ResourceName[] {\n return this.resources.map((r) => r.name);\n }\n}\n\n","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// api/index.ts\nvar api_exports = {};\n__export(api_exports, {\n AccessProfileRequest: () => AccessProfileRequest,\n AppContextResponse: () => AppContextResponse,\n BadRequestError: () => BadRequestError,\n BatchLookupResult: () => BatchLookupResult,\n BatchWriteRequest: () => BatchWriteRequest,\n BatchWriteResult: () => BatchWriteResult,\n ChatMessage: () => ChatMessage,\n ClientRequest: () => ClientRequest,\n ConflictError: () => ConflictError,\n ContentDeltaEvent: () => ContentDeltaEvent,\n ContentTooLargeError: () => ContentTooLargeError,\n DocumentContextEvent: () => DocumentContextEvent,\n DocumentLookupRequest: () => DocumentLookupRequest,\n DocumentRequest: () => DocumentRequest,\n DocumentResponse: () => DocumentResponse,\n DoneEvent: () => DoneEvent,\n ErasureCertificate: () => ErasureCertificate,\n ErasureRequest: () => ErasureRequest,\n ErasureRequestResponse: () => ErasureRequestResponse,\n ErrorEvent: () => ErrorEvent,\n ExportManifest: () => ExportManifest,\n ExportRequest: () => ExportRequest,\n ExportRequestResponse: () => ExportRequestResponse,\n FieldDef: () => FieldDef,\n FileUploadRequest: () => FileUploadRequest,\n ForbiddenError: () => ForbiddenError,\n IdentityLookupRequest: () => IdentityLookupRequest,\n InternalServerError: () => InternalServerError,\n ListClientsRequestOrder: () => ListClientsRequestOrder,\n ListOrgsRequestOrder: () => ListOrgsRequestOrder,\n ListUsersRequestOrder: () => ListUsersRequestOrder,\n LookupDocumentsRequestOrder: () => LookupDocumentsRequestOrder,\n LookupRecordsRequestOrder: () => LookupRecordsRequestOrder,\n ModelDataVersionResponse: () => ModelDataVersionResponse,\n NotFoundError: () => NotFoundError,\n NotImplementedError: () => NotImplementedError,\n OrgRequest: () => OrgRequest,\n PaymentRequiredError: () => PaymentRequiredError,\n PingResponse: () => PingResponse,\n RagSearch: () => RagSearch,\n ReadAccessLogResponse: () => ReadAccessLogResponse,\n RecordLookupRequest: () => RecordLookupRequest,\n RecordRequest: () => RecordRequest,\n RecordResponse: () => RecordResponse,\n RenderHintDef: () => RenderHintDef,\n SchemaRequest: () => SchemaRequest,\n SchemaResponse: () => SchemaResponse,\n ScopedKeyResponse: () => ScopedKeyResponse,\n SearchRequest: () => SearchRequest,\n SearchResult: () => SearchResult,\n SearchResultsEvent: () => SearchResultsEvent,\n TooManyRequestsError: () => TooManyRequestsError,\n TruncationWarningEvent: () => TruncationWarningEvent,\n UnauthorizedError: () => UnauthorizedError,\n UserRequest: () => UserRequest,\n UserResponse: () => UserResponse,\n auth: () => auth_exports,\n compliance: () => compliance_exports,\n documents: () => documents_exports,\n folders: () => folders_exports,\n identity: () => identity_exports,\n inference: () => inference_exports,\n records: () => records_exports,\n schemas: () => schemas_exports,\n search: () => search_exports\n});\n\n// core/json.ts\nvar toJson = (value, replacer, space) => {\n return JSON.stringify(value, replacer, space);\n};\nfunction fromJson(text, reviver) {\n return JSON.parse(text, reviver);\n}\n\n// errors/VectrosError.ts\nvar VectrosError = class extends Error {\n constructor({\n message,\n statusCode,\n body,\n rawResponse,\n cause\n }) {\n super(buildMessage({ message, statusCode, body }));\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n this.statusCode = statusCode;\n this.body = body;\n this.rawResponse = rawResponse;\n if (cause != null) {\n this.cause = cause;\n }\n }\n};\nfunction buildMessage({\n message,\n statusCode,\n body\n}) {\n const lines = [];\n if (message != null) {\n lines.push(message);\n }\n if (statusCode != null) {\n lines.push(`Status code: ${statusCode.toString()}`);\n }\n if (body != null) {\n lines.push(`Body: ${toJson(body, void 0, 2)}`);\n }\n return lines.join(\"\\n\");\n}\n\n// errors/VectrosTimeoutError.ts\nvar VectrosTimeoutError = class extends Error {\n constructor(message, opts) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n if (opts?.cause != null) {\n this.cause = opts.cause;\n }\n }\n};\n\n// api/errors/BadRequestError.ts\nvar BadRequestError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"BadRequestError\",\n statusCode: 400,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/ConflictError.ts\nvar ConflictError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"ConflictError\",\n statusCode: 409,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/ContentTooLargeError.ts\nvar ContentTooLargeError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"ContentTooLargeError\",\n statusCode: 413,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/ForbiddenError.ts\nvar ForbiddenError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"ForbiddenError\",\n statusCode: 403,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/InternalServerError.ts\nvar InternalServerError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"InternalServerError\",\n statusCode: 500,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/NotFoundError.ts\nvar NotFoundError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"NotFoundError\",\n statusCode: 404,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/NotImplementedError.ts\nvar NotImplementedError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"NotImplementedError\",\n statusCode: 501,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/PaymentRequiredError.ts\nvar PaymentRequiredError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"PaymentRequiredError\",\n statusCode: 402,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/TooManyRequestsError.ts\nvar TooManyRequestsError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"TooManyRequestsError\",\n statusCode: 429,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/errors/UnauthorizedError.ts\nvar UnauthorizedError = class extends VectrosError {\n constructor(body, rawResponse) {\n super({\n message: \"UnauthorizedError\",\n statusCode: 401,\n body,\n rawResponse\n });\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = this.constructor.name;\n }\n};\n\n// api/resources/auth/index.ts\nvar auth_exports = {};\n\n// api/resources/compliance/client/requests/ErasureRequest.ts\nvar ErasureRequest;\n((ErasureRequest2) => {\n ErasureRequest2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n ErasureRequest2.AuditDisposition = {\n RetainRedacted: \"retain-redacted\",\n Purge: \"purge\"\n };\n})(ErasureRequest || (ErasureRequest = {}));\n\n// api/resources/compliance/client/requests/ExportRequest.ts\nvar ExportRequest;\n((ExportRequest2) => {\n ExportRequest2.Scope = {\n Tenant: \"tenant\",\n Subject: \"subject\"\n };\n ExportRequest2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n ExportRequest2.Format = {\n Ndjson: \"ndjson\"\n };\n})(ExportRequest || (ExportRequest = {}));\n\n// api/resources/compliance/index.ts\nvar compliance_exports = {};\n__export(compliance_exports, {\n ErasureRequest: () => ErasureRequest,\n ExportRequest: () => ExportRequest\n});\n\n// api/resources/documents/client/requests/DocumentLookupRequest.ts\nvar DocumentLookupRequest;\n((DocumentLookupRequest2) => {\n DocumentLookupRequest2.Order = {\n Asc: \"asc\",\n Desc: \"desc\"\n };\n})(DocumentLookupRequest || (DocumentLookupRequest = {}));\n\n// api/resources/documents/client/requests/FileUploadRequest.ts\nvar FileUploadRequest;\n((FileUploadRequest2) => {\n FileUploadRequest2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(FileUploadRequest || (FileUploadRequest = {}));\n\n// api/resources/documents/index.ts\nvar documents_exports = {};\n__export(documents_exports, {\n DocumentLookupRequest: () => DocumentLookupRequest,\n FileUploadRequest: () => FileUploadRequest,\n LookupDocumentsRequestOrder: () => LookupDocumentsRequestOrder\n});\n\n// api/resources/documents/types/LookupDocumentsRequestOrder.ts\nvar LookupDocumentsRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/folders/index.ts\nvar folders_exports = {};\n\n// api/resources/identity/index.ts\nvar identity_exports = {};\n__export(identity_exports, {\n ListClientsRequestOrder: () => ListClientsRequestOrder,\n ListOrgsRequestOrder: () => ListOrgsRequestOrder,\n ListUsersRequestOrder: () => ListUsersRequestOrder\n});\n\n// api/resources/identity/types/ListClientsRequestOrder.ts\nvar ListClientsRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/identity/types/ListOrgsRequestOrder.ts\nvar ListOrgsRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/identity/types/ListUsersRequestOrder.ts\nvar ListUsersRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/inference/index.ts\nvar inference_exports = {};\n\n// api/resources/records/client/requests/BatchWriteRequest.ts\nvar BatchWriteRequest;\n((BatchWriteRequest2) => {\n BatchWriteRequest2.Atomicity = {\n AllOrNothing: \"all_or_nothing\",\n BestEffort: \"best_effort\"\n };\n})(BatchWriteRequest || (BatchWriteRequest = {}));\n\n// api/resources/records/client/requests/RecordLookupRequest.ts\nvar RecordLookupRequest;\n((RecordLookupRequest2) => {\n RecordLookupRequest2.Order = {\n Asc: \"asc\",\n Desc: \"desc\"\n };\n})(RecordLookupRequest || (RecordLookupRequest = {}));\n\n// api/resources/records/index.ts\nvar records_exports = {};\n__export(records_exports, {\n BatchWriteRequest: () => BatchWriteRequest,\n LookupRecordsRequestOrder: () => LookupRecordsRequestOrder,\n RecordLookupRequest: () => RecordLookupRequest\n});\n\n// api/resources/records/types/LookupRecordsRequestOrder.ts\nvar LookupRecordsRequestOrder = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\n\n// api/resources/schemas/index.ts\nvar schemas_exports = {};\n\n// api/resources/search/client/requests/SearchRequest.ts\nvar SearchRequest;\n((SearchRequest2) => {\n SearchRequest2.Mode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\"\n };\n SearchRequest2.TextMode = {\n Or: \"OR\",\n And: \"AND\",\n Phrase: \"PHRASE\",\n Complex: \"COMPLEX\"\n };\n let ContentTypes;\n ((ContentTypes2) => {\n ContentTypes2.Item = {\n Documents: \"documents\",\n Records: \"records\"\n };\n })(ContentTypes = SearchRequest2.ContentTypes || (SearchRequest2.ContentTypes = {}));\n})(SearchRequest || (SearchRequest = {}));\n\n// api/resources/search/index.ts\nvar search_exports = {};\n__export(search_exports, {\n SearchRequest: () => SearchRequest\n});\n\n// api/types/AccessProfileRequest.ts\nvar AccessProfileRequest;\n((AccessProfileRequest2) => {\n AccessProfileRequest2.Status = {\n Active: \"active\",\n Suspended: \"suspended\"\n };\n})(AccessProfileRequest || (AccessProfileRequest = {}));\n\n// api/types/AppContextResponse.ts\nvar AppContextResponse;\n((AppContextResponse2) => {\n AppContextResponse2.Status = {\n Active: \"active\",\n Purging: \"purging\",\n Deleted: \"deleted\"\n };\n})(AppContextResponse || (AppContextResponse = {}));\n\n// api/types/BatchLookupResult.ts\nvar BatchLookupResult;\n((BatchLookupResult2) => {\n BatchLookupResult2.Status = {\n Resolved: \"resolved\",\n NotFound: \"not_found\",\n Ambiguous: \"ambiguous\"\n };\n})(BatchLookupResult || (BatchLookupResult = {}));\n\n// api/types/BatchWriteResult.ts\nvar BatchWriteResult;\n((BatchWriteResult2) => {\n BatchWriteResult2.Status = {\n Created: \"created\",\n Updated: \"updated\",\n Conflict: \"conflict\",\n Invalid: \"invalid\"\n };\n})(BatchWriteResult || (BatchWriteResult = {}));\n\n// api/types/ChatMessage.ts\nvar ChatMessage;\n((ChatMessage2) => {\n ChatMessage2.Role = {\n System: \"system\",\n User: \"user\",\n Assistant: \"assistant\"\n };\n})(ChatMessage || (ChatMessage = {}));\n\n// api/types/ClientRequest.ts\nvar ClientRequest;\n((ClientRequest2) => {\n ClientRequest2.Status = {\n Active: \"ACTIVE\",\n Suspended: \"SUSPENDED\"\n };\n})(ClientRequest || (ClientRequest = {}));\n\n// api/types/ContentDeltaEvent.ts\nvar ContentDeltaEvent;\n((ContentDeltaEvent2) => {\n ContentDeltaEvent2.Event = {\n ContentDelta: \"content_delta\"\n };\n})(ContentDeltaEvent || (ContentDeltaEvent = {}));\n\n// api/types/DocumentContextEvent.ts\nvar DocumentContextEvent;\n((DocumentContextEvent2) => {\n DocumentContextEvent2.Event = {\n DocumentContext: \"document_context\"\n };\n})(DocumentContextEvent || (DocumentContextEvent = {}));\n\n// api/types/DocumentRequest.ts\nvar DocumentRequest;\n((DocumentRequest2) => {\n DocumentRequest2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(DocumentRequest || (DocumentRequest = {}));\n\n// api/types/DocumentResponse.ts\nvar DocumentResponse;\n((DocumentResponse2) => {\n DocumentResponse2.Status = {\n PendingUpload: \"PENDING_UPLOAD\",\n Uploaded: \"UPLOADED\",\n Extracting: \"EXTRACTING\",\n PendingIndex: \"PENDING_INDEX\",\n Indexed: \"INDEXED\",\n Skipped: \"SKIPPED\",\n Stored: \"STORED\",\n Failed: \"FAILED\"\n };\n DocumentResponse2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(DocumentResponse || (DocumentResponse = {}));\n\n// api/types/DoneEvent.ts\nvar DoneEvent;\n((DoneEvent2) => {\n DoneEvent2.Event = {\n Done: \"done\"\n };\n})(DoneEvent || (DoneEvent = {}));\n\n// api/types/ErasureCertificate.ts\nvar ErasureCertificate;\n((ErasureCertificate2) => {\n ErasureCertificate2.AuditDisposition = {\n RetainRedacted: \"retain-redacted\",\n Purge: \"purge\"\n };\n})(ErasureCertificate || (ErasureCertificate = {}));\n\n// api/types/ErasureRequestResponse.ts\nvar ErasureRequestResponse;\n((ErasureRequestResponse2) => {\n ErasureRequestResponse2.Status = {\n Accepted: \"accepted\",\n Processing: \"processing\",\n Completed: \"completed\",\n Failed: \"failed\"\n };\n ErasureRequestResponse2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n})(ErasureRequestResponse || (ErasureRequestResponse = {}));\n\n// api/types/ErrorEvent.ts\nvar ErrorEvent;\n((ErrorEvent2) => {\n ErrorEvent2.Event = {\n Error: \"error\"\n };\n})(ErrorEvent || (ErrorEvent = {}));\n\n// api/types/ExportManifest.ts\nvar ExportManifest;\n((ExportManifest2) => {\n ExportManifest2.Format = {\n Ndjson: \"ndjson\"\n };\n})(ExportManifest || (ExportManifest = {}));\n\n// api/types/ExportRequestResponse.ts\nvar ExportRequestResponse;\n((ExportRequestResponse2) => {\n ExportRequestResponse2.Status = {\n Accepted: \"accepted\",\n Processing: \"processing\",\n Completed: \"completed\",\n Failed: \"failed\"\n };\n ExportRequestResponse2.Scope = {\n Tenant: \"tenant\",\n Subject: \"subject\"\n };\n ExportRequestResponse2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n})(ExportRequestResponse || (ExportRequestResponse = {}));\n\n// api/types/FieldDef.ts\nvar FieldDef;\n((FieldDef2) => {\n FieldDef2.FieldType = {\n String: \"string\",\n Number: \"number\",\n Boolean: \"boolean\",\n Date: \"date\",\n Enum: \"enum\",\n Array: \"array\",\n Object: \"object\",\n Reference: \"reference\"\n };\n FieldDef2.TargetSurface = {\n Record: \"record\",\n Document: \"document\",\n User: \"user\",\n Org: \"org\",\n Client: \"client\"\n };\n})(FieldDef || (FieldDef = {}));\n\n// api/types/IdentityLookupRequest.ts\nvar IdentityLookupRequest;\n((IdentityLookupRequest2) => {\n IdentityLookupRequest2.Order = {\n Asc: \"asc\",\n Desc: \"desc\"\n };\n})(IdentityLookupRequest || (IdentityLookupRequest = {}));\n\n// api/types/ModelDataVersionResponse.ts\nvar ModelDataVersionResponse;\n((ModelDataVersionResponse2) => {\n ModelDataVersionResponse2.ChangeType = {\n Create: \"CREATE\",\n Update: \"UPDATE\",\n Delete: \"DELETE\"\n };\n})(ModelDataVersionResponse || (ModelDataVersionResponse = {}));\n\n// api/types/OrgRequest.ts\nvar OrgRequest;\n((OrgRequest2) => {\n OrgRequest2.Status = {\n Active: \"ACTIVE\",\n Suspended: \"SUSPENDED\"\n };\n})(OrgRequest || (OrgRequest = {}));\n\n// api/types/PingResponse.ts\nvar PingResponse;\n((PingResponse2) => {\n PingResponse2.Environment = {\n Staging: \"staging\",\n Production: \"production\"\n };\n PingResponse2.PrincipalType = {\n RootKey: \"root_key\",\n ScopedKey: \"scoped_key\",\n Token: \"token\"\n };\n})(PingResponse || (PingResponse = {}));\n\n// api/types/RagSearch.ts\nvar RagSearch;\n((RagSearch2) => {\n RagSearch2.Mode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\"\n };\n let ContentTypes;\n ((ContentTypes2) => {\n ContentTypes2.Item = {\n Documents: \"documents\",\n Records: \"records\"\n };\n })(ContentTypes = RagSearch2.ContentTypes || (RagSearch2.ContentTypes = {}));\n})(RagSearch || (RagSearch = {}));\n\n// api/types/ReadAccessLogResponse.ts\nvar ReadAccessLogResponse;\n((ReadAccessLogResponse2) => {\n ReadAccessLogResponse2.SubjectType = {\n User: \"user\",\n Client: \"client\",\n Org: \"org\"\n };\n ReadAccessLogResponse2.Action = {\n Read: \"read\",\n List: \"list\",\n Lookup: \"lookup\",\n Search: \"search\",\n Rag: \"rag\"\n };\n})(ReadAccessLogResponse || (ReadAccessLogResponse = {}));\n\n// api/types/RecordRequest.ts\nvar RecordRequest;\n((RecordRequest2) => {\n RecordRequest2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(RecordRequest || (RecordRequest = {}));\n\n// api/types/RecordResponse.ts\nvar RecordResponse;\n((RecordResponse2) => {\n RecordResponse2.IndexStatus = {\n PendingIndex: \"PENDING_INDEX\",\n Indexed: \"INDEXED\",\n Skipped: \"SKIPPED\",\n Failed: \"FAILED\"\n };\n RecordResponse2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n})(RecordResponse || (RecordResponse = {}));\n\n// api/types/RenderHintDef.ts\nvar RenderHintDef;\n((RenderHintDef2) => {\n RenderHintDef2.Widget = {\n Text: \"text\",\n Textarea: \"textarea\",\n Select: \"select\",\n Date: \"date\",\n Checkbox: \"checkbox\"\n };\n})(RenderHintDef || (RenderHintDef = {}));\n\n// api/types/SchemaRequest.ts\nvar SchemaRequest;\n((SchemaRequest2) => {\n SchemaRequest2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n SchemaRequest2.StorageProfile = {\n Standard: \"STANDARD\",\n LowLatency: \"LOW_LATENCY\",\n LargePayload: \"LARGE_PAYLOAD\"\n };\n let AllowedSurfaces;\n ((AllowedSurfaces2) => {\n AllowedSurfaces2.Item = {\n Record: \"record\",\n Document: \"document\",\n User: \"user\",\n Org: \"org\",\n Client: \"client\"\n };\n })(AllowedSurfaces = SchemaRequest2.AllowedSurfaces || (SchemaRequest2.AllowedSurfaces = {}));\n})(SchemaRequest || (SchemaRequest = {}));\n\n// api/types/SchemaResponse.ts\nvar SchemaResponse;\n((SchemaResponse2) => {\n SchemaResponse2.StorageProfile = {\n Standard: \"STANDARD\",\n LowLatency: \"LOW_LATENCY\",\n LargePayload: \"LARGE_PAYLOAD\"\n };\n SchemaResponse2.IndexMode = {\n Hybrid: \"HYBRID\",\n Semantic: \"SEMANTIC\",\n Text: \"TEXT\",\n None: \"NONE\"\n };\n let AllowedSurfaces;\n ((AllowedSurfaces2) => {\n AllowedSurfaces2.Item = {\n Record: \"record\",\n Document: \"document\",\n User: \"user\",\n Org: \"org\",\n Client: \"client\"\n };\n })(AllowedSurfaces = SchemaResponse2.AllowedSurfaces || (SchemaResponse2.AllowedSurfaces = {}));\n})(SchemaResponse || (SchemaResponse = {}));\n\n// api/types/ScopedKeyResponse.ts\nvar ScopedKeyResponse;\n((ScopedKeyResponse2) => {\n ScopedKeyResponse2.UserType = {\n Human: \"HUMAN\",\n Service: \"SERVICE\"\n };\n ScopedKeyResponse2.Status = {\n Active: \"active\",\n Revoked: \"revoked\"\n };\n ScopedKeyResponse2.KeyType = {\n Scoped: \"scoped\"\n };\n})(ScopedKeyResponse || (ScopedKeyResponse = {}));\n\n// api/types/SearchResult.ts\nvar SearchResult;\n((SearchResult2) => {\n SearchResult2.SourceType = {\n PartnerDocument: \"PartnerDocument\",\n GenericRecord: \"GenericRecord\"\n };\n})(SearchResult || (SearchResult = {}));\n\n// api/types/SearchResultsEvent.ts\nvar SearchResultsEvent;\n((SearchResultsEvent2) => {\n SearchResultsEvent2.Event = {\n SearchResults: \"search_results\"\n };\n})(SearchResultsEvent || (SearchResultsEvent = {}));\n\n// api/types/TruncationWarningEvent.ts\nvar TruncationWarningEvent;\n((TruncationWarningEvent2) => {\n TruncationWarningEvent2.Event = {\n TruncationWarning: \"truncation_warning\"\n };\n TruncationWarningEvent2.Reason = {\n ContextWindowBudget: \"context_window_budget\"\n };\n})(TruncationWarningEvent || (TruncationWarningEvent = {}));\n\n// api/types/UserRequest.ts\nvar UserRequest;\n((UserRequest2) => {\n UserRequest2.Status = {\n Active: \"ACTIVE\",\n Suspended: \"SUSPENDED\",\n Pending: \"PENDING\"\n };\n UserRequest2.Type = {\n Human: \"HUMAN\",\n Service: \"SERVICE\"\n };\n})(UserRequest || (UserRequest = {}));\n\n// api/types/UserResponse.ts\nvar UserResponse;\n((UserResponse2) => {\n UserResponse2.Status = {\n Active: \"ACTIVE\",\n Suspended: \"SUSPENDED\",\n Pending: \"PENDING\"\n };\n UserResponse2.Type = {\n Human: \"HUMAN\",\n Service: \"SERVICE\"\n };\n})(UserResponse || (UserResponse = {}));\n\n// core/auth/AuthProvider.ts\nfunction isAuthProvider(value) {\n return typeof value === \"object\" && value !== null && \"getAuthRequest\" in value && typeof value.getAuthRequest === \"function\";\n}\n\n// core/auth/NoOpAuthProvider.ts\nvar NoOpAuthProvider = class {\n getAuthRequest() {\n return Promise.resolve({ headers: {} });\n }\n};\n\n// core/fetcher/EndpointSupplier.ts\nvar EndpointSupplier = {\n get: async (supplier, arg) => {\n if (typeof supplier === \"function\") {\n return supplier(arg);\n } else {\n return supplier;\n }\n }\n};\n\n// core/logging/logger.ts\nvar LogLevel = {\n Debug: \"debug\",\n Info: \"info\",\n Warn: \"warn\",\n Error: \"error\"\n};\nvar logLevelMap = {\n [LogLevel.Debug]: 1,\n [LogLevel.Info]: 2,\n [LogLevel.Warn]: 3,\n [LogLevel.Error]: 4\n};\nvar ConsoleLogger = class {\n debug(message, ...args) {\n console.debug(message, ...args);\n }\n info(message, ...args) {\n console.info(message, ...args);\n }\n warn(message, ...args) {\n console.warn(message, ...args);\n }\n error(message, ...args) {\n console.error(message, ...args);\n }\n};\nvar Logger = class {\n /**\n * Creates a new logger instance.\n * @param config - Logger configuration\n */\n constructor(config) {\n this.level = logLevelMap[config.level];\n this.logger = config.logger;\n this.silent = config.silent;\n }\n /**\n * Checks if a log level should be output based on configuration.\n * @param level - The log level to check\n * @returns True if the level should be logged\n */\n shouldLog(level) {\n return !this.silent && this.level <= logLevelMap[level];\n }\n /**\n * Checks if debug logging is enabled.\n * @returns True if debug logs should be output\n */\n isDebug() {\n return this.shouldLog(LogLevel.Debug);\n }\n /**\n * Logs a debug message if debug logging is enabled.\n * @param message - The message to log\n * @param args - Additional arguments to log\n */\n debug(message, ...args) {\n if (this.isDebug()) {\n this.logger.debug(message, ...args);\n }\n }\n /**\n * Checks if info logging is enabled.\n * @returns True if info logs should be output\n */\n isInfo() {\n return this.shouldLog(LogLevel.Info);\n }\n /**\n * Logs an info message if info logging is enabled.\n * @param message - The message to log\n * @param args - Additional arguments to log\n */\n info(message, ...args) {\n if (this.isInfo()) {\n this.logger.info(message, ...args);\n }\n }\n /**\n * Checks if warning logging is enabled.\n * @returns True if warning logs should be output\n */\n isWarn() {\n return this.shouldLog(LogLevel.Warn);\n }\n /**\n * Logs a warning message if warning logging is enabled.\n * @param message - The message to log\n * @param args - Additional arguments to log\n */\n warn(message, ...args) {\n if (this.isWarn()) {\n this.logger.warn(message, ...args);\n }\n }\n /**\n * Checks if error logging is enabled.\n * @returns True if error logs should be output\n */\n isError() {\n return this.shouldLog(LogLevel.Error);\n }\n /**\n * Logs an error message if error logging is enabled.\n * @param message - The message to log\n * @param args - Additional arguments to log\n */\n error(message, ...args) {\n if (this.isError()) {\n this.logger.error(message, ...args);\n }\n }\n};\nfunction createLogger(config) {\n if (config == null) {\n return defaultLogger;\n }\n if (config instanceof Logger) {\n return config;\n }\n config = config ?? {};\n config.level ?? (config.level = LogLevel.Info);\n config.logger ?? (config.logger = new ConsoleLogger());\n config.silent ?? (config.silent = true);\n return new Logger(config);\n}\nvar defaultLogger = new Logger({\n level: LogLevel.Info,\n logger: new ConsoleLogger(),\n silent: true\n});\n\n// core/url/qs.ts\nvar defaultQsOptions = {\n arrayFormat: \"indices\",\n encode: true\n};\nfunction encodeValue(value, shouldEncode) {\n if (value === void 0) {\n return \"\";\n }\n if (value === null) {\n return \"\";\n }\n const stringValue = String(value);\n return shouldEncode ? encodeURIComponent(stringValue) : stringValue;\n}\nfunction stringifyObject(obj, prefix = \"\", options) {\n const parts = [];\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}[${key}]` : key;\n if (value === void 0) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n const effectiveFormat = options.arrayFormat;\n if (effectiveFormat === \"comma\") {\n const encodedKey = options.encode ? encodeURIComponent(fullKey) : fullKey;\n const encodedValues = value.filter((item) => item !== void 0 && item !== null).map((item) => encodeValue(item, options.encode));\n if (encodedValues.length > 0) {\n parts.push(`${encodedKey}=${encodedValues.join(\",\")}`);\n }\n } else {\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n if (item === void 0) {\n continue;\n }\n if (typeof item === \"object\" && !Array.isArray(item) && item !== null) {\n const arrayKey = effectiveFormat === \"indices\" ? `${fullKey}[${i}]` : fullKey;\n parts.push(...stringifyObject(item, arrayKey, options));\n } else {\n const arrayKey = effectiveFormat === \"indices\" ? `${fullKey}[${i}]` : fullKey;\n const encodedKey = options.encode ? encodeURIComponent(arrayKey) : arrayKey;\n parts.push(`${encodedKey}=${encodeValue(item, options.encode)}`);\n }\n }\n }\n } else if (typeof value === \"object\" && value !== null) {\n if (Object.keys(value).length === 0) {\n continue;\n }\n parts.push(...stringifyObject(value, fullKey, options));\n } else {\n const encodedKey = options.encode ? encodeURIComponent(fullKey) : fullKey;\n parts.push(`${encodedKey}=${encodeValue(value, options.encode)}`);\n }\n }\n return parts;\n}\nfunction toQueryString(obj, options) {\n if (obj == null || typeof obj !== \"object\") {\n return \"\";\n }\n const parts = stringifyObject(obj, \"\", {\n ...defaultQsOptions,\n ...options\n });\n return parts.join(\"&\");\n}\n\n// core/fetcher/createRequestUrl.ts\nfunction createRequestUrl(baseUrl, queryParameters) {\n const queryString = toQueryString(queryParameters, { arrayFormat: \"repeat\" });\n return queryString ? `${baseUrl}?${queryString}` : baseUrl;\n}\n\n// core/fetcher/BinaryResponse.ts\nfunction getBinaryResponse(response) {\n const binaryResponse = {\n get bodyUsed() {\n return response.bodyUsed;\n },\n stream: () => response.body,\n arrayBuffer: response.arrayBuffer.bind(response),\n blob: response.blob.bind(response)\n };\n if (\"bytes\" in response && typeof response.bytes === \"function\") {\n binaryResponse.bytes = response.bytes.bind(response);\n }\n return binaryResponse;\n}\n\n// core/fetcher/getResponseBody.ts\nasync function getResponseBody(response, responseType) {\n switch (responseType) {\n case \"binary-response\":\n return getBinaryResponse(response);\n case \"blob\":\n return await response.blob();\n case \"arrayBuffer\":\n return await response.arrayBuffer();\n case \"sse\":\n if (response.body == null) {\n return {\n ok: false,\n error: {\n reason: \"body-is-null\",\n statusCode: response.status\n }\n };\n }\n return response.body;\n case \"streaming\":\n if (response.body == null) {\n return {\n ok: false,\n error: {\n reason: \"body-is-null\",\n statusCode: response.status\n }\n };\n }\n return response.body;\n case \"text\":\n return await response.text();\n }\n const text = await response.text();\n if (text.length > 0) {\n try {\n const responseBody = fromJson(text);\n return responseBody;\n } catch (_err) {\n return {\n ok: false,\n error: {\n reason: \"non-json\",\n statusCode: response.status,\n rawBody: text\n }\n };\n }\n }\n return void 0;\n}\n\n// core/fetcher/getErrorResponseBody.ts\nasync function getErrorResponseBody(response) {\n let contentType = response.headers.get(\"Content-Type\")?.toLowerCase();\n if (contentType == null || contentType.length === 0) {\n return getResponseBody(response);\n }\n if (contentType.indexOf(\";\") !== -1) {\n contentType = contentType.split(\";\")[0]?.trim() ?? \"\";\n }\n switch (contentType) {\n case \"application/hal+json\":\n case \"application/json\":\n case \"application/ld+json\":\n case \"application/problem+json\":\n case \"application/vnd.api+json\":\n case \"text/json\": {\n const text = await response.text();\n return text.length > 0 ? fromJson(text) : void 0;\n }\n default:\n if (contentType.startsWith(\"application/vnd.\") && contentType.endsWith(\"+json\")) {\n const text = await response.text();\n return text.length > 0 ? fromJson(text) : void 0;\n }\n return await response.text();\n }\n}\n\n// core/fetcher/getFetchFn.ts\nasync function getFetchFn() {\n return fetch;\n}\n\n// core/fetcher/getRequestBody.ts\nasync function getRequestBody({ body, type }) {\n if (type === \"form\") {\n return toQueryString(body, { arrayFormat: \"repeat\", encode: true });\n }\n if (type.includes(\"json\")) {\n return toJson(body);\n } else {\n return body;\n }\n}\n\n// core/fetcher/Headers.ts\nvar Headers2;\nif (typeof globalThis.Headers !== \"undefined\") {\n Headers2 = globalThis.Headers;\n} else {\n Headers2 = class Headers3 {\n constructor(init) {\n this.headers = /* @__PURE__ */ new Map();\n if (init) {\n if (init instanceof Headers3) {\n init.forEach((value, key) => this.append(key, value));\n } else if (Array.isArray(init)) {\n for (const [key, value] of init) {\n if (typeof key === \"string\" && typeof value === \"string\") {\n this.append(key, value);\n } else {\n throw new TypeError(\"Each header entry must be a [string, string] tuple\");\n }\n }\n } else {\n for (const [key, value] of Object.entries(init)) {\n if (typeof value === \"string\") {\n this.append(key, value);\n } else {\n throw new TypeError(\"Header values must be strings\");\n }\n }\n }\n }\n }\n append(name, value) {\n const key = name.toLowerCase();\n const existing = this.headers.get(key) || [];\n this.headers.set(key, [...existing, value]);\n }\n delete(name) {\n const key = name.toLowerCase();\n this.headers.delete(key);\n }\n get(name) {\n const key = name.toLowerCase();\n const values = this.headers.get(key);\n return values ? values.join(\", \") : null;\n }\n has(name) {\n const key = name.toLowerCase();\n return this.headers.has(key);\n }\n set(name, value) {\n const key = name.toLowerCase();\n this.headers.set(key, [value]);\n }\n forEach(callbackfn, thisArg) {\n const boundCallback = thisArg ? callbackfn.bind(thisArg) : callbackfn;\n this.headers.forEach((values, key) => boundCallback(values.join(\", \"), key, this));\n }\n getSetCookie() {\n return this.headers.get(\"set-cookie\") || [];\n }\n *entries() {\n for (const [key, values] of this.headers.entries()) {\n yield [key, values.join(\", \")];\n }\n }\n *keys() {\n yield* this.headers.keys();\n }\n *values() {\n for (const values of this.headers.values()) {\n yield values.join(\", \");\n }\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n };\n}\n\n// core/fetcher/signals.ts\nvar TIMEOUT = \"timeout\";\nfunction getTimeoutSignal(timeoutMs) {\n const controller = new AbortController();\n const abortId = setTimeout(() => controller.abort(TIMEOUT), timeoutMs);\n return { signal: controller.signal, abortId };\n}\nfunction anySignal(...args) {\n const signals = args.length === 1 && Array.isArray(args[0]) ? args[0] : args;\n const controller = new AbortController();\n for (const signal of signals) {\n if (signal.aborted) {\n controller.abort(signal?.reason);\n break;\n }\n signal.addEventListener(\"abort\", () => controller.abort(signal?.reason), {\n signal: controller.signal\n });\n }\n return controller.signal;\n}\n\n// core/fetcher/makeRequest.ts\nvar _cacheNoStoreSupported;\nfunction isCacheNoStoreSupported() {\n if (_cacheNoStoreSupported != null) {\n return _cacheNoStoreSupported;\n }\n try {\n new Request(\"http://localhost\", { cache: \"no-store\" });\n _cacheNoStoreSupported = true;\n } catch {\n _cacheNoStoreSupported = false;\n }\n return _cacheNoStoreSupported;\n}\nvar makeRequest = async (fetchFn, url, method, headers, requestBody, timeoutMs, abortSignal, withCredentials, duplex, disableCache) => {\n const signals = [];\n let timeoutAbortId;\n if (timeoutMs != null) {\n const { signal, abortId } = getTimeoutSignal(timeoutMs);\n timeoutAbortId = abortId;\n signals.push(signal);\n }\n if (abortSignal != null) {\n signals.push(abortSignal);\n }\n const newSignals = anySignal(signals);\n const response = await fetchFn(url, {\n method,\n headers,\n body: requestBody,\n signal: newSignals,\n credentials: withCredentials ? \"include\" : void 0,\n // @ts-ignore\n duplex,\n ...disableCache && isCacheNoStoreSupported() ? { cache: \"no-store\" } : {}\n });\n if (timeoutAbortId != null) {\n clearTimeout(timeoutAbortId);\n }\n return response;\n};\n\n// core/fetcher/RawResponse.ts\nvar abortRawResponse = {\n headers: new Headers2(),\n redirected: false,\n status: 499,\n statusText: \"Client Closed Request\",\n type: \"error\",\n url: \"\"\n};\nvar unknownRawResponse = {\n headers: new Headers2(),\n redirected: false,\n status: 0,\n statusText: \"Unknown Error\",\n type: \"error\",\n url: \"\"\n};\nfunction toRawResponse(response) {\n return {\n headers: response.headers,\n redirected: response.redirected,\n status: response.status,\n statusText: response.statusText,\n type: response.type,\n url: response.url\n };\n}\n\n// core/fetcher/requestWithRetries.ts\nvar INITIAL_RETRY_DELAY = 1e3;\nvar MAX_RETRY_DELAY = 6e4;\nvar DEFAULT_MAX_RETRIES = 2;\nvar JITTER_FACTOR = 0.2;\nfunction isRetryableStatusCode(statusCode) {\n return [408, 429].includes(statusCode) || statusCode >= 500;\n}\nfunction addPositiveJitter(delay) {\n const jitterMultiplier = 1 + Math.random() * JITTER_FACTOR;\n return delay * jitterMultiplier;\n}\nfunction addSymmetricJitter(delay) {\n const jitterMultiplier = 1 + (Math.random() - 0.5) * JITTER_FACTOR;\n return delay * jitterMultiplier;\n}\nfunction getRetryDelayFromHeaders(response, retryAttempt) {\n const retryAfter = response.headers.get(\"Retry-After\");\n if (retryAfter) {\n const retryAfterSeconds = parseInt(retryAfter, 10);\n if (!Number.isNaN(retryAfterSeconds) && retryAfterSeconds > 0) {\n return Math.min(retryAfterSeconds * 1e3, MAX_RETRY_DELAY);\n }\n const retryAfterDate = new Date(retryAfter);\n if (!Number.isNaN(retryAfterDate.getTime())) {\n const delay = retryAfterDate.getTime() - Date.now();\n if (delay > 0) {\n return Math.min(Math.max(delay, 0), MAX_RETRY_DELAY);\n }\n }\n }\n const rateLimitReset = response.headers.get(\"X-RateLimit-Reset\");\n if (rateLimitReset) {\n const resetTime = parseInt(rateLimitReset, 10);\n if (!Number.isNaN(resetTime)) {\n const delay = resetTime * 1e3 - Date.now();\n if (delay > 0) {\n return addPositiveJitter(Math.min(delay, MAX_RETRY_DELAY));\n }\n }\n }\n return addSymmetricJitter(Math.min(INITIAL_RETRY_DELAY * 2 ** retryAttempt, MAX_RETRY_DELAY));\n}\nasync function requestWithRetries(requestFn, maxRetries = DEFAULT_MAX_RETRIES) {\n let response = await requestFn();\n for (let i = 0; i < maxRetries; ++i) {\n if (isRetryableStatusCode(response.status)) {\n const delay = getRetryDelayFromHeaders(response, i);\n await new Promise((resolve) => setTimeout(resolve, delay));\n response = await requestFn();\n } else {\n break;\n }\n }\n return response;\n}\n\n// core/fetcher/Fetcher.ts\nvar SENSITIVE_HEADERS = /* @__PURE__ */ new Set([\n \"authorization\",\n \"www-authenticate\",\n \"x-api-key\",\n \"api-key\",\n \"apikey\",\n \"x-api-token\",\n \"x-auth-token\",\n \"auth-token\",\n \"cookie\",\n \"set-cookie\",\n \"proxy-authorization\",\n \"proxy-authenticate\",\n \"x-csrf-token\",\n \"x-xsrf-token\",\n \"x-session-token\",\n \"x-access-token\"\n]);\nfunction redactHeaders(headers) {\n const filtered = {};\n for (const [key, value] of headers instanceof Headers2 ? headers.entries() : Object.entries(headers)) {\n if (SENSITIVE_HEADERS.has(key.toLowerCase())) {\n filtered[key] = \"[REDACTED]\";\n } else {\n filtered[key] = value;\n }\n }\n return filtered;\n}\nvar SENSITIVE_QUERY_PARAMS = /* @__PURE__ */ new Set([\n \"api_key\",\n \"api-key\",\n \"apikey\",\n \"token\",\n \"access_token\",\n \"access-token\",\n \"auth_token\",\n \"auth-token\",\n \"password\",\n \"passwd\",\n \"secret\",\n \"api_secret\",\n \"api-secret\",\n \"apisecret\",\n \"key\",\n \"session\",\n \"session_id\",\n \"session-id\"\n]);\nfunction redactQueryParameters(queryParameters) {\n if (queryParameters == null) {\n return void 0;\n }\n const redacted = {};\n for (const [key, value] of Object.entries(queryParameters)) {\n redacted[key] = SENSITIVE_QUERY_PARAMS.has(key.toLowerCase()) ? \"[REDACTED]\" : value;\n }\n return redacted;\n}\nfunction redactUrl(url) {\n const protocolIndex = url.indexOf(\"://\");\n if (protocolIndex === -1) return url;\n const afterProtocol = protocolIndex + 3;\n const pathStart = url.indexOf(\"/\", afterProtocol);\n let queryStart = url.indexOf(\"?\", afterProtocol);\n let fragmentStart = url.indexOf(\"#\", afterProtocol);\n const firstDelimiter = Math.min(\n pathStart === -1 ? url.length : pathStart,\n queryStart === -1 ? url.length : queryStart,\n fragmentStart === -1 ? url.length : fragmentStart\n );\n let atIndex = -1;\n for (let i = afterProtocol; i < firstDelimiter; i++) {\n if (url[i] === \"@\") {\n atIndex = i;\n }\n }\n if (atIndex !== -1) {\n url = `${url.slice(0, afterProtocol)}[REDACTED]@${url.slice(atIndex + 1)}`;\n }\n queryStart = url.indexOf(\"?\");\n if (queryStart === -1) return url;\n fragmentStart = url.indexOf(\"#\", queryStart);\n const queryEnd = fragmentStart !== -1 ? fragmentStart : url.length;\n const queryString = url.slice(queryStart + 1, queryEnd);\n if (queryString.length === 0) return url;\n const lower = queryString.toLowerCase();\n const hasSensitive = lower.includes(\"token\") || lower.includes(\"key\") || lower.includes(\"password\") || lower.includes(\"passwd\") || lower.includes(\"secret\") || lower.includes(\"session\") || lower.includes(\"auth\");\n if (!hasSensitive) {\n return url;\n }\n const redactedParams = [];\n const params = queryString.split(\"&\");\n for (const param of params) {\n const equalIndex = param.indexOf(\"=\");\n if (equalIndex === -1) {\n redactedParams.push(param);\n continue;\n }\n const key = param.slice(0, equalIndex);\n let shouldRedact = SENSITIVE_QUERY_PARAMS.has(key.toLowerCase());\n if (!shouldRedact && key.includes(\"%\")) {\n try {\n const decodedKey = decodeURIComponent(key);\n shouldRedact = SENSITIVE_QUERY_PARAMS.has(decodedKey.toLowerCase());\n } catch {\n }\n }\n redactedParams.push(shouldRedact ? `${key}=[REDACTED]` : param);\n }\n return url.slice(0, queryStart + 1) + redactedParams.join(\"&\") + url.slice(queryEnd);\n}\nasync function getHeaders(args) {\n const newHeaders = new Headers2();\n newHeaders.set(\n \"Accept\",\n args.responseType === \"json\" ? \"application/json\" : args.responseType === \"text\" ? \"text/plain\" : args.responseType === \"sse\" ? \"text/event-stream\" : \"*/*\"\n );\n if (args.body !== void 0 && args.contentType != null) {\n newHeaders.set(\"Content-Type\", args.contentType);\n }\n if (args.headers == null) {\n return newHeaders;\n }\n for (const [key, value] of Object.entries(args.headers)) {\n const result = await EndpointSupplier.get(value, { endpointMetadata: args.endpointMetadata ?? {} });\n if (typeof result === \"string\") {\n newHeaders.set(key, result);\n continue;\n }\n if (result == null) {\n continue;\n }\n newHeaders.set(key, `${result}`);\n }\n return newHeaders;\n}\nasync function fetcherImpl(args) {\n let url = args.url;\n if (args.queryString != null && args.queryString.length > 0) {\n url = `${url}?${args.queryString}`;\n } else {\n url = createRequestUrl(args.url, args.queryParameters);\n }\n const requestBody = await getRequestBody({\n body: args.body,\n type: args.requestType ?? \"other\"\n });\n const fetchFn = args.fetchFn ?? await getFetchFn();\n const headers = await getHeaders(args);\n const logger = createLogger(args.logging);\n if (logger.isDebug()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n headers: redactHeaders(headers),\n queryParameters: redactQueryParameters(args.queryParameters),\n hasBody: requestBody != null\n };\n logger.debug(\"Making HTTP request\", metadata);\n }\n try {\n const response = await requestWithRetries(\n async () => makeRequest(\n fetchFn,\n url,\n args.method,\n headers,\n requestBody,\n args.timeoutMs,\n args.abortSignal,\n args.withCredentials,\n args.duplex,\n args.responseType === \"streaming\" || args.responseType === \"sse\"\n ),\n args.maxRetries\n );\n if (response.status >= 200 && response.status < 400) {\n if (logger.isDebug()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n statusCode: response.status,\n responseHeaders: redactHeaders(response.headers)\n };\n logger.debug(\"HTTP request succeeded\", metadata);\n }\n const body = await getResponseBody(response, args.responseType);\n return {\n ok: true,\n body,\n headers: response.headers,\n rawResponse: toRawResponse(response)\n };\n } else {\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n statusCode: response.status,\n responseHeaders: redactHeaders(Object.fromEntries(response.headers.entries()))\n };\n logger.error(\"HTTP request failed with error status\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"status-code\",\n statusCode: response.status,\n body: await getErrorResponseBody(response)\n },\n rawResponse: toRawResponse(response)\n };\n }\n } catch (error) {\n if (args.abortSignal?.aborted) {\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url)\n };\n logger.error(\"HTTP request was aborted\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"unknown\",\n errorMessage: \"The user aborted a request\",\n cause: error\n },\n rawResponse: abortRawResponse\n };\n } else if (error instanceof Error && error.name === \"AbortError\") {\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n timeoutMs: args.timeoutMs\n };\n logger.error(\"HTTP request timed out\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"timeout\",\n cause: error\n },\n rawResponse: abortRawResponse\n };\n } else if (error instanceof Error) {\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n errorMessage: error.message\n };\n logger.error(\"HTTP request failed with error\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"unknown\",\n errorMessage: error.message,\n cause: error\n },\n rawResponse: unknownRawResponse\n };\n }\n if (logger.isError()) {\n const metadata = {\n method: args.method,\n url: redactUrl(url),\n error: toJson(error)\n };\n logger.error(\"HTTP request failed with unknown error\", metadata);\n }\n return {\n ok: false,\n error: {\n reason: \"unknown\",\n errorMessage: toJson(error),\n cause: error\n },\n rawResponse: unknownRawResponse\n };\n }\n}\nvar fetcher = fetcherImpl;\n\n// core/fetcher/HttpResponsePromise.ts\nvar HttpResponsePromise = class _HttpResponsePromise extends Promise {\n constructor(promise) {\n super((resolve) => {\n resolve(void 0);\n });\n this.innerPromise = promise;\n }\n /**\n * Creates an `HttpResponsePromise` from a function that returns a promise.\n *\n * @param fn - A function that returns a promise resolving to a `WithRawResponse` object.\n * @param args - Arguments to pass to the function.\n * @returns An `HttpResponsePromise` instance.\n */\n static fromFunction(fn, ...args) {\n return new _HttpResponsePromise(fn(...args));\n }\n /**\n * Creates a function that returns an `HttpResponsePromise` from a function that returns a promise.\n *\n * @param fn - A function that returns a promise resolving to a `WithRawResponse` object.\n * @returns A function that returns an `HttpResponsePromise` instance.\n */\n static interceptFunction(fn) {\n return (...args) => {\n return _HttpResponsePromise.fromPromise(fn(...args));\n };\n }\n /**\n * Creates an `HttpResponsePromise` from an existing promise.\n *\n * @param promise - A promise resolving to a `WithRawResponse` object.\n * @returns An `HttpResponsePromise` instance.\n */\n static fromPromise(promise) {\n return new _HttpResponsePromise(promise);\n }\n /**\n * Creates an `HttpResponsePromise` from an executor function.\n *\n * @param executor - A function that takes resolve and reject callbacks to create a promise.\n * @returns An `HttpResponsePromise` instance.\n */\n static fromExecutor(executor) {\n const promise = new Promise(executor);\n return new _HttpResponsePromise(promise);\n }\n /**\n * Creates an `HttpResponsePromise` from a resolved result.\n *\n * @param result - A `WithRawResponse` object to resolve immediately.\n * @returns An `HttpResponsePromise` instance.\n */\n static fromResult(result) {\n const promise = Promise.resolve(result);\n return new _HttpResponsePromise(promise);\n }\n unwrap() {\n if (!this.unwrappedPromise) {\n this.unwrappedPromise = this.innerPromise.then(({ data }) => data);\n }\n return this.unwrappedPromise;\n }\n /** @inheritdoc */\n then(onfulfilled, onrejected) {\n return this.unwrap().then(onfulfilled, onrejected);\n }\n /** @inheritdoc */\n catch(onrejected) {\n return this.unwrap().catch(onrejected);\n }\n /** @inheritdoc */\n finally(onfinally) {\n return this.unwrap().finally(onfinally);\n }\n /**\n * Retrieves the data and raw response.\n *\n * @returns A promise resolving to a `WithRawResponse` object.\n */\n async withRawResponse() {\n return await this.innerPromise;\n }\n};\n\n// core/url/join.ts\nfunction join(base, ...segments) {\n if (!base) {\n return \"\";\n }\n if (segments.length === 0) {\n return base;\n }\n if (base.includes(\"://\")) {\n let url;\n try {\n url = new URL(base);\n } catch {\n return joinPath(base, ...segments);\n }\n const lastSegment = segments[segments.length - 1];\n const shouldPreserveTrailingSlash = lastSegment?.endsWith(\"/\");\n for (const segment of segments) {\n const cleanSegment = trimSlashes(segment);\n if (cleanSegment) {\n url.pathname = joinPathSegments(url.pathname, cleanSegment);\n }\n }\n if (shouldPreserveTrailingSlash && !url.pathname.endsWith(\"/\")) {\n url.pathname += \"/\";\n }\n return url.toString();\n }\n return joinPath(base, ...segments);\n}\nfunction joinPath(base, ...segments) {\n if (segments.length === 0) {\n return base;\n }\n let result = base;\n const lastSegment = segments[segments.length - 1];\n const shouldPreserveTrailingSlash = lastSegment?.endsWith(\"/\");\n for (const segment of segments) {\n const cleanSegment = trimSlashes(segment);\n if (cleanSegment) {\n result = joinPathSegments(result, cleanSegment);\n }\n }\n if (shouldPreserveTrailingSlash && !result.endsWith(\"/\")) {\n result += \"/\";\n }\n return result;\n}\nfunction joinPathSegments(left, right) {\n if (left.endsWith(\"/\")) {\n return left + right;\n }\n return `${left}/${right}`;\n}\nfunction trimSlashes(str) {\n if (!str) return str;\n let start = 0;\n let end = str.length;\n if (str.startsWith(\"/\")) start = 1;\n if (str.endsWith(\"/\")) end = str.length - 1;\n return start === 0 && end === str.length ? str : str.slice(start, end);\n}\n\n// core/fetcher/Supplier.ts\nvar Supplier = {\n get: async (supplier) => {\n if (typeof supplier === \"function\") {\n return supplier();\n } else {\n return supplier;\n }\n }\n};\n\n// core/fetcher/makePassthroughRequest.ts\nasync function makePassthroughRequest(input, init, clientOptions, requestOptions) {\n const logger = createLogger(clientOptions.logging);\n let url;\n let effectiveInit = init;\n if (input instanceof Request) {\n url = input.url;\n if (init == null) {\n effectiveInit = {\n method: input.method,\n headers: Object.fromEntries(input.headers.entries()),\n body: input.body,\n signal: input.signal,\n credentials: input.credentials,\n cache: input.cache,\n redirect: input.redirect,\n referrer: input.referrer,\n integrity: input.integrity,\n mode: input.mode\n };\n }\n } else {\n url = input instanceof URL ? input.toString() : input;\n }\n const baseUrl = (clientOptions.baseUrl != null ? await Supplier.get(clientOptions.baseUrl) : void 0) ?? (clientOptions.environment != null ? await Supplier.get(clientOptions.environment) : void 0);\n let fullUrl;\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n fullUrl = url;\n } else if (baseUrl != null) {\n fullUrl = join(baseUrl, url);\n } else {\n fullUrl = url;\n }\n const mergedHeaders = {};\n if (clientOptions.headers != null) {\n for (const [key, value] of Object.entries(clientOptions.headers)) {\n const resolved = await EndpointSupplier.get(value, { endpointMetadata: {} });\n if (resolved != null) {\n mergedHeaders[key.toLowerCase()] = `${resolved}`;\n }\n }\n }\n if (clientOptions.getAuthHeaders != null) {\n const authHeaders = await clientOptions.getAuthHeaders();\n for (const [key, value] of Object.entries(authHeaders)) {\n mergedHeaders[key.toLowerCase()] = value;\n }\n }\n if (effectiveInit?.headers != null) {\n const initHeaders = effectiveInit.headers instanceof Headers ? Object.fromEntries(effectiveInit.headers.entries()) : Array.isArray(effectiveInit.headers) ? Object.fromEntries(effectiveInit.headers) : effectiveInit.headers;\n for (const [key, value] of Object.entries(initHeaders)) {\n if (value != null) {\n mergedHeaders[key.toLowerCase()] = value;\n }\n }\n }\n if (requestOptions?.headers != null) {\n for (const [key, value] of Object.entries(requestOptions.headers)) {\n mergedHeaders[key.toLowerCase()] = value;\n }\n }\n const method = effectiveInit?.method ?? \"GET\";\n const body = effectiveInit?.body;\n const timeoutInSeconds = requestOptions?.timeoutInSeconds ?? clientOptions.timeoutInSeconds;\n const timeoutMs = timeoutInSeconds != null ? timeoutInSeconds * 1e3 : void 0;\n const maxRetries = requestOptions?.maxRetries ?? clientOptions.maxRetries;\n const abortSignal = requestOptions?.abortSignal ?? effectiveInit?.signal ?? void 0;\n const fetchFn = clientOptions.fetch ?? await getFetchFn();\n if (logger.isDebug()) {\n logger.debug(\"Making passthrough HTTP request\", {\n method,\n url: fullUrl,\n hasBody: body != null\n });\n }\n const response = await requestWithRetries(\n async () => makeRequest(\n fetchFn,\n fullUrl,\n method,\n mergedHeaders,\n body ?? void 0,\n timeoutMs,\n abortSignal,\n effectiveInit?.credentials === \"include\",\n void 0,\n // duplex\n false\n // disableCache\n ),\n maxRetries\n );\n if (logger.isDebug()) {\n logger.debug(\"Passthrough HTTP request completed\", {\n method,\n url: fullUrl,\n statusCode: response.status\n });\n }\n return response;\n}\n\n// core/logging/index.ts\nvar logging_exports = {};\n__export(logging_exports, {\n ConsoleLogger: () => ConsoleLogger,\n LogLevel: () => LogLevel,\n Logger: () => Logger,\n createLogger: () => createLogger\n});\n\n// core/runtime/runtime.ts\nvar RUNTIME = evaluateRuntime();\nfunction evaluateRuntime() {\n const isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n if (isBrowser) {\n return {\n type: \"browser\",\n version: window.navigator.userAgent\n };\n }\n const isCloudflare = typeof globalThis !== \"undefined\" && globalThis?.navigator?.userAgent === \"Cloudflare-Workers\";\n if (isCloudflare) {\n return {\n type: \"workerd\"\n };\n }\n const isEdgeRuntime = typeof EdgeRuntime === \"string\";\n if (isEdgeRuntime) {\n return {\n type: \"edge-runtime\"\n };\n }\n const isWebWorker = typeof self === \"object\" && typeof self?.importScripts === \"function\" && (self.constructor?.name === \"DedicatedWorkerGlobalScope\" || self.constructor?.name === \"ServiceWorkerGlobalScope\" || self.constructor?.name === \"SharedWorkerGlobalScope\");\n if (isWebWorker) {\n return {\n type: \"web-worker\"\n };\n }\n const isDeno = typeof Deno !== \"undefined\" && typeof Deno.version !== \"undefined\" && typeof Deno.version.deno !== \"undefined\";\n if (isDeno) {\n return {\n type: \"deno\",\n version: Deno.version.deno\n };\n }\n const isBun = typeof Bun !== \"undefined\" && typeof Bun.version !== \"undefined\";\n if (isBun) {\n return {\n type: \"bun\",\n version: Bun.version\n };\n }\n const isReactNative = typeof navigator !== \"undefined\" && navigator?.product === \"ReactNative\";\n if (isReactNative) {\n return {\n type: \"react-native\"\n };\n }\n const _process = typeof process !== \"undefined\" ? process : void 0;\n const isNode = typeof _process !== \"undefined\" && typeof _process.versions?.node === \"string\";\n if (isNode) {\n return {\n type: \"node\",\n version: _process.versions.node,\n parsedVersion: Number(_process.versions.node.split(\".\")[0])\n };\n }\n return {\n type: \"unknown\"\n };\n}\n\n// core/stream/Stream.ts\nvar DATA_PREFIX = \"data:\";\nvar EVENT_PREFIX = \"event:\";\nvar Stream = class {\n constructor({ stream, parse, eventShape, signal }) {\n this.controller = new AbortController();\n this.stream = stream;\n this.parse = parse;\n if (eventShape.type === \"sse\") {\n this.prefix = DATA_PREFIX;\n this.messageTerminator = \"\\n\";\n this.streamTerminator = eventShape.streamTerminator;\n this.eventDiscriminator = eventShape.eventDiscriminator;\n } else {\n this.messageTerminator = eventShape.messageTerminator;\n }\n signal?.addEventListener(\"abort\", () => this.controller.abort());\n if (typeof TextDecoder !== \"undefined\") {\n this.decoder = new TextDecoder(\"utf-8\");\n }\n }\n async *iterMessages() {\n if (this.eventDiscriminator != null) {\n yield* this.iterSseEvents();\n } else {\n yield* this.iterDataMessages();\n }\n }\n async *iterDataMessages() {\n const stream = readableStreamAsyncIterable(this.stream);\n let buf = \"\";\n let prefixSeen = false;\n for await (const chunk of stream) {\n buf += this.decodeChunk(chunk);\n let terminatorIndex;\n while ((terminatorIndex = buf.indexOf(this.messageTerminator)) >= 0) {\n let line = buf.slice(0, terminatorIndex);\n buf = buf.slice(terminatorIndex + this.messageTerminator.length);\n if (!line.trim()) {\n continue;\n }\n if (!prefixSeen && this.prefix != null) {\n const prefixIndex = line.indexOf(this.prefix);\n if (prefixIndex === -1) {\n continue;\n }\n prefixSeen = true;\n line = line.slice(prefixIndex + this.prefix.length);\n }\n if (this.streamTerminator != null && line.includes(this.streamTerminator)) {\n return;\n }\n const message = await this.parse(fromJson(line));\n yield message;\n prefixSeen = false;\n }\n }\n }\n async *iterSseEvents() {\n const stream = readableStreamAsyncIterable(this.stream);\n let buf = \"\";\n let eventType;\n let dataValue;\n for await (const chunk of stream) {\n buf += this.decodeChunk(chunk);\n let terminatorIndex;\n while ((terminatorIndex = buf.indexOf(\"\\n\")) >= 0) {\n const line = buf.slice(0, terminatorIndex).replace(/\\r$/, \"\");\n buf = buf.slice(terminatorIndex + 1);\n if (!line.trim()) {\n if (dataValue != null) {\n const message = await this.dispatchSseEvent(dataValue, eventType);\n if (message == null) {\n return;\n }\n yield message;\n }\n eventType = void 0;\n dataValue = void 0;\n continue;\n }\n if (line.startsWith(EVENT_PREFIX)) {\n eventType = line.slice(EVENT_PREFIX.length).trim();\n } else if (line.startsWith(DATA_PREFIX)) {\n const val = line.slice(DATA_PREFIX.length).trim();\n dataValue = dataValue != null ? `${dataValue}\n${val}` : val;\n }\n }\n }\n if (dataValue != null) {\n const message = await this.dispatchSseEvent(dataValue, eventType);\n if (message != null) {\n yield message;\n }\n }\n }\n /**\n * Parses and returns a single SSE event, or returns null if the event is a stream terminator.\n */\n async dispatchSseEvent(dataValue, eventType) {\n if (this.streamTerminator != null && dataValue.includes(this.streamTerminator)) {\n return null;\n }\n return this.parse(this.injectDiscriminator(fromJson(dataValue), eventType));\n }\n injectDiscriminator(parsed, eventType) {\n if (this.eventDiscriminator == null || eventType == null) {\n return parsed;\n }\n if (parsed == null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return parsed;\n }\n const obj = parsed;\n if (this.eventDiscriminator in obj) {\n return parsed;\n }\n return { [this.eventDiscriminator]: eventType, ...obj };\n }\n async *[Symbol.asyncIterator]() {\n for await (const message of this.iterMessages()) {\n yield message;\n }\n }\n decodeChunk(chunk) {\n let decoded = \"\";\n if (this.decoder != null) {\n decoded += this.decoder.decode(chunk, { stream: true });\n } else if (RUNTIME.type === \"node\" && typeof chunk !== \"undefined\") {\n decoded += Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n }\n return decoded;\n }\n};\nfunction readableStreamAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator]) {\n return stream;\n }\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done) {\n reader.releaseLock();\n }\n return result;\n } catch (e) {\n reader.releaseLock();\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: void 0 };\n },\n [Symbol.asyncIterator]() {\n return this;\n }\n };\n}\n\n// core/url/index.ts\nvar url_exports = {};\n__export(url_exports, {\n encodePathParam: () => encodePathParam,\n join: () => join,\n queryBuilder: () => queryBuilder,\n toQueryString: () => toQueryString\n});\n\n// core/url/encodePathParam.ts\nfunction encodePathParam(param) {\n if (param === null) {\n return \"null\";\n }\n const typeofParam = typeof param;\n switch (typeofParam) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n case \"number\":\n case \"boolean\":\n break;\n default:\n param = String(param);\n break;\n }\n return encodeURIComponent(param);\n}\n\n// core/url/QueryStringBuilder.ts\nfunction queryBuilder() {\n return new QueryStringBuilder();\n}\nvar QueryStringBuilder = class {\n constructor() {\n this.parts = /* @__PURE__ */ new Map();\n }\n /**\n * Adds a query parameter, serializing it immediately.\n *\n * By default arrays use \"repeat\" format (`key=a&key=b`).\n * Pass `{ style: \"comma\" }` for OpenAPI `explode: false` parameters\n * to get comma-separated values (`key=a,b,c`).\n *\n * Null / undefined values are silently skipped.\n */\n add(key, value, options) {\n if (value === void 0 || value === null) {\n return this;\n }\n const serialized = toQueryString(\n { [key]: value },\n { arrayFormat: options?.style === \"comma\" ? \"comma\" : \"repeat\" }\n );\n if (serialized.length > 0) {\n this.parts.set(key, serialized);\n }\n return this;\n }\n /**\n * Adds multiple query parameters at once from a record.\n * All parameters use the default \"repeat\" array format.\n * Null / undefined values are silently skipped.\n */\n addMany(params) {\n if (params != null) {\n for (const [key, value] of Object.entries(params)) {\n this.add(key, value);\n }\n }\n return this;\n }\n /**\n * Merges additional query parameters supplied at call-time via\n * `requestOptions.queryParams`. Overrides existing keys (last-write-wins).\n */\n mergeAdditional(additionalParams) {\n if (additionalParams != null) {\n for (const [key, value] of Object.entries(additionalParams)) {\n if (value === void 0 || value === null) {\n continue;\n }\n const serialized = toQueryString({ [key]: value }, { arrayFormat: \"repeat\" });\n if (serialized.length > 0) {\n this.parts.set(key, serialized);\n }\n }\n }\n return this;\n }\n /**\n * Returns the assembled query string (without the leading `?`).\n * Returns an empty string when no parameters were added.\n */\n build() {\n return [...this.parts.values()].join(\"&\");\n }\n};\n\n// auth/BearerAuthProvider.ts\nvar TOKEN_PARAM = \"token\";\nvar BearerAuthProvider = class _BearerAuthProvider {\n constructor(options) {\n this.options = options;\n }\n static canCreate(options) {\n return options?.[TOKEN_PARAM] != null;\n }\n async getAuthRequest({\n endpointMetadata\n } = {}) {\n const token = await Supplier.get(this.options[TOKEN_PARAM]);\n if (token == null) {\n throw new VectrosError({\n message: _BearerAuthProvider.AUTH_CONFIG_ERROR_MESSAGE\n });\n }\n return {\n headers: { Authorization: `Bearer ${token}` }\n };\n }\n};\n((BearerAuthProvider2) => {\n BearerAuthProvider2.AUTH_SCHEME = \"BearerAuth\";\n BearerAuthProvider2.AUTH_CONFIG_ERROR_MESSAGE = `Please provide '${TOKEN_PARAM}' when initializing the client`;\n function createInstance(options) {\n return new BearerAuthProvider2(options);\n }\n BearerAuthProvider2.createInstance = createInstance;\n})(BearerAuthProvider || (BearerAuthProvider = {}));\n\n// core/headers.ts\nfunction mergeHeaders(...headersArray) {\n const result = {};\n for (const [key, value] of headersArray.filter((headers) => headers != null).flatMap((headers) => Object.entries(headers))) {\n const insensitiveKey = key.toLowerCase();\n if (value != null) {\n result[insensitiveKey] = value;\n } else if (insensitiveKey in result) {\n delete result[insensitiveKey];\n }\n }\n return result;\n}\n\n// BaseClient.ts\nfunction normalizeClientOptions(options) {\n const headers = mergeHeaders(\n {\n \"X-Fern-Language\": \"JavaScript\",\n \"X-Fern-Runtime\": RUNTIME.type,\n \"X-Fern-Runtime-Version\": RUNTIME.version\n },\n options?.headers\n );\n return {\n ...options,\n logging: logging_exports.createLogger(options?.logging),\n headers\n };\n}\nfunction normalizeClientOptionsWithAuth(options) {\n const normalized = normalizeClientOptions(options);\n if (options.auth === false) {\n normalized.authProvider = new NoOpAuthProvider();\n return normalized;\n }\n if (options.auth != null) {\n if (typeof options.auth === \"function\") {\n normalized.authProvider = { getAuthRequest: options.auth };\n return normalized;\n }\n if (isAuthProvider(options.auth)) {\n normalized.authProvider = options.auth;\n return normalized;\n }\n Object.assign(normalized, options.auth);\n }\n const normalizedWithNoOpAuthProvider = withNoOpAuthProvider(normalized);\n normalized.authProvider ?? (normalized.authProvider = new BearerAuthProvider(normalizedWithNoOpAuthProvider));\n return normalized;\n}\nfunction withNoOpAuthProvider(options) {\n return {\n ...options,\n authProvider: new NoOpAuthProvider()\n };\n}\n\n// errors/handleNonStatusCodeError.ts\nfunction handleNonStatusCodeError(error, rawResponse, method, path) {\n switch (error.reason) {\n case \"non-json\":\n throw new VectrosError({\n statusCode: error.statusCode,\n body: error.rawBody,\n rawResponse\n });\n case \"body-is-null\":\n throw new VectrosError({\n statusCode: error.statusCode,\n rawResponse\n });\n case \"timeout\":\n throw new VectrosTimeoutError(`Timeout exceeded when calling ${method} ${path}.`, {\n cause: error.cause\n });\n case \"unknown\":\n throw new VectrosError({\n message: error.errorMessage,\n rawResponse,\n cause: error.cause\n });\n default:\n throw new VectrosError({\n message: \"Unknown error\",\n rawResponse\n });\n }\n}\n\n// api/resources/auth/client/Client.ts\nvar AuthClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns the platform's JWT signing public key in RFC 7517 JWKS format. Use it with any JWKS-aware JWT library to verify `inv_*` invite tokens, `st_*` scoped tokens, and other platform-signed tokens locally, without calling back to the API for each verification. The response carries a one-hour `Cache-Control`, so cache it and re-fetch roughly hourly rather than on every verification. The `kid` value changes when the key rotates; re-fetch this document whenever you encounter a token signed with an unknown `kid`.\n *\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.InternalServerError}\n *\n * @example\n * await client.auth.getJwks()\n */\n getJwks(requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getJwks(requestOptions));\n }\n async __getJwks(requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/auth/jwks\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 500:\n throw new InternalServerError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/auth/jwks\");\n }\n /**\n * Returns a page of per-subject PHI read-access rows: who read which subject's PHI, when, against which record, and whether any sensitive value was actually revealed in plaintext. Metadata only — never the PHI itself. This is the disclosure-accounting surface from which a covered entity derives its HIPAA §164.528 accounting of disclosures. Provide at least one query axis: a subject (`subjectType` + `subjectId`, plus optional `clientId`) within a `contextId` for the primary accounting query; `resourceId` within a `contextId` for 'who read this record'; `callerKeyId` for 'what did this credential read' (account-wide forensic); or `contextId` alone to enumerate a whole context. `from`/`to` bound the time window. Results are scoped to your account, derived from your token — never from input. Requires the `access-log:r` scope.\n *\n * @param {Vectros.GetAccessLogRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.getAccessLog({\n * subjectType: \"user\",\n * subjectId: \"user_abc123\",\n * contextId: \"ctx_intake\",\n * clientId: \"client_xyz789\",\n * action: \"read\",\n * callerKeyId: \"key_abc123\",\n * resourceType: \"intake_form\",\n * resourceId: \"rec_456\"\n * })\n */\n getAccessLog(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAccessLog(request, requestOptions));\n }\n async __getAccessLog(request = {}, requestOptions) {\n const {\n subjectType,\n subjectId,\n contextId,\n clientId,\n from: from_,\n to,\n action,\n callerKeyId,\n resourceType,\n resourceId,\n revealedSensitive,\n startFrom,\n limit\n } = request;\n const _queryParams = {\n subjectType,\n subjectId,\n contextId,\n clientId,\n from: from_,\n to,\n action,\n callerKeyId,\n resourceType,\n resourceId,\n revealedSensitive,\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/access-log\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/access-log\");\n }\n /**\n * Lists all of your scoped API keys (`ssk_*`) across both your live and test environments. Revoked keys are excluded. Requires the `keys:r` scope.\n *\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.listScopedKeys()\n */\n listScopedKeys(requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listScopedKeys(requestOptions));\n }\n async __listScopedKeys(requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/keys/scoped\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/keys/scoped\");\n }\n /**\n * Creates a scoped API key (an `ssk_*` secret) that inherits its permissions from an existing access profile in your account. The call is idempotent on the combination of tenant, context, user, and key name: re-issuing the same request returns the existing key WITHOUT re-disclosing its raw secret. The raw key is returned ONLY in this response — store it securely, as it cannot be retrieved again. Requires the `keys:c` scope.\n *\n * @param {Vectros.CreateScopedKeyRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.createScopedKey({\n * keyName: \"research-bot production\",\n * tenantId: \"ten_live_xxx\",\n * contextId: \"myapp\",\n * userId: \"alice-001\"\n * })\n */\n createScopedKey(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createScopedKey(request, requestOptions));\n }\n async __createScopedKey(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/keys/scoped\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/admin/keys/scoped\");\n }\n /**\n * Returns the metadata for a single scoped API key. The raw secret is NOT included — it is only ever returned once, when the key is first created. Requires the `keys:r` scope.\n *\n * @param {Vectros.GetScopedKeyRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getScopedKey({\n * keyId: \"keyId\"\n * })\n */\n getScopedKey(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getScopedKey(request, requestOptions));\n }\n async __getScopedKey(request, requestOptions) {\n const { keyId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/admin/keys/scoped/${url_exports.encodePathParam(keyId)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/keys/scoped/{keyId}\");\n }\n /**\n * Revokes a scoped API key. Its status changes to `revoked` and it stops working within about 5 minutes, the maximum time authorization is cached. Revocation is permanent. Requires the `keys:d` scope.\n *\n * @param {Vectros.RevokeScopedKeyRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.revokeScopedKey({\n * keyId: \"keyId\"\n * })\n */\n revokeScopedKey(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__revokeScopedKey(request, requestOptions));\n }\n async __revokeScopedKey(request, requestOptions) {\n const { keyId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/admin/keys/scoped/${url_exports.encodePathParam(keyId)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"DELETE\",\n \"/v1/admin/keys/scoped/{keyId}\"\n );\n }\n /**\n * Returns recent API call logs for your account. Each entry represents one API request; request and response bodies are never logged. `startTime` and `endTime` must be ISO-8601 UTC (e.g. `2025-01-15T09:00:00Z`); `endTime` defaults to now. Filter by resource, method, key id, or context id, or set `errorsOnly` to see only failures. Results are scoped to your account, derived from your token — never from input. Requires the `logs:r` scope.\n *\n * @param {Vectros.GetAdminLogsRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.getAdminLogs({\n * startTime: \"startTime\",\n * resource: \"documents\",\n * method: \"POST\",\n * keyId: \"key_abc123\",\n * contextId: \"ctx_intake\"\n * })\n */\n getAdminLogs(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAdminLogs(request, requestOptions));\n }\n async __getAdminLogs(request, requestOptions) {\n const { startTime, endTime, resource, method, keyId, contextId, errorsOnly, limit } = request;\n const _queryParams = {\n startTime,\n endTime,\n resource,\n method,\n keyId,\n contextId,\n errorsOnly,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/logs\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/logs\");\n }\n /**\n * Returns the access profiles assigned within the given app context — in effect, who has access to this context and with what scopes. Each profile binds a principal to either a set of inline scopes or a referenced role. Results are paginated. Requires the `profiles:r` scope.\n *\n * @param {Vectros.ListAccessProfilesRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.listAccessProfiles({\n * contextId: \"myapp\"\n * })\n */\n listAccessProfiles(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listAccessProfiles(request, requestOptions));\n }\n async __listAccessProfiles(request, requestOptions) {\n const { contextId, startFrom, limit } = request;\n const _queryParams = {\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/profiles\"\n );\n }\n /**\n * Creates a new access profile under the given app context. This call is idempotent by `principalId`: if a profile with the same `principalId` already exists, the existing profile is returned (with status 200) instead of creating a duplicate. You must provide exactly one of `scopes` (an inline list of scopes) or `roleId` (a reference to a role); supplying both, or neither, is rejected. `identityOverrides` may set only `orgId` and `clientId`; any other key (including the account identifier or `userId`) is rejected. If you use a scoped credential, the profile's effective scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:c` scope.\n *\n * @param {Vectros.CreateAccessProfileRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.createAccessProfile({\n * contextId: \"contextId\",\n * body: {\n * principalId: \"usr_6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * }\n * })\n */\n createAccessProfile(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createAccessProfile(request, requestOptions));\n }\n async __createAccessProfile(request, requestOptions) {\n const { contextId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles`\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"POST\",\n \"/v1/app-contexts/{contextId}/profiles\"\n );\n }\n /**\n * Returns a paginated list of the app contexts in your account. Each app context is a namespace that groups the access profiles and roles for one of your applications. Requires the `app-contexts:r` scope.\n *\n * @param {Vectros.ListAppContextsRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.listAppContexts()\n */\n listAppContexts(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listAppContexts(request, requestOptions));\n }\n async __listAppContexts(request = {}, requestOptions) {\n const { startFrom, limit } = request;\n const _queryParams = {\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/app-contexts\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/app-contexts\");\n }\n /**\n * Creates a new app context. This call is idempotent by `contextId`: if an app context with the same `contextId` already exists, the existing app context is returned (with status 200) instead of creating a duplicate. The reserved `contextId` value `vectros-admin` cannot be created through this endpoint; it is provisioned automatically for your account. Requires the `app-contexts:c` scope.\n *\n * @param {Vectros.AppContextRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.createAppContext({\n * contextId: \"myapp\",\n * name: \"My Internal App\"\n * })\n */\n createAppContext(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createAppContext(request, requestOptions));\n }\n async __createAppContext(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/app-contexts\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/app-contexts\");\n }\n /**\n * Returns the roles defined under the given app context. A role is a reusable, named bundle of scopes that access profiles can reference instead of listing scopes inline. Results are paginated. Requires the `profiles:r` scope.\n *\n * @param {Vectros.ListRolesRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.listRoles({\n * contextId: \"myapp\"\n * })\n */\n listRoles(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listRoles(request, requestOptions));\n }\n async __listRoles(request, requestOptions) {\n const { contextId, startFrom, limit } = request;\n const _queryParams = {\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/roles\"\n );\n }\n /**\n * Creates a new role under the given app context. This call is idempotent by `roleId`: if a role with the same `roleId` already exists, the existing role is returned (with status 200) instead of creating a duplicate. If you use a scoped credential, the role's scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:c` scope.\n *\n * @param {Vectros.CreateRoleRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.createRole({\n * contextId: \"contextId\",\n * body: {\n * roleId: \"engineering-member\",\n * name: \"Engineering Team Member\",\n * scopes: [{\n * allowed_actions: [\"read\", \"write\"]\n * }]\n * }\n * })\n */\n createRole(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createRole(request, requestOptions));\n }\n async __createRole(request, requestOptions) {\n const { contextId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles`\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"POST\",\n \"/v1/app-contexts/{contextId}/roles\"\n );\n }\n /**\n * Returns a single access profile by its `principalId` within the given app context. Requires the `profiles:r` scope.\n *\n * @param {Vectros.GetAccessProfileRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getAccessProfile({\n * contextId: \"contextId\",\n * principalId: \"principalId\"\n * })\n */\n getAccessProfile(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAccessProfile(request, requestOptions));\n }\n async __getAccessProfile(request, requestOptions) {\n const { contextId, principalId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles/${url_exports.encodePathParam(principalId)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/profiles/{principalId}\"\n );\n }\n /**\n * Updates an access profile. This is a partial update: any field you omit (or send as null) keeps its existing value. A profile must reference either inline `scopes` or a `roleId`, never both — so setting `scopes` clears any `roleId`, and setting `roleId` clears any inline `scopes`. The `contextId` and `principalId` are immutable. Status changes (for example active to suspended) take effect within about five minutes. If you use a scoped credential, the profile's effective scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:u` scope.\n *\n * @param {Vectros.UpdateAccessProfileRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.updateAccessProfile({\n * contextId: \"contextId\",\n * principalId: \"principalId\",\n * body: {\n * principalId: \"usr_6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * }\n * })\n */\n updateAccessProfile(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateAccessProfile(request, requestOptions));\n }\n async __updateAccessProfile(request, requestOptions) {\n const { contextId, principalId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles/${url_exports.encodePathParam(principalId)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"PUT\",\n \"/v1/app-contexts/{contextId}/profiles/{principalId}\"\n );\n }\n /**\n * Deletes an access profile. Within about five minutes (the access-profile cache lifetime), token minting for this principal in this context will be denied. Requires the `profiles:d` scope.\n *\n * @param {Vectros.DeleteAccessProfileRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.deleteAccessProfile({\n * contextId: \"contextId\",\n * principalId: \"principalId\"\n * })\n */\n deleteAccessProfile(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteAccessProfile(request, requestOptions));\n }\n async __deleteAccessProfile(request, requestOptions) {\n const { contextId, principalId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles/${url_exports.encodePathParam(principalId)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"DELETE\",\n \"/v1/app-contexts/{contextId}/profiles/{principalId}\"\n );\n }\n /**\n * Returns a single app context by its `contextId`. Requires the `app-contexts:r` scope.\n *\n * @param {Vectros.GetAppContextRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getAppContext({\n * contextId: \"myapp\"\n * })\n */\n getAppContext(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAppContext(request, requestOptions));\n }\n async __getAppContext(request, requestOptions) {\n const { contextId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/app-contexts/{contextId}\");\n }\n /**\n * Updates the name and/or description of an app context. This is a partial update: any field you omit (or send as null) keeps its existing value. The `contextId` is immutable and is taken from the URL path, so any `contextId` in the request body is ignored. Requires the `app-contexts:u` scope.\n *\n * @param {Vectros.UpdateAppContextRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.updateAppContext({\n * contextId: \"contextId\",\n * body: {\n * contextId: \"myapp\",\n * name: \"My Internal App\"\n * }\n * })\n */\n updateAppContext(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateAppContext(request, requestOptions));\n }\n async __updateAppContext(request, requestOptions) {\n const { contextId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/app-contexts/{contextId}\");\n }\n /**\n * Permanently deletes an app context and everything in it — every record, document, folder, schema, role, and access profile belonging to the context. This is irreversible. The deletion runs asynchronously: the call returns 202 immediately and the context's data drains in the background. Poll the context's `status` field to observe when the teardown completes (`purging` while draining, then `deleted`). To guard against accidental deletion, you must echo the contextId back in the `confirm` query parameter (`?confirm={contextId}`). The reserved `default` and `vectros-admin` contexts cannot be deleted. This operation requires a root API key (one beginning with `sk_`): no scoped credential, not even one with full wildcard (`*`) scope, can trigger this teardown.\n *\n * @param {Vectros.DeleteAppContextRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.deleteAppContext({\n * contextId: \"contextId\"\n * })\n */\n deleteAppContext(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteAppContext(request, requestOptions));\n }\n async __deleteAppContext(request, requestOptions) {\n const { contextId, confirm } = request;\n const _queryParams = {\n confirm\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"DELETE\",\n \"/v1/app-contexts/{contextId}\"\n );\n }\n /**\n * Returns a single role by its `roleId` within the given app context. Requires the `profiles:r` scope.\n *\n * @param {Vectros.GetRoleRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getRole({\n * contextId: \"contextId\",\n * roleId: \"roleId\"\n * })\n */\n getRole(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRole(request, requestOptions));\n }\n async __getRole(request, requestOptions) {\n const { contextId, roleId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles/${url_exports.encodePathParam(roleId)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/roles/{roleId}\"\n );\n }\n /**\n * Updates a role. This is a partial update: any field you omit (or send as null) keeps its existing value. The `roleId` and `contextId` are immutable. Scope changes take effect for access profiles that reference this role within about five minutes. If you use a scoped credential, the role's scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:u` scope.\n *\n * @param {Vectros.UpdateRoleRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.updateRole({\n * contextId: \"contextId\",\n * roleId: \"roleId\",\n * body: {\n * roleId: \"engineering-member\",\n * name: \"Engineering Team Member\",\n * scopes: [{\n * allowed_actions: [\"read\", \"write\"]\n * }]\n * }\n * })\n */\n updateRole(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateRole(request, requestOptions));\n }\n async __updateRole(request, requestOptions) {\n const { contextId, roleId, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles/${url_exports.encodePathParam(roleId)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"PUT\",\n \"/v1/app-contexts/{contextId}/roles/{roleId}\"\n );\n }\n /**\n * Deletes a role. A role that is still referenced by one or more access profiles cannot be deleted: the request is rejected with 409. Reassign or delete those profiles first, then retry. Requires the `profiles:d` scope.\n *\n * @param {Vectros.DeleteRoleRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.deleteRole({\n * contextId: \"contextId\",\n * roleId: \"roleId\"\n * })\n */\n deleteRole(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteRole(request, requestOptions));\n }\n async __deleteRole(request, requestOptions) {\n const { contextId, roleId } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles/${url_exports.encodePathParam(roleId)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"DELETE\",\n \"/v1/app-contexts/{contextId}/roles/{roleId}\"\n );\n }\n /**\n * Returns the audit trail of changes (create, update, and delete events) for an access profile, most recent first. Version history is always recorded for every access profile; there is no setting to turn it off. Results are paginated. Requires the `profiles:r` scope.\n *\n * @param {Vectros.GetAccessProfileVersionsRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getAccessProfileVersions({\n * contextId: \"contextId\",\n * principalId: \"principalId\"\n * })\n */\n getAccessProfileVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getAccessProfileVersions(request, requestOptions));\n }\n async __getAccessProfileVersions(request, requestOptions) {\n const { contextId, principalId, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/profiles/${url_exports.encodePathParam(principalId)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/profiles/{principalId}/versions\"\n );\n }\n /**\n * Returns the audit trail of changes (create, update, and delete events) for a role, newest first. Version history is always recorded for every role; there is no setting to turn it off. Results are paginated. Requires the `profiles:r` scope.\n *\n * @param {Vectros.GetRoleVersionsRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.getRoleVersions({\n * contextId: \"myapp\",\n * roleId: \"roleId\"\n * })\n */\n getRoleVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRoleVersions(request, requestOptions));\n }\n async __getRoleVersions(request, requestOptions) {\n const { contextId, roleId, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/app-contexts/${url_exports.encodePathParam(contextId)}/roles/${url_exports.encodePathParam(roleId)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/app-contexts/{contextId}/roles/{roleId}/versions\"\n );\n }\n /**\n * Returns full usage detail for the requested calendar month, broken down by category (search, documents, and records) with per-category credit estimates and a split between your live and test environments. Defaults to the current month when `year` and `month` are omitted. Requires the `billing:r` scope on scoped tokens; API keys always have access.\n *\n * @param {Vectros.GetUsageRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.getUsage({\n * contextId: \"default\"\n * })\n */\n getUsage(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getUsage(request, requestOptions));\n }\n async __getUsage(request = {}, requestOptions) {\n const { year, month, contextId } = request;\n const _queryParams = {\n year,\n month,\n contextId\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/usage\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/usage\");\n }\n /**\n * Returns the identity bound to your credential — your account, principal type, key id, and scope details — so you can confirm who you are authenticated as and that the credential is valid. MCP clients use this to render \"signed in as ...\" in a chat UI without a separate identity endpoint.\n *\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.auth.ping()\n */\n ping(requestOptions) {\n return HttpResponsePromise.fromPromise(this.__ping(requestOptions));\n }\n async __ping(requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/ping\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/ping\");\n }\n /**\n * Returns the access profiles for the given principal across all of your contexts. Use this to answer questions like \"which apps does this user have access to?\" — for example, to build a member-access summary. Results are confined to your account. Requires the `profiles:r` scope.\n *\n * @param {Vectros.ListProfilesForPrincipalRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.listProfilesForPrincipal({\n * principalId: \"usr_6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n listProfilesForPrincipal(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listProfilesForPrincipal(request, requestOptions));\n }\n async __listProfilesForPrincipal(request, requestOptions) {\n const { principalId, startFrom, limit } = request;\n const _queryParams = {\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/principals/${url_exports.encodePathParam(principalId)}/profiles`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(\n _response.error,\n _response.rawResponse,\n \"GET\",\n \"/v1/principals/{principalId}/profiles\"\n );\n }\n /**\n * Creates a short-lived JWT bearer token restricted to specific actions and, optionally, to a particular user, organization, or client. Use this to hand a narrowly-scoped credential to a browser or downstream service so it never sees your root API key. Only callable with a root API key (`sk_*`).\n *\n * @param {Vectros.TokenRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.auth.mintToken({\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * scope: {\n * allowedActions: [\"records:crud\", \"schemas:r\"],\n * identity: {\n * \"userId\": \"550e8400-e29b-41d4-a716-446655440000\"\n * },\n * dataScope: {\n * \"orgId\": [\"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"]\n * }\n * },\n * expiresInSeconds: 3600\n * })\n */\n mintToken(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__mintToken(request, requestOptions));\n }\n async __mintToken(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/auth/token\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/auth/token\");\n }\n /**\n * Invite a new member to one of your app contexts by email. Creates a pending user with a pre-resolved access profile (their permissions on accept) and signs an invitation token. This call is idempotent on the combination of context and email: re-inviting the same email in the same context rotates the token and resends the invitation rather than creating a duplicate. Returns HTTP 201 on a new invite or a successful resend. Returns 409 if that email already belongs to an active or suspended member of the app context, or already has an identity elsewhere in your account (an email can currently belong to only one tenant per account, i.e. your test and live environments cannot share an email). When `sendEmail` is false, the response includes the raw token and a ready-to-use accept link so you can deliver the invitation through your own email provider. Requires the `admin:users` scope.\n *\n * @param {Vectros.CreateInviteRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.auth.createInvite({\n * email: \"bob@example.com\",\n * contextId: \"myapp\",\n * accessProfile: {}\n * })\n */\n createInvite(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createInvite(request, requestOptions));\n }\n async __createInvite(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users/invite\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/users/invite\");\n }\n /**\n * Resend an outstanding invitation, identified by its email and app context. Rotates the invitation token and extends its expiry, then (when `sendEmail` is true) re-delivers the email. Rotating the token invalidates any previously issued link for this invitation, so only the newest link works. The invitee's pending permissions are left unchanged. Requires the `admin:users` scope.\n *\n * @param {Vectros.CreateInviteRequest} request\n * @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.auth.resendInvite({\n * email: \"bob@example.com\",\n * contextId: \"myapp\",\n * accessProfile: {}\n * })\n */\n resendInvite(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__resendInvite(request, requestOptions));\n }\n async __resendInvite(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users/invite/resend\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/users/invite/resend\");\n }\n};\n\n// api/resources/compliance/client/Client.ts\nvar ComplianceClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Submits a right-to-erasure request for a single end-subject (a user, client, or organization). Erasure removes exactly the data the subject solely owns across the declared contexts, plus the subject's identity and lookup rows. It never touches another account's data and never cascades into another subject's data. The request is asynchronous: it returns 202 with a `requestId`; poll `GET /v1/erasure-requests/{id}` until the job completes to obtain the completion certificate. Requires a root API key — a scoped credential is rejected with 403.\n *\n * @param {Vectros.ErasureRequest} request\n * @param {ComplianceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.compliance.createErasureRequest({\n * subjectType: \"user\"\n * })\n */\n createErasureRequest(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createErasureRequest(request, requestOptions));\n }\n async __createErasureRequest(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/erasure-requests\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/erasure-requests\");\n }\n /**\n * Polls an erasure request by id. While the job is still running this returns its status only; once it completes, the response also includes the verifiable completion certificate (which contexts were swept, per-context deletion counts, and reports of dangling references and shared rows that were left intact). Requires a root API key.\n *\n * @param {Vectros.GetErasureRequestRequest} request\n * @param {ComplianceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.compliance.getErasureRequest({\n * id: \"er_550e8400e29b41d4a716446655440000\"\n * })\n */\n getErasureRequest(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getErasureRequest(request, requestOptions));\n }\n async __getErasureRequest(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/erasure-requests/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/erasure-requests/{id}\");\n }\n /**\n * Submits an asynchronous job to export your account's data, or a single end-subject's data, across the requested contexts. The request returns 202 with an `exportJobId`; poll `GET /v1/admin/export/{id}` until the job completes to obtain a short-lived presigned download URL and a manifest describing the payload. Requires a root API key — a scoped credential is rejected with 403.\n *\n * @param {Vectros.ExportRequest} request\n * @param {ComplianceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.compliance.createExport()\n */\n createExport(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createExport(request, requestOptions));\n }\n async __createExport(request = {}, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/admin/export\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/admin/export\");\n }\n /**\n * Polls an export job by id. While the job is still running this returns its status only; once it completes, the response also includes a short-lived presigned download URL and a manifest (format version and per-context counts). Requires a root API key.\n *\n * @param {Vectros.GetExportRequest} request\n * @param {ComplianceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.compliance.getExport({\n * id: \"exp_550e8400e29b41d4a716446655440000\"\n * })\n */\n getExport(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getExport(request, requestOptions));\n }\n async __getExport(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/admin/export/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/admin/export/{id}\");\n }\n};\n\n// api/resources/documents/client/Client.ts\nvar DocumentsClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns a paginated list of your documents, optionally filtered by folder (`folderId`) and/or owner (`userId`, `orgId`, or `clientId`). The response is a `{data, nextCursor}` envelope; pass `nextCursor` back as `startFrom` to fetch the next page. Requires the `documents:r` scope.\n *\n * @param {Vectros.ListDocumentsRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.documents.listDocuments({\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * clientId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * folderId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * startFrom: \"doc_prev123\"\n * })\n */\n listDocuments(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listDocuments(request, requestOptions));\n }\n async __listDocuments(request = {}, requestOptions) {\n const { userId, orgId, clientId, folderId, startFrom, limit } = request;\n const _queryParams = {\n userId,\n orgId,\n clientId,\n folderId,\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents\");\n }\n /**\n * Creates a document from a raw text string and queues it for asynchronous indexing so it becomes searchable. Requires the `documents:c` scope.\n *\n * @param {Vectros.DocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.documents.ingestDocument({\n * title: \"Patient Intake Form \\u2014 Jane Doe\"\n * })\n */\n ingestDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__ingestDocument(request, requestOptions));\n }\n async __ingestDocument(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/documents\");\n }\n /**\n * Returns a single document by its ID, including its full structured payload. Requires the `documents:r` scope.\n *\n * @param {Vectros.GetDocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.getDocument({\n * id: \"id\"\n * })\n */\n getDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getDocument(request, requestOptions));\n }\n async __getDocument(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/{id}\");\n }\n /**\n * Replaces the mutable fields of a document. This is a full replacement of the payload — to merge fields instead, use PATCH. If you supply new `text`, the document body is re-ingested and re-queued for indexing. Requires the `documents:u` scope.\n *\n * @param {Vectros.UpdateDocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.documents.updateDocument({\n * id: \"id\",\n * body: {\n * title: \"Patient Intake Form \\u2014 Jane Doe\"\n * }\n * })\n */\n updateDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateDocument(request, requestOptions));\n }\n async __updateDocument(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/documents/{id}\");\n }\n /**\n * Permanently deletes the document and removes it from the search index. This cannot be undone. Requires the `documents:d` scope.\n *\n * @param {Vectros.DeleteDocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.deleteDocument({\n * id: \"id\"\n * })\n */\n deleteDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteDocument(request, requestOptions));\n }\n async __deleteDocument(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/documents/{id}\");\n }\n /**\n * Partially updates a document using an RFC 7386 JSON Merge Patch. The `payload` object is deep-merged: keys you send overwrite existing values (recursing into nested objects), a key set to `null` is deleted, and keys you omit are preserved — unlike PUT, which replaces the whole payload. Top-level fields (`title`, `storeText`, `folderId`, `schemaId`, ownership) are set when present and left unchanged when omitted; sending a top-level field as `null` is rejected. Supplying `text` re-ingests the document body (same as PUT). `indexMode` and `externalId` are immutable and rejected if present. The merged result is validated against the bound schema. Pass `expectedVersion` for optimistic concurrency (409 on conflict). Requires the `documents:u` scope.\n *\n * @param {Vectros.PatchDocumentRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.documents.patchDocument({\n * id: \"id\",\n * body: {\n * title: \"Patient Intake Form \\u2014 Jane Doe\"\n * }\n * })\n */\n patchDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__patchDocument(request, requestOptions));\n }\n async __patchDocument(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}`\n ),\n method: \"PATCH\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PATCH\", \"/v1/documents/{id}\");\n }\n /**\n * Finds documents of a given type by a schema-declared lookup field. The document must be bound to a schema (via `schemaId`) that declares the field as a lookup field. A lookup on a sensitive field is rejected here, because the value would appear in the URL query string; use POST /v1/documents/lookup (the request-body variant) for a sensitive field instead. Results are paginated: set `limit` for the page size and feed the returned `nextCursor` back as `startFrom` to fetch the next page. The response is a `{data, nextCursor}` envelope. Requires the `documents:r` scope.\n *\n * @param {Vectros.LookupDocumentsRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.documents.lookupDocuments({\n * type: \"invoice\",\n * field: \"po_number\",\n * value: \"PO-1001\",\n * prefix: \"PO-2024\",\n * startFrom: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n lookupDocuments(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupDocuments(request, requestOptions));\n }\n async __lookupDocuments(request, requestOptions) {\n const { type: type_, field, value, from: from_, to, prefix, startFrom, limit, order } = request;\n const _queryParams = {\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n startFrom,\n limit,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents/lookup\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/lookup\");\n }\n /**\n * Request-body equivalent of GET /v1/documents/lookup. Use this when looking up by a sensitive field: the value travels in the request body (and is blind-indexed server-side) instead of the URL query string, so it never lands in access, CDN, or proxy logs. The GET variant rejects `value` for a sensitive field and directs you here. Requires the `documents:r` scope.\n *\n * @param {Vectros.DocumentLookupRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.documents.lookupDocumentsByBody({\n * type: \"invoice\",\n * field: \"mrn\"\n * })\n */\n lookupDocumentsByBody(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupDocumentsByBody(request, requestOptions));\n }\n async __lookupDocumentsByBody(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/documents/lookup\");\n }\n /**\n * Returns a short-lived presigned S3 GET URL for the original uploaded file. Only available for file-backed documents (created via POST /v1/documents/upload); text-only documents return 400. Requires the `documents:r` scope.\n *\n * @param {Vectros.GetDocumentDownloadUrlRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.getDocumentDownloadUrl({\n * id: \"id\"\n * })\n */\n getDocumentDownloadUrl(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getDocumentDownloadUrl(request, requestOptions));\n }\n async __getDocumentDownloadUrl(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}/download`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/{id}/download\");\n }\n /**\n * Returns the full extracted or ingested text body for documents that were stored with `storeText=true`. Returns 404 when the document does not exist or when no text is available (because `storeText` was false, or extraction has not yet completed). Requires the `documents:r` scope.\n *\n * @param {Vectros.GetDocumentTextRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.getDocumentText({\n * id: \"id\"\n * })\n */\n getDocumentText(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getDocumentText(request, requestOptions));\n }\n async __getDocumentText(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}/text`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/{id}/text\");\n }\n /**\n * Returns the audit trail of changes (CREATE, UPDATE, DELETE) for a document. History is recorded only for documents bound to a schema that has audit history enabled (the default for typed documents); untyped documents have no version history. The response is a `{data, nextCursor}` envelope. Requires the `documents:r` scope.\n *\n * @param {Vectros.GetDocumentVersionsRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.documents.getDocumentVersions({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getDocumentVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getDocumentVersions(request, requestOptions));\n }\n async __getDocumentVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/documents/{id}/versions\");\n }\n /**\n * Starts a file-based document by returning a short-lived presigned S3 PUT URL. Upload the file bytes directly to `uploadUrl`; the document is then automatically queued for text extraction and asynchronous indexing. Requires the `documents:c` scope.\n *\n * @param {Vectros.FileUploadRequest} request\n * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.documents.uploadDocument({\n * fileName: \"patient_intake_2024_01_15.pdf\",\n * fileType: \"application/pdf\"\n * })\n */\n uploadDocument(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__uploadDocument(request, requestOptions));\n }\n async __uploadDocument(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/documents/upload\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/documents/upload\");\n }\n};\n\n// api/resources/folders/client/Client.ts\nvar FoldersClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns a paginated list of your folders. Pass `parentFolderId` to list the direct children of a specific folder (tree navigation); omit it for a flat list across your account. You can also filter by owner using `userId`, `orgId`, or `clientId`. Results are returned as a `{data, nextCursor}` envelope — pass `nextCursor` as `startFrom` to fetch the next page. Requires the `folders:r` scope.\n *\n * @param {Vectros.ListFoldersRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.folders.listFolders({\n * parentFolderId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * clientId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * startFrom: \"fld_prev123\"\n * })\n */\n listFolders(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listFolders(request, requestOptions));\n }\n async __listFolders(request = {}, requestOptions) {\n const { parentFolderId, orgId, userId, clientId, startFrom, limit } = request;\n const _queryParams = {\n parentFolderId,\n orgId,\n userId,\n clientId,\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/folders\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/folders\");\n }\n /**\n * Creates a folder to organize your documents and records. If `parentFolderId` is omitted, the folder is created under your context's default root folder. Requires the `folders:c` scope.\n *\n * @param {Vectros.FolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.folders.createFolder({\n * name: \"Patient Records 2024\"\n * })\n */\n createFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createFolder(request, requestOptions));\n }\n async __createFolder(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/folders\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/folders\");\n }\n /**\n * Retrieves a single folder by its ID. Requires the `folders:r` scope.\n *\n * @param {Vectros.GetFolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.folders.getFolder({\n * id: \"id\"\n * })\n */\n getFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getFolder(request, requestOptions));\n }\n async __getFolder(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/folders/{id}\");\n }\n /**\n * Replaces a folder's name and description. Omitted fields are preserved (a null does not clear a field). The slug and parent folder are immutable and cannot be changed here. Requires the `folders:u` scope.\n *\n * @param {Vectros.UpdateFolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.folders.updateFolder({\n * id: \"id\",\n * body: {\n * name: \"Patient Records 2024\"\n * }\n * })\n */\n updateFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateFolder(request, requestOptions));\n }\n async __updateFolder(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/folders/{id}\");\n }\n /**\n * Permanently deletes a folder. The folder must be empty (contain no documents or sub-folders) and must not be protected. Your context's root folder is protected and cannot be deleted. Requires the `folders:d` scope.\n *\n * @param {Vectros.DeleteFolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.folders.deleteFolder({\n * id: \"id\"\n * })\n */\n deleteFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteFolder(request, requestOptions));\n }\n async __deleteFolder(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/folders/{id}\");\n }\n /**\n * Partially updates a folder using an RFC 7386 JSON Merge Patch. The `name`, `description`, and ownership fields (`userId`, `orgId`, `clientId`) are applied when present and left unchanged when omitted; sending any of these as null is rejected, because clearing a field is not supported in this release (omit it instead). `slug` and `parentFolderId` are immutable — a folder cannot be re-slugged or moved via the API — and the request is rejected if either is present. Pass `expectedVersion` for optimistic concurrency (you get a 409 if the folder changed since you last read it). Requires the `folders:u` scope.\n *\n * @param {Vectros.PatchFolderRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.folders.patchFolder({\n * id: \"id\",\n * body: {\n * name: \"Patient Records 2024\"\n * }\n * })\n */\n patchFolder(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__patchFolder(request, requestOptions));\n }\n async __patchFolder(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}`\n ),\n method: \"PATCH\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PATCH\", \"/v1/folders/{id}\");\n }\n /**\n * Returns the audit trail of changes (create, update, and delete events) for a folder, newest first. Folder version history is always recorded; there is no setting to turn it off. Results are returned as a `{data, nextCursor}` envelope — pass `nextCursor` as `startFrom` to fetch the next page. Requires the `folders:r` scope.\n *\n * @param {Vectros.GetFolderVersionsRequest} request\n * @param {FoldersClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.folders.getFolderVersions({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getFolderVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getFolderVersions(request, requestOptions));\n }\n async __getFolderVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/folders/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/folders/{id}/versions\");\n }\n};\n\n// api/resources/identity/client/Client.ts\nvar IdentityClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns a paginated list of clients in your account. Narrow the results with `orgId` or `userId`, or use `externalId` for an exact lookup by your own identifier. For schema-bound clients, you can also query by a schema-declared lookup field using `type`, `field`, and one lookup mode (`value` for equality, `from`/`to` for a range, or `prefix`). The response is a `{data, nextCursor}` envelope; pass `nextCursor` back as `startFrom` to fetch the next page. Requires the `clients:r` scope.\n *\n * @param {Vectros.ListClientsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.identity.listClients({\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * externalId: \"patient_789\",\n * startFrom: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * type: \"client_v1\",\n * field: \"industry\",\n * value: \"healthcare\",\n * prefix: \"health\"\n * })\n */\n listClients(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listClients(request, requestOptions));\n }\n async __listClients(request = {}, requestOptions) {\n const {\n orgId,\n userId,\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order\n } = request;\n const _queryParams = {\n orgId,\n userId,\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/clients\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/clients\");\n }\n /**\n * Creates a new client identity in your account. This call is idempotent on `externalId`: if a client with the same `externalId` already exists, the existing record is returned instead of creating a duplicate. Requires the `clients:c` scope.\n *\n * @param {Vectros.ClientRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.createClient({\n * externalId: \"patient_789\"\n * })\n */\n createClient(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createClient(request, requestOptions));\n }\n async __createClient(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/clients\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/clients\");\n }\n /**\n * Returns a single client by its Vectros-assigned UUID. Requires the `clients:r` scope.\n *\n * @param {Vectros.GetClientRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getClient({\n * id: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\"\n * })\n */\n getClient(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getClient(request, requestOptions));\n }\n async __getClient(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/clients/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/clients/{id}\");\n }\n /**\n * Updates mutable fields on an existing client. Omitted fields are preserved (a null does not clear a field); when `payload` is supplied it replaces the stored payload in full rather than being deep-merged. Requires the `clients:u` scope.\n *\n * @param {Vectros.UpdateClientRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.updateClient({\n * id: \"id\",\n * body: {\n * externalId: \"patient_789\"\n * }\n * })\n */\n updateClient(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateClient(request, requestOptions));\n }\n async __updateClient(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/clients/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/clients/{id}\");\n }\n /**\n * Permanently deletes the client. This action cannot be undone. Requires the `clients:d` scope.\n *\n * @param {Vectros.DeleteClientRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.deleteClient({\n * id: \"id\"\n * })\n */\n deleteClient(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteClient(request, requestOptions));\n }\n async __deleteClient(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/clients/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/clients/{id}\");\n }\n /**\n * Body-based equivalent of the `type`/`field`/`value` lookup on `GET /v1/clients`. Use this when looking up by a sensitive (blind-indexed) field: the value travels in the request body rather than the URL. The `GET` list rejects a sensitive field's value and directs you here. The response is a `{data, nextCursor}` envelope. Requires the `clients:r` scope.\n *\n * @param {Vectros.IdentityLookupRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.lookupClients({\n * type: \"person_v1\",\n * field: \"ssn\"\n * })\n */\n lookupClients(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupClients(request, requestOptions));\n }\n async __lookupClients(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/clients/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/clients/lookup\");\n }\n /**\n * Returns the audit trail of changes to a client, newest first. Identity auditing is always on, so this history is always available; sensitive field values are redacted in each version. The response is a `{data, nextCursor}` envelope. Requires the `clients:r` scope.\n *\n * @param {Vectros.GetClientVersionsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getClientVersions({\n * id: \"id\"\n * })\n */\n getClientVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getClientVersions(request, requestOptions));\n }\n async __getClientVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/clients/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/clients/{id}/versions\");\n }\n /**\n * Returns a paginated list of organizations in your account. Filter by `userId` to return only the organizations owned by a specific user, or by `externalId` for an exact lookup using your own identifier. You can also query schema-declared lookup fields by supplying `type` and `field` together with one lookup mode (`value` for equality, `from`/`to` for a range, or `prefix`). Requires the `orgs:r` scope.\n *\n * @param {Vectros.ListOrgsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.identity.listOrgs({\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * externalId: \"clinic_001\",\n * startFrom: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * type: \"org_v1\",\n * field: \"region\",\n * value: \"us-east\",\n * prefix: \"us-\"\n * })\n */\n listOrgs(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listOrgs(request, requestOptions));\n }\n async __listOrgs(request = {}, requestOptions) {\n const {\n userId,\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order\n } = request;\n const _queryParams = {\n userId,\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/orgs\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/orgs\");\n }\n /**\n * Creates a new organization in your account. This call is idempotent on `externalId`: if an organization with the same `externalId` already exists, the existing record is returned instead of creating a duplicate. Requires the `orgs:c` scope.\n *\n * @param {Vectros.OrgRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.createOrg({\n * externalId: \"clinic_001\"\n * })\n */\n createOrg(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createOrg(request, requestOptions));\n }\n async __createOrg(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/orgs\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/orgs\");\n }\n /**\n * Retrieves a single organization by its Vectros-assigned ID, returning its current name, status, payload, and schema binding. Requires the `orgs:r` scope.\n *\n * @param {Vectros.GetOrgRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getOrg({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getOrg(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getOrg(request, requestOptions));\n }\n async __getOrg(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/orgs/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/orgs/{id}\");\n }\n /**\n * Updates the mutable fields of an organization. Omitted fields are preserved (a null value does not clear a field), and the `payload` object is replaced in full when supplied rather than deep-merged. Requires the `orgs:u` scope.\n *\n * @param {Vectros.UpdateOrgRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.updateOrg({\n * id: \"id\",\n * body: {\n * externalId: \"clinic_001\"\n * }\n * })\n */\n updateOrg(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateOrg(request, requestOptions));\n }\n async __updateOrg(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/orgs/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/orgs/{id}\");\n }\n /**\n * Permanently deletes an organization. This action cannot be undone. Requires the `orgs:d` scope.\n *\n * @param {Vectros.DeleteOrgRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.deleteOrg({\n * id: \"id\"\n * })\n */\n deleteOrg(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteOrg(request, requestOptions));\n }\n async __deleteOrg(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/orgs/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/orgs/{id}\");\n }\n /**\n * Looks up organizations by a schema-declared field value, with the search criteria sent in the request body instead of the URL. Use this when looking up by a sensitive field: the value travels in the body and is never exposed in the URL. This is the body-based equivalent of the `type`/`field`/`value` lookup on `GET /v1/orgs`, which rejects sensitive-field values and directs you here. Returns a `{data, nextCursor}` envelope. Requires the `orgs:r` scope.\n *\n * @param {Vectros.IdentityLookupRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.lookupOrgs({\n * type: \"person_v1\",\n * field: \"ssn\"\n * })\n */\n lookupOrgs(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupOrgs(request, requestOptions));\n }\n async __lookupOrgs(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/orgs/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/orgs/lookup\");\n }\n /**\n * Returns the audit trail of changes made to an organization, newest first. Version history is always recorded for identity entities, and sensitive field values are redacted in the history. Requires the `orgs:r` scope.\n *\n * @param {Vectros.GetOrgVersionsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getOrgVersions({\n * id: \"id\"\n * })\n */\n getOrgVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getOrgVersions(request, requestOptions));\n }\n async __getOrgVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/orgs/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/orgs/{id}/versions\");\n }\n /**\n * Returns a paginated list of the users in your account. Pass `externalId` to look up a single user by your own identifier. To filter on schema-declared lookup fields, supply `type` and `field` together with one lookup mode: `value` (exact match), `from`+`to` (range), or `prefix`. Requires the `users:r` scope.\n *\n * @param {Vectros.ListUsersRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.identity.listUsers({\n * externalId: \"usr_12345\",\n * startFrom: \"550e8400-e29b-41d4-a716-446655440000\",\n * type: \"person_v1\",\n * field: \"team\",\n * value: \"engineering\",\n * prefix: \"eng\"\n * })\n */\n listUsers(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listUsers(request, requestOptions));\n }\n async __listUsers(request = {}, requestOptions) {\n const { externalId, startFrom, limit, type: type_, field, value, from: from_, to, prefix, order } = request;\n const _queryParams = {\n externalId,\n startFrom,\n limit,\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/users\");\n }\n /**\n * Creates a user identity in your account. The operation is idempotent on `externalId`: if a user with the same `externalId` already exists, the existing record is returned instead of creating a duplicate. Requires the `users:c` scope.\n *\n * @param {Vectros.UserRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.createUser({\n * externalId: \"usr_12345\"\n * })\n */\n createUser(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createUser(request, requestOptions));\n }\n async __createUser(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/users\");\n }\n /**\n * Retrieves a single user by its Vectros-assigned ID. Requires the `users:r` scope.\n *\n * @param {Vectros.GetUserRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getUser({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n getUser(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getUser(request, requestOptions));\n }\n async __getUser(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/users/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/users/{id}\");\n }\n /**\n * Updates mutable fields on an existing user (such as email, status, payload, or schema binding). The `type` field is immutable after creation. This endpoint also activates an invited user: a PUT that moves a PENDING user to ACTIVE and carries `inviteToken`, `externalSubject`, and `emailVerifiedAttestation=true` completes the invitation. Requires the `users:u` scope.\n *\n * @param {Vectros.UpdateUserRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.updateUser({\n * id: \"550e8400-e29b-41d4-a716-446655440000\",\n * body: {\n * externalId: \"usr_12345\"\n * }\n * })\n */\n updateUser(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateUser(request, requestOptions));\n }\n async __updateUser(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/users/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/users/{id}\");\n }\n /**\n * Permanently deletes a user identity. This cannot be undone. If the user is a pending invitation, the associated access profile created for that invitation is also removed. Requires the `users:d` scope.\n *\n * @param {Vectros.DeleteUserRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.deleteUser({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n deleteUser(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteUser(request, requestOptions));\n }\n async __deleteUser(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/users/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/users/{id}\");\n }\n /**\n * Looks up users by a schema lookup field, with the query criteria carried in the request body rather than the URL. Use this when looking up by a sensitive (blind-indexed) field: the value is blind-indexed server-side and never appears in the URL, request logs, or proxies. The query semantics are identical to the GET /v1/users lookup, which rejects sensitive-field values and directs you here. Returns a page in the `{data, nextCursor}` envelope. Requires the `users:r` scope.\n *\n * @param {Vectros.IdentityLookupRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.identity.lookupUsers({\n * type: \"person_v1\",\n * field: \"ssn\"\n * })\n */\n lookupUsers(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupUsers(request, requestOptions));\n }\n async __lookupUsers(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/users/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/users/lookup\");\n }\n /**\n * Returns the audit trail of changes to a user, most recent first. Identity history is always recorded and always available. Sensitive field values are redacted in every historical version. Returns a page in the `{data, nextCursor}` envelope. Requires the `users:r` scope.\n *\n * @param {Vectros.GetUserVersionsRequest} request\n * @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.identity.getUserVersions({\n * id: \"id\"\n * })\n */\n getUserVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getUserVersions(request, requestOptions));\n }\n async __getUserVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/users/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/users/{id}/versions\");\n }\n};\n\n// api/resources/inference/client/Client.ts\nvar InferenceClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns every inference model available to you, including each model's context window, the plan tiers it's available on, and the exact credit rates charged per 1K input and output tokens. Use this to populate model pickers and to validate a request before calling `/v1/chat`, `/v1/rag`, or `/v1/documents/{id}/ask`.\n *\n * @param {InferenceClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.inference.listInferenceModels()\n */\n listInferenceModels(requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listInferenceModels(requestOptions));\n }\n async __listInferenceModels(requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/models\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/models\");\n }\n /**\n * Streams a model response as Server-Sent Events (SSE). Send the full conversation history in the `messages` array; a message with role `system` is extracted and used as the system prompt. Token cost is debited from your pre-paid inference balance (in cents), and a small per-call flat fee is debited from your monthly platform credit allowance. Requires the `inference:r` scope.\n */\n chatInference(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__chatInference(request, requestOptions));\n }\n async __chatInference(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/chat\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n responseType: \"sse\",\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return {\n data: new Stream({\n stream: _response.body,\n parse: (data) => data,\n signal: requestOptions?.abortSignal,\n eventShape: {\n type: \"sse\"\n }\n }),\n rawResponse: _response.rawResponse\n };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 401:\n throw new UnauthorizedError(_response.error.body, _response.rawResponse);\n case 402:\n throw new PaymentRequiredError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 429:\n throw new TooManyRequestsError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/chat\");\n }\n /**\n * Loads a single document's extracted text, supplies it as context, and streams a model answer about it. The document must be fully indexed. If the document exceeds the 32K-token cap, the call returns 413 with no credits charged — use `POST /v1/rag` instead to answer over larger or multi-document collections. Requires the `inference:r` scope.\n */\n documentAsk(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__documentAsk(request, requestOptions));\n }\n async __documentAsk(request, requestOptions) {\n const { id, ..._body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/documents/${url_exports.encodePathParam(id)}/ask`\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n responseType: \"sse\",\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return {\n data: new Stream({\n stream: _response.body,\n parse: (data) => data,\n signal: requestOptions?.abortSignal,\n eventShape: {\n type: \"sse\"\n }\n }),\n rawResponse: _response.rawResponse\n };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 401:\n throw new UnauthorizedError(_response.error.body, _response.rawResponse);\n case 402:\n throw new PaymentRequiredError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n case 413:\n throw new ContentTooLargeError(_response.error.body, _response.rawResponse);\n case 429:\n throw new TooManyRequestsError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/documents/{id}/ask\");\n }\n /**\n * Runs hybrid search over your indexed content, then streams a model answer grounded in the top results. The SSE stream emits a `search_results` event first (carrying the matched results and their metadata), an optional `truncation_warning` if lower-scoring results were dropped to fit the model's context window, then `content_delta` chunks, and finally a terminal `done` event. Requires the `inference:r` scope.\n */\n ragInference(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__ragInference(request, requestOptions));\n }\n async __ragInference(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/rag\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n responseType: \"sse\",\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return {\n data: new Stream({\n stream: _response.body,\n parse: (data) => data,\n signal: requestOptions?.abortSignal,\n eventShape: {\n type: \"sse\"\n }\n }),\n rawResponse: _response.rawResponse\n };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 401:\n throw new UnauthorizedError(_response.error.body, _response.rawResponse);\n case 402:\n throw new PaymentRequiredError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 429:\n throw new TooManyRequestsError(_response.error.body, _response.rawResponse);\n case 500:\n throw new InternalServerError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/rag\");\n }\n};\n\n// api/resources/records/client/Client.ts\nvar RecordsClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Reserved endpoint for fetching multiple records by ID in one call. When available, the response will contain only the records you can see; any IDs that do not exist or are outside your scope are silently omitted (there is no per-ID existence signal), matching the not-found behavior of the single-record GET. It currently returns 501 (not implemented). The documented 200 response schema is the stable shape this endpoint will use once available. Requires the `records:r` scope.\n *\n * @param {Vectros.BatchGetRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.records.batchGetRecords()\n */\n batchGetRecords(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__batchGetRecords(request, requestOptions));\n }\n async __batchGetRecords(request = {}, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/batch-get\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records/batch-get\");\n }\n /**\n * Reserved endpoint for batch lookup and reference resolution. The published response shape correlates results to each input and carries a per-item status envelope. It currently returns 501 (not implemented). The documented 200 response schema is the stable shape this endpoint will use once available. Requires the `records:r` scope.\n *\n * @param {Vectros.BatchLookupRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.records.batchLookupRecords()\n */\n batchLookupRecords(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__batchLookupRecords(request, requestOptions));\n }\n async __batchLookupRecords(request = {}, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/lookup/batch\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records/lookup/batch\");\n }\n /**\n * Reserved endpoint for bulk record writes. The published response shape includes a per-item partial-failure envelope and an atomicity flag. It currently returns 501 (not implemented). The documented 200 response schema is the stable shape this endpoint will use once available, published now so SDK integrations against it will not break when it ships. Requires the `records:c` scope.\n *\n * @param {Vectros.BatchWriteRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.ForbiddenError}\n * @throws {@link Vectros.NotImplementedError}\n *\n * @example\n * await client.records.batchWriteRecords()\n */\n batchWriteRecords(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__batchWriteRecords(request, requestOptions));\n }\n async __batchWriteRecords(request = {}, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/batch\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n case 501:\n throw new NotImplementedError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records/batch\");\n }\n /**\n * Returns a paginated list of records in your account as a `{data, nextCursor}` page. Supply exactly one of `type`, `folderId`, or `recent=true` to choose the mode: `type` lists all records of a single type; `folderId` lists all records in a folder (any type); and `recent=true` returns the account-wide recently-updated feed across all types, newest first. You may combine `type` with `folderId` to list a single type within a folder. The owner filters (`userId`, `orgId`, `clientId`) further narrow the type and folder modes; the `recent` feed is standalone and ignores all filters. Each token only sees the record types it is scoped to read. Requires the `records:r` scope. By default the response returns the indexed projection of each record; set `includePayload=true` to include full payloads.\n *\n * @param {Vectros.ListRecordsRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.records.listRecords({\n * type: \"intake_form\",\n * folderId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * clientId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n * startFrom: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n listRecords(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listRecords(request, requestOptions));\n }\n async __listRecords(request = {}, requestOptions) {\n const { type: type_, folderId, userId, orgId, clientId, startFrom, limit, includePayload, recent } = request;\n const _queryParams = {\n type: type_,\n folderId,\n userId,\n orgId,\n clientId,\n startFrom,\n limit,\n includePayload,\n recent\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records\");\n }\n /**\n * Creates a new record of a given type. The `payload` is validated against that type's schema before the record is stored. Identify the type by sending `typeName`, `schemaId`, or both (they must agree); if you send only `schemaId`, the type is taken from that schema. Optionally supply an `externalId` to make the create idempotent — if a record with the same `externalId` already exists in your context, that existing record is returned unchanged instead of a duplicate being created. Requires the `records:c:<type>` scope.\n *\n * @param {Vectros.RecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.records.createRecord({\n * typeName: \"intake_form\",\n * schemaId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * payload: {\n * \"first_name\": \"Jane\",\n * \"email\": \"jane@example.com\"\n * },\n * folderId: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\"\n * })\n */\n createRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createRecord(request, requestOptions));\n }\n async __createRecord(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records\");\n }\n /**\n * Retrieves a single record by its Vectros-assigned ID, including its full payload (payloads that were externalized to object storage are rehydrated for this response). Sensitive fields are masked according to the record's schema. Requires the `records:r:<type>` scope. A record outside your account or scope returns 404 (not found) rather than revealing its existence.\n *\n * @param {Vectros.GetRecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.records.getRecord({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n getRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRecord(request, requestOptions));\n }\n async __getRecord(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records/{id}\");\n }\n /**\n * Replaces a record's payload and mutable fields. This is a full replacement: the `payload` you send overwrites the existing payload entirely, so include every field you want to keep (use the PATCH endpoint to change only specific fields). `typeName` and `schemaId` are immutable and cannot be changed. The new payload is validated against the record's schema. Pass `expectedVersion` to make the update conditional on the record not having changed since you last read it (optimistic concurrency). Requires the `records:u:<type>` scope.\n *\n * @param {Vectros.UpdateRecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.records.updateRecord({\n * id: \"550e8400-e29b-41d4-a716-446655440000\",\n * body: {}\n * })\n */\n updateRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateRecord(request, requestOptions));\n }\n async __updateRecord(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/records/{id}\");\n }\n /**\n * Permanently deletes a record. This is a hard delete: the record is removed and a tombstone plus an audit-trail entry are recorded (you can later retrieve the tombstone via `GET /v1/records/{id}/tombstone`). Requires the `records:d:<type>` scope.\n *\n * @param {Vectros.DeleteRecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.records.deleteRecord({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n deleteRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteRecord(request, requestOptions));\n }\n async __deleteRecord(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/records/{id}\");\n }\n /**\n * Partially updates a record using an RFC 7386 JSON Merge Patch. The `payload` object is deep-merged into the existing payload: keys you send overwrite (recursing into nested objects), a key set to null is deleted, and keys you omit are left unchanged — so you can change a single field without re-sending the rest (unlike the full-replacement PUT). Top-level fields (`status`, `folderId`, `userId`, `orgId`, `clientId`) are set when present and left unchanged when omitted; sending a top-level field as null is rejected (clearing a top-level field is not supported in this release — omit it instead). `typeName`, `schemaId`, `externalId`, and `indexMode` are immutable and rejected if present. The merged result is validated against the schema. Pass `expectedVersion` to make the patch conditional (optimistic concurrency, 409 on conflict). Requires the `records:u:<type>` scope.\n *\n * @param {Vectros.PatchRecordRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.records.patchRecord({\n * id: \"550e8400-e29b-41d4-a716-446655440000\",\n * body: {\n * payload: {\n * \"status\": \"done\"\n * },\n * expectedVersion: 5\n * }\n * })\n */\n patchRecord(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__patchRecord(request, requestOptions));\n }\n async __patchRecord(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}`\n ),\n method: \"PATCH\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PATCH\", \"/v1/records/{id}\");\n }\n /**\n * Finds records by the value of a lookup field declared on the type's schema. Provide exactly one lookup mode: `value` (exact match), `from`+`to` (inclusive range, ascending by value), or `prefix` (string fields only, ascending). Range and prefix lookups are not supported on a sensitive field, because its value is stored as a blind index and has no sortable order. An exact-`value` lookup on a sensitive field is also rejected on this GET endpoint — the value must not appear in the URL — so use the `POST /v1/records/lookup` body variant for sensitive fields. Results are paginated: set `limit` for the page size and pass the returned `nextCursor` back as `startFrom` for the next page. Requires the `records:r:<type>` scope.\n *\n * @param {Vectros.LookupRecordsRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.records.lookupRecords({\n * type: \"intake_form\",\n * field: \"email\",\n * value: \"jane@example.com\",\n * prefix: \"jane\",\n * startFrom: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n lookupRecords(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupRecords(request, requestOptions));\n }\n async __lookupRecords(request, requestOptions) {\n const { type: type_, field, value, from: from_, to, prefix, startFrom, limit, includePayload, order } = request;\n const _queryParams = {\n type: type_,\n field,\n value,\n from: from_,\n to,\n prefix,\n startFrom,\n limit,\n includePayload,\n order: order != null ? order : void 0\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/lookup\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records/lookup\");\n }\n /**\n * Body-based equivalent of `GET /v1/records/lookup`. Use this when looking up by a sensitive field: the value travels in the request body (and is blind-indexed server-side) instead of in the URL query string, so it never lands in access, CDN, or proxy logs. The GET variant rejects an exact-value lookup on a sensitive field and directs you here. Non-sensitive exact-value, range (`from`+`to`), and prefix lookups also work here. Returns the same `{data, nextCursor}` envelope and uses the same pagination as the GET variant. Requires the `records:r:<type>` scope.\n *\n * @param {Vectros.RecordLookupRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.records.lookupRecordsByBody({\n * type: \"intake_form\",\n * field: \"ssn\"\n * })\n */\n lookupRecordsByBody(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__lookupRecordsByBody(request, requestOptions));\n }\n async __lookupRecordsByBody(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/records/lookup\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/records/lookup\");\n }\n /**\n * Returns the tombstone left behind when a record was hard-deleted, confirming the deletion and recording when it happened. Look it up using the deleted record's original ID. Requires the `records:r:<type>` scope.\n *\n * @param {Vectros.GetRecordTombstoneRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.records.getRecordTombstone({\n * id: \"id\"\n * })\n */\n getRecordTombstone(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRecordTombstone(request, requestOptions));\n }\n async __getRecordTombstone(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}/tombstone`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records/{id}/tombstone\");\n }\n /**\n * Returns the audit trail of past versions for a record, as a paginated `{data, nextCursor}` page. This is available only when the record type's schema has audit history enabled (the default); if it is disabled, the endpoint returns 409. Requires the `records:r:<type>` scope.\n *\n * @param {Vectros.GetRecordVersionsRequest} request\n * @param {RecordsClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.records.getRecordVersions({\n * id: \"550e8400-e29b-41d4-a716-446655440000\"\n * })\n */\n getRecordVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getRecordVersions(request, requestOptions));\n }\n async __getRecordVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/records/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/records/{id}/versions\");\n }\n};\n\n// api/resources/schemas/client/Client.ts\nvar SchemasClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Returns a paginated list of the record schemas defined in your account. Filter by `userId` or `orgId` to scope to an owner, by `surface` to list the types bindable to one surface, or by `recordType` to resolve the single schema for a type directly. Filtering by an identity surface (user, org, or client) lists your account-wide identity schemas regardless of the calling context; filtering by record or document lists within the calling context. Requires the `schemas:r` scope.\n *\n * @param {Vectros.ListSchemasRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @example\n * await client.schemas.listSchemas({\n * userId: \"550e8400-e29b-41d4-a716-446655440000\",\n * orgId: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * surface: \"document\",\n * recordType: \"intake_form\",\n * startFrom: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n listSchemas(request = {}, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__listSchemas(request, requestOptions));\n }\n async __listSchemas(request = {}, requestOptions) {\n const { userId, orgId, surface, recordType, startFrom, limit } = request;\n const _queryParams = {\n userId,\n orgId,\n surface,\n recordType,\n startFrom,\n limit\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/schemas\"\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/schemas\");\n }\n /**\n * Defines a new record type with optional field definitions, validation rules, and lookup indexes. Idempotent by `typeName` within the same ownership scope: re-creating an existing `typeName` returns the existing schema rather than failing. Requires the `schemas:w` scope.\n *\n * @param {Vectros.SchemaRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n *\n * @example\n * await client.schemas.createSchema({\n * typeName: \"intake_form\",\n * displayName: \"Client Intake Form\",\n * description: \"Captures initial client information\",\n * fields: [{\n * fieldId: \"first_name\",\n * fieldType: \"string\",\n * required: true,\n * searchable: true\n * }, {\n * fieldId: \"email\",\n * fieldType: \"string\",\n * required: true\n * }],\n * lookupFields: [{\n * fieldName: \"email\",\n * unique: true\n * }],\n * capabilities: {\n * \"auditHistory\": true\n * },\n * allowedSurfaces: [\"record\"]\n * })\n */\n createSchema(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__createSchema(request, requestOptions));\n }\n async __createSchema(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/schemas\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/schemas\");\n }\n /**\n * Retrieves a single record schema by its id. Requires the `schemas:r` scope.\n *\n * @param {Vectros.GetSchemaRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.schemas.getSchema({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getSchema(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getSchema(request, requestOptions));\n }\n async __getSchema(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/schemas/${url_exports.encodePathParam(id)}`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/schemas/{id}\");\n }\n /**\n * Updates a record schema. Fields you omit are preserved; `typeName` is immutable and cannot be changed. Collection fields (`fields`, `lookupFields`, `renderHints`, `capabilities`) are replaced in full when supplied. Requires the `schemas:w` scope.\n *\n * @param {Vectros.UpdateSchemaRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.schemas.updateSchema({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n * body: {\n * typeName: \"intake_form\",\n * displayName: \"Client Intake Form\",\n * allowedSurfaces: [\"record\"]\n * }\n * })\n */\n updateSchema(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__updateSchema(request, requestOptions));\n }\n async __updateSchema(request, requestOptions) {\n const { id, body: _body } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/schemas/${url_exports.encodePathParam(id)}`\n ),\n method: \"PUT\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: _body,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"PUT\", \"/v1/schemas/{id}\");\n }\n /**\n * Permanently deletes a record schema. The request is refused with 409 if records of this type still exist — delete those records first, since every record must reference a live schema. Requires the `schemas:w` scope.\n *\n * @param {Vectros.DeleteSchemaRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n * @throws {@link Vectros.ConflictError}\n *\n * @example\n * await client.schemas.deleteSchema({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n deleteSchema(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__deleteSchema(request, requestOptions));\n }\n async __deleteSchema(request, requestOptions) {\n const { id } = request;\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/schemas/${url_exports.encodePathParam(id)}`\n ),\n method: \"DELETE\",\n headers: _headers,\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: void 0, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n case 409:\n throw new ConflictError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"DELETE\", \"/v1/schemas/{id}\");\n }\n /**\n * Returns the audit trail of changes to a record schema, newest first (create, update, and delete). Schema version history is always recorded — there is no per-schema toggle to disable it. Requires the `schemas:r` scope.\n *\n * @param {Vectros.GetSchemaVersionsRequest} request\n * @param {SchemasClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.NotFoundError}\n *\n * @example\n * await client.schemas.getSchemaVersions({\n * id: \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\n * })\n */\n getSchemaVersions(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__getSchemaVersions(request, requestOptions));\n }\n async __getSchemaVersions(request, requestOptions) {\n const { id, startFrom } = request;\n const _queryParams = {\n startFrom\n };\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n `v1/schemas/${url_exports.encodePathParam(id)}/versions`\n ),\n method: \"GET\",\n headers: _headers,\n queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 404:\n throw new NotFoundError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"GET\", \"/v1/schemas/{id}/versions\");\n }\n};\n\n// api/resources/search/client/Client.ts\nvar SearchClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n /**\n * Runs a hybrid, semantic, or text search across the content you have indexed. By default it returns both documents and records in a single unified result set; pass `contentTypes` to narrow the results (for example `[\"documents\"]`). Each result carries a `sourceType` discriminator (`PartnerDocument` or `GenericRecord`) so you can branch on the type. Requires the `search:r` scope.\n *\n * @param {Vectros.SearchRequest} request\n * @param {SearchClient.RequestOptions} requestOptions - Request-specific configuration.\n *\n * @throws {@link Vectros.BadRequestError}\n * @throws {@link Vectros.ForbiddenError}\n *\n * @example\n * await client.search.content({\n * query: \"patient intake form diabetes\"\n * })\n */\n content(request, requestOptions) {\n return HttpResponsePromise.fromPromise(this.__content(request, requestOptions));\n }\n async __content(request, requestOptions) {\n const _authRequest = await this._options.authProvider.getAuthRequest();\n const _headers = mergeHeaders(\n _authRequest.headers,\n this._options?.headers,\n requestOptions?.headers\n );\n const _response = await fetcher({\n url: url_exports.join(\n await Supplier.get(this._options.baseUrl) ?? await Supplier.get(this._options.environment),\n \"v1/search\"\n ),\n method: \"POST\",\n headers: _headers,\n contentType: \"application/json\",\n queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),\n requestType: \"json\",\n body: request,\n timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,\n maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,\n abortSignal: requestOptions?.abortSignal,\n fetchFn: this._options?.fetch,\n logging: this._options.logging\n });\n if (_response.ok) {\n return { data: _response.body, rawResponse: _response.rawResponse };\n }\n if (_response.error.reason === \"status-code\") {\n switch (_response.error.statusCode) {\n case 400:\n throw new BadRequestError(_response.error.body, _response.rawResponse);\n case 403:\n throw new ForbiddenError(_response.error.body, _response.rawResponse);\n default:\n throw new VectrosError({\n statusCode: _response.error.statusCode,\n body: _response.error.body,\n rawResponse: _response.rawResponse\n });\n }\n }\n return handleNonStatusCodeError(_response.error, _response.rawResponse, \"POST\", \"/v1/search\");\n }\n};\n\n// Client.ts\nvar VectrosClient = class {\n constructor(options) {\n this._options = normalizeClientOptionsWithAuth(options);\n }\n get auth() {\n return this._auth ?? (this._auth = new AuthClient(this._options));\n }\n get identity() {\n return this._identity ?? (this._identity = new IdentityClient(this._options));\n }\n get documents() {\n return this._documents ?? (this._documents = new DocumentsClient(this._options));\n }\n get compliance() {\n return this._compliance ?? (this._compliance = new ComplianceClient(this._options));\n }\n get folders() {\n return this._folders ?? (this._folders = new FoldersClient(this._options));\n }\n get inference() {\n return this._inference ?? (this._inference = new InferenceClient(this._options));\n }\n get records() {\n return this._records ?? (this._records = new RecordsClient(this._options));\n }\n get schemas() {\n return this._schemas ?? (this._schemas = new SchemasClient(this._options));\n }\n get search() {\n return this._search ?? (this._search = new SearchClient(this._options));\n }\n /**\n * Make a passthrough request using the SDK's configured auth, retry, logging, etc.\n * This is useful for making requests to endpoints not yet supported in the SDK.\n * The input can be a URL string, URL object, or Request object. Relative paths are resolved against the configured base URL.\n *\n * @param {Request | string | URL} input - The URL, path, or Request object.\n * @param {RequestInit} init - Standard fetch RequestInit options.\n * @param {core.PassthroughRequest.RequestOptions} requestOptions - Per-request overrides (timeout, retries, headers, abort signal).\n * @returns {Promise<Response>} A standard Response object.\n */\n async fetch(input, init, requestOptions) {\n return makePassthroughRequest(\n input,\n init,\n {\n baseUrl: this._options.baseUrl ?? this._options.environment,\n headers: this._options.headers,\n timeoutInSeconds: this._options.timeoutInSeconds,\n maxRetries: this._options.maxRetries,\n fetch: this._options.fetch,\n logging: this._options.logging,\n getAuthHeaders: async () => (await this._options.authProvider.getAuthRequest()).headers\n },\n requestOptions\n );\n }\n};\n\n// core/logging/exports.ts\nvar logging;\n((logging2) => {\n logging2.LogLevel = LogLevel;\n logging2.ConsoleLogger = ConsoleLogger;\n})(logging || (logging = {}));\nexport {\n api_exports as Vectros,\n VectrosClient,\n VectrosError,\n VectrosTimeoutError,\n logging\n};\n","/**\n * API key format validation + credential-type warnings.\n *\n * Vectros has three credential types:\n * sk_* — root API key. Wildcard scope. Too broad for desktop MCP;\n * warn the user on accept.\n * ssk_* — server-side scoped key. Long-lived, narrowable scope.\n * The RECOMMENDED credential for MCP. Accept silently.\n * st_* — short-lived KMS-signed JWT (1h default / 24h max).\n * Will expire mid-session; warn the user on accept.\n *\n * See the Vectros developer documentation on the auth model and\n * scoped tokens (\"When ssk_* is the right call\") for the full rationale.\n */\nimport type { Logger } from './log.js';\n\nexport type KeyPrefix = 'sk' | 'ssk' | 'st';\nexport type KeyEnv = 'live' | 'test';\n\nexport interface KeyInfo {\n prefix: KeyPrefix;\n env: KeyEnv;\n raw: string;\n}\n\nconst KEY_RE = /^(sk|ssk|st)_(live|test)_/;\n\nexport class InvalidApiKeyError extends Error {\n constructor(reason: string) {\n super(`Invalid VECTROS_API_KEY: ${reason}`);\n this.name = 'InvalidApiKeyError';\n }\n}\n\n/**\n * Parse and validate the API key. Throws `InvalidApiKeyError` on\n * malformed keys (caller should let the exception propagate — bad\n * creds are a fail-fast condition at startup).\n */\nexport function parseApiKey(raw: string | undefined): KeyInfo {\n if (!raw || raw.trim().length === 0) {\n throw new InvalidApiKeyError(\n 'env var is missing or empty. ' +\n 'Set VECTROS_API_KEY to a Vectros key (recommended: ssk_live_... or ssk_test_...).',\n );\n }\n const match = raw.match(KEY_RE);\n if (!match) {\n throw new InvalidApiKeyError(\n `key must start with sk_, ssk_, or st_ followed by \"live_\" or \"test_\". Got prefix \"${raw.slice(0, 12)}...\".`,\n );\n }\n return {\n prefix: match[1] as KeyPrefix,\n env: match[2] as KeyEnv,\n raw,\n };\n}\n\n/**\n * Warn (via logger) on credential types that are technically valid\n * but not ideal for an MCP server:\n * - sk_* — wildcard scope is too broad for desktop credentials\n * - st_* — short-lived; will expire mid-session\n *\n * ssk_* passes silently — it's the recommended shape.\n */\nexport function warnOnSuboptimalKey(key: KeyInfo, log: Logger): void {\n if (key.prefix === 'sk') {\n log.warn(\n { prefix: key.prefix, env: key.env },\n 'wildcard-scope key (sk_*) on a desktop MCP server is overly broad. ' +\n 'For production, prefer a scoped ssk_* key bound to a narrowed AccessProfile. ' +\n 'See the Vectros scoped-token documentation (\"Recommended AccessProfile for MCP\").',\n );\n } else if (key.prefix === 'st') {\n log.warn(\n { prefix: key.prefix, env: key.env },\n 'short-lived token (st_*) will expire mid-session (1h default, 24h max). ' +\n 'For long-running MCP installs, prefer a long-lived ssk_* key.',\n );\n }\n // ssk_* — no warning.\n}\n","/**\n * Build-time provenance for the published MCP server.\n *\n * `@vectros-ai/sdk` is **bundled** into the binary (tsup `noExternal`), so at\n * runtime there is no `node_modules/@vectros-ai/sdk` to read its version from —\n * the only way to know which SDK a given `@vectros-ai/mcp-server` build shipped\n * is to capture it at build time.\n *\n * tsup's `define` (see tsup.config.ts) replaces the `__*_VERSION__` tokens with\n * the versions RESOLVED AT BUILD TIME. Under `tsx` (the test runner, no tsup\n * define) the tokens are undefined → the `'dev'` fallback; the `typeof` guard\n * keeps the else-branch from ReferenceError-ing.\n */\ndeclare const __MCP_VERSION__: string | undefined;\ndeclare const __SDK_VERSION__: string | undefined;\n\nexport const BUILD_INFO = {\n mcpServer: typeof __MCP_VERSION__ !== 'undefined' ? __MCP_VERSION__ : 'dev',\n sdk: typeof __SDK_VERSION__ !== 'undefined' ? __SDK_VERSION__ : 'dev',\n} as const;\n\n/** One-line provenance string, e.g. `vectros-mcp-server 0.5.0 (sdk 0.29.5)`. */\nexport function formatBuildInfo(): string {\n return `vectros-mcp-server ${BUILD_INFO.mcpServer} (sdk ${BUILD_INFO.sdk})`;\n}\n","/**\n * Structured logger — pino, always to stderr.\n *\n * CRITICAL: stdout is reserved for the MCP JSON-RPC stream when the\n * server runs over stdio transport. Anything written to stdout that\n * is not a valid JSON-RPC message corrupts the protocol and the\n * client disconnects.\n *\n * Every log line goes to stderr. There are no exceptions.\n */\nimport pino, { type Logger } from 'pino';\n\nexport interface LogContext {\n debug?: boolean;\n}\n\n/**\n * Build a stderr-destined logger.\n *\n * Pass `debug: true` (or set `VECTROS_MCP_DEBUG=1`) to lower the\n * level to `debug`. Default is `info`.\n */\nexport function createLogger(ctx: LogContext = {}): Logger {\n const debugEnabled = ctx.debug ?? process.env.VECTROS_MCP_DEBUG === '1';\n // pino.destination(2) — file descriptor 2 = stderr. NOT stdout.\n return pino(\n {\n level: debugEnabled ? 'debug' : 'info',\n base: { component: '@vectros-ai/mcp-server' },\n timestamp: pino.stdTimeFunctions.isoTime,\n },\n pino.destination(2),\n );\n}\n\nexport type { Logger };\n","/**\n * Shared identity-resolution helper.\n *\n * Used by BOTH `current_identity` tool AND `identity` resource —\n * single source of truth for the graceful-degradation contract (see\n * the design doc § Identity & exploration →\n * current_identity + § \"Backend deliverables surfaced by MCP v0.2\").\n *\n * Bypasses the SDK because `client.auth.ping()` is typed\n * `Promise<void>` and discards the response body — see\n * src/tools/current_identity.ts header for the full reasoning.\n */\nimport type { Logger } from './log.js';\n\nexport interface IdentityShape {\n status: 'ok';\n environment?: 'staging' | 'production';\n principalType?: 'root_key' | 'scoped_key' | 'token';\n // Extended fields (present once backend ships extended /v1/ping):\n tenantId?: string;\n principalKeyId?: string;\n principalLabel?: string;\n allowedActions?: string[];\n dataScope?: { userId?: string; orgId?: string };\n tokenExpiresAt?: number;\n // Allow pass-through of any future backend-added fields without\n // requiring an MCP server release.\n [key: string]: unknown;\n}\n\nexport function deriveEnvironment(\n environment: string | undefined,\n): 'staging' | 'production' | undefined {\n if (!environment) return undefined;\n if (environment.includes('staging')) return 'staging';\n if (environment.includes('api.vectros.ai')) return 'production';\n return undefined;\n}\n\nexport function derivePrincipalType(\n apiKey: string | undefined,\n): 'root_key' | 'scoped_key' | 'token' | undefined {\n if (!apiKey) return undefined;\n const prefix = apiKey.split('_')[0];\n if (prefix === 'sk') return 'root_key';\n if (prefix === 'ssk') return 'scoped_key';\n if (prefix === 'st') return 'token';\n return undefined;\n}\n\nexport interface ResolveIdentityCtx {\n log: Logger;\n apiKey?: string;\n environment?: string;\n}\n\n/**\n * Resolve identity: raw GET /v1/ping + client-side derivation,\n * merged with extended-shape graceful-degradation semantics.\n *\n * Throws if /v1/ping returns non-2xx (auth failure or upstream).\n * Caller is responsible for wrapping into a tool/resource error.\n *\n * Returns the derived-only shape when apiKey or environment is\n * missing (e.g., test mocks omit them, or programmatic embedders\n * skip them).\n */\nexport async function resolveIdentity({\n log,\n apiKey,\n environment,\n}: ResolveIdentityCtx): Promise<IdentityShape> {\n const derived: IdentityShape = {\n status: 'ok',\n environment: deriveEnvironment(environment),\n principalType: derivePrincipalType(apiKey),\n };\n\n if (!apiKey || !environment) {\n log.debug({ component: 'identity', mode: 'derived-only' }, 'identity derived (no fetch)');\n return derived;\n }\n\n const url = `${environment.replace(/\\/$/, '')}/v1/ping`;\n const res = await fetch(url, {\n headers: { Authorization: `Bearer ${apiKey}` },\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => '');\n const e = new Error(`HTTP ${res.status}: ${body || res.statusText}`) as Error & {\n statusCode: number;\n };\n e.statusCode = res.status;\n throw e;\n }\n\n // Parse body if any. Old endpoint returns empty body; extended\n // endpoint returns identity JSON.\n let extended: Record<string, unknown> = {};\n const rawBody = await res.text();\n if (rawBody.trim().length > 0) {\n try {\n extended = JSON.parse(rawBody) as Record<string, unknown>;\n } catch {\n log.debug(\n { component: 'identity', rawBodyLen: rawBody.length },\n 'identity: ping body not JSON, using derived shape only',\n );\n }\n }\n\n // Merge derived + extended. Extended fields override derived\n // (backend is authoritative once it ships them).\n const merged: IdentityShape = { ...derived, ...extended, status: 'ok' };\n\n log.debug(\n {\n component: 'identity',\n mode: rawBody.trim().length > 0 ? 'extended' : 'derived',\n fields: Object.keys(merged),\n },\n 'identity resolved',\n );\n\n return merged;\n}\n","/**\n * Base-URL validator — credential-exfil guard.\n *\n * `VECTROS_API_BASE_URL` flows unchecked into `resolveIdentity`, which sends\n * `Authorization: Bearer ${VECTROS_API_KEY}` to `${baseUrl}/v1/ping` — so an\n * attacker-supplied base URL exfiltrates the operator's API key (commonly a\n * root `sk_*`). Same vector the CLI has via the Cognito bearer.\n *\n * This validates the URL BEFORE the server attaches any credential:\n * - require `https://` — except `http://` to a loopback host (localhost/\n * 127.0.0.1/::1), for local proxying/dev;\n * - require the host to be an official Vectros host: `vectros.ai` or a\n * `*.vectros.ai` subdomain (strict suffix match — `api.vectros.ai.evil.com`\n * and `evilvectros.ai` are rejected);\n * - a loud, explicit opt-out (`VECTROS_ALLOW_INSECURE_BASE_URL=1`) permits\n * an arbitrary host for a trusted local proxy, AFTER a warning.\n *\n * Mirrors `packages/cli/src/base-url.ts`. Kept as a tiny per-package module\n * rather than a new shared workspace dependency. Warnings go to stderr (or an\n * injected logger) — NEVER stdout (stdio-transport purity).\n */\n\n/** The official Vectros apex + subdomain suffix. */\nconst ALLOWED_HOST_APEX = 'vectros.ai';\nconst ALLOWED_HOST_SUFFIX = '.vectros.ai';\n\n/** Env var that loudly opts out of the host allow-list (trusted local proxy). */\nexport const INSECURE_BASE_URL_ENV = 'VECTROS_ALLOW_INSECURE_BASE_URL';\n\n/** Thrown when a base URL fails validation. */\nexport class InvalidBaseUrlError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidBaseUrlError';\n }\n}\n\nexport interface ValidateBaseUrlOptions {\n /**\n * When true, permit any http/https host (loud opt-out). Defaults to reading\n * {@link INSECURE_BASE_URL_ENV} from the environment.\n */\n allowInsecure?: boolean;\n /** Sink for the loud opt-out warning. Defaults to stderr (stdout-purity). */\n warn?: (msg: string) => void;\n}\n\n/** localhost / 127.0.0.1 / ::1 (URL.hostname keeps IPv6 brackets). */\nfunction isLoopbackHost(hostname: string): boolean {\n const h = hostname.toLowerCase();\n return h === 'localhost' || h === '127.0.0.1' || h === '::1' || h === '[::1]';\n}\n\nfunction insecureOptOutFromEnv(): boolean {\n const v = (process.env[INSECURE_BASE_URL_ENV] ?? '').toLowerCase();\n return v === '1' || v === 'true' || v === 'yes';\n}\n\nfunction defaultWarn(msg: string): void {\n // stderr only — stdout carries the MCP protocol on the stdio transport.\n process.stderr.write(`${msg}\\n`);\n}\n\n/**\n * Validate a base URL and return it unchanged on success. Throws\n * {@link InvalidBaseUrlError} otherwise.\n */\nexport function validateBaseUrl(rawUrl: string, opts: ValidateBaseUrlOptions = {}): string {\n let url: URL;\n try {\n url = new URL(rawUrl);\n } catch {\n throw new InvalidBaseUrlError(\n `Invalid base URL ${JSON.stringify(rawUrl)} — not a parseable absolute URL ` +\n `(expected e.g. https://api.vectros.ai).`,\n );\n }\n\n const allowInsecure = opts.allowInsecure ?? insecureOptOutFromEnv();\n const scheme = url.protocol;\n // Strip a single trailing dot (the FQDN form `api.vectros.ai.` is a legit\n // alias of the real host) so the suffix/loopback checks treat them alike.\n const host = url.hostname.toLowerCase().replace(/\\.$/, '');\n const loopback = isLoopbackHost(host);\n\n if (allowInsecure) {\n if (scheme !== 'https:' && scheme !== 'http:') {\n throw new InvalidBaseUrlError(\n `Refusing base URL with scheme \"${scheme}\" — only http/https are supported.`,\n );\n }\n (opts.warn ?? defaultWarn)(\n `WARNING: ${INSECURE_BASE_URL_ENV} is set — sending Vectros credentials to ` +\n `UNVALIDATED host \"${url.host}\". This bypasses the base-URL allow-list and can leak ` +\n `your API key. Unset it unless you are intentionally proxying to a trusted local endpoint.`,\n );\n return rawUrl;\n }\n\n if (scheme === 'http:') {\n if (!loopback) {\n throw new InvalidBaseUrlError(\n `Refusing insecure http:// base URL for non-loopback host \"${url.host}\". ` +\n `Use https:// (or set ${INSECURE_BASE_URL_ENV}=1 to override for a trusted local proxy).`,\n );\n }\n return rawUrl;\n }\n if (scheme !== 'https:') {\n throw new InvalidBaseUrlError(\n `Refusing base URL with scheme \"${scheme}\" — only https:// (or http:// to localhost) is allowed.`,\n );\n }\n\n if (loopback) return rawUrl;\n if (host === ALLOWED_HOST_APEX || host.endsWith(ALLOWED_HOST_SUFFIX)) {\n return rawUrl;\n }\n\n throw new InvalidBaseUrlError(\n `Refusing base URL host \"${url.host}\" — not an official Vectros host (expected vectros.ai ` +\n `or a *.vectros.ai subdomain). Set ${INSECURE_BASE_URL_ENV}=1 to override (e.g. for a ` +\n `trusted local proxy); never point the MCP server at an untrusted host while authenticated.`,\n );\n}\n","/**\n * hybrid_search — wraps `client.search.content(...)` → `POST /v1/search`.\n *\n * MCP-specific limits (smaller than the underlying API defaults):\n * default limit = 3\n * max limit = 10\n *\n * Why: a tool's JSON result is injected directly into the LLM's\n * context window. The API default of 10 hits × ~1k tokens of\n * contextText each = 10k tokens injected per call. With the API max\n * of 50, that's 50k tokens — blows past most model windows and costs\n * the user a fortune. See the design doc § \"Token economy\".\n *\n * Agents that need more results paginate via `offset`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst MCP_DEFAULT_LIMIT = 3;\nconst MCP_MAX_LIMIT = 10;\n\nconst inputSchema = {\n query: z.string().min(1, 'query must be non-empty').describe('Natural-language or keyword query.'),\n mode: z\n .enum(['HYBRID', 'TEXT', 'SEMANTIC'])\n .optional()\n .describe('HYBRID (BM25 + dense, default), TEXT (BM25 only), or SEMANTIC (dense only).'),\n textMode: z\n .enum(['OR', 'AND', 'PHRASE'])\n .optional()\n .describe(\n 'Keyword-match precision for the BM25 leg (TEXT/HYBRID modes). OR = any term (broad recall), ' +\n 'AND = all terms (higher precision), PHRASE = contiguous phrase. Default: PHRASE (slop 3) in HYBRID, ' +\n 'OR in TEXT. (The advanced raw-query COMPLEX mode is intentionally not exposed here.)',\n ),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(\n `Max hits to return. MCP-specific cap of ${MCP_MAX_LIMIT} (vs API max of 50) to protect ` +\n 'the agent context window. Default 3. Use offset for pagination.',\n ),\n offset: z.number().int().min(0).optional().describe('Skip the first N hits — for pagination.'),\n folderId: z.string().optional().describe('Scope to content in this EXACT folder (Vectros folder id).'),\n rootFolderId: z\n .string()\n .optional()\n .describe('Scope to content under this folder AND all its descendants (subtree-root folder id).'),\n // Content narrowing.\n contentTypes: z\n .array(z.enum(['documents', 'records']))\n .optional()\n .describe('Narrow to content types. [\"documents\"] or [\"records\"]; omit for unified (both).'),\n typeName: z\n .string()\n .optional()\n .describe('Restrict record hits to this schema type (e.g. \"patient\"). No-op for documents.'),\n filters: z\n .record(z.unknown())\n .optional()\n .describe(\n 'Field-level metadata filters (AND-combined). Value = scalar (equality), array (OR-set), or ' +\n 'operator map: $eq/$ne/$gt/$gte/$lt/$lte (scalar) or $in/$nin (array). ' +\n 'e.g. {\"status\":\"open\"} or {\"price\":{\"$gte\":100,\"$lte\":500}}.',\n ),\n // Ownership.\n userId: z.string().optional().describe('Restrict to content owned by this user (Vectros UUID).'),\n orgId: z.string().optional().describe('Restrict to content belonging to this org (Vectros UUID).'),\n clientId: z.string().optional().describe('Restrict to content associated with this client (Vectros UUID).'),\n // Date window.\n createdAfter: z\n .string()\n .optional()\n .describe('Restrict to content created at/after this ISO 8601 UTC timestamp.'),\n createdBefore: z\n .string()\n .optional()\n .describe('Restrict to content created at/before this ISO 8601 UTC timestamp.'),\n // Relevance tuning.\n minSimilarity: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('Minimum semantic similarity (0.0–1.0); results below are excluded.'),\n minTextRelevance: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('Minimum relative keyword (BM25) relevance (0.0–1.0); the keyword-leg analogue of minSimilarity.'),\n uniqueDocuments: z\n .boolean()\n .optional()\n .describe('When true, return at most one chunk per source document.'),\n requireComplete: z\n .boolean()\n .optional()\n .describe(\n 'When true, fail closed (HTTP 503) if a search backend is unavailable rather than silently returning ' +\n 'partial/degraded results. Default false (degrade to the surviving engine; the result still flags degraded).',\n ),\n};\n\nconst hybridSearch: ToolFactory = ({ client, log }) => ({\n name: 'hybrid_search',\n title: 'Hybrid search',\n description:\n 'Search the partner tenant\\'s indexed content (documents + structured records) using hybrid BM25 + dense ranking. ' +\n 'Returns up to 10 results (default 3) with citations and surrounding context for grounding follow-up reasoning. ' +\n 'Narrow with contentTypes/typeName/filters, ownership (userId/orgId/clientId), folder scope, a created date window, ' +\n 'keyword precision (textMode OR/AND/PHRASE), relevance floors (minSimilarity/minTextRelevance), uniqueDocuments, ' +\n 'and requireComplete (fail closed on a degraded backend). Tenant-isolated; the caller\\'s scoped key fully ' +\n 'constrains which content is visible.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const mode = (args.mode as 'HYBRID' | 'TEXT' | 'SEMANTIC' | undefined) ?? 'HYBRID';\n try {\n const result = await client.search.content({\n query: args.query as string,\n mode,\n textMode: args.textMode as Vectros.SearchRequest.TextMode | undefined,\n limit,\n offset: args.offset as number | undefined,\n folderId: args.folderId as string | undefined,\n rootFolderId: args.rootFolderId as string | undefined,\n contentTypes: args.contentTypes as Vectros.SearchRequest.ContentTypes.Item[] | undefined,\n typeName: args.typeName as string | undefined,\n filters: args.filters as Record<string, Vectros.FilterValue> | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n createdAfter: args.createdAfter as string | undefined,\n createdBefore: args.createdBefore as string | undefined,\n minSimilarity: args.minSimilarity as number | undefined,\n minTextRelevance: args.minTextRelevance as number | undefined,\n uniqueDocuments: args.uniqueDocuments as boolean | undefined,\n requireComplete: args.requireComplete as boolean | undefined,\n });\n log.debug(\n { tool: 'hybrid_search', mode, limit, returned: result.results?.length },\n 'hybrid_search ok',\n );\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'hybrid_search', err: String(err) }, 'hybrid_search failed');\n return toolError('hybrid_search', err);\n }\n },\n});\n\nexport default hybridSearch;\n","/**\n * SSE-stream consumer with MCP progress emission.\n *\n * The Vectros SDK's inference methods (`client.inference.ragInference`,\n * `client.inference.documentAsk`) return `AsyncIterable<Event>` where\n * each event has shape:\n *\n * { event: 'search_results', ... } // rag only, fires first\n * { event: 'document_context', ... } // document_ask only, fires first\n * { event: 'content_delta', delta: '...' } // many; aggregate\n * { event: 'truncation_warning', ... } // optional\n * { event: 'done', inputTokens, outputTokens, model, ...credits }\n * { event: 'error', message: '...', code: '...' }\n *\n * NOTE (SDK 0.23): the delta field is `delta` (NOT `text`), and `done`\n * carries flat token/billing fields (NOT a nested `usage` object). Reading\n * the pre-0.23 names silently aggregates an EMPTY answer — the SDK stream is\n * consumed via an `as` cast so tsc can't catch the drift; only a live smoke\n * does. See tests/03-rag-ask + tests/11 against staging.\n *\n * This helper:\n * 1. Iterates the stream.\n * 2. Aggregates `content_delta.delta` into a single answer string.\n * 3. Captures the once-only events (`search_results`,\n * `document_context`, `truncation_warning`, `done`) into the\n * result envelope (`done` minus its discriminator → `usage`).\n * 4. Emits each `content_delta` as an MCP progress notification\n * via the `onProgress` callback so the MCP client doesn't\n * timeout the tool call on a 30-45s RAG generation. See\n * the design doc § \"Long-running tool calls\".\n *\n * The helper is decoupled from the MCP SDK — the `onProgress`\n * callback is wired by the tool implementation against the\n * RequestHandlerExtra.sendNotification API.\n */\n\nexport type SseEvent =\n | { event: 'search_results'; [k: string]: unknown }\n | { event: 'document_context'; [k: string]: unknown }\n | { event: 'content_delta'; delta: string }\n | { event: 'truncation_warning'; [k: string]: unknown }\n | { event: 'done'; [k: string]: unknown }\n | { event: 'error'; message?: string; [k: string]: unknown };\n\nexport interface AggregatedResult {\n /** Full concatenated text from all `content_delta` events. */\n answer: string;\n /** The `search_results` event payload, if present (rag_ask only). */\n searchResults?: Record<string, unknown>;\n /** The `document_context` event payload, if present (document_ask only). */\n documentContext?: Record<string, unknown>;\n /** The `truncation_warning` event payload, if present. */\n truncationWarning?: Record<string, unknown>;\n /** The `done` event payload (token + billing fields), if present. */\n usage?: Record<string, unknown>;\n}\n\nexport type ProgressEmitter = (chunk: { text: string; total: number }) => void | Promise<void>;\n\nexport class StreamError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'StreamError';\n }\n}\n\n/**\n * Consume an SSE-event stream, emit progress notifications per\n * `content_delta`, and return the aggregated result envelope.\n *\n * @param stream AsyncIterable from `client.inference.ragInference`\n * or `client.inference.documentAsk`.\n * @param onProgress Called once per `content_delta` event. The\n * `total` field is the running cumulative character\n * count of the answer buffer (useful for MCP\n * progress percent if the client wants it).\n * If omitted, no progress notifications are\n * emitted (handy for tests).\n *\n * @throws StreamError if the stream emits an `event: 'error'` event.\n */\nexport async function consumeStream<T extends SseEvent>(\n stream: AsyncIterable<T>,\n onProgress?: ProgressEmitter,\n): Promise<AggregatedResult> {\n let answer = '';\n let searchResults: Record<string, unknown> | undefined;\n let documentContext: Record<string, unknown> | undefined;\n let truncationWarning: Record<string, unknown> | undefined;\n let usage: Record<string, unknown> | undefined;\n\n for await (const ev of stream) {\n switch (ev.event) {\n case 'search_results': {\n const { event: _e, ...rest } = ev;\n searchResults = rest;\n break;\n }\n case 'document_context': {\n const { event: _e, ...rest } = ev;\n documentContext = rest;\n break;\n }\n case 'content_delta': {\n // SDK 0.23: the chunk field is `delta` (was `text` pre-0.23).\n const delta = (ev as { delta?: string }).delta ?? '';\n answer += delta;\n if (onProgress) {\n await onProgress({ text: delta, total: answer.length });\n }\n break;\n }\n case 'truncation_warning': {\n const { event: _e, ...rest } = ev;\n truncationWarning = rest;\n break;\n }\n case 'done': {\n // SDK 0.23: `done` carries flat token/billing fields (inputTokens,\n // outputTokens, model, …credits) — not a nested `usage`. Capture the\n // whole payload minus the discriminator.\n const { event: _e, ...rest } = ev;\n usage = rest;\n break;\n }\n case 'error': {\n const message = (ev as { message?: string }).message ?? 'Unknown stream error';\n throw new StreamError(message);\n }\n }\n }\n\n return { answer, searchResults, documentContext, truncationWarning, usage };\n}\n","/**\n * Shared error-to-tool-result formatting.\n *\n * All tool errors map to MCP `isError: true` responses — never\n * thrown out of the handler. This keeps the JSON-RPC stream clean\n * and lets the agent recover from a tool failure rather than the\n * MCP client tearing down the whole session.\n */\nimport type { ToolResult } from './types.js';\nimport { StreamError } from '../sse.js';\n\ninterface VectrosErrorShape {\n statusCode?: number;\n message?: string;\n name?: string;\n}\n\n/**\n * Format an unknown error into a tool result. Pulls out the\n * Vectros SDK error code + message if present.\n *\n * @param toolName for log + result framing\n * @param err the thrown value (Error or unknown)\n * @param docPointer optional URL to surface for partner-actionable errors\n */\nexport function toolError(toolName: string, err: unknown, docPointer?: string): ToolResult {\n let summary = `${toolName} failed`;\n let detail = String(err);\n\n if (err instanceof StreamError) {\n summary = `${toolName} stream error`;\n detail = err.message;\n } else if (err instanceof Error) {\n const e = err as Error & VectrosErrorShape;\n detail = e.message;\n if (e.statusCode) {\n summary = `${toolName} failed: HTTP ${e.statusCode}`;\n } else if (e.name && e.name !== 'Error') {\n summary = `${toolName} failed: ${e.name}`;\n }\n }\n\n const pointer = docPointer ? `\\n\\nSee: ${docPointer}` : '';\n\n return {\n isError: true,\n content: [\n {\n type: 'text',\n text: `${summary}\\n${detail}${pointer}`,\n },\n ],\n };\n}\n","/**\n * record_query — read structured records, two modes (auto-detected by args):\n *\n * field present → LOOKUP on a lookup-indexed field, one of:\n * • equality: `value`\n * • range: `from` + `to`\n * • prefix: `prefix`\n * no field → LIST by type (+ optional ownership filters)\n *\n * Lookups route through `lookupRecordsByBody` (POST /v1/records/lookup), NOT the\n * GET variant: the POST body supports equality/range/prefix uniformly, is the\n * REQUIRED path for SENSITIVE lookup fields (the GET variant 400s — the value\n * can't ride the URL query string), and never leaks values into access/proxy\n * logs. One path, no GET/POST branching, no sensitivity sniffing.\n *\n * MCP-specific limits (smaller than the API defaults): default 3 / max 10 —\n * records inject directly into the agent context window (token economy; see\n * the design doc § \"Token economy\"). The MCP `limit` is the cap:\n * one page returns at most `limit` records, so there is no hidden truncation\n * beyond the documented ceiling. Cursor pagination past the first page is\n * intentionally not exposed.\n *\n * SDK 0.23 returns the `{ data, nextCursor }` page envelope; we unwrap to the\n * bare `RecordResponse[]` (the v0.1/v0.2 agent contract) via `pageItems`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems } from '../paging.js';\n\nconst MCP_DEFAULT_LIMIT = 3;\nconst MCP_MAX_LIMIT = 10;\n\nconst inputSchema = {\n type: z\n .string()\n .min(1, 'type (record type) is required')\n .describe('Record type / schema name (e.g. \"patient\", \"clinical_note\").'),\n // Lookup-mode args — provide `field` plus EXACTLY ONE of: value | from+to | prefix.\n field: z\n .string()\n .optional()\n .describe('Lookup mode: name of the lookup-indexed field to query by.'),\n value: z.string().optional().describe('Lookup mode (equality): exact-match value for `field`.'),\n from: z\n .string()\n .optional()\n .describe('Lookup mode (range): inclusive lower bound; requires `to`. Non-sensitive fields only.'),\n to: z\n .string()\n .optional()\n .describe('Lookup mode (range): inclusive upper bound; requires `from`.'),\n prefix: z\n .string()\n .optional()\n .describe('Lookup mode (prefix): match values starting with this. String, non-sensitive fields only.'),\n order: z\n .enum(['asc', 'desc'])\n .optional()\n .describe(\n 'Lookup mode: sort direction by the looked-up field. `asc` (default) or `desc` — use `desc` with a range/' +\n 'prefix lookup to get the most-recent / highest values first (e.g. latest-N). Ignored in list mode.',\n ),\n // List-mode args:\n userId: z.string().optional().describe('List mode: scope to records owned by this user.'),\n orgId: z.string().optional().describe('List mode: scope to records owned by this org.'),\n clientId: z.string().optional().describe('List mode: scope to records associated with this client.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(\n `Max records to return. MCP-specific cap of ${MCP_MAX_LIMIT} (vs API max of 100) ` +\n 'to protect the agent context window. Default 3.',\n ),\n};\n\nconst recordQuery: ToolFactory = ({ client, log }) => ({\n name: 'record_query',\n title: 'Record query (list or lookup)',\n description:\n 'Query structured records of a given type. Two modes:\\n' +\n ' • Lookup on a lookup-indexed field: pass `field` plus exactly one of `value` (exact), ' +\n '`from`+`to` (range), or `prefix`. Works on sensitive fields too.\\n' +\n ' • List by type: omit `field`; optionally filter by `userId`/`orgId`/`clientId`.\\n' +\n 'Returns up to 10 records (default 3). Mode is auto-detected from the arguments present.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const type = args.type as string;\n const field = args.field as string | undefined;\n const value = args.value as string | undefined;\n const from = args.from as string | undefined;\n const to = args.to as string | undefined;\n const prefix = args.prefix as string | undefined;\n try {\n let records: Vectros.RecordResponse[];\n if (field) {\n // Lookup mode — validate exactly one lookup shape was supplied.\n const hasEquality = value !== undefined;\n const hasRange = from !== undefined || to !== undefined;\n const hasPrefix = prefix !== undefined;\n const modes = Number(hasEquality) + Number(hasRange) + Number(hasPrefix);\n if (modes === 0) {\n return toolError(\n 'record_query',\n new Error(\n `lookup on field '${field}' needs one of: 'value' (exact), 'from'+'to' (range), or 'prefix'.`,\n ),\n );\n }\n if (modes > 1) {\n return toolError(\n 'record_query',\n new Error(\"'value', 'from'/'to', and 'prefix' are mutually exclusive — provide exactly one.\"),\n );\n }\n if (hasRange && !(from !== undefined && to !== undefined)) {\n return toolError('record_query', new Error(\"range lookup requires both 'from' and 'to'.\"));\n }\n // POST-body lookup: sensitive-safe (value never in the URL), all modes in one path.\n const page = await client.records.lookupRecordsByBody({\n type,\n field,\n value,\n from,\n to,\n prefix,\n order: args.order as 'asc' | 'desc' | undefined,\n limit,\n });\n records = pageItems(page);\n log.debug(\n { tool: 'record_query', mode: 'lookup', type, field, returned: records.length },\n 'record_query lookup ok',\n );\n } else {\n // List mode — filter by ownership + type.\n const page = await client.records.listRecords({\n type,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n limit,\n });\n records = pageItems(page);\n log.debug(\n { tool: 'record_query', mode: 'list', type, limit, returned: records.length },\n 'record_query list ok',\n );\n }\n return {\n content: [{ type: 'text', text: JSON.stringify(records, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'record_query', err: String(err) }, 'record_query failed');\n return toolError('record_query', err);\n }\n },\n});\n\nexport default recordQuery;\n","/**\n * Pagination helpers for the `{ data, nextCursor }` page envelope.\n *\n * As of SDK 0.23 (surface-freeze), the\n * list/lookup partner-API methods — `schemas.listSchemas`,\n * `records.listRecords`, `records.lookupRecords` — return this paged envelope\n * rather than a bare array. The MCP tools serialize their result straight into\n * the agent's context window, so we unwrap the envelope here to keep the\n * agent-facing output a flat array (the v0.1/v0.2 contract) and absorb the\n * shape change in exactly one, unit-tested place.\n *\n * These are pure helpers (no SDK/IO coupling — the caller injects the\n * page-fetcher), so they're the unit-test target rather than the tool\n * handlers' SDK plumbing.\n */\n\n/** The paged-response envelope: a page of items + an opaque next-page cursor. */\nexport interface Page<T> {\n /** Items on this page, in the endpoint's natural order. Empty (or absent) when no results. */\n data?: T[] | undefined;\n /** Opaque cursor for the next page; null/absent when no more pages remain. Treat as opaque. */\n nextCursor?: (string | null) | undefined;\n}\n\n/** Unwrap a single page to its items — the agent-facing bare array. */\nexport function pageItems<T>(page: Page<T>): T[] {\n return page.data ?? [];\n}\n\n/**\n * Drain every page of a cursor-paginated endpoint into one flat array.\n *\n * `fetchPage(startFrom)` fetches a single page; the previous page's\n * `nextCursor` is fed back as the next `startFrom`. The loop terminates on a\n * FALSY `nextCursor` (null / undefined / empty string) — never on an empty\n * `data` array. That distinction matters: terminating on page *fullness*\n * instead of cursor *nullity* is exactly the bug that infinite-loops the old\n * `getAllResults()`-style iterators under the 0.23 null-cursor semantics\n * (a non-full final page legitimately carries a null cursor).\n */\nexport async function drainPages<T>(\n fetchPage: (startFrom?: string) => Promise<Page<T>>,\n): Promise<T[]> {\n const all: T[] = [];\n let startFrom: string | undefined;\n for (;;) {\n const page = await fetchPage(startFrom);\n if (page.data?.length) all.push(...page.data);\n const next = page.nextCursor;\n if (!next) break;\n startFrom = next;\n }\n return all;\n}\n","/**\n * record_get — fetch one structured record by id, including its full payload.\n * Wraps `client.records.getRecord()`.\n *\n * Complements record_query / hybrid_search (which return the indexed\n * projection): use record_get when you have an id and need the complete record.\n * A very large payload is truncated to protect the agent context window — the\n * same token-economy guard document_get applies to document text. When that\n * happens the structured `payload` is dropped and replaced with a `payloadPreview`\n * string + `payloadTruncated: true` + `payloadTotalChars`, so the truncated value\n * is never an invalid-JSON string masquerading as the object payload.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\n// ~8k tokens; mirrors document_get's text cap.\nconst MAX_PAYLOAD_CHARS = 32_000;\n\nconst inputSchema = {\n id: z\n .string()\n .min(1, 'id is required')\n .describe('The Vectros record id (e.g. from record_query or hybrid_search).'),\n};\n\nconst recordGet: ToolFactory = ({ client, log }) => ({\n name: 'record_get',\n title: 'Get a record by id',\n description:\n 'Fetch a single structured record by its Vectros id, including the full payload. ' +\n 'Use after record_query / hybrid_search surfaces an id and you need the complete record. ' +\n 'Very large payloads are truncated to protect the agent context window.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n try {\n const record = await client.records.getRecord({ id });\n const out: Record<string, unknown> = { ...record };\n if (record.payload !== undefined) {\n const json = JSON.stringify(record.payload);\n if (json.length > MAX_PAYLOAD_CHARS) {\n // Don't ship a sliced JSON string in the structured `payload` slot — it\n // would be invalid JSON and mislead a consumer that expects an object.\n // Mirror document_get's text handling: drop the oversized payload and\n // surface a clearly-labelled string preview + a truncation flag.\n delete out.payload;\n out.payloadPreview = json.slice(0, MAX_PAYLOAD_CHARS);\n out.payloadTruncated = true;\n out.payloadTotalChars = json.length;\n }\n }\n log.debug(\n { tool: 'record_get', id, truncated: out.payloadTruncated === true },\n 'record_get ok',\n );\n return { content: [{ type: 'text', text: JSON.stringify(out, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'record_get', id, err: String(err) }, 'record_get failed');\n return toolError('record_get', err);\n }\n },\n});\n\nexport default recordGet;\n","/**\n * record_create — create a structured record. Wraps `client.records.createRecord()`.\n *\n * The agent supplies the human-friendly `type` (typeName) and the server resolves\n * the schema from it (recordType is unique per tenant + context), so the agent\n * never carries schema ids and the tool makes a single round-trip — no schema\n * pre-fetch.\n *\n * Idempotent by `externalId`: re-creating with the same externalId returns the\n * existing record rather than duplicating.\n *\n * Requires the credential to allow `records:c` — a read-only key gets a clean\n * permission error (the tool never tears down the session).\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n type: z\n .string()\n .min(1, 'type is required')\n .describe('Record type / schema name (e.g. \"task\"). Must match an existing schema — see list_schemas.'),\n fields: z\n .record(z.string(), z.unknown())\n .describe(\n 'The record payload — a JSON object of field→value, validated against the type schema. ' +\n 'Call list_schemas to learn required fields, types, and enum values.',\n ),\n externalId: z\n .string()\n .optional()\n .describe(\n 'Stable caller-supplied id. Immutable; unique per type. Re-creating with the same externalId ' +\n 'returns the existing record (idempotent) — use it to make creates safely retryable.',\n ),\n indexMode: z\n .enum(['HYBRID', 'SEMANTIC', 'TEXT', 'NONE'])\n .optional()\n .describe(\n 'Search-index strategy for this record, set at create only (immutable after). HYBRID (BM25 + dense), ' +\n 'SEMANTIC (dense only), TEXT (BM25 only), NONE (store-only — never appears in hybrid_search/rag_ask; ' +\n 'still retrievable by id and structured-field lookup). Omit to inherit the type schema\\'s default; if ' +\n 'the schema default is NONE and you want this record searchable, set it here — it cannot be changed later.',\n ),\n status: z.string().optional().describe('Record lifecycle status. Defaults to ACTIVE server-side.'),\n folderId: z.string().optional().describe('Group this record into a folder.'),\n userId: z.string().optional().describe('Owning user id.'),\n orgId: z.string().optional().describe('Owning organization id.'),\n clientId: z.string().optional().describe('Associated client id.'),\n};\n\nconst recordCreate: ToolFactory = ({ client, log }) => ({\n name: 'record_create',\n title: 'Create a record',\n description:\n 'Create a structured record of a given type. Provide `type` and `fields` (the payload, validated ' +\n 'against the type schema — call list_schemas first to learn required fields and enums). Idempotent ' +\n 'by `externalId`. Requires the key to allow records:c.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const type = args.type as string;\n try {\n // The server resolves the schema from `typeName` — pass it directly, no\n // schemaId pre-fetch. An unknown type returns a clean 4xx from the API.\n const created = await client.records.createRecord({\n typeName: type,\n payload: args.fields as Record<string, unknown>,\n externalId: args.externalId as string | undefined,\n indexMode: args.indexMode as 'HYBRID' | 'SEMANTIC' | 'TEXT' | 'NONE' | undefined,\n status: args.status as string | undefined,\n folderId: args.folderId as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n });\n log.debug({ tool: 'record_create', type, id: created.id }, 'record_create ok');\n return { content: [{ type: 'text', text: JSON.stringify(created, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'record_create', type, err: String(err) }, 'record_create failed');\n return toolError('record_create', err);\n }\n },\n});\n\nexport default recordCreate;\n","/**\n * record_update — update a record's fields. Wraps `client.records.patchRecord()`\n * (RFC-7386 JSON Merge Patch).\n *\n * The caller's `fields` are sent as the patch payload: the server DEEP-MERGES\n * them into the stored payload — keys you send overwrite (recursing into nested\n * objects), a key set to `null` is deleted, and keys you omit are preserved. No\n * read-modify-write and no race window (contrast the old GET-then-full-replace).\n * `typeName`/`schemaId` are immutable and must not be sent on a patch.\n *\n * Optimistic concurrency: pass the `version` you last read as `expectedVersion`.\n * If the record changed since, the server rejects with a 409 conflict — re-read\n * (record_get) and retry. Omit `expectedVersion` for last-write-wins.\n *\n * Requires the credential to allow `records:u`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n id: z.string().min(1, 'id is required').describe('The Vectros record id to update.'),\n fields: z\n .record(z.string(), z.unknown())\n .describe(\n 'Field→value changes DEEP-MERGED into the existing payload: keys you send overwrite (recursing into ' +\n 'nested objects), a key set to `null` is deleted, and unspecified fields are preserved.',\n ),\n status: z\n .string()\n .optional()\n .describe('Set the record lifecycle status (e.g. ARCHIVED) — archive/workflow without physical deletion.'),\n expectedVersion: z\n .number()\n .int()\n .optional()\n .describe(\n 'Optimistic concurrency: the version you last read. If the record changed since, the update is ' +\n 'refused as a conflict (re-read and retry). Omit for last-write-wins.',\n ),\n};\n\nconst recordUpdate: ToolFactory = ({ client, log }) => ({\n name: 'record_update',\n title: 'Update a record',\n description:\n 'Update a record by id. The provided `fields` are DEEP-MERGED into the existing payload (unspecified ' +\n 'fields are preserved; a field set to `null` is deleted). Pass `expectedVersion` (the version you last ' +\n 'read) for safe concurrent edits — a stale update is refused (409). Use `status` to archive without ' +\n 'deleting. Requires the key to allow records:u.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n const fields = args.fields as Record<string, unknown>;\n const status = args.status as string | undefined;\n const expectedVersion = args.expectedVersion as number | undefined;\n try {\n // RFC-7386 merge-patch: send only what's changing. typeName/schemaId are\n // immutable and rejected if present, so they are intentionally omitted.\n const body: Vectros.RecordRequest = { payload: fields };\n if (status !== undefined) body.status = status;\n if (expectedVersion !== undefined) body.expectedVersion = expectedVersion;\n\n const updated = await client.records.patchRecord({ id, body });\n log.debug({ tool: 'record_update', id }, 'record_update ok');\n return { content: [{ type: 'text', text: JSON.stringify(updated, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'record_update', id, err: String(err) }, 'record_update failed');\n return toolError('record_update', err);\n }\n },\n});\n\nexport default recordUpdate;\n","/**\n * record_delete — permanently delete a record by id. Wraps\n * `client.records.deleteRecord()` (leaves a tombstone server-side).\n *\n * Scope-gated: the credential must allow `records:d`. A key without it gets a\n * clean permission error (the tool returns isError, never tears down the\n * session). The flagship blueprints deliberately omit records:d, so hard-delete\n * is dark there by default — for archive/soft-delete use record_update to set\n * the record `status` instead.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n id: z.string().min(1, 'id is required').describe('The Vectros record id to delete.'),\n};\n\nconst recordDelete: ToolFactory = ({ client, log }) => ({\n name: 'record_delete',\n title: 'Delete a record',\n description:\n 'Permanently delete a record by id (leaves a tombstone). Requires the key to allow records:d — a key ' +\n 'without it gets a permission error. To archive without deleting, use record_update to set status instead.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n try {\n await client.records.deleteRecord({ id });\n log.debug({ tool: 'record_delete', id }, 'record_delete ok');\n return { content: [{ type: 'text', text: JSON.stringify({ deleted: true, id }, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'record_delete', id, err: String(err) }, 'record_delete failed');\n return toolError('record_delete', err);\n }\n },\n});\n\nexport default recordDelete;\n","/**\n * rag_ask — wraps `client.inference.ragInference(...)` → `POST /v1/rag`.\n *\n * RAG generation can take 30-45s (longer with Opus). MCP clients\n * have tool-execution timeouts that fire well inside that window.\n *\n * Two mechanisms keep this tool reliable:\n * 1. SSE deltas are aggregated into a single final response (MCP\n * tools are request/response — they don't natively stream).\n * 2. Per `content_delta` we emit an MCP `notifications/progress`\n * to keep the JSON-RPC connection warm so the client doesn't\n * timeout the tool call before we return.\n *\n * See the design doc § \"Long-running tool calls\" for\n * the architectural rule.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { consumeStream, type SseEvent } from '../sse.js';\nimport { toolError } from './errors.js';\n\nconst SEARCH_MCP_DEFAULT_LIMIT = 5;\nconst SEARCH_MCP_MAX_LIMIT = 10;\n\nconst inputSchema = {\n query: z.string().min(1, 'query must be non-empty').describe('Question to ground against retrieved content.'),\n instructions: z\n .string()\n .optional()\n .describe(\n 'System prompt that overrides the default for the generation step — e.g. \"answer only from the provided ' +\n 'context, cite sources, be concise\". Default: a generic answer-from-context instruction.',\n ),\n model: z\n .string()\n .optional()\n .describe(\n 'Inference model alias (e.g. claude-haiku-4-5, claude-sonnet-4-6, claude-opus-4-8). ' +\n 'Default = tier-appropriate Haiku. See GET /v1/models for the catalog the calling key can reach.',\n ),\n search: z\n .object({\n mode: z.enum(['HYBRID', 'TEXT', 'SEMANTIC']).optional().describe('Retrieval mode. Default HYBRID.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(SEARCH_MCP_MAX_LIMIT)\n .optional()\n .describe(`Passages to retrieve before generating. Default ${SEARCH_MCP_DEFAULT_LIMIT}, max ${SEARCH_MCP_MAX_LIMIT}.`),\n // Retrieval scoping — parity with hybrid_search so an agent can ground the\n // answer on a specific owner / folder / type / metadata subset, not just the\n // whole-tenant corpus.\n userId: z.string().optional().describe('Restrict retrieval to content owned by this user (Vectros UUID).'),\n orgId: z.string().optional().describe('Restrict retrieval to content owned by this org (Vectros UUID).'),\n clientId: z.string().optional().describe('Restrict retrieval to content tagged with this client (Vectros UUID).'),\n folderId: z.string().optional().describe('Restrict retrieval to this exact folder.'),\n rootFolderId: z.string().optional().describe('Restrict retrieval to this folder and all its descendants.'),\n typeName: z.string().optional().describe('Restrict record retrieval to this schema type.'),\n contentTypes: z\n .array(z.enum(['documents', 'records']))\n .optional()\n .describe('Narrow retrieval to content types. [\"documents\"] or [\"records\"]; omit for both.'),\n filters: z\n .record(z.unknown())\n .optional()\n .describe(\n 'Field-level metadata filters (AND-combined). Value = scalar (equality), array (OR-set), or operator ' +\n 'map ($eq/$ne/$gt/$gte/$lt/$lte, $in/$nin). e.g. {\"status\":\"open\"}.',\n ),\n createdAfter: z.string().optional().describe('Restrict to content created at/after this ISO 8601 UTC timestamp.'),\n createdBefore: z.string().optional().describe('Restrict to content created at/before this ISO 8601 UTC timestamp.'),\n requireComplete: z\n .boolean()\n .optional()\n .describe('Fail closed (503) on a degraded search backend instead of grounding on partial results. Default false.'),\n })\n .optional()\n .describe('Retrieval params + scoping. Default mode HYBRID, limit ' + SEARCH_MCP_DEFAULT_LIMIT + '.'),\n maxTokens: z.number().int().min(1).optional().describe('Max output tokens.'),\n temperature: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('Sampling temperature (0.0–1.0). Default 0.3 — lower favors deterministic, retrieval-grounded answers.'),\n};\n\nconst ragAsk: ToolFactory = ({ client, log }) => ({\n name: 'rag_ask',\n title: 'RAG ask (corpus-wide)',\n description:\n 'Ask a question grounded against the partner tenant\\'s indexed content. ' +\n 'Vectros performs a hybrid search, injects the top-K passages into the prompt, ' +\n 'and streams a model answer back. Scope retrieval with `search` (ownership, folder, type, metadata filters, ' +\n 'date window) to ground on a subset — e.g. one patient or one folder — and steer generation with ' +\n '`instructions` / `temperature`. The full answer is returned as a single response; ' +\n 'progress notifications keep the call alive during the 30-45s generation window. ' +\n 'Inference runs in-perimeter against AWS Bedrock — PHI never leaves the BAA boundary.',\n inputSchema,\n handler: async (args, extra): Promise<ToolResult> => {\n try {\n const searchArg = (args.search ?? {}) as {\n mode?: 'HYBRID' | 'TEXT' | 'SEMANTIC';\n limit?: number;\n userId?: string;\n orgId?: string;\n clientId?: string;\n folderId?: string;\n rootFolderId?: string;\n typeName?: string;\n contentTypes?: Array<'documents' | 'records'>;\n filters?: Record<string, unknown>;\n createdAfter?: string;\n createdBefore?: string;\n requireComplete?: boolean;\n };\n const search: Vectros.RagSearch = {\n mode: searchArg.mode ?? 'HYBRID',\n limit: searchArg.limit ?? SEARCH_MCP_DEFAULT_LIMIT,\n userId: searchArg.userId,\n orgId: searchArg.orgId,\n clientId: searchArg.clientId,\n folderId: searchArg.folderId,\n rootFolderId: searchArg.rootFolderId,\n typeName: searchArg.typeName,\n contentTypes: searchArg.contentTypes as Vectros.RagSearch.ContentTypes.Item[] | undefined,\n filters: searchArg.filters as Record<string, Vectros.FilterValue> | undefined,\n createdAfter: searchArg.createdAfter,\n createdBefore: searchArg.createdBefore,\n requireComplete: searchArg.requireComplete,\n };\n const stream = (await client.inference.ragInference({\n query: args.query as string,\n instructions: args.instructions as string | undefined,\n model: args.model as string | undefined,\n search,\n maxTokens: args.maxTokens as number | undefined,\n temperature: args.temperature as number | undefined,\n })) as AsyncIterable<SseEvent>;\n\n const progressToken = extra._meta?.progressToken;\n const onProgress = progressToken !== undefined && extra.sendNotification\n ? async (chunk: { text: string; total: number }) => {\n await extra.sendNotification!({\n method: 'notifications/progress',\n params: {\n progressToken,\n progress: chunk.total,\n message: chunk.text,\n },\n });\n }\n : undefined;\n\n const aggregated = await consumeStream(stream, onProgress);\n\n log.debug(\n {\n tool: 'rag_ask',\n answerLength: aggregated.answer.length,\n usage: aggregated.usage,\n },\n 'rag_ask ok',\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n answer: aggregated.answer,\n searchResults: aggregated.searchResults,\n truncationWarning: aggregated.truncationWarning,\n usage: aggregated.usage,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n log.warn({ tool: 'rag_ask', err: String(err) }, 'rag_ask failed');\n return toolError(\n 'rag_ask',\n err,\n 'https://docs.vectros.ai/feature-inference#known-limitations',\n );\n }\n },\n});\n\nexport default ragAsk;\n","/**\n * document_ask — wraps `client.inference.documentAsk(...)` →\n * `POST /v1/documents/{id}/ask`.\n *\n * Same SSE-aggregation + progress-notifications pattern as rag_ask.\n * See sibling file for full architectural commentary.\n *\n * Differences vs rag_ask:\n * - Scoped to a single document, not a corpus\n * - No `search_results` event; emits `document_context` instead\n * - Returns structured 413 on documents exceeding the 32k-input-token cap\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { consumeStream, type SseEvent } from '../sse.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n documentId: z.string().min(1, 'documentId is required').describe('ID of the document to ask against.'),\n prompt: z.string().min(1, 'prompt is required').describe('Question to ask about the document.'),\n model: z\n .string()\n .optional()\n .describe(\n 'Inference model alias. Default = tier-appropriate Haiku. ' +\n 'See GET /v1/models for the catalog the calling key can reach.',\n ),\n maxTokens: z.number().int().min(1).optional().describe('Max output tokens.'),\n};\n\nconst documentAsk: ToolFactory = ({ client, log }) => ({\n name: 'document_ask',\n title: 'Document ask (single-document)',\n description:\n 'Ask a question against a single indexed document. Returns a grounded answer with the document context that informed it. ' +\n 'For documents exceeding the input-token cap, the API returns a structured 413 with `estimatedTokens` and `limitTokens`. ' +\n 'Inference runs in-perimeter against AWS Bedrock — PHI never leaves the BAA boundary.',\n inputSchema,\n handler: async (args, extra): Promise<ToolResult> => {\n try {\n const stream = (await client.inference.documentAsk({\n id: args.documentId as string,\n prompt: args.prompt as string,\n model: args.model as string | undefined,\n maxTokens: args.maxTokens as number | undefined,\n })) as AsyncIterable<SseEvent>;\n\n const progressToken = extra._meta?.progressToken;\n const onProgress = progressToken !== undefined && extra.sendNotification\n ? async (chunk: { text: string; total: number }) => {\n await extra.sendNotification!({\n method: 'notifications/progress',\n params: {\n progressToken,\n progress: chunk.total,\n message: chunk.text,\n },\n });\n }\n : undefined;\n\n const aggregated = await consumeStream(stream, onProgress);\n\n log.debug(\n {\n tool: 'document_ask',\n documentId: args.documentId,\n answerLength: aggregated.answer.length,\n usage: aggregated.usage,\n },\n 'document_ask ok',\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n answer: aggregated.answer,\n documentContext: aggregated.documentContext,\n usage: aggregated.usage,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n log.warn({ tool: 'document_ask', err: String(err) }, 'document_ask failed');\n return toolError(\n 'document_ask',\n err,\n 'https://docs.vectros.ai/feature-inference#known-limitations',\n );\n }\n },\n});\n\nexport default documentAsk;\n","/**\n * list_schemas — wraps `client.schemas.listSchemas()` → `GET /v1/schemas`.\n *\n * Makes `record_query` discoverable: the agent calls `list_schemas`\n * first to learn what record types exist (and which fields are\n * lookup-indexed for exact-match queries), then constructs a valid\n * `record_query` call against one of them.\n *\n * Args are optional ownership filters that pass through to the SDK.\n * Default behavior (no args) returns every schema the credential can\n * see — scoped by AccessProfile for `ssk_*` keys.\n *\n * As of SDK 0.23 `listSchemas` returns the `{ data, nextCursor }` page\n * envelope (page size 20, server-capped at 100) — not a bare array. We\n * DRAIN every page (schemas are small metadata objects; the full catalog\n * fits agent context) and serialize the flat `SchemaResponse[]`, preserving\n * the v0.1/v0.2 bare-array agent contract across the envelope change. See\n * src/paging.ts.\n *\n * No MCP-specific result cap applies — unlike record_query/hybrid_search,\n * the full schema catalog is the point of this tool.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { drainPages } from '../paging.js';\n\nconst inputSchema = {\n userId: z\n .string()\n .optional()\n .describe(\n 'Filter to schemas visible to a specific user. Optional; default returns all schemas the credential can see.',\n ),\n orgId: z\n .string()\n .optional()\n .describe(\n 'Filter to schemas visible to a specific org. Optional; default returns all schemas the credential can see.',\n ),\n surface: z\n .enum(['record', 'document', 'user', 'org', 'client'])\n .optional()\n .describe(\n 'Filter to schemas bindable to this surface — e.g. `document` to list only document types, or `record` ' +\n 'for record types. The identity surfaces (user/org/client) are account-wide. Optional.',\n ),\n recordType: z\n .string()\n .optional()\n .describe(\n 'Resolve the single schema for this record type (its natural handle, e.g. \"patient\") instead of listing — ' +\n 'returns a one-element result, or empty if none. Combine with `surface=user|org|client` for an identity ' +\n 'schema. Takes precedence over userId/orgId. Optional.',\n ),\n};\n\nconst listSchemas: ToolFactory = ({ client, log }) => ({\n name: 'list_schemas',\n title: 'List record schemas',\n description:\n 'List the structured-record schema catalog for the partner tenant. ' +\n 'Each schema describes a record type (e.g. \"patient\", \"clinical_note\") — its fields, lookup-indexed fields, and capabilities. ' +\n 'Use this to discover what record types exist before calling `record_query`. ' +\n 'Filter with `surface` (record/document/user/org/client — e.g. only document types), `recordType` (resolve ' +\n 'one schema by its type name), or `userId`/`orgId`; default returns everything the credential can see.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const userId = args.userId as string | undefined;\n const orgId = args.orgId as string | undefined;\n const surface = args.surface as 'record' | 'document' | 'user' | 'org' | 'client' | undefined;\n const recordType = args.recordType as string | undefined;\n try {\n // Drain the paged envelope into the full catalog (flat array).\n const schemas = await drainPages<Vectros.SchemaResponse>((startFrom) =>\n client.schemas.listSchemas({ userId, orgId, surface, recordType, startFrom }),\n );\n log.debug(\n { tool: 'list_schemas', userId, orgId, surface, recordType, returned: schemas.length },\n 'list_schemas ok',\n );\n return {\n content: [{ type: 'text', text: JSON.stringify(schemas, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'list_schemas', err: String(err) }, 'list_schemas failed');\n return toolError('list_schemas', err);\n }\n },\n});\n\nexport default listSchemas;\n","/**\n * document_get — wraps `client.documents.getDocument({id})` plus\n * (optionally) `client.documents.getDocumentText({id})` and/or\n * `client.documents.getDocumentDownloadUrl({id})`.\n *\n * Returns document metadata, optionally with full text inline and/or a\n * presigned download URL for the original file.\n *\n * MCP-specific text truncation: when `includeText: true`, the text\n * is capped at ~8,000 tokens (≈ 32,000 chars at the standard\n * 4-chars-per-token English heuristic). Caps the agent's context\n * burn from a single tool call and forces the agent toward\n * `document_ask` for question-driven extraction on large documents.\n * Truncation surfaces as `truncated: true` in the response.\n *\n * `getDocumentText` returns 404 when the document was ingested\n * without `storeText: true`. We handle this gracefully — surface\n * `textAvailable: false` in the response so the agent knows\n * `document_ask` is the right next step instead of returning isError.\n *\n * See the design doc § Documents → document_get.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\n// ~8K tokens at 4 chars/token (rough English heuristic). Conservative\n// — better to truncate slightly early than to blow past an agent's\n// context window mid-tool-call.\nconst MAX_TEXT_CHARS = 32_000;\n\nconst inputSchema = {\n documentId: z\n .string()\n .min(1, 'documentId is required')\n .describe('The document ID returned by document_ingest or hybrid_search.'),\n includeText: z\n .boolean()\n .optional()\n .describe(\n 'If true, fetch and include the document text (capped at ~8K tokens, truncated: true flag if cut). ' +\n 'Default false — metadata only. For larger documents, prefer `document_ask` over dumping text into context.',\n ),\n includeDownloadUrl: z\n .boolean()\n .optional()\n .describe(\n 'If true, also return a short-lived presigned `downloadUrl` for the original file (file-backed documents ' +\n 'only — the way to retrieve the raw bytes of a document ingested via file mode). Default false. ' +\n 'Unavailable for text-only documents — `downloadAvailable: false` is set instead.',\n ),\n};\n\nfunction truncateText(text: string): { text: string; truncated: boolean } {\n if (text.length <= MAX_TEXT_CHARS) return { text, truncated: false };\n return { text: text.slice(0, MAX_TEXT_CHARS), truncated: true };\n}\n\n/**\n * Is this a \"the document has no retrievable file/text\" response rather than a\n * real error? getDocumentText 404s when ingested without storeText; a download\n * URL is 404/400 for a text-only (non-file) document. Both mean \"not available\n * for this document\", which we surface as a flag rather than isError.\n */\nfunction isNotAvailable(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const e = err as Error & { statusCode?: number };\n return e.statusCode === 404 || e.statusCode === 400;\n}\n\nconst documentGet: ToolFactory = ({ client, log }) => ({\n name: 'document_get',\n title: 'Get document metadata (and optionally text)',\n description:\n 'Fetch metadata for a single document by id. Pass `includeText: true` to also fetch the text body ' +\n '(capped at ~8K tokens; `truncated: true` flag if cut). If the document was ingested without ' +\n '`storeText: true`, text is unavailable — `textAvailable: false` flag is set and the agent should ' +\n 'use `document_ask` for question-driven extraction instead. Pass `includeDownloadUrl: true` to also ' +\n 'get a short-lived presigned `downloadUrl` for the original file (file-backed documents only). ' +\n 'Returns full DocumentResponse from the SDK.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.documentId as string;\n const includeText = (args.includeText as boolean | undefined) ?? false;\n const includeDownloadUrl = (args.includeDownloadUrl as boolean | undefined) ?? false;\n\n try {\n const doc = await client.documents.getDocument({ id });\n\n let extra: Record<string, unknown> = {};\n\n if (includeText) {\n // Second call — swallow 404 gracefully (ingested without storeText).\n try {\n const textResponse = await client.documents.getDocumentText({ id });\n const rawText = textResponse?.text ?? '';\n const { text, truncated } = truncateText(rawText);\n extra = { ...extra, text, truncated, textAvailable: true };\n } catch (textErr) {\n if (isNotAvailable(textErr)) {\n log.debug(\n { tool: 'document_get', id },\n 'document_get text unavailable (ingested without storeText)',\n );\n extra = { ...extra, textAvailable: false };\n } else {\n throw textErr; // a real error — surface it\n }\n }\n }\n\n if (includeDownloadUrl) {\n // Presigned file URL — 404/400 for a text-only document (no backing file).\n try {\n const dl = await client.documents.getDocumentDownloadUrl({ id });\n extra = {\n ...extra,\n downloadUrl: dl?.downloadUrl,\n downloadExpires: dl?.expires,\n downloadFileType: dl?.fileType,\n downloadAvailable: true,\n };\n } catch (dlErr) {\n if (isNotAvailable(dlErr)) {\n log.debug({ tool: 'document_get', id }, 'document_get download unavailable (not a file document)');\n extra = { ...extra, downloadAvailable: false };\n } else {\n throw dlErr; // a real error — surface it\n }\n }\n }\n\n log.debug({ tool: 'document_get', id, includeText, includeDownloadUrl }, 'document_get ok');\n return {\n content: [\n { type: 'text', text: JSON.stringify(includeText || includeDownloadUrl ? { ...doc, ...extra } : doc, null, 2) },\n ],\n };\n } catch (err) {\n log.warn({ tool: 'document_get', id, err: String(err) }, 'document_get failed');\n return toolError('document_get', err);\n }\n },\n});\n\nexport default documentGet;\n","/**\n * document_query — read document metadata, two modes (auto-detected by args):\n *\n * field present → LOOKUP on a lookup-indexed field, one of:\n * • equality: `value`\n * • range: `from` + `to` (range-enabled fields)\n * • prefix: `prefix` (range-enabled string fields)\n * `type` (the document's bound schema type) is required here.\n * no field → LIST by folder / owner. `listDocuments` filters by folderId +\n * userId/orgId/clientId only (documents are typed via their\n * bound schema, so there is no `type` list filter).\n *\n * Lookups route through `lookupDocumentsByBody` (POST), NOT the GET variant: the\n * POST body supports equality/range/prefix uniformly, is REQUIRED for SENSITIVE\n * lookup fields (the GET variant 400s — the value can't ride the URL), and never\n * leaks values into access/proxy logs. One path, no GET/POST branching.\n *\n * MCP-specific limits (smaller than the API defaults): default 3 / max 10 —\n * document metadata injects directly into the agent context window (token\n * economy). The MCP `limit` is the cap: one page, at most `limit` documents.\n *\n * The `{ data, nextCursor }` page envelope (DocumentPage / DocumentLookupPage)\n * unwraps to the bare `DocumentResponse[]` via `pageItems`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems } from '../paging.js';\n\nconst MCP_DEFAULT_LIMIT = 3;\nconst MCP_MAX_LIMIT = 10;\n\nconst inputSchema = {\n // Lookup-mode args — provide `field` plus EXACTLY ONE of: value | from+to | prefix.\n field: z\n .string()\n .optional()\n .describe('Lookup mode: name of the lookup-indexed field to query by.'),\n value: z\n .string()\n .optional()\n .describe('Lookup mode (equality): exact-match value for `field`. Works on sensitive fields too.'),\n from: z\n .string()\n .optional()\n .describe('Lookup mode (range): inclusive lower bound; requires `to`. Range-enabled, non-sensitive fields only.'),\n to: z\n .string()\n .optional()\n .describe('Lookup mode (range): inclusive upper bound; requires `from`.'),\n prefix: z\n .string()\n .optional()\n .describe('Lookup mode (prefix): match values starting with this. Range-enabled string fields only.'),\n order: z\n .enum(['asc', 'desc'])\n .optional()\n .describe(\n 'Lookup mode: sort direction by the looked-up field. `asc` (default) or `desc` — use `desc` with a range/' +\n 'prefix lookup to get the most-recent / highest values first (e.g. latest-N). Ignored in list mode.',\n ),\n type: z\n .string()\n .optional()\n .describe('Lookup mode: the document type (the bound schema\\'s type). Required with `field`.'),\n // List-mode args:\n folderId: z.string().optional().describe('List mode: only documents in this folder (Vectros folder id).'),\n userId: z.string().optional().describe('List mode: scope to documents owned by this user.'),\n orgId: z.string().optional().describe('List mode: scope to documents belonging to this org.'),\n clientId: z.string().optional().describe('List mode: scope to documents associated with this client.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(\n `Max documents to return. MCP-specific cap of ${MCP_MAX_LIMIT} (vs API max of 100) ` +\n 'to protect the agent context window. Default 3.',\n ),\n};\n\nconst documentQuery: ToolFactory = ({ client, log }) => ({\n name: 'document_query',\n title: 'Document query (list or lookup)',\n description:\n 'Query document metadata. Two modes:\\n' +\n ' • Lookup on a lookup-indexed field: pass `type` and `field` plus exactly one of ' +\n '`value` (exact), `from`+`to` (range), or `prefix`. Works on sensitive fields ' +\n '(equality only there); range/prefix need a range-enabled field.\\n' +\n ' • List: omit `field`; optionally filter by `folderId`/`userId`/`orgId`/`clientId`.\\n' +\n 'Returns up to 10 documents (default 3) as a bare array. Mode is auto-detected. ' +\n 'Use document_get for the full text/download URL of one document.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const field = args.field as string | undefined;\n const value = args.value as string | undefined;\n const from = args.from as string | undefined;\n const to = args.to as string | undefined;\n const prefix = args.prefix as string | undefined;\n const type = args.type as string | undefined;\n try {\n let documents: Vectros.DocumentResponse[];\n if (field) {\n // Lookup mode — validate exactly one lookup shape, then require `type`.\n const hasEquality = value !== undefined;\n const hasRange = from !== undefined || to !== undefined;\n const hasPrefix = prefix !== undefined;\n const modes = Number(hasEquality) + Number(hasRange) + Number(hasPrefix);\n if (modes === 0) {\n return toolError(\n 'document_query',\n new Error(\n `lookup on field '${field}' needs one of: 'value' (exact), 'from'+'to' (range), or 'prefix'.`,\n ),\n );\n }\n if (modes > 1) {\n return toolError(\n 'document_query',\n new Error(\"'value', 'from'/'to', and 'prefix' are mutually exclusive — provide exactly one.\"),\n );\n }\n if (hasRange && !(from !== undefined && to !== undefined)) {\n return toolError('document_query', new Error(\"range lookup requires both 'from' and 'to'.\"));\n }\n if (type === undefined) {\n return toolError(\n 'document_query',\n new Error(\"lookup requires 'type' (the document's bound schema type) alongside 'field'.\"),\n );\n }\n // POST-body lookup: sensitive-safe (value never in the URL), all modes in one path.\n const page = await client.documents.lookupDocumentsByBody({\n type,\n field,\n value,\n from,\n to,\n prefix,\n order: args.order as 'asc' | 'desc' | undefined,\n limit,\n });\n documents = pageItems(page);\n log.debug(\n { tool: 'document_query', mode: 'lookup', type, field, returned: documents.length },\n 'document_query lookup ok',\n );\n } else {\n // List mode — filter by folder + ownership.\n const page = await client.documents.listDocuments({\n folderId: args.folderId as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n limit,\n });\n documents = pageItems(page);\n log.debug(\n { tool: 'document_query', mode: 'list', limit, returned: documents.length },\n 'document_query list ok',\n );\n }\n return { content: [{ type: 'text', text: JSON.stringify(documents, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'document_query', err: String(err) }, 'document_query failed');\n return toolError('document_query', err);\n }\n },\n});\n\nexport default documentQuery;\n","/**\n * document_update — update a document's metadata / typed payload. Wraps\n * `client.documents.patchDocument()` (RFC-7386 JSON Merge Patch).\n *\n * PATCH semantics (from the SDK contract):\n * • `payload`, when supplied, is DEEP-MERGED into the stored payload (keys you\n * send overwrite, a key set to `null` is deleted, omitted keys preserved) —\n * no read-modify-write, no wipe trap.\n * • Top-level fields (`title`, `folderId`, `storeText`, ownership) are set when\n * present and left unchanged when omitted.\n * • `indexMode`/`externalId` are immutable and rejected if present; `folderId`\n * can be SET but not cleared.\n *\n * Optimistic concurrency: pass the `version` you last read as `expectedVersion`.\n * If the document changed since, the server rejects with a 409 conflict (re-read\n * via document_get and retry). Omit `expectedVersion` for last-write-wins.\n *\n * Requires the credential to allow `documents:u`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n documentId: z.string().min(1, 'documentId is required').describe('The Vectros document id to update.'),\n title: z.string().optional().describe('New title. Omit to keep the current title.'),\n fields: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\n 'Typed-payload field→value changes DEEP-MERGED into the existing payload (a field set to `null` is ' +\n 'deleted; unspecified fields preserved). Omit to leave the payload unchanged.',\n ),\n folderId: z.string().optional().describe('Move the document into this folder (cannot be cleared once set).'),\n storeText: z.boolean().optional().describe('Whether the raw text is stored + retrievable.'),\n userId: z.string().optional().describe('Reassign the owning user (Vectros UUID).'),\n orgId: z.string().optional().describe('Reassign the owning org (Vectros UUID).'),\n clientId: z.string().optional().describe('Reassign the associated client (Vectros UUID).'),\n expectedVersion: z\n .number()\n .int()\n .optional()\n .describe(\n 'Optimistic concurrency: the version you last read. If the document changed since, the update is ' +\n 'refused as a conflict (re-read and retry). Omit for last-write-wins.',\n ),\n};\n\nconst documentUpdate: ToolFactory = ({ client, log }) => ({\n name: 'document_update',\n title: 'Update a document',\n description:\n 'Update a document by id. `fields` are DEEP-MERGED into the existing typed payload (unspecified fields ' +\n 'preserved; a field set to `null` is deleted); title/folderId/ownership are updated when provided and ' +\n 'preserved otherwise. Pass `expectedVersion` (the version you last read) for safe concurrent edits — a ' +\n 'stale update is refused (409). Requires the key to allow documents:u.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const documentId = args.documentId as string;\n const title = args.title as string | undefined;\n const fields = args.fields as Record<string, unknown> | undefined;\n const folderId = args.folderId as string | undefined;\n const storeText = args.storeText as boolean | undefined;\n const userId = args.userId as string | undefined;\n const orgId = args.orgId as string | undefined;\n const clientId = args.clientId as string | undefined;\n const expectedVersion = args.expectedVersion as number | undefined;\n try {\n // RFC-7386 merge-patch: send only what's changing. The server preserves\n // omitted top-level fields and deep-merges `payload`, so no read-modify-write\n // and no title-carry-forward is needed. `title` is omitted when the caller\n // isn't changing it; the shared DocumentRequest type marks it required (it is\n // for PUT), so the patch body is assembled untyped and cast at the call.\n const body: Record<string, unknown> = {};\n if (title !== undefined) body.title = title;\n if (fields !== undefined) body.payload = fields;\n if (folderId !== undefined) body.folderId = folderId;\n if (storeText !== undefined) body.storeText = storeText;\n if (userId !== undefined) body.userId = userId;\n if (orgId !== undefined) body.orgId = orgId;\n if (clientId !== undefined) body.clientId = clientId;\n if (expectedVersion !== undefined) body.expectedVersion = expectedVersion;\n\n const updated = await client.documents.patchDocument({\n id: documentId,\n body: body as Vectros.DocumentRequest,\n });\n log.debug({ tool: 'document_update', documentId }, 'document_update ok');\n return { content: [{ type: 'text', text: JSON.stringify(updated, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'document_update', documentId, err: String(err) }, 'document_update failed');\n return toolError('document_update', err);\n }\n },\n});\n\nexport default documentUpdate;\n","/**\n * document_delete — permanently delete a document by id. Wraps\n * `client.documents.deleteDocument()`.\n *\n * Scope-gated: the credential must allow `documents:d`. A key without it gets a\n * clean permission error (the tool returns isError, never tears down the\n * session). Deleting a document removes it and its indexed content.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n documentId: z.string().min(1, 'documentId is required').describe('The Vectros document id to delete.'),\n};\n\nconst documentDelete: ToolFactory = ({ client, log }) => ({\n name: 'document_delete',\n title: 'Delete a document',\n description:\n 'Permanently delete a document by id (removes it and its indexed content). Requires the key to allow ' +\n 'documents:d — a key without it gets a permission error.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const documentId = args.documentId as string;\n try {\n await client.documents.deleteDocument({ id: documentId });\n log.debug({ tool: 'document_delete', documentId }, 'document_delete ok');\n return {\n content: [{ type: 'text', text: JSON.stringify({ deleted: true, id: documentId }, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'document_delete', documentId, err: String(err) }, 'document_delete failed');\n return toolError('document_delete', err);\n }\n },\n});\n\nexport default documentDelete;\n","/**\n * folder_query — read folders, two modes (auto-detected by args):\n *\n * id present → GET one folder (`getFolder`) → single FolderResponse object.\n * no id → LIST (`listFolders`): direct children of `parentId` (tree\n * navigation) or a flat tenant list; optional ownership filters.\n * → `{ data: FolderResponse[], nextCursor }`. Unlike the\n * record/document list tools, folder listing exposes the page\n * cursor: folders are small, navigation is the point, and a\n * tenant can hold more folders than one page — so silently\n * truncating the tree would lose folders with no way to reach\n * them. Pass the returned `nextCursor` back as `startFrom`.\n *\n * MCP-specific limit (smaller than the API default): default 10 / max 50 —\n * folder rows are small (no payload), so the cap is looser than records/docs\n * but still bounded for the agent context window.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems } from '../paging.js';\n\nconst MCP_DEFAULT_LIMIT = 10;\nconst MCP_MAX_LIMIT = 50;\n\nconst inputSchema = {\n id: z.string().optional().describe('Get mode: fetch this single folder by id.'),\n parentId: z\n .string()\n .optional()\n .describe('List mode: direct children of this folder (tree navigation). Omit for a flat tenant list.'),\n userId: z.string().optional().describe('List mode: scope to folders owned by this user.'),\n orgId: z.string().optional().describe('List mode: scope to folders belonging to this org.'),\n clientId: z.string().optional().describe('List mode: scope to folders associated with this client.'),\n startFrom: z\n .string()\n .optional()\n .describe('List mode: pagination cursor — pass the `nextCursor` from the previous page to fetch the next.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(`List mode: max folders to return. MCP cap of ${MCP_MAX_LIMIT} (vs API 100). Default 10.`),\n};\n\nconst folderQuery: ToolFactory = ({ client, log }) => ({\n name: 'folder_query',\n title: 'Folder query (list or get)',\n description:\n 'Read folders. Two modes:\\n' +\n ' • Get: pass `id` → returns the single folder.\\n' +\n ' • List: omit `id`; pass `parentId` for a folder\\'s direct children (tree navigation) or omit for a ' +\n 'flat tenant list. Optionally filter by `userId`/`orgId`/`clientId`.\\n' +\n 'List mode returns `{ data, nextCursor }` (default 10, max 50 per page); pass `nextCursor` back as ' +\n '`startFrom` to page through all folders. Get mode returns the single folder object.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string | undefined;\n try {\n if (id) {\n const folder = await client.folders.getFolder({ id });\n log.debug({ tool: 'folder_query', mode: 'get', id }, 'folder_query get ok');\n return { content: [{ type: 'text', text: JSON.stringify(folder, null, 2) }] };\n }\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const page = await client.folders.listFolders({\n parentFolderId: args.parentId as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n startFrom: args.startFrom as string | undefined,\n limit,\n });\n const folders: Vectros.FolderResponse[] = pageItems(page);\n const nextCursor = page.nextCursor ?? null;\n log.debug({ tool: 'folder_query', mode: 'list', limit, returned: folders.length }, 'folder_query list ok');\n return { content: [{ type: 'text', text: JSON.stringify({ data: folders, nextCursor }, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'folder_query', err: String(err) }, 'folder_query failed');\n return toolError('folder_query', err);\n }\n },\n});\n\nexport default folderQuery;\n","/**\n * folder_create — create a folder. Wraps `client.folders.createFolder()`.\n *\n * Idempotent by `slug` within (tenant, context, parent): the slug is the\n * idempotency key for blueprint-declared folders and is derived from the name\n * when omitted. `parentId` places the folder under a parent (create-only — a\n * folder cannot be moved later via the API).\n *\n * Requires the credential to allow `folders:c`.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n name: z.string().min(1, 'name is required').describe('Folder display name.'),\n description: z.string().optional().describe('Optional description of the folder\\'s purpose.'),\n parentId: z\n .string()\n .optional()\n .describe('Parent folder id — places the folder under this parent. Omit for the context default root. Create-only.'),\n slug: z\n .string()\n .optional()\n .describe('Optional stable slug (sibling-unique; idempotency key). Lowercase letters/digits/hyphens. Derived from name when omitted.'),\n userId: z.string().optional().describe('Owning user (Vectros UUID).'),\n orgId: z.string().optional().describe('Owning org (Vectros UUID).'),\n clientId: z.string().optional().describe('Associated client (Vectros UUID).'),\n};\n\nconst folderCreate: ToolFactory = ({ client, log }) => ({\n name: 'folder_create',\n title: 'Create a folder',\n description:\n 'Create a folder to organize documents and records. Pass `parentId` to nest it (create-only — folders ' +\n 'cannot be moved later). Idempotent by `slug` within the parent. Requires the key to allow folders:c.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n try {\n const folder = await client.folders.createFolder({\n name: args.name as string,\n description: args.description as string | undefined,\n parentFolderId: args.parentId as string | undefined,\n slug: args.slug as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n });\n log.debug({ tool: 'folder_create', id: folder.id, name: folder.name }, 'folder_create ok');\n return { content: [{ type: 'text', text: JSON.stringify(folder, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'folder_create', err: String(err) }, 'folder_create failed');\n return toolError('folder_create', err);\n }\n },\n});\n\nexport default folderCreate;\n","/**\n * folder_update — rename / re-describe / re-own a folder. Wraps\n * `client.folders.patchFolder()` (RFC-7386 JSON Merge Patch), consistent with\n * record_update / document_update.\n *\n * PATCH semantics (from the SDK contract):\n * • Top-level fields (`name`, `description`, ownership) are SET when present\n * and left unchanged when omitted; sending one as `null` is rejected.\n * • `parentFolderId` is set at CREATE only and IGNORED on update — a folder\n * cannot be moved via the API (so this tool exposes no move arg).\n *\n * Using PATCH (not the full-replacement PUT) means the body doesn't require\n * `name`, so — unlike a PUT — there's no read-to-carry-name-forward round-trip.\n *\n * Optimistic concurrency: pass the `version` you last read as `expectedVersion`.\n * If the folder changed since, the server rejects with a 409 conflict (re-read\n * via folder_query and retry). Omit for last-write-wins.\n *\n * Requires the credential to allow `folders:u`.\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n id: z.string().min(1, 'id is required').describe('The Vectros folder id to update.'),\n name: z.string().optional().describe('New folder name. Omit to keep the current name.'),\n description: z.string().optional().describe('New description. Omit to leave unchanged.'),\n userId: z.string().optional().describe('Reassign the owning user (Vectros UUID).'),\n orgId: z.string().optional().describe('Reassign the owning org (Vectros UUID).'),\n clientId: z.string().optional().describe('Reassign the associated client (Vectros UUID).'),\n expectedVersion: z\n .number()\n .int()\n .optional()\n .describe(\n 'Optimistic concurrency: the version you last read. If the folder changed since, the update is refused ' +\n 'as a conflict (re-read and retry). Omit for last-write-wins.',\n ),\n};\n\nconst folderUpdate: ToolFactory = ({ client, log }) => ({\n name: 'folder_update',\n title: 'Update a folder',\n description:\n 'Update a folder\\'s name / description / ownership by id (RFC-7386 merge — omitted fields preserved). Pass ' +\n '`expectedVersion` (the version you last read) for safe concurrent edits — a stale update is refused (409). ' +\n 'Folders cannot be moved (re-parenting is not supported by the API). Requires the key to allow folders:u.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n const name = args.name as string | undefined;\n const description = args.description as string | undefined;\n const userId = args.userId as string | undefined;\n const orgId = args.orgId as string | undefined;\n const clientId = args.clientId as string | undefined;\n const expectedVersion = args.expectedVersion as number | undefined;\n try {\n // RFC-7386 merge-patch: send only what's changing — no read-to-carry-name\n // forward (PATCH doesn't require name). The shared FolderRequest type marks\n // `name` required (it is for PUT), so the patch body is assembled untyped\n // and cast at the call, mirroring document_update.\n const body: Partial<Vectros.FolderRequest> = {};\n if (name !== undefined) body.name = name;\n if (description !== undefined) body.description = description;\n if (userId !== undefined) body.userId = userId;\n if (orgId !== undefined) body.orgId = orgId;\n if (clientId !== undefined) body.clientId = clientId;\n if (expectedVersion !== undefined) body.expectedVersion = expectedVersion;\n\n const updated = await client.folders.patchFolder({ id, body: body as Vectros.FolderRequest });\n log.debug({ tool: 'folder_update', id }, 'folder_update ok');\n return { content: [{ type: 'text', text: JSON.stringify(updated, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'folder_update', id, err: String(err) }, 'folder_update failed');\n return toolError('folder_update', err);\n }\n },\n});\n\nexport default folderUpdate;\n","/**\n * folder_delete — permanently delete a folder by id. Wraps\n * `client.folders.deleteFolder()`.\n *\n * Scope-gated: the credential must allow `folders:d`. A key without it gets a\n * clean permission error. Protected folders (e.g. a context root, isProtected:\n * true) cannot be deleted — the API rejects it and the tool surfaces the error.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\nconst inputSchema = {\n id: z.string().min(1, 'id is required').describe('The Vectros folder id to delete.'),\n};\n\nconst folderDelete: ToolFactory = ({ client, log }) => ({\n name: 'folder_delete',\n title: 'Delete a folder',\n description:\n 'Permanently delete a folder by id. Requires the key to allow folders:d — a key without it gets a ' +\n 'permission error. Protected folders (e.g. a context root) cannot be deleted.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const id = args.id as string;\n try {\n await client.folders.deleteFolder({ id });\n log.debug({ tool: 'folder_delete', id }, 'folder_delete ok');\n return { content: [{ type: 'text', text: JSON.stringify({ deleted: true, id }, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'folder_delete', id, err: String(err) }, 'folder_delete failed');\n return toolError('folder_delete', err);\n }\n },\n});\n\nexport default folderDelete;\n","/**\n * current_identity — wraps `/v1/ping` for \"who am I authed as?\"\n * surface.\n *\n * Thin wrapper over `resolveIdentity` from `../identity.js` — that\n * helper is also used by the `identity` resource so both surfaces\n * stay in lockstep. See the helper header for the\n * graceful-degradation contract details.\n *\n * Design contract (from the design doc § Identity &\n * exploration → current_identity + § \"Backend deliverables surfaced\n * by MCP v0.2\"):\n *\n * Target response shape: status, tenantId, environment,\n * principalType, principalKeyId, principalLabel?, allowedActions?,\n * dataScope?, tokenExpiresAt?.\n *\n * Until backend ships the extended /v1/ping response, returns a\n * minimal derived shape (status + environment + principalType).\n * Fields appear automatically as backend rolls out — no MCP server\n * version bump required.\n */\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { resolveIdentity } from '../identity.js';\n\nconst inputSchema = {\n // No args — current_identity describes the current credential.\n};\n\nconst currentIdentity: ToolFactory = ({ log, apiKey, environment }) => ({\n name: 'current_identity',\n title: 'Current identity (tenant + principal scope)',\n description:\n \"Describe the credential the MCP server is operating under. Returns tenantId, environment \" +\n \"(staging|production), principalType (root_key|scoped_key|token), principalKeyId, and (for scoped \" +\n \"keys) allowedActions + dataScope. Use this when the user asks 'what can you do here?' or 'what \" +\n \"tenant am I in?'. Calls GET /v1/ping under the hood. \" +\n \"Backend may still be rolling out the extended /v1/ping response shape — until then this tool \" +\n \"returns a minimal shape; richer fields appear automatically as backend ships.\",\n inputSchema,\n handler: async (): Promise<ToolResult> => {\n try {\n const identity = await resolveIdentity({ log, apiKey, environment });\n return {\n content: [{ type: 'text', text: JSON.stringify(identity, null, 2) }],\n };\n } catch (err) {\n log.warn({ tool: 'current_identity', err: String(err) }, 'current_identity failed');\n return toolError('current_identity', err);\n }\n },\n});\n\nexport default currentIdentity;\n","/**\n * document_ingest — dual-mode document creation.\n *\n * Wraps `client.documents.ingestDocument()` (inline text body) OR\n * `client.documents.uploadDocument()` (file upload via presigned URL).\n * Mode auto-selected from args:\n * - `text` present → inline ingest (single SDK call)\n * - `filePath` present → upload flow (3 steps: uploadDocument()\n * for presigned URL → PUT bytes → return)\n *\n * Either `text` or `filePath` MUST be present; both is an error.\n *\n * **Transport asymmetry (locked v0.2 design — see\n * the design doc § Documents → document_ingest):**\n *\n * stdio transport:\n * - `text` → ingestDocument()\n * - `filePath` → read local fs, uploadDocument(), PUT bytes\n *\n * HTTP transport:\n * - `text` → ingestDocument() (same as stdio)\n * - `filePath` → REJECTED at validation time. Remote MCP servers\n * can't read the partner's filesystem. Partner\n * must use text mode or call SDK directly.\n *\n * The rejection on HTTP+filePath is intentional and load-bearing —\n * silently failing-or-succeeding-weirdly would be worse than a\n * clear error message pointing to the workaround.\n */\nimport { z } from 'zod';\nimport { readFile, realpath } from 'node:fs/promises';\nimport { basename, extname, resolve, relative, isAbsolute } from 'node:path';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\n\n/** Thrown when a filePath escapes the ingest jail. */\nclass IngestPathError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'IngestPathError';\n }\n}\n\n/**\n * Path segments that are never ingestable, even when they sit inside the\n * configured root (defense-in-depth on top of the jail). Lower-cased.\n */\nconst DENIED_SEGMENTS = new Set([\n '.ssh',\n '.aws',\n '.gnupg',\n '.kube',\n '.docker',\n]);\n/** Sensitive basenames denied regardless of directory. Lower-cased. */\nconst DENIED_BASENAMES = new Set([\n '.env',\n 'credentials',\n 'id_rsa',\n 'id_ed25519',\n 'id_ecdsa',\n 'id_dsa',\n '.npmrc',\n '.netrc',\n '.pgpass',\n]);\n\n/**\n * Canonicalize `filePath` and confine it to `ingestRoot`. Returns the\n * canonical (symlink-resolved) absolute path on success; throws\n * {@link IngestPathError} on a traversal / absolute / symlink escape, a path\n * outside the root, a non-existent file, or a denied sensitive path.\n *\n * The model supplies `filePath`; a prompt-injection adversary would otherwise\n * read `~/.aws/credentials` / `~/.ssh/id_rsa` and exfiltrate it as a document.\n *\n * Threat model: the confused deputy is the AGENT (model authority) vs the\n * OPERATOR's secrets, with server + agent running as the same OS user. A\n * realpath→readFile TOCTOU (a separate local process swapping the file\n * mid-call) is out of scope — an attacker with write access inside the ingest\n * root already shares the operator's trust boundary.\n */\nasync function resolveJailedPath(filePath: string, ingestRoot: string): Promise<string> {\n let canonicalRoot: string;\n try {\n canonicalRoot = await realpath(resolve(ingestRoot));\n } catch {\n throw new IngestPathError(\n `the document ingest root \"${ingestRoot}\" does not exist or is not accessible. ` +\n `Set VECTROS_MCP_INGEST_ROOT to a readable directory.`,\n );\n }\n\n // resolve() lets an ABSOLUTE filePath override the root entirely — that is\n // caught by the containment check below (the canonical path won't be inside\n // the root). realpath() resolves symlinks, defeating in-root symlink escapes.\n const requested = resolve(canonicalRoot, filePath);\n let canonical: string;\n try {\n canonical = await realpath(requested);\n } catch {\n throw new IngestPathError(\n `Cannot read filePath \"${filePath}\": no such file under the ingest root \"${canonicalRoot}\".`,\n );\n }\n\n const rel = relative(canonicalRoot, canonical);\n if (rel === '' || rel.startsWith('..') || isAbsolute(rel)) {\n throw new IngestPathError(\n `filePath \"${filePath}\" resolves outside the allowed ingest root \"${canonicalRoot}\". ` +\n `Set VECTROS_MCP_INGEST_ROOT to permit a different directory.`,\n );\n }\n\n const lowerSegs = canonical.toLowerCase().split(/[\\\\/]+/);\n if (lowerSegs.some((s) => DENIED_SEGMENTS.has(s)) || DENIED_BASENAMES.has(basename(canonical).toLowerCase())) {\n throw new IngestPathError(\n `filePath \"${filePath}\" matches a denied sensitive-path pattern and cannot be ingested.`,\n );\n }\n\n return canonical;\n}\n\n// Minimal MIME-type lookup for common file types. Partners can\n// explicitly pass fileType to override.\nconst EXT_TO_MIME: Record<string, string> = {\n '.pdf': 'application/pdf',\n '.txt': 'text/plain',\n '.md': 'text/markdown',\n '.html': 'text/html',\n '.htm': 'text/html',\n '.json': 'application/json',\n '.csv': 'text/csv',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.doc': 'application/msword',\n '.rtf': 'application/rtf',\n};\n\nfunction inferMimeType(filePath: string): string {\n const ext = extname(filePath).toLowerCase();\n return EXT_TO_MIME[ext] ?? 'application/octet-stream';\n}\n\nconst inputSchema = {\n title: z\n .string()\n .min(1, 'title is required')\n .describe('Human-readable document title — appears in search results and the UI.'),\n indexMode: z\n .enum(['HYBRID', 'SEMANTIC', 'TEXT', 'NONE'])\n .optional()\n .describe(\n 'Index strategy. HYBRID (BM25 + dense, default; best for general retrieval), ' +\n 'SEMANTIC (dense only; concept-driven queries), TEXT (BM25 only; exact-match / keyword), ' +\n 'NONE (store-only / archival — retrievable by id and structured-field lookup but never in search results). ' +\n 'Omit to inherit the bound schema\\'s default.',\n ),\n externalId: z\n .string()\n .optional()\n .describe(\n 'Stable caller-supplied id. Immutable; unique per type within your context. Re-ingesting with the same ' +\n 'externalId returns the existing document (idempotent) instead of creating a duplicate — use it to make ' +\n 'ingests safely retryable and as the key other records reference. Mirrors record_create.',\n ),\n schemaId: z\n .string()\n .optional()\n .describe(\n 'Bind this document to a record schema. When set, `payload` is validated against the schema and its ' +\n 'lookup fields become directly queryable via document_query (records parity). Resolve a schema id from ' +\n 'its type via list_schemas. Omit for an untyped document.',\n ),\n payload: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\n 'The document\\'s structured data — a flat key/value object. With `schemaId`, declared fields are validated ' +\n 'and lookup fields indexed; undeclared keys pass through as free-form and are searchable via the ' +\n 'hybrid_search `filters` param. Without a schema it is stored as free-form metadata.',\n ),\n\n // Inline text mode (mutually exclusive with filePath):\n text: z\n .string()\n .min(1)\n .optional()\n .describe('Text body to ingest inline. Mutually exclusive with filePath. Either text or filePath is required.'),\n storeText: z\n .boolean()\n .optional()\n .describe(\n 'If true (default), the text body is stored alongside the index so document_get(includeText:true) ' +\n 'can retrieve it later. Set false to index only — saves storage cost on large corpora but ' +\n 'document_get(includeText) will return textAvailable:false.',\n ),\n\n // File upload mode (mutually exclusive with text; stdio-transport-only):\n filePath: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Local filesystem path to upload. Mutually exclusive with text. ' +\n 'STDIO TRANSPORT ONLY — rejected on HTTP transport (remote MCP servers can\\'t read your filesystem; ' +\n 'use text mode or call the SDK\\'s uploadDocument directly). ' +\n 'Must resolve INSIDE the configured ingest root (VECTROS_MCP_INGEST_ROOT, else the server\\'s working ' +\n 'directory); paths that escape it (traversal/absolute/symlink) or match a sensitive pattern are rejected.',\n ),\n fileType: z\n .string()\n .optional()\n .describe('MIME type of the file (e.g. \"application/pdf\"). Inferred from filePath extension if omitted.'),\n\n // Common (both modes):\n folderId: z\n .string()\n .optional()\n .describe('Optional folder to ingest into. Default: tenant root.'),\n userId: z.string().optional().describe('Owning user ID. Optional.'),\n orgId: z.string().optional().describe('Owning org ID. Optional.'),\n clientId: z.string().optional().describe('Owning client ID. Optional.'),\n};\n\nconst documentIngest: ToolFactory = ({ client, log, transport, ingestRoot }) => ({\n name: 'document_ingest',\n title: 'Ingest a new document (text body or file upload)',\n description:\n 'Create a new document in the partner tenant. Two modes:\\n' +\n ' • Text mode: pass `text` (string body). Single-call. Use for crawled content, notes, generated text.\\n' +\n ' • File mode: pass `filePath` (local path on the MCP server\\'s host machine). STDIO-TRANSPORT ONLY — ' +\n 'rejected on HTTP transport. MCP server reads the bytes, requests a presigned upload URL, and PUTs them. ' +\n 'Returns when the upload is accepted (status: PENDING_INDEX); poll with `document_get` to confirm INDEXED.\\n' +\n 'Either `text` or `filePath` must be present; both is an error. ' +\n 'Idempotent by `externalId` (re-ingest returns the existing document, not a duplicate). Pass `schemaId` + ' +\n '`payload` for a typed, lookup-queryable document (records parity). ' +\n 'indexMode defaults to HYBRID for untyped documents (omit to inherit a bound schema\\'s default). ' +\n 'storeText defaults to true (set false to skip storing the text body).',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const title = args.title as string;\n const text = args.text as string | undefined;\n const filePath = args.filePath as string | undefined;\n const schemaId = args.schemaId as string | undefined;\n // Preserve the legacy default (HYBRID) for untyped documents; when a schema is\n // bound, omit indexMode so the schema's declared default is inherited (the API\n // rejects a request with neither). An explicit value — including NONE — always wins.\n const indexMode =\n (args.indexMode as 'HYBRID' | 'SEMANTIC' | 'TEXT' | 'NONE' | undefined) ??\n (schemaId ? undefined : 'HYBRID');\n\n // Mode validation — exactly one of text/filePath.\n if (!text && !filePath) {\n return toolError(\n 'document_ingest',\n new Error('Either `text` (inline body) or `filePath` (local file) is required.'),\n );\n }\n if (text && filePath) {\n return toolError(\n 'document_ingest',\n new Error('`text` and `filePath` are mutually exclusive — pass exactly one.'),\n );\n }\n\n // Transport gate — HTTP transport rejects filePath.\n if (filePath && transport === 'http') {\n return toolError(\n 'document_ingest',\n new Error(\n 'filePath mode is not supported on HTTP transport. The remote MCP server cannot read your local filesystem. ' +\n 'Use `text` mode (pass the content inline) or call the @vectros-ai/sdk uploadDocument method directly from your own code.',\n ),\n );\n }\n\n const common = {\n folderId: args.folderId as string | undefined,\n payload: args.payload as Record<string, unknown> | undefined,\n schemaId,\n externalId: args.externalId as string | undefined,\n userId: args.userId as string | undefined,\n orgId: args.orgId as string | undefined,\n clientId: args.clientId as string | undefined,\n };\n\n try {\n // ── Text mode ────────────────────────────────────────────────\n if (text) {\n const storeText = (args.storeText as boolean | undefined) ?? true;\n const result = await client.documents.ingestDocument({\n title,\n text,\n indexMode,\n storeText,\n ...common,\n });\n log.debug(\n { tool: 'document_ingest', mode: 'text', id: result?.id, indexMode },\n 'document_ingest text ok',\n );\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n };\n }\n\n // ── File mode (stdio transport) ──────────────────────────────\n // 3-step flow per recon: uploadDocument → PUT bytes → return.\n // Caller can poll with document_get to confirm INDEXED.\n //\n // SECURITY: the path is model-supplied; jail it to the configured\n // ingest root (VECTROS_MCP_INGEST_ROOT, else the process cwd) and reject\n // traversal / absolute / symlink escapes BEFORE reading any bytes.\n const root = ingestRoot ?? process.env.VECTROS_MCP_INGEST_ROOT ?? process.cwd();\n let safePath: string;\n try {\n safePath = await resolveJailedPath(filePath!, root);\n } catch (err) {\n return toolError('document_ingest', err instanceof Error ? err : new Error(String(err)));\n }\n\n let bytes: Buffer;\n try {\n bytes = await readFile(safePath);\n } catch (err) {\n // Friendlier error than the default fs.readFile message.\n const msg = err instanceof Error ? err.message : String(err);\n return toolError(\n 'document_ingest',\n new Error(`Cannot read filePath: ${msg}. Verify the path exists on the MCP server's host machine.`),\n );\n }\n\n const fileName = basename(safePath);\n const fileType = (args.fileType as string | undefined) ?? inferMimeType(safePath);\n\n const upload = await client.documents.uploadDocument({\n fileName,\n fileType,\n indexMode,\n ...common,\n });\n\n const uploadUrl = upload?.uploadUrl as string | undefined;\n const docId = upload?.id as string | undefined;\n if (!uploadUrl || !docId) {\n return toolError(\n 'document_ingest',\n new Error(`Unexpected uploadDocument response: missing uploadUrl or id. Got: ${JSON.stringify(upload)}`),\n );\n }\n\n // PUT bytes to presigned URL. No Authorization header (the URL\n // carries its own signature via query params).\n const putRes = await fetch(uploadUrl, {\n method: 'PUT',\n headers: { 'Content-Type': fileType },\n body: bytes,\n });\n\n if (!putRes.ok) {\n const detail = await putRes.text().catch(() => '');\n return toolError(\n 'document_ingest',\n new Error(\n `Presigned PUT failed (HTTP ${putRes.status}): ${detail || putRes.statusText}. ` +\n 'The document record was created but the file upload did not complete; the document is in an incomplete state.',\n ),\n );\n }\n\n log.debug(\n { tool: 'document_ingest', mode: 'file', id: docId, fileName, fileType, bytes: bytes.length },\n 'document_ingest file ok',\n );\n\n // Return the upload response — caller can poll document_get(id)\n // to confirm INDEXED. We don't poll here; that's the agent's job.\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n ...upload,\n status: 'PENDING_INDEX',\n _note:\n 'File uploaded; indexing is asynchronous. Poll document_get(id) until status is INDEXED.',\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n log.warn({ tool: 'document_ingest', err: String(err) }, 'document_ingest failed');\n return toolError('document_ingest', err);\n }\n },\n});\n\nexport default documentIngest;\n","/**\n * lookup_principal — resolve a user / org / client identity, two modes\n * (auto-detected by args):\n *\n * externalId present → RESOLVE your own identifier to the Vectros UUID\n * (`list{Users,Orgs,Clients}({externalId})`). Returns a\n * one-element array, or empty if no match.\n * field present → LOOKUP on a schema-declared lookup field, one of:\n * • equality: `value`\n * • range: `from` + `to`\n * • prefix: `prefix`\n * (`type` — the identity schema's record type — is\n * required here.) Routed through the POST-body lookup\n * (`lookup{Users,Orgs,Clients}`), which is sensitive-safe\n * (the value never rides the URL query string).\n *\n * Why this exists: the ownership filters on record_query / document_query /\n * hybrid_search / rag_ask take the Vectros-assigned UUID, but an agent usually\n * holds its OWN identifier (the partner's externalId). This tool bridges the\n * two — resolve once, then scope reads by the returned id.\n *\n * Read-only: requires the credential to allow the relevant read scope\n * (`users:r` / `orgs:r` / `clients:r`). It never creates or mutates identities —\n * identity CRUD stays off the agent tool surface by design.\n */\nimport { z } from 'zod';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems, type Page } from '../paging.js';\n\nconst MCP_DEFAULT_LIMIT = 10;\nconst MCP_MAX_LIMIT = 50;\n\nconst inputSchema = {\n kind: z\n .enum(['user', 'org', 'client'])\n .describe('Which principal to look up: a user, an organization, or a client.'),\n externalId: z\n .string()\n .optional()\n .describe(\n 'Resolve mode: your own stable identifier for the principal. Returns the single matching principal ' +\n '(with its Vectros UUID), or an empty array if none. The fastest path to the UUID the ownership ' +\n 'filters need. Takes precedence if both this and a `field` lookup are supplied.',\n ),\n // Lookup-mode args — provide `field` plus EXACTLY ONE of: value | from+to | prefix.\n type: z\n .string()\n .optional()\n .describe('Lookup mode: the identity schema\\'s record type (e.g. \"person_v1\"). Required with `field`.'),\n field: z\n .string()\n .optional()\n .describe('Lookup mode: name of the schema-declared lookup field to query by (e.g. \"email\").'),\n value: z.string().optional().describe('Lookup mode (equality): exact-match value for `field`. Works on sensitive fields.'),\n from: z.string().optional().describe('Lookup mode (range): inclusive lower bound; requires `to`. Non-sensitive fields only.'),\n to: z.string().optional().describe('Lookup mode (range): inclusive upper bound; requires `from`.'),\n prefix: z\n .string()\n .optional()\n .describe('Lookup mode (prefix): match values starting with this. Range-enabled string fields only.'),\n order: z\n .enum(['asc', 'desc'])\n .optional()\n .describe('Lookup mode: sort direction by the looked-up field. `asc` (default) or `desc`.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(MCP_MAX_LIMIT)\n .optional()\n .describe(`Max principals to return. MCP cap of ${MCP_MAX_LIMIT} (vs API 100). Default ${MCP_DEFAULT_LIMIT}.`),\n};\n\nconst lookupPrincipal: ToolFactory = ({ client, log }) => ({\n name: 'lookup_principal',\n title: 'Look up a user / org / client identity',\n description:\n 'Resolve a user, org, or client identity. Two modes:\\n' +\n ' • Resolve by your own id: pass `externalId` → the matching principal incl. its Vectros UUID (the id the ' +\n 'ownership filters on record_query / hybrid_search / rag_ask expect).\\n' +\n ' • Lookup by a schema field: pass `type` and `field` plus exactly one of `value` (exact), `from`+`to` ' +\n '(range), or `prefix`. Sensitive-field-safe. (If both `externalId` and a `field` lookup are given, ' +\n '`externalId` wins.) Returns up to 50 principals (default 10) as a bare array. ' +\n 'Read-only — does not create or modify identities.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const kind = args.kind as 'user' | 'org' | 'client';\n const limit = (args.limit as number | undefined) ?? MCP_DEFAULT_LIMIT;\n const externalId = args.externalId as string | undefined;\n const type = args.type as string | undefined;\n const field = args.field as string | undefined;\n const value = args.value as string | undefined;\n const from = args.from as string | undefined;\n const to = args.to as string | undefined;\n const prefix = args.prefix as string | undefined;\n const order = args.order as 'asc' | 'desc' | undefined;\n\n try {\n let page: Page<unknown>;\n if (externalId !== undefined) {\n // Resolve mode — externalId → UUID. One SDK call per kind (the request\n // shapes differ per kind but all accept externalId + limit).\n if (kind === 'user') {\n page = await client.identity.listUsers({ externalId, limit });\n } else if (kind === 'org') {\n page = await client.identity.listOrgs({ externalId, limit });\n } else {\n page = await client.identity.listClients({ externalId, limit });\n }\n log.debug({ tool: 'lookup_principal', mode: 'resolve', kind }, 'lookup_principal resolve ok');\n } else if (field !== undefined) {\n // Lookup mode — validate exactly one lookup shape, then require `type`.\n const hasEquality = value !== undefined;\n const hasRange = from !== undefined || to !== undefined;\n const hasPrefix = prefix !== undefined;\n const modes = Number(hasEquality) + Number(hasRange) + Number(hasPrefix);\n if (modes === 0) {\n return toolError(\n 'lookup_principal',\n new Error(`lookup on field '${field}' needs one of: 'value' (exact), 'from'+'to' (range), or 'prefix'.`),\n );\n }\n if (modes > 1) {\n return toolError(\n 'lookup_principal',\n new Error(\"'value', 'from'/'to', and 'prefix' are mutually exclusive — provide exactly one.\"),\n );\n }\n if (hasRange && !(from !== undefined && to !== undefined)) {\n return toolError('lookup_principal', new Error(\"range lookup requires both 'from' and 'to'.\"));\n }\n if (type === undefined) {\n return toolError(\n 'lookup_principal',\n new Error(\"lookup requires 'type' (the identity schema's record type) alongside 'field'.\"),\n );\n }\n // POST-body lookup: sensitive-safe (value never in the URL), all modes in one path.\n const req = { type, field, value, from, to, prefix, order, limit };\n if (kind === 'user') {\n page = await client.identity.lookupUsers(req);\n } else if (kind === 'org') {\n page = await client.identity.lookupOrgs(req);\n } else {\n page = await client.identity.lookupClients(req);\n }\n log.debug({ tool: 'lookup_principal', mode: 'lookup', kind, type, field }, 'lookup_principal lookup ok');\n } else {\n return toolError(\n 'lookup_principal',\n new Error(\"provide `externalId` (resolve) or `type`+`field`+a lookup mode (lookup).\"),\n );\n }\n\n const principals = pageItems(page);\n return { content: [{ type: 'text', text: JSON.stringify(principals, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'lookup_principal', kind, err: String(err) }, 'lookup_principal failed');\n return toolError('lookup_principal', err);\n }\n },\n});\n\nexport default lookupPrincipal;\n","/**\n * version_history — read the change/audit trail for a record or document. Wraps\n * `client.records.getRecordVersions()` / `client.documents.getDocumentVersions()`.\n *\n * Returns the version entries (CREATE / UPDATE / DELETE, with actor + timestamp +\n * the per-change diff) for one entity, so an agent can answer \"what changed and\n * when\" without leaving the tool surface. History is recorded only for entities\n * bound to a schema with audit history enabled (the default for typed records /\n * documents); an untyped entity has no history and returns an empty trail.\n *\n * The trail can be long, so — like folder_query — this exposes the page cursor:\n * the result is `{ data, nextCursor }`; pass `nextCursor` back as `startFrom` to\n * walk older entries. Requires the relevant read scope (`records:r` /\n * `documents:r`).\n */\nimport { z } from 'zod';\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ToolFactory, ToolResult } from './types.js';\nimport { toolError } from './errors.js';\nimport { pageItems } from '../paging.js';\n\nconst inputSchema = {\n resourceType: z\n .enum(['record', 'document'])\n .describe('Which kind of entity the id refers to: a record or a document.'),\n id: z.string().min(1, 'id is required').describe('The Vectros id of the record or document whose history you want.'),\n startFrom: z\n .string()\n .optional()\n .describe('Pagination cursor — pass the `nextCursor` from the previous page to fetch older entries.'),\n};\n\nconst versionHistory: ToolFactory = ({ client, log }) => ({\n name: 'version_history',\n title: 'Version history (record or document)',\n description:\n 'Read the audit/version trail (CREATE/UPDATE/DELETE, with actor, timestamp, and diff) for a single record ' +\n 'or document. Pass `resourceType` (record|document) and `id`. Returns `{ data, nextCursor }`; pass ' +\n '`nextCursor` back as `startFrom` to page through older entries. Entities without audit history (untyped) ' +\n 'return an empty trail. Read-only.',\n inputSchema,\n handler: async (args): Promise<ToolResult> => {\n const resourceType = args.resourceType as 'record' | 'document';\n const id = args.id as string;\n const startFrom = args.startFrom as string | undefined;\n try {\n const page: Vectros.ModelDataVersionPage =\n resourceType === 'record'\n ? await client.records.getRecordVersions({ id, startFrom })\n : await client.documents.getDocumentVersions({ id, startFrom });\n const versions = pageItems(page);\n const nextCursor = page.nextCursor ?? null;\n log.debug(\n { tool: 'version_history', resourceType, id, returned: versions.length },\n 'version_history ok',\n );\n return { content: [{ type: 'text', text: JSON.stringify({ data: versions, nextCursor }, null, 2) }] };\n } catch (err) {\n log.warn({ tool: 'version_history', resourceType, id, err: String(err) }, 'version_history failed');\n return toolError('version_history', err);\n }\n },\n});\n\nexport default versionHistory;\n","/**\n * Shared tool-definition shape.\n *\n * Each tool is built as a factory that takes the Vectros SDK client\n * (already authenticated) + a logger, and returns the registration\n * payload for `server.registerTool()` plus the handler. The server\n * class iterates the array and registers each one.\n */\nimport type { ZodRawShape } from 'zod';\nimport type { VectrosClient } from '@vectros-ai/sdk';\nimport type { Logger } from '../log.js';\n\n/**\n * Names of all REGISTERED tools — the contract for what\n * `tools: [...]` accepts and what default construction registers.\n *\n * MUST stay in lockstep with `ALL_TOOL_FACTORIES` in `./index.ts` —\n * every name here needs a factory there, and vice versa. The server\n * iterates this list at construction; an unimplemented name throws.\n *\n * v0.1 (shipped 2026-05-30): hybrid_search, record_query, rag_ask, document_ask\n * v0.2 (shipped): list_schemas, document_get, current_identity, document_ingest\n * launch data-plane I/O: record_get, record_create, record_update, record_delete (tier 1);\n * document_query (tier 2);\n * document_update, document_delete, folder_query,\n * folder_create, folder_update, folder_delete (tier 3)\n * (see the data-plane surface doc)\n * parity sweep: lookup_principal (identity resolution for the\n * ownership filters), version_history (record/document\n * audit trail)\n */\nexport const TOOL_NAMES = [\n 'hybrid_search',\n 'record_query',\n 'record_get',\n 'record_create',\n 'record_update',\n 'record_delete',\n 'rag_ask',\n 'document_ask',\n 'list_schemas',\n 'document_get',\n 'document_query',\n 'document_update',\n 'document_delete',\n 'folder_query',\n 'folder_create',\n 'folder_update',\n 'folder_delete',\n 'current_identity',\n 'document_ingest',\n 'lookup_principal',\n 'version_history',\n] as const;\nexport type ToolName = (typeof TOOL_NAMES)[number];\n\n/**\n * MCP tool-handler context. The MCP SDK passes this as the second\n * arg to tool handlers. We type it loosely — the bits we use are\n * `sendNotification` (for progress) and `signal` (for abort).\n */\nexport interface ToolExtra {\n sendNotification?: (notification: {\n method: 'notifications/progress';\n params: {\n progressToken: string | number;\n progress: number;\n total?: number;\n message?: string;\n };\n }) => Promise<void>;\n _meta?: { progressToken?: string | number };\n signal?: AbortSignal;\n}\n\n/**\n * MCP tool-result shape — what every handler returns. The MCP SDK\n * normalizes this into a `tools/call` response.\n */\nexport interface ToolResult {\n content: Array<{ type: 'text'; text: string }>;\n isError?: boolean;\n}\n\nexport interface ToolDefinition<S extends ZodRawShape = ZodRawShape> {\n name: ToolName;\n title: string;\n description: string;\n inputSchema: S;\n handler: (args: Record<string, unknown>, extra: ToolExtra) => Promise<ToolResult>;\n}\n\nexport interface ToolFactoryContext {\n client: VectrosClient;\n log: Logger;\n /**\n * The API key the server was constructed with. Optional in the\n * type because most tools don't need it (the SDK `client` carries\n * it implicitly) and test mocks shouldn't have to provide it.\n * Production server.ts ALWAYS supplies it.\n *\n * Only `current_identity` uses this — for raw-fetch access to\n * /v1/ping that the SDK's typed `ping()` discards (it's typed\n * `Promise<void>` and throws away the response body).\n * Graceful-degradation contract requires raw access until the\n * SDK regenerates for the extended ping shape.\n */\n apiKey?: string;\n /** The resolved API base URL. Same rationale as `apiKey`. */\n environment?: string;\n /**\n * Which transport is wired up. Optional in the type because most\n * tools are transport-agnostic and test mocks shouldn't have to\n * provide it. Production CLI entry points (`cli.ts` for stdio,\n * `cli-http.ts` for HTTP) pass the appropriate value.\n *\n * Only `document_ingest` uses this — to reject `filePath` mode on\n * HTTP transport (remote MCP server can't touch the partner's\n * local filesystem; design doc § Documents → document_ingest).\n * Undefined treated as 'stdio' (the v0.1 default).\n */\n transport?: 'stdio' | 'http';\n /**\n * Filesystem root that `document_ingest`'s stdio `filePath` mode is\n * jailed to. A model-supplied path is canonicalized and must\n * resolve INSIDE this root; traversal / absolute-escape / symlink-escape\n * are rejected. Defaults to `VECTROS_MCP_INGEST_ROOT ?? process.cwd()`.\n * Only `document_ingest` reads it.\n */\n ingestRoot?: string;\n}\n\nexport type ToolFactory = (ctx: ToolFactoryContext) => ToolDefinition;\n","/**\n * Tool registry — the v0.1 catalog. Each tool is a factory that the\n * server instantiates with the SDK client + logger.\n *\n * Order here is the order tools appear in `tools/list` responses to\n * the MCP client. Putting search first is intentional — it's the\n * tool with the broadest read use case.\n */\nimport type { ToolFactory } from './types.js';\nimport hybridSearch from './hybrid_search.js';\nimport recordQuery from './record_query.js';\nimport recordGet from './record_get.js';\nimport recordCreate from './record_create.js';\nimport recordUpdate from './record_update.js';\nimport recordDelete from './record_delete.js';\nimport ragAsk from './rag_ask.js';\nimport documentAsk from './document_ask.js';\nimport listSchemas from './list_schemas.js';\nimport documentGet from './document_get.js';\nimport documentQuery from './document_query.js';\nimport documentUpdate from './document_update.js';\nimport documentDelete from './document_delete.js';\nimport folderQuery from './folder_query.js';\nimport folderCreate from './folder_create.js';\nimport folderUpdate from './folder_update.js';\nimport folderDelete from './folder_delete.js';\nimport currentIdentity from './current_identity.js';\nimport documentIngest from './document_ingest.js';\nimport lookupPrincipal from './lookup_principal.js';\nimport versionHistory from './version_history.js';\n\nexport const ALL_TOOL_FACTORIES: Record<string, ToolFactory> = {\n hybrid_search: hybridSearch,\n record_query: recordQuery,\n record_get: recordGet,\n record_create: recordCreate,\n record_update: recordUpdate,\n record_delete: recordDelete,\n rag_ask: ragAsk,\n document_ask: documentAsk,\n list_schemas: listSchemas,\n document_get: documentGet,\n document_query: documentQuery,\n document_update: documentUpdate,\n document_delete: documentDelete,\n folder_query: folderQuery,\n folder_create: folderCreate,\n folder_update: folderUpdate,\n folder_delete: folderDelete,\n current_identity: currentIdentity,\n document_ingest: documentIngest,\n lookup_principal: lookupPrincipal,\n version_history: versionHistory,\n};\n\nexport { TOOL_NAMES, type ToolName, type ToolDefinition, type ToolFactory } from './types.js';\n","/**\n * schemas resource at `vectros://schemas`.\n *\n * Parallel to the `list_schemas` tool — same data, different access\n * pattern. MCP clients can list/read resources passively (without\n * a tool call) to surface ambient context to the agent.\n *\n * Returns the full schema catalog as JSON text (mimeType\n * application/json). Honors the credential's AccessProfile scope —\n * exactly what `list_schemas` returns with no filters.\n *\n * `listSchemas` returns the `{ data, nextCursor }` page envelope (SDK\n * 0.23); we drain every page into the flat `SchemaResponse[]` so the\n * resource body stays a bare array — in lockstep with the `list_schemas`\n * tool. See src/paging.ts.\n */\nimport type { Vectros } from '@vectros-ai/sdk';\nimport type { ResourceFactory } from './types.js';\nimport { drainPages } from '../paging.js';\n\nconst schemasResource: ResourceFactory = ({ client }) => ({\n name: 'schemas',\n uri: 'vectros://schemas',\n title: 'Record schema catalog',\n description:\n 'The structured-record schema catalog visible to the current credential. Each schema describes a ' +\n 'record type (e.g. \"patient\", \"clinical_note\"), its fields, lookup-indexed fields, and capabilities. ' +\n 'Equivalent to calling the `list_schemas` tool with no filters.',\n mimeType: 'application/json',\n read: async (): Promise<string> => {\n const schemas = await drainPages<Vectros.SchemaResponse>((startFrom) =>\n client.schemas.listSchemas({ startFrom }),\n );\n return JSON.stringify(schemas, null, 2);\n },\n});\n\nexport default schemasResource;\n","/**\n * identity resource at `vectros://identity`.\n *\n * Parallel to the `current_identity` tool — same data, different\n * access pattern. Lets the MCP client passively know the\n * credential's tenant + principal scope without an explicit tool\n * call, useful for ambient \"you're authed as X\" UX hints.\n *\n * Delegates to the shared `resolveIdentity` helper so the tool +\n * resource stay in lockstep on the graceful-degradation contract.\n */\nimport type { ResourceFactory } from './types.js';\nimport { resolveIdentity } from '../identity.js';\n\nconst identityResource: ResourceFactory = ({ log, apiKey, environment }) => ({\n name: 'identity',\n uri: 'vectros://identity',\n title: 'Current identity (tenant + principal scope)',\n description:\n 'The tenant + principal scope the MCP server is authenticated as. Returns the same payload as the ' +\n '`current_identity` tool: status, environment, principalType, principalKeyId, and (for scoped keys) ' +\n 'allowedActions + dataScope. Until backend ships the extended /v1/ping response, returns a minimal ' +\n 'derived shape; richer fields appear automatically as backend rolls out.',\n mimeType: 'application/json',\n read: async (): Promise<string> => {\n const identity = await resolveIdentity({ log, apiKey, environment });\n return JSON.stringify(identity, null, 2);\n },\n});\n\nexport default identityResource;\n","/**\n * Shared resource-definition shape — mirror of the tool factory\n * pattern in ../tools/types.ts.\n *\n * MCP resources are read-only data discoverable via resources/list +\n * resources/read JSON-RPC calls. Each resource has a stable URI,\n * a human-readable name + description, a MIME type, and a `read()`\n * function that returns its text content.\n */\nimport type { ZodRawShape } from 'zod';\nimport type { VectrosClient } from '@vectros-ai/sdk';\nimport type { Logger } from '../log.js';\n\n/**\n * Names of all REGISTERED resources — the contract for what\n * `resources: [...]` filter accepts.\n *\n * MUST stay in lockstep with `ALL_RESOURCE_FACTORIES` in\n * `./index.ts` — every name here needs a factory there, and vice\n * versa. The server iterates this list at construction; an\n * unimplemented name throws.\n */\nexport const RESOURCE_NAMES = ['schemas', 'identity'] as const;\nexport type ResourceName = (typeof RESOURCE_NAMES)[number];\n\nexport interface ResourceDefinition {\n name: ResourceName;\n uri: string;\n title: string;\n description: string;\n mimeType: string;\n /** Returns the resource's text content (JSON-encoded data). */\n read: () => Promise<string>;\n}\n\nexport interface ResourceFactoryContext {\n client: VectrosClient;\n log: Logger;\n /** API key — needed by `identity` resource for raw /v1/ping fetch. */\n apiKey?: string;\n /** API base URL — same rationale as `apiKey`. */\n environment?: string;\n}\n\nexport type ResourceFactory = (ctx: ResourceFactoryContext) => ResourceDefinition;\n\n/** Re-exports used by tests. */\nexport type { ZodRawShape };\n","/**\n * Resource registry — the v0.2 catalog. Each resource is a factory\n * that the server instantiates with the SDK client + logger + (for\n * the identity resource) the API key + environment.\n *\n * Order here is the order resources appear in `resources/list`\n * responses to the MCP client.\n *\n * MUST stay in lockstep with `RESOURCE_NAMES` in `./types.ts` —\n * every name in the type union has a factory here.\n */\nimport type { ResourceFactory } from './types.js';\nimport schemasResource from './schemas.js';\nimport identityResource from './identity.js';\n\nexport const ALL_RESOURCE_FACTORIES: Record<string, ResourceFactory> = {\n schemas: schemasResource,\n identity: identityResource,\n};\n\nexport {\n RESOURCE_NAMES,\n type ResourceName,\n type ResourceDefinition,\n type ResourceFactory,\n} from './types.js';\n","/**\n * Custom zod → JSON Schema converter.\n *\n * We do this in-tree (rather than depending on `zod-to-json-schema`)\n * because we only need to support the small subset of zod shapes our\n * tool input schemas use: object, string, number, boolean, enum,\n * array, plus the unwrap-modifier triad (optional / default /\n * nullable). The output is the JSON Schema fragment that MCP's\n * `tools/list` response embeds for each tool.\n *\n * Exported separately from server.ts so it can be unit-tested in\n * isolation. The integration test sees the converted output via\n * `tools/list`, but doesn't assert the converted-shape semantics\n * (e.g., that required fields drop their unwrapped modifier).\n */\nimport { z } from 'zod';\n\n/**\n * Convert a zod raw-shape object (the value passed to `z.object(...)`)\n * into a JSON Schema object describing the same shape.\n */\nexport function zodShapeToJsonSchema(\n shape: Record<string, z.ZodTypeAny>,\n): Record<string, unknown> {\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n for (const [name, schema] of Object.entries(shape)) {\n properties[name] = zodTypeToJsonSchema(schema);\n if (!schema.isOptional()) required.push(name);\n }\n const out: Record<string, unknown> = { type: 'object', properties };\n if (required.length > 0) out.required = required;\n return out;\n}\n\n/**\n * Convert a single zod type into a JSON Schema fragment. Unwraps\n * Optional / Default / Nullable layers transparently — the\n * `required` list in the parent object tracks whether a field is\n * required separately.\n */\nexport function zodTypeToJsonSchema(schema: z.ZodTypeAny): Record<string, unknown> {\n // Capture the description BEFORE unwrapping — wrappers carry it.\n const description = (schema as unknown as { description?: string }).description;\n\n // Unwrap modifiers.\n let current: z.ZodTypeAny = schema;\n while (\n current instanceof z.ZodOptional ||\n current instanceof z.ZodDefault ||\n current instanceof z.ZodNullable\n ) {\n current = (current as unknown as { _def: { innerType: z.ZodTypeAny } })._def.innerType;\n }\n\n const base: Record<string, unknown> = description ? { description } : {};\n\n if (current instanceof z.ZodString) {\n return { ...base, type: 'string' };\n }\n if (current instanceof z.ZodNumber) {\n return { ...base, type: 'number' };\n }\n if (current instanceof z.ZodBoolean) {\n return { ...base, type: 'boolean' };\n }\n if (current instanceof z.ZodEnum) {\n return {\n ...base,\n type: 'string',\n enum: (current as z.ZodEnum<[string, ...string[]]>).options,\n };\n }\n if (current instanceof z.ZodArray) {\n return {\n ...base,\n type: 'array',\n items: zodTypeToJsonSchema((current as z.ZodArray<z.ZodTypeAny>).element),\n };\n }\n if (current instanceof z.ZodObject) {\n return {\n ...base,\n ...zodShapeToJsonSchema((current as z.ZodObject<z.ZodRawShape>).shape),\n };\n }\n if (current instanceof z.ZodRecord) {\n // `z.record(...)` → an open-keyed object. Describe it as `type: object`\n // with `additionalProperties` carrying the value schema, so the field\n // advertises a real shape to MCP clients instead of an empty fragment.\n const valueType = (current as unknown as { _def: { valueType: z.ZodTypeAny } })._def.valueType;\n return {\n ...base,\n type: 'object',\n additionalProperties: zodTypeToJsonSchema(valueType),\n };\n }\n // Fallback — let the MCP SDK be tolerant.\n return { ...base };\n}\n","/**\n * Streamable HTTP transport (v0.2+).\n *\n * Wraps the MCP SDK's `StreamableHTTPServerTransport` in a Node\n * `http.Server` that routes `POST /mcp` + `GET /mcp` to the\n * SDK's request handler.\n *\n * **v0.2 single-tenant model:** the MCP server uses the env\n * `VECTROS_API_KEY` for all upstream Vectros calls — the\n * Authorization header on incoming HTTP requests is NOT mapped to\n * an upstream credential (that's a v1.0+ multi-tenant feature). The\n * optional `bearerToken` opt provides client-to-server auth: if set,\n * incoming requests must present `Authorization: Bearer <token>`\n * matching exactly, or they get a 401. Recommended for any\n * deployment beyond localhost.\n *\n * **Stateful sessions:** the SDK generates a session ID per\n * initialization (uses `crypto.randomUUID()`). Session ID flows back\n * to the client in response headers; subsequent requests carry it\n * in `mcp-session-id` header. Session state is in-memory.\n *\n * Health check: `GET /` returns 200 with a simple JSON body. Useful\n * for k8s readiness probes, ALB target groups, etc.\n */\nimport { createServer, type IncomingMessage, type ServerResponse, type Server as HttpServer } from 'node:http';\nimport { randomUUID } from 'node:crypto';\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { Logger } from '../log.js';\nimport type { VectrosMCPServer } from '../server.js';\n\nexport interface HttpTransportOptions {\n /** Port to listen on. Default 8765. */\n port?: number;\n /** Host to bind to. Default 127.0.0.1 (localhost-only). Pass '0.0.0.0' for all interfaces. */\n host?: string;\n /**\n * Optional client→server bearer token. If set, incoming HTTP\n * requests must present `Authorization: Bearer <token>` matching\n * EXACTLY (constant-time-compare under the hood); else 401.\n * Strongly recommended for any deployment beyond localhost.\n */\n bearerToken?: string;\n /**\n * Extra allowed `Host` header values (in addition to the bind\n * host:port + localhost aliases that are always allowed). Used for\n * DNS-rebinding protection — a request whose Host is not in the\n * allow-list is rejected with 403. Reverse-proxy deployments set\n * this to the public hostname(s). See {@link VECTROS_MCP_HTTP_ALLOWED_HOSTS}.\n */\n allowedHosts?: string[];\n /**\n * Extra allowed `Origin` header values (in addition to the\n * http(s) origins of the allowed hosts). A request that PRESENTS an\n * Origin not in the allow-list is rejected with 403; a request with\n * NO Origin (non-browser MCP clients) is allowed. See\n * {@link VECTROS_MCP_HTTP_ALLOWED_ORIGINS}.\n */\n allowedOrigins?: string[];\n /** MCP server instance to handle requests. */\n mcpServer: VectrosMCPServer;\n /** Logger; defaults to a no-op if missing. */\n log: Logger;\n}\n\nexport interface HttpTransportHandle {\n /** Address the server is bound to. */\n address: { host: string; port: number };\n /** Stops the server. Idempotent. */\n close: () => Promise<void>;\n}\n\n/** Constant-time string compare. Avoids timing-attack on the bearer-token check. */\nfunction constantTimeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return diff === 0;\n}\n\n/** True if `host` is a loopback bind address (no network exposure). */\nexport function isLoopbackBindHost(host: string): boolean {\n const h = host.toLowerCase();\n return h === '127.0.0.1' || h === 'localhost' || h === '::1' || h === '[::1]';\n}\n\n/**\n * Whether to refuse starting the HTTP transport: a non-loopback bind with no\n * bearer token is an open credential proxy on the network. An explicit opt-out\n * (`VECTROS_MCP_HTTP_ALLOW_INSECURE=1`) overrides. Pure — unit-tested.\n */\nexport function shouldRefuseInsecureBind(host: string, hasBearer: boolean, allowInsecure: boolean): boolean {\n return !isLoopbackBindHost(host) && !hasBearer && !allowInsecure;\n}\n\n/** localhost / 127.0.0.1 / ::1 aliases for a given host (DNS-rebinding allow-list). */\nfunction loopbackAliases(host: string): string[] {\n const h = host.toLowerCase();\n if (h === '127.0.0.1' || h === 'localhost') return ['127.0.0.1', 'localhost'];\n if (h === '::1' || h === '[::1]') return ['::1', '[::1]'];\n return [h];\n}\n\n/**\n * Build the set of allowed `Host` header values from the bind host + port,\n * plus any operator-configured extras. Includes both `host` and `host:port`\n * forms (clients may omit the port for a default-port deployment) and the\n * loopback aliases so `localhost` ↔ `127.0.0.1` both work.\n */\nfunction buildAllowedHosts(host: string, port: number, extra: string[] = []): Set<string> {\n const set = new Set<string>();\n // Always allow loopback Host values (a rebound browser sends the attacker\n // DOMAIN as Host, never the loopback literal), plus the bind host:port. This\n // lets a `localhost` client reach a `0.0.0.0` bind without extra config.\n const hosts = [...loopbackAliases(host), '127.0.0.1', 'localhost', '::1', '[::1]'];\n for (const h of hosts) {\n set.add(h.toLowerCase());\n set.add(`${h.toLowerCase()}:${port}`);\n }\n for (const e of extra) set.add(e.trim().toLowerCase());\n return set;\n}\n\n/** Build the allowed `Origin` values: http(s) origins of every allowed host + extras. */\nfunction buildAllowedOrigins(allowedHosts: Set<string>, extra: string[] = []): Set<string> {\n const set = new Set<string>();\n for (const h of allowedHosts) {\n set.add(`http://${h}`);\n set.add(`https://${h}`);\n }\n for (const e of extra) set.add(e.trim().toLowerCase().replace(/\\/$/, ''));\n return set;\n}\n\n/**\n * DNS-rebinding / cross-origin guard. The MCP SDK's transport-level\n * `enableDnsRebindingProtection` flags are `@deprecated` in favour of\n * external middleware (this), so we validate Host + Origin ourselves:\n * - `Host` must be in the allow-list (a rebound browser sends the attacker\n * domain as Host → rejected even though it connected to the loopback IP);\n * - if `Origin` is PRESENT it must be in the allow-list (blocks a malicious\n * web page driving the local server cross-origin); a request with NO\n * Origin (the normal non-browser MCP client) is allowed.\n *\n * Returns null when ok, or a short rejection reason.\n */\nfunction checkHostAndOrigin(\n req: IncomingMessage,\n allowedHosts: Set<string>,\n allowedOrigins: Set<string>,\n): string | null {\n const host = (req.headers.host ?? '').toLowerCase();\n if (!host || !allowedHosts.has(host)) {\n return `disallowed Host header \"${req.headers.host ?? ''}\"`;\n }\n const origin = req.headers.origin;\n if (origin !== undefined && origin !== '' && !allowedOrigins.has(origin.toLowerCase().replace(/\\/$/, ''))) {\n return `disallowed Origin header \"${origin}\"`;\n }\n return null;\n}\n\n/** Comma-split a header/env list into trimmed non-empty values. */\nfunction splitList(value: string[] | undefined): string[] {\n return (value ?? []).flatMap((v) => v.split(',')).map((s) => s.trim()).filter(Boolean);\n}\n\n/**\n * Construct + start an HTTP server bound to the MCP server. Resolves\n * when the socket is listening (after `server.listen` 'listening'\n * event fires).\n */\nexport async function startHttpTransport(opts: HttpTransportOptions): Promise<HttpTransportHandle> {\n const port = opts.port ?? 8765;\n const host = opts.host ?? '127.0.0.1';\n const { mcpServer, log, bearerToken } = opts;\n\n // DNS-rebinding / cross-origin allow-lists. Populated after listen() so the\n // OS-assigned port (port: 0) is reflected; the handler closure reads them\n // and no request can arrive before listen resolves.\n let allowedHosts = new Set<string>();\n let allowedOrigins = new Set<string>();\n\n // Create the MCP transport (stateful — session ID per initialization).\n const mcpTransport = new StreamableHTTPServerTransport({\n sessionIdGenerator: () => randomUUID(),\n });\n\n // Wire the MCP server to this transport.\n await mcpServer.connect(mcpTransport);\n\n const httpServer: HttpServer = createServer(async (req: IncomingMessage, res: ServerResponse) => {\n // Health check — unauthenticated, separate from /mcp. Exempt from the\n // Host/Origin check too: probes (ALB/k8s) legitimately send arbitrary Host.\n if (req.method === 'GET' && (req.url === '/' || req.url === '/healthz')) {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ status: 'ok', service: 'vectros-mcp-server' }));\n return;\n }\n\n // DNS-rebinding / cross-origin guard — BEFORE auth, so a rebound browser\n // page can't even reach the bearer check.\n const rebindReason = checkHostAndOrigin(req, allowedHosts, allowedOrigins);\n if (rebindReason) {\n log.warn(\n { url: req.url, ip: req.socket.remoteAddress, host: req.headers.host, origin: req.headers.origin },\n `HTTP request rejected: ${rebindReason}`,\n );\n res.writeHead(403, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'forbidden', reason: 'host_or_origin_not_allowed' }));\n return;\n }\n\n // Client→server bearer token check (if configured).\n if (bearerToken) {\n const provided = (req.headers.authorization ?? '').replace(/^Bearer\\s+/i, '');\n if (!provided || !constantTimeEqual(provided, bearerToken)) {\n log.warn({ url: req.url, ip: req.socket.remoteAddress }, 'HTTP request rejected: bad bearer token');\n res.writeHead(401, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'unauthorized' }));\n return;\n }\n }\n\n // Route /mcp to the SDK transport. Other paths → 404.\n if (req.url === '/mcp' || req.url?.startsWith('/mcp?') || req.url?.startsWith('/mcp/')) {\n try {\n await mcpTransport.handleRequest(req, res);\n } catch (err) {\n log.error({ err: String(err), url: req.url }, 'HTTP request handler failed');\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'internal_error' }));\n }\n }\n return;\n }\n\n res.writeHead(404, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'not_found', hint: 'MCP endpoint is at /mcp' }));\n });\n\n await new Promise<void>((resolve, reject) => {\n httpServer.once('error', reject);\n httpServer.listen(port, host, () => {\n httpServer.removeListener('error', reject);\n resolve();\n });\n });\n\n const addr = httpServer.address();\n const resolvedPort = typeof addr === 'object' && addr ? addr.port : port;\n\n // Now that the port is known, build the DNS-rebinding allow-lists. The\n // handler closure reads these; requests can only arrive after listen above.\n allowedHosts = buildAllowedHosts(host, resolvedPort, splitList(opts.allowedHosts));\n allowedOrigins = buildAllowedOrigins(allowedHosts, splitList(opts.allowedOrigins));\n\n log.info(\n {\n transport: 'StreamableHTTP',\n host,\n port: resolvedPort,\n bearerToken: bearerToken ? 'set' : 'none',\n allowedHosts: [...allowedHosts],\n },\n `MCP server listening on http://${host}:${resolvedPort}/mcp`,\n );\n\n if (!bearerToken) {\n log.warn(\n 'HTTP transport started WITHOUT bearer token — anyone who can reach this port can call Vectros with your credentials. ' +\n 'Set VECTROS_MCP_HTTP_BEARER_TOKEN (or the bearerToken constructor opt) for any non-localhost deployment.',\n );\n }\n\n return {\n address: { host, port: resolvedPort },\n close: () =>\n new Promise<void>((resolve, reject) => {\n httpServer.close((err) => (err ? reject(err) : resolve()));\n }),\n };\n}\n","/**\n * Parse the `VECTROS_MCP_TOOLS` env var into a validated ToolName[].\n *\n * undefined / empty → undefined (caller defaults to all tools)\n * CSV of valid names → ToolName[]\n * any invalid name → throws (caller maps to fail-fast exit)\n *\n * Exported as a pure function so it can be unit-tested without\n * spawning the CLI. cli.ts wraps the throw → process.exit(1).\n */\nimport { TOOL_NAMES, type ToolName } from './tools/index.js';\n\nexport function parseToolsEnv(value: string | undefined): ToolName[] | undefined {\n if (!value || value.trim().length === 0) return undefined;\n const requested = value\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n if (requested.length === 0) return undefined;\n const invalid = requested.filter((n) => !TOOL_NAMES.includes(n as ToolName));\n if (invalid.length > 0) {\n throw new Error(\n `VECTROS_MCP_TOOLS contains unknown tool names: ${invalid.join(', ')}. ` +\n `Valid: ${TOOL_NAMES.join(', ')}.`,\n );\n }\n return requested as ToolName[];\n}\n","#!/usr/bin/env node\n/**\n * HTTP CLI entry (v0.2+) — sibling to cli.ts. Starts the MCP server\n * with Streamable HTTP transport instead of stdio.\n *\n * Run as: `vectros-mcp-server-http` or `npx -y @vectros-ai/mcp-server vectros-mcp-server-http`.\n *\n * Env vars (additions to the stdio set — see cli.ts for the rest):\n * VECTROS_MCP_HTTP_PORT optional; default 8765\n * VECTROS_MCP_HTTP_HOST optional; default 127.0.0.1\n * (localhost-only; pass 0.0.0.0\n * for all interfaces)\n * VECTROS_MCP_HTTP_BEARER_TOKEN optional but STRONGLY RECOMMENDED\n * for non-localhost deployments.\n * Clients must present\n * `Authorization: Bearer <token>`\n * on every request. REQUIRED when\n * binding a non-loopback host unless\n * VECTROS_MCP_HTTP_ALLOW_INSECURE=1.\n * VECTROS_MCP_HTTP_ALLOWED_HOSTS optional; comma-separated extra Host\n * header values to allow (DNS-rebinding\n * protection). Set to the public\n * hostname(s) behind a reverse proxy.\n * VECTROS_MCP_HTTP_ALLOWED_ORIGINS optional; comma-separated extra Origin\n * header values to allow.\n * VECTROS_MCP_HTTP_ALLOW_INSECURE optional; \"1\" permits a non-loopback\n * bind without a bearer token (NOT\n * recommended).\n *\n * Exit codes (same as stdio CLI):\n * 0 clean shutdown\n * 1 fatal startup error\n * 2 uncaught runtime error\n *\n * Note: same three-file pattern as cli.ts — see CONVENTIONS §46.\n * main() runs unconditionally; helpers in parse-tools-env.ts are\n * unit-testable directly.\n */\nimport { VectrosMCPServer } from './server.js';\nimport { startHttpTransport, shouldRefuseInsecureBind } from './transport/http.js';\nimport { createLogger } from './log.js';\nimport type { ToolName } from './tools/index.js';\nimport { InvalidApiKeyError } from './auth.js';\nimport { parseToolsEnv } from './parse-tools-env.js';\nimport { validateBaseUrl, InvalidBaseUrlError } from './base-url.js';\n\nasync function main(): Promise<void> {\n const log = createLogger();\n\n const apiKey = process.env.VECTROS_API_KEY;\n const apiBaseUrl = process.env.VECTROS_API_BASE_URL;\n\n // Validate any env-supplied base URL BEFORE the server attaches the API key\n // (R1 F-06a) — see cli.ts for the credential-exfil rationale.\n if (apiBaseUrl !== undefined) {\n try {\n validateBaseUrl(apiBaseUrl, { warn: (m) => log.warn(m) });\n } catch (err) {\n const msg = err instanceof InvalidBaseUrlError ? err.message : String(err);\n log.fatal({ err: msg }, 'invalid VECTROS_API_BASE_URL');\n process.exit(1);\n }\n }\n\n const port = process.env.VECTROS_MCP_HTTP_PORT\n ? Number.parseInt(process.env.VECTROS_MCP_HTTP_PORT, 10)\n : undefined;\n const host = process.env.VECTROS_MCP_HTTP_HOST;\n const bearerToken = process.env.VECTROS_MCP_HTTP_BEARER_TOKEN || undefined;\n const allowedHosts = process.env.VECTROS_MCP_HTTP_ALLOWED_HOSTS\n ? [process.env.VECTROS_MCP_HTTP_ALLOWED_HOSTS]\n : undefined;\n const allowedOrigins = process.env.VECTROS_MCP_HTTP_ALLOWED_ORIGINS\n ? [process.env.VECTROS_MCP_HTTP_ALLOWED_ORIGINS]\n : undefined;\n\n if (port !== undefined && (!Number.isFinite(port) || port < 1 || port > 65535)) {\n log.fatal({ port: process.env.VECTROS_MCP_HTTP_PORT }, 'invalid VECTROS_MCP_HTTP_PORT (must be 1-65535)');\n process.exit(1);\n }\n\n // Refuse to bind a non-loopback host without a bearer token: that is\n // an open credential proxy on the network. An explicit opt-out is required.\n const effectiveHost = host ?? '127.0.0.1';\n const allowInsecureHttp = ['1', 'true', 'yes'].includes(\n (process.env.VECTROS_MCP_HTTP_ALLOW_INSECURE ?? '').toLowerCase(),\n );\n if (shouldRefuseInsecureBind(effectiveHost, Boolean(bearerToken), allowInsecureHttp)) {\n log.fatal(\n { host: effectiveHost },\n 'refusing to bind a non-loopback host without VECTROS_MCP_HTTP_BEARER_TOKEN — anyone who can ' +\n 'reach this port could call Vectros with your credentials. Set a bearer token, or set ' +\n 'VECTROS_MCP_HTTP_ALLOW_INSECURE=1 to override (NOT recommended).',\n );\n process.exit(1);\n }\n\n let tools: ToolName[] | undefined;\n try {\n tools = parseToolsEnv(process.env.VECTROS_MCP_TOOLS);\n } catch (err) {\n log.fatal({ err: String(err) }, 'invalid VECTROS_MCP_TOOLS');\n process.exit(1);\n }\n\n const skipFlag = (process.env.VECTROS_MCP_SKIP_PING_VALIDATION ?? '').toLowerCase();\n const validateOnStart = !(skipFlag === '1' || skipFlag === 'true');\n\n let server: VectrosMCPServer;\n try {\n server = new VectrosMCPServer({\n apiKey: apiKey as string,\n tools,\n apiBaseUrl,\n logger: log,\n validateOnStart,\n transport: 'http',\n });\n } catch (err) {\n if (err instanceof InvalidApiKeyError) {\n log.fatal({ err: err.message }, 'startup failed: invalid API key');\n } else {\n log.fatal({ err: String(err) }, 'startup failed');\n }\n process.exit(1);\n }\n\n let handle: Awaited<ReturnType<typeof startHttpTransport>>;\n try {\n handle = await startHttpTransport({\n mcpServer: server,\n log,\n port,\n host,\n bearerToken,\n allowedHosts,\n allowedOrigins,\n });\n } catch (err) {\n log.fatal({ err: String(err) }, 'failed to start HTTP transport');\n process.exit(2);\n }\n\n const shutdown = async (signal: string) => {\n log.info({ signal }, 'shutdown requested');\n try {\n await handle.close();\n await server.close();\n } catch (err) {\n log.warn({ err: String(err) }, 'error during shutdown');\n }\n process.exit(0);\n };\n process.on('SIGINT', () => void shutdown('SIGINT'));\n process.on('SIGTERM', () => void shutdown('SIGTERM'));\n\n // Stays alive until SIGINT/SIGTERM — the HTTP server keeps the\n // event loop busy via its listening socket.\n}\n\nmain().catch((err) => {\n process.stderr.write(`fatal: ${err instanceof Error ? err.stack : String(err)}\\n`);\n process.exit(2);\n});\n"],"mappings":"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","names":["resolve","z","createLogger","z","MCP_DEFAULT_LIMIT","MCP_MAX_LIMIT","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","MCP_DEFAULT_LIMIT","MCP_MAX_LIMIT","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","MCP_DEFAULT_LIMIT","MCP_MAX_LIMIT","inputSchema","z","z","inputSchema","z","z","inputSchema","z","z","inputSchema","z","inputSchema","z","inputSchema","z","z","MCP_DEFAULT_LIMIT","MCP_MAX_LIMIT","inputSchema","z","z","inputSchema","z","z","createLogger","z","resolve","createLogger"]}
|