@volley/recognition-client-sdk-node22 0.1.424
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 +344 -0
- package/dist/browser.bundled.d.ts +1280 -0
- package/dist/browser.d.ts +10 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/config-builder.d.ts +134 -0
- package/dist/config-builder.d.ts.map +1 -0
- package/dist/errors.d.ts +41 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/factory.d.ts +36 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/index.bundled.d.ts +2572 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10199 -0
- package/dist/index.js.map +7 -0
- package/dist/recog-client-sdk.browser.d.ts +10 -0
- package/dist/recog-client-sdk.browser.d.ts.map +1 -0
- package/dist/recog-client-sdk.browser.js +5746 -0
- package/dist/recog-client-sdk.browser.js.map +7 -0
- package/dist/recognition-client.d.ts +128 -0
- package/dist/recognition-client.d.ts.map +1 -0
- package/dist/recognition-client.types.d.ts +271 -0
- package/dist/recognition-client.types.d.ts.map +1 -0
- package/dist/simplified-vgf-recognition-client.d.ts +178 -0
- package/dist/simplified-vgf-recognition-client.d.ts.map +1 -0
- package/dist/utils/audio-ring-buffer.d.ts +69 -0
- package/dist/utils/audio-ring-buffer.d.ts.map +1 -0
- package/dist/utils/message-handler.d.ts +45 -0
- package/dist/utils/message-handler.d.ts.map +1 -0
- package/dist/utils/url-builder.d.ts +28 -0
- package/dist/utils/url-builder.d.ts.map +1 -0
- package/dist/vgf-recognition-mapper.d.ts +66 -0
- package/dist/vgf-recognition-mapper.d.ts.map +1 -0
- package/dist/vgf-recognition-state.d.ts +91 -0
- package/dist/vgf-recognition-state.d.ts.map +1 -0
- package/package.json +74 -0
- package/src/browser.ts +24 -0
- package/src/config-builder.spec.ts +265 -0
- package/src/config-builder.ts +240 -0
- package/src/errors.ts +84 -0
- package/src/factory.spec.ts +215 -0
- package/src/factory.ts +47 -0
- package/src/index.ts +127 -0
- package/src/recognition-client.spec.ts +889 -0
- package/src/recognition-client.ts +844 -0
- package/src/recognition-client.types.ts +338 -0
- package/src/simplified-vgf-recognition-client.integration.spec.ts +718 -0
- package/src/simplified-vgf-recognition-client.spec.ts +1525 -0
- package/src/simplified-vgf-recognition-client.ts +524 -0
- package/src/utils/audio-ring-buffer.spec.ts +335 -0
- package/src/utils/audio-ring-buffer.ts +170 -0
- package/src/utils/message-handler.spec.ts +311 -0
- package/src/utils/message-handler.ts +131 -0
- package/src/utils/url-builder.spec.ts +252 -0
- package/src/utils/url-builder.ts +92 -0
- package/src/vgf-recognition-mapper.spec.ts +78 -0
- package/src/vgf-recognition-mapper.ts +232 -0
- package/src/vgf-recognition-state.ts +102 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/.pnpm/zod@3.22.5/node_modules/zod/lib/index.mjs", "../../../libs/types/src/provider.types.ts", "../../../libs/types/src/recognition-result-v1.types.ts", "../../../libs/types/src/provider-transcription.types.ts", "../../../libs/types/src/error-exception.types.ts", "../../../libs/types/src/recognition-context-v1.types.ts", "../../../libs/types/src/recognition-query.types.ts", "../../../libs/types/src/audio.types.ts", "../../../libs/types/src/asr-config.types.ts", "../../../libs/types/src/plumbing-types.ts", "../../../libs/types/src/game-id.types.ts", "../../../libs/types/src/gemini-types.ts", "../../../libs/types/src/openai-types.ts", "../../../libs/types/src/conductor.types.ts", "../../../libs/types/src/stages.types.ts", "../../../libs/websocket/src/core/audio-upload-websocket-protocol.ts", "../../../libs/websocket/src/core/audio-upload-websocket-client.ts", "../../../libs/websocket/src/core/audio-upload-websocket-server.ts", "../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/rng.js", "../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/stringify.js", "../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/native.js", "../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/v4.js", "../../../libs/config/src/service-endpoints.ts", "../src/utils/url-builder.ts", "../src/utils/audio-ring-buffer.ts", "../src/utils/message-handler.ts", "../src/errors.ts", "../src/recognition-client.ts"],
|
|
4
|
+
"sourcesContent": ["var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n get errors() {\n return this.issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message || errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n syncPairs.push({\n key: await pair.key,\n value: await pair.value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" &&\n (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n if (typeof ctx.data === \"undefined\") {\n return { message: required_error !== null && required_error !== void 0 ? required_error : ctx.defaultError };\n }\n return { message: invalid_type_error !== null && invalid_type_error !== void 0 ? invalid_type_error : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n }\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this, this._def);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[a-z][a-z0-9]*$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_+-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\nconst ipv4Regex = /^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/;\nconst ipv6Regex = /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\n// Adapted from https://stackoverflow.com/a/3143231\nconst datetimeRegex = (args) => {\n if (args.precision) {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}Z$`);\n }\n }\n else if (args.precision === 0) {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}Z$`);\n }\n }\n else {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?Z$`);\n }\n }\n};\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n }\n //\n );\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * @deprecated Use z.string().min(1) instead.\n * @see {@link ZodString.min}\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = BigInt(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n syncPairs.push({\n key,\n value: await pair.value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return Object.keys(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else {\n return null;\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (this._def.values.indexOf(input.data) === -1) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values) {\n return ZodEnum.create(values);\n }\n exclude(values) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)));\n }\n}\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (nativeEnumValues.indexOf(input.data) === -1) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.issues.length) {\n return {\n status: \"dirty\",\n value: ctx.data,\n };\n }\n if (ctx.common.async) {\n return Promise.resolve(processed).then((processed) => {\n return this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n });\n }\n else {\n return this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc\n // effect: RefinementEffect<any>\n ) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n if (isValid(result)) {\n result.value = Object.freeze(result.value);\n }\n return result;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\nconst custom = (check, params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) => {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n if (!check(data)) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n }\n });\n return ZodAny.create();\n};\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n ZodReadonly: ZodReadonly,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n", "/**\n * Provider types and enums for recognition services\n * NOTE_TO_AI: DO NOT CHANGE THIS UNLESS EXPLICITLY ASKED. Always ask before making any changes.\n */\n\n/**\n * Supported speech recognition providers\n */\nexport enum RecognitionProvider {\n ASSEMBLYAI = 'assemblyai',\n DEEPGRAM = 'deepgram',\n ELEVENLABS = 'elevenlabs',\n FIREWORKS = 'fireworks',\n GOOGLE = 'google',\n GEMINI_BATCH = 'gemini-batch',\n OPENAI_BATCH = 'openai-batch',\n OPENAI_REALTIME = 'openai-realtime',\n TEST_ASR_PROVIDER_QUOTA = 'test-asr-provider-quota',\n TEST_ASR_STREAMING = 'test-asr-streaming'\n}\n\n/**\n * Recognition processing modes\n */\nexport enum RecognitionMode {\n STREAMING = 'streaming',\n BATCH = 'batch'\n}\n\n/**\n * ASR API type - distinguishes between streaming and file-based transcription APIs\n * - STREAMING: Real-time streaming APIs (Deepgram, AssemblyAI, Google)\n * - FILE_BASED: File upload/batch APIs (OpenAI Batch, Gemini Batch)\n */\nexport enum ASRApiType {\n STREAMING = 'streaming',\n FILE_BASED = 'file-based'\n}\n\n/**\n * Deepgram model names\n */\nexport enum DeepgramModel {\n NOVA_2 = 'nova-2',\n NOVA_3 = 'nova-3',\n FLUX_GENERAL_EN = 'flux-general-en'\n}\n\n/**\n * Google Cloud Speech models\n * @see https://cloud.google.com/speech-to-text/docs/transcription-model\n * @see https://cloud.google.com/speech-to-text/v2/docs/chirp_3-model\n */\nexport enum GoogleModel {\n // V2 models (Chirp - latest, best accuracy)\n CHIRP_3 = 'chirp_3',\n CHIRP_2 = 'chirp_2',\n CHIRP = 'chirp',\n\n // V1 modern models (recommended)\n LATEST_LONG = 'latest_long',\n LATEST_SHORT = 'latest_short',\n TELEPHONY = 'telephony',\n TELEPHONY_SHORT = 'telephony_short',\n\n // V1 legacy models (for backwards compatibility)\n DEFAULT = 'default',\n COMMAND_AND_SEARCH = 'command_and_search',\n PHONE_CALL = 'phone_call',\n VIDEO = 'video'\n}\n\n/**\n * Fireworks AI models for ASR\n * @see https://docs.fireworks.ai/guides/querying-asr-models\n * @see https://fireworks.ai/models/fireworks/fireworks-asr-large\n */\nexport enum FireworksModel {\n // Streaming models\n ASR_V1 = 'fireworks-asr-large', // Production streaming model\n ASR_V2 = 'fireworks-asr-v2', // Preview with lower latency\n\n // Pre-recorded models (not for streaming)\n WHISPER_V3 = 'whisper-v3',\n WHISPER_V3_TURBO = 'whisper-v3-turbo'\n}\n\n/**\n * ElevenLabs Scribe models for speech-to-text\n * @see https://elevenlabs.io/blog/introducing-scribe-v2-realtime\n * @see https://elevenlabs.io/docs/cookbooks/speech-to-text/streaming\n * @see https://elevenlabs.io/docs/api-reference/speech-to-text/convert\n */\nexport enum ElevenLabsModel {\n // Streaming model (requires Starter tier or higher)\n SCRIBE_V2_REALTIME = 'scribe_v2_realtime', // Production streaming model with ~150ms latency\n\n // Batch model (works on free tier)\n SCRIBE_V1 = 'scribe_v1' // Pre-recorded batch processing, ~4x realtime speed\n}\n\n/**\n * OpenAI Realtime API transcription models\n * These are the verified `input_audio_transcription.model` values.\n * @see https://platform.openai.com/docs/guides/realtime\n */\nexport enum OpenAIRealtimeModel {\n GPT_4O_MINI_TRANSCRIBE = 'gpt-4o-mini-transcribe'\n}\n\n/**\n * Type alias for any model from any provider\n */\nexport type RecognitionModel = DeepgramModel | GoogleModel | FireworksModel | ElevenLabsModel | OpenAIRealtimeModel | string;\n\n/**\n * Helper type guards\n */\nexport const isDeepgramModel = (model: string): model is DeepgramModel => {\n return Object.values(DeepgramModel).includes(model as DeepgramModel);\n};\n\nexport const isGoogleModel = (model: string): model is GoogleModel => {\n return Object.values(GoogleModel).includes(model as GoogleModel);\n};\n\nexport const isFireworksModel = (model: string): model is FireworksModel => {\n return Object.values(FireworksModel).includes(model as FireworksModel);\n};\n\nexport const isElevenLabsModel = (model: string): model is ElevenLabsModel => {\n return Object.values(ElevenLabsModel).includes(model as ElevenLabsModel);\n};\n\nexport const isOpenAIRealtimeModel = (model: string): model is OpenAIRealtimeModel => {\n return Object.values(OpenAIRealtimeModel).includes(model as OpenAIRealtimeModel);\n};\n\nexport const isRecognitionProvider = (provider: string): provider is RecognitionProvider => {\n return Object.values(RecognitionProvider).includes(provider as RecognitionProvider);\n};\n", "/**\n * Recognition Result Types V1\n * NOTE_TO_AI: DO NOT CHANGE THIS UNLESS EXPLICITLY ASKED. Always ask before making any changes.\n * Types and schemas for recognition results sent to SDK clients\n */\n\nimport { z } from 'zod';\nimport { ASRApiType } from './provider.types.js';\n\n// ============================================================================\n// Recognition Result Message Types V1\n// ============================================================================\n\n/**\n * Message type discriminator for recognition results V1\n */\nexport enum RecognitionResultTypeV1 {\n TRANSCRIPTION = 'Transcription', // Transcript message contains all in the history. result of STT(Speech to text)\n FUNCTION_CALL = 'FunctionCall', // Not supported in P1.result of STF(Speedch to function call) Function call schema\n METADATA = 'Metadata', // Metadata message contains all the timestamps, provider info, and ASR config\n ERROR = 'Error', // Error message contains the error details\n CLIENT_CONTROL_MESSAGE = 'ClientControlMessage', // Client control message contains server to client control message. Wrapped in SDK.\n AUDIO_METRICS = 'AudioMetrics', // Audio metrics for quality monitoring (volume, silence, clipping, SNR)\n}\n\n// ============================================================================\n// Transcription Schemas V1\n// ============================================================================\n\n/**\n * Transcription result V1 - contains transcript message\n * In the long run game side should not need to know it. In the short run it is send back to client.\n * NOTE_TO_AI: DO NOT CHANGE THIS UNLESS EXPLICITLY ASKED. Always ask before making any changes.\n */\nexport const TranscriptionResultSchemaV1 = z.object({\n type: z.literal(RecognitionResultTypeV1.TRANSCRIPTION),\n audioUtteranceId: z.string(), // audio utterance id for this transcription session\n finalTranscript: z.string(), // transcript that is final and won't be overwritten by ASR. default empty string.\n finalTranscriptConfidence: z.number().min(0).max(1).optional(), // confidence score for the final transcript (0-1). Optional.\n pendingTranscript: z.string().optional(), // transcript that may be overwritten by ASR. Optional.\n pendingTranscriptConfidence: z.number().min(0).max(1).optional(), // confidence score for the pending transcript (0-1). Optional.\n is_finished: z.boolean(), // entire transcription finished. This will be the last message in the transcription.\n voiceStart: z.number().optional(), // voice start time identified by ASR (in milliseconds from stream start). Optional.\n voiceDuration: z.number().optional(), // voice duration identified by ASR (in milliseconds, calculated as maxVoiceEnd - voiceStart). Optional.\n voiceEnd: z.number().optional(), // voice end time identified by ASR (in milliseconds from stream start). Optional.\n startTimestamp: z.number().optional(), // start timestamp of the transcription in milliseconds. Optional.\n endTimestamp: z.number().optional(), // end timestamp of the transcription in milliseconds. Optional.\n receivedAtMs: z.number().optional(), // server timestamp when this transcript was received (ms since epoch). Optional.\n accumulatedAudioTimeMs: z.number().optional(), // accumulated audio time watermark in milliseconds. Total duration of all audio chunks sent. Optional.\n});\n\nexport type TranscriptionResultV1 = z.infer<typeof TranscriptionResultSchemaV1>;\n\n// ============================================================================\n// Function Call Schemas V1\n// ============================================================================\n\n/**\n * Function call result V1 - similar to LLM function call\n * In the long run game server should know it, rather than TV or client.\n */\nexport const FunctionCallResultSchemaV1 = z.object({\n type: z.literal(RecognitionResultTypeV1.FUNCTION_CALL),\n audioUtteranceId: z.string(), // audio utterance id for this function call\n functionName: z.string(),\n functionArgJson: z.string(),\n});\n\nexport type FunctionCallResultV1 = z.infer<typeof FunctionCallResultSchemaV1>;\n\n// ============================================================================\n// Metadata Schemas V1\n// ============================================================================\n\n/**\n * Transcript outcome type - categorizes final transcript state\n * Used in Metadata schema. Maps 1:1 with Datadog metrics:\n * - WITH_CONTENT \u2192 recog.client.websocket.transcript.final_with_content\n * - EMPTY \u2192 recog.client.websocket.transcript.final_empty\n * - NEVER_SENT \u2192 derived from sessions.streamed - final_with_content - final_empty\n * - ERROR_* \u2192 1:1 mapping to ErrorTypeV1 for error-caused outcomes\n */\nexport enum TranscriptOutcomeType {\n // Success outcomes\n WITH_CONTENT = 'with_content', // Non-empty transcript received\n EMPTY = 'empty', // Empty \"\" transcript received (user silent, no error)\n NEVER_SENT = 'never_sent', // Session streamed but no final transcript sent\n // Error outcomes - 1:1 mapping to ErrorTypeV1\n ERROR_AUTHENTICATION = 'error_authentication', // \u2192 ErrorTypeV1.AUTHENTICATION_ERROR\n ERROR_VALIDATION = 'error_validation', // \u2192 ErrorTypeV1.VALIDATION_ERROR\n ERROR_PROVIDER = 'error_provider', // \u2192 ErrorTypeV1.PROVIDER_ERROR\n ERROR_TIMEOUT = 'error_timeout', // \u2192 ErrorTypeV1.TIMEOUT_ERROR\n ERROR_QUOTA = 'error_quota', // \u2192 ErrorTypeV1.QUOTA_EXCEEDED (provider-level)\n ERROR_INTERNAL_QUOTA = 'error_internal_quota', // \u2192 ErrorTypeV1.INTERNAL_QUOTA_EXHAUSTED (conductor)\n ERROR_CONNECTION = 'error_connection', // \u2192 ErrorTypeV1.CONNECTION_ERROR\n ERROR_NO_AUDIO = 'error_no_audio', // \u2192 ErrorTypeV1.NO_AUDIO_ERROR\n ERROR_CIRCUIT_BREAKER = 'error_circuit_breaker', // \u2192 ErrorTypeV1.CIRCUIT_BREAKER_OPEN\n ERROR_UNKNOWN = 'error_unknown', // \u2192 ErrorTypeV1.UNKNOWN_ERROR\n}\n\n/**\n * Metadata result V1 - contains metadata, timing information, and ASR config\n * Sent when the provider connection closes to provide final timing metrics and config\n * In the long run game server should know it, rather than TV or client.\n */\nexport const MetadataResultSchemaV1 = z.object({\n type: z.literal(RecognitionResultTypeV1.METADATA),\n audioUtteranceId: z.string(), // audio utterance id for this metadata\n \n // Timing information\n recordingStartMs: z.number().optional(), // When recording started\n recordingEndMs: z.number().optional(), // When recording ended\n transcriptEndMs: z.number().optional(), // When final transcript was received\n socketCloseAtMs: z.number().optional(), // When socket/connection closed\n\n // Audio Quality Metrics\n duration: z.number().optional(), // Duration of the audio in milliseconds\n volume: z.number().optional(), // Volume of the audio in decibels\n accumulatedAudioTimeMs: z.number().optional(), // Accumulated audio time watermark in milliseconds. Total duration of all audio chunks sent. Optional.\n\n // Cost Information\n costInUSD: z.number().default(0).optional(), // Estimated cost in USD for this recognition session. Default: 0\n\n // ASR API Type\n apiType: z.nativeEnum(ASRApiType).optional(), // ASR API type from job (streaming vs file-based)\n\n // ASR configuration as JSON string (no type validation)\n asrConfig: z.string().optional(), // Stringified JSON of the ASR provider config\n\n // Raw ASR metadata payload as provided by the provider (stringified if needed)\n rawAsrMetadata: z.string().optional(),\n\n // Transcript outcome - categorizes the final transcript state\n transcriptOutcome: z.nativeEnum(TranscriptOutcomeType).optional(),\n\n // Audio metrics - embedded audio quality metrics (from AudioMetricsAccumulator)\n // Omit 'type' field since it's embedded in METADATA, not a separate message\n audioMetrics: z.object({\n valid: z.boolean(),\n audioBeginMs: z.number(),\n audioEndMs: z.number(),\n maxVolume: z.number(),\n minVolume: z.number(),\n avgVolume: z.number(),\n silenceRatio: z.number(),\n clippingRatio: z.number(),\n snrEstimate: z.number().nullable(),\n lastNonSilenceMs: z.number(),\n timestamp: z.string(),\n }).optional(),\n});\n\nexport type MetadataResultV1 = z.infer<typeof MetadataResultSchemaV1>;\n\n// ============================================================================\n// Error Schemas V1\n// ============================================================================\n\n/**\n * Error type enum V1 - categorizes different types of errors\n */\nexport enum ErrorTypeV1 {\n AUTHENTICATION_ERROR = 'authentication_error', // Authentication/authorization failures\n VALIDATION_ERROR = 'validation_error', // Invalid input or configuration\n PROVIDER_ERROR = 'provider_error', // Error from ASR provider (Deepgram, Google, etc.) Unlikely to happen with fall\n TIMEOUT_ERROR = 'timeout_error', // Request or operation timeout. Likely business logic did not handle timeout.\n QUOTA_EXCEEDED = 'quota_exceeded', // Quota or rate limit exceeded from provider (Deepgram, Google, etc.)\n INTERNAL_QUOTA_EXHAUSTED = 'internal_quota_exhausted', // Internal traffic control quota exhausted (conductor quota)\n CONNECTION_ERROR = 'connection_error', // Connection establishment or network error\n NO_AUDIO_ERROR = 'no_audio_error', // No audio activity / silence / empty audio blobs\n CIRCUIT_BREAKER_OPEN = 'circuit_breaker_open', // Provider unavailable due to circuit breaker being open\n UNKNOWN_ERROR = 'unknown_error', // Unknown or unexpected error\n}\n\n/**\n * Error result V1 - contains error message\n * In the long run game server should know it, rather than TV or client.\n */\nexport const ErrorResultSchemaV1 = z.object({\n type: z.literal(RecognitionResultTypeV1.ERROR),\n audioUtteranceId: z.string(), // audio utterance id for this error\n errorType: z.nativeEnum(ErrorTypeV1).optional(), // error type category\n message: z.string().optional(), // Error message\n code: z.union([z.string(), z.number()]).optional(), // Error code\n description: z.string().optional(), // Detailed description\n});\n\nexport type ErrorResultV1 = z.infer<typeof ErrorResultSchemaV1>;\n\n// ============================================================================\n// Client Control Message Schemas V1\n// Not supported in P0.\n// ============================================================================\n\n/**\n * Client control actions enum V1\n * Actions that can be sent from server to client to control the recognition stream\n * In the long run audio client(mic) should know it, rather than servers.\n */\nexport enum ClientControlActionV1 {\n READY_FOR_UPLOADING_RECORDING = 'ready_for_uploading_recording', // Server is ready to receive audio, client should start uploading recording (includes audioUtteranceId)\n STOP_RECORDING = 'stop_recording', // Stop the recording such as stop mic, asked by server (Stop) - Not supported in P0\n}\n\nconst ClientControlActionsV1 = z.nativeEnum(ClientControlActionV1);\n\n/**\n * Client control message V1 - SDK control messages that sent from client to server\n * Used to control stream behavior and signal connection readiness\n * - ready_for_uploading_recording: Sent immediately on connection with audioUtteranceId, signals client to start uploading audio\n * - stop_recording: Server requests client to stop recording (Not supported in P0)\n * Note: For P0, use WebSocket native close() method for stopping recording.\n */\nexport const ClientControlMessageSchemaV1 = z.object({\n type: z.literal(RecognitionResultTypeV1.CLIENT_CONTROL_MESSAGE), // Message type discriminator\n audioUtteranceId: z.string(), // audio utterance id for this control message\n action: ClientControlActionsV1, // The control action to perform\n});\n\nexport type ClientControlMessageV1 = z.infer<typeof ClientControlMessageSchemaV1>;\n\n// ============================================================================\n// Audio Metrics Schemas V1\n// ============================================================================\n\n/**\n * Audio metrics result V1 - contains audio quality metrics\n * Extracted from raw PCM audio without AI/ML, pure signal analysis\n * Used to detect mic issues (muted, low gain, clipping) and audio quality\n */\nexport const AudioMetricsResultSchemaV1 = z.object({\n type: z.literal(RecognitionResultTypeV1.AUDIO_METRICS),\n valid: z.boolean(), // false if unsupported format (stereo, wrong sample rate, etc.)\n audioBeginMs: z.number(), // audio time (ms) when this metrics window started\n audioEndMs: z.number(), // audio time (ms) when this metrics window ended\n maxVolume: z.number(), // peak amplitude (0.0-1.0 normalized)\n minVolume: z.number(), // minimum amplitude (0.0-1.0 normalized)\n avgVolume: z.number(), // RMS average amplitude\n silenceRatio: z.number(), // ratio of silence to total audio (0.0-1.0)\n clippingRatio: z.number(), // ratio of samples hitting \u00B11.0 ceiling (0.0-1.0)\n snrEstimate: z.number().nullable(), // signal-to-noise ratio in dB, null if can't compute\n lastNonSilenceMs: z.number(), // audio time (ms) of last non-silence sample (0 if no audio)\n timestamp: z.string(), // ISO timestamp when emitted\n isFinal: z.boolean().optional(), // true if this is the final metrics (STOP_RECORDING signal), false for streaming\n});\n\nexport type AudioMetricsResultV1 = z.infer<typeof AudioMetricsResultSchemaV1>;\n\n/**\n * Discriminated union of all recognition result types V1\n * In simple game integrationsit will send back to client. \n * In complicated game integrations(most of volley) they may be send to different services. \n * This is a logical abstraction that model all as streams, \n * regardless of using websocket or message queue, pull or push.\n * \n */\nexport const RecognitionResultSchemaV1 = z.discriminatedUnion('type', [\n // P0\n TranscriptionResultSchemaV1,\n MetadataResultSchemaV1,\n ErrorResultSchemaV1,\n // P1 - P2\n FunctionCallResultSchemaV1,\n ClientControlMessageSchemaV1,\n]);\n\nexport type RecognitionResultV1 = z.infer<typeof RecognitionResultSchemaV1>;\n\n", "/**\n * Provider Transcription Types\n * * * NOTE_TO_AI: DO NOT CHANGE THIS UNLESS EXPLICITLY ASKED. Always ask before making any changes.\n * Types and schemas for real-time transcription messages from ASR providers (Deepgram, Google, etc.)\n * Used in 2-way streaming orchestration to handle provider responses.\n * Since their schema is normally (1) phrase based (2) contains both final and interim results,\n */\n\nimport { z } from 'zod';\nimport { RecognitionProvider, RecognitionModel, ASRApiType } from './provider.types.js';\nimport { AudioFormat, SampleRate, Language } from './audio.types.js';\nimport { ErrorTypeV1 } from './recognition-result-v1.types.js';\n\n// ============================================================================\n// Request/Response Types (Batch Processing)\n// ============================================================================\n\nexport interface BatchRecognitionRequest {\n utteranceId: string;\n audioData: Buffer | string;\n format: AudioFormat;\n sampleRate?: SampleRate;\n channels?: number;\n language?: Language;\n model?: RecognitionModel;\n callback?: string;\n}\n\n// ============================================================================\n// Real-Time Streaming Schemas (Zod)\n// ============================================================================\n\n/**\n * Message type discriminator for provider transcription messages\n */\nexport enum ProviderMessageType {\n TRANSCRIPT = 'Transcript',\n VAD_END_SIGNAL = 'UtteranceEnd',\n METADATA = 'Metadata',\n ERROR = 'Error',\n TIMER = 'Timer',\n RAW = 'Raw'\n}\n\n/**\n * Schema for recognition alternative with transcript and confidence\n */\nexport const RecognitionAlternativeSchema = z.object({\n /**\n * The transcribed text\n * @example \"hello world\"\n */\n transcript: z.string(),\n \n /**\n * Confidence score (0-1)\n * Note: Google only provides confidence for final results\n * @example 0.95\n */\n confidence: z.number().min(0).max(1),\n});\n\nexport type RecognitionAlternative = z.infer<typeof RecognitionAlternativeSchema>;\n\n/**\n * Schema for recognition channel containing multiple alternatives\n */\nexport const RecognitionChannelSchema = z.object({\n /**\n * Array of transcription alternatives, ordered by confidence\n */\n alternatives: z.array(RecognitionAlternativeSchema),\n});\n\nexport type RecognitionChannel = z.infer<typeof RecognitionChannelSchema>;\n\n/**\n * Schema for model information\n */\nexport const ModelInfoSchema = z.object({\n name: z.string(),\n canonical_name: z.string(),\n architecture: z.string(),\n languages: z.array(z.string()).optional(),\n version: z.string(),\n uuid: z.string(),\n batch: z.boolean(),\n streaming: z.boolean(),\n});\n\nexport type ModelInfo = z.infer<typeof ModelInfoSchema>;\n\n// ============================================================================\n// Recognition Message Schemas (Discriminated Union)\n// ============================================================================\n\n/**\n * Transcript message - contains real-time transcription data\n *\n * Sent by providers (Google, Deepgram) during active transcription.\n * Can be interim (partial, may change) or final (complete, won't change).\n * Will need to consider collectively (concatenated) transcription from phrases\n */\nexport const TranscriptMessageSchema = z.object({\n type: z.literal(ProviderMessageType.TRANSCRIPT),\n\n /**\n * Provider that generated this message\n * @example \"deepgram\"\n */\n provider: z.nativeEnum(RecognitionProvider).optional(),\n\n /**\n * The transcribed text (extracted from first alternative)\n * @example \"hello world\"\n */\n text: z.string(),\n\n /**\n * Confidence score for the transcript (0-1)\n * @example 0.95\n */\n confidence: z.number().min(0).max(1),\n\n /**\n * Voice start time identified by ASR (in milliseconds from stream start)\n * @example 500 (voice starts at 0.5 seconds)\n */\n voiceStart: z.number().optional(),\n\n /**\n * Voice end time identified by ASR (in milliseconds from stream start)\n * @example 2000 (voice ends at 2.0 seconds)\n */\n voiceEnd: z.number().optional(),\n\n /**\n * Voice duration identified by ASR (in milliseconds)\n * @example 1500 (1.5 seconds of speech, calculated as voiceEnd - voiceStart)\n */\n voiceDuration: z.number().optional(),\n\n /**\n * Server timestamp when this transcript was received (in milliseconds)\n * @example 1704096005500\n */\n receivedAtMs: z.number().optional(),\n\n /**\n * Accumulated audio time watermark (in milliseconds)\n * Total duration of all audio chunks sent to this provider session\n * @example 2500 (2.5 seconds of audio has been sent)\n */\n accumulatedAudioTimeMs: z.number().optional(),\n\n /**\n * Whether this transcript is finalized (won't change)\n * @example true\n */\n is_final: z.boolean(),\n\n /**\n * Accumulated confirmed transcript (all finalized text received so far)\n * Contains only the completed/finalized portions\n * @example \"hello world how are you\"\n */\n confirmedTranscript: z.string().optional(),\n\n /**\n * New pending transcript (current interim text since last confirmation)\n * Contains only the unconfirmed interim text\n * @example \"I'm doing\"\n */\n newPendingTranscript: z.string().optional(),\n\n /**\n * Whether this is a fallback transcript (forced due to timeout)\n * True when provider didn't send is_final=true within expected timeframe\n * Used for monitoring/debugging fallback scenarios\n * @example true\n * @default false\n */\n is_fallback: z.boolean().optional(),\n});\n\nexport type TranscriptMessage = z.infer<typeof TranscriptMessageSchema>;\n\n/**\n * VAD End Signal - Voice Activity Detection detected end of speech\n *\n * Sent by Deepgram when voice activity detection determines\n * the speaker has finished speaking (after silence threshold).\n */\nexport const VADEndSignalSchema = z.object({\n type: z.literal(ProviderMessageType.VAD_END_SIGNAL),\n\n /**\n * Provider that generated this message\n */\n provider: z.nativeEnum(RecognitionProvider).optional(),\n\n /**\n * Time when the last word ended (in milliseconds)\n * @example 2500 (2.5 seconds)\n */\n last_word_end: z.number().optional(),\n});\n\nexport type VADEndSignal = z.infer<typeof VADEndSignalSchema>;\n\n/**\n * Metadata message - connection/session metadata\n * \n * Sent by providers at connection start with session information.\n * - asrConfig: The ASR configuration we sent to the provider (all providers)\n * - data: Raw metadata the provider sends back (only Deepgram, optional for others)\n */\nexport const MetadataMessageSchema = z.object({\n type: z.literal(ProviderMessageType.METADATA),\n provider: z.nativeEnum(RecognitionProvider),\n asrConfig: z.string().optional(), // ASR config we sent to provider\n data: z.string().optional(), // Raw metadata from provider (Deepgram only)\n});\n\nexport type MetadataMessage = z.infer<typeof MetadataMessageSchema>;\n\n/**\n * Error message - errors from provider\n *\n * Sent when provider encounters an error during transcription.\n */\nexport const ErrorMessageSchema = z.object({\n type: z.literal(ProviderMessageType.ERROR),\n\n /**\n * Provider that generated this message\n */\n provider: z.nativeEnum(RecognitionProvider).optional(),\n\n /**\n * Categorized error type\n * Defaults to UNKNOWN_ERROR if not specified by provider\n * @example ErrorTypeV1.PROVIDER_ERROR\n */\n errorType: z.nativeEnum(ErrorTypeV1),\n\n /**\n * Error message\n * @example \"Stream quota exceeded\"\n */\n provider_error: z.string(),\n\n /**\n * Provider-specific error code\n * @example \"QUOTA_EXCEEDED\"\n */\n provider_error_code: z.union([z.string(), z.number()]).optional(),\n\n /**\n * Additional error description\n */\n description: z.string().optional(),\n\n /**\n * Whether the error can be immediately recovered by retrying\n * true = transient error, retry may succeed (e.g., UNAVAILABLE, INTERNAL)\n * false = permanent error, retry will fail (e.g., INVALID_ARGUMENT, PERMISSION_DENIED)\n * @example true\n */\n is_immediately_recoverable: z.boolean().optional(),\n});\n\nexport type ErrorMessage = z.infer<typeof ErrorMessageSchema>;\n\n/**\n * Timer message - timing information for recording and transcription\n * \n * Sent at the end of recording and/or end of transcript to provide timing metrics.\n * Since recording end and transcript end may occur in different order, this message\n * may be sent twice - once when recording closes, once when final transcript arrives.\n */\nexport const TimerSchema = z.object({\n type: z.literal(ProviderMessageType.TIMER),\n \n /**\n * Provider that generated this message\n */\n provider: z.nativeEnum(RecognitionProvider).optional(),\n \n /**\n * Timestamp when recording started (in milliseconds)\n * @example 1704096000000\n */\n recordingStartMs: z.number().optional(),\n \n /**\n * Timestamp when recording ended (in milliseconds)\n * @example 1704096005000\n */\n recordingEndMs: z.number().optional(),\n \n /**\n * Timestamp when final transcript was received (in milliseconds)\n * @example 1704096005500\n */\n transcriptEndMs: z.number().optional(),\n \n /**\n * Timestamp when socket/grpc connection was closed (in milliseconds)\n * @example 1704096006000\n */\n socketCloseAtMs: z.number().optional(),\n \n /**\n * Accumulated audio time watermark (in milliseconds)\n * Total duration of all audio chunks sent to this provider session\n * @example 2500 (2.5 seconds of audio has been sent)\n */\n accumulatedAudioTimeMs: z.number().optional(),\n\n /**\n * Estimated cost in USD for this session\n * Calculated by the job based on audio duration and provider pricing\n * @example 0.0025 (quarter of a cent)\n */\n costInUSD: z.number().optional().default(0),\n\n /**\n * ASR API type from the job\n * - STREAMING: Real-time streaming APIs (Deepgram, AssemblyAI, Google)\n * - FILE_BASED: File upload/batch APIs (OpenAI Batch, Gemini Batch)\n * @example ASRApiType.STREAMING\n */\n apiType: z.nativeEnum(ASRApiType).optional(),\n});\n\nexport type TimerMessage = z.infer<typeof TimerSchema>;\n\n/** Raw message content from provider for debugging */\nexport const RawMessageSchema = z.object({\n type: z.literal(ProviderMessageType.RAW),\n provider: z.string(),\n data: z.any(),\n});\nexport type RawMessage = z.infer<typeof RawMessageSchema>;\n\n/**\n * Discriminated union of all recognition message types\n * \n * TypeScript automatically narrows types based on the 'type' discriminator field.\n * \n * @example\n * ```typescript\n * function handleMessage(message: ProviderTranscriptionMessage) {\n * if (message.type === ProviderMessageType.TRANSCRIPT) {\n * // TypeScript knows this is TranscriptMessage\n * console.log(message.channel.alternatives);\n * } else if (message.type === ProviderMessageType.ERROR) {\n * // TypeScript knows this is ErrorMessage\n * console.log(message.provider_error);\n * }\n * }\n * ```\n */\nexport const ProviderTranscriptionMessageSchema = z.discriminatedUnion('type', [\n TranscriptMessageSchema,\n VADEndSignalSchema,\n MetadataMessageSchema,\n ErrorMessageSchema,\n TimerSchema,\n RawMessageSchema,\n]);\n\nexport type ProviderTranscriptionMessage = z.infer<typeof ProviderTranscriptionMessageSchema>;\n\nexport const RecognitionMessageSchema = ProviderTranscriptionMessageSchema;\nexport type RecognitionMessage = ProviderTranscriptionMessage;\n\n", "/**\n * Error Exception Types\n *\n * Defines structured exception types for each ErrorTypeV1 category.\n * Each exception type has metadata about whether it's immediately available\n * (can be shown to user right away vs needs investigation/retry).\n */\n\nimport { z } from 'zod';\nimport { ErrorTypeV1 } from './recognition-result-v1.types.js';\nimport { RecognitionProvider } from './provider.types.js';\n\n// ============================================================================\n// Base Exception Structure\n// ============================================================================\n\n/**\n * Base exception structure for all recognition errors\n * All specific exception types extend this\n */\nexport const BaseRecognitionExceptionSchema = z.object({\n /** Error type category */\n errorType: z.nativeEnum(ErrorTypeV1),\n\n /** Error message for logging/debugging */\n message: z.string(),\n\n /** Optional error code from provider or system */\n code: z.union([z.string(), z.number()]).optional(),\n\n /** Detailed description for debugging */\n description: z.string().optional(),\n\n /**\n * Whether this error can be immediately shown to user.\n * true = Show to user immediately (clear actionable error)\n * false = Log for investigation, show generic error to user\n */\n isImmediatelyAvailable: z.boolean(),\n\n /** Recognition provider that generated this error */\n provider: z.nativeEnum(RecognitionProvider).optional(),\n\n /** Audio utterance ID this error relates to */\n audioUtteranceId: z.string().optional(),\n\n /** Timestamp when error occurred */\n timestamp: z.number().optional(),\n});\n\nexport type BaseRecognitionException = z.infer<typeof BaseRecognitionExceptionSchema>;\n\n// ============================================================================\n// Specific Exception Types\n// ============================================================================\n\n/**\n * Authentication/Authorization Error\n * isImmediatelyAvailable: false\n * These are system configuration issues, not user-facing\n */\nexport const AuthenticationExceptionSchema = BaseRecognitionExceptionSchema.extend({\n errorType: z.literal(ErrorTypeV1.AUTHENTICATION_ERROR),\n isImmediatelyAvailable: z.literal(false), // System issue, not user-facing\n\n /** Which service failed authentication (e.g., 'deepgram', 'google') */\n service: z.string().optional(),\n\n /** Authentication method that failed (e.g., 'api_key', 'oauth') */\n authMethod: z.string().optional(),\n});\n\nexport type AuthenticationException = z.infer<typeof AuthenticationExceptionSchema>;\n\n/**\n * Validation Error\n * isImmediatelyAvailable: true\n * User provided invalid input - can show them what's wrong\n */\nexport const ValidationExceptionSchema = BaseRecognitionExceptionSchema.extend({\n errorType: z.literal(ErrorTypeV1.VALIDATION_ERROR),\n isImmediatelyAvailable: z.literal(true), // Can show to user\n\n /** Field name that failed validation */\n field: z.string().optional(),\n\n /** Expected value format/type */\n expected: z.string().optional(),\n\n /** Actual value received (sanitized) */\n received: z.string().optional(),\n});\n\nexport type ValidationException = z.infer<typeof ValidationExceptionSchema>;\n\n/**\n * Provider Error\n * isImmediatelyAvailable: false\n * Error from ASR provider - usually transient or needs investigation\n */\nexport const ProviderExceptionSchema = BaseRecognitionExceptionSchema.extend({\n errorType: z.literal(ErrorTypeV1.PROVIDER_ERROR),\n isImmediatelyAvailable: z.literal(false), // Provider issue, not user-facing\n\n /** Provider name (e.g., 'deepgram', 'assemblyai', 'google') */\n provider: z.string().optional(),\n\n /** Provider-specific error code */\n providerErrorCode: z.union([z.string(), z.number()]).optional(),\n\n /** Whether this provider error might be transient (should retry) */\n isTransient: z.boolean().optional(),\n});\n\nexport type ProviderException = z.infer<typeof ProviderExceptionSchema>;\n\n/**\n * Timeout Error\n * isImmediatelyAvailable: true\n * Request took too long - user should try again\n */\nexport const TimeoutExceptionSchema = BaseRecognitionExceptionSchema.extend({\n errorType: z.literal(ErrorTypeV1.TIMEOUT_ERROR),\n isImmediatelyAvailable: z.literal(true), // Can tell user to try again\n\n /** Timeout duration in milliseconds */\n timeoutMs: z.number().optional(),\n\n /** What operation timed out (e.g., 'connection', 'transcription', 'response') */\n operation: z.string().optional(),\n});\n\nexport type TimeoutException = z.infer<typeof TimeoutExceptionSchema>;\n\n/**\n * Quota Exceeded Error\n * isImmediatelyAvailable: true\n * Rate limit or quota exceeded - user should wait\n */\nexport const QuotaExceededExceptionSchema = BaseRecognitionExceptionSchema.extend({\n errorType: z.literal(ErrorTypeV1.QUOTA_EXCEEDED),\n isImmediatelyAvailable: z.literal(true), // Can tell user to wait\n\n /** Quota type that was exceeded (e.g., 'rate_limit', 'daily_quota', 'concurrent_requests') */\n quotaType: z.string().optional(),\n\n /** When quota resets (Unix timestamp in ms) */\n resetAt: z.number().optional(),\n\n /** How long to wait in seconds before retry */\n retryAfterSeconds: z.number().optional(),\n});\n\nexport type QuotaExceededException = z.infer<typeof QuotaExceededExceptionSchema>;\n\n/**\n * Connection Error\n * isImmediatelyAvailable: true\n * Connection establishment or network failure - user should check network or retry\n */\nexport const ConnectionExceptionSchema = BaseRecognitionExceptionSchema.extend({\n errorType: z.literal(ErrorTypeV1.CONNECTION_ERROR),\n isImmediatelyAvailable: z.literal(true), // Can tell user about network issues\n\n /** Number of connection attempts made */\n attempts: z.number().optional(),\n\n /** URL that failed to connect */\n url: z.string().optional(),\n\n /** Underlying error message */\n underlyingError: z.string().optional(),\n});\n\nexport type ConnectionException = z.infer<typeof ConnectionExceptionSchema>;\n\n/**\n * Circuit Breaker Open Error\n * isImmediatelyAvailable: true\n * Provider is temporarily unavailable due to circuit breaker - system is protecting itself\n */\nexport const CircuitBreakerExceptionSchema = BaseRecognitionExceptionSchema.extend({\n errorType: z.literal(ErrorTypeV1.CIRCUIT_BREAKER_OPEN),\n isImmediatelyAvailable: z.literal(true), // Can tell user provider is temporarily unavailable\n\n /** Provider that is unavailable */\n provider: z.nativeEnum(RecognitionProvider).optional(),\n\n /** Model that is unavailable */\n model: z.string().optional(),\n});\n\nexport type CircuitBreakerException = z.infer<typeof CircuitBreakerExceptionSchema>;\n\n/**\n * Unknown Error\n * isImmediatelyAvailable: false\n * Unexpected error - needs investigation\n */\nexport const UnknownExceptionSchema = BaseRecognitionExceptionSchema.extend({\n errorType: z.literal(ErrorTypeV1.UNKNOWN_ERROR),\n isImmediatelyAvailable: z.literal(false), // Unknown cause, not user-facing\n\n /** Stack trace for debugging (sanitized) */\n stack: z.string().optional(),\n\n /** Additional context for debugging */\n context: z.record(z.unknown()).optional(),\n});\n\nexport type UnknownException = z.infer<typeof UnknownExceptionSchema>;\n\n// ============================================================================\n// Discriminated Union of All Exception Types\n// ============================================================================\n\n/**\n * Discriminated union of all exception types\n * Use this for type-safe error handling\n */\nexport const RecognitionExceptionSchema = z.discriminatedUnion('errorType', [\n AuthenticationExceptionSchema,\n ValidationExceptionSchema,\n ProviderExceptionSchema,\n TimeoutExceptionSchema,\n QuotaExceededExceptionSchema,\n ConnectionExceptionSchema,\n CircuitBreakerExceptionSchema,\n UnknownExceptionSchema,\n]);\n\nexport type RecognitionException = z.infer<typeof RecognitionExceptionSchema>;\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Check if an exception should be shown to the user immediately\n */\nexport function isExceptionImmediatelyAvailable(exception: RecognitionException): boolean {\n return exception.isImmediatelyAvailable;\n}\n\n/**\n * Get user-friendly error message for exceptions\n */\nexport function getUserFriendlyMessage(exception: RecognitionException): string {\n if (!exception.isImmediatelyAvailable) {\n return 'An error occurred. Please try again or contact support.';\n }\n\n // At this point, TypeScript narrows to only exceptions with isImmediatelyAvailable: true\n // which are: ValidationException, TimeoutException, QuotaExceededException, ConnectionException, CircuitBreakerException\n switch (exception.errorType) {\n case ErrorTypeV1.VALIDATION_ERROR:\n return exception.message || 'Invalid input. Please check your request.';\n\n case ErrorTypeV1.TIMEOUT_ERROR:\n return exception.message || 'Request timed out. Please try again.';\n\n case ErrorTypeV1.QUOTA_EXCEEDED:\n if (exception.retryAfterSeconds) {\n return `Rate limit exceeded. Please try again in ${exception.retryAfterSeconds} seconds.`;\n }\n return exception.message || 'Rate limit exceeded. Please try again later.';\n\n case ErrorTypeV1.CONNECTION_ERROR:\n return exception.message || 'Connection failed. Please check your network and try again.';\n\n case ErrorTypeV1.CIRCUIT_BREAKER_OPEN:\n return exception.message || 'Service temporarily unavailable. Please try again.';\n }\n}\n", "/**\n * Recognition Context Types V1\n * NOTE_TO_AI: DO NOT CHANGE THIS UNLESS EXPLICITLY ASKED. Always ask before making any changes.\n * Types and schemas for recognition context data\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Recognition Context Message Types V1\n// ============================================================================\n\n/**\n * Message type discriminator for recognition context V1\n */\nexport enum RecognitionContextTypeV1 {\n GAME_CONTEXT = 'GameContext',\n CONTROL_SIGNAL = 'ControlSignal',\n ASR_REQUEST = 'ASRRequest',\n}\n\n/**\n * Control signal types for recognition V1\n */\nexport enum ControlSignalTypeV1 {\n START_RECORDING = 'start_recording',\n STOP_RECORDING = 'stop_recording',\n}\n\n// ============================================================================\n// Game Context Schemas V1\n// ============================================================================\n\n/**\n * SlotMap - A strongly typed map from slot names to lists of values\n * Used for entity extraction and slot filling in voice interactions\n */\nexport const SlotMapSchema = z.record(z.string(), z.array(z.string()));\nexport type SlotMap = z.infer<typeof SlotMapSchema>;\n\n/**\n * Game context V1 - contains game state information\n */\nexport const GameContextSchemaV1 = z.object({\n type: z.literal(RecognitionContextTypeV1.GAME_CONTEXT),\n gameId: z.string(), // Unique identifier for the game\n gamePhase: z.string(), // Current phase of the game\n\n // Prompt fields for different processing stages\n promptSTT: z.string().optional(), // Speech-to-Text: Keywords/phrases to optimize ASR (e.g., for Deepgram keywords)\n promptSTF: z.string().optional(), // Speech-to-Function: Direct speech to function mapping instructions\n promptTTF: z.string().optional(), // Text-to-Function: Text to function mapping instructions after transcription\n\n // Slot map for entity extraction\n slotMap: SlotMapSchema.optional(), // Map of slot names to possible values to enhance prompting and keyword matching.\n // Example: {'song_title': ['one time'], 'artists': ['justin bieber']}\n // Provider-specific behavior:\n // - Deepgram Nova3: Automatically converts map values to phrases in Search parameters\n // - Prompt-based LLMs: Acts as key->value replacement for entity extraction\n});\n\nexport type GameContextV1 = z.infer<typeof GameContextSchemaV1>;\n\n// ============================================================================\n// Control Signal Schemas V1\n// ============================================================================\n\n/**\n * Control signal V1 - contains control commands for the recognition service\n */\nexport const ControlSignalSchemaV1 = z.object({\n type: z.literal(RecognitionContextTypeV1.CONTROL_SIGNAL),\n signal: z.nativeEnum(ControlSignalTypeV1),\n});\n\nexport type ControlSignalV1 = z.infer<typeof ControlSignalSchemaV1>;\n\n// ============================================================================\n// ASR Request Schemas V1\n// ============================================================================\n\n/**\n * Debug command options for ASR Request\n * FOR DEBUG/TESTING PURPOSES ONLY\n *\n * These flags allow overriding default service behaviors for debugging,\n * testing, and development purposes. Should not be used in production.\n */\nexport const RequestDebugCommandSchema = z.object({\n // Enable verbose debug logging for this request\n enableDebugLog: z.boolean().optional().default(false),\n\n // Enable audio storage to database/filesystem for debugging\n enableAudioStorage: z.boolean().optional().default(true),\n\n // Enable validation that song quiz session ID exists before processing\n enableSongQuizSessionIdCheck: z.boolean().optional().default(true),\n\n // Enable experimental pilot models for testing new features\n enablePilotModels: z.boolean().optional().default(false),\n}).optional();\n\nexport type RequestDebugCommand = z.infer<typeof RequestDebugCommandSchema>;\n\n/**\n * Fallback ASR configuration - config for fallback providers\n * All fields except provider are optional - inherits from primary if not specified\n * Does not support nested fallbacks to avoid infinite recursion\n */\nexport const FallbackASRConfigSchema = z.object({\n // Required - the fallback provider to use\n provider: z.string(),\n\n // Optional - inherits from primary if not specified\n model: z.string().optional(),\n language: z.string().optional(),\n sampleRate: z.number().optional(),\n encoding: z.number().optional(),\n\n // Recognition options - optional, inherits from primary\n interimResults: z.boolean().optional(),\n useContext: z.boolean().optional(),\n finalTranscriptStability: z.string().optional(),\n});\n\nexport type FallbackASRConfig = z.infer<typeof FallbackASRConfigSchema>;\n\n/**\n * ASR Request V1 - contains complete ASR setup information\n * Sent once at connection start to configure the session\n */\nexport const ASRRequestSchemaV1 = z.object({\n type: z.literal(RecognitionContextTypeV1.ASR_REQUEST),\n\n // Session identification\n audioUtteranceId: z.string().optional(), // Optional utterance ID (prefer query param)\n\n // ASR configuration\n provider: z.string(),\n model: z.string().optional(),\n language: z.string(),\n sampleRate: z.number(),\n encoding: z.number(),\n\n // Recognition options\n interimResults: z.boolean().optional().default(false), // Enable interim/partial results\n useContext: z.boolean().optional().default(false), // If true, requires GameContext before session creation\n\n // Final transcript stability mode (timeout for fallback final transcript)\n finalTranscriptStability: z.string().optional(), // Stability mode: 'aggressive' | 'balanced' | 'conservative'\n\n // Traffic control priority (affects quota slot allocation)\n // 'high' = can use all quota slots (reserved for critical games like song-quiz)\n // 'low' = limited to non-reserved slots (default for most requests)\n priority: z.enum(['low', 'high']).optional().default('low'),\n\n // Fallback providers - tried in order if primary provider is unavailable (circuit breaker open)\n fallbackModels: z.array(FallbackASRConfigSchema).optional(),\n\n // Debug options (FOR DEBUG/TESTING ONLY - not for production use)\n debugCommand: RequestDebugCommandSchema,\n});\n\nexport type ASRRequestV1 = z.infer<typeof ASRRequestSchemaV1>;\n\n// ============================================================================\n// Recognition Context Union V1\n// ============================================================================\n\n/**\n * Discriminated union of all recognition context types V1\n * This union pattern allows for future context types to be added\n */\nexport const RecognitionContextSchemaV1 = z.discriminatedUnion('type', [\n GameContextSchemaV1,\n ControlSignalSchemaV1,\n ASRRequestSchemaV1,\n]);\n\nexport type RecognitionContextV1 = z.infer<typeof RecognitionContextSchemaV1>;\n\n", "/**\n * Recognition Query Types\n * Types for querying recognition results\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Recognition User Info\n// ============================================================================\n\n/**\n * User information for recognition queries\n * Optional user authentication/identification for personalization optimization andsecurity purposes\n * May be required in some games for security reasons\n */\nexport const RecognitionGameInfoSchema = z.object({\n userId: z.string().optional(), // User identifier\n gameSessionId: z.string().optional(), // Volly session identifier . Called \"sessionId\" in Platform and most games.\n deviceId: z.string().optional(), // Device identifier\n accountId: z.string().optional(), // Account identifier\n gameId: z.string().optional(), // Game identifier\n gamePhase: z.string().optional(), // Game phase or scene. A string that describes the current state of the game for client team to optimize specific turn.\n questionAskedId: z.string().optional(), // Question asked identifier for tracking Q&A sessions (matches audio-labeling-api schema)\n /** @deprecated Use questionAskedId instead. Kept for backward compatibility during migration. */\n questionAnswerId: z.string().optional(), // Deprecated: use questionAskedId\n platform: z.string().optional(), // Platform for audio recording device (use the definition of platform teams)\n});\n\nexport type RecognitionGameInfo = z.infer<typeof RecognitionGameInfoSchema>;\n\n// ============================================================================\n// Recognition Query Metadata\n// ============================================================================\n\n/**\n * Metadata for recognition query requests\n * Contains the utterance ID and optional game information\n */\nexport const RecognitionQueryMetadataSchema = z.object({\n audioUtteranceId: z.string(), // Audio utterance ID to query\n recognitionGameInfo: RecognitionGameInfoSchema.optional(), // Optional game info for security\n});\n\nexport type RecognitionQueryMetadata = z.infer<typeof RecognitionQueryMetadataSchema>;\n\n// ============================================================================\n// Utterance Resource Response Types\n// ============================================================================\n\n/**\n * Response schema for GET /v1/resources/utterances/:audioUtteranceId\n * Returns list of recognition results for the utterance\n *\n * Note: This uses a generic z.array(z.any()) because the actual result types\n * (RecognitionResult) are version-specific and defined in recognition-result-vX.types.ts\n * Services should validate results using their own version-specific schemas\n */\nexport const UtteranceResourceResponseSchema = z.object({\n audioUtteranceId: z.string(), // Audio utterance ID\n results: z.array(z.any()), // Array of RecognitionResult (version-specific)\n});\n\nexport type UtteranceResourceResponse = z.infer<typeof UtteranceResourceResponseSchema>;\n", "/**\n * Audio Types\n * \n * Types for audio metadata, formats, and processing.\n * * NOTE_TO_AI: DO NOT CHANGE THIS UNLESS EXPLICITLY ASKED. Always ask before making any changes.\n */\n\n// ============================================================================\n// Audio Metadata\n// ============================================================================\n\nexport interface AudioMetadata {\n duration: number;\n sampleRate: number;\n channels: number;\n format: string;\n bitrate?: number;\n}\n\n/**\n * Supported audio formats\n */\nexport enum AudioFormat {\n WAV = 1,\n MP3 = 2,\n FLAC = 3,\n M4A = 4,\n OPUS = 5,\n PCM = 6\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace AudioFormat {\n // Lookup maps for efficient conversion\n const ID_TO_ENUM: ReadonlyMap<number, AudioFormat> = new Map([\n [1, AudioFormat.WAV],\n [2, AudioFormat.MP3],\n [3, AudioFormat.FLAC],\n [4, AudioFormat.M4A],\n [5, AudioFormat.OPUS],\n [6, AudioFormat.PCM],\n ]);\n\n const NAME_TO_ENUM: ReadonlyMap<string, AudioFormat> = new Map([\n ['WAV', AudioFormat.WAV],\n ['MP3', AudioFormat.MP3],\n ['FLAC', AudioFormat.FLAC],\n ['M4A', AudioFormat.M4A],\n ['OPUS', AudioFormat.OPUS],\n ['PCM', AudioFormat.PCM],\n ]);\n\n const ENUM_TO_NAME: ReadonlyMap<AudioFormat, string> = new Map([\n [AudioFormat.WAV, 'WAV'],\n [AudioFormat.MP3, 'MP3'],\n [AudioFormat.FLAC, 'FLAC'],\n [AudioFormat.M4A, 'M4A'],\n [AudioFormat.OPUS, 'OPUS'],\n [AudioFormat.PCM, 'PCM'],\n ]);\n\n /**\n * Convert numeric ID to AudioFormat enum\n * @param id - Numeric format identifier (1-6)\n * @returns AudioFormat enum value or undefined if invalid\n */\n export function fromId(id: number): AudioFormat | undefined {\n return ID_TO_ENUM.get(id);\n }\n\n /**\n * Convert string name to AudioFormat enum\n * @param nameStr - String name like \"wav\", \"mp3\", \"WAV\", \"MP3\", etc. (case insensitive)\n * @returns AudioFormat enum value or undefined if invalid\n */\n export function fromName(nameStr: string): AudioFormat | undefined {\n return NAME_TO_ENUM.get(nameStr.toUpperCase());\n }\n\n /**\n * Convert AudioFormat enum to numeric ID\n * @param format - AudioFormat enum value\n * @returns Numeric ID (1-6)\n */\n export function toId(format: AudioFormat): number {\n return format as number;\n }\n\n /**\n * Convert AudioFormat enum to string name\n * @param format - AudioFormat enum value\n * @returns String name like \"WAV\", \"MP3\", etc.\n */\n export function toName(format: AudioFormat): string {\n return ENUM_TO_NAME.get(format) ?? AudioFormat[format];\n }\n\n /**\n * Check if a numeric ID is a valid format\n * @param id - Numeric identifier to validate\n * @returns true if valid format ID\n */\n export function isIdValid(id: number): boolean {\n return ID_TO_ENUM.has(id);\n }\n\n /**\n * Check if a string name is a valid format\n * @param nameStr - String name to validate\n * @returns true if valid format name\n */\n export function isNameValid(nameStr: string): boolean {\n return NAME_TO_ENUM.has(nameStr.toUpperCase());\n }\n}\n\n/**\n * Audio encoding types\n */\nexport enum AudioEncoding {\n ENCODING_UNSPECIFIED = 0,\n LINEAR16 = 1,\n OGG_OPUS = 2,\n FLAC = 3,\n MULAW = 4,\n ALAW = 5\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace AudioEncoding {\n // Lookup maps for efficient conversion\n const ID_TO_ENUM: ReadonlyMap<number, AudioEncoding> = new Map([\n [0, AudioEncoding.ENCODING_UNSPECIFIED],\n [1, AudioEncoding.LINEAR16],\n [2, AudioEncoding.OGG_OPUS],\n [3, AudioEncoding.FLAC],\n [4, AudioEncoding.MULAW],\n [5, AudioEncoding.ALAW],\n ]);\n\n const NAME_TO_ENUM: ReadonlyMap<string, AudioEncoding> = new Map([\n ['ENCODING_UNSPECIFIED', AudioEncoding.ENCODING_UNSPECIFIED],\n ['LINEAR16', AudioEncoding.LINEAR16],\n ['OGG_OPUS', AudioEncoding.OGG_OPUS],\n ['FLAC', AudioEncoding.FLAC],\n ['MULAW', AudioEncoding.MULAW],\n ['ALAW', AudioEncoding.ALAW],\n ]);\n\n const ENUM_TO_NAME: ReadonlyMap<AudioEncoding, string> = new Map([\n [AudioEncoding.ENCODING_UNSPECIFIED, 'ENCODING_UNSPECIFIED'],\n [AudioEncoding.LINEAR16, 'LINEAR16'],\n [AudioEncoding.OGG_OPUS, 'OGG_OPUS'],\n [AudioEncoding.FLAC, 'FLAC'],\n [AudioEncoding.MULAW, 'MULAW'],\n [AudioEncoding.ALAW, 'ALAW'],\n ]);\n\n /**\n * Convert numeric ID to AudioEncoding enum\n * @param id - Numeric encoding identifier (0-5)\n * @returns AudioEncoding enum value or undefined if invalid\n */\n export function fromId(id: number): AudioEncoding | undefined {\n return ID_TO_ENUM.get(id);\n }\n\n /**\n * Convert string name to AudioEncoding enum\n * @param nameStr - String name like \"linear16\", \"LINEAR16\", \"ogg_opus\", \"OGG_OPUS\", etc. (case insensitive)\n * @returns AudioEncoding enum value or undefined if invalid\n */\n export function fromName(nameStr: string): AudioEncoding | undefined {\n return NAME_TO_ENUM.get(nameStr.toUpperCase());\n }\n\n /**\n * Convert AudioEncoding enum to numeric ID\n * @param encoding - AudioEncoding enum value\n * @returns Numeric ID (0-5)\n */\n export function toId(encoding: AudioEncoding): number {\n return encoding as number;\n }\n\n /**\n * Convert AudioEncoding enum to string name\n * @param encoding - AudioEncoding enum value\n * @returns String name like \"LINEAR16\", \"MULAW\", etc.\n */\n export function toName(encoding: AudioEncoding): string {\n return ENUM_TO_NAME.get(encoding) ?? AudioEncoding[encoding];\n }\n\n /**\n * Check if a numeric ID is a valid encoding\n * @param id - Numeric identifier to validate\n * @returns true if valid encoding ID\n */\n export function isIdValid(id: number): boolean {\n return ID_TO_ENUM.has(id);\n }\n\n /**\n * Check if a string name is a valid encoding\n * @param nameStr - String name to validate\n * @returns true if valid encoding name\n */\n export function isNameValid(nameStr: string): boolean {\n return NAME_TO_ENUM.has(nameStr.toUpperCase());\n }\n}\n\n/**\n * Recording metadata from audio source (microphone/device)\n * \n * Contains only hardware-level parameters that are determined by\n * the physical recording device, not configurable by application.\n * \n * Future: Add validation to ensure these match provider requirements\n */\nexport interface RecordingMetadata {\n /** Audio sample rate in Hz */\n sampleRate: SampleRate;\n \n /** Audio encoding format */\n encoding: AudioEncoding;\n}\n\n/**\n * Common sample rates (in Hz)\n */\nexport enum SampleRate {\n RATE_8000 = 8000,\n RATE_16000 = 16000,\n RATE_22050 = 22050,\n RATE_24000 = 24000,\n RATE_32000 = 32000,\n RATE_44100 = 44100,\n RATE_48000 = 48000\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace SampleRate {\n // Lookup maps for efficient conversion\n const HZ_TO_ENUM: ReadonlyMap<number, SampleRate> = new Map([\n [8000, SampleRate.RATE_8000],\n [16000, SampleRate.RATE_16000],\n [22050, SampleRate.RATE_22050],\n [24000, SampleRate.RATE_24000],\n [32000, SampleRate.RATE_32000],\n [44100, SampleRate.RATE_44100],\n [48000, SampleRate.RATE_48000],\n ]);\n\n const NAME_TO_ENUM: ReadonlyMap<string, SampleRate> = new Map([\n ['RATE_8000', SampleRate.RATE_8000],\n ['RATE_16000', SampleRate.RATE_16000],\n ['RATE_22050', SampleRate.RATE_22050],\n ['RATE_24000', SampleRate.RATE_24000],\n ['RATE_32000', SampleRate.RATE_32000],\n ['RATE_44100', SampleRate.RATE_44100],\n ['RATE_48000', SampleRate.RATE_48000],\n ]);\n\n const ENUM_TO_NAME: ReadonlyMap<SampleRate, string> = new Map([\n [SampleRate.RATE_8000, 'RATE_8000'],\n [SampleRate.RATE_16000, 'RATE_16000'],\n [SampleRate.RATE_22050, 'RATE_22050'],\n [SampleRate.RATE_24000, 'RATE_24000'],\n [SampleRate.RATE_32000, 'RATE_32000'],\n [SampleRate.RATE_44100, 'RATE_44100'],\n [SampleRate.RATE_48000, 'RATE_48000'],\n ]);\n\n /**\n * Convert Hz value to SampleRate enum\n * @param hz - Sample rate in Hz (8000, 16000, etc.)\n * @returns SampleRate enum value or undefined if invalid\n */\n export function fromHz(hz: number): SampleRate | undefined {\n return HZ_TO_ENUM.get(hz);\n }\n\n /**\n * Convert string name to SampleRate enum\n * @param nameStr - String name like \"rate_8000\", \"RATE_16000\", etc. (case insensitive)\n * @returns SampleRate enum value or undefined if invalid\n */\n export function fromName(nameStr: string): SampleRate | undefined {\n return NAME_TO_ENUM.get(nameStr.toUpperCase());\n }\n\n /**\n * Convert SampleRate enum to Hz value\n * @param rate - SampleRate enum value\n * @returns Hz value (8000, 16000, etc.)\n */\n export function toHz(rate: SampleRate): number {\n return rate as number;\n }\n\n /**\n * Convert SampleRate enum to string name\n * @param rate - SampleRate enum value\n * @returns String name like \"RATE_8000\", \"RATE_16000\", etc.\n */\n export function toName(rate: SampleRate): string {\n return ENUM_TO_NAME.get(rate) ?? SampleRate[rate];\n }\n\n /**\n * Check if a numeric Hz value is a valid sample rate\n * @param hz - Hz value to validate\n * @returns true if valid sample rate\n */\n export function isHzValid(hz: number): boolean {\n return HZ_TO_ENUM.has(hz);\n }\n\n /**\n * Check if a string name is a valid sample rate\n * @param nameStr - String name to validate\n * @returns true if valid sample rate name\n */\n export function isNameValid(nameStr: string): boolean {\n return NAME_TO_ENUM.has(nameStr.toUpperCase());\n }\n}\n\n/**\n * Supported languages for recognition\n * Using BCP-47 language tags\n */\nexport enum Language {\n ENGLISH_US = 'en-US',\n ENGLISH_GB = 'en-GB',\n SPANISH_ES = 'es-ES',\n SPANISH_MX = 'es-MX',\n FRENCH_FR = 'fr-FR',\n GERMAN_DE = 'de-DE',\n ITALIAN_IT = 'it-IT',\n PORTUGUESE_BR = 'pt-BR',\n JAPANESE_JP = 'ja-JP',\n KOREAN_KR = 'ko-KR',\n CHINESE_CN = 'zh-CN',\n CHINESE_TW = 'zh-TW'\n}\n\n/**\n * Helper type guard to check if a value is a valid SampleRate\n */\nexport const isSampleRate = (value: number): value is SampleRate => {\n return SampleRate.isHzValid(value);\n};\n\n/**\n * Helper type guard to check if a value is a valid Language\n */\nexport const isLanguage = (value: string): value is Language => {\n return Object.values(Language).includes(value as Language);\n};\n\n", "/**\n * Unified ASR Request Configuration\n *\n * Provider-agnostic configuration for ASR (Automatic Speech Recognition) requests.\n * This interface provides a consistent API for clients regardless of the underlying provider.\n *\n * All fields use library-defined enums for type safety and consistency.\n * Provider-specific mappers will convert these to provider-native formats.\n */\n\nimport { Language, SampleRate, AudioEncoding } from './audio.types.js';\nimport { RecognitionProvider, RecognitionModel } from './provider.types.js';\n\n/**\n * Final transcript stability modes\n *\n * Controls timeout duration for fallback final transcript after stopRecording().\n * Similar to AssemblyAI's turn detection confidence modes but applied to our\n * internal timeout mechanism when vendors don't respond with is_final=true.\n *\n * @see https://www.assemblyai.com/docs/speech-to-text/universal-streaming/turn-detection\n */\nexport enum FinalTranscriptStability {\n /**\n * Aggressive mode: 100ms timeout\n * Fast response, optimized for short utterances and quick back-and-forth\n * Use cases: IVR, quick commands, retail confirmations\n */\n AGGRESSIVE = 'aggressive',\n\n /**\n * Balanced mode: 200ms timeout (default)\n * Natural middle ground for most conversational scenarios\n * Use cases: General customer support, tech support, typical voice interactions\n */\n BALANCED = 'balanced',\n\n /**\n * Conservative mode: 400ms timeout\n * Wait longer for providers, optimized for complex/reflective speech\n * Use cases: Healthcare, complex queries, careful thought processes\n */\n CONSERVATIVE = 'conservative',\n\n /**\n * Experimental mode: 10000ms (10 seconds) timeout\n * Very long wait for batch/async providers that need significant processing time\n * Use cases: Batch processing (Gemini, OpenAI Whisper), complex audio analysis\n * Note: Should be cancelled immediately when transcript is received\n */\n EXPERIMENTAL = 'experimental'\n}\n\n/**\n * Unified ASR request configuration\n *\n * This configuration is used by:\n * - Client SDKs to specify recognition parameters\n * - Demo applications for user input\n * - Service layer to configure provider sessions\n *\n * Core fields only - all provider-specific options go in providerOptions\n *\n * @example\n * ```typescript\n * const config: ASRRequestConfig = {\n * provider: RecognitionProvider.GOOGLE,\n * model: GoogleModel.LATEST_LONG,\n * language: Language.ENGLISH_US,\n * sampleRate: SampleRate.RATE_16000, // or just 16000\n * encoding: AudioEncoding.LINEAR16,\n * providerOptions: {\n * google: {\n * enableAutomaticPunctuation: true,\n * interimResults: true,\n * singleUtterance: false\n * }\n * }\n * };\n * ```\n */\nexport interface ASRRequestConfig {\n /**\n * The ASR provider to use\n * Must be one of the supported providers in RecognitionProvider enum\n */\n provider: RecognitionProvider | string;\n\n /**\n * Optional model specification for the provider\n * Can be provider-specific model enum or string\n * If not specified, provider's default model will be used\n */\n model?: RecognitionModel;\n\n /**\n * Language/locale for recognition\n * Use Language enum for common languages\n * Can also accept BCP-47 language tags as strings\n */\n language: Language | string;\n\n /**\n * Audio sample rate in Hz\n * Prefer using SampleRate enum values for standard rates\n * Can also accept numeric Hz values (e.g., 16000)\n */\n sampleRate: SampleRate | number;\n\n /**\n * Audio encoding format\n * Must match the actual audio data being sent\n * Use AudioEncoding enum for standard formats\n */\n encoding: AudioEncoding | string;\n\n /**\n * Enable interim (partial) results during recognition\n * When true, receive real-time updates before finalization\n * When false, only receive final results\n * Default: false\n */\n interimResults?: boolean;\n\n /**\n * Require GameContext before starting recognition such as song titles\n * When true, server waits for GameContext message before processing audio\n * When false, recognition starts immediately\n * Default: false\n */\n useContext?: boolean;\n\n /**\n * Final transcript stability mode\n *\n * Controls timeout duration for fallback final transcript when provider\n * doesn't respond with is_final=true after stopRecording().\n *\n * - aggressive: 100ms - fast response, may cut off slow providers\n * - balanced: 200ms - current default, good for most cases\n * - conservative: 400ms - wait longer for complex utterances\n *\n * @default 'balanced'\n * @see FinalTranscriptStability enum for detailed descriptions\n */\n finalTranscriptStability?: FinalTranscriptStability | string;\n\n /**\n * Traffic control priority for quota slot allocation\n *\n * Controls which quota slots this request can use when traffic control is enabled.\n * The quota system reserves a portion of slots for high-priority requests.\n *\n * - 'high': Can use all quota slots (reserved for critical games like song-quiz)\n * - 'low': Limited to non-reserved slots (default for most requests)\n *\n * @default 'low'\n */\n priority?: 'low' | 'high';\n\n /**\n * Additional provider-specific options\n *\n * Common options per provider:\n * - Deepgram: punctuate, smart_format, diarize, utterances\n * - Google: enableAutomaticPunctuation, singleUtterance, enableWordTimeOffsets\n * - AssemblyAI: formatTurns, filter_profanity, word_boost\n *\n * Note: interimResults is now a top-level field, but can still be overridden per provider\n *\n * @example\n * ```typescript\n * providerOptions: {\n * google: {\n * enableAutomaticPunctuation: true,\n * singleUtterance: false,\n * enableWordTimeOffsets: false\n * }\n * }\n * ```\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n providerOptions?: Record<string, any>;\n\n /**\n * Optional fallback ASR configurations\n *\n * List of alternative ASR configurations to use if the primary fails.\n * Each fallback config is a complete ASRRequestConfig that will be tried\n * in order until one succeeds.\n *\n * @example\n * ```typescript\n * fallbackModels: [\n * {\n * provider: RecognitionProvider.DEEPGRAM,\n * model: DeepgramModel.NOVA_2,\n * language: Language.ENGLISH_US,\n * sampleRate: 16000,\n * encoding: AudioEncoding.LINEAR16\n * },\n * {\n * provider: RecognitionProvider.GOOGLE,\n * model: GoogleModel.LATEST_SHORT,\n * language: Language.ENGLISH_US,\n * sampleRate: 16000,\n * encoding: AudioEncoding.LINEAR16\n * }\n * ]\n * ```\n */\n fallbackModels?: ASRRequestConfig[];\n}\n\n/**\n * Partial ASR config for updates\n * All fields are optional for partial updates\n */\nexport type PartialASRRequestConfig = Partial<ASRRequestConfig>;\n\n/**\n * Helper function to create a default ASR config\n */\nexport function createDefaultASRConfig(overrides?: PartialASRRequestConfig): ASRRequestConfig {\n return {\n provider: RecognitionProvider.DEEPGRAM,\n language: Language.ENGLISH_US,\n sampleRate: SampleRate.RATE_16000,\n encoding: AudioEncoding.LINEAR16,\n ...overrides\n };\n}\n\n/**\n * Type guard to check if a config is valid\n */\nexport function isValidASRConfig(config: unknown): config is ASRRequestConfig {\n return (\n config !== null &&\n config !== undefined &&\n typeof config === 'object' &&\n 'provider' in config &&\n 'language' in config &&\n 'sampleRate' in config &&\n 'encoding' in config\n );\n}\n\n/**\n * Validate and normalize sample rate\n * Accepts both SampleRate enum and raw numbers\n */\nexport function normalizeSampleRate(rate: SampleRate | number): number {\n if (typeof rate === 'number') {\n return rate;\n }\n return rate as number; // SampleRate enum is numeric\n}\n\n/**\n * Validate and normalize encoding\n * Accepts both AudioEncoding enum and strings\n */\nexport function normalizeEncoding(encoding: AudioEncoding | string): string {\n if (typeof encoding === 'string') {\n return encoding.toUpperCase();\n }\n // Convert enum to string name\n return AudioEncoding.toName(encoding);\n}\n", "/** Discriminator for internal message routing types */\nexport enum PlumbingType {\n AUDIO = 'audio',\n CONTROL = 'control',\n RESULT = 'result',\n RECOGNITION_CONTEXT = 'recognition_context',\n PROVIDER_TRANSCRIPT_RESULT = 'provider_transcript_result',\n PROVIDER_METADATA_RESULT = 'provider_metadata_result',\n PROVIDER_ERROR_RESULT = 'provider_error_result',\n PROVIDER_VAD_SIGNAL = 'provider_vad_signal',\n PROVIDER_TIMER_SIGNAL = 'provider_timer_signal',\n PROVIDER_RAW_MESSAGE = 'provider_raw_message',\n AUDIO_METRICS = 'audio_metrics',\n}\n\nimport type { ControlSignalV1, RecognitionContextV1 } from './recognition-context-v1.types.js';\nimport type { RecognitionResultV1, AudioMetricsResultV1 } from './recognition-result-v1.types.js';\nimport type {\n TranscriptMessage,\n MetadataMessage,\n ErrorMessage,\n VADEndSignal,\n TimerMessage,\n RawMessage,\n} from './provider-transcription.types.js';\n\n/** Map each PlumbingType to its payload type (override in consumer package if desired). */\nexport interface PlumbingTypeMap {\n [PlumbingType.AUDIO]: unknown;\n [PlumbingType.CONTROL]: ControlSignalV1;\n [PlumbingType.RESULT]: RecognitionResultV1;\n [PlumbingType.RECOGNITION_CONTEXT]: RecognitionContextV1;\n [PlumbingType.PROVIDER_TRANSCRIPT_RESULT]: TranscriptMessage;\n [PlumbingType.PROVIDER_METADATA_RESULT]: MetadataMessage;\n [PlumbingType.PROVIDER_ERROR_RESULT]: ErrorMessage;\n [PlumbingType.PROVIDER_VAD_SIGNAL]: VADEndSignal;\n [PlumbingType.PROVIDER_TIMER_SIGNAL]: TimerMessage;\n [PlumbingType.PROVIDER_RAW_MESSAGE]: RawMessage;\n [PlumbingType.AUDIO_METRICS]: AudioMetricsResultV1;\n}\n\n/** Envelope for internal plumbing messages */\nexport type PlumbingMessage<K extends PlumbingType = PlumbingType> = {\n kind: K;\n data: PlumbingTypeMap[K];\n audioUtteranceId: string;\n timestamp?: number;\n};\n\n/** Type guard for PlumbingType */\nexport function isPlumbingType(value: unknown): value is PlumbingType {\n return (\n value === PlumbingType.AUDIO ||\n value === PlumbingType.CONTROL ||\n value === PlumbingType.RESULT ||\n value === PlumbingType.RECOGNITION_CONTEXT ||\n value === PlumbingType.PROVIDER_TRANSCRIPT_RESULT ||\n value === PlumbingType.PROVIDER_METADATA_RESULT ||\n value === PlumbingType.PROVIDER_ERROR_RESULT ||\n value === PlumbingType.PROVIDER_VAD_SIGNAL ||\n value === PlumbingType.PROVIDER_TIMER_SIGNAL ||\n value === PlumbingType.PROVIDER_RAW_MESSAGE ||\n value === PlumbingType.AUDIO_METRICS\n );\n}\n\n/** Consumer contract: declare plumbing types and handle receive */\nexport interface Consumer {\n getConsumerPlumbingTypes(): PlumbingType[];\n receive(message: PlumbingMessage): void;\n}\n\n/** Producer contract: declare plumbing types and emit via onMessage */\nexport interface Producer {\n getProducerPlumbingTypes(): PlumbingType[];\n onMessage(listener: (message: PlumbingMessage) => void): void;\n}\n\n", "/**\n * Game ID types and enums for recognition services\n *\n * Used to identify a game. \n *\n * @see https://github.com/Volley-Inc/tv/blob/main/libs/types/shared/src/types/GameId.ts\n */\nexport enum GameId {\n UNKNOWN = 'unknown',\n HUB = 'hub',\n JEOPARDY = 'jeopardy',\n WHEEL_OF_FORTUNE = 'wheel-of-fortune',\n SONG_QUIZ = 'song-quiz',\n KARAOKE = 'karaoke',\n TWENTY_QUESTIONS = 'twenty-questions',\n GUESS_THE_EMOJI = 'emoji',\n}\n\n/**\n * String to GameId reverse mapping dictionary\n * @internal\n */\nconst STRING_TO_GAME_ID_MAP: Record<string, GameId> = {\n 'unknown': GameId.UNKNOWN,\n 'hub': GameId.HUB,\n 'jeopardy': GameId.JEOPARDY,\n 'wheel-of-fortune': GameId.WHEEL_OF_FORTUNE,\n 'song-quiz': GameId.SONG_QUIZ,\n 'karaoke': GameId.KARAOKE,\n 'twenty-questions': GameId.TWENTY_QUESTIONS,\n 'emoji': GameId.GUESS_THE_EMOJI,\n};\n\n/**\n * Alias map for common abbreviations and alternate spellings\n * Maps lowercase aliases to canonical game IDs\n * @internal\n */\nconst GAME_ID_ALIAS_MAP: Record<string, GameId> = {\n // Song Quiz aliases\n 'songquiz': GameId.SONG_QUIZ,\n 'sq': GameId.SONG_QUIZ,\n // Wheel of Fortune aliases\n 'wof': GameId.WHEEL_OF_FORTUNE,\n 'wheeloffortune': GameId.WHEEL_OF_FORTUNE,\n // Twenty Questions aliases\n '20q': GameId.TWENTY_QUESTIONS,\n 'twentyquestions': GameId.TWENTY_QUESTIONS,\n '20questions': GameId.TWENTY_QUESTIONS,\n // Guess the Emoji aliases\n 'guesstheemoji': GameId.GUESS_THE_EMOJI,\n 'gte': GameId.GUESS_THE_EMOJI,\n};\n\n/**\n * Reverse map to convert string to GameId enum\n * Returns GameId.UNKNOWN for unrecognized strings\n * @param value - String value to convert\n * @returns Corresponding GameId enum value or GameId.UNKNOWN\n */\nexport function stringToGameId(value: string): GameId {\n const lowerValue = value.toLowerCase();\n return STRING_TO_GAME_ID_MAP[lowerValue] ?? GameId.UNKNOWN;\n}\n\n/**\n * Soft normalization for gameId strings.\n * - Always trims whitespace\n * - Known game IDs (case-insensitive): normalizes to canonical enum value\n * - Aliases (songquiz, wof, sq, 20q, etc.): normalizes to canonical enum value\n * - Unknown game IDs: returns trimmed string unchanged\n *\n * This allows new/custom game IDs to pass through while standardizing known ones.\n *\n * @param value - The gameId string to normalize\n * @returns Normalized gameId string (canonical form for known games, trimmed for unknown)\n *\n * @example\n * normalizeGameId('SONG-QUIZ') // returns 'song-quiz'\n * normalizeGameId('Song_Quiz') // returns 'song-quiz'\n * normalizeGameId('songquiz') // returns 'song-quiz'\n * normalizeGameId('wof') // returns 'wheel-of-fortune'\n * normalizeGameId(' my-new-game ') // returns 'my-new-game' (trimmed)\n */\nexport function normalizeGameId(value: string): string {\n if (!value) {\n return value;\n }\n\n // Always trim whitespace\n const trimmed = value.trim();\n if (!trimmed) {\n return trimmed;\n }\n\n // Normalize input: lowercase, replace underscores and spaces with hyphens\n const normalizedInput = trimmed.toLowerCase().replace(/[_\\s]+/g, '-');\n\n // Check if it matches a known game ID\n const knownGameId = STRING_TO_GAME_ID_MAP[normalizedInput];\n if (knownGameId) {\n return knownGameId;\n }\n\n // Check aliases (lowercase, no separators)\n const aliasInput = trimmed.toLowerCase().replace(/[_\\s-]+/g, '');\n const aliasGameId = GAME_ID_ALIAS_MAP[aliasInput];\n if (aliasGameId) {\n return aliasGameId;\n }\n\n // Return trimmed string for unknown games\n return trimmed;\n}\n", "/**\n * Gemini Model Types\n * Based on available models as of January 2025\n *\n * API Version Notes:\n * - Gemini 2.5+ models: Use v1beta API (early access features)\n * - Gemini 2.0 models: Use v1beta API (early access features)\n * - Gemini 1.5 models: Use v1 API (stable, production-ready)\n *\n * @see https://ai.google.dev/gemini-api/docs/models\n * @see https://ai.google.dev/gemini-api/docs/api-versions\n */\n\nexport enum GeminiModel {\n // Gemini 2.5 series (Latest - January 2025)\n // API: v1beta - https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-*\n GEMINI_2_5_PRO = 'gemini-2.5-pro', // State-of-the-art thinking model\n GEMINI_2_5_FLASH = 'gemini-2.5-flash', // Best price-performance balance\n GEMINI_2_5_FLASH_LITE = 'gemini-2.5-flash-lite', // Fastest, most cost-efficient\n\n // Gemini 2.0 series\n // API: v1beta - https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-*\n GEMINI_2_0_FLASH_LATEST = 'gemini-2.0-flash-latest', // Auto-updated to latest 2.0 flash\n GEMINI_2_0_FLASH_EXP = 'gemini-2.0-flash-exp' // Experimental version\n}\n\n/**\n * Gemini API Version\n *\n * The Gemini API has two main versions (NOT v1/v2, but v1/v1beta):\n *\n * v1 (Stable):\n * - Fully-supported features over the lifetime of the major version\n * - Breaking changes result in new major version with deprecation period\n * - Non-breaking changes can be introduced without version change\n * - Recommended for production applications\n * - Used by: Gemini 1.5 models\n *\n * v1beta (Beta):\n * - Early-access features under active development\n * - Subject to rapid and breaking changes without notice\n * - No guarantee features will move to stable version\n * - NOT recommended for production applications\n * - Used by: Gemini 2.0+ and 2.5+ models\n *\n * @see https://ai.google.dev/gemini-api/docs/api-versions\n */\nexport enum GeminiApiVersion {\n V1 = 'v1', // Stable API - for production use (Gemini 1.5)\n V1BETA = 'v1beta' // Beta API - for early access (Gemini 2.0+, 2.5+)\n}", "/**\n * OpenAI Model Types\n */\n\nexport enum OpenAIModel {\n WHISPER_1 = 'whisper-1'\n}", "/**\n * Conductor service types\n * Types specific to the recognition-conductor service\n */\n\nimport { RecognitionProvider, RecognitionModel} from \"./provider.types.js\"\n\n/**\n * Stats request payload for tracking provider calls\n * Used by the conductor /v1/stat/provider endpoint\n */\nexport interface StatsKey {\n provider: RecognitionProvider\n model: RecognitionModel\n}\nexport enum StatsIncrementType {\n CALL = \"call\",\n SUCCESS = \"success\",\n FAIL = \"fail\"\n}\n\nexport interface StatsIncrementRequest extends StatsKey {\n type: StatsIncrementType\n}\n\nexport interface StatsGetRequest extends StatsIncrementRequest {\n lookbackIntervalInMinutes: number // Lookback interval in milliseconds\n}\n\nexport interface StatsGetResponse extends StatsIncrementRequest {\n total_calls: number\n success_count: number\n failure_count: number\n}\n\nexport const isStatsIncrementType = (type: string): type is StatsIncrementType => {\n return Object.values(StatsIncrementType).includes(type as StatsIncrementType)\n}\n\n/**\n * Provider availability check response\n * Used by the conductor /v1/provider/availability endpoint\n */\nexport interface AvailabilityResponse {\n provider: RecognitionProvider\n model: RecognitionModel\n available: boolean\n reason: 'healthy' | 'circuit_open' | 'insufficient_data'\n stats: {\n failureRate: number\n totalCalls: number\n timeWindow: string\n }\n}\n\n// ============================================================================\n// Quota Types\n// ============================================================================\n\n/**\n * Priority levels for quota token requests\n * HIGH priority can use reserved slots, LOW priority cannot\n */\nexport enum QuotaPriority {\n LOW = 0, // Background tasks, batch processing - limited slots\n HIGH = 1, // Priority requests (e.g., live games) - can use all slots\n}\n\n/**\n * Quota token issued by conductor\n * Represents a reservation to use a provider\n */\nexport interface QuotaToken {\n tokenId: string // UUID\n provider: RecognitionProvider\n model: RecognitionModel | undefined // Optional API/model version\n priority: QuotaPriority // Priority level used when requesting\n issuedAt: number // Unix timestamp (ms)\n expiresAt: number // Unix timestamp (ms)\n}\n\n/**\n * Request to acquire a quota token\n * POST /v1/quota/token\n */\nexport interface QuotaTokenRequest {\n provider: RecognitionProvider\n model?: RecognitionModel | undefined // Optional, for API version-specific quotas\n priority?: QuotaPriority | undefined // Optional, defaults to HIGH\n}\n\n/**\n * Response when token is successfully acquired\n */\nexport interface QuotaTokenResponse {\n token: QuotaToken\n}\n\n/**\n * Response when quota is exhausted (HTTP 429)\n */\nexport interface QuotaExhaustedResponse {\n error: 'QUOTA_EXHAUSTED'\n provider: RecognitionProvider\n model: RecognitionModel | undefined\n availableIn: number // Estimated ms until a token might be available\n currentUsage: number\n maxAllowed: number\n}\n\n/**\n * Response when token is released\n * DELETE /v1/quota/token/:tokenId\n */\nexport interface QuotaTokenReleaseResponse {\n released: boolean\n tokenId: string\n}\n\n/**\n * Response when token is not found (HTTP 404)\n */\nexport interface QuotaTokenNotFoundResponse {\n error: 'TOKEN_NOT_FOUND'\n tokenId: string\n}\n\n", "/**\n * Standard stage/environment constants used across all services\n */\nexport const STAGES = {\n LOCAL: \"local\",\n DEV: \"dev\",\n STAGING: \"staging\",\n PRODUCTION: \"production\",\n} as const;\n\nexport type Stage = typeof STAGES[keyof typeof STAGES];\n\nexport const NON_PROD_STAGES: Stage[] = [STAGES.LOCAL, STAGES.DEV, STAGES.STAGING];\n\nexport function isProduction(stage: Stage): boolean {\n return stage === STAGES.PRODUCTION;\n}\n\nexport function isStaging(stage: Stage): boolean {\n return stage === STAGES.STAGING;\n}\n\nexport function isDev(stage: Stage): boolean {\n return stage === STAGES.DEV;\n}\n\nexport function isLocal(stage: Stage): boolean {\n return stage === STAGES.LOCAL;\n}\n\nexport function isNonProduction(stage: Stage): boolean {\n return NON_PROD_STAGES.includes(stage);\n}\n\n", "/**\n * Generic WebSocket protocol types and utilities\n * Supports flexible versioning and message types\n * Used by both client and server implementations\n */\n\n// Re-export for convenience\nexport { SampleRate, AudioEncoding } from '@recog/shared-types';\n\n\n\n// ---- WebSocket Close Codes (RFC 6455) ----\n\n/**\n * WebSocket close status codes as defined in RFC 6455 Section 7.4\n * @see https://www.rfc-editor.org/rfc/rfc6455#section-7.4\n * @see https://www.iana.org/assignments/websocket/websocket.xml\n */\nexport enum WebSocketCloseCode {\n // Standard codes (1000-1015)\n\n /** 1000 - Normal closure; connection completed its purpose */\n NORMAL_CLOSURE = 1000,\n\n /** 1001 - Endpoint going away (e.g., server shutdown, browser navigation) */\n GOING_AWAY = 1001,\n\n /** 1002 - Protocol error detected */\n PROTOCOL_ERROR = 1002,\n\n /** 1003 - Received data type not supported */\n UNSUPPORTED_DATA = 1003,\n\n /** 1004 - Reserved. DO NOT USE. */\n RESERVED_1004 = 1004,\n\n /** 1005 - Reserved. No status code present (INTERNAL USE ONLY - cannot be sent) */\n NO_STATUS_RECEIVED = 1005,\n\n /** 1006 - Reserved. Abnormal closure, no close frame (INTERNAL USE ONLY - cannot be sent) */\n ABNORMAL_CLOSURE = 1006,\n\n /** 1007 - Invalid frame payload data (e.g., invalid UTF-8) */\n INVALID_FRAME_PAYLOAD = 1007,\n\n /** 1008 - Policy violation */\n POLICY_VIOLATION = 1008,\n\n /** 1009 - Message too big to process */\n MESSAGE_TOO_BIG = 1009,\n\n /** 1010 - Client expected server to negotiate extension */\n MANDATORY_EXTENSION = 1010,\n\n /** 1011 - Server encountered unexpected condition */\n INTERNAL_SERVER_ERROR = 1011,\n\n /** 1012 - Service restart (non-standard) */\n SERVICE_RESTART = 1012,\n\n /** 1013 - Try again later (non-standard) */\n TRY_AGAIN_LATER = 1013,\n\n /** 1014 - Bad gateway (non-standard) */\n BAD_GATEWAY = 1014,\n\n /** 1015 - TLS handshake failure (INTERNAL USE ONLY - cannot be sent) */\n TLS_HANDSHAKE = 1015,\n\n // Application-specific codes (4000-4999)\n // These are available for application use per RFC 6455\n\n /** 4000 - Application-specific: Authentication required */\n AUTH_REQUIRED = 4000,\n\n /** 4001 - Application-specific: Authentication failed */\n AUTH_FAILED = 4001,\n\n /** 4002 - Application-specific: Rate limit exceeded */\n RATE_LIMIT_EXCEEDED = 4002,\n\n /** 4003 - Application-specific: Invalid session */\n INVALID_SESSION = 4003,\n\n /** 4004 - Application-specific: Session expired */\n SESSION_EXPIRED = 4004,\n}\n\n/**\n * Check if a close code indicates a clean closure\n */\nexport function isCleanClose(code: number): boolean {\n return code === WebSocketCloseCode.NORMAL_CLOSURE;\n}\n\n/**\n * Check if a close code indicates a network/connection failure\n */\nexport function isNetworkFailure(code: number): boolean {\n return code === WebSocketCloseCode.ABNORMAL_CLOSURE\n || code === WebSocketCloseCode.TLS_HANDSHAKE;\n}\n\n/**\n * Check if reconnection is recommended for this close code\n */\nexport function shouldReconnect(code: number): boolean {\n // Reconnect on network failures and certain server errors\n return code === WebSocketCloseCode.ABNORMAL_CLOSURE\n || code === WebSocketCloseCode.GOING_AWAY\n || code === WebSocketCloseCode.SERVICE_RESTART\n || code === WebSocketCloseCode.TRY_AGAIN_LATER\n || code === WebSocketCloseCode.INTERNAL_SERVER_ERROR;\n}\n\n// ---- Core Message Types ----\n\n/**\n * Base message structure - completely flexible\n * @template V - Version type (number, string, etc.)\n */\nexport interface Message<V = number> {\n v: V; // Developer defines version\n type: string; // Developer defines message type\n data?: unknown; // Developer defines payload structure\n}\n\n/**\n * Audio frame header - 8 bytes total\n * Format: [v:1byte][e:1byte][sr:2bytes][seq:4bytes]\n * \n * Byte allocation rationale:\n * - v: 1 byte (uint8, 0-255) - Protocol version\n * - e: 1 byte (uint8, 0-255) - Encoding ID (AudioEncoding enum uses 0-5)\n * - sr: 2 bytes (uint16, 0-65535) - Sample rate in Hz (covers up to 65.5 kHz, max common is 48000)\n * - seq: 4 bytes (uint32, 0-4294967295) - Frame sequence number (supports ~4 billion frames)\n * \n * @template V - Version type\n */\nexport interface AudioHeader<V = number> {\n v: V; // Version (flexible type)\n e: number; // Audio encoding ID (0-255, uses AudioEncoding enum values 0-5)\n sr: number; // Sample rate in Hz (0-65535, e.g., 16000, 48000)\n seq: number; // Sequence number (0-4294967295)\n}\n\n/**\n * Version serializer interface\n * Converts between version type V and byte representation\n */\nexport interface VersionSerializer<V> {\n serialize: (v: V) => number; // V -> byte (0-255)\n deserialize: (byte: number) => V; // byte -> V\n}\n\n// ---- Pack/Unpack Utilities ----\n\n/**\n * Pack audio header and payload into a single ArrayBuffer\n * Format: [v:1byte][e:1byte][sr:2bytes][seq:4bytes][...payload]\n * Total header: 8 bytes\n * \n * @param h - Audio header with version, encoding, sample rate, sequence\n * @param payload - Raw audio data\n * @param versionSerializer - Function to convert version to byte\n * @throws {Error} If values exceed their byte limits\n */\nexport function packHeader<V>(\n h: AudioHeader<V>,\n payload: ArrayBuffer,\n versionSerializer: (v: V) => number\n): ArrayBuffer {\n // Validate encoding ID (1 byte: 0-255)\n if (h.e < 0 || h.e > 255 || !Number.isInteger(h.e)) {\n throw new Error(`Encoding ID must be an integer between 0-255, got: ${h.e}`);\n }\n \n // Validate sample rate (2 bytes: 0-65535)\n if (h.sr < 0 || h.sr > 65535 || !Number.isInteger(h.sr)) {\n throw new Error(`Sample rate must be an integer between 0-65535, got: ${h.sr}`);\n }\n \n // Validate sequence number (4 bytes: 0-4294967295)\n if (h.seq < 0 || h.seq > 4294967295 || !Number.isInteger(h.seq)) {\n throw new Error(`Sequence number must be an integer between 0-4294967295, got: ${h.seq}`);\n }\n \n const out = new ArrayBuffer(8 + payload.byteLength);\n const dv = new DataView(out);\n dv.setUint8(0, versionSerializer(h.v));\n dv.setUint8(1, h.e); // Encoding ID (0-255)\n dv.setUint16(2, h.sr, true); // Sample rate (0-65535, little-endian)\n dv.setUint32(4, h.seq, true); // Sequence number (0-4294967295, little-endian)\n new Uint8Array(out, 8).set(new Uint8Array(payload));\n return out;\n}\n\n/**\n * Unpack binary frame into header and payload\n * \n * @param buf - Binary frame with 8-byte header + payload\n * @param versionDeserializer - Function to convert byte to version\n */\nexport function unpackHeader<V>(\n buf: ArrayBuffer,\n versionDeserializer: (byte: number) => V\n): { hdr: AudioHeader<V>; payload: ArrayBuffer } {\n const dv = new DataView(buf);\n return {\n hdr: {\n v: versionDeserializer(dv.getUint8(0)),\n e: dv.getUint8(1), // Encoding ID (0-5)\n sr: dv.getUint16(2, true), // Sample rate in Hz\n seq: dv.getUint32(4, true) // Sequence number\n },\n payload: buf.slice(8),\n };\n}\n\n// ---- Default Version Serializers ----\n\n/**\n * Identity serializer for numeric versions (1, 2, 3, etc.)\n * This is the default and most common case\n */\nexport const numericVersionSerializer: VersionSerializer<number> = {\n serialize: (v: number) => v,\n deserialize: (byte: number) => byte\n};\n\n/**\n * Create string version serializer with custom mapping\n * Example: { \"v1\": 1, \"v2\": 2, \"2024-01\": 3 }\n * \n * @param mapping - Map of version strings to byte values\n */\nexport function createStringVersionSerializer(\n mapping: Record<string, number>\n): VersionSerializer<string> {\n const reverseMap = Object.fromEntries(\n Object.entries(mapping).map(([k, v]) => [v, k])\n );\n return {\n serialize: (v: string) => mapping[v] ?? 0,\n deserialize: (byte: number) => reverseMap[byte] ?? \"unknown\"\n };\n}\n\n", "/**\n * WebSocketAudioClient - Abstract base class for WebSocket clients\n * Sends audio and control messages, receives responses from server\n * \n * Features:\n * - Generic version type support (number, string, etc.)\n * - Type-safe upward/downward message data\n * - Client-side backpressure monitoring\n * - Abstract hooks for application-specific logic\n * - Format-agnostic audio protocol (supports any encoding)\n */\n\nimport {\n numericVersionSerializer,\n type AudioHeader,\n type Message,\n type VersionSerializer,\n packHeader\n} from \"./audio-upload-websocket-protocol.js\";\n\nexport type ClientConfig = {\n url: string;\n highWM?: number; // optional backpressure thresholds\n lowWM?: number;\n};\n\n/**\n * WebSocketAudioClient - Abstract base class for WebSocket clients\n * that send audio frames and JSON messages\n * \n * @template V - Version type (number, string, object, etc.)\n * @template TUpward - Type of upward message data (Client -> Server)\n * @template TDownward - Type of downward message data (Server -> Client)\n * \n * @example\n * ```typescript\n * class MyClient extends WebSocketAudioClient<number, MyUpMsg, MyDownMsg> {\n * protected onConnected() {\n * console.log('Connected!');\n * }\n * \n * protected onMessage(msg) {\n * console.log('Received:', msg.type, msg.data);\n * }\n * \n * protected onDisconnected(code, reason) {\n * console.log('Disconnected:', code, reason);\n * }\n * \n * protected onError(error) {\n * console.error('Error:', error);\n * }\n * }\n * \n * const client = new MyClient({ url: 'ws://localhost:8080' });\n * client.connect();\n * client.sendMessage(1, 'configure', { language: 'en' });\n * client.sendAudio(audioData);\n * ```\n */\nexport abstract class WebSocketAudioClient<\n V = number, // Version type (default: number)\n TUpward = unknown, // Upward message data type\n TDownward = unknown // Downward message data type\n> {\n private ws!: WebSocket;\n private seq = 0;\n private HWM: number;\n private LWM: number;\n\n constructor(\n private cfg: ClientConfig,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected versionSerializer: VersionSerializer<V> = numericVersionSerializer as any\n ) {\n this.HWM = cfg.highWM ?? 512_000;\n this.LWM = cfg.lowWM ?? 128_000;\n }\n\n // ========================================================================\n // ABSTRACT HOOKS - Implement these in your subclass\n // ========================================================================\n\n /**\n * Hook: Called when WebSocket connection is established\n */\n protected abstract onConnected(): void;\n\n /**\n * Hook: Called when WebSocket connection closes\n * @param code - Close code (see WebSocketCloseCode enum)\n * @param reason - Human-readable close reason\n */\n protected abstract onDisconnected(code: number, reason: string): void;\n\n /**\n * Hook: Called when WebSocket error occurs\n */\n protected abstract onError(error: Event): void;\n\n // ========================================================================\n // OPTIONAL HOOKS - Override if needed\n // ========================================================================\n\n /**\n * Hook: Called when downward message arrives from server\n * Override this to handle messages (optional - default does nothing)\n */\n protected onMessage(_msg: Message<V> & { data: TDownward }): void {\n // Default: no-op, override in subclass\n }\n\n // ========================================================================\n // PUBLIC API\n // ========================================================================\n\n connect(): void {\n this.ws = new WebSocket(this.cfg.url);\n this.ws.binaryType = \"arraybuffer\";\n\n this.ws.onopen = (): void => {\n this.onConnected();\n };\n\n this.ws.onclose = (event): void => {\n this.onDisconnected(event.code, event.reason);\n };\n\n this.ws.onerror = (error): void => {\n this.onError(error);\n };\n\n this.ws.onmessage = (ev): void => {\n if (typeof ev.data === \"string\") {\n const msg = JSON.parse(ev.data) as Message<V> & { data: TDownward };\n this.onMessage(msg);\n }\n };\n }\n\n /**\n * Send JSON message to server\n * @param version - Message version\n * @param type - Message type (developer defined)\n * @param data - Message payload (typed)\n */\n sendMessage(version: V, type: string, data: TUpward): void {\n if (this.ws?.readyState === WebSocket.OPEN) {\n this.ws.send(JSON.stringify({ v: version, type, data }));\n }\n }\n\n /**\n * Send audio frame with specified encoding and sample rate\n * @param audioData - Audio data (any format: Int16Array, Uint8Array, ArrayBuffer, etc.)\n * @param version - Audio frame version\n * @param encodingId - Audio encoding ID (0-5, e.g., AudioEncoding.LINEAR16)\n * @param sampleRate - Sample rate in Hz (e.g., 16000)\n */\n sendAudio(\n audioData: ArrayBuffer | ArrayBufferView, \n version: V, \n encodingId: number,\n sampleRate: number\n ): void {\n if (!this.canSend()) return;\n\n const buffer = ArrayBuffer.isView(audioData) \n ? audioData.buffer.slice(audioData.byteOffset, audioData.byteOffset + audioData.byteLength)\n : audioData;\n\n const hdr: AudioHeader<V> = { \n v: version, \n e: encodingId,\n sr: sampleRate,\n seq: this.seq++ \n };\n this.ws.send(packHeader(hdr, buffer as ArrayBuffer, this.versionSerializer.serialize));\n }\n\n /**\n * Get current WebSocket buffer size\n */\n getBufferedAmount(): number {\n return this.ws?.bufferedAmount ?? 0;\n }\n\n /**\n * Check if local buffer is backpressured\n */\n isLocalBackpressured(): boolean {\n return this.getBufferedAmount() > this.HWM;\n }\n\n /**\n * Check if ready to send audio\n * Verifies: connection open, no local buffer pressure\n */\n canSend(): boolean {\n return this.ws?.readyState === WebSocket.OPEN && !this.isLocalBackpressured();\n }\n\n /**\n * Check if connection is open\n */\n isOpen(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n /**\n * Get current connection state\n */\n getReadyState(): number {\n return this.ws?.readyState ?? WebSocket.CLOSED;\n }\n\n /**\n * Close the WebSocket connection\n * Protected method for subclasses to implement disconnect logic\n * @param code - WebSocket close code (default: 1000 = normal closure)\n * @param reason - Human-readable close reason\n */\n protected closeConnection(code: number = 1000, reason: string = 'Client disconnect'): void {\n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n this.ws.close(code, reason);\n }\n }\n}\n", "/**\n * WebSocketAudioServer - Abstract base class for WebSocket servers\n * Handles both binary audio frames and JSON text messages\n * \n * Features:\n * - Generic version type support (number, string, etc.)\n * - Type-safe upward/downward message data\n * - Standalone mode OR attach to existing HTTP server\n * - Multiple endpoints on same HTTP server\n * - Abstract hooks for application-specific logic\n */\n\nimport { WebSocketServer, WebSocket } from \"ws\";\nimport type { Server as HTTPServer, IncomingMessage } from \"http\";\nimport {\n unpackHeader,\n numericVersionSerializer,\n type AudioHeader,\n type Message,\n type VersionSerializer\n} from \"./audio-upload-websocket-protocol.js\";\n\n/**\n * Server configuration - standalone OR attach to HTTP server\n */\nexport type ServerConfig = \n | { mode: 'standalone'; port: number }\n | { mode: 'attach'; httpServer: HTTPServer; path: string };\n\n/**\n * WebSocketAudioServer - Abstract base class for WebSocket servers\n * that handle both binary audio frames and JSON text messages\n * \n * @template V - Version type (number, string, object, etc.)\n * @template TUpward - Type of upward message data (Client -> Server)\n * @template TDownward - Type of downward message data (Server -> Client)\n * \n * @example Standalone mode (creates own HTTP server)\n * ```typescript\n * const server = new MyServer(\n * { mode: 'standalone', port: 8080 },\n * numericVersionSerializer\n * );\n * ```\n * \n * @example Attach mode (bind to existing HTTP server)\n * ```typescript\n * const httpServer = express().listen(3000);\n * const wsServer1 = new RecognitionServer(\n * { mode: 'attach', httpServer, path: '/ws/recognize' },\n * numericVersionSerializer\n * );\n * const wsServer2 = new AdminServer(\n * { mode: 'attach', httpServer, path: '/ws/admin' },\n * numericVersionSerializer\n * );\n * ```\n */\nexport abstract class WebSocketAudioServer<\n V = number, // Version type (default: number)\n TUpward = unknown, // Upward message data type\n TDownward = unknown // Downward message data type\n> {\n private wss: WebSocketServer;\n private config: ServerConfig;\n \n constructor(\n config: ServerConfig,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected versionSerializer: VersionSerializer<V> = numericVersionSerializer as any\n ) {\n this.config = config;\n \n // Create WebSocketServer based on config\n if (config.mode === 'standalone') {\n this.wss = new WebSocketServer({ port: config.port });\n console.log(`[WebSocketAudioServer] Standalone mode on port ${config.port}`);\n } else {\n this.wss = new WebSocketServer({ \n server: config.httpServer, \n path: config.path \n });\n console.log(`[WebSocketAudioServer] Attached to HTTP server at path ${config.path}`);\n }\n \n // Setup connection handler\n this.wss.on('connection', (ws: WebSocket, req: IncomingMessage) => {\n this.handleConnection(ws, req);\n });\n \n this.wss.on('error', (error) => {\n console.error('[WebSocketAudioServer] Server error:', error);\n });\n }\n\n private handleConnection(ws: WebSocket, req: IncomingMessage): void {\n // Call user hook\n this.onConnection(ws, req);\n \n // Setup message handlers\n ws.on('message', (data: Buffer, isBinary: boolean) => {\n try {\n if (isBinary) {\n // Binary frame: audio with 6-byte header\n // Convert Buffer to ArrayBuffer\n const arrayBuffer = data.buffer.slice(\n data.byteOffset, \n data.byteOffset + data.byteLength\n ) as ArrayBuffer;\n \n const { hdr, payload } = unpackHeader(\n arrayBuffer,\n this.versionSerializer.deserialize\n );\n this.onAudioFrame(ws, payload, hdr);\n } else {\n // Text frame: JSON message\n const msg = JSON.parse(data.toString()) as Message<V> & { data: TUpward };\n this.onMessage(ws, msg);\n }\n } catch (error) {\n console.error('[WebSocketAudioServer] Message handling error:', error);\n this.onMessageError(ws, error as Error);\n }\n });\n \n ws.on('close', (code: number, reason: Buffer) => {\n this.onDisconnect(ws, code, reason.toString());\n });\n \n ws.on('error', (error: Error) => {\n console.error('[WebSocketAudioServer] Client error:', error);\n this.onClientError(ws, error);\n });\n }\n\n // ========================================================================\n // Hooks -- How server reacts to upward messages and data sent from client\n // ========================================================================\n\n // ========================================================================\n // ABSTRACT HOOKS - Implement these in your subclass to handle data sent from client\n // ========================================================================\n \n /**\n * Hook: Binary audio frame arrives (with 6-byte header)\n * @param ws - WebSocket connection (unique per client)\n * @param audio - Raw audio payload (after header removed)\n * @param header - Parsed audio header (version, encoding, sequence)\n */\n protected abstract onAudioFrame(\n ws: WebSocket,\n audio: ArrayBuffer,\n header: AudioHeader<V>\n ): void;\n\n /**\n * Hook: Text JSON message arrives\n * @param ws - WebSocket connection (unique per client)\n * @param message - Parsed JSON message with typed data\n */\n protected abstract onMessage(\n ws: WebSocket,\n message: Message<V> & { data: TUpward }\n ): void;\n\n // ========================================================================\n // OPTIONAL HOOKS - Override if needed to handle client connection and disconnection\n // ========================================================================\n \n /**\n * Hook: Client connected (optional)\n * @param ws - WebSocket connection\n * @param req - HTTP upgrade request (contains headers, URL, etc.)\n */\n protected onConnection(_ws: WebSocket, _req: IncomingMessage): void {\n // Default: no-op, override in subclass if needed\n }\n\n /**\n * Hook: Client disconnected (optional)\n * @param ws - WebSocket connection\n * @param code - Close code (see WebSocketCloseCode enum)\n * @param reason - Close reason string\n */\n protected onDisconnect(_ws: WebSocket, _code: number, _reason: string): void {\n // Default: no-op, override in subclass if needed\n }\n\n /**\n * Hook: WebSocket error on client connection (optional)\n * @param ws - WebSocket connection\n * @param error - Error object\n */\n protected onClientError(_ws: WebSocket, _error: Error): void {\n // Default: no-op, override in subclass if needed\n }\n\n /**\n * Hook: Message parsing/handling error (optional, default sends error message)\n * @param ws - WebSocket connection\n * @param error - Error object\n */\n protected onMessageError(ws: WebSocket, error: Error): void {\n // Default: send error message\n this.sendMessage(ws, this.getDefaultVersion(), 'error', {\n code: 'MESSAGE_ERROR',\n message: error.message\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any);\n }\n\n /**\n * Get default version for error messages\n * Override if you need a specific default version\n */\n protected getDefaultVersion(): V {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return 1 as any; // Default to numeric 1\n }\n\n // ========================================================================\n // PUBLIC API - Use these in your hooks to send data back to the client\n // ========================================================================\n \n /**\n * Send JSON message to client\n * @param ws - WebSocket connection\n * @param version - Message version\n * @param type - Message type (developer defined)\n * @param data - Message payload (typed)\n */\n protected sendMessage(\n ws: WebSocket, \n version: V, \n type: string, \n data: TDownward\n ): void {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ v: version, type, data }));\n }\n }\n \n /**\n * Close client connection\n * @param ws - WebSocket connection\n * @param code - Close code (optional, see WebSocketCloseCode)\n * @param reason - Human-readable reason (optional)\n */\n protected closeConnection(\n ws: WebSocket, \n code?: number, \n reason?: string\n ): void {\n ws.close(code, reason);\n }\n\n /**\n * Check if connection is open\n */\n protected isOpen(ws: WebSocket): boolean {\n return ws.readyState === WebSocket.OPEN;\n }\n\n /**\n * Get all connected clients\n */\n protected getClients(): Set<WebSocket> {\n return this.wss.clients;\n }\n\n // ========================================================================\n // LIFECYCLE\n // ========================================================================\n \n /**\n * Gracefully close the server\n */\n close(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.wss.close((error) => {\n if (error) reject(error);\n else resolve();\n });\n });\n }\n}\n", "// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}", "import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;", "const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;", "import { Stage, STAGES } from '@recog/shared-types';\n\n/**\n * Base URL schema shared across service endpoint helpers.\n */\nexport type ServiceBaseUrls = {\n httpBase: string;\n wsBase: string;\n};\n\nexport type RecognitionServiceBaseUrls = ServiceBaseUrls;\nexport type RecognitionConductorBaseUrls = ServiceBaseUrls;\n\nconst KNOWN_STAGE_VALUES: Stage[] = Object.values(STAGES);\n\nexport const RECOGNITION_SERVICE_HOST_BY_STAGE: Record<Stage, string> = {\n [STAGES.LOCAL]: 'localhost:3101',\n [STAGES.DEV]: 'recognition-service-dev.volley-services.net',\n [STAGES.STAGING]: 'recognition-service-staging.volley-services.net',\n [STAGES.PRODUCTION]: 'recognition-service.volley-services.net'\n};\n\nexport const RECOGNITION_CONDUCTOR_HOST_BY_STAGE: Record<Stage, string> = {\n [STAGES.LOCAL]: 'localhost:3100',\n [STAGES.DEV]: 'recognition-conductor-dev.volley-services.net',\n [STAGES.STAGING]: 'recognition-conductor-staging.volley-services.net',\n [STAGES.PRODUCTION]: 'recognition-conductor.volley-services.net'\n};\n\nconst getProtocolsForStage = (stage: Stage): { http: 'http' | 'https'; ws: 'ws' | 'wss' } => {\n if (stage === STAGES.LOCAL) {\n // Use non-secure protocols for local development\n return { http: 'http', ws: 'ws' };\n }\n\n return { http: 'https', ws: 'wss' };\n};\n\nconst buildBaseUrls = (stage: Stage, host: string): ServiceBaseUrls => {\n const { http, ws } = getProtocolsForStage(stage);\n return {\n httpBase: `${http}://${host}`,\n wsBase: `${ws}://${host}`\n };\n};\n\n/**\n * Base URL mappings keyed by stage.\n */\nexport const RECOGNITION_SERVICE_BASES: Record<Stage, ServiceBaseUrls> =\n KNOWN_STAGE_VALUES.reduce<Record<Stage, ServiceBaseUrls>>((acc, stage) => {\n acc[stage] = buildBaseUrls(stage, RECOGNITION_SERVICE_HOST_BY_STAGE[stage]!);\n return acc;\n }, {} as Record<Stage, ServiceBaseUrls>);\n\nexport const RECOGNITION_CONDUCTOR_BASES: Record<Stage, ServiceBaseUrls> =\n KNOWN_STAGE_VALUES.reduce<Record<Stage, ServiceBaseUrls>>((acc, stage) => {\n acc[stage] = buildBaseUrls(stage, RECOGNITION_CONDUCTOR_HOST_BY_STAGE[stage]!);\n return acc;\n }, {} as Record<Stage, ServiceBaseUrls>);\n\n/**\n * Normalize arbitrary stage input into a known `Stage`, defaulting to `local`.\n */\nexport function normalizeStage(input?: Stage | string | null | undefined): Stage {\n if (typeof input !== 'string') {\n return STAGES.LOCAL;\n }\n\n const normalized = input.trim().toLowerCase();\n const match = KNOWN_STAGE_VALUES.find((stage) => stage === normalized);\n\n return match ?? STAGES.LOCAL;\n}\n\n/**\n * Resolve the recognition-service base URLs for a given stage.\n */\nexport function getRecognitionServiceBase(\n stage?: Stage | string | null | undefined\n): ServiceBaseUrls {\n const normalizedStage = normalizeStage(stage);\n return RECOGNITION_SERVICE_BASES[normalizedStage]!;\n}\n\n/**\n * Convenience helper for retrieving the HTTP base URL.\n */\nexport function getRecognitionServiceHttpBase(stage?: Stage | string | null | undefined): string {\n return getRecognitionServiceBase(stage).httpBase;\n}\n\n/**\n * Convenience helper for retrieving the WebSocket base URL.\n */\nexport function getRecognitionServiceWsBase(stage?: Stage | string | null | undefined): string {\n return getRecognitionServiceBase(stage).wsBase;\n}\n\n/**\n * Expose hostname lookup separately for callers that need raw host strings.\n */\nexport function getRecognitionServiceHost(stage?: Stage | string | null | undefined): string {\n const normalizedStage = normalizeStage(stage);\n return RECOGNITION_SERVICE_HOST_BY_STAGE[normalizedStage]!;\n}\n\n/**\n * Resolve the recognition-conductor base URLs for a given stage.\n */\nexport function getRecognitionConductorBase(\n stage?: Stage | string | null | undefined\n): ServiceBaseUrls {\n const normalizedStage = normalizeStage(stage);\n return RECOGNITION_CONDUCTOR_BASES[normalizedStage]!;\n}\n\nexport function getRecognitionConductorHttpBase(\n stage?: Stage | string | null | undefined\n): string {\n return getRecognitionConductorBase(stage).httpBase;\n}\n\nexport function getRecognitionConductorWsBase(stage?: Stage | string | null | undefined): string {\n return getRecognitionConductorBase(stage).wsBase;\n}\n\nexport function getRecognitionConductorHost(stage?: Stage | string | null | undefined): string {\n const normalizedStage = normalizeStage(stage);\n return RECOGNITION_CONDUCTOR_HOST_BY_STAGE[normalizedStage]!;\n}\n", "/**\n * URL Builder for Recognition Client\n * Handles WebSocket URL construction with query parameters\n */\n\nimport { getRecognitionServiceBase } from '@recog/shared-config';\nimport type { GameContextV1, Stage } from '@recog/shared-types';\nimport type { RecognitionCallbackUrl } from '../recognition-client.types.js';\n\nexport interface UrlBuilderConfig {\n url?: string;\n stage?: Stage | string;\n audioUtteranceId: string;\n callbackUrls?: RecognitionCallbackUrl[];\n userId?: string;\n gameSessionId?: string;\n deviceId?: string;\n accountId?: string;\n questionAnswerId?: string;\n platform?: string;\n gameContext?: GameContextV1;\n /** Standalone gameId - takes precedence over gameContext.gameId if both provided */\n gameId?: string;\n}\n\n/**\n * Build WebSocket URL with all query parameters\n * Either `url` or `stage` must be provided (or defaults to production if neither provided)\n * If both are provided, `url` takes precedence over `stage`\n */\nexport function buildWebSocketUrl(config: UrlBuilderConfig): string {\n // Determine base URL based on precedence: url > stage > default production\n let baseUrl: string;\n\n if (config.url) {\n // Explicit URL takes precedence\n baseUrl = config.url;\n } else if (config.stage) {\n // Use stage to build URL\n const stageBase = getRecognitionServiceBase(config.stage);\n baseUrl = `${stageBase.wsBase}/ws/v1/recognize`;\n } else {\n // Default to production if neither provided\n const defaultBase = getRecognitionServiceBase('production');\n baseUrl = `${defaultBase.wsBase}/ws/v1/recognize`;\n }\n\n // Build URL - add all optional identification parameters\n const url = new URL(baseUrl);\n\n // Add audioUtteranceId as query parameter (required for server to recognize it)\n url.searchParams.set('audioUtteranceId', config.audioUtteranceId);\n\n // Add callback URLs if provided (for server-side notifications)\n if (config.callbackUrls && config.callbackUrls.length > 0) {\n // Serialize as JSON for complex structure\n url.searchParams.set('callbackUrls', JSON.stringify(config.callbackUrls));\n }\n\n // Add user/session/device/account identification if provided\n if (config.userId) {\n url.searchParams.set('userId', config.userId);\n }\n if (config.gameSessionId) {\n url.searchParams.set('gameSessionId', config.gameSessionId);\n }\n if (config.deviceId) {\n url.searchParams.set('deviceId', config.deviceId);\n }\n if (config.accountId) {\n url.searchParams.set('accountId', config.accountId);\n }\n if (config.questionAnswerId) {\n url.searchParams.set('questionAnswerId', config.questionAnswerId);\n }\n if (config.platform) {\n url.searchParams.set('platform', config.platform);\n }\n\n // Add gameId - standalone gameId takes precedence over gameContext.gameId\n const gameId = config.gameId ?? config.gameContext?.gameId;\n if (gameId) {\n url.searchParams.set('gameId', gameId);\n }\n\n // Add gamePhase from gameContext if provided\n if (config.gameContext?.gamePhase) {\n url.searchParams.set('gamePhase', config.gameContext.gamePhase);\n }\n\n return url.toString();\n}", "/**\n * Audio Ring Buffer\n * Manages circular buffer for audio data with overflow detection\n */\n\nexport interface BufferedAudio {\n data: ArrayBuffer | ArrayBufferView;\n timestamp: number;\n}\n\nexport interface AudioRingBufferConfig {\n maxBufferDurationSec: number;\n chunksPerSecond: number;\n logger?: (level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any) => void;\n}\n\nexport class AudioRingBuffer {\n private buffer: BufferedAudio[] = [];\n private bufferSize: number;\n private writeIndex = 0;\n private readIndex = 0;\n private hasWrapped = false;\n private totalBufferedBytes = 0;\n private overflowCount = 0;\n private chunksBuffered = 0;\n private logger?: (level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any) => void;\n\n constructor(config: AudioRingBufferConfig) {\n this.bufferSize = config.maxBufferDurationSec * config.chunksPerSecond;\n this.buffer = new Array(this.bufferSize);\n if (config.logger) {\n this.logger = config.logger;\n }\n }\n\n /**\n * Write audio chunk to ring buffer with overflow detection\n */\n write(audioData: ArrayBuffer | ArrayBufferView): void {\n const bytes = ArrayBuffer.isView(audioData) ? audioData.byteLength : audioData.byteLength;\n\n // Write to current position\n this.buffer[this.writeIndex] = {\n data: audioData,\n timestamp: Date.now()\n };\n\n // Advance write pointer\n const nextWriteIndex = (this.writeIndex + 1) % this.bufferSize;\n\n // Detect overflow: write caught up to read\n if (nextWriteIndex === this.readIndex && this.writeIndex !== this.readIndex) {\n this.hasWrapped = true;\n this.overflowCount++;\n\n // Log buffer overflow event\n if (this.logger) {\n this.logger('debug', '[RecogSDK] Buffer overflow detected', {\n bufferSize: this.bufferSize,\n totalOverflows: this.overflowCount,\n droppedChunk: this.buffer[this.readIndex]?.timestamp\n });\n }\n\n // Move read pointer forward to make room (drop oldest)\n this.readIndex = (this.readIndex + 1) % this.bufferSize;\n }\n\n this.writeIndex = nextWriteIndex;\n this.chunksBuffered++;\n this.totalBufferedBytes += bytes;\n }\n\n /**\n * Read next chunk from buffer\n */\n read(): BufferedAudio | null {\n if (this.isEmpty()) {\n return null;\n }\n\n const chunk = this.buffer[this.readIndex];\n this.readIndex = (this.readIndex + 1) % this.bufferSize;\n return chunk || null;\n }\n\n /**\n * Read all buffered chunks without removing them\n */\n readAll(): BufferedAudio[] {\n const chunks: BufferedAudio[] = [];\n let index = this.readIndex;\n\n while (index !== this.writeIndex) {\n const chunk = this.buffer[index];\n if (chunk) {\n chunks.push(chunk);\n }\n index = (index + 1) % this.bufferSize;\n }\n\n return chunks;\n }\n\n /**\n * Flush all buffered data and advance read pointer\n */\n flush(): BufferedAudio[] {\n const chunks = this.readAll();\n this.readIndex = this.writeIndex;\n return chunks;\n }\n\n /**\n * Get count of buffered chunks\n */\n getBufferedCount(): number {\n if (this.writeIndex >= this.readIndex) {\n return this.writeIndex - this.readIndex;\n } else {\n // Wrapped around\n return this.bufferSize - this.readIndex + this.writeIndex;\n }\n }\n\n /**\n * Check if buffer is empty\n */\n isEmpty(): boolean {\n return this.readIndex === this.writeIndex;\n }\n\n /**\n * Check if buffer has overflowed\n */\n isOverflowing(): boolean {\n return this.hasWrapped;\n }\n\n /**\n * Clear the buffer and reset all counters\n * Frees memory by releasing all stored audio chunks\n */\n clear(): void {\n this.buffer = [];\n this.writeIndex = 0;\n this.readIndex = 0;\n this.hasWrapped = false;\n this.overflowCount = 0;\n this.chunksBuffered = 0;\n this.totalBufferedBytes = 0;\n\n if (this.logger) {\n this.logger('debug', '[RecogSDK] Audio buffer cleared');\n }\n }\n\n /**\n * Get buffer statistics\n */\n getStats() {\n return {\n chunksBuffered: this.chunksBuffered,\n currentBufferedChunks: this.getBufferedCount(),\n overflowCount: this.overflowCount,\n hasWrapped: this.hasWrapped,\n totalBufferedBytes: this.totalBufferedBytes\n };\n }\n}", "/**\n * Message Handler for Recognition Client\n * Routes incoming WebSocket messages to appropriate callbacks\n */\n\nimport {\n RecognitionResultTypeV1,\n ClientControlActionV1,\n type TranscriptionResultV1,\n type FunctionCallResultV1,\n type MetadataResultV1,\n type ErrorResultV1,\n type ClientControlMessageV1\n} from '@recog/shared-types';\n\nexport interface MessageHandlerCallbacks {\n onTranscript: (result: TranscriptionResultV1) => void;\n onFunctionCall: (result: FunctionCallResultV1) => void;\n onMetadata: (metadata: MetadataResultV1) => void;\n onError: (error: ErrorResultV1) => void;\n onControlMessage: (msg: ClientControlMessageV1) => void;\n logger?: (level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any) => void;\n}\n\nexport class MessageHandler {\n private firstTranscriptTime: number | null = null;\n private sessionStartTime: number | null = null;\n private callbacks: MessageHandlerCallbacks;\n\n constructor(callbacks: MessageHandlerCallbacks) {\n this.callbacks = callbacks;\n }\n\n /**\n * Set session start time for performance tracking\n */\n setSessionStartTime(time: number): void {\n this.sessionStartTime = time;\n }\n\n /**\n * Handle incoming WebSocket message\n */\n handleMessage(msg: { v: number; type: string; data: any }): void {\n // Log ALL incoming messages for debugging\n if (this.callbacks.logger) {\n this.callbacks.logger('debug', '[RecogSDK] Received WebSocket message', {\n msgType: msg.type,\n msgDataType: msg.data && typeof msg.data === 'object' && 'type' in msg.data ? msg.data.type : 'N/A',\n fullMessage: msg\n });\n }\n\n // Safely check for type in msg.data - guard against primitives\n // Log error if we receive primitive data (indicates server issue)\n if (msg.data && typeof msg.data !== 'object') {\n if (this.callbacks.logger) {\n this.callbacks.logger('error', '[RecogSDK] Received primitive msg.data from server', {\n dataType: typeof msg.data,\n data: msg.data,\n fullMessage: msg\n });\n }\n }\n\n const msgType = (msg.data && typeof msg.data === 'object' && 'type' in msg.data ? msg.data.type : undefined) || msg.type;\n const msgData = msg.data || msg;\n\n switch (msgType) {\n case RecognitionResultTypeV1.TRANSCRIPTION:\n this.handleTranscription(msgData as TranscriptionResultV1);\n break;\n\n case RecognitionResultTypeV1.FUNCTION_CALL:\n this.callbacks.onFunctionCall(msgData as FunctionCallResultV1);\n break;\n\n case RecognitionResultTypeV1.METADATA:\n this.callbacks.onMetadata(msgData as MetadataResultV1);\n break;\n\n case RecognitionResultTypeV1.ERROR:\n this.callbacks.onError(msgData as ErrorResultV1);\n break;\n\n case RecognitionResultTypeV1.CLIENT_CONTROL_MESSAGE:\n this.callbacks.onControlMessage(msgData as ClientControlMessageV1);\n break;\n\n default:\n // Unknown message type - log if logger available\n if (this.callbacks.logger) {\n this.callbacks.logger('debug', '[RecogSDK] Unknown message type', { type: msgType });\n }\n }\n }\n\n /**\n * Handle transcript message and track performance metrics\n * @param result - The transcription result from the server\n */\n private handleTranscription(result: TranscriptionResultV1): void {\n // Track time to first transcript\n if (!this.firstTranscriptTime && this.sessionStartTime) {\n this.firstTranscriptTime = Date.now();\n const timeToFirstTranscript = this.firstTranscriptTime - this.sessionStartTime;\n\n if (this.callbacks.logger) {\n this.callbacks.logger('debug', '[RecogSDK] First transcript received', {\n timeToFirstTranscriptMs: timeToFirstTranscript\n });\n }\n }\n\n this.callbacks.onTranscript(result);\n }\n\n /**\n * Get performance metrics\n */\n getMetrics() {\n return {\n sessionStartTime: this.sessionStartTime,\n firstTranscriptTime: this.firstTranscriptTime,\n timeToFirstTranscript:\n this.firstTranscriptTime && this.sessionStartTime\n ? this.firstTranscriptTime - this.sessionStartTime\n : null\n };\n }\n}", "/**\n * SDK Error Classes\n *\n * Typed error classes that extend native Error with recognition-specific metadata\n */\n\nimport { ErrorTypeV1 } from '@recog/shared-types';\n\n/**\n * Base class for all recognition SDK errors\n */\nexport class RecognitionError extends Error {\n public readonly errorType: ErrorTypeV1;\n public readonly timestamp: number;\n\n constructor(errorType: ErrorTypeV1, message: string) {\n super(message);\n this.name = 'RecognitionError';\n this.errorType = errorType;\n this.timestamp = Date.now();\n\n // Maintains proper stack trace for where error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Connection error - thrown when WebSocket connection fails after all retry attempts\n */\nexport class ConnectionError extends RecognitionError {\n public readonly attempts: number;\n public readonly url: string;\n public readonly underlyingError?: Error;\n\n constructor(message: string, attempts: number, url: string, underlyingError?: Error) {\n super(ErrorTypeV1.CONNECTION_ERROR, message);\n this.name = 'ConnectionError';\n this.attempts = attempts;\n this.url = url;\n if (underlyingError !== undefined) {\n this.underlyingError = underlyingError;\n }\n }\n}\n\n/**\n * Timeout error - thrown when operations exceed timeout limits\n */\nexport class TimeoutError extends RecognitionError {\n public readonly timeoutMs: number;\n public readonly operation: string;\n\n constructor(message: string, timeoutMs: number, operation: string) {\n super(ErrorTypeV1.TIMEOUT_ERROR, message);\n this.name = 'TimeoutError';\n this.timeoutMs = timeoutMs;\n this.operation = operation;\n }\n}\n\n/**\n * Validation error - thrown when invalid configuration or input is provided\n */\nexport class ValidationError extends RecognitionError {\n public readonly field?: string;\n public readonly expected?: string;\n public readonly received?: string;\n\n constructor(message: string, field?: string, expected?: string, received?: string) {\n super(ErrorTypeV1.VALIDATION_ERROR, message);\n this.name = 'ValidationError';\n if (field !== undefined) {\n this.field = field;\n }\n if (expected !== undefined) {\n this.expected = expected;\n }\n if (received !== undefined) {\n this.received = received;\n }\n }\n}\n", "/**\n * RealTimeTwoWayWebSocketRecognitionClient - Clean, compact SDK for real-time speech recognition\n *\n * Features:\n * - Ring buffer-based audio storage with fixed memory footprint\n * - Automatic buffering when disconnected, immediate send when connected\n * - Buffer persists after flush (for future retry/reconnection scenarios)\n * - Built on WebSocketAudioClient for robust protocol handling\n * - Simple API: connect() \u2192 sendAudio() \u2192 stopRecording()\n * - Type-safe message handling with callbacks\n * - Automatic backpressure management\n * - Overflow detection with buffer state tracking\n *\n * Example:\n * ```typescript\n * const client = new RealTimeTwoWayWebSocketRecognitionClient({\n * url: 'ws://localhost:3101/ws/v1/recognize',\n * onTranscript: (result) => console.log(result.finalTranscript),\n * onError: (error) => console.error(error),\n * maxBufferDurationSec: 60 // Ring buffer for 60 seconds\n * });\n *\n * await client.connect();\n *\n * // Send audio chunks - always stored in ring buffer, sent if connected\n * micStream.on('data', (chunk) => client.sendAudio(chunk));\n *\n * // Signal end of audio and wait for final results\n * await client.stopRecording();\n *\n * // Server will close connection after sending finals\n * // No manual cleanup needed - browser handles it\n * ```\n */\n\nimport { WebSocketAudioClient } from '@recog/websocket';\nimport {\n AudioEncoding,\n RecognitionResultTypeV1,\n ClientControlActionV1,\n RecognitionContextTypeV1,\n ControlSignalTypeV1,\n type TranscriptionResultV1,\n type FunctionCallResultV1,\n type MetadataResultV1,\n type ErrorResultV1,\n type ClientControlMessageV1,\n type ASRRequestConfig,\n type ASRRequestV1,\n type GameContextV1,\n SampleRate\n} from '@recog/shared-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ClientState } from './recognition-client.types.js';\nimport type {\n IRecognitionClient,\n IRecognitionClientStats,\n RealTimeTwoWayWebSocketRecognitionClientConfig,\n RecognitionCallbackUrl\n} from './recognition-client.types.js';\nimport { buildWebSocketUrl } from './utils/url-builder.js';\nimport { AudioRingBuffer } from './utils/audio-ring-buffer.js';\nimport { MessageHandler } from './utils/message-handler.js';\nimport { ConnectionError } from './errors.js';\n\n// ============================================================================\n// UTILITIES\n// ============================================================================\n\n/**\n * Check if a WebSocket close code indicates normal closure\n * @param code - WebSocket close code\n * @returns true if the disconnection was normal/expected, false if it was an error\n */\nexport function isNormalDisconnection(code: number): boolean {\n return code === 1000; // 1000 is the only \"normal\" close code\n}\n\n/**\n * Convert Blob to ArrayBuffer with Smart TV compatibility\n *\n * Browser Compatibility:\n * - blob.arrayBuffer(): Newer TV\n * - FileReader: All browsers, including older Smart TVs\n *\n * @see https://developer.samsung.com/smarttv/develop/specifications/web-engine-specifications.html\n * @param blob - Blob to convert\n * @returns Promise resolving to ArrayBuffer\n */\nasync function blobToArrayBuffer(blob: Blob): Promise<ArrayBuffer> {\n // Modern approach (Chrome 76+, Safari 14+, Tizen 2020+, webOS 5.0+)\n if (typeof blob.arrayBuffer === 'function') {\n return await blob.arrayBuffer();\n }\n\n // Fallback for older Smart TVs (Tizen 2018-2019, webOS 3.0-4.x)\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (): void => resolve(reader.result as ArrayBuffer);\n reader.onerror = (): void => reject(reader.error);\n reader.readAsArrayBuffer(blob);\n });\n}\n\n// ============================================================================\n// TYPE DEFINITIONS\n// ============================================================================\n\n/**\n * Re-export TranscriptionResultV1 as TranscriptionResult for backward compatibility\n */\nexport type TranscriptionResult = TranscriptionResultV1;\n\n// Re-export config interface from types file for backward compatibility\nexport type { RealTimeTwoWayWebSocketRecognitionClientConfig } from './recognition-client.types.js';\n\n/**\n * Internal config with processed values and defaults\n */\ninterface InternalConfig {\n url: string;\n readonly audioUtteranceId: string; // Immutable - ensures one audio session per client instance\n asrRequestConfig?: ASRRequestConfig;\n gameContext?: GameContextV1;\n callbackUrls?: RecognitionCallbackUrl[];\n onTranscript: (result: TranscriptionResultV1) => void;\n onFunctionCall: (result: FunctionCallResultV1) => void;\n onMetadata: (metadata: MetadataResultV1) => void;\n onError: (error: ErrorResultV1) => void;\n onConnected: () => void;\n onDisconnected: (code: number, reason: string) => void;\n highWaterMark: number;\n lowWaterMark: number;\n maxBufferDurationSec: number;\n chunksPerSecond: number;\n connectionRetry: {\n maxAttempts: number;\n delayMs: number;\n };\n logger?: (level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any) => void;\n}\n\n// ============================================================================\n// RECOGNITION CLIENT\n// ============================================================================\n\n/**\n * RealTimeTwoWayWebSocketRecognitionClient - SDK-level client for real-time speech recognition\n *\n * Implements IRecognitionClient interface for dependency injection and testing.\n * Extends WebSocketAudioClient with local audio buffering and simple callback-based API.\n */\nexport class RealTimeTwoWayWebSocketRecognitionClient\n extends WebSocketAudioClient<number, any, any>\n implements IRecognitionClient\n{\n private static readonly PROTOCOL_VERSION = 1;\n\n private config: InternalConfig;\n private audioBuffer: AudioRingBuffer;\n private messageHandler: MessageHandler;\n private state: ClientState = ClientState.INITIAL;\n private connectionPromise: Promise<void> | undefined;\n\n // Debug control (internal state, controlled by debugCommand in ASRRequest)\n private isDebugLogEnabled = false;\n\n // Stats\n private audioBytesSent = 0;\n private audioChunksSent = 0;\n private audioStatsLogInterval = 100;\n private lastAudioStatsLog = 0;\n\n constructor(config: RealTimeTwoWayWebSocketRecognitionClientConfig) {\n // Generate UUID v4 for audioUtteranceId if not provided\n const audioUtteranceId = config.audioUtteranceId || uuidv4();\n\n // Build WebSocket URL with query parameters\n // Precedence: url > stage > default production\n const url = buildWebSocketUrl({\n audioUtteranceId,\n ...(config.url && { url: config.url }),\n ...(config.stage && { stage: config.stage }),\n ...(config.callbackUrls && { callbackUrls: config.callbackUrls }),\n ...(config.userId && { userId: config.userId }),\n ...(config.gameSessionId && { gameSessionId: config.gameSessionId }),\n ...(config.deviceId && { deviceId: config.deviceId }),\n ...(config.accountId && { accountId: config.accountId }),\n ...(config.questionAnswerId && { questionAnswerId: config.questionAnswerId }),\n ...(config.platform && { platform: config.platform }),\n ...(config.gameContext && { gameContext: config.gameContext }),\n ...(config.gameId && { gameId: config.gameId })\n });\n\n // Initialize base WebSocketAudioClient\n super({\n url: url,\n highWM: config.highWaterMark ?? 512_000,\n lowWM: config.lowWaterMark ?? 128_000\n });\n\n // Process retry config with defaults and validation\n const retryConfig = config.connectionRetry || {};\n const maxAttempts = Math.max(1, Math.min(5, retryConfig.maxAttempts ?? 4)); // Default: 4 attempts (3 retries), clamp 1-5\n const delayMs = retryConfig.delayMs ?? 200; // Fast retry for short audio sessions\n\n // Process config with defaults\n this.config = {\n url,\n audioUtteranceId,\n ...(config.asrRequestConfig && { asrRequestConfig: config.asrRequestConfig }),\n ...(config.gameContext && { gameContext: config.gameContext }),\n ...(config.callbackUrls && { callbackUrls: config.callbackUrls }),\n onTranscript: config.onTranscript || (() => {}),\n onFunctionCall: config.onFunctionCall || (() => {}),\n onMetadata: config.onMetadata || (() => {}),\n onError: config.onError || (() => {}),\n onConnected: config.onConnected || (() => {}),\n onDisconnected: config.onDisconnected || (() => {}),\n highWaterMark: config.highWaterMark ?? 512_000,\n lowWaterMark: config.lowWaterMark ?? 128_000,\n maxBufferDurationSec: config.maxBufferDurationSec ?? 60,\n chunksPerSecond: config.chunksPerSecond ?? 100,\n connectionRetry: {\n maxAttempts,\n delayMs\n },\n ...(config.logger && { logger: config.logger })\n };\n\n // Initialize audio buffer\n this.audioBuffer = new AudioRingBuffer({\n maxBufferDurationSec: this.config.maxBufferDurationSec,\n chunksPerSecond: this.config.chunksPerSecond,\n ...(this.config.logger && { logger: this.config.logger })\n });\n\n // Initialize message handler\n this.messageHandler = new MessageHandler({\n onTranscript: this.config.onTranscript,\n onFunctionCall: this.config.onFunctionCall,\n onMetadata: this.config.onMetadata,\n onError: this.config.onError,\n onControlMessage: this.handleControlMessage.bind(this),\n ...(this.config.logger && { logger: this.config.logger })\n });\n }\n\n // ==========================================================================\n // PRIVATE HELPERS\n // ==========================================================================\n\n /**\n * Internal logging helper - only logs if a logger was provided in config\n * Debug logs are additionally gated by isDebugLogEnabled flag\n * @param level - Log level: debug, info, warn, or error\n * @param message - Message to log\n * @param data - Optional additional data to log\n */\n private log(level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any): void {\n // Skip debug logs if debug logging is not enabled\n if (level === 'debug' && !this.isDebugLogEnabled) {\n return;\n }\n\n if (this.config.logger) {\n this.config.logger(level, `[RecogSDK] ${message}`, data);\n }\n }\n\n /**\n * Clean up internal resources to free memory\n * Called when connection closes (normally or abnormally)\n */\n private cleanup(): void {\n this.log('debug', 'Cleaning up resources');\n\n // Clear audio buffer to free memory\n this.audioBuffer.clear();\n\n // Reset stats\n this.audioBytesSent = 0;\n this.audioChunksSent = 0;\n this.lastAudioStatsLog = 0;\n\n // Clear connection promise so new connections can be made\n this.connectionPromise = undefined;\n }\n\n // ==========================================================================\n // PUBLIC API\n // ==========================================================================\n\n override async connect(): Promise<void> {\n // FIRST: Prevent concurrent connection attempts - return existing promise if connecting\n if (this.connectionPromise) {\n this.log('debug', 'Returning existing connection promise (already connecting)', {\n state: this.state\n });\n return this.connectionPromise;\n }\n\n // SECOND: Check state machine - prevent connections in wrong states\n if (\n this.state !== ClientState.INITIAL &&\n this.state !== ClientState.FAILED &&\n this.state !== ClientState.STOPPED\n ) {\n this.log('debug', 'Already connected or in wrong state', {\n state: this.state\n });\n // If we're already connected/ready, return resolved promise\n return Promise.resolve();\n }\n\n // THIRD: Create connection promise with retry logic\n // Store the promise IMMEDIATELY to prevent concurrent attempts\n this.connectionPromise = this.connectWithRetry();\n\n return this.connectionPromise;\n }\n\n /**\n * Attempt to connect with retry logic\n * Only retries on initial connection establishment, not mid-stream interruptions\n */\n private async connectWithRetry(): Promise<void> {\n const { maxAttempts, delayMs } = this.config.connectionRetry;\n const connectionTimeout = 10000; // 10 second timeout per attempt\n\n // TODO: Consider implementing error-code-based retry strategy\n // - Retry on 503 (Service Unavailable) with longer delays\n // - Don't retry on 401 (Unauthorized) or 400 (Bad Request)\n // - Requires extracting HTTP status from WebSocket connection error\n // For now: Simple retry for all connection failures\n\n let lastError: Error | undefined;\n\n // Store original handlers once (not per-attempt to avoid nested wrappers)\n // IMPORTANT: Save the bound protected methods (they contain the real logic)!\n // The protected onConnected() method sends ASRRequest and then calls config callback\n // The protected onError() method converts Event to ErrorResultV1 and calls config callback\n const originalOnConnected = this.onConnected.bind(this);\n const originalOnError = this.onError.bind(this);\n\n try {\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n // Use debug for first attempt (usually succeeds), info for retries\n const attemptLogLevel = attempt === 1 ? 'debug' : 'info';\n this.log(attemptLogLevel, `Connection attempt ${attempt}/${maxAttempts}`, {\n url: this.config.url,\n delayMs: attempt > 1 ? delayMs : 0\n });\n\n this.state = ClientState.CONNECTING;\n const connectionStartTime = Date.now();\n\n try {\n // Create promise for this single attempt with timeout\n await new Promise<void>((resolve, reject) => {\n let settled = false; // Guard against late callbacks for this attempt\n\n const timeout = setTimeout(() => {\n if (settled) return;\n settled = true;\n this.log('warn', 'Connection timeout', { timeout: connectionTimeout, attempt });\n this.state = ClientState.FAILED;\n reject(new Error(`Connection timeout after ${connectionTimeout}ms`));\n }, connectionTimeout);\n\n // One-shot handlers for this attempt\n this.onConnected = (): void => {\n if (settled) return; // Ignore late callback\n settled = true;\n clearTimeout(timeout);\n\n const connectionTime = Date.now() - connectionStartTime;\n this.log('debug', 'Connection established successfully', {\n connectionTimeMs: connectionTime,\n url: this.config.url,\n attempt\n });\n this.state = ClientState.CONNECTED;\n\n // Call original handler\n originalOnConnected();\n resolve();\n };\n\n this.onError = (error): void => {\n if (settled) return; // Ignore late callback\n settled = true;\n clearTimeout(timeout);\n\n this.log('warn', 'Connection error', { error, attempt });\n this.state = ClientState.FAILED;\n\n // Don't call originalOnError - it expects ErrorResultV1, not WebSocket Event\n // Connection errors are handled by throwing ConnectionError after retry exhaustion\n reject(error);\n };\n\n // Start the connection attempt\n super.connect();\n });\n\n // Success! Connection established\n const successLogLevel = attempt === 1 ? 'debug' : 'info';\n this.log(successLogLevel, `Connection successful on attempt ${attempt}`, {\n totalAttempts: attempt\n });\n return; // Success - exit retry loop\n\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < maxAttempts) {\n // Not the last attempt - wait before retry\n // Use info for first 2 retries (attempts 2-3), warn for 3rd retry (attempt 4)\n const logLevel = attempt < 3 ? 'info' : 'warn';\n this.log(logLevel, `Connection attempt ${attempt} failed, retrying after ${delayMs}ms`, {\n error: lastError.message,\n nextAttempt: attempt + 1\n });\n\n // Reset state to allow retry (but DON'T clear connectionPromise - maintains concurrency guard)\n this.state = ClientState.INITIAL;\n\n // Wait before next attempt\n await new Promise(resolve => setTimeout(resolve, delayMs));\n } else {\n // Last attempt failed - all retries exhausted\n this.log('warn', `All ${maxAttempts} connection attempts failed`, {\n error: lastError.message\n });\n }\n }\n }\n\n // All retries exhausted - throw typed ConnectionError\n throw new ConnectionError(\n `Failed to establish connection after ${maxAttempts} attempts`,\n maxAttempts,\n this.config.url,\n lastError\n );\n } finally {\n // Restore original protected method handlers\n this.onConnected = originalOnConnected;\n this.onError = originalOnError;\n \n // Clear connectionPromise only after entire retry sequence completes (success or failure)\n this.connectionPromise = undefined;\n }\n }\n\n override sendAudio(audioData: ArrayBuffer | ArrayBufferView | Blob): void {\n // Handle Blob by converting to ArrayBuffer asynchronously\n if (audioData instanceof Blob) {\n blobToArrayBuffer(audioData)\n .then((arrayBuffer) => {\n this.sendAudioInternal(arrayBuffer);\n })\n .catch((error) => {\n this.log('error', 'Failed to convert Blob to ArrayBuffer', error);\n });\n return;\n }\n\n // Handle ArrayBuffer and ArrayBufferView synchronously\n this.sendAudioInternal(audioData);\n }\n\n private sendAudioInternal(audioData: ArrayBuffer | ArrayBufferView): void {\n const bytes = ArrayBuffer.isView(audioData) ? audioData.byteLength : audioData.byteLength;\n if (bytes === 0) return;\n\n // BACKPRESSURE HINT: Return false or throw if audioBuffer.write() returns false (overflow)\n // Caller should pause audio capture until buffer has space (check isBufferOverflowing())\n\n // Always write to ring buffer\n this.audioBuffer.write(audioData);\n\n // Send immediately if ready and not backpressured\n if (this.state === ClientState.READY && !super.isLocalBackpressured()) {\n this.log('debug', 'Sending audio immediately', { bytes });\n this.sendAudioNow(audioData);\n this.audioBuffer.read(); // Remove from buffer since we sent it\n } else {\n this.log('debug', 'Buffering audio', {\n bytes,\n state: this.state,\n backpressured: super.isLocalBackpressured()\n });\n }\n\n // Log audio stats periodically (only if debug logging is enabled)\n if (this.isDebugLogEnabled) {\n const totalChunks = this.audioChunksSent + this.audioBuffer.getStats().chunksBuffered;\n if (totalChunks - this.lastAudioStatsLog >= this.audioStatsLogInterval) {\n const stats = this.audioBuffer.getStats();\n this.log('debug', 'Audio statistics', {\n totalBytesSent: this.audioBytesSent,\n totalChunksSent: this.audioChunksSent,\n ...stats\n });\n this.lastAudioStatsLog = totalChunks;\n }\n }\n }\n\n /**\n * Only active ehwne client is in READY state. otherwise it will return immediately.\n * @returns Promise that resolves when the recording is stopped\n */\n\n async stopRecording(): Promise<void> {\n if (this.state !== ClientState.READY) {\n this.log('warn', 'stopRecording called but not in READY state', { state: this.state });\n return;\n }\n\n this.log('debug', 'Stopping recording');\n this.state = ClientState.STOPPING;\n\n super.sendMessage(RealTimeTwoWayWebSocketRecognitionClient.PROTOCOL_VERSION, 'message', {\n type: RecognitionContextTypeV1.CONTROL_SIGNAL,\n signal: ControlSignalTypeV1.STOP_RECORDING\n });\n\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n this.state = ClientState.STOPPED;\n resolve();\n }, 5000);\n\n const original = this.config.onTranscript;\n this.config.onTranscript = (result): void => {\n original(result);\n if (result.is_finished) {\n clearTimeout(timeout);\n this.state = ClientState.STOPPED;\n resolve();\n }\n };\n\n // CRITICAL: Update MessageHandler's callback to use the wrapped version\n // Otherwise it will keep calling the original and never detect is_finished\n (this.messageHandler as any).callbacks.onTranscript = this.config.onTranscript;\n });\n }\n\n stopAbnormally(): void {\n // Guard: If already in terminal state, do nothing\n if (this.state === ClientState.STOPPED || this.state === ClientState.FAILED) {\n this.log('debug', 'stopAbnormally called but already in terminal state', { state: this.state });\n return;\n }\n\n this.log('warn', 'Abnormal stop requested - closing connection immediately', { state: this.state });\n\n // Update state to STOPPED (skip STOPPING)\n this.state = ClientState.STOPPED;\n\n // Clean up resources\n this.cleanup();\n\n // Close WebSocket connection immediately\n // Code 1000 = Normal Closure (even though abnormal for us, it's normal for WebSocket spec)\n // Type assertion needed because closeConnection is a newly added protected method\n (this as any).closeConnection(1000, 'Client abnormal stop');\n\n // Note: onDisconnected will be called by WebSocket close event\n // which will call cleanup again (idempotent) and trigger onDisconnected callback\n }\n\n getAudioUtteranceId(): string {\n return this.config.audioUtteranceId;\n }\n\n getUrl(): string {\n return this.config.url;\n }\n\n getState(): ClientState {\n return this.state;\n }\n\n isConnected(): boolean {\n return this.state === ClientState.READY;\n }\n\n isConnecting(): boolean {\n return this.state === ClientState.CONNECTING;\n }\n\n isStopping(): boolean {\n return this.state === ClientState.STOPPING;\n }\n\n isTranscriptionFinished(): boolean {\n return this.state === ClientState.STOPPED;\n }\n\n isBufferOverflowing(): boolean {\n return this.audioBuffer.isOverflowing();\n }\n\n getStats(): IRecognitionClientStats {\n const bufferStats = this.audioBuffer.getStats();\n return {\n audioBytesSent: this.audioBytesSent,\n audioChunksSent: this.audioChunksSent,\n audioChunksBuffered: bufferStats.chunksBuffered,\n bufferOverflowCount: bufferStats.overflowCount,\n currentBufferedChunks: bufferStats.currentBufferedChunks,\n hasWrapped: bufferStats.hasWrapped\n };\n }\n\n // ==========================================================================\n // WEBSOCKET HOOKS (from WebSocketAudioClient)\n // ==========================================================================\n\n protected onConnected(): void {\n this.log('debug', 'WebSocket onConnected callback');\n\n // Send ASRRequest with configuration (if provided)\n if (this.config.asrRequestConfig) {\n // Extract debugCommand if present (with type safety for new field)\n const debugCommand = (this.config.asrRequestConfig as any).debugCommand;\n if (debugCommand?.enableDebugLog) {\n this.isDebugLogEnabled = true;\n this.log('debug', 'Debug logging enabled via debugCommand');\n }\n\n // Only generate debug log data if debug logging is enabled\n if (this.isDebugLogEnabled) {\n this.log('debug', 'Sending ASR request', this.config.asrRequestConfig);\n }\n\n // Extract fallbackModels if present\n const fallbackModels = (this.config.asrRequestConfig as any).fallbackModels;\n\n const asrRequest: ASRRequestV1 = {\n type: RecognitionContextTypeV1.ASR_REQUEST,\n audioUtteranceId: this.config.audioUtteranceId,\n provider: this.config.asrRequestConfig.provider.toString(),\n model: this.config.asrRequestConfig.model,\n language: this.config.asrRequestConfig.language?.toString() || 'en',\n sampleRate:\n typeof this.config.asrRequestConfig.sampleRate === 'number'\n ? this.config.asrRequestConfig.sampleRate\n : SampleRate.RATE_16000,\n encoding:\n typeof this.config.asrRequestConfig.encoding === 'number'\n ? this.config.asrRequestConfig.encoding\n : AudioEncoding.LINEAR16,\n interimResults: this.config.asrRequestConfig.interimResults ?? false,\n // Auto-enable useContext if gameContext is provided, or use explicit value if set\n useContext: this.config.asrRequestConfig.useContext ?? !!this.config.gameContext,\n // Include finalTranscriptStability if provided (it's already a string enum)\n ...(this.config.asrRequestConfig.finalTranscriptStability && {\n finalTranscriptStability: this.config.asrRequestConfig.finalTranscriptStability\n }),\n // Include fallbackModels if provided (for circuit breaker fallback)\n ...(fallbackModels && { fallbackModels }),\n ...(debugCommand && { debugCommand })\n };\n\n super.sendMessage(\n RealTimeTwoWayWebSocketRecognitionClient.PROTOCOL_VERSION,\n 'message',\n asrRequest\n );\n }\n\n // Send GameContext if provided\n if (this.config.gameContext) {\n // Only pass gameContext object to log if debug logging is enabled\n if (this.isDebugLogEnabled) {\n this.log('debug', 'Sending game context', this.config.gameContext);\n }\n super.sendMessage(\n RealTimeTwoWayWebSocketRecognitionClient.PROTOCOL_VERSION,\n 'message',\n this.config.gameContext\n );\n }\n\n this.log('debug', 'Waiting for server ready signal');\n this.config.onConnected();\n }\n\n protected onDisconnected(code: number, reason: string): void {\n // DIAGNOSTIC: Enhanced logging for disconnections\n const closeCodeDescription = this.getCloseCodeDescription(code);\n const is1006 = code === 1006;\n\n this.log('debug', '[DIAGNOSTIC] WebSocket disconnected', {\n code,\n codeDescription: closeCodeDescription,\n reason: reason || '(empty)',\n previousState: this.state,\n is1006Abnormal: is1006,\n audioChunksSent: this.audioChunksSent,\n audioBytesSent: this.audioBytesSent,\n bufferStats: this.audioBuffer.getStats()\n });\n\n // Update state based on disconnection type\n if (this.state === ClientState.STOPPING) {\n this.state = ClientState.STOPPED;\n } else if (\n this.state === ClientState.CONNECTED ||\n this.state === ClientState.READY ||\n this.state === ClientState.CONNECTING\n ) {\n this.log('error', '[DIAGNOSTIC] Unexpected disconnection', {\n code,\n codeDescription: closeCodeDescription,\n reason: reason || '(empty)',\n is1006: is1006,\n possibleCauses: is1006 ? [\n 'Network connection lost',\n 'Server process crashed',\n 'Provider (Deepgram/AssemblyAI) WebSocket closed abnormally',\n 'Firewall/proxy terminated connection',\n 'Browser/tab suspended (mobile)'\n ] : []\n });\n this.state = ClientState.FAILED;\n }\n\n // Clean up memory proactively when connection closes\n this.cleanup();\n\n this.config.onDisconnected(code, reason);\n }\n\n /**\n * Get human-readable description for WebSocket close code\n */\n private getCloseCodeDescription(code: number): string {\n const descriptions: Record<number, string> = {\n 1000: 'Normal Closure',\n 1001: 'Going Away',\n 1002: 'Protocol Error',\n 1003: 'Unsupported Data',\n 1005: 'No Status Received',\n 1006: 'Abnormal Closure (no close frame received)',\n 1007: 'Invalid Frame Payload',\n 1008: 'Policy Violation',\n 1009: 'Message Too Big',\n 1010: 'Mandatory Extension',\n 1011: 'Internal Server Error',\n 1012: 'Service Restart',\n 1013: 'Try Again Later',\n 4000: 'Auth Required',\n 4001: 'Auth Failed',\n 4002: 'Rate Limit Exceeded',\n 4003: 'Invalid Session',\n 4004: 'Session Expired'\n };\n return descriptions[code] || `Unknown (${code})`;\n }\n\n protected onError(error: Event): void {\n this.state = ClientState.FAILED;\n\n const errorResult: ErrorResultV1 = {\n type: RecognitionResultTypeV1.ERROR,\n audioUtteranceId: '',\n message: 'WebSocket error',\n description: error.type || 'Connection error'\n };\n this.config.onError(errorResult);\n }\n\n protected override onMessage(msg: { v: number; type: string; data: any }): void {\n this.messageHandler.handleMessage(msg);\n }\n\n // ==========================================================================\n // INTERNAL HELPERS\n // ==========================================================================\n\n /**\n * Handle control messages from server\n * @param msg - Control message containing server actions\n */\n private handleControlMessage(msg: ClientControlMessageV1): void {\n switch (msg.action) {\n case ClientControlActionV1.READY_FOR_UPLOADING_RECORDING: {\n this.log('debug', 'Server ready for audio upload');\n this.state = ClientState.READY;\n this.messageHandler.setSessionStartTime(Date.now());\n\n // Flush buffered audio now that server is ready\n const bufferedChunks = this.audioBuffer.flush();\n if (bufferedChunks.length > 0) {\n this.log('debug', 'Flushing buffered audio', { chunks: bufferedChunks.length });\n bufferedChunks.forEach((chunk) => this.sendAudioNow(chunk.data));\n }\n break;\n }\n\n case ClientControlActionV1.STOP_RECORDING:\n this.log('debug', 'Received stop recording signal from server');\n break;\n\n default:\n this.log('warn', 'Unknown control action', { action: msg.action });\n }\n }\n\n /**\n * Send audio immediately to the server (without buffering)\n * @param audioData - Audio data to send\n */\n private sendAudioNow(audioData: ArrayBuffer | ArrayBufferView): void {\n const byteLength = ArrayBuffer.isView(audioData)\n ? audioData.byteLength\n : audioData.byteLength;\n\n const encodingId = (this.config.asrRequestConfig?.encoding ||\n AudioEncoding.LINEAR16) as AudioEncoding;\n\n const sampleRate =\n typeof this.config.asrRequestConfig?.sampleRate === 'number'\n ? this.config.asrRequestConfig.sampleRate\n : SampleRate.RATE_16000;\n\n super.sendAudio(\n audioData,\n RealTimeTwoWayWebSocketRecognitionClient.PROTOCOL_VERSION,\n encodingId,\n sampleRate\n );\n\n this.audioBytesSent += byteLength;\n this.audioChunksSent++;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["util", "objectUtil", "errorUtil", "errorMap", "ctx", "result", "issues", "elements", "processed", "ZodFirstPartyTypeKind", "RecognitionProvider", "RecognitionMode", "ASRApiType", "DeepgramModel", "GoogleModel", "FireworksModel", "ElevenLabsModel", "OpenAIRealtimeModel", "RecognitionResultTypeV1", "TranscriptOutcomeType", "ErrorTypeV1", "ClientControlActionV1", "ProviderMessageType", "RecognitionContextTypeV1", "ControlSignalTypeV1", "AudioFormat", "AudioEncoding", "SampleRate", "Language", "FinalTranscriptStability", "PlumbingType", "GameId", "GeminiModel", "GeminiApiVersion", "OpenAIModel", "StatsIncrementType", "QuotaPriority", "WebSocketCloseCode", "WebSocket"]
|
|
7
|
+
}
|