@caitlyn-ai/sdk-core 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -7
- package/dist-cjs/index.cjs +305 -172
- package/dist-cjs/index.cjs.map +3 -3
- package/dist-es/index.mjs +298 -167
- package/dist-es/index.mjs.map +3 -3
- package/dist-types/index.d.ts +3169 -12
- package/package.json +1 -2
- package/dist-types/auth.d.ts +0 -140
- package/dist-types/aws.d.ts +0 -43
- package/dist-types/client.d.ts +0 -62
- package/dist-types/endpoint.d.ts +0 -4
- package/dist-types/plugin.d.ts +0 -21
- package/dist-types/protocol.d.ts +0 -24
- package/dist-types/retry.d.ts +0 -11
- package/dist-types/sse.d.ts +0 -6
- package/dist-types/stream.d.ts +0 -34
- package/dist-types/telemetry.d.ts +0 -3
- package/dist-types/upload.d.ts +0 -12
- package/dist-types/waiter.d.ts +0 -30
package/dist-cjs/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/aws.ts", "../src/index.ts", "../src/protocol.ts", "../src/plugin.ts", "../src/retry.ts", "../src/endpoint.ts", "../src/telemetry.ts", "../src/sse.ts", "../src/stream.ts", "../src/upload.ts", "../src/auth.ts", "../src/client.ts", "../src/waiter.ts"],
|
|
4
|
-
"sourcesContent": ["// The AWS half of the awsIam sign-in mode, with no AWS runtime: a minimal Signature Version 4 signer over Web\n// Crypto, the two credential sources AWS workloads actually use (environment variables, and the container\n// credentials endpoint used by ECS, Fargate and AgentCore runtimes), and one call, STS GetWebIdentityToken.\n// Anything else (profiles, SSO, instance metadata) is reached by passing `credentials`, which accepts any\n// @aws-sdk credential provider, for example fromNodeProviderChain() from @aws-sdk/credential-providers.\n\nexport interface AwsCredentials {\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n /** When the credentials stop working; the SDK fetches new ones a minute before. */\n expiration?: Date;\n}\n\nexport type AwsCredentialSource = AwsCredentials | (() => Promise<AwsCredentials> | AwsCredentials);\n\ntype Env = Record<string, string | undefined>;\nconst env = (): Env => (globalThis as { process?: { env?: Env } }).process?.env ?? {};\n\nconst enc = new TextEncoder();\nconst hex = (b: ArrayBuffer) => [...new Uint8Array(b)].map((x) => x.toString(16).padStart(2, '0')).join('');\nconst sha256 = async (s: string) => hex(await crypto.subtle.digest('SHA-256', enc.encode(s)));\nasync function hmac(key: ArrayBuffer | Uint8Array, data: string): Promise<ArrayBuffer> {\n const k = await crypto.subtle.importKey('raw', key as BufferSource, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\n return crypto.subtle.sign('HMAC', k, enc.encode(data));\n}\n\n/** RFC 3986 encoding, as Signature Version 4 requires (encodeURIComponent leaves !'()* alone). */\nexport const awsEncode = (s: string) => encodeURIComponent(s).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);\n\nexport interface SignableRequest {\n method: string;\n url: URL;\n headers: Record<string, string>;\n body: string;\n}\n\n/**\n * Signs a request with AWS Signature Version 4 (header form) and returns the headers to send, including\n * `authorization`, `x-amz-date`, `x-amz-content-sha256` and, for temporary credentials, `x-amz-security-token`.\n */\nexport async function signV4(req: SignableRequest, creds: AwsCredentials, region: string, service: string, now = new Date()): Promise<Record<string, string>> {\n const amzDate = now.toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const day = amzDate.slice(0, 8);\n const payloadHash = await sha256(req.body);\n const headers: Record<string, string> = {};\n for (const [k, v] of Object.entries(req.headers)) headers[k.toLowerCase()] = v.trim().replace(/\\s+/g, ' ');\n headers.host = req.url.host;\n headers['x-amz-date'] = amzDate;\n headers['x-amz-content-sha256'] = payloadHash;\n if (creds.sessionToken) headers['x-amz-security-token'] = creds.sessionToken;\n const names = Object.keys(headers).sort();\n const query = [...req.url.searchParams.entries()]\n .map(([k, v]) => [awsEncode(k), awsEncode(v)])\n .sort(([a, x], [b, y]) => (a === b ? (x < y ? -1 : 1) : a < b ? -1 : 1))\n .map(([k, v]) => `${k}=${v}`)\n .join('&');\n const path = req.url.pathname.split('/').map((p) => awsEncode(decodeURIComponent(p))).join('/') || '/';\n const canonical = [req.method, path, query, names.map((n) => `${n}:${headers[n]}\\n`).join(''), names.join(';'), payloadHash].join('\\n');\n const scope = `${day}/${region}/${service}/aws4_request`;\n const toSign = ['AWS4-HMAC-SHA256', amzDate, scope, await sha256(canonical)].join('\\n');\n let key: ArrayBuffer = await hmac(enc.encode(`AWS4${creds.secretAccessKey}`), day);\n for (const part of [region, service, 'aws4_request']) key = await hmac(key, part);\n const signature = hex(await hmac(key, toSign));\n headers.authorization = `AWS4-HMAC-SHA256 Credential=${creds.accessKeyId}/${scope}, SignedHeaders=${names.join(';')}, Signature=${signature}`;\n delete headers.host; // fetch sets it\n return headers;\n}\n\n/**\n * The default credential source: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY (with AWS_SESSION_TOKEN), as AWS\n * Lambda and CI runners set them; otherwise the container credentials endpoint\n * (AWS_CONTAINER_CREDENTIALS_FULL_URI or _RELATIVE_URI), as ECS, Fargate and AgentCore runtimes set it.\n */\nexport async function defaultAwsCredentials(fetchFn: typeof fetch = fetch): Promise<AwsCredentials> {\n const e = env();\n if (e.AWS_ACCESS_KEY_ID && e.AWS_SECRET_ACCESS_KEY)\n return { accessKeyId: e.AWS_ACCESS_KEY_ID, secretAccessKey: e.AWS_SECRET_ACCESS_KEY, sessionToken: e.AWS_SESSION_TOKEN };\n const url = e.AWS_CONTAINER_CREDENTIALS_FULL_URI ?? (e.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI && `http://169.254.170.2${e.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}`);\n if (url) {\n let auth = e.AWS_CONTAINER_AUTHORIZATION_TOKEN;\n if (!auth && e.AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE) {\n const fsModule = 'node:fs/promises'; // a variable, so browser bundlers leave it alone\n const fs = (await import(/* @vite-ignore */ fsModule)) as typeof import('node:fs/promises');\n auth = (await fs.readFile(e.AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE, 'utf8')).trim();\n }\n const res = await fetchFn(url, { headers: auth ? { authorization: auth } : {} });\n if (!res.ok) throw new Error(`awsIam: the container credentials endpoint answered ${res.status}`);\n const c = (await res.json()) as { AccessKeyId: string; SecretAccessKey: string; Token?: string; Expiration?: string };\n return { accessKeyId: c.AccessKeyId, secretAccessKey: c.SecretAccessKey, sessionToken: c.Token, expiration: c.Expiration ? new Date(c.Expiration) : undefined };\n }\n throw new Error(\n 'awsIam: no AWS credentials found. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, run where the container credentials endpoint is set, or pass auth.credentials (for example fromNodeProviderChain() from @aws-sdk/credential-providers).',\n );\n}\n\nconst xmlText = (xml: string, tag: string) => xml.match(new RegExp(`<${tag}>([^<]*)</${tag}>`))?.[1];\n\nexport interface WebIdentityTokenRequest {\n region: string;\n audience: string;\n credentials: AwsCredentials;\n signingAlgorithm?: 'ES384' | 'RS256';\n durationSeconds?: number;\n /** Overrides https://sts.{region}.amazonaws.com/ (tests, FIPS or VPC endpoints). */\n stsEndpoint?: string;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/** Calls STS GetWebIdentityToken (outbound identity federation) on a regional endpoint and returns the JWT. */\nexport async function getWebIdentityToken(r: WebIdentityTokenRequest): Promise<{ token: string; expiration?: Date }> {\n const url = new URL(r.stsEndpoint ?? `https://sts.${r.region}.amazonaws.com/`);\n const body = new URLSearchParams({\n Action: 'GetWebIdentityToken',\n Version: '2011-06-15',\n 'Audience.member.1': r.audience,\n DurationSeconds: String(r.durationSeconds ?? 300),\n SigningAlgorithm: r.signingAlgorithm ?? 'ES384',\n }).toString();\n const headers = await signV4({ method: 'POST', url, headers: { 'content-type': 'application/x-www-form-urlencoded; charset=utf-8' }, body }, r.credentials, r.region, 'sts');\n const res = await (r.fetch ?? fetch)(url, { method: 'POST', headers, body, signal: r.signal });\n const text = await res.text();\n if (!res.ok) {\n const code = xmlText(text, 'Code') ?? `HTTP ${res.status}`;\n throw Object.assign(new Error(`awsIam: STS GetWebIdentityToken failed: ${code}: ${xmlText(text, 'Message') ?? ''}`.trim()), { code, status: res.status });\n }\n const token = xmlText(text, 'WebIdentityToken');\n if (!token) throw new Error('awsIam: STS answered without a WebIdentityToken');\n const exp = xmlText(text, 'Expiration');\n return { token, expiration: exp ? new Date(exp) : undefined };\n}\n", "export { CaitlynRestJsonProtocol, type WithRaw } from './protocol.js';\nexport { getCaitlynSdkPlugin, NotSupportedByServer, CAITLYN_SDK_USER_AGENT_PREFIX } from './plugin.js';\nexport { CaitlynRetryStrategy, NO_RETRY } from './retry.js';\nexport { caitlynEndpointProvider } from './endpoint.js';\nexport { getCaitlynTelemetryPlugin } from './telemetry.js';\nexport { SseStream, type SseSpec } from './stream.js';\nexport { parseSse, type SseMessage } from './sse.js';\nexport { uploadFile, type UploadMeta, type UploadSlot } from './upload.js';\nexport { clientConfig, createAuth, workspaceEndpoint, type CaitlynOptions, type CallOptions, type CaitlynErrorFields, type CaitlynFieldError } from './client.js';\nexport { AuthSession, CaitlynAuthError, workspaceAudience, workspaceHost, getCaitlynAuthPlugin, tokenIdentityProvider, type AuthOptions, type OAuthTokens, type TokenStore } from './auth.js';\nexport { signV4, getWebIdentityToken, defaultAwsCredentials, type AwsCredentials, type AwsCredentialSource } from './aws.js';\nexport { waitUntil, WaiterError, type WaiterOptions, type WaiterState } from './waiter.js';\n", "// CaitlynRestJsonProtocol: the runtime half of ai.caitlyn.protocols#restJson, on @smithy/core only.\n//\n// - HTTP bindings and JSON bodies as restJson1 (reusing Smithy's JsonCodec2 and HTTP binding serde).\n// - Errors are RFC 9457 problem details. The typed error class is chosen by HTTP status against the\n// model's @error/@httpError shapes; the body's `code` stays a field (the stable product code), never\n// a shape name. No X-Amzn-Errortype.\n// - Unknown response fields are kept: every non-streaming output carries `raw`, the parsed JSON body.\n// - $metadata.requestId comes from Caitlyn-Request-Id.\nimport {\n HttpBindingProtocol,\n HttpInterceptingShapeDeserializer,\n HttpInterceptingShapeSerializer,\n JsonCodec2,\n collectBody,\n} from '@smithy/core/protocols';\nimport { NormalizedSchema, TypeRegistry } from '@smithy/core/schema';\nimport { decorateServiceException } from '@smithy/core/client';\nimport type {\n HandlerExecutionContext,\n HttpRequest,\n HttpResponse,\n MetadataBearer,\n OperationSchema,\n ResponseMetadata,\n SerdeFunctions,\n StaticErrorSchema,\n} from '@smithy/types';\n\n/** An output with the parsed response body, including fields this SDK version does not model. */\nexport type WithRaw<T> = T & { readonly raw?: Record<string, unknown> };\n\nconst SETTINGS = {\n timestampFormat: { useTrait: true, default: 5 /* date-time (RFC 3339) */ },\n httpBindings: true,\n jsonName: true,\n} as const;\n\ntype ErrorSchemaTuple = StaticErrorSchema & [number, string, string, Record<string, unknown> | number, ...unknown[]];\n\nexport class CaitlynRestJsonProtocol extends HttpBindingProtocol {\n protected serializer;\n protected deserializer;\n private readonly codec: JsonCodec2;\n\n constructor({ defaultNamespace, errorTypeRegistries }: { defaultNamespace: string; errorTypeRegistries?: TypeRegistry[] }) {\n super({ defaultNamespace, errorTypeRegistries });\n this.codec = new JsonCodec2(SETTINGS as never);\n this.serializer = new HttpInterceptingShapeSerializer(this.codec.createSerializer(), SETTINGS as never);\n this.deserializer = new HttpInterceptingShapeDeserializer(this.codec.createDeserializer(), SETTINGS as never);\n }\n\n getShapeId(): string {\n return 'ai.caitlyn.protocols#restJson';\n }\n\n getDefaultContentType(): string {\n return 'application/json';\n }\n\n getPayloadCodec() {\n return this.codec;\n }\n\n override setSerdeContext(serdeContext: SerdeFunctions): void {\n this.codec.setSerdeContext(serdeContext);\n super.setSerdeContext(serdeContext);\n }\n\n override async serializeRequest<Input extends object>(operationSchema: OperationSchema, input: Input, context: Parameters<HttpBindingProtocol['serializeRequest']>[2]): Promise<HttpRequest> {\n const request = await super.serializeRequest(operationSchema, input, context);\n if (!request.headers['content-type']) {\n const contentType = resolveContentType(NormalizedSchema.of(operationSchema.input));\n if (contentType) request.headers['content-type'] = contentType;\n }\n if (request.body == null && request.headers['content-type'] === 'application/json') request.body = '{}';\n // SSE operations (a streaming payload with mediaType text/event-stream) ask for it: proxies and CDNs key\n // on Accept to stop buffering, and the proposal's re-join wire form depends on it. PROTOCOL.md 3.1.\n const out = NormalizedSchema.of(operationSchema.output);\n for (const [, member] of out.structIterator()) {\n if (member.getMemberTraits().httpPayload && member.isStreaming() && member.getMergedTraits().mediaType === 'text/event-stream') {\n request.headers['accept'] = 'text/event-stream';\n }\n }\n return request;\n }\n\n override async deserializeResponse<Output extends MetadataBearer>(operationSchema: OperationSchema, context: HandlerExecutionContext & SerdeFunctions, response: HttpResponse): Promise<Output> {\n const ns = NormalizedSchema.of(operationSchema.output);\n const streaming = [...ns.structIterator()].some(([, m]) => m.getMemberTraits().httpPayload && m.isStreaming());\n if (response.statusCode >= 300) {\n // A body that is not a JSON object (a proxy's or a web framework's own error page, or no body) is still\n // the typed error for its status, never a parse error (PROTOCOL.md 6.1).\n const bytes = await collectBody(response.body, context);\n response.body = bytes;\n if (!isJsonObject(bytes)) {\n await this.handleError(operationSchema, context, response, {}, this.deserializeMetadata(response));\n }\n return super.deserializeResponse(operationSchema, context, response);\n }\n if (streaming) return super.deserializeResponse(operationSchema, context, response);\n const bytes = await collectBody(response.body, context);\n response.body = bytes;\n const output = await super.deserializeResponse<Output>(operationSchema, context, response);\n if (bytes.byteLength > 0) {\n let json: unknown;\n try {\n json = JSON.parse(new TextDecoder().decode(bytes));\n } catch {\n return output; // not JSON: no raw view\n }\n attachRaw(ns, output, json);\n }\n return output;\n }\n\n protected override deserializeMetadata(response: HttpResponse): ResponseMetadata {\n return { httpStatusCode: response.statusCode, requestId: response.headers['caitlyn-request-id'] };\n }\n\n protected async handleError(\n _operationSchema: OperationSchema,\n context: HandlerExecutionContext & SerdeFunctions,\n response: HttpResponse,\n dataObject: Record<string, unknown>,\n metadata: ResponseMetadata,\n ): Promise<never> {\n const registry = this.compositeErrorRegistry;\n registry.copyFrom(TypeRegistry.for(this.options.defaultNamespace));\n const errorMetadata = { $metadata: metadata, $fault: response.statusCode < 500 ? 'client' : 'server' };\n const rawBody = response.body instanceof Uint8Array ? new TextDecoder().decode(response.body) : '';\n const body: Record<string, unknown> = {\n ...dataObject,\n // Always the HTTP status: a body's `status` can be wrong (a proxy, a faulty handler), and the class is\n // chosen by the HTTP status too (PROTOCOL.md 6.3).\n status: response.statusCode,\n code: typeof dataObject.code === 'string' && dataObject.code ? dataObject.code : `HTTP_${response.statusCode}`,\n requestId: dataObject.requestId ?? response.headers['caitlyn-request-id'],\n rawBody,\n };\n const message = (body.detail ?? body.title ?? `HTTP ${response.statusCode}`) as string;\n\n const schema = registry.find((s) => {\n const tuple = s as unknown as ErrorSchemaTuple;\n if (!Array.isArray(tuple) || tuple[0] !== -3) return false;\n return NormalizedSchema.of(s as never).getMergedTraits().httpError === response.statusCode;\n }) as StaticErrorSchema | undefined;\n\n if (!schema) {\n const base = registry.getBaseException();\n const Ctor = (base && registry.getErrorCtor(base)) || Error;\n const name = body.code as string;\n throw decorateServiceException(Object.assign(new (Ctor as any)({ name, message }), errorMetadata), body);\n }\n\n const ns = NormalizedSchema.of(schema as never);\n const Ctor = registry.getErrorCtor(schema) ?? Error;\n const exception = new (Ctor as any)({ message });\n await this.deserializeHttpMessage(schema as never, context, response, body); // header-bound members, e.g. Retry-After\n const reader = this.codec.createDeserializer() as unknown as { readObject(schema: unknown, value: unknown): unknown };\n const fields: Record<string, unknown> = {};\n for (const [name, member] of ns.structIterator()) {\n const key = member.getMergedTraits().jsonName ?? name;\n if (body[name] !== undefined && member.getMergedTraits().httpHeader) fields[name] = body[name];\n else if (body[key] !== undefined) fields[name] = reader.readObject(member, body[key]);\n }\n throw decorateServiceException(Object.assign(exception, errorMetadata, { $fault: ns.getMergedTraits().error, message }, fields), body);\n }\n}\n\n/** Whether a response body parses as a JSON object, the only body problem details can be read from. */\nfunction isJsonObject(bytes: Uint8Array): boolean {\n if (bytes.byteLength === 0) return false;\n try {\n const value: unknown = JSON.parse(new TextDecoder().decode(bytes));\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n } catch {\n return false;\n }\n}\n\n/** Every deserialised structure, at any depth, gets a non-enumerable `raw`: its JSON object, unknown fields included. */\nfunction attachRaw(schema: NormalizedSchema, value: unknown, json: unknown): void {\n if (value === null || typeof value !== 'object' || json === null || typeof json !== 'object') return;\n if (schema.isStructSchema()) {\n Object.defineProperty(value, 'raw', { value: json, enumerable: false, configurable: true });\n for (const [name, member] of schema.structIterator()) {\n const key = (member.getMergedTraits().jsonName as string | undefined) ?? name;\n attachRaw(member, (value as Record<string, unknown>)[name], (json as Record<string, unknown>)[key]);\n }\n } else if (schema.isListSchema() && Array.isArray(value) && Array.isArray(json)) {\n const item = schema.getValueSchema();\n value.forEach((v, i) => attachRaw(item, v, json[i]));\n }\n}\n\nfunction resolveContentType(input: NormalizedSchema): string | undefined {\n const members = input.getMemberSchemas();\n const payload = Object.values(members).find((m) => m.getMergedTraits().httpPayload);\n if (payload) {\n const mediaType = payload.getMergedTraits().mediaType as string | undefined;\n if (mediaType) return mediaType;\n if (payload.isStringSchema()) return 'text/plain';\n if (payload.isBlobSchema()) return 'application/octet-stream';\n return 'application/json';\n }\n if (input.isUnitSchema()) return undefined;\n const hasBody = Object.values(members).some((m) => {\n const t = m.getMergedTraits();\n return !t.httpQuery && !t.httpQueryParams && !t.httpHeader && !t.httpLabel && t.httpPrefixHeaders === undefined;\n });\n return hasBody ? 'application/json' : undefined;\n}\n", "// getCaitlynSdkPlugin: SDK identity on every request, with no AWS headers.\n// - User-Agent: caitlyn-sdk-ts/<version> lang/js md/<runtime>\n// - Caitlyn-Sdk-Model: the model version the SDK was generated from (highest @since)\n// - removes smithy-typescript's retry bookkeeping headers (amz-sdk-invocation-id, amz-sdk-request)\n// - reads Caitlyn-Api-Version from responses, and fails a call before sending when the operation, or a\n// member the caller set, is newer than that server (@since; PROTOCOL.md rule 8)\nimport { getOmitRetryHeadersPlugin } from '@smithy/core/retry';\nimport { HttpRequest } from '@smithy/core/protocols';\nimport type { BuildMiddleware, DeserializeMiddleware, FinalizeRequestMiddleware, InitializeMiddleware, Pluggable } from '@smithy/types';\nimport { HttpResponse } from '@smithy/core/protocols';\nimport { NO_RETRY } from './retry.js';\n\nexport const CAITLYN_SDK_USER_AGENT_PREFIX = 'caitlyn-sdk-ts';\n\nexport class NotSupportedByServer extends Error {\n constructor(readonly operation: string, readonly requires: string, readonly server: string) {\n super(`NotSupportedByServer(${operation}, requires ${requires}, server is ${server})`);\n this.name = 'NotSupportedByServer';\n }\n}\n\nconst semver = (a: string, b: string) => {\n const pa = a.split('.').map(Number);\n const pb = b.split('.').map(Number);\n for (let i = 0; i < 3; i++) if (pa[i] !== pb[i]) return (pa[i] ?? 0) - (pb[i] ?? 0);\n return 0;\n};\n\nfunction runtime(): string {\n const g = globalThis as { process?: { versions?: { node?: string; bun?: string } }; Deno?: { version?: { deno?: string } } };\n if (g.process?.versions?.bun) return `md/bun#${g.process.versions.bun}`;\n if (g.Deno?.version?.deno) return `md/deno#${g.Deno.version.deno}`;\n if (g.process?.versions?.node) return `md/nodejs#${g.process.versions.node}`;\n return 'md/browser';\n}\n\n/**\n * @param options.sdkModel the highest @since in the model: the server release this SDK was generated against\n * @param options.retrySafeOperations operations that are @readonly, @idempotent or have an @idempotencyToken member\n * @param options.since `Operation=5.120.0` and `Operation.member=5.124.0` entries from the model's @since traits\n */\nexport function getCaitlynSdkPlugin(\n config: { caitlynSdkVersion?: string; customUserAgent?: string },\n options: { sdkModel: string; retrySafeOperations: string[]; since?: string[] },\n): Pluggable<any, any> {\n let server: string | undefined; // the last Caitlyn-Api-Version this client saw\n const since = new Map((options.since ?? []).map((e) => e.split('=') as [string, string]));\n const sinceCheck: InitializeMiddleware<any, any> = (next, context) => async (args) => {\n const op = context.commandName?.replace(/Command$/, '');\n if (op && server) {\n const required = since.get(op);\n if (required && semver(required, server) > 0) throw new NotSupportedByServer(op, required, server);\n for (const [member, value] of Object.entries(args.input as object)) {\n const memberSince = value === undefined ? undefined : since.get(`${op}.${member}`);\n if (memberSince && semver(memberSince, server) > 0) throw new NotSupportedByServer(`${op}.${member}`, memberSince, server);\n }\n }\n return next(args);\n };\n const serverVersion: DeserializeMiddleware<any, any> = (next) => async (args) => {\n try {\n const out = await next(args);\n if (HttpResponse.isInstance(out.response)) server = out.response.headers['caitlyn-api-version'] ?? server;\n return out;\n } catch (err) {\n const res = (err as { $response?: unknown }).$response;\n if (HttpResponse.isInstance(res)) server = res.headers['caitlyn-api-version'] ?? server;\n throw err;\n }\n };\n const userAgent = [`${CAITLYN_SDK_USER_AGENT_PREFIX}/${config.caitlynSdkVersion ?? '0.0.0'}`, 'lang/js', runtime(), config.customUserAgent]\n .filter(Boolean)\n .join(' ');\n const identity: BuildMiddleware<any, any> = (next) => async (args) => {\n if (HttpRequest.isInstance(args.request)) {\n args.request.headers['user-agent'] = userAgent;\n args.request.headers['caitlyn-sdk-model'] = options.sdkModel;\n }\n return next(args);\n };\n const safe = new Set(options.retrySafeOperations);\n // Inside the retry loop: mark errors from operations that must not be retried.\n const retrySafety: FinalizeRequestMiddleware<any, any> = (next, context) => async (args) => {\n try {\n return await next(args);\n } catch (err) {\n const op = context.commandName?.replace(/Command$/, '');\n if (op && !safe.has(op) && err && typeof err === 'object') Object.defineProperty(err, NO_RETRY, { value: true });\n throw err;\n }\n };\n return {\n applyToStack(stack) {\n stack.add(sinceCheck, { step: 'initialize', name: 'caitlynSinceCheck', priority: 'high', override: true });\n stack.add(serverVersion, { step: 'deserialize', name: 'caitlynServerVersion', priority: 'low', override: true });\n stack.add(identity, { step: 'build', name: 'caitlynSdkIdentity', priority: 'low', override: true });\n stack.addRelativeTo(retrySafety, { toMiddleware: 'retryMiddleware', relation: 'after', name: 'caitlynRetrySafety' });\n getOmitRetryHeadersPlugin({}).applyToStack(stack);\n },\n };\n}\n", "// Caitlyn's shared retry rules (ai.caitlyn.protocols#restJson, rule 4), as a smithy-typescript RetryStrategyV2.\n// - At most `maxAttempts` attempts (default 3).\n// - Only operations that are @readonly, @idempotent or have an @idempotencyToken member are retried;\n// getCaitlynSdkPlugin marks errors from any other operation with NO_RETRY.\n// - Retried: modelled @retryable errors (429, 503) and connection failures with no response.\n// - Delay: Retry-After (seconds or HTTP-date), honoured in full up to maxRetryDelayMs (default 60 s);\n// above that, fail at once with the typed error. Without Retry-After: full-jitter exponential,\n// base 0.5 s, cap 8 s.\n// The retry middleware itself sleeps for the token's delay.\nimport type { Provider, RetryErrorInfo, RetryStrategyV2, RetryToken } from '@smithy/types';\n\nexport const NO_RETRY = Symbol.for('caitlyn.noRetry');\n\nclass Token implements RetryToken {\n constructor(private readonly count: number, private readonly delay: number) {}\n getRetryCount() {\n return this.count;\n }\n getRetryDelay() {\n return this.delay;\n }\n}\n\nexport class CaitlynRetryStrategy implements RetryStrategyV2 {\n readonly mode = 'standard';\n private readonly maxAttempts: Provider<number>;\n\n constructor(maxAttempts: number | Provider<number> = 3, private readonly maxRetryDelayMs = 60_000) {\n this.maxAttempts = typeof maxAttempts === 'number' ? async () => maxAttempts : maxAttempts;\n }\n\n async acquireInitialRetryToken(): Promise<RetryToken> {\n return new Token(0, 0);\n }\n\n async refreshRetryTokenForRetry(token: RetryToken, info: RetryErrorInfo): Promise<RetryToken> {\n const count = token.getRetryCount();\n const err = info.error as (Error & { [NO_RETRY]?: boolean; $retryable?: unknown; $metadata?: { httpStatusCode?: number } }) | undefined;\n if (count + 1 >= (await this.maxAttempts())) throw new Error('retry: attempts exhausted');\n if (!err || err[NO_RETRY]) throw new Error('retry: operation is not safe to retry');\n const noResponse = err.$metadata?.httpStatusCode === undefined && err.name !== 'AbortError';\n if (err.$retryable === undefined && !noResponse) throw new Error('retry: error is not retryable');\n let delay: number;\n if (info.retryAfterHint instanceof Date) {\n delay = Math.max(0, info.retryAfterHint.getTime() - Date.now());\n if (delay > this.maxRetryDelayMs) throw new Error('retry: Retry-After exceeds maxRetryDelay');\n } else {\n delay = Math.random() * Math.min(8_000, 500 * 2 ** count);\n }\n return new Token(count + 1, delay);\n }\n\n recordSuccess(): void {}\n}\n", "// A workspace has exactly one base URL (its hostname), so the endpoint is the configured URL, unchanged.\n// Replaces smithy-typescript's rules-engine resolver (about 12 KB minified).\nimport type { EndpointV2 } from '@smithy/types';\n\nexport const caitlynEndpointProvider = (params: { endpoint?: string }): EndpointV2 => {\n if (!params.endpoint) throw new Error('Caitlyn: no endpoint. Pass `workspace` or `endpoint` when creating the client.');\n return { url: new URL(params.endpoint) };\n};\n", "// OpenTelemetry for the generated client: one span per call, one child span per HTTP attempt\n// (http.request.resend_count), traceparent through the global propagator. Uses only @opentelemetry/api,\n// so it is a no-op until the integrator configures a provider.\nimport type { Pluggable, HandlerExecutionContext, FinalizeHandler, FinalizeHandlerArguments } from '@smithy/types';\nimport { HttpRequest, HttpResponse } from '@smithy/core/protocols';\nimport { context, propagation, trace, SpanKind, SpanStatusCode, type TracerProvider, type Span } from '@opentelemetry/api';\n\ntype Ctx = HandlerExecutionContext & { __caitlynSpan?: Span; __attempt?: number };\n\nexport function getCaitlynTelemetryPlugin(provider?: TracerProvider): Pluggable<any, any> {\n const tracer = (provider ?? trace.getTracerProvider()).getTracer('@caitlyn-ai/sdk', '0.0.2');\n return {\n applyToStack(stack) {\n // One client span per logical call.\n stack.add(\n (next, ctx: Ctx) => async (args) => {\n const op = ctx.commandName?.replace(/Command$/, '') ?? 'unknown';\n return tracer.startActiveSpan(`caitlyn ${op}`, { kind: SpanKind.CLIENT, attributes: { 'caitlyn.operation': op } }, async (span) => {\n ctx.__caitlynSpan = span;\n ctx.__attempt = 0;\n try {\n const out = await next(args);\n return out;\n } catch (err) {\n span.recordException(err as Error);\n span.setStatus({ code: SpanStatusCode.ERROR });\n span.setAttribute('error.type', (err as Error).name);\n throw err;\n } finally {\n span.end();\n }\n });\n },\n { step: 'initialize', name: 'caitlynTelemetryCall', priority: 'high' },\n );\n // One child span per HTTP attempt, inside the retry loop.\n stack.addRelativeTo(\n (next: FinalizeHandler<any, any>, ctx: Ctx) => async (args: FinalizeHandlerArguments<any>) => {\n const attempt = ctx.__attempt ?? 0;\n ctx.__attempt = attempt + 1;\n const parent = ctx.__caitlynSpan ? trace.setSpan(context.active(), ctx.__caitlynSpan) : context.active();\n const span = tracer.startSpan(`HTTP ${(args.request as HttpRequest).method}`, { kind: SpanKind.CLIENT, attributes: { 'http.request.resend_count': attempt } }, parent);\n const req = args.request;\n if (HttpRequest.isInstance(req)) {\n span.setAttribute('server.address', req.hostname);\n propagation.inject(trace.setSpan(parent, span), req.headers);\n }\n try {\n const out = await next(args);\n if (HttpResponse.isInstance(out.response)) {\n span.setAttribute('http.response.status_code', out.response.statusCode);\n const rid = out.response.headers['caitlyn-request-id'];\n if (rid) {\n span.setAttribute('caitlyn.request_id', rid);\n ctx.__caitlynSpan?.setAttribute('caitlyn.request_id', rid);\n }\n }\n return out;\n } catch (err) {\n const res = (err as { $response?: unknown }).$response;\n if (HttpResponse.isInstance(res)) span.setAttribute('http.response.status_code', res.statusCode);\n span.setStatus({ code: SpanStatusCode.ERROR });\n throw err;\n } finally {\n span.end();\n }\n },\n { toMiddleware: 'retryMiddleware', relation: 'after', name: 'caitlynTelemetryAttempt' },\n );\n },\n };\n}\n", "// Server-sent events parser (WHATWG HTML \"event stream interpretation\"), over any async iterable of bytes.\n// Hand-written runtime: Smithy's generators only speak AWS's binary event-stream framing.\nexport interface SseMessage {\n id?: string;\n event: string;\n data: string;\n}\n\nexport async function* parseSse(body: AsyncIterable<Uint8Array | string>): AsyncGenerator<SseMessage> {\n const decoder = new TextDecoder();\n let buffer = '';\n let id: string | undefined;\n let event = '';\n let data: string[] = [];\n for await (const chunk of body) {\n buffer += typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\n let nl: number;\n while ((nl = buffer.search(/\\r\\n|\\r|\\n/)) >= 0) {\n const line = buffer.slice(0, nl);\n buffer = buffer.slice(nl + (buffer[nl] === '\\r' && buffer[nl + 1] === '\\n' ? 2 : 1));\n if (line === '') {\n if (data.length) yield { id, event: event || 'message', data: data.join('\\n') };\n event = '';\n data = [];\n continue;\n }\n if (line.startsWith(':')) continue;\n const colon = line.indexOf(':');\n const field = colon < 0 ? line : line.slice(0, colon);\n let value = colon < 0 ? '' : line.slice(colon + 1);\n if (value.startsWith(' ')) value = value.slice(1);\n if (field === 'data') data.push(value);\n else if (field === 'event') event = value;\n else if (field === 'id' && !value.includes('\\0')) id = value;\n }\n }\n}\n", "// SseStream: the runtime half of @sseEvents (PROTOCOL.md rule 7). Generated code supplies the event names and\n// how to open and resume the stream; this class does parsing, skipping unknown events, de-duplication by id,\n// resuming with Last-Event-ID, abort handling and finalMessage().\nimport { parseSse } from './sse.js';\n\nexport interface SseSpec {\n /** SSE `event:` names this SDK knows (the union members' jsonNames). Others are skipped. */\n readonly known: ReadonlySet<string>;\n /** The event that ends the stream successfully, and the member finalMessage() returns. */\n readonly final?: { event: string; member: string };\n /** The event carrying RFC 9457 problem details; it ends the stream with a thrown error. */\n readonly errorEvent?: string;\n /** Builds the typed error for an error event. */\n readonly toError: (problem: Record<string, unknown>) => Error;\n}\n\ntype Body = AsyncIterable<Uint8Array>;\n\nexport class SseStream<E extends { type: string }, F = never> implements AsyncIterable<E> {\n private finalValue?: F;\n private consumed = false;\n private readonly seen = new Set<string>();\n lastEventId?: string;\n reconnects = 0;\n\n constructor(\n private readonly spec: SseSpec,\n private readonly open: () => Promise<Body>,\n private readonly resume: ((lastEventId: string | undefined) => Promise<Body>) | undefined,\n private readonly signal?: AbortSignal,\n private readonly maxReconnects = 3,\n ) {}\n\n private aborted(): unknown {\n return this.signal?.reason ?? new DOMException('Aborted', 'AbortError');\n }\n\n async *[Symbol.asyncIterator](): AsyncGenerator<E> {\n if (this.consumed) throw new Error('SseStream can only be iterated once');\n this.consumed = true;\n let body = await this.open();\n for (;;) {\n let ended = false;\n try {\n for await (const msg of parseSse(body)) {\n if (msg.id) {\n if (this.seen.has(msg.id)) continue;\n this.seen.add(msg.id);\n this.lastEventId = msg.id;\n }\n if (!this.spec.known.has(msg.event)) continue;\n const data = JSON.parse(msg.data) as Record<string, unknown>;\n if (msg.event === this.spec.errorEvent) throw this.spec.toError(data);\n const event = { ...data, type: msg.event, eventId: msg.id } as unknown as E;\n yield event;\n if (msg.event === this.spec.final?.event) {\n this.finalValue = data[this.spec.final.member] as F;\n ended = true;\n return;\n }\n }\n // A clean end of stream. Without a final event declared, that is the end; with one, a proxy cut us off.\n if (!this.spec.final) return;\n } catch (err) {\n if (this.signal?.aborted) throw this.aborted(); // Node surfaces a mid-body abort as Error('aborted')\n if (ended || (err as Error)?.name === 'AbortError' || err === undefined || (err as { $fault?: unknown }).$fault || err instanceof SyntaxError) throw err;\n // Transport error mid-stream: resume.\n }\n if (this.signal?.aborted) throw this.aborted();\n if (!this.resume || ++this.reconnects > this.maxReconnects)\n throw this.spec.toError({ status: 0, code: 'STREAM_LOST', title: 'The stream dropped and could not be resumed' });\n body = await this.resume(this.lastEventId);\n }\n }\n\n /** Drains the stream if needed and returns the final event's member. */\n async finalMessage(): Promise<F> {\n if (!this.consumed) for await (const _ of this) void _;\n if (this.finalValue === undefined) throw this.spec.toError({ status: 0, code: 'NO_FINAL_EVENT', title: 'The stream ended without its final event' });\n return this.finalValue;\n }\n}\n", "// The runtime half of @presignedUpload (PROTOCOL.md \"Uploads\"): checksum the bytes, reserve the slot,\n// PUT the bytes to the presigned URL.\nexport interface UploadSlot {\n uploadUrl: string;\n uploadMethod: string;\n requiredHeaders: Record<string, string>;\n}\n\nexport interface UploadMeta {\n fileName: string;\n contentType: string;\n byteSize: number;\n sha256: string;\n}\n\nexport async function uploadFile<S extends UploadSlot>(\n file: Blob,\n fileName: string,\n reserve: (meta: UploadMeta) => Promise<S>,\n toError: (problem: Record<string, unknown>) => Error,\n signal?: AbortSignal,\n): Promise<S> {\n const bytes = new Uint8Array(await file.arrayBuffer());\n const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', bytes));\n let binary = '';\n for (const b of digest) binary += String.fromCharCode(b);\n const slot = await reserve({ fileName, contentType: file.type || 'application/octet-stream', byteSize: bytes.byteLength, sha256: btoa(binary) });\n const res = await fetch(slot.uploadUrl, { method: slot.uploadMethod, headers: slot.requiredHeaders, body: bytes, signal });\n if (!res.ok) throw toError({ status: res.status, code: 'UPLOAD_PUT_FAILED', title: 'Uploading the bytes failed', detail: await res.text() });\n return slot;\n}\n", "// Sign-in modes. Every mode except `session` ends in the same thing: a short-lived Caitlyn bearer token from\n// the workspace's OAuth token endpoint ({endpoint}/oauth/token), cached until a minute before it expires and\n// refreshed by one request at a time (design doc, \"Authentication\"; proposal 6.11).\n//\n// token a personal access token, sent as it is\n// clientCredentials client ID and secret exchanged for a token; re-requested before expiry\n// oauth authorisation code with PKCE, then refresh tokens; a token store keeps them\n// awsIam STS GetWebIdentityToken with the caller's AWS credentials, exchanged (RFC 8693)\n// workloadIdentity a JWT from another trusted issuer (GitLab CI id_tokens), exchanged (RFC 8693)\n// session the browser session cookie; Origin on every write (the Caitlyn app, local recording)\nimport type { Pluggable, FinalizeRequestMiddleware, InitializeMiddleware, TokenIdentity } from '@smithy/types';\nimport { HttpRequest } from '@smithy/core/protocols';\nimport type { AwsCredentialSource, AwsCredentials } from './aws.js';\n\n/** Tokens the `oauth` mode keeps. `expiresAt` is milliseconds since the epoch. */\nexport interface OAuthTokens {\n accessToken: string;\n refreshToken?: string;\n expiresAt?: number;\n scope?: string;\n}\n\n/** Where the `oauth` mode keeps tokens between processes, for example encrypted on a server. */\nexport interface TokenStore {\n load(): Promise<OAuthTokens | undefined> | OAuthTokens | undefined;\n save(tokens: OAuthTokens): Promise<void> | void;\n clear(): Promise<void> | void;\n}\n\nexport type AuthOptions =\n | { mode: 'token'; token: string }\n | { mode: 'clientCredentials'; clientId: string; clientSecret: string; scopes?: string[]; resource?: string }\n | {\n mode: 'oauth';\n clientId: string;\n /** For a confidential client on a server; omit in a browser. */\n clientSecret?: string;\n redirectUri?: string;\n scopes?: string[];\n resource?: string;\n /** Default: kept in memory for the life of the client. */\n tokenStore?: TokenStore;\n }\n | {\n mode: 'awsIam';\n /** The regional STS endpoint to use. Default: AWS_REGION, then AWS_DEFAULT_REGION. */\n region?: string;\n /** Default: environment variables, then the container credentials endpoint. Accepts any @aws-sdk provider. */\n credentials?: AwsCredentialSource;\n signingAlgorithm?: 'ES384' | 'RS256';\n /** Lifetime of the AWS-signed token, at most 300 (the default). */\n durationSeconds?: number;\n /** The audience the AWS token is minted for. Default: the workspace resource URL. */\n audience?: string;\n stsEndpoint?: string;\n }\n | {\n mode: 'workloadIdentity';\n /** Returns the workload's current identity token, for example a GitLab CI id_tokens variable. */\n token: () => string | Promise<string>;\n resource?: string;\n }\n | {\n mode: 'session';\n /** A session cookie, for server-side use. In a browser leave it out: the browser sends its own. */\n cookie?: string;\n /** Sent as Origin on every write. Default: the workspace URL. */\n origin?: string;\n };\n\n/** A sign-in failure: the token endpoint's OAuth error, or a failure to get the identity it exchanges. */\nexport class CaitlynAuthError extends Error {\n override readonly name = 'CaitlynAuthError';\n constructor(\n message: string,\n /** The OAuth error code (`invalid_client`, `invalid_grant`\u2026), or `sign_in_required`. */\n readonly code: string,\n readonly status?: number,\n readonly requestId?: string,\n ) {\n super(message);\n }\n}\n\nconst TOKEN_EXCHANGE = 'urn:ietf:params:oauth:grant-type:token-exchange';\nconst JWT_TYPE = 'urn:ietf:params:oauth:token-type:jwt';\nconst REFRESH_EARLY_MS = 60_000;\nconst SESSION_PLACEHOLDER = 'session';\n\n/** When to replace a token: a minute before it expires, or halfway through a lifetime shorter than two minutes. */\nconst refreshAt = (t: OAuthTokens) => (t.expiresAt === undefined ? undefined : t.expiresAt - Math.min(REFRESH_EARLY_MS, (t.expiresAt - Date.now()) / 2));\n\nconst b64url = (bytes: ArrayBuffer | Uint8Array) =>\n btoa(String.fromCharCode(...new Uint8Array(bytes as ArrayBuffer))).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\nconst randomString = (n = 32) => b64url(crypto.getRandomValues(new Uint8Array(n)));\n\n/** The audience of a workspace's tokens: its resource URL, https://<workspace>/api/v3. */\nexport const workspaceAudience = (workspace: string) => `https://${workspaceHost(workspace)}/api/v3`;\n\n/** A workspace given as a hostname or a URL, as its bare hostname. */\nexport const workspaceHost = (workspace: string) => workspace.replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '');\n\n/** What `client.auth` offers: the current token, and the `oauth` mode's sign-in steps. */\nexport class AuthSession {\n private cached?: { token: string; refreshAt?: number };\n /** The token the server last refused with a 401, so `oauth` never reloads it from the store. */\n private refused?: string;\n private inflight?: Promise<string>;\n private memoryTokens?: OAuthTokens;\n readonly tokenEndpoint: string;\n readonly authorizationEndpoint: string;\n /** The workspace's resource URL, https://<workspace>/api/v3: the audience every token is bound to. */\n readonly resource: string;\n /** https://<workspace>: the default Origin for session writes. */\n readonly workspaceUrl: string;\n\n constructor(\n readonly options: AuthOptions,\n /** Where the token endpoint is: the client's endpoint, which an override may move (a proxy, a local app). */\n readonly endpoint: string,\n /** The workspace hostname. Like an AWS region, it decides the endpoint and the token audience. */\n readonly workspace: string,\n private readonly fetchFn: typeof fetch = (...a) => fetch(...a),\n ) {\n this.tokenEndpoint = `${endpoint}/oauth/token`;\n this.authorizationEndpoint = `${endpoint}/oauth/authorize`;\n this.workspaceUrl = `https://${workspace}`;\n // From the workspace, never from an endpoint override: a token is always for the workspace it names.\n this.resource = ('resource' in options && options.resource) || workspaceAudience(workspace);\n }\n\n get mode() {\n return this.options.mode;\n }\n\n /** The bearer token for the next request: cached, or fetched once however many calls ask at the same time. */\n async token(): Promise<string> {\n const o = this.options;\n if (o.mode === 'token') return o.token;\n if (o.mode === 'session') return SESSION_PLACEHOLDER; // removed again after signing\n if (this.cached && (this.cached.refreshAt === undefined || this.cached.refreshAt > Date.now())) return this.cached.token;\n this.inflight ??= this.fetchToken().finally(() => (this.inflight = undefined));\n return this.inflight;\n }\n\n /** Forgets the cached token, so the next call signs in again (done once after a 401). */\n invalidate(): void {\n this.refused = this.cached?.token;\n this.cached = undefined;\n }\n\n /** Whether a 401 is worth one more try with a new token. */\n get canRefresh(): boolean {\n return this.options.mode !== 'token' && this.options.mode !== 'session';\n }\n\n // ------------------------------------------------------------------ oauth\n\n /** Starts sign-in (`oauth` mode): the URL to send the person to, and the state and PKCE verifier to keep. */\n async authorizationUrl(opts: { state?: string; scopes?: string[]; redirectUri?: string } = {}): Promise<{ url: string; state: string; codeVerifier: string }> {\n const o = this.oauth();\n const codeVerifier = randomString(48);\n const state = opts.state ?? randomString(16);\n const challenge = b64url(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier)));\n const url = new URL(this.authorizationEndpoint);\n const redirectUri = opts.redirectUri ?? o.redirectUri;\n if (!redirectUri) throw new CaitlynAuthError('oauth: redirectUri is required', 'invalid_request');\n const scopes = opts.scopes ?? o.scopes;\n url.search = new URLSearchParams({\n response_type: 'code',\n client_id: o.clientId,\n redirect_uri: redirectUri,\n code_challenge: challenge,\n code_challenge_method: 'S256',\n state,\n resource: this.resource,\n ...(scopes?.length ? { scope: scopes.join(' ') } : {}),\n }).toString();\n return { url: url.toString(), state, codeVerifier };\n }\n\n /** Finishes sign-in (`oauth` mode): checks state, exchanges the code and saves the tokens. */\n async handleCallback(p: { code: string; state?: string; expectedState?: string; codeVerifier: string; redirectUri?: string }): Promise<OAuthTokens> {\n const o = this.oauth();\n if (p.expectedState !== undefined && p.state !== p.expectedState) throw new CaitlynAuthError('oauth: the state does not match', 'invalid_state');\n const redirectUri = p.redirectUri ?? o.redirectUri;\n const tokens = await this.requestToken({\n grant_type: 'authorization_code',\n code: p.code,\n code_verifier: p.codeVerifier,\n ...(redirectUri ? { redirect_uri: redirectUri } : {}),\n resource: this.resource,\n ...this.clientParams(),\n });\n await this.saveTokens(tokens);\n return tokens;\n }\n\n /** Signs out (`oauth` mode): revokes the refresh token where possible and clears the store. */\n async signOut(): Promise<void> {\n const o = this.oauth();\n const t = await this.loadTokens();\n if (t?.refreshToken) {\n await this.fetchFn(this.tokenEndpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({ action: 'revoke', token: t.refreshToken, ...this.clientParams() }).toString(),\n }).catch(() => undefined);\n }\n this.cached = undefined;\n this.memoryTokens = undefined;\n await o.tokenStore?.clear();\n }\n\n private oauth() {\n if (this.options.mode !== 'oauth') throw new CaitlynAuthError(`This client signs in with ${this.options.mode}, not oauth`, 'invalid_request');\n return this.options;\n }\n\n private clientParams(): Record<string, string> {\n const o = this.options as { clientId?: string; clientSecret?: string };\n return { ...(o.clientId ? { client_id: o.clientId } : {}), ...(o.clientSecret ? { client_secret: o.clientSecret } : {}) };\n }\n\n private async loadTokens() {\n const o = this.oauth();\n return o.tokenStore ? await o.tokenStore.load() : this.memoryTokens;\n }\n\n private async saveTokens(t: OAuthTokens) {\n const o = this.oauth();\n this.memoryTokens = t;\n this.cached = { token: t.accessToken, refreshAt: refreshAt(t) };\n await o.tokenStore?.save(t);\n }\n\n // ------------------------------------------------------------------ fetching tokens\n\n private async fetchToken(): Promise<string> {\n const o = this.options;\n let t: OAuthTokens;\n switch (o.mode) {\n case 'clientCredentials':\n t = await this.requestToken({\n grant_type: 'client_credentials',\n ...this.clientParams(),\n resource: this.resource,\n ...(o.scopes?.length ? { scope: o.scopes.join(' ') } : {}),\n });\n break;\n case 'oauth': {\n const stored = await this.loadTokens();\n const held = this.cached?.token ?? this.refused;\n if (stored && (stored.expiresAt === undefined || stored.expiresAt - REFRESH_EARLY_MS > Date.now()) && stored.accessToken !== held) {\n t = stored; // signed in or refreshed by another process (or not yet used by this client)\n } else if (stored?.refreshToken) {\n try {\n t = await this.requestToken({ grant_type: 'refresh_token', refresh_token: stored.refreshToken, ...this.clientParams() });\n } catch (err) {\n if (err instanceof CaitlynAuthError && err.code === 'invalid_grant') await o.tokenStore?.clear();\n throw err;\n }\n t.refreshToken ??= stored.refreshToken;\n await this.saveTokens(t);\n } else {\n throw new CaitlynAuthError('oauth: not signed in. Call auth.authorizationUrl() and auth.handleCallback() first.', 'sign_in_required');\n }\n break;\n }\n case 'awsIam': {\n const region = o.region ?? env().AWS_REGION ?? env().AWS_DEFAULT_REGION;\n if (!region) throw new CaitlynAuthError('awsIam: set region, or AWS_REGION, for the regional STS endpoint', 'invalid_request');\n // Loaded only in this mode, so a browser bundle that never signs in with AWS does not carry the signer.\n const { defaultAwsCredentials, getWebIdentityToken } = await import('./aws.js');\n let subject: string;\n try {\n // Inside the try, so missing credentials are a sign-in error like an STS refusal.\n const credentials = o.credentials ? await (typeof o.credentials === 'function' ? o.credentials() : o.credentials) : await defaultAwsCredentials(this.fetchFn);\n subject = (await getWebIdentityToken({ region, audience: o.audience ?? this.resource, credentials, signingAlgorithm: o.signingAlgorithm, durationSeconds: o.durationSeconds, stsEndpoint: o.stsEndpoint, fetch: this.fetchFn })).token;\n } catch (err) {\n throw new CaitlynAuthError((err as Error).message, (err as { code?: string }).code ?? 'aws_identity_failed', (err as { status?: number }).status);\n }\n t = await this.exchange(subject);\n break;\n }\n case 'workloadIdentity':\n t = await this.exchange(await o.token());\n break;\n default:\n throw new CaitlynAuthError(`No token to fetch in ${o.mode} mode`, 'invalid_request');\n }\n this.cached = { token: t.accessToken, refreshAt: refreshAt(t) };\n return t.accessToken;\n }\n\n private exchange(subjectToken: string) {\n return this.requestToken({\n grant_type: TOKEN_EXCHANGE,\n subject_token: subjectToken,\n subject_token_type: JWT_TYPE,\n requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',\n resource: this.resource,\n });\n }\n\n private async requestToken(params: Record<string, string>): Promise<OAuthTokens> {\n const res = await this.fetchFn(this.tokenEndpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded', accept: 'application/json' },\n body: new URLSearchParams(params).toString(),\n });\n const requestId = res.headers.get('caitlyn-request-id') ?? undefined;\n const body = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n if (!res.ok || typeof body.access_token !== 'string') {\n const code = String(body.error ?? body.code ?? `http_${res.status}`);\n throw new CaitlynAuthError(String(body.error_description ?? body.detail ?? `Sign-in failed: ${code}`), code, res.status, requestId);\n }\n return {\n accessToken: body.access_token,\n refreshToken: typeof body.refresh_token === 'string' ? body.refresh_token : undefined,\n expiresAt: typeof body.expires_in === 'number' ? Date.now() + body.expires_in * 1000 : undefined,\n scope: typeof body.scope === 'string' ? body.scope : undefined,\n };\n }\n}\n\ntype Env = Record<string, string | undefined>;\nconst env = (): Env => (globalThis as { process?: { env?: Env } }).process?.env ?? {};\n\n\n/**\n * The generated client's `token` identity provider. It reports the token as already near expiry, so Smithy's\n * memoisation asks again on every request and AuthSession's own cache (which knows the real expiry, and can\n * be invalidated after a 401) decides.\n */\nexport const tokenIdentityProvider = (auth: AuthSession) => async (): Promise<TokenIdentity> => ({ token: await auth.token(), expiration: new Date() });\n\n/** Session headers, and one retry with a new token after a 401. */\nexport function getCaitlynAuthPlugin(auth: AuthSession): Pluggable<any, any> {\n const o = auth.options;\n const session: FinalizeRequestMiddleware<any, any> = (next) => async (args) => {\n if (o.mode === 'session' && HttpRequest.isInstance(args.request)) {\n delete args.request.headers.authorization;\n delete args.request.headers.Authorization;\n if (o.cookie) args.request.headers.cookie = o.cookie;\n if (args.request.method !== 'GET' && args.request.method !== 'HEAD') args.request.headers.origin = o.origin ?? auth.workspaceUrl;\n }\n return next(args);\n };\n const reauth: InitializeMiddleware<any, any> = (next) => async (args) => {\n try {\n return await next(args);\n } catch (err) {\n if (!auth.canRefresh || (err as { $metadata?: { httpStatusCode?: number } })?.$metadata?.httpStatusCode !== 401) throw err;\n auth.invalidate();\n return next(args);\n }\n };\n return {\n applyToStack(stack) {\n stack.addRelativeTo(session, { toMiddleware: 'httpSigningMiddleware', relation: 'after', name: 'caitlynSession', override: true });\n stack.add(reauth, { step: 'initialize', name: 'caitlynReauth', priority: 'low', override: true });\n },\n };\n}\n", "// Client options shared by every generated Caitlyn client, and the options every call accepts.\nimport type { TracerProvider } from '@opentelemetry/api';\nimport { CaitlynRetryStrategy } from './retry.js';\nimport { AuthSession, tokenIdentityProvider, workspaceHost, type AuthOptions } from './auth.js';\n\nexport interface CaitlynOptions {\n /**\n * The workspace hostname, for example \"your-company.getcaitlyn.ai\". Like an AWS region, it decides where\n * requests go (https://<workspace>/api) and the audience every token is bound to (https://<workspace>/api/v3).\n */\n workspace: string;\n /** How the client signs in: token, clientCredentials, oauth, awsIam, workloadIdentity or session. */\n auth: AuthOptions;\n /** The fetch the sign-in requests use (token endpoint, STS, container credentials). Default: global fetch. */\n fetch?: typeof fetch;\n /**\n * Overrides the base URL the operation paths (/v3/\u2026) and the token endpoint (/oauth/token) are appended to,\n * for a proxy or a local app. Default: https://{workspace}/api. It never changes the token audience.\n */\n endpoint?: string;\n maxAttempts?: number;\n /** Longest Retry-After the SDK waits for (default 60 000 ms); above it the call fails at once. */\n maxRetryDelayMs?: number;\n telemetry?: { tracerProvider?: TracerProvider; enabled?: boolean };\n}\n\nexport interface CallOptions {\n signal?: AbortSignal;\n}\n\n/** The base URL of a workspace's API: its hostname, over HTTPS, with the /api prefix every Caitlyn route has. */\nexport function workspaceEndpoint(workspace: string): string {\n return `https://${workspaceHost(workspace)}/api`;\n}\n\n/** The sign-in session for a set of options: what `client.auth` is. */\nexport function createAuth(opts: CaitlynOptions): AuthSession {\n return new AuthSession(opts.auth, (opts.endpoint ?? workspaceEndpoint(opts.workspace)).replace(/\\/+$/, ''), workspaceHost(opts.workspace), opts.fetch);\n}\n\n/** The generated client's configuration for a set of options. */\nexport function clientConfig(opts: CaitlynOptions, auth: AuthSession = createAuth(opts)) {\n return {\n /** The workspace this client is for; readable as client.config.workspace. */\n workspace: workspaceHost(opts.workspace),\n endpoint: opts.endpoint ?? workspaceEndpoint(opts.workspace),\n token: tokenIdentityProvider(auth),\n ...(opts.maxAttempts !== undefined ? { maxAttempts: opts.maxAttempts } : {}),\n ...(opts.maxRetryDelayMs !== undefined ? { retryStrategy: new CaitlynRetryStrategy(opts.maxAttempts ?? 3, opts.maxRetryDelayMs) } : {}),\n };\n}\n\n/** One problem with one request member or query parameter, on a 400 VALIDATION_FAILED. */\nexport interface CaitlynFieldError {\n pointer?: string;\n parameter?: string;\n code: string;\n detail?: string;\n}\n\n/** The RFC 9457 fields every Caitlyn error carries (PROTOCOL.md 6.3). */\nexport interface CaitlynErrorFields {\n status?: number;\n code?: string;\n type?: string;\n title?: string;\n detail?: string;\n requestId?: string;\n retryAfterSeconds?: number;\n errors?: CaitlynFieldError[];\n /** The response body as received, as text: the only view of a body that is not problem details (PROTOCOL.md 6.3). */\n rawBody?: string;\n}\n", "// The runtime half of @waitable (smithy.waiters): poll a read operation until an acceptor matches. Generated\n// waitUntil\u2026() methods supply the read and the acceptors; this does the timing, cancellation and errors.\n// The same rules as Smithy's waiter specification: exponential backoff between minDelay and maxDelay with\n// jitter, a success or failure acceptor ends the wait, and an error that no acceptor matches is thrown.\n\nexport type WaiterState = 'success' | 'failure' | 'retry';\n\nexport interface WaiterOptions {\n /** Stops waiting and throws the signal's reason (use AbortSignal.timeout() for a deadline). */\n signal?: AbortSignal;\n /** The longest the waiter waits in total, in milliseconds. Default: no limit beyond the signal. */\n maxWaitMs?: number;\n /** Default 2 000 ms (Smithy's default minDelay). */\n minDelayMs?: number;\n /** Default 120 000 ms (Smithy's default maxDelay). */\n maxDelayMs?: number;\n}\n\n/** A waiter ended in a failure state, or ran out of time. `last` is the last output or error it saw. */\nexport class WaiterError extends Error {\n override readonly name = 'WaiterError';\n constructor(\n message: string,\n readonly reason: 'failure' | 'timeout',\n readonly last: unknown,\n readonly attempts: number,\n ) {\n super(message);\n }\n}\n\nconst sleep = (ms: number, signal?: AbortSignal) =>\n new Promise<void>((resolve, reject) => {\n if (signal?.aborted) return reject(signal.reason);\n const t = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(t);\n reject(signal!.reason);\n };\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n\n/**\n * Calls `read` until `accept` says success (returns the output) or failure (throws WaiterError).\n * `accept` sees either `{output}` or `{error}`; returning undefined for an error rethrows it.\n */\nexport async function waitUntil<T>(\n name: string,\n read: (signal?: AbortSignal) => Promise<T>,\n accept: (r: { output: T; error?: undefined } | { output?: undefined; error: unknown }) => WaiterState | undefined,\n opts: WaiterOptions = {},\n): Promise<T> {\n const minDelay = opts.minDelayMs ?? 2_000;\n const maxDelay = Math.max(minDelay, opts.maxDelayMs ?? 120_000);\n const deadline = opts.maxWaitMs === undefined ? Infinity : Date.now() + opts.maxWaitMs;\n for (let attempt = 1; ; attempt++) {\n if (opts.signal?.aborted) throw opts.signal.reason;\n let state: WaiterState | undefined;\n let last: unknown;\n try {\n const output = await read(opts.signal);\n last = output;\n state = accept({ output }) ?? 'retry';\n if (state === 'success') return output;\n } catch (error) {\n if (opts.signal?.aborted) throw opts.signal.reason;\n last = error;\n state = accept({ error });\n if (state === undefined || state === 'success') throw error;\n }\n if (state === 'failure') throw new WaiterError(`${name}: reached a failure state`, 'failure', last, attempt);\n // Smithy's backoff: min(maxDelay, minDelay * 2^(attempt-1)), with jitter between minDelay and that.\n const ceiling = Math.min(maxDelay, minDelay * 2 ** Math.min(attempt - 1, 30));\n let delay = minDelay + Math.random() * (ceiling - minDelay);\n const left = deadline - Date.now();\n if (left <= 0) throw new WaiterError(`${name}: did not finish within ${opts.maxWaitMs} ms`, 'timeout', last, attempt);\n delay = Math.min(delay, left);\n await sleep(delay, opts.signal);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["// The AWS half of the awsIam sign-in mode, with no AWS runtime: a minimal Signature Version 4 signer over Web\n// Crypto, the two credential sources AWS workloads actually use (environment variables, and the container\n// credentials endpoint used by ECS, Fargate and AgentCore runtimes), and one call, STS GetWebIdentityToken.\n// Anything else (profiles, SSO, instance metadata) is reached by passing `credentials`, which accepts any\n// @aws-sdk credential provider, for example fromNodeProviderChain() from @aws-sdk/credential-providers.\n\nexport interface AwsCredentials {\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n /** When the credentials stop working; the SDK fetches new ones a minute before. */\n expiration?: Date;\n}\n\nexport type AwsCredentialSource = AwsCredentials | (() => Promise<AwsCredentials> | AwsCredentials);\n\ntype Env = Record<string, string | undefined>;\nconst env = (): Env => (globalThis as { process?: { env?: Env } }).process?.env ?? {};\n\nconst enc = new TextEncoder();\nconst hex = (b: ArrayBuffer) => [...new Uint8Array(b)].map((x) => x.toString(16).padStart(2, '0')).join('');\nconst sha256 = async (s: string) => hex(await crypto.subtle.digest('SHA-256', enc.encode(s)));\nasync function hmac(key: ArrayBuffer | Uint8Array, data: string): Promise<ArrayBuffer> {\n const k = await crypto.subtle.importKey('raw', key as BufferSource, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\n return crypto.subtle.sign('HMAC', k, enc.encode(data));\n}\n\n/** RFC 3986 encoding, as Signature Version 4 requires (encodeURIComponent leaves !'()* alone). */\nexport const awsEncode = (s: string) => encodeURIComponent(s).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);\n\nexport interface SignableRequest {\n method: string;\n url: URL;\n headers: Record<string, string>;\n body: string;\n}\n\n/**\n * Signs a request with AWS Signature Version 4 (header form) and returns the headers to send, including\n * `authorization`, `x-amz-date`, `x-amz-content-sha256` and, for temporary credentials, `x-amz-security-token`.\n */\nexport async function signV4(req: SignableRequest, creds: AwsCredentials, region: string, service: string, now = new Date()): Promise<Record<string, string>> {\n const amzDate = now.toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const day = amzDate.slice(0, 8);\n const payloadHash = await sha256(req.body);\n const headers: Record<string, string> = {};\n for (const [k, v] of Object.entries(req.headers)) headers[k.toLowerCase()] = v.trim().replace(/\\s+/g, ' ');\n headers.host = req.url.host;\n headers['x-amz-date'] = amzDate;\n headers['x-amz-content-sha256'] = payloadHash;\n if (creds.sessionToken) headers['x-amz-security-token'] = creds.sessionToken;\n const names = Object.keys(headers).sort();\n const query = [...req.url.searchParams.entries()]\n .map(([k, v]) => [awsEncode(k), awsEncode(v)])\n .sort(([a, x], [b, y]) => (a === b ? (x < y ? -1 : 1) : a < b ? -1 : 1))\n .map(([k, v]) => `${k}=${v}`)\n .join('&');\n const path = req.url.pathname.split('/').map((p) => awsEncode(decodeURIComponent(p))).join('/') || '/';\n const canonical = [req.method, path, query, names.map((n) => `${n}:${headers[n]}\\n`).join(''), names.join(';'), payloadHash].join('\\n');\n const scope = `${day}/${region}/${service}/aws4_request`;\n const toSign = ['AWS4-HMAC-SHA256', amzDate, scope, await sha256(canonical)].join('\\n');\n let key: ArrayBuffer = await hmac(enc.encode(`AWS4${creds.secretAccessKey}`), day);\n for (const part of [region, service, 'aws4_request']) key = await hmac(key, part);\n const signature = hex(await hmac(key, toSign));\n headers.authorization = `AWS4-HMAC-SHA256 Credential=${creds.accessKeyId}/${scope}, SignedHeaders=${names.join(';')}, Signature=${signature}`;\n delete headers.host; // fetch sets it\n return headers;\n}\n\n/**\n * The default credential source: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY (with AWS_SESSION_TOKEN), as AWS\n * Lambda and CI runners set them; otherwise the container credentials endpoint\n * (AWS_CONTAINER_CREDENTIALS_FULL_URI or _RELATIVE_URI), as ECS, Fargate and AgentCore runtimes set it.\n */\nexport async function defaultAwsCredentials(fetchFn: typeof fetch = fetch): Promise<AwsCredentials> {\n const e = env();\n if (e.AWS_ACCESS_KEY_ID && e.AWS_SECRET_ACCESS_KEY)\n return { accessKeyId: e.AWS_ACCESS_KEY_ID, secretAccessKey: e.AWS_SECRET_ACCESS_KEY, sessionToken: e.AWS_SESSION_TOKEN };\n const url = e.AWS_CONTAINER_CREDENTIALS_FULL_URI ?? (e.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI && `http://169.254.170.2${e.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}`);\n if (url) {\n let auth = e.AWS_CONTAINER_AUTHORIZATION_TOKEN;\n if (!auth && e.AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE) {\n const fsModule = 'node:fs/promises'; // a variable, so browser bundlers leave it alone\n const fs = (await import(/* @vite-ignore */ fsModule)) as typeof import('node:fs/promises');\n auth = (await fs.readFile(e.AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE, 'utf8')).trim();\n }\n const res = await fetchFn(url, { headers: auth ? { authorization: auth } : {} });\n if (!res.ok) throw new Error(`awsIam: the container credentials endpoint answered ${res.status}`);\n const c = (await res.json()) as { AccessKeyId: string; SecretAccessKey: string; Token?: string; Expiration?: string };\n return { accessKeyId: c.AccessKeyId, secretAccessKey: c.SecretAccessKey, sessionToken: c.Token, expiration: c.Expiration ? new Date(c.Expiration) : undefined };\n }\n throw new Error(\n 'awsIam: no AWS credentials found. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, run where the container credentials endpoint is set, or pass auth.credentials (for example fromNodeProviderChain() from @aws-sdk/credential-providers).',\n );\n}\n\nconst xmlText = (xml: string, tag: string) => xml.match(new RegExp(`<${tag}>([^<]*)</${tag}>`))?.[1];\n\nexport interface WebIdentityTokenRequest {\n region: string;\n audience: string;\n credentials: AwsCredentials;\n signingAlgorithm?: 'ES384' | 'RS256';\n durationSeconds?: number;\n /** Overrides https://sts.{region}.amazonaws.com/ (tests, FIPS or VPC endpoints). */\n stsEndpoint?: string;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/** Calls STS GetWebIdentityToken (outbound identity federation) on a regional endpoint and returns the JWT. */\nexport async function getWebIdentityToken(r: WebIdentityTokenRequest): Promise<{ token: string; expiration?: Date }> {\n const url = new URL(r.stsEndpoint ?? `https://sts.${r.region}.amazonaws.com/`);\n const body = new URLSearchParams({\n Action: 'GetWebIdentityToken',\n Version: '2011-06-15',\n 'Audience.member.1': r.audience,\n DurationSeconds: String(r.durationSeconds ?? 300),\n SigningAlgorithm: r.signingAlgorithm ?? 'ES384',\n }).toString();\n const headers = await signV4({ method: 'POST', url, headers: { 'content-type': 'application/x-www-form-urlencoded; charset=utf-8' }, body }, r.credentials, r.region, 'sts');\n const res = await (r.fetch ?? fetch)(url, { method: 'POST', headers, body, signal: r.signal });\n const text = await res.text();\n if (!res.ok) {\n const code = xmlText(text, 'Code') ?? `HTTP ${res.status}`;\n throw Object.assign(new Error(`awsIam: STS GetWebIdentityToken failed: ${code}: ${xmlText(text, 'Message') ?? ''}`.trim()), { code, status: res.status });\n }\n const token = xmlText(text, 'WebIdentityToken');\n if (!token) throw new Error('awsIam: STS answered without a WebIdentityToken');\n const exp = xmlText(text, 'Expiration');\n return { token, expiration: exp ? new Date(exp) : undefined };\n}\n", "export { CaitlynRestJsonProtocol, type WithRaw } from './protocol.js';\nexport { getCaitlynSdkPlugin, getCaitlynConnectionErrorPlugin, NotSupportedByServer, CAITLYN_SDK_USER_AGENT_PREFIX } from './plugin.js';\nexport { CaitlynRetryStrategy, NO_RETRY } from './retry.js';\nexport { caitlynEndpointProvider } from './endpoint.js';\nexport { getCaitlynTelemetryPlugin, caitlynTracer } from './telemetry.js';\nexport { SseStream, type SseSpec, type SseOpened } from './stream.js';\nexport { parseSse, type SseMessage } from './sse.js';\nexport { uploadFile, type UploadMeta, type UploadSlot } from './upload.js';\nexport { clientConfig, createAuth, workspaceEndpoint, type CaitlynOptions, type CallOptions, type CaitlynErrorFields, type CaitlynFieldError } from './client.js';\nexport { AuthSession, CaitlynAuthError, workspaceAudience, workspaceHost, getCaitlynAuthPlugin, tokenIdentityProvider, type AuthOptions, type OAuthTokens, type TokenStore } from './auth.js';\nexport { signV4, getWebIdentityToken, defaultAwsCredentials, type AwsCredentials, type AwsCredentialSource } from './aws.js';\nexport { waitUntil, WaiterError, type WaiterOptions, type WaiterState } from './waiter.js';\n", "// CaitlynRestJsonProtocol: the runtime half of ai.caitlyn.protocols#restJson, on @smithy/core only.\n//\n// - HTTP bindings and JSON bodies as restJson1 (reusing Smithy's JsonCodec2 and HTTP binding serde).\n// - Errors are RFC 9457 problem details. The typed error class is chosen by HTTP status against the\n// model's @error/@httpError shapes; the body's `code` stays a field (the stable product code), never\n// a shape name. No X-Amzn-Errortype.\n// - Unknown response fields are kept: every non-streaming output carries `raw`, the parsed JSON body.\n// - $metadata.requestId comes from Caitlyn-Request-Id.\n// - A connection that fails while the body is read is marked as a connection failure (PROTOCOL.md 6.5).\nimport {\n HttpBindingProtocol,\n HttpInterceptingShapeDeserializer,\n HttpInterceptingShapeSerializer,\n JsonCodec2,\n collectBody,\n} from '@smithy/core/protocols';\nimport { NormalizedSchema, TypeRegistry } from '@smithy/core/schema';\nimport { decorateServiceException } from '@smithy/core/client';\nimport type {\n HandlerExecutionContext,\n HttpRequest,\n HttpResponse,\n MetadataBearer,\n OperationSchema,\n ResponseMetadata,\n SerdeFunctions,\n StaticErrorSchema,\n} from '@smithy/types';\nimport { markNoResponse } from './plugin.js';\n\n/** The body, read whole. A connection that fails while it is read is a connection failure, never retried. */\nasync function readBody(body: unknown, context: Parameters<typeof collectBody>[1]): Promise<Uint8Array> {\n try {\n return await collectBody(body, context);\n } catch (err) {\n throw markNoResponse(err);\n }\n}\n\n/** An output with the parsed response body, including fields this SDK version does not model. */\nexport type WithRaw<T> = T & { readonly raw?: Record<string, unknown> };\n\nconst SETTINGS = {\n timestampFormat: { useTrait: true, default: 5 /* date-time (RFC 3339) */ },\n httpBindings: true,\n jsonName: true,\n} as const;\n\ntype ErrorSchemaTuple = StaticErrorSchema & [number, string, string, Record<string, unknown> | number, ...unknown[]];\n\nexport class CaitlynRestJsonProtocol extends HttpBindingProtocol {\n protected serializer;\n protected deserializer;\n private readonly codec: JsonCodec2;\n\n constructor({ defaultNamespace, errorTypeRegistries }: { defaultNamespace: string; errorTypeRegistries?: TypeRegistry[] }) {\n super({ defaultNamespace, errorTypeRegistries });\n this.codec = new JsonCodec2(SETTINGS as never);\n this.serializer = new HttpInterceptingShapeSerializer(this.codec.createSerializer(), SETTINGS as never);\n this.deserializer = new HttpInterceptingShapeDeserializer(this.codec.createDeserializer(), SETTINGS as never);\n }\n\n getShapeId(): string {\n return 'ai.caitlyn.protocols#restJson';\n }\n\n getDefaultContentType(): string {\n return 'application/json';\n }\n\n getPayloadCodec() {\n return this.codec;\n }\n\n override setSerdeContext(serdeContext: SerdeFunctions): void {\n this.codec.setSerdeContext(serdeContext);\n super.setSerdeContext(serdeContext);\n }\n\n override async serializeRequest<Input extends object>(operationSchema: OperationSchema, input: Input, context: Parameters<HttpBindingProtocol['serializeRequest']>[2]): Promise<HttpRequest> {\n const request = await super.serializeRequest(operationSchema, input, context);\n if (!request.headers['content-type']) {\n const contentType = resolveContentType(NormalizedSchema.of(operationSchema.input));\n if (contentType) request.headers['content-type'] = contentType;\n }\n if (request.body == null && request.headers['content-type'] === 'application/json') request.body = '{}';\n // SSE operations (a streaming payload with mediaType text/event-stream) ask for it: proxies and CDNs key\n // on Accept to stop buffering, and the proposal's re-join wire form depends on it. PROTOCOL.md 3.1.\n const out = NormalizedSchema.of(operationSchema.output);\n for (const [, member] of out.structIterator()) {\n if (member.getMemberTraits().httpPayload && member.isStreaming() && member.getMergedTraits().mediaType === 'text/event-stream') {\n request.headers['accept'] = 'text/event-stream';\n }\n }\n return request;\n }\n\n override async deserializeResponse<Output extends MetadataBearer>(operationSchema: OperationSchema, context: HandlerExecutionContext & SerdeFunctions, response: HttpResponse): Promise<Output> {\n const ns = NormalizedSchema.of(operationSchema.output);\n const streaming = [...ns.structIterator()].some(([, m]) => m.getMemberTraits().httpPayload && m.isStreaming());\n if (response.statusCode >= 300) {\n // A body that is not a JSON object (a proxy's or a web framework's own error page, or no body) is still\n // the typed error for its status, never a parse error (PROTOCOL.md 6.1).\n const bytes = await readBody(response.body, context);\n response.body = bytes;\n if (!isJsonObject(bytes)) {\n await this.handleError(operationSchema, context, response, {}, this.deserializeMetadata(response));\n }\n return super.deserializeResponse(operationSchema, context, response);\n }\n if (streaming) return super.deserializeResponse(operationSchema, context, response);\n const bytes = await readBody(response.body, context);\n response.body = bytes;\n const output = await super.deserializeResponse<Output>(operationSchema, context, response);\n if (bytes.byteLength > 0) {\n let json: unknown;\n try {\n json = JSON.parse(new TextDecoder().decode(bytes));\n } catch {\n return output; // not JSON: no raw view\n }\n attachRaw(ns, output, json);\n }\n return output;\n }\n\n protected override deserializeMetadata(response: HttpResponse): ResponseMetadata {\n return { httpStatusCode: response.statusCode, requestId: response.headers['caitlyn-request-id'] };\n }\n\n protected async handleError(\n _operationSchema: OperationSchema,\n context: HandlerExecutionContext & SerdeFunctions,\n response: HttpResponse,\n dataObject: Record<string, unknown>,\n metadata: ResponseMetadata,\n ): Promise<never> {\n const registry = this.compositeErrorRegistry;\n registry.copyFrom(TypeRegistry.for(this.options.defaultNamespace));\n const errorMetadata = { $metadata: metadata, $fault: response.statusCode < 500 ? 'client' : 'server' };\n const { rawBody, rawBodyTruncated } = rawBodyOf(response.body instanceof Uint8Array ? response.body : new Uint8Array());\n const body: Record<string, unknown> = {\n ...dataObject,\n // Always the HTTP status: a body's `status` can be wrong (a proxy, a faulty handler), and the class is\n // chosen by the HTTP status too (PROTOCOL.md 6.3).\n status: response.statusCode,\n code: typeof dataObject.code === 'string' && dataObject.code ? dataObject.code : `HTTP_${response.statusCode}`,\n requestId: dataObject.requestId ?? response.headers['caitlyn-request-id'],\n rawBody,\n rawBodyTruncated,\n };\n const message = (body.detail ?? body.title ?? `HTTP ${response.statusCode}`) as string;\n\n const schema = registry.find((s) => {\n const tuple = s as unknown as ErrorSchemaTuple;\n if (!Array.isArray(tuple) || tuple[0] !== -3) return false;\n return NormalizedSchema.of(s as never).getMergedTraits().httpError === response.statusCode;\n }) as StaticErrorSchema | undefined;\n\n if (!schema) {\n const base = registry.getBaseException();\n const Ctor = (base && registry.getErrorCtor(base)) || Error;\n const name = 'CaitlynError'; // the class's name, as every SDK reports it; the code stays in `code`\n throw decorateServiceException(Object.assign(new (Ctor as any)({ name, message }), errorMetadata), body);\n }\n\n const ns = NormalizedSchema.of(schema as never);\n const Ctor = registry.getErrorCtor(schema) ?? Error;\n const exception = new (Ctor as any)({ message });\n await this.deserializeHttpMessage(schema as never, context, response, body); // header-bound members, e.g. Retry-After\n const reader = this.codec.createDeserializer() as unknown as { readObject(schema: unknown, value: unknown): unknown };\n const fields: Record<string, unknown> = {};\n for (const [name, member] of ns.structIterator()) {\n const key = member.getMergedTraits().jsonName ?? name;\n if (body[name] !== undefined && member.getMergedTraits().httpHeader) fields[name] = body[name];\n else if (body[key] !== undefined) fields[name] = reader.readObject(member, body[key]);\n }\n throw decorateServiceException(Object.assign(exception, errorMetadata, { $fault: ns.getMergedTraits().error, message }, fields), body);\n }\n}\n\n/** The most of an error body kept as `rawBody` (PROTOCOL.md 6.3). */\nexport const RAW_BODY_LIMIT = 8192;\n\n/** An error body as text: whole up to 8 KiB, else its first 8 KiB, cut back to a character boundary. */\nexport function rawBodyOf(bytes: Uint8Array): { rawBody: string; rawBodyTruncated: boolean } {\n if (bytes.byteLength <= RAW_BODY_LIMIT) return { rawBody: new TextDecoder().decode(bytes), rawBodyTruncated: false };\n let end = RAW_BODY_LIMIT;\n while (end > 0 && (bytes[end]! & 0xc0) === 0x80) end--; // never split a UTF-8 sequence\n return { rawBody: new TextDecoder().decode(bytes.subarray(0, end)), rawBodyTruncated: true };\n}\n\n/** Whether a response body parses as a JSON object, the only body problem details can be read from. */\nfunction isJsonObject(bytes: Uint8Array): boolean {\n if (bytes.byteLength === 0) return false;\n try {\n const value: unknown = JSON.parse(new TextDecoder().decode(bytes));\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n } catch {\n return false;\n }\n}\n\n/** Every deserialised structure, at any depth, gets a non-enumerable `raw`: its JSON object, unknown fields included. */\nfunction attachRaw(schema: NormalizedSchema, value: unknown, json: unknown): void {\n if (value === null || typeof value !== 'object' || json === null || typeof json !== 'object') return;\n if (schema.isStructSchema()) {\n Object.defineProperty(value, 'raw', { value: json, enumerable: false, configurable: true });\n for (const [name, member] of schema.structIterator()) {\n const key = (member.getMergedTraits().jsonName as string | undefined) ?? name;\n attachRaw(member, (value as Record<string, unknown>)[name], (json as Record<string, unknown>)[key]);\n }\n } else if (schema.isListSchema() && Array.isArray(value) && Array.isArray(json)) {\n const item = schema.getValueSchema();\n value.forEach((v, i) => attachRaw(item, v, json[i]));\n }\n}\n\nfunction resolveContentType(input: NormalizedSchema): string | undefined {\n const members = input.getMemberSchemas();\n const payload = Object.values(members).find((m) => m.getMergedTraits().httpPayload);\n if (payload) {\n const mediaType = payload.getMergedTraits().mediaType as string | undefined;\n if (mediaType) return mediaType;\n if (payload.isStringSchema()) return 'text/plain';\n if (payload.isBlobSchema()) return 'application/octet-stream';\n return 'application/json';\n }\n if (input.isUnitSchema()) return undefined;\n const hasBody = Object.values(members).some((m) => {\n const t = m.getMergedTraits();\n return !t.httpQuery && !t.httpQueryParams && !t.httpHeader && !t.httpLabel && t.httpPrefixHeaders === undefined;\n });\n return hasBody ? 'application/json' : undefined;\n}\n", "// getCaitlynSdkPlugin: SDK identity on every request, with no AWS headers.\n// - User-Agent: caitlyn-sdk-ts/<version> lang/js md/<runtime>\n// - Caitlyn-Sdk-Model: the model version the SDK was generated from (highest @since)\n// - removes smithy-typescript's retry bookkeeping headers (amz-sdk-invocation-id, amz-sdk-request)\n// - reads Caitlyn-Api-Version from responses, and fails a call before sending when the operation, or a\n// member the caller set, is newer than that server (@since; PROTOCOL.md rule 8)\nimport { getOmitRetryHeadersPlugin } from '@smithy/core/retry';\nimport { HttpRequest } from '@smithy/core/protocols';\nimport type { BuildMiddleware, DeserializeMiddleware, FinalizeRequestMiddleware, InitializeMiddleware, Pluggable } from '@smithy/types';\nimport { HttpResponse } from '@smithy/core/protocols';\nimport { NO_RETRY } from './retry.js';\n\nexport const CAITLYN_SDK_USER_AGENT_PREFIX = 'caitlyn-sdk-ts';\n\n/** Marks a failure that got no HTTP response, or whose connection failed while the body was read (PROTOCOL.md 6.5). */\nexport const NO_RESPONSE = Symbol.for('caitlyn.noResponse');\n\n/** Marks `err` as a connection failure, unless it is a cancellation. Returns it, for `throw markNoResponse(err)`. */\nexport function markNoResponse(err: unknown): unknown {\n if (err && typeof err === 'object' && (err as Error).name !== 'AbortError') Object.defineProperty(err, NO_RESPONSE, { value: true, configurable: true });\n return err;\n}\n\n/**\n * Connection errors (PROTOCOL.md 6.5): a call that got no HTTP response, or whose connection failed while the\n * body was read, fails with `toError(operation, cause)`, the generated `CaitlynConnectionError`, once the retries\n * are spent. Token requests are not marked: their failures stay sign-in errors.\n */\nexport function getCaitlynConnectionErrorPlugin(toError: (operation: string, cause: unknown) => Error): Pluggable<any, any> {\n // Closest to the HTTP handler: whatever it throws got no response.\n const mark: DeserializeMiddleware<any, any> = (next) => async (args) => {\n try {\n return await next(args);\n } catch (err) {\n const e = err as { $response?: unknown; $metadata?: { httpStatusCode?: number } };\n if (!HttpResponse.isInstance(e?.$response) && e?.$metadata?.httpStatusCode === undefined) markNoResponse(err);\n throw err;\n }\n };\n // Outside the retries, inside the call span: the span records the connection error.\n const wrap: InitializeMiddleware<any, any> = (next, context) => async (args) => {\n try {\n return await next(args);\n } catch (err) {\n if (err && typeof err === 'object' && (err as { [NO_RESPONSE]?: boolean })[NO_RESPONSE]) {\n throw toError(context.commandName?.replace(/Command$/, '') ?? 'call', err);\n }\n throw err;\n }\n };\n return {\n applyToStack(stack) {\n stack.add(mark, { step: 'deserialize', name: 'caitlynNoResponse', priority: 'low', override: true });\n stack.add(wrap, { step: 'initialize', name: 'caitlynConnectionError', priority: 'normal', override: true });\n },\n };\n}\n\nexport class NotSupportedByServer extends Error {\n constructor(readonly operation: string, readonly requires: string, readonly server: string) {\n super(`NotSupportedByServer(${operation}, requires ${requires}, server is ${server})`);\n this.name = 'NotSupportedByServer';\n }\n}\n\nconst semver = (a: string, b: string) => {\n const pa = a.split('.').map(Number);\n const pb = b.split('.').map(Number);\n for (let i = 0; i < 3; i++) if (pa[i] !== pb[i]) return (pa[i] ?? 0) - (pb[i] ?? 0);\n return 0;\n};\n\nfunction runtime(): string {\n const g = globalThis as { process?: { versions?: { node?: string; bun?: string } }; Deno?: { version?: { deno?: string } } };\n if (g.process?.versions?.bun) return `md/bun#${g.process.versions.bun}`;\n if (g.Deno?.version?.deno) return `md/deno#${g.Deno.version.deno}`;\n if (g.process?.versions?.node) return `md/nodejs#${g.process.versions.node}`;\n return 'md/browser';\n}\n\n/**\n * @param options.sdkModel the highest @since in the model: the server release this SDK was generated against\n * @param options.retrySafeOperations operations that are @readonly, @idempotent or have an @idempotencyToken member\n * @param options.since `Operation=5.120.0` and `Operation.member=5.124.0` entries from the model's @since traits\n */\nexport function getCaitlynSdkPlugin(\n config: { caitlynSdkVersion?: string; customUserAgent?: string },\n options: { sdkModel: string; retrySafeOperations: string[]; since?: string[] },\n): Pluggable<any, any> {\n let server: string | undefined; // the last Caitlyn-Api-Version this client saw\n const since = new Map((options.since ?? []).map((e) => e.split('=') as [string, string]));\n const sinceCheck: InitializeMiddleware<any, any> = (next, context) => async (args) => {\n const op = context.commandName?.replace(/Command$/, '');\n if (op && server) {\n const required = since.get(op);\n if (required && semver(required, server) > 0) throw new NotSupportedByServer(op, required, server);\n for (const [member, value] of Object.entries(args.input as object)) {\n const memberSince = value === undefined ? undefined : since.get(`${op}.${member}`);\n if (memberSince && semver(memberSince, server) > 0) throw new NotSupportedByServer(`${op}.${member}`, memberSince, server);\n }\n }\n return next(args);\n };\n const serverVersion: DeserializeMiddleware<any, any> = (next) => async (args) => {\n try {\n const out = await next(args);\n if (HttpResponse.isInstance(out.response)) server = out.response.headers['caitlyn-api-version'] ?? server;\n return out;\n } catch (err) {\n const res = (err as { $response?: unknown }).$response;\n if (HttpResponse.isInstance(res)) server = res.headers['caitlyn-api-version'] ?? server;\n throw err;\n }\n };\n const userAgent = [`${CAITLYN_SDK_USER_AGENT_PREFIX}/${config.caitlynSdkVersion ?? '0.0.0'}`, 'lang/js', runtime(), config.customUserAgent]\n .filter(Boolean)\n .join(' ');\n const identity: BuildMiddleware<any, any> = (next) => async (args) => {\n if (HttpRequest.isInstance(args.request)) {\n args.request.headers['user-agent'] = userAgent;\n args.request.headers['caitlyn-sdk-model'] = options.sdkModel;\n }\n return next(args);\n };\n const safe = new Set(options.retrySafeOperations);\n // Inside the retry loop: mark errors from operations that must not be retried.\n const retrySafety: FinalizeRequestMiddleware<any, any> = (next, context) => async (args) => {\n try {\n return await next(args);\n } catch (err) {\n const op = context.commandName?.replace(/Command$/, '');\n if (op && !safe.has(op) && err && typeof err === 'object') Object.defineProperty(err, NO_RETRY, { value: true });\n throw err;\n }\n };\n return {\n applyToStack(stack) {\n stack.add(sinceCheck, { step: 'initialize', name: 'caitlynSinceCheck', priority: 'high', override: true });\n stack.add(serverVersion, { step: 'deserialize', name: 'caitlynServerVersion', priority: 'low', override: true });\n stack.add(identity, { step: 'build', name: 'caitlynSdkIdentity', priority: 'low', override: true });\n stack.addRelativeTo(retrySafety, { toMiddleware: 'retryMiddleware', relation: 'after', name: 'caitlynRetrySafety' });\n getOmitRetryHeadersPlugin({}).applyToStack(stack);\n },\n };\n}\n", "// Caitlyn's shared retry rules (ai.caitlyn.protocols#restJson, rule 4), as a smithy-typescript RetryStrategyV2.\n// - At most `maxAttempts` attempts (default 3).\n// - Only operations that are @readonly, @idempotent or have an @idempotencyToken member are retried;\n// getCaitlynSdkPlugin marks errors from any other operation with NO_RETRY.\n// - Retried: modelled @retryable errors (429, 503) and connection failures with no response.\n// - Delay: Retry-After (seconds or HTTP-date), honoured in full up to maxRetryDelayMs (default 60 s);\n// above that, fail at once with the typed error. Without Retry-After: full-jitter exponential,\n// base 0.5 s, cap 8 s.\n// The retry middleware itself sleeps for the token's delay.\nimport type { Provider, RetryErrorInfo, RetryStrategyV2, RetryToken } from '@smithy/types';\n\nexport const NO_RETRY = Symbol.for('caitlyn.noRetry');\n\nclass Token implements RetryToken {\n constructor(private readonly count: number, private readonly delay: number) {}\n getRetryCount() {\n return this.count;\n }\n getRetryDelay() {\n return this.delay;\n }\n}\n\nexport class CaitlynRetryStrategy implements RetryStrategyV2 {\n readonly mode = 'standard';\n private readonly maxAttempts: Provider<number>;\n\n constructor(maxAttempts: number | Provider<number> = 3, private readonly maxRetryDelayMs = 60_000) {\n this.maxAttempts = typeof maxAttempts === 'number' ? async () => maxAttempts : maxAttempts;\n }\n\n async acquireInitialRetryToken(): Promise<RetryToken> {\n return new Token(0, 0);\n }\n\n async refreshRetryTokenForRetry(token: RetryToken, info: RetryErrorInfo): Promise<RetryToken> {\n const count = token.getRetryCount();\n const err = info.error as (Error & { [NO_RETRY]?: boolean; $retryable?: unknown; $metadata?: { httpStatusCode?: number } }) | undefined;\n if (count + 1 >= (await this.maxAttempts())) throw new Error('retry: attempts exhausted');\n if (!err || err[NO_RETRY]) throw new Error('retry: operation is not safe to retry');\n const noResponse = err.$metadata?.httpStatusCode === undefined && err.name !== 'AbortError';\n if (err.$retryable === undefined && !noResponse) throw new Error('retry: error is not retryable');\n let delay: number;\n if (info.retryAfterHint instanceof Date) {\n delay = Math.max(0, info.retryAfterHint.getTime() - Date.now());\n if (delay > this.maxRetryDelayMs) throw new Error('retry: Retry-After exceeds maxRetryDelay');\n } else {\n delay = Math.random() * Math.min(8_000, 500 * 2 ** count);\n }\n return new Token(count + 1, delay);\n }\n\n recordSuccess(): void {}\n}\n", "// A workspace has exactly one base URL (its hostname), so the endpoint is the configured URL, unchanged.\n// Replaces smithy-typescript's rules-engine resolver (about 12 KB minified).\nimport type { EndpointV2 } from '@smithy/types';\n\nexport const caitlynEndpointProvider = (params: { endpoint?: string }): EndpointV2 => {\n if (!params.endpoint) throw new Error('Caitlyn: no endpoint. Pass `workspace` or `endpoint` when creating the client.');\n return { url: new URL(params.endpoint) };\n};\n", "// OpenTelemetry for the generated client (PROTOCOL.md section 13): a `caitlyn.call` span per call, a\n// `caitlyn.attempt` child span per HTTP attempt, a `caitlyn.upload` span for an upload's bytes, and traceparent\n// through the global propagator. Uses only @opentelemetry/api, so it is a no-op until the integrator configures\n// a provider.\nimport type { Pluggable, HandlerExecutionContext, FinalizeHandler, FinalizeHandlerArguments } from '@smithy/types';\nimport { HttpRequest, HttpResponse } from '@smithy/core/protocols';\nimport { context, propagation, trace, SpanKind, SpanStatusCode, type TracerProvider, type Span, type Tracer } from '@opentelemetry/api';\n\ntype Ctx = HandlerExecutionContext & { __caitlynSpan?: Span; __attempt?: number };\n\n/** The tracer every Caitlyn span comes from. */\nexport function caitlynTracer(provider?: TracerProvider): Tracer {\n return (provider ?? trace.getTracerProvider()).getTracer('@caitlyn-ai/sdk', '0.1.0');\n}\n\n/** `url.full` without the query or fragment, which can carry secrets (a presigned URL's signature). */\nexport function urlWithoutQuery(url: string): string {\n const u = new URL(url);\n u.search = '';\n u.hash = '';\n u.username = '';\n u.password = '';\n return u.toString();\n}\n\n/** Ends a span with an error: status, `error.type` (the class name), `caitlyn.error.code` and an exception event. */\nexport function recordFailure(span: Span, err: unknown): void {\n const e = err as { name?: string; code?: unknown; message?: string };\n span.recordException(err instanceof Error ? err : { name: String(e?.name ?? 'Error'), message: String(e?.message ?? err) });\n span.setStatus({ code: SpanStatusCode.ERROR, message: e?.message });\n span.setAttribute('error.type', e?.name ?? 'Error');\n if (typeof e?.code === 'string') span.setAttribute('caitlyn.error.code', e.code);\n}\n\nexport function getCaitlynTelemetryPlugin(provider?: TracerProvider): Pluggable<any, any> {\n const tracer = caitlynTracer(provider);\n return {\n applyToStack(stack) {\n // One client span per logical call.\n stack.add(\n (next, ctx: Ctx) => async (args) => {\n const op = ctx.commandName?.replace(/Command$/, '') ?? 'unknown';\n return tracer.startActiveSpan('caitlyn.call', { kind: SpanKind.CLIENT, attributes: { 'rpc.system': 'caitlyn', 'rpc.method': op } }, async (span) => {\n ctx.__caitlynSpan = span;\n ctx.__attempt = 0;\n try {\n return await next(args);\n } catch (err) {\n recordFailure(span, err);\n throw err;\n } finally {\n span.end();\n }\n });\n },\n { step: 'initialize', name: 'caitlynTelemetryCall', priority: 'high' },\n );\n // One child span per HTTP attempt, inside the retry loop.\n stack.addRelativeTo(\n (next: FinalizeHandler<any, any>, ctx: Ctx) => async (args: FinalizeHandlerArguments<any>) => {\n const attempt = ctx.__attempt ?? 0;\n ctx.__attempt = attempt + 1;\n const parent = ctx.__caitlynSpan ? trace.setSpan(context.active(), ctx.__caitlynSpan) : context.active();\n const span = tracer.startSpan('caitlyn.attempt', { kind: SpanKind.CLIENT, attributes: { 'http.request.resend_count': attempt } }, parent);\n const req = args.request;\n if (HttpRequest.isInstance(req)) {\n span.setAttributes({\n 'http.request.method': req.method,\n 'server.address': req.hostname,\n 'url.full': urlWithoutQuery(`${req.protocol}//${req.hostname}${req.port ? `:${req.port}` : ''}${req.path}`),\n });\n propagation.inject(trace.setSpan(parent, span), req.headers);\n }\n const response = (res: unknown) => {\n if (!HttpResponse.isInstance(res)) return;\n span.setAttribute('http.response.status_code', res.statusCode);\n const rid = res.headers['caitlyn-request-id'];\n if (rid) {\n span.setAttribute('caitlyn.request_id', rid);\n ctx.__caitlynSpan?.setAttribute('caitlyn.request_id', rid);\n }\n const api = res.headers['caitlyn-api-version'];\n if (api) span.setAttribute('caitlyn.server.api_version', api);\n if (res.statusCode >= 400) span.setStatus({ code: SpanStatusCode.ERROR });\n };\n try {\n const out = await next(args);\n response(out.response);\n return out;\n } catch (err) {\n response((err as { $response?: unknown }).$response);\n span.setStatus({ code: SpanStatusCode.ERROR });\n throw err;\n } finally {\n span.end();\n }\n },\n { toMiddleware: 'retryMiddleware', relation: 'after', name: 'caitlynTelemetryAttempt' },\n );\n },\n };\n}\n", "// Server-sent events parser (WHATWG HTML \"event stream interpretation\"), over any async iterable of bytes.\n// Hand-written runtime: Smithy's generators only speak AWS's binary event-stream framing.\nexport interface SseMessage {\n id?: string;\n event: string;\n data: string;\n}\n\nexport async function* parseSse(body: AsyncIterable<Uint8Array | string>): AsyncGenerator<SseMessage> {\n const decoder = new TextDecoder();\n let buffer = '';\n let id: string | undefined;\n let event = '';\n let data: string[] = [];\n for await (const chunk of body) {\n buffer += typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\n let nl: number;\n while ((nl = buffer.search(/\\r\\n|\\r|\\n/)) >= 0) {\n const line = buffer.slice(0, nl);\n buffer = buffer.slice(nl + (buffer[nl] === '\\r' && buffer[nl + 1] === '\\n' ? 2 : 1));\n if (line === '') {\n if (data.length) yield { id, event: event || 'message', data: data.join('\\n') };\n event = '';\n data = [];\n continue;\n }\n if (line.startsWith(':')) continue;\n const colon = line.indexOf(':');\n const field = colon < 0 ? line : line.slice(0, colon);\n let value = colon < 0 ? '' : line.slice(colon + 1);\n if (value.startsWith(' ')) value = value.slice(1);\n if (field === 'data') data.push(value);\n else if (field === 'event') event = value;\n else if (field === 'id' && !value.includes('\\0')) id = value;\n }\n }\n}\n", "// SseStream: the runtime half of @sseEvents (PROTOCOL.md rule 7). Generated code supplies the event names and\n// how to open and resume the stream; this class does parsing, skipping unknown events, de-duplication by id,\n// resuming with Last-Event-ID, abort handling and finalMessage().\nimport { parseSse } from './sse.js';\n\nexport interface SseSpec {\n /** SSE `event:` names this SDK knows (the union members' jsonNames). Others are skipped. */\n readonly known: ReadonlySet<string>;\n /** The event that ends the stream successfully, and the member finalMessage() returns. */\n readonly final?: { event: string; member: string };\n /** The event carrying RFC 9457 problem details; it ends the stream with a thrown error. */\n readonly errorEvent?: string;\n /** Builds the typed error for an error event. */\n readonly toError: (problem: Record<string, unknown>) => Error;\n}\n\ntype Body = AsyncIterable<Uint8Array>;\n/** What opening (or resuming) a stream returns: the command output, with its event body and response metadata. */\nexport interface SseOpened {\n readonly events: unknown;\n readonly $metadata?: { readonly requestId?: string };\n}\n\nexport class SseStream<E extends { type: string }, F = never> implements AsyncIterable<E> {\n private finalValue?: F;\n private consumed = false;\n private readonly seen = new Set<string>();\n lastEventId?: string;\n reconnects = 0;\n /** The Caitlyn-Request-Id of the response that opened the stream; set once iteration has started. */\n requestId?: string;\n\n constructor(\n private readonly spec: SseSpec,\n private readonly open: () => Promise<SseOpened>,\n private readonly resume: ((lastEventId: string | undefined) => Promise<SseOpened>) | undefined,\n private readonly signal?: AbortSignal,\n private readonly maxReconnects = 3,\n ) {}\n\n private aborted(): unknown {\n return this.signal?.reason ?? new DOMException('Aborted', 'AbortError');\n }\n\n async *[Symbol.asyncIterator](): AsyncGenerator<E> {\n if (this.consumed) throw new Error('SseStream can only be iterated once');\n this.consumed = true;\n const opened = await this.open();\n this.requestId = opened.$metadata?.requestId;\n let body = opened.events as Body;\n for (;;) {\n let ended = false;\n let onResponse = 0; // SSE events (known or not) this response has carried\n try {\n for await (const msg of parseSse(body)) {\n onResponse++;\n if (msg.id) {\n if (this.seen.has(msg.id)) continue;\n this.seen.add(msg.id);\n this.lastEventId = msg.id;\n }\n if (!this.spec.known.has(msg.event)) continue;\n const data = JSON.parse(msg.data) as Record<string, unknown>;\n if (msg.event === this.spec.errorEvent) throw this.spec.toError(data);\n const event = { ...data, type: msg.event, eventId: msg.id } as unknown as E;\n yield event;\n if (msg.event === this.spec.final?.event) {\n this.finalValue = data[this.spec.final.member] as F;\n ended = true;\n return;\n }\n }\n // A clean end of stream. Without a final event declared, that is the end; with one, a proxy cut us off,\n // unless the response carried no event at all: then the answer had already finished (PROTOCOL.md 5.6).\n if (!this.spec.final || onResponse === 0) return;\n } catch (err) {\n if (this.signal?.aborted) throw this.aborted(); // Node surfaces a mid-body abort as Error('aborted')\n if (ended || (err as Error)?.name === 'AbortError' || err === undefined || (err as { $fault?: unknown }).$fault || err instanceof SyntaxError) throw err;\n // Transport error mid-stream: resume.\n }\n if (this.signal?.aborted) throw this.aborted();\n if (!this.resume || ++this.reconnects > this.maxReconnects)\n throw this.spec.toError({ status: 0, code: 'STREAM_LOST', title: 'The stream dropped and could not be resumed' });\n body = (await this.resume(this.lastEventId)).events as Body;\n }\n }\n\n /** Drains the stream if needed and returns the final event's member. */\n async finalMessage(): Promise<F> {\n if (!this.consumed) for await (const _ of this) void _;\n if (this.finalValue === undefined) throw this.spec.toError({ status: 0, code: 'NO_FINAL_EVENT', title: 'The stream ended without its final event' });\n return this.finalValue;\n }\n}\n", "// The runtime half of @presignedUpload (PROTOCOL.md \"Uploads\"): checksum the bytes, reserve the slot,\n// PUT the bytes to the presigned URL, in a `caitlyn.upload` span (PROTOCOL.md 13).\nimport { SpanKind, SpanStatusCode, type Tracer } from '@opentelemetry/api';\nimport { recordFailure, urlWithoutQuery } from './telemetry.js';\nconst STATUS = Symbol('status');\n\nexport interface UploadSlot {\n uploadUrl: string;\n uploadMethod: string;\n requiredHeaders: Record<string, string>;\n}\n\nexport interface UploadMeta {\n fileName: string;\n contentType: string;\n byteSize: number;\n sha256: string;\n}\n\nexport async function uploadFile<S extends UploadSlot>(\n file: Blob,\n fileName: string,\n reserve: (meta: UploadMeta) => Promise<S>,\n toError: (problem: Record<string, unknown>) => Error,\n signal?: AbortSignal,\n tracer?: Tracer,\n): Promise<S> {\n const bytes = new Uint8Array(await file.arrayBuffer());\n const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', bytes));\n let binary = '';\n for (const b of digest) binary += String.fromCharCode(b);\n const slot = await reserve({ fileName, contentType: file.type || 'application/octet-stream', byteSize: bytes.byteLength, sha256: btoa(binary) });\n const put = async () => {\n const res = await fetch(slot.uploadUrl, { method: slot.uploadMethod, headers: slot.requiredHeaders, body: bytes, signal });\n if (!res.ok) throw Object.assign(toError({ status: res.status, code: 'UPLOAD_PUT_FAILED', title: 'Uploading the bytes failed', detail: await res.text() }), { [STATUS]: res.status });\n return res.status;\n };\n if (!tracer) {\n await put();\n return slot;\n }\n const url = new URL(slot.uploadUrl);\n const span = tracer.startSpan('caitlyn.upload', {\n kind: SpanKind.CLIENT,\n attributes: { 'http.request.method': slot.uploadMethod || 'PUT', 'server.address': url.hostname, 'url.full': urlWithoutQuery(slot.uploadUrl) },\n });\n try {\n span.setAttribute('http.response.status_code', await put());\n return slot;\n } catch (err) {\n const status = (err as { [STATUS]?: number })[STATUS];\n if (status !== undefined) span.setAttribute('http.response.status_code', status);\n recordFailure(span, err);\n span.setStatus({ code: SpanStatusCode.ERROR });\n throw err;\n } finally {\n span.end();\n }\n}\n", "// Sign-in modes. Every mode except `session` ends in the same thing: a short-lived Caitlyn bearer token from\n// the workspace's OAuth token endpoint ({endpoint}/oauth/token), cached until a minute before it expires and\n// refreshed by one request at a time (design doc, \"Authentication\"; proposal 6.11).\n//\n// token a personal access token (cait-pat-\u2026), sent as it is\n// clientCredentials client ID and secret exchanged for a token; re-requested before expiry\n// oauth authorisation code with PKCE, then refresh tokens; a token store keeps them\n// awsIam STS GetWebIdentityToken with the caller's AWS credentials, exchanged (RFC 8693)\n// workloadIdentity a JWT from another trusted issuer (GitLab CI id_tokens), exchanged (RFC 8693)\n// session the browser session cookie; Origin on every write (the Caitlyn app, local recording)\nimport type { Pluggable, FinalizeRequestMiddleware, InitializeMiddleware, TokenIdentity } from '@smithy/types';\nimport { HttpRequest } from '@smithy/core/protocols';\nimport type { AwsCredentialSource, AwsCredentials } from './aws.js';\n\n/** Tokens the `oauth` mode keeps. `expiresAt` is milliseconds since the epoch. */\nexport interface OAuthTokens {\n accessToken: string;\n refreshToken?: string;\n expiresAt?: number;\n scope?: string;\n}\n\n/** Where the `oauth` mode keeps tokens between processes, for example encrypted on a server. */\nexport interface TokenStore {\n load(): Promise<OAuthTokens | undefined> | OAuthTokens | undefined;\n save(tokens: OAuthTokens): Promise<void> | void;\n clear(): Promise<void> | void;\n}\n\nexport type AuthOptions =\n | {\n mode: 'token';\n token: string;\n /** In a browser, silences the warning that a long-lived token there is exposed (for local testing). */\n allowBrowserToken?: boolean;\n }\n | { mode: 'clientCredentials'; clientId: string; clientSecret: string; scopes?: string[]; resource?: string }\n | {\n mode: 'oauth';\n clientId: string;\n /** For a confidential client on a server; omit in a browser. */\n clientSecret?: string;\n redirectUri?: string;\n scopes?: string[];\n resource?: string;\n /** Default: kept in memory for the life of the client. */\n tokenStore?: TokenStore;\n }\n | {\n mode: 'awsIam';\n /** The regional STS endpoint to use. Default: AWS_REGION, then AWS_DEFAULT_REGION. */\n region?: string;\n /** Default: environment variables, then the container credentials endpoint. Accepts any @aws-sdk provider. */\n credentials?: AwsCredentialSource;\n signingAlgorithm?: 'ES384' | 'RS256';\n /** Lifetime of the AWS-signed token, at most 300 (the default). */\n durationSeconds?: number;\n /** The audience the AWS token is minted for. Default: the workspace resource URL. */\n audience?: string;\n stsEndpoint?: string;\n }\n | {\n mode: 'workloadIdentity';\n /** Returns the workload's current identity token, for example a GitLab CI id_tokens variable. */\n token: () => string | Promise<string>;\n resource?: string;\n }\n | {\n mode: 'session';\n /** A session cookie, for server-side use. In a browser leave it out: the browser sends its own. */\n cookie?: string;\n /** Sent as Origin on every write. Default: the workspace URL. */\n origin?: string;\n };\n\n/** A sign-in failure: the token endpoint's OAuth error, or a failure to get the identity it exchanges. */\nexport class CaitlynAuthError extends Error {\n override readonly name = 'CaitlynAuthError';\n constructor(\n message: string,\n /** The OAuth error code (`invalid_client`, `invalid_grant`\u2026), or `sign_in_required`. */\n readonly code: string,\n readonly status?: number,\n readonly requestId?: string,\n ) {\n super(message);\n }\n}\n\nconst TOKEN_EXCHANGE = 'urn:ietf:params:oauth:grant-type:token-exchange';\nconst JWT_TYPE = 'urn:ietf:params:oauth:token-type:jwt';\nconst REFRESH_EARLY_MS = 60_000;\nconst SESSION_PLACEHOLDER = 'session';\n\n/** When to replace a token: a minute before it expires, or halfway through a lifetime shorter than two minutes. */\nconst refreshAt = (t: OAuthTokens) => (t.expiresAt === undefined ? undefined : t.expiresAt - Math.min(REFRESH_EARLY_MS, (t.expiresAt - Date.now()) / 2));\n\nconst b64url = (bytes: ArrayBuffer | Uint8Array) =>\n btoa(String.fromCharCode(...new Uint8Array(bytes as ArrayBuffer))).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\nconst randomString = (n = 32) => b64url(crypto.getRandomValues(new Uint8Array(n)));\n\n/** The audience of a workspace's tokens: its resource URL, https://<workspace>/api. */\nexport const workspaceAudience = (workspace: string) => `https://${workspaceHost(workspace)}/api`;\n\n/** A workspace given as a hostname or a URL, as its bare hostname. */\nexport const workspaceHost = (workspace: string) => workspace.replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '');\n\n/**\n * Whether this is a browser page: a `window` and a `document`. Node, Deno and Bun have no `document`, and web,\n * service and shared workers have neither. A test environment that simulates a DOM (jsdom) counts as a browser.\n */\nexport const isBrowser = (): boolean => {\n const g = globalThis as { window?: unknown; document?: unknown };\n return typeof g.window !== 'undefined' && typeof g.document !== 'undefined';\n};\n\nconst IN_BROWSER = 'not_allowed_in_browser';\n\n/**\n * In a browser, refuses the modes whose credential everyone who loads the page could read, or that only work on a\n * server, and warns about a long-lived token (PROTOCOL.md section 12.6). Throws when the client is created.\n */\nfunction guardBrowser(o: AuthOptions): void {\n if (!isBrowser()) return;\n if (o.mode === 'clientCredentials' || (o.mode === 'oauth' && o.clientSecret)) {\n throw new CaitlynAuthError(\n `${o.mode === 'oauth' ? 'oauth with a clientSecret' : 'clientCredentials'} cannot be used in a browser: a client secret in a browser is visible to everyone who loads the page. Use oauth without a clientSecret (authorisation code with PKCE), or sign in on your server.`,\n IN_BROWSER,\n );\n }\n if (o.mode === 'awsIam' || o.mode === 'workloadIdentity') {\n throw new CaitlynAuthError(`${o.mode} cannot be used in a browser: it signs in a server workload with that workload's own identity. Use oauth in a browser.`, IN_BROWSER);\n }\n if (o.mode === 'token' && !o.allowBrowserToken) {\n console.warn(\n 'Caitlyn: a long-lived token in a browser is exposed to anyone who can run script on the page. token mode in a browser is for local testing; use oauth instead. Set auth.allowBrowserToken: true to silence this warning.',\n );\n }\n}\n\n/** What `client.auth` offers: the current token, and the `oauth` mode's sign-in steps. */\nexport class AuthSession {\n private cached?: { token: string; refreshAt?: number };\n /** The token the server last refused with a 401, so `oauth` never reloads it from the store. */\n private refused?: string;\n private inflight?: Promise<string>;\n private memoryTokens?: OAuthTokens;\n readonly tokenEndpoint: string;\n readonly authorizationEndpoint: string;\n /** The workspace's resource URL, https://<workspace>/api: the audience every token is bound to. */\n readonly resource: string;\n /** https://<workspace>: the default Origin for session writes. */\n readonly workspaceUrl: string;\n\n constructor(\n readonly options: AuthOptions,\n /** Where the token endpoint is: the client's endpoint, which an override may move (a proxy, a local app). */\n readonly endpoint: string,\n /** The workspace hostname. Like an AWS region, it decides the endpoint and the token audience. */\n readonly workspace: string,\n private readonly fetchFn: typeof fetch = (...a) => fetch(...a),\n ) {\n this.tokenEndpoint = `${endpoint}/oauth/token`;\n this.authorizationEndpoint = `${endpoint}/oauth/authorize`;\n this.workspaceUrl = `https://${workspace}`;\n // From the workspace, never from an endpoint override: a token is always for the workspace it names.\n this.resource = ('resource' in options && options.resource) || workspaceAudience(workspace);\n guardBrowser(options);\n }\n\n get mode() {\n return this.options.mode;\n }\n\n /** The bearer token for the next request: cached, or fetched once however many calls ask at the same time. */\n async token(): Promise<string> {\n const o = this.options;\n if (o.mode === 'token') return o.token;\n if (o.mode === 'session') return SESSION_PLACEHOLDER; // removed again after signing\n if (this.cached && (this.cached.refreshAt === undefined || this.cached.refreshAt > Date.now())) return this.cached.token;\n this.inflight ??= this.fetchToken().finally(() => (this.inflight = undefined));\n return this.inflight;\n }\n\n /** Forgets the cached token, so the next call signs in again (done once after a 401). */\n invalidate(): void {\n this.refused = this.cached?.token;\n this.cached = undefined;\n }\n\n /** Whether a 401 is worth one more try with a new token. */\n get canRefresh(): boolean {\n return this.options.mode !== 'token' && this.options.mode !== 'session';\n }\n\n // ------------------------------------------------------------------ oauth\n\n /** Starts sign-in (`oauth` mode): the URL to send the person to, and the state and PKCE verifier to keep. */\n async authorizationUrl(opts: { state?: string; scopes?: string[]; redirectUri?: string } = {}): Promise<{ url: string; state: string; codeVerifier: string }> {\n const o = this.oauth();\n const codeVerifier = randomString(48);\n const state = opts.state ?? randomString(16);\n const challenge = b64url(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier)));\n const url = new URL(this.authorizationEndpoint);\n const redirectUri = opts.redirectUri ?? o.redirectUri;\n if (!redirectUri) throw new CaitlynAuthError('oauth: redirectUri is required', 'invalid_request');\n const scopes = opts.scopes ?? o.scopes;\n url.search = new URLSearchParams({\n response_type: 'code',\n client_id: o.clientId,\n redirect_uri: redirectUri,\n code_challenge: challenge,\n code_challenge_method: 'S256',\n state,\n resource: this.resource,\n ...(scopes?.length ? { scope: scopes.join(' ') } : {}),\n }).toString();\n return { url: url.toString(), state, codeVerifier };\n }\n\n /** Finishes sign-in (`oauth` mode): checks state, exchanges the code and saves the tokens. */\n async handleCallback(p: { code: string; state?: string; expectedState?: string; codeVerifier: string; redirectUri?: string }): Promise<OAuthTokens> {\n const o = this.oauth();\n if (p.expectedState !== undefined && p.state !== p.expectedState) throw new CaitlynAuthError('oauth: the state does not match', 'invalid_state');\n const redirectUri = p.redirectUri ?? o.redirectUri;\n const tokens = await this.requestToken({\n grant_type: 'authorization_code',\n code: p.code,\n code_verifier: p.codeVerifier,\n ...(redirectUri ? { redirect_uri: redirectUri } : {}),\n resource: this.resource,\n ...this.clientParams(),\n });\n await this.saveTokens(tokens);\n return tokens;\n }\n\n /** Signs out (`oauth` mode): revokes the refresh token where possible and clears the store. */\n async signOut(): Promise<void> {\n const o = this.oauth();\n const t = await this.loadTokens();\n if (t?.refreshToken) {\n await this.fetchFn(this.tokenEndpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({ action: 'revoke', token: t.refreshToken, ...this.clientParams() }).toString(),\n }).catch(() => undefined);\n }\n this.cached = undefined;\n this.memoryTokens = undefined;\n await o.tokenStore?.clear();\n }\n\n private oauth() {\n if (this.options.mode !== 'oauth') throw new CaitlynAuthError(`This client signs in with ${this.options.mode}, not oauth`, 'invalid_request');\n return this.options;\n }\n\n private clientParams(): Record<string, string> {\n const o = this.options as { clientId?: string; clientSecret?: string };\n return { ...(o.clientId ? { client_id: o.clientId } : {}), ...(o.clientSecret ? { client_secret: o.clientSecret } : {}) };\n }\n\n private async loadTokens() {\n const o = this.oauth();\n return o.tokenStore ? await o.tokenStore.load() : this.memoryTokens;\n }\n\n private async saveTokens(t: OAuthTokens) {\n const o = this.oauth();\n this.memoryTokens = t;\n this.cached = { token: t.accessToken, refreshAt: refreshAt(t) };\n await o.tokenStore?.save(t);\n }\n\n // ------------------------------------------------------------------ fetching tokens\n\n private async fetchToken(): Promise<string> {\n const o = this.options;\n let t: OAuthTokens;\n switch (o.mode) {\n case 'clientCredentials':\n t = await this.requestToken({\n grant_type: 'client_credentials',\n ...this.clientParams(),\n resource: this.resource,\n ...(o.scopes?.length ? { scope: o.scopes.join(' ') } : {}),\n });\n break;\n case 'oauth': {\n const stored = await this.loadTokens();\n const held = this.cached?.token ?? this.refused;\n if (stored && (stored.expiresAt === undefined || stored.expiresAt - REFRESH_EARLY_MS > Date.now()) && stored.accessToken !== held) {\n t = stored; // signed in or refreshed by another process (or not yet used by this client)\n } else if (stored?.refreshToken) {\n try {\n t = await this.requestToken({ grant_type: 'refresh_token', refresh_token: stored.refreshToken, ...this.clientParams() });\n } catch (err) {\n if (err instanceof CaitlynAuthError && err.code === 'invalid_grant') await o.tokenStore?.clear();\n throw err;\n }\n t.refreshToken ??= stored.refreshToken;\n await this.saveTokens(t);\n } else {\n throw new CaitlynAuthError('oauth: not signed in. Call auth.authorizationUrl() and auth.handleCallback() first.', 'sign_in_required');\n }\n break;\n }\n case 'awsIam': {\n const region = o.region ?? env().AWS_REGION ?? env().AWS_DEFAULT_REGION;\n if (!region) throw new CaitlynAuthError('awsIam: set region, or AWS_REGION, for the regional STS endpoint', 'invalid_request');\n // Loaded only in this mode, so a browser bundle that never signs in with AWS does not carry the signer.\n const { defaultAwsCredentials, getWebIdentityToken } = await import('./aws.js');\n let subject: string;\n try {\n // Inside the try, so missing credentials are a sign-in error like an STS refusal.\n const credentials = o.credentials ? await (typeof o.credentials === 'function' ? o.credentials() : o.credentials) : await defaultAwsCredentials(this.fetchFn);\n subject = (await getWebIdentityToken({ region, audience: o.audience ?? this.resource, credentials, signingAlgorithm: o.signingAlgorithm, durationSeconds: o.durationSeconds, stsEndpoint: o.stsEndpoint, fetch: this.fetchFn })).token;\n } catch (err) {\n throw new CaitlynAuthError((err as Error).message, (err as { code?: string }).code ?? 'aws_identity_failed', (err as { status?: number }).status);\n }\n t = await this.exchange(subject);\n break;\n }\n case 'workloadIdentity':\n t = await this.exchange(await o.token());\n break;\n default:\n throw new CaitlynAuthError(`No token to fetch in ${o.mode} mode`, 'invalid_request');\n }\n this.cached = { token: t.accessToken, refreshAt: refreshAt(t) };\n return t.accessToken;\n }\n\n private exchange(subjectToken: string) {\n return this.requestToken({\n grant_type: TOKEN_EXCHANGE,\n subject_token: subjectToken,\n subject_token_type: JWT_TYPE,\n requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',\n resource: this.resource,\n });\n }\n\n private async requestToken(params: Record<string, string>): Promise<OAuthTokens> {\n const res = await this.fetchFn(this.tokenEndpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded', accept: 'application/json' },\n body: new URLSearchParams(params).toString(),\n });\n const requestId = res.headers.get('caitlyn-request-id') ?? undefined;\n const body = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n if (!res.ok || typeof body.access_token !== 'string') {\n const code = String(body.error ?? body.code ?? `http_${res.status}`);\n throw new CaitlynAuthError(String(body.error_description ?? body.detail ?? `Sign-in failed: ${code}`), code, res.status, requestId);\n }\n return {\n accessToken: body.access_token,\n refreshToken: typeof body.refresh_token === 'string' ? body.refresh_token : undefined,\n expiresAt: typeof body.expires_in === 'number' ? Date.now() + body.expires_in * 1000 : undefined,\n scope: typeof body.scope === 'string' ? body.scope : undefined,\n };\n }\n}\n\ntype Env = Record<string, string | undefined>;\nconst env = (): Env => (globalThis as { process?: { env?: Env } }).process?.env ?? {};\n\n\n/**\n * The generated client's `token` identity provider. It reports the token as already near expiry, so Smithy's\n * memoisation asks again on every request and AuthSession's own cache (which knows the real expiry, and can\n * be invalidated after a 401) decides.\n */\nexport const tokenIdentityProvider = (auth: AuthSession) => async (): Promise<TokenIdentity> => ({ token: await auth.token(), expiration: new Date() });\n\n/** Session headers, and one retry with a new token after a 401. */\nexport function getCaitlynAuthPlugin(auth: AuthSession): Pluggable<any, any> {\n const o = auth.options;\n const session: FinalizeRequestMiddleware<any, any> = (next) => async (args) => {\n if (o.mode === 'session' && HttpRequest.isInstance(args.request)) {\n delete args.request.headers.authorization;\n delete args.request.headers.Authorization;\n if (o.cookie) args.request.headers.cookie = o.cookie;\n if (args.request.method !== 'GET' && args.request.method !== 'HEAD') args.request.headers.origin = o.origin ?? auth.workspaceUrl;\n }\n return next(args);\n };\n const reauth: InitializeMiddleware<any, any> = (next) => async (args) => {\n try {\n return await next(args);\n } catch (err) {\n if (!auth.canRefresh || (err as { $metadata?: { httpStatusCode?: number } })?.$metadata?.httpStatusCode !== 401) throw err;\n auth.invalidate();\n return next(args);\n }\n };\n return {\n applyToStack(stack) {\n stack.addRelativeTo(session, { toMiddleware: 'httpSigningMiddleware', relation: 'after', name: 'caitlynSession', override: true });\n stack.add(reauth, { step: 'initialize', name: 'caitlynReauth', priority: 'low', override: true });\n },\n };\n}\n", "// Client options shared by every generated Caitlyn client, and the options every call accepts.\nimport type { TracerProvider } from '@opentelemetry/api';\nimport type { HttpHandlerUserInput } from '@smithy/core/protocols';\nimport { CaitlynRetryStrategy } from './retry.js';\nimport { caitlynTracer } from './telemetry.js';\nimport { AuthSession, tokenIdentityProvider, workspaceHost, type AuthOptions } from './auth.js';\n\nexport interface CaitlynOptions {\n /**\n * The workspace hostname, for example \"your-company.getcaitlyn.ai\". Like an AWS region, it decides where\n * requests go (https://<workspace>/api) and the audience every token is bound to (https://<workspace>/api).\n */\n workspace: string;\n /** How the client signs in: token, clientCredentials, oauth, awsIam, workloadIdentity or session. */\n auth: AuthOptions;\n /** The fetch the sign-in requests use (token endpoint, STS, container credentials). Default: global fetch. */\n fetch?: typeof fetch;\n /**\n * Overrides the base URL the operation paths (/v3/\u2026) and the token endpoint (/oauth/token) are appended to,\n * for a proxy or a local app. Default: https://{workspace}/api. It never changes the token audience.\n */\n endpoint?: string;\n /**\n * The HTTP handler API calls go through, for this client only: a `NodeHttpHandler` with your own `https.Agent`\n * (a private certificate authority, a proxy, keep-alive settings), a `FetchHttpHandler`, any object with\n * `handle(request)`, or the default handler's options (`{ httpsAgent }` on Node). Default: a handler of the\n * client's own. Sign-in requests go through `fetch`.\n */\n requestHandler?: HttpHandlerUserInput;\n maxAttempts?: number;\n /** Longest Retry-After the SDK waits for (default 60 000 ms); above it the call fails at once. */\n maxRetryDelayMs?: number;\n telemetry?: { tracerProvider?: TracerProvider; enabled?: boolean };\n}\n\nexport interface CallOptions {\n signal?: AbortSignal;\n}\n\n/** The base URL of a workspace's API: its hostname, over HTTPS, with the /api prefix every Caitlyn route has. */\nexport function workspaceEndpoint(workspace: string): string {\n return `https://${workspaceHost(workspace)}/api`;\n}\n\n/** The sign-in session for a set of options: what `client.auth` is. */\nexport function createAuth(opts: CaitlynOptions): AuthSession {\n return new AuthSession(opts.auth, (opts.endpoint ?? workspaceEndpoint(opts.workspace)).replace(/\\/+$/, ''), workspaceHost(opts.workspace), opts.fetch);\n}\n\n/** The generated client's configuration for a set of options. */\nexport function clientConfig(opts: CaitlynOptions, auth: AuthSession = createAuth(opts)) {\n return {\n /** The workspace this client is for; readable as client.config.workspace. */\n workspace: workspaceHost(opts.workspace),\n endpoint: opts.endpoint ?? workspaceEndpoint(opts.workspace),\n token: tokenIdentityProvider(auth),\n /** The tracer upload helpers record the byte transfer with (PROTOCOL.md 13); absent with telemetry off. */\n caitlynTracer: opts.telemetry?.enabled === false ? undefined : caitlynTracer(opts.telemetry?.tracerProvider),\n ...(opts.requestHandler !== undefined ? { requestHandler: opts.requestHandler } : {}),\n ...(opts.maxAttempts !== undefined ? { maxAttempts: opts.maxAttempts } : {}),\n ...(opts.maxRetryDelayMs !== undefined ? { retryStrategy: new CaitlynRetryStrategy(opts.maxAttempts ?? 3, opts.maxRetryDelayMs) } : {}),\n };\n}\n\n/** One problem with one request member or query parameter, on a 400 VALIDATION_FAILED. */\nexport interface CaitlynFieldError {\n pointer?: string;\n parameter?: string;\n code: string;\n detail?: string;\n}\n\n/** The RFC 9457 fields every Caitlyn error carries (PROTOCOL.md 6.3). */\nexport interface CaitlynErrorFields {\n status?: number;\n code?: string;\n type?: string;\n title?: string;\n detail?: string;\n requestId?: string;\n retryAfterSeconds?: number;\n errors?: CaitlynFieldError[];\n /** The response body as received, as text, at most its first 8 KiB: the only view of a body that is not problem details (PROTOCOL.md 6.3). */\n rawBody?: string;\n /** True when the body was longer than 8 KiB and `rawBody` holds only its first 8 KiB. */\n rawBodyTruncated?: boolean;\n}\n", "// The runtime half of @waitable (smithy.waiters): poll a read operation until an acceptor matches. Generated\n// waitUntil\u2026() methods supply the read and the acceptors; this does the timing, cancellation and errors.\n// The same rules as Smithy's waiter specification: exponential backoff between minDelay and maxDelay with\n// jitter, a success or failure acceptor ends the wait, and an error that no acceptor matches is thrown.\n\nexport type WaiterState = 'success' | 'failure' | 'retry';\n\nexport interface WaiterOptions {\n /** Stops waiting and throws the signal's reason (use AbortSignal.timeout() for a deadline). */\n signal?: AbortSignal;\n /** The longest the waiter waits in total, in milliseconds. Default: no limit beyond the signal. */\n maxWaitMs?: number;\n /** Default 2 000 ms (Smithy's default minDelay). */\n minDelayMs?: number;\n /** Default 120 000 ms (Smithy's default maxDelay). */\n maxDelayMs?: number;\n}\n\n/** A waiter ended in a failure state, or ran out of time. `last` is the last output or error it saw. */\nexport class WaiterError extends Error {\n override readonly name = 'WaiterError';\n constructor(\n message: string,\n readonly reason: 'failure' | 'timeout',\n readonly last: unknown,\n readonly attempts: number,\n ) {\n super(message);\n }\n}\n\nconst sleep = (ms: number, signal?: AbortSignal) =>\n new Promise<void>((resolve, reject) => {\n if (signal?.aborted) return reject(signal.reason);\n const t = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(t);\n reject(signal!.reason);\n };\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n\n/**\n * Calls `read` until `accept` says success (returns the output) or failure (throws WaiterError).\n * `accept` sees either `{output}` or `{error}`; returning undefined for an error rethrows it.\n */\nexport async function waitUntil<T>(\n name: string,\n read: (signal?: AbortSignal) => Promise<T>,\n accept: (r: { output: T; error?: undefined } | { output?: undefined; error: unknown }) => WaiterState | undefined,\n opts: WaiterOptions = {},\n): Promise<T> {\n const minDelay = opts.minDelayMs ?? 2_000;\n const maxDelay = Math.max(minDelay, opts.maxDelayMs ?? 120_000);\n const deadline = opts.maxWaitMs === undefined ? Infinity : Date.now() + opts.maxWaitMs;\n for (let attempt = 1; ; attempt++) {\n if (opts.signal?.aborted) throw opts.signal.reason;\n let state: WaiterState | undefined;\n let last: unknown;\n try {\n const output = await read(opts.signal);\n last = output;\n state = accept({ output }) ?? 'retry';\n if (state === 'success') return output;\n } catch (error) {\n if (opts.signal?.aborted) throw opts.signal.reason;\n last = error;\n state = accept({ error });\n if (state === undefined || state === 'success') throw error;\n }\n if (state === 'failure') throw new WaiterError(`${name}: reached a failure state`, 'failure', last, attempt);\n // Smithy's backoff: min(maxDelay, minDelay * 2^(attempt-1)), with jitter between minDelay and that.\n const ceiling = Math.min(maxDelay, minDelay * 2 ** Math.min(attempt - 1, 30));\n let delay = minDelay + Math.random() * (ceiling - minDelay);\n const left = deadline - Date.now();\n if (left <= 0) throw new WaiterError(`${name}: did not finish within ${opts.maxWaitMs} ms`, 'timeout', last, attempt);\n delay = Math.min(delay, left);\n await sleep(delay, opts.signal);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_protocols", "import_protocols", "context", "context", "bytes", "Ctor", "import_protocols", "import_api", "import_protocols", "env", "defaultAwsCredentials", "getWebIdentityToken"]
|
|
7
7
|
}
|