{"version":3,"file":"polling-helpers-CFuSt2O5.mjs","names":["SECONDS_PER_MINUTE","malformed","makeSpec"],"sources":["../src/resources/luau-execution/capacity-error.ts","../src/domains/cloud-v2/luau-execution-task-logs/builders.ts","../src/domains/cloud-v2/luau-execution-task-logs/operations.ts","../src/domains/cloud-v2/luau-execution-task-logs/parsers.ts","../src/domains/cloud-v2/luau-execution-task-logs/specs.ts","../src/domains/cloud-v2/luau-execution-tasks/builders.ts","../src/domains/cloud-v2/luau-execution-tasks/operations.ts","../src/domains/cloud-v2/luau-execution-tasks/parsers.ts","../src/domains/cloud-v2/luau-execution-tasks/specs.ts","../src/resources/luau-execution/polling.ts","../src/resources/luau-execution/capacity-admission.ts","../src/resources/luau-execution/polling-helpers.ts"],"sourcesContent":["import type {\n\tLuauExecutionTaskRef,\n\tSubmitAtHeadParameters,\n\tSubmitAtVersionParameters,\n} from \"../../domains/cloud-v2/luau-execution-tasks/types.ts\";\nimport { OpenCloudError } from \"../../errors/base.ts\";\nimport { RateLimitError } from \"../../errors/rate-limit.ts\";\n\nconst UUID_PATTERN = \"[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\";\n\n/**\n * A Luau task submission refused because validated tasks occupy the target\n * place's execution capacity.\n *\n * @example\n *\n * ```ts\n * import { LuauExecutionCapacityError } from \"@bedrock-rbx/ocale/luau-execution\";\n *\n * const error = new LuauExecutionCapacityError([{\n *     placeId: \"456\",\n *     sessionId: \"11111111-1111-4111-8111-111111111111\",\n *     taskId: \"22222222-2222-4222-8222-222222222222\",\n *     universeId: \"123\",\n *     versionId: \"789\",\n * }]);\n * expect(error.blockers).toHaveLength(1);\n * ```\n *\n * @since 0.3.2\n */\nexport class LuauExecutionCapacityError extends OpenCloudError {\n\t/** Validated task references reported as occupying the target place. */\n\tpublic readonly blockers: ReadonlyArray<LuauExecutionTaskRef>;\n\tpublic override readonly name = \"LuauExecutionCapacityError\";\n\n\t/**\n\t * Creates a capacity failure from validated blocker references.\n\t *\n\t * @param blockers - Tasks reported as occupying the submitted place.\n\t */\n\tconstructor(blockers: ReadonlyArray<LuauExecutionTaskRef>) {\n\t\tsuper(\"Luau execution capacity is occupied\", { code: \"RESOURCE_EXHAUSTED\" });\n\t\tthis.blockers = Object.freeze(blockers.map((blocker) => Object.freeze({ ...blocker })));\n\t}\n}\n\n/**\n * Builds the identity key shared by capacity blocker collections.\n *\n * @param ref - Luau task reference to identify.\n * @returns The version, session, and task identity components.\n */\nexport function luauTaskRefKey(ref: LuauExecutionTaskRef): string {\n\treturn `${ref.versionId}/${ref.sessionId}/${ref.taskId}`;\n}\n\n/**\n * Converts a positively identified Luau capacity response into its typed\n * error.\n *\n * @param error - The response error to inspect.\n * @param parameters - The submitted target used to validate blocker refs.\n * @returns A typed capacity error, or `undefined` without positive evidence.\n */\nexport function capacityErrorFrom(\n\terror: OpenCloudError,\n\tparameters: SubmitAtHeadParameters | SubmitAtVersionParameters,\n): LuauExecutionCapacityError | undefined {\n\tif (!(error instanceof RateLimitError) || error.code !== \"RESOURCE_EXHAUSTED\") {\n\t\treturn undefined;\n\t}\n\n\tconst message = capacityMessage(error.details);\n\tif (message === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst blockers = blockerRefsFrom(message, parameters);\n\treturn blockers.length === 0 ? undefined : new LuauExecutionCapacityError(blockers);\n}\n\nfunction capacityMessage(details: JSONValue | undefined): string | undefined {\n\tif (details === null || typeof details !== \"object\" || Array.isArray(details)) {\n\t\treturn undefined;\n\t}\n\n\tconst code = Reflect.get(details, \"code\");\n\tconst message = Reflect.get(details, \"message\");\n\treturn code === \"RESOURCE_EXHAUSTED\" && typeof message === \"string\" ? message : undefined;\n}\n\nfunction escapeRegExp(value: string): string {\n\treturn value.replace(/[.*+?^${}()|[\\]\\\\]/gu, \"\\\\$&\");\n}\n\nfunction compareTaskRefs(left: LuauExecutionTaskRef, right: LuauExecutionTaskRef): number {\n\treturn luauTaskRefKey(left).localeCompare(luauTaskRefKey(right));\n}\n\nfunction blockerRefsFrom(\n\tmessage: string,\n\tparameters: SubmitAtHeadParameters | SubmitAtVersionParameters,\n): ReadonlyArray<LuauExecutionTaskRef> {\n\tconst universeId = escapeRegExp(parameters.universeId);\n\tconst placeId = escapeRegExp(parameters.placeId);\n\tconst pattern = new RegExp(\n\t\t`universes/(${universeId})/places/(${placeId})/versions/([1-9][0-9]*)/luau-execution-sessions/(${UUID_PATTERN})/tasks/(${UUID_PATTERN})(?=$|[^A-Za-z0-9_-])`,\n\t\t\"giu\",\n\t);\n\tconst unique = new Map<string, LuauExecutionTaskRef>();\n\tfor (const match of message.matchAll(pattern)) {\n\t\tconst matchedUniverseId = String(match[1]);\n\t\tconst matchedPlaceId = String(match[2]);\n\t\tconst versionId = String(match[3]);\n\t\tconst sessionId = String(match[4]);\n\t\tconst taskId = String(match[5]);\n\n\t\tconst ref = Object.freeze({\n\t\t\tplaceId: matchedPlaceId,\n\t\t\tsessionId,\n\t\t\ttaskId,\n\t\t\tuniverseId: matchedUniverseId,\n\t\t\tversionId,\n\t\t});\n\t\tunique.set(luauTaskRefKey(ref), ref);\n\t}\n\n\treturn Object.freeze([...unique.values()].toSorted(compareTaskRefs));\n}\n","import type { HttpRequest } from \"../../../client/types.ts\";\nimport { ValidationError } from \"../../../errors/validation.ts\";\nimport type { Result } from \"../../../types.ts\";\nimport type { ListLogsParameters } from \"./types.ts\";\n\n/**\n * Builds a `GET` request for the Open Cloud \"list Luau execution session\n * task logs\" endpoint. The endpoint requires the maximal x-aep-resource\n * path shape (universe, place, version, session, task), so the supplied\n * ref must include `versionId` and `sessionId`; refs extracted from the\n * narrower path formats are rejected with a {@link ValidationError}.\n *\n * The `view` query parameter is hard-coded to `STRUCTURED` so callers\n * always receive typed structured messages. No public `view` parameter\n * is exposed.\n *\n * @param parameters - Task ref, and optional `pageSize` and `pageToken`\n *   pagination controls.\n * @returns A success result wrapping the request, or a\n *   {@link ValidationError} when the ref is missing `versionId` or\n *   `sessionId`.\n */\nexport function buildListLogsRequest({\n\tpageSize,\n\tpageToken,\n\tref,\n}: ListLogsParameters): Result<HttpRequest, ValidationError> {\n\tconst { placeId, sessionId, taskId, universeId, versionId } = ref;\n\n\tif (versionId === undefined) {\n\t\treturn {\n\t\t\terr: new ValidationError(\"Task ref is missing versionId; cannot list logs\", {\n\t\t\t\tcode: \"incomplete_ref\",\n\t\t\t}),\n\t\t\tsuccess: false,\n\t\t};\n\t}\n\n\tif (sessionId === undefined) {\n\t\treturn {\n\t\t\terr: new ValidationError(\"Task ref is missing sessionId; cannot list logs\", {\n\t\t\t\tcode: \"incomplete_ref\",\n\t\t\t}),\n\t\t\tsuccess: false,\n\t\t};\n\t}\n\n\tconst base = `/cloud/v2/universes/${universeId}/places/${placeId}/versions/${versionId}/luau-execution-sessions/${sessionId}/tasks/${taskId}/logs`;\n\tconst url = `${base}?${buildQuery(pageSize, pageToken).toString()}`;\n\treturn { data: { method: \"GET\", url }, success: true };\n}\n\nfunction buildQuery(pageSize: number | undefined, pageToken: string | undefined): URLSearchParams {\n\tconst query = new URLSearchParams({ view: \"STRUCTURED\" });\n\n\tif (pageSize !== undefined) {\n\t\tquery.append(\"maxPageSize\", String(pageSize));\n\t}\n\n\tif (pageToken !== undefined) {\n\t\tquery.append(\"pageToken\", pageToken);\n\t}\n\n\treturn query;\n}\n","import type { OperationLimit } from \"../../../internal/http/rate-limit-queue.ts\";\n\nconst LIST_LOGS_PER_MINUTE = 45;\nconst SECONDS_PER_MINUTE = 60;\n\n/**\n * Per-second request ceiling for listing Luau execution task logs,\n * sourced from `x-roblox-rate-limits.perApiKeyOwner` on the\n * `Cloud_ListLuauExecutionSessionTaskLogs` operation (45 requests per\n * minute per API key owner), which is also the burst the server allows.\n */\nexport const LIST_LOGS_OPERATION_LIMIT: OperationLimit = Object.freeze({\n\tburstCapacity: LIST_LOGS_PER_MINUTE,\n\tmaxPerSecond: LIST_LOGS_PER_MINUTE / SECONDS_PER_MINUTE,\n\toperationKey: \"luau-execution-task-logs.list\",\n});\n\n/**\n * Scopes required to list Luau execution task logs, sourced from\n * `x-roblox-scopes` on the list-logs operation in the vendored OpenAPI\n * schema. Surfaced via the `requiredScopes` field of the per-method\n * spec so a 401 or 403 ApiError is upgraded to a `PermissionError`\n * naming the missing scope. Only `:read` is required as the\n * minimum-privilege scope for this read-only operation.\n */\nexport const LIST_LOGS_REQUIRED_SCOPES: ReadonlyArray<string> = Object.freeze([\n\t\"universe.place.luau-execution-session:read\",\n]);\n","import type { HttpResponse } from \"../../../client/types.ts\";\nimport { ApiError } from \"../../../errors/api-error.ts\";\nimport { isRecord } from \"../../../internal/utils/is-record.ts\";\nimport { toJsonDetails } from \"../../../internal/utils/to-json-details.ts\";\nimport type { Result } from \"../../../types.ts\";\nimport type { LogMessage, LogPage } from \"./types.ts\";\nimport type { LogChunkWire, LogMessageWire } from \"./wire.ts\";\n\nconst MALFORMED_LOGS_MESSAGE = \"Malformed list-luau-execution-task-logs response\";\n\n/**\n * Parses a successful Open Cloud list-luau-execution-task-logs response\n * body into the public {@link LogPage} shape. Chunks are flattened into\n * a single ordered array of {@link LogMessage} values.\n *\n * @param response - The full {@link HttpResponse} from the Open Cloud API.\n * @returns A success result wrapping the parsed {@link LogPage}, or an\n *   {@link ApiError} when the body does not match a supported shape.\n */\nexport function parseListLogsResponse({\n\tbody,\n\tstatus: statusCode,\n}: HttpResponse): Result<LogPage, ApiError> {\n\tif (!isRecord(body)) {\n\t\treturn malformed(statusCode, body);\n\t}\n\n\tconst rawChunks = body[\"luauExecutionSessionTaskLogs\"] ?? undefined;\n\tif (!isOptionalLogChunks(rawChunks)) {\n\t\treturn malformed(statusCode, body);\n\t}\n\n\tconst rawToken = body[\"nextPageToken\"] ?? undefined;\n\tif (rawToken !== undefined && typeof rawToken !== \"string\") {\n\t\treturn malformed(statusCode, body);\n\t}\n\n\tconst messages: Array<LogMessage> = [];\n\tconst chunks = rawChunks ?? [];\n\tfor (const chunk of chunks) {\n\t\tconst wireMessages = chunk.structuredMessages ?? [];\n\t\tfor (const wireMessage of wireMessages) {\n\t\t\tmessages.push({\n\t\t\t\tcreateTime: wireMessage.createTime,\n\t\t\t\tmessage: wireMessage.message,\n\t\t\t\tmessageType: wireMessage.messageType,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tdata: { messages, nextPageToken: rawToken },\n\t\tsuccess: true,\n\t};\n}\n\nfunction isAcceptedMessageType(value: unknown): value is LogMessageWire[\"messageType\"] {\n\treturn (\n\t\tvalue === \"MESSAGE_TYPE_UNSPECIFIED\" ||\n\t\tvalue === \"OUTPUT\" ||\n\t\tvalue === \"INFO\" ||\n\t\tvalue === \"WARNING\" ||\n\t\tvalue === \"ERROR\"\n\t);\n}\n\nfunction isLogMessageWire(value: unknown): value is LogMessageWire {\n\treturn (\n\t\tisRecord(value) &&\n\t\ttypeof value[\"createTime\"] === \"string\" &&\n\t\ttypeof value[\"message\"] === \"string\" &&\n\t\tisAcceptedMessageType(value[\"messageType\"])\n\t);\n}\n\nfunction isOptionalStructuredMessages(\n\tvalue: unknown,\n): value is ReadonlyArray<LogMessageWire> | undefined {\n\treturn (\n\t\tvalue === undefined ||\n\t\t(Array.isArray(value) && value.every((item: unknown) => isLogMessageWire(item)))\n\t);\n}\n\nfunction isLogChunkWire(value: unknown): value is LogChunkWire {\n\treturn isRecord(value) && isOptionalStructuredMessages(value[\"structuredMessages\"]);\n}\n\nfunction isOptionalLogChunks(value: unknown): value is ReadonlyArray<LogChunkWire> | undefined {\n\treturn (\n\t\tvalue === undefined ||\n\t\t(Array.isArray(value) && value.every((item: unknown) => isLogChunkWire(item)))\n\t);\n}\n\nfunction malformed(statusCode: number, body: unknown): Result<LogPage, ApiError> {\n\treturn {\n\t\terr: new ApiError(MALFORMED_LOGS_MESSAGE, {\n\t\t\tdetails: toJsonDetails(body),\n\t\t\tstatusCode,\n\t\t}),\n\t\tsuccess: false,\n\t};\n}\n","import { IDEMPOTENT_METHOD_DEFAULTS } from \"../../../internal/http/retry.ts\";\nimport type { ResourceMethodSpec } from \"../../../internal/resource-client.ts\";\nimport { buildListLogsRequest } from \"./builders.ts\";\nimport { LIST_LOGS_OPERATION_LIMIT, LIST_LOGS_REQUIRED_SCOPES } from \"./operations.ts\";\nimport { parseListLogsResponse } from \"./parsers.ts\";\nimport type { ListLogsParameters, LogPage } from \"./types.ts\";\n\nfunction makeSpec<P>(spec: ResourceMethodSpec<P, LogPage>): ResourceMethodSpec<P, LogPage> {\n\treturn Object.freeze(spec);\n}\n\n/**\n * Per-method dispatch spec for listing the structured log messages\n * produced by a Luau execution task. Frozen at module scope so both\n * the top-level `LuauExecutionClient` and the `luauExecution` Operation\n * Group on `PlacesClient` share the same instance reference.\n */\nexport const LIST_LOGS_SPEC = makeSpec<ListLogsParameters>({\n\tbuildRequest: buildListLogsRequest,\n\tmethodDefaults: IDEMPOTENT_METHOD_DEFAULTS,\n\tmethodKind: \"idempotent\",\n\toperationLimit: LIST_LOGS_OPERATION_LIMIT,\n\tparse: parseListLogsResponse,\n\trequiredScopes: LIST_LOGS_REQUIRED_SCOPES,\n});\n","import type { HttpRequest } from \"../../../client/types.ts\";\nimport { ValidationError } from \"../../../errors/validation.ts\";\nimport type { Result } from \"../../../types.ts\";\nimport type { GetParameters, SubmitAtHeadParameters, SubmitAtVersionParameters } from \"./types.ts\";\n\ninterface SubmitBodyInput {\n\treadonly binaryInput?: string | undefined;\n\treadonly enableBinaryOutput?: boolean | undefined;\n\treadonly script: string;\n\treadonly timeoutSeconds?: number;\n}\n\nconst JSON_HEADERS: Readonly<Record<string, string>> = { \"content-type\": \"application/json\" };\n\n/**\n * Builds a `POST` request for the Open Cloud \"create Luau execution\n * session task\" endpoint, targeting the place's head version. Serializes\n * `timeoutSeconds` into the wire's duration string format (`\"<n>s\"`)\n * when supplied.\n *\n * @param parameters - Universe and place identifiers, the script body,\n *   and an optional `timeoutSeconds`.\n * @returns A pure {@link HttpRequest} describing the submit call.\n */\nexport function buildSubmitAtHeadRequest(parameters: SubmitAtHeadParameters): HttpRequest {\n\tconst { placeId, universeId } = parameters;\n\treturn {\n\t\tbody: buildSubmitBody(parameters),\n\t\theaders: JSON_HEADERS,\n\t\tmethod: \"POST\",\n\t\turl: `/cloud/v2/universes/${universeId}/places/${placeId}/luau-execution-session-tasks`,\n\t};\n}\n\n/**\n * Builds a `POST` request for the Open Cloud \"create Luau execution\n * session task\" endpoint, targeting a specific place version. Differs\n * from {@link buildSubmitAtHeadRequest} only in URL shape: the path\n * includes the `versions/{versionId}` segment so the script runs\n * against that exact place version instead of the live head.\n *\n * @param parameters - Universe, place, and version identifiers, the\n *   script body, and an optional `timeoutSeconds`.\n * @returns A pure {@link HttpRequest} describing the submit call.\n */\nexport function buildSubmitAtVersionRequest(parameters: SubmitAtVersionParameters): HttpRequest {\n\tconst { placeId, universeId, versionId } = parameters;\n\treturn {\n\t\tbody: buildSubmitBody(parameters),\n\t\theaders: JSON_HEADERS,\n\t\tmethod: \"POST\",\n\t\turl: `/cloud/v2/universes/${universeId}/places/${placeId}/versions/${versionId}/luau-execution-session-tasks`,\n\t};\n}\n\n/**\n * Builds a `GET` request for the Open Cloud \"read Luau execution session\n * task\" endpoint. The endpoint accepts only the maximal x-aep-resource\n * path shape (universe, place, version, session, task), so the supplied\n * ref must include `versionId` and `sessionId`; refs extracted from the\n * narrower path formats are rejected with a {@link ValidationError}.\n *\n * @param parameters - Task ref and optional view selector. When `view`\n *   is omitted, no `?view=` query is sent and the server applies its\n *   own default (`BASIC`).\n * @returns A success result wrapping the request, or a\n *   {@link ValidationError} when the ref is missing `versionId` or\n *   `sessionId`.\n */\nexport function buildGetRequest({\n\tref,\n\tview,\n}: GetParameters): Result<HttpRequest, ValidationError> {\n\tconst { placeId, sessionId, taskId, universeId, versionId } = ref;\n\n\tif (versionId === undefined) {\n\t\treturn {\n\t\t\terr: new ValidationError(\"Task ref is missing versionId; cannot GET\", {\n\t\t\t\tcode: \"incomplete_ref\",\n\t\t\t}),\n\t\t\tsuccess: false,\n\t\t};\n\t}\n\n\tif (sessionId === undefined) {\n\t\treturn {\n\t\t\terr: new ValidationError(\"Task ref is missing sessionId; cannot GET\", {\n\t\t\t\tcode: \"incomplete_ref\",\n\t\t\t}),\n\t\t\tsuccess: false,\n\t\t};\n\t}\n\n\tconst base = `/cloud/v2/universes/${universeId}/places/${placeId}/versions/${versionId}/luau-execution-sessions/${sessionId}/tasks/${taskId}`;\n\tconst url = view === undefined ? base : `${base}?view=${view}`;\n\treturn { data: { method: \"GET\", url }, success: true };\n}\n\nfunction buildSubmitBody({\n\tbinaryInput,\n\tenableBinaryOutput: shouldEnableBinaryOutput,\n\tscript,\n\ttimeoutSeconds,\n}: SubmitBodyInput): Record<string, unknown> {\n\tconst body: Record<string, unknown> = { script };\n\tif (timeoutSeconds !== undefined) {\n\t\tbody[\"timeout\"] = `${timeoutSeconds}s`;\n\t}\n\n\tif (binaryInput !== undefined) {\n\t\tbody[\"binaryInput\"] = binaryInput;\n\t}\n\n\tif (shouldEnableBinaryOutput !== undefined) {\n\t\tbody[\"enableBinaryOutput\"] = shouldEnableBinaryOutput;\n\t}\n\n\treturn body;\n}\n","import type { OperationLimit } from \"../../../internal/http/rate-limit-queue.ts\";\n\nconst SUBMIT_AT_HEAD_PER_MINUTE = 5;\nconst SUBMIT_AT_VERSION_PER_MINUTE = 5;\nconst GET_PER_MINUTE = 200;\nconst SECONDS_PER_MINUTE = 60;\n\n/**\n * Per-second request ceiling for submitting a Luau execution task at a\n * place's head version, sourced from\n * `x-roblox-rate-limits.perApiKeyOwner` on the\n * `Cloud_CreateLuauExecutionSessionTask__Using_Universes` operation\n * (5 requests per minute per API key owner), which is also the burst\n * the server allows.\n */\nexport const SUBMIT_HEAD_OPERATION_LIMIT: OperationLimit = Object.freeze({\n\tburstCapacity: SUBMIT_AT_HEAD_PER_MINUTE,\n\tmaxPerSecond: SUBMIT_AT_HEAD_PER_MINUTE / SECONDS_PER_MINUTE,\n\toperationKey: \"luau-execution-tasks.submit\",\n});\n\n/**\n * Per-second request ceiling for submitting a Luau execution task at a\n * specific place version, sourced from\n * `x-roblox-rate-limits.perApiKeyOwner` on the\n * `Cloud_CreateLuauExecutionSessionTask__Using_Universes_Places`\n * operation (5 requests per minute per API key owner), which is also\n * the burst the server allows. Carries its own operation key so the\n * version-pinned URL shape is paced from its own quota: the server\n * meters the two shapes in separate buckets whose ceilings are\n * additive, and pinned traffic does not consume head budget. The two\n * ceilings are equal (5 each), but equal is not shared.\n */\nexport const SUBMIT_VERSION_OPERATION_LIMIT: OperationLimit = Object.freeze({\n\tburstCapacity: SUBMIT_AT_VERSION_PER_MINUTE,\n\tmaxPerSecond: SUBMIT_AT_VERSION_PER_MINUTE / SECONDS_PER_MINUTE,\n\toperationKey: \"luau-execution-tasks.submit-at-version\",\n});\n\n/**\n * Per-second request ceiling for fetching a Luau execution task,\n * sourced from `x-roblox-rate-limits.perApiKeyOwner` on the\n * `Cloud_GetLuauExecutionSessionTask` operation (200 requests per\n * minute per API key owner).\n */\nexport const GET_OPERATION_LIMIT: OperationLimit = Object.freeze({\n\tmaxPerSecond: GET_PER_MINUTE / SECONDS_PER_MINUTE,\n\toperationKey: \"luau-execution-tasks.get\",\n});\n\n/**\n * Scopes required to submit a Luau execution task, sourced from\n * `x-roblox-scopes` on the create operation in the vendored OpenAPI\n * schema. Surfaced via the `requiredScopes` field of the per-method\n * spec so a 401 or 403 ApiError is upgraded to a `PermissionError`\n * naming the missing scope.\n */\nexport const SUBMIT_REQUIRED_SCOPES: ReadonlyArray<string> = Object.freeze([\n\t\"universe.place.luau-execution-session:write\",\n]);\n\n/**\n * Scopes required to fetch a Luau execution task, sourced from\n * `x-roblox-scopes` on the get operation. The `:write` scope also\n * grants read in upstream auth, but we surface only `:read` here as\n * the minimum-privilege requirement for this method.\n */\nexport const GET_REQUIRED_SCOPES: ReadonlyArray<string> = Object.freeze([\n\t\"universe.place.luau-execution-session:read\",\n]);\n","import type { HttpResponse } from \"../../../client/types.ts\";\nimport { ApiError } from \"../../../errors/api-error.ts\";\nimport { isDateTimeString } from \"../../../internal/utils/is-date-time-string.ts\";\nimport { isRecord } from \"../../../internal/utils/is-record.ts\";\nimport { toJsonDetails } from \"../../../internal/utils/to-json-details.ts\";\nimport type { Result } from \"../../../types.ts\";\nimport type { LuauExecutionTask, LuauExecutionTaskRef } from \"./types.ts\";\nimport type {\n\tLuauExecutionTaskErrorWire,\n\tLuauExecutionTaskOutputWire,\n\tLuauExecutionTaskWire,\n} from \"./wire.ts\";\n\nconst MALFORMED_TASK_MESSAGE = \"Malformed luau-execution-session-task response\";\n\n// Matches any of the four x-aep-resource path formats for a luau\n// execution session task.\n//\n// Capture groups:\n// 1. universeId\n// 2. placeId\n// 3. versionId (when `/versions/{v}/` segment is present, else undefined)\n// 4. sessionId (when `/luau-execution-sessions/{s}/tasks/...` branch matched)\n// 5. taskId (when `/luau-execution-sessions/.../tasks/{t}` branch matched)\n// 6. taskId (when `/luau-execution-session-tasks/{t}` branch matched)\nconst PATH_PATTERN =\n\t/^universes\\/(\\d+)\\/places\\/(\\d+)(?:\\/versions\\/(\\d+))?(?:\\/luau-execution-sessions\\/([^/]+)\\/tasks\\/([^/]+)|\\/luau-execution-session-tasks\\/([^/]+))$/;\n\ntype InProgressWireState = Exclude<LuauExecutionTaskWire[\"state\"], \"COMPLETE\" | \"FAILED\">;\n\ninterface ParseVariantArgs {\n\treadonly body: LuauExecutionTaskWire;\n\treadonly createdAt: Date | undefined;\n\treadonly ref: LuauExecutionTaskRef;\n\treadonly statusCode: number;\n\treadonly timeoutSeconds: number | undefined;\n\treadonly updatedAt: Date | undefined;\n}\n\n/**\n * Parses a successful Open Cloud `LuauExecutionSessionTask` response\n * body into the public {@link LuauExecutionTask} discriminated union.\n * Handles every supported task state (in-progress, COMPLETE, FAILED)\n * across all four x-aep-resource path shapes the server returns.\n *\n * @param response - The full {@link HttpResponse} from the Open Cloud\n *   API.\n * @returns A success result wrapping the parsed task, or an\n *   {@link ApiError} when the body or path do not match a supported\n *   shape.\n */\nexport function parseLuauExecutionTaskResponse({\n\tbody,\n\tstatus: statusCode,\n}: HttpResponse): Result<LuauExecutionTask, ApiError> {\n\tif (!isLuauExecutionTaskWire(body)) {\n\t\treturn malformed(statusCode, body);\n\t}\n\n\tconst ref = parseTaskRef(body.path);\n\tif (ref === undefined) {\n\t\treturn malformed(statusCode, body);\n\t}\n\n\tconst timeoutSeconds = parseTimeoutSeconds(body.timeout);\n\tconst createdAt = parseOptionalDate(body.createTime);\n\tconst updatedAt = parseOptionalDate(body.updateTime);\n\n\tif (body.state === \"COMPLETE\") {\n\t\treturn parseCompleteTask({ body, createdAt, ref, statusCode, timeoutSeconds, updatedAt });\n\t}\n\n\tif (body.state === \"FAILED\") {\n\t\treturn parseFailedTask({ body, createdAt, ref, statusCode, timeoutSeconds, updatedAt });\n\t}\n\n\treturn parseInProgressTask({\n\t\tbody,\n\t\tcreatedAt,\n\t\tref,\n\t\tstate: body.state,\n\t\tstatusCode,\n\t\ttimeoutSeconds,\n\t\tupdatedAt,\n\t});\n}\n\nfunction isAcceptedWireState(state: unknown): state is LuauExecutionTaskWire[\"state\"] {\n\treturn (\n\t\tstate === \"STATE_UNSPECIFIED\" ||\n\t\tstate === \"QUEUED\" ||\n\t\tstate === \"PROCESSING\" ||\n\t\tstate === \"CANCELLED\" ||\n\t\tstate === \"COMPLETE\" ||\n\t\tstate === \"FAILED\"\n\t);\n}\n\nfunction isErrorWireCode(code: unknown): code is LuauExecutionTaskErrorWire[\"code\"] {\n\treturn (\n\t\tcode === \"ERROR_CODE_UNSPECIFIED\" ||\n\t\tcode === \"SCRIPT_ERROR\" ||\n\t\tcode === \"DEADLINE_EXCEEDED\" ||\n\t\tcode === \"OUTPUT_SIZE_LIMIT_EXCEEDED\" ||\n\t\tcode === \"INTERNAL_ERROR\"\n\t);\n}\n\nfunction isErrorWire(value: unknown): value is LuauExecutionTaskErrorWire {\n\treturn (\n\t\tisRecord(value) && isErrorWireCode(value[\"code\"]) && typeof value[\"message\"] === \"string\"\n\t);\n}\n\nfunction isOptionalErrorWire(value: unknown): value is LuauExecutionTaskErrorWire | undefined {\n\treturn value === undefined || isErrorWire(value);\n}\n\nfunction isOutputWire(value: unknown): value is LuauExecutionTaskOutputWire {\n\treturn isRecord(value) && Array.isArray(value[\"results\"]);\n}\n\nfunction isOptionalOutputWire(value: unknown): value is LuauExecutionTaskOutputWire | undefined {\n\treturn value === undefined || isOutputWire(value);\n}\n\nfunction isOptionalString(value: unknown): value is string | undefined {\n\treturn value === undefined || typeof value === \"string\";\n}\n\nfunction isOptionalBoolean(value: unknown): value is boolean | undefined {\n\treturn value === undefined || typeof value === \"boolean\";\n}\n\nfunction isOptionalDateTimeString(value: unknown): value is string | undefined {\n\treturn value === undefined || isDateTimeString(value);\n}\n\nfunction isLuauExecutionTaskWire(body: unknown): body is LuauExecutionTaskWire {\n\treturn (\n\t\tisRecord(body) &&\n\t\ttypeof body[\"path\"] === \"string\" &&\n\t\tisOptionalDateTimeString(body[\"createTime\"]) &&\n\t\tisOptionalDateTimeString(body[\"updateTime\"]) &&\n\t\tisAcceptedWireState(body[\"state\"]) &&\n\t\ttypeof body[\"user\"] === \"string\" &&\n\t\tisOptionalOutputWire(body[\"output\"]) &&\n\t\tisOptionalErrorWire(body[\"error\"]) &&\n\t\tisOptionalDurationWire(body[\"timeout\"]) &&\n\t\tisOptionalString(body[\"binaryInput\"]) &&\n\t\tisOptionalBoolean(body[\"enableBinaryOutput\"]) &&\n\t\tisOptionalString(body[\"binaryOutputUri\"])\n\t);\n}\n\nfunction parseOptionalDate(value: string | undefined): Date | undefined {\n\treturn value === undefined ? undefined : new Date(value);\n}\n\nconst DURATION_PATTERN = /^(\\d+)s$/;\n\nfunction isOptionalDurationWire(value: unknown): value is string | undefined {\n\treturn value === undefined || (typeof value === \"string\" && DURATION_PATTERN.test(value));\n}\n\nfunction parseTimeoutSeconds(value: string | undefined): number | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst match = DURATION_PATTERN.exec(value);\n\tconst seconds = match?.[1];\n\tif (seconds === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn Number.parseInt(seconds, 10);\n}\n\nfunction malformed(statusCode: number, body: unknown): Result<LuauExecutionTask, ApiError> {\n\treturn {\n\t\terr: new ApiError(MALFORMED_TASK_MESSAGE, {\n\t\t\tdetails: toJsonDetails(body),\n\t\t\tstatusCode,\n\t\t}),\n\t\tsuccess: false,\n\t};\n}\n\nfunction parseInProgressTask({\n\tbody,\n\tcreatedAt,\n\tref,\n\tstate,\n\ttimeoutSeconds,\n\tupdatedAt,\n}: ParseVariantArgs & { readonly state: InProgressWireState }): Result<\n\tLuauExecutionTask,\n\tApiError\n> {\n\treturn {\n\t\tdata: {\n\t\t\tbinaryInput: body.binaryInput,\n\t\t\tbinaryOutputUri: body.binaryOutputUri,\n\t\t\tcreatedAt,\n\t\t\tenableBinaryOutput: body.enableBinaryOutput,\n\t\t\tref,\n\t\t\tstate,\n\t\t\ttimeoutSeconds,\n\t\t\tupdatedAt,\n\t\t\tuser: body.user,\n\t\t},\n\t\tsuccess: true,\n\t};\n}\n\nfunction parseCompleteTask({\n\tbody,\n\tcreatedAt,\n\tref,\n\tstatusCode,\n\ttimeoutSeconds,\n\tupdatedAt,\n}: ParseVariantArgs): Result<LuauExecutionTask, ApiError> {\n\tif (body.output === undefined) {\n\t\treturn malformed(statusCode, body);\n\t}\n\n\treturn {\n\t\tdata: {\n\t\t\tbinaryInput: body.binaryInput,\n\t\t\tbinaryOutputUri: body.binaryOutputUri,\n\t\t\tcreatedAt,\n\t\t\tenableBinaryOutput: body.enableBinaryOutput,\n\t\t\toutput: { results: body.output.results },\n\t\t\tref,\n\t\t\tstate: \"COMPLETE\",\n\t\t\ttimeoutSeconds,\n\t\t\tupdatedAt,\n\t\t\tuser: body.user,\n\t\t},\n\t\tsuccess: true,\n\t};\n}\n\nfunction parseFailedTask({\n\tbody,\n\tcreatedAt,\n\tref,\n\tstatusCode,\n\ttimeoutSeconds,\n\tupdatedAt,\n}: ParseVariantArgs): Result<LuauExecutionTask, ApiError> {\n\tif (body.error === undefined) {\n\t\treturn malformed(statusCode, body);\n\t}\n\n\treturn {\n\t\tdata: {\n\t\t\tbinaryInput: body.binaryInput,\n\t\t\tbinaryOutputUri: body.binaryOutputUri,\n\t\t\tcreatedAt,\n\t\t\tenableBinaryOutput: body.enableBinaryOutput,\n\t\t\terror: { code: body.error.code, message: body.error.message },\n\t\t\tref,\n\t\t\tstate: \"FAILED\",\n\t\t\ttimeoutSeconds,\n\t\t\tupdatedAt,\n\t\t\tuser: body.user,\n\t\t},\n\t\tsuccess: true,\n\t};\n}\n\nfunction parseTaskRef(path: string): LuauExecutionTaskRef | undefined {\n\tconst match = PATH_PATTERN.exec(path);\n\tif (match === null) {\n\t\treturn undefined;\n\t}\n\n\tconst [, universeId, placeId, versionId, sessionId, sessionTaskId, plainTaskId] = match;\n\tconst taskId = sessionTaskId ?? plainTaskId;\n\tif (universeId === undefined || placeId === undefined || taskId === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn { placeId, sessionId, taskId, universeId, versionId };\n}\n","import {\n\tCREATE_METHOD_DEFAULTS,\n\tIDEMPOTENT_METHOD_DEFAULTS,\n} from \"../../../internal/http/retry.ts\";\nimport { okRequest, type ResourceMethodSpec } from \"../../../internal/resource-client.ts\";\nimport {\n\tbuildGetRequest,\n\tbuildSubmitAtHeadRequest,\n\tbuildSubmitAtVersionRequest,\n} from \"./builders.ts\";\nimport {\n\tGET_OPERATION_LIMIT,\n\tGET_REQUIRED_SCOPES,\n\tSUBMIT_HEAD_OPERATION_LIMIT,\n\tSUBMIT_REQUIRED_SCOPES,\n\tSUBMIT_VERSION_OPERATION_LIMIT,\n} from \"./operations.ts\";\nimport { parseLuauExecutionTaskResponse } from \"./parsers.ts\";\nimport type {\n\tGetParameters,\n\tLuauExecutionTask,\n\tSubmitAtHeadParameters,\n\tSubmitAtVersionParameters,\n} from \"./types.ts\";\n\nfunction makeSpec<P>(\n\tspec: ResourceMethodSpec<P, LuauExecutionTask>,\n): ResourceMethodSpec<P, LuauExecutionTask> {\n\treturn Object.freeze(spec);\n}\n\n/**\n * Per-method dispatch spec for submitting a Luau execution task at a\n * place's head version. Frozen at module scope so both the top-level\n * `LuauExecutionClient` and the `luauExecution` Operation Group on\n * `PlacesClient` share the same instance reference.\n */\nexport const SUBMIT_HEAD_SPEC = makeSpec<SubmitAtHeadParameters>({\n\tbuildRequest: (parameters) => okRequest(buildSubmitAtHeadRequest(parameters)),\n\tmethodDefaults: CREATE_METHOD_DEFAULTS,\n\tmethodKind: \"create\",\n\toperationLimit: SUBMIT_HEAD_OPERATION_LIMIT,\n\tparse: parseLuauExecutionTaskResponse,\n\trequiredScopes: SUBMIT_REQUIRED_SCOPES,\n});\n\n/**\n * Per-method dispatch spec for submitting a Luau execution task at a\n * specific place version. Shares the required scope set with {@link\n * SUBMIT_HEAD_SPEC} but carries its own rate-limit queue: the server\n * meters the version-pinned URL shape in a bucket separate from the\n * head shape's.\n */\nexport const SUBMIT_VERSION_SPEC = makeSpec<SubmitAtVersionParameters>({\n\tbuildRequest: (parameters) => okRequest(buildSubmitAtVersionRequest(parameters)),\n\tmethodDefaults: CREATE_METHOD_DEFAULTS,\n\tmethodKind: \"create\",\n\toperationLimit: SUBMIT_VERSION_OPERATION_LIMIT,\n\tparse: parseLuauExecutionTaskResponse,\n\trequiredScopes: SUBMIT_REQUIRED_SCOPES,\n});\n\n/**\n * Per-method dispatch spec for fetching a Luau execution task. Uses\n * idempotent retry semantics (429 and 5xx both retried) so reads\n * recover transparently from transient server errors.\n */\nexport const GET_SPEC = makeSpec<GetParameters>({\n\tbuildRequest: buildGetRequest,\n\tmethodDefaults: IDEMPOTENT_METHOD_DEFAULTS,\n\tmethodKind: \"idempotent\",\n\toperationLimit: GET_OPERATION_LIMIT,\n\tparse: parseLuauExecutionTaskResponse,\n\trequiredScopes: GET_REQUIRED_SCOPES,\n});\n","import type { RequestOptions } from \"../../client/types.ts\";\nimport type { LuauExecutionTask } from \"../../domains/cloud-v2/luau-execution-tasks/types.ts\";\nimport type { OpenCloudError } from \"../../errors/base.ts\";\nimport { NetworkError } from \"../../errors/network-error.ts\";\nimport { PollAbortedError } from \"../../errors/poll-aborted.ts\";\nimport { PollTimeoutError } from \"../../errors/poll-timeout.ts\";\nimport { TRANSIENT_TRANSPORT_CODES } from \"../../internal/http/retry.ts\";\nimport { ABORTED, raceWithAbortAsync } from \"../../internal/utils/abort.ts\";\nimport { findErrorCode } from \"../../internal/utils/find-error-code.ts\";\nimport type { SleepFunc } from \"../../internal/utils/sleep.ts\";\nimport type { Result } from \"../../types.ts\";\n\n/** Default total polling budget in milliseconds (5 minutes). */\nexport const DEFAULT_POLL_TIMEOUT_MS = 300_000;\n\n/** One step of the default poll-cadence schedule. */\ninterface PollDelayTier {\n\t/** Delay in ms to wait between polls while within this tier. */\n\treadonly delayMs: number;\n\t/**\n\t * Upper elapsed-time bound (exclusive) at which this tier stops applying.\n\t */\n\treadonly untilMs: number;\n}\n\n/** Steady-state delay once elapsed time reaches the final tier bound. */\nconst STEADY_POLL_DELAY_MS = 5_000;\n\n/**\n * Fast-to-slow poll-cadence tiers keyed on elapsed wall-clock time. Elapsed\n * times at or beyond the last `untilMs` fall through to\n * {@link STEADY_POLL_DELAY_MS}.\n */\nconst DEFAULT_POLL_TIERS: ReadonlyArray<PollDelayTier> = [\n\t{ delayMs: 500, untilMs: 20_000 },\n\t{ delayMs: 1_000, untilMs: 60_000 },\n];\n\n/**\n * Default poll cadence as a function of elapsed wall-clock time since\n * polling began. Polls quickly while a task is young so short runs resolve\n * snappily, then eases off so a long run leaves rate-limit headroom for\n * newer tasks: 0-20s is 500ms, 20-60s is 1000ms, 60s+ is 5000ms.\n *\n * @since 0.1.0\n *\n * @example\n * ```ts\n * import { defaultPollDelay } from \"@bedrock-rbx/ocale/luau-execution\";\n *\n * expect(defaultPollDelay(0)).toBe(500);\n * expect(defaultPollDelay(30_000)).toBe(1000);\n * expect(defaultPollDelay(120_000)).toBe(5000);\n * ```\n *\n * @param elapsedMs - Milliseconds elapsed since polling started.\n * @returns The delay in milliseconds to wait before the next poll.\n */\nexport function defaultPollDelay(elapsedMs: number): number {\n\tconst tier = DEFAULT_POLL_TIERS.find((candidate) => elapsedMs < candidate.untilMs);\n\treturn tier?.delayMs ?? STEADY_POLL_DELAY_MS;\n}\n\n/**\n * Default number of consecutive transport failures tolerated before the poll\n * loop gives up. With per-request retries already absorbing isolated blips,\n * three consecutive loop-level failures signals a genuinely unreachable\n * endpoint, so it bails in seconds rather than spinning out the wall-clock\n * budget.\n */\nexport const DEFAULT_POLL_FAILURE_CAP = 3;\n\n/**\n * Injected dependencies for the deep-module polling loop. The `fetch`\n * callback is pre-bound by the wiring layer and closes over the task ref\n * and request options, keeping the core loop narrow.\n */\nexport interface PollDependencies {\n\t/** Returns the current task or an error. Called on each loop iteration. */\n\treadonly fetch: () => Promise<Result<LuauExecutionTask, OpenCloudError>>;\n\t/** Returns the current wall-clock time in ms. */\n\treadonly now: () => number;\n\t/** Injectable sleep for deterministic tests. */\n\treadonly sleep: SleepFunc;\n}\n\n/**\n * Public options accepted by `pollUntilDone` and `runUntilDone` on both client\n * surfaces.\n *\n * @since 0.1.0\n */\nexport type PollUntilDoneOptions = PollOptions & RequestOptions;\n\n/** Caller-supplied polling-loop options; all fields optional. */\ninterface PollOptions {\n\t/**\n\t * Consecutive transient transport failures tolerated before the loop gives\n\t * up. Defaults to {@link DEFAULT_POLL_FAILURE_CAP}. A successful poll\n\t * resets the count.\n\t */\n\treadonly maxConsecutivePollFailures?: number;\n\t/**\n\t * Returns the sleep duration given ms elapsed since polling started.\n\t * Defaults to {@link defaultPollDelay}.\n\t */\n\treadonly pollDelay?: (elapsedMs: number) => number;\n\t/**\n\t * When aborted, the loop returns {@link PollAbortedError} rather than\n\t * continuing.\n\t */\n\treadonly signal?: AbortSignal;\n\t/**\n\t * Total wall-clock budget in ms before the loop returns {@link\n\t * PollTimeoutError}.\n\t */\n\treadonly timeoutMs?: number;\n}\n\ninterface ResolvedPollOptions {\n\treadonly maxFailures: number;\n\treadonly pollDelay: (elapsedMs: number) => number;\n\treadonly signal: AbortSignal | undefined;\n\treadonly timeoutMs: number;\n}\n\ninterface SleepWithAbortOptions {\n\treadonly ms: number;\n\treadonly signal: AbortSignal | undefined;\n\treadonly sleep: SleepFunc;\n}\n\ntype FetchOutcome =\n\t| { readonly error: NetworkError; readonly kind: \"transient\" }\n\t| { readonly error: OpenCloudError; readonly kind: \"failed\" }\n\t| { readonly kind: \"aborted\" }\n\t| { readonly kind: \"pending\"; readonly task: LuauExecutionTask }\n\t| { readonly kind: \"terminal\"; readonly task: LuauExecutionTask };\n\n/** Mutable-per-iteration loop state threaded through {@link applyOutcome}. */\ninterface LoopState {\n\treadonly consecutiveFailures: number;\n\treadonly lastTask: LuauExecutionTask | undefined;\n}\n\ntype LoopAction =\n\t| { readonly kind: \"continue\"; readonly state: LoopState }\n\t| { readonly kind: \"return\"; readonly result: Result<LuauExecutionTask, OpenCloudError> };\n\n/** Per-iteration inputs to {@link applyOutcome}. */\ninterface OutcomeContext {\n\treadonly maxFailures: number;\n\treadonly signal: AbortSignal | undefined;\n\treadonly state: LoopState;\n}\n\n/**\n * Defaults the per-request `timeout` to the effective poll budget when the\n * caller has not set one. A luau-execution submit and each poll `get` normally\n * answer in well under a second (the submit endpoint enqueues the task without\n * waiting for it to run), so the only job of a per-request deadline here is to\n * bound a black-hole connection. Leaving these requests on the client-wide 30s\n * default (tuned for snappy CRUD) turns a slow-but-alive backend into a\n * self-abort, an error the retry layer never retries by construction, before\n * the loop's wall-clock budget is ever consulted. Deriving the deadline from\n * `timeoutMs` keeps a single request alive exactly as long as the caller\n * already agreed to wait for the whole operation, so the backend can answer or\n * surface a retryable status instead.\n *\n * @template TOptions - The concrete polling option shape to preserve.\n * @param options - The caller's poll and per-request options.\n * @returns The options with `timeout` filled from the budget when it was unset.\n */\nexport function withBudgetRequestTimeout<TOptions extends PollUntilDoneOptions>(\n\toptions: TOptions,\n): TOptions & { readonly timeout: number } {\n\tconst timeout = options.timeout ?? options.timeoutMs ?? DEFAULT_POLL_TIMEOUT_MS;\n\treturn { ...options, timeout };\n}\n\n/**\n * Reports whether a Luau task can no longer change execution state.\n *\n * @param task - Task whose state should be classified.\n * @returns Whether the task is complete, failed, or cancelled.\n */\nexport function isTerminalTask(task: LuauExecutionTask): boolean {\n\treturn task.state === \"COMPLETE\" || task.state === \"FAILED\" || task.state === \"CANCELLED\";\n}\n\n/**\n * Core polling loop. Calls `deps.fetch()` repeatedly, sleeping\n * `pollDelay(elapsedMs)` ms between iterations, until a terminal state\n * is observed, the wall-clock budget is exhausted, or an `AbortSignal`\n * fires. A transient transport failure ({@link NetworkError}) is tolerated\n * and the loop continues, giving up only after `maxConsecutivePollFailures`\n * consecutive failures; any other failure aborts immediately, since an API\n * response (a 404 for a vanished task, a 403) means there is nothing left to\n * poll. A successful poll resets the failure count.\n *\n * @param deps - Injected fetch, now, and sleep callbacks.\n * @param options - Optional poll delay, timeout, failure cap, and abort signal.\n * @returns The terminal task, or an error if aborted, timed out, or the transport keeps failing.\n */\nexport async function pollUntilDoneCoreAsync(\n\tdeps: PollDependencies,\n\toptions: PollOptions = {},\n): Promise<Result<LuauExecutionTask, OpenCloudError>> {\n\tconst { maxFailures, pollDelay, signal, timeoutMs } = resolvePollOptions(options);\n\tif (signal?.aborted === true) {\n\t\treturn abortedResult(signal);\n\t}\n\n\tconst startedAt = deps.now();\n\tlet state: LoopState = { consecutiveFailures: 0, lastTask: undefined };\n\tfor (;;) {\n\t\tconst elapsedMs = deps.now() - startedAt;\n\t\tif (elapsedMs >= timeoutMs) {\n\t\t\treturn { err: makeTimeout(state.lastTask, timeoutMs), success: false };\n\t\t}\n\n\t\tconst outcome = await fetchOnceAsync(deps, signal);\n\t\tconst action = applyOutcome(outcome, { maxFailures, signal, state });\n\t\tif (action.kind === \"return\") {\n\t\t\treturn action.result;\n\t\t}\n\n\t\t({ state } = action);\n\t\tconst sleepWasAborted = await sleepWithAbortAsync({\n\t\t\tms: pollDelay(elapsedMs),\n\t\t\tsignal,\n\t\t\tsleep: deps.sleep,\n\t\t});\n\t\tif (sleepWasAborted) {\n\t\t\treturn abortedResult(signal);\n\t\t}\n\t}\n}\n\nfunction resolvePollOptions(options: PollOptions): ResolvedPollOptions {\n\treturn {\n\t\tmaxFailures: options.maxConsecutivePollFailures ?? DEFAULT_POLL_FAILURE_CAP,\n\t\tpollDelay: options.pollDelay ?? defaultPollDelay,\n\t\tsignal: options.signal,\n\t\ttimeoutMs: options.timeoutMs ?? DEFAULT_POLL_TIMEOUT_MS,\n\t};\n}\n\nfunction makeAborted(signal: AbortSignal | undefined): PollAbortedError {\n\treturn new PollAbortedError(\"Polling was aborted\", { reason: signal?.reason });\n}\n\nfunction abortedResult(signal: AbortSignal | undefined): Result<LuauExecutionTask, OpenCloudError> {\n\treturn { err: makeAborted(signal), success: false };\n}\n\n/**\n * Maps a single fetch outcome to the next loop action. Terminal, failed, and\n * aborted outcomes return immediately; a transient transport failure advances\n * the consecutive-failure count and returns once it reaches `maxFailures`; a\n * pending task resets the count and continues.\n *\n * @param outcome - The classified result of one poll fetch.\n * @param context - The loop state, failure cap, and abort signal.\n * @returns Whether to return a final Result or continue with updated state.\n */\nfunction applyOutcome(\n\toutcome: FetchOutcome,\n\t{ maxFailures, signal, state }: OutcomeContext,\n): LoopAction {\n\tswitch (outcome.kind) {\n\t\tcase \"aborted\": {\n\t\t\treturn { kind: \"return\", result: abortedResult(signal) };\n\t\t}\n\t\tcase \"failed\": {\n\t\t\treturn { kind: \"return\", result: { err: outcome.error, success: false } };\n\t\t}\n\t\tcase \"pending\": {\n\t\t\treturn { kind: \"continue\", state: { consecutiveFailures: 0, lastTask: outcome.task } };\n\t\t}\n\t\tcase \"terminal\": {\n\t\t\treturn { kind: \"return\", result: { data: outcome.task, success: true } };\n\t\t}\n\t\tcase \"transient\": {\n\t\t\tconst consecutiveFailures = state.consecutiveFailures + 1;\n\t\t\tif (consecutiveFailures >= maxFailures) {\n\t\t\t\treturn { kind: \"return\", result: { err: outcome.error, success: false } };\n\t\t\t}\n\n\t\t\treturn { kind: \"continue\", state: { consecutiveFailures, lastTask: state.lastTask } };\n\t\t}\n\t}\n}\n\nasync function sleepWithAbortAsync({ ms, signal, sleep }: SleepWithAbortOptions): Promise<boolean> {\n\treturn (await raceWithAbortAsync(async () => sleep(ms, signal), signal)) === ABORTED;\n}\n\nfunction makeTimeout(\n\ttask: LuauExecutionTask | undefined,\n\ttimeoutMs: number,\n): PollTimeoutError<LuauExecutionTask> {\n\treturn new PollTimeoutError(`Polling timed out after ${timeoutMs} ms`, {\n\t\tlastObservedTask: task,\n\t\ttimeoutMs,\n\t});\n}\n\n/**\n * A failed poll is worth re-polling only when it is a `NetworkError` carrying a\n * known transient transport code. A self-aborted request timeout has no\n * `code`, and an API response (4xx/5xx) is authoritative, so both abort the\n * loop rather than being re-polled. Transient-ness is classified against the\n * canonical `TRANSIENT_TRANSPORT_CODES` set; this is the loop's own tolerance\n * dimension, distinct from the per-request `retryableTransportCodes` override\n * (which governs request-level retries inside each poll). Loop tolerance is\n * bounded separately by `maxConsecutivePollFailures`.\n *\n * A 2xx whose body would not parse is deliberately not re-polled here: it is\n * recovered a layer down, by the request-level retry that\n * `RESPONSE_UNPARSEABLE` puts in every idempotent policy. Reaching this\n * function means that retry budget is already spent, and a fourth read of the\n * same body is not a different answer.\n *\n * @param error - The error returned by a failed poll.\n * @returns `true` when the loop should tolerate and re-poll.\n */\nfunction isTransientTransport(error: OpenCloudError): error is NetworkError {\n\tif (!(error instanceof NetworkError)) {\n\t\treturn false;\n\t}\n\n\tconst code = findErrorCode(error);\n\treturn code !== undefined && TRANSIENT_TRANSPORT_CODES.includes(code);\n}\n\nasync function fetchOnceAsync(\n\tdependencies: PollDependencies,\n\tsignal: AbortSignal | undefined,\n): Promise<FetchOutcome> {\n\tconst fetchResult = await raceWithAbortAsync(dependencies.fetch, signal);\n\tif (fetchResult === ABORTED) {\n\t\treturn { kind: \"aborted\" };\n\t}\n\n\tif (!fetchResult.success) {\n\t\treturn isTransientTransport(fetchResult.err)\n\t\t\t? { error: fetchResult.err, kind: \"transient\" }\n\t\t\t: { error: fetchResult.err, kind: \"failed\" };\n\t}\n\n\treturn isTerminalTask(fetchResult.data)\n\t\t? { kind: \"terminal\", task: fetchResult.data }\n\t\t: { kind: \"pending\", task: fetchResult.data };\n}\n","import type { RequestOptions } from \"../../client/types.ts\";\nimport {\n\tGET_SPEC,\n\tSUBMIT_HEAD_SPEC,\n\tSUBMIT_VERSION_SPEC,\n} from \"../../domains/cloud-v2/luau-execution-tasks/specs.ts\";\nimport type {\n\tLuauExecutionTask,\n\tLuauExecutionTaskRef,\n\tSubmitAtHeadParameters,\n\tSubmitAtVersionParameters,\n} from \"../../domains/cloud-v2/luau-execution-tasks/types.ts\";\nimport type { OpenCloudError } from \"../../errors/base.ts\";\nimport { observeAdmissionWaitAsync } from \"../../internal/http/admission-wait.ts\";\nimport { waitDeadlineFailure } from \"../../internal/http/request-deadline.ts\";\nimport type { ResourceClient } from \"../../internal/resource-client.ts\";\nimport { raceWithAbortAsync } from \"../../internal/utils/abort.ts\";\nimport type { Result } from \"../../types.ts\";\nimport { capacityErrorFrom, LuauExecutionCapacityError, luauTaskRefKey } from \"./capacity-error.ts\";\nimport { defaultPollDelay, isTerminalTask, type PollUntilDoneOptions } from \"./polling.ts\";\n\nconst MAX_CAPACITY_WAIT_MS = 2_147_483_647;\n\n/**\n * Per-request options for submitting a Luau execution task.\n *\n * @example\n *\n * ```ts\n * import type { LuauExecutionSubmitOptions } from \"@bedrock-rbx/ocale/luau-execution\";\n *\n * const options: LuauExecutionSubmitOptions = { capacityWaitMs: 60_000 };\n * expect(options.capacityWaitMs).toBe(60_000);\n * ```\n *\n * @since 0.3.2\n */\nexport interface LuauExecutionSubmitOptions extends RequestOptions {\n\t/**\n\t * Maximum milliseconds to spend waiting for occupied place capacity, from 1\n\t * through 2,147,483,647. Supplying this value opts the submission into\n\t * capacity-aware admission.\n\t */\n\treadonly capacityWaitMs?: number;\n}\n\n/**\n * Per-request capacity and polling options for submitting and awaiting a Luau\n * execution task.\n *\n * @since 0.3.2\n */\nexport type LuauExecutionRunOptions = LuauExecutionSubmitOptions & PollUntilDoneOptions;\n\ninterface CapacitySubmitCall {\n\treadonly inner: ResourceClient;\n\treadonly options: LuauExecutionSubmitOptions | undefined;\n\treadonly parameters: SubmitAtHeadParameters | SubmitAtVersionParameters;\n}\n\ninterface SubmitOnceCall extends CapacitySubmitCall {\n\treadonly options: RequestOptions;\n\treadonly refineError?: ((error: OpenCloudError) => OpenCloudError) | undefined;\n}\n\ninterface ObserveBlockersCall {\n\treadonly blockers: ReadonlyArray<LuauExecutionTaskRef>;\n\treadonly inner: ResourceClient;\n\treadonly options: RequestOptions;\n}\n\ninterface CapacityWaitCall extends ObserveBlockersCall {\n\treadonly capacityError: LuauExecutionCapacityError;\n\treadonly deadlineAt: number;\n\treadonly startedAt: number;\n}\n\ninterface CapacityAdmissionCall {\n\treadonly callerSignal: AbortSignal | undefined;\n\treadonly capacityError: LuauExecutionCapacityError;\n\treadonly deadlineAt: number;\n\treadonly options: RequestOptions;\n\treadonly startedAt: number;\n\treadonly submitCall: SubmitOnceCall;\n}\n\ninterface CapacitySleepCall {\n\treadonly inner: ResourceClient;\n\treadonly options: RequestOptions;\n\treadonly waitMs: number;\n}\n\ninterface CapacityRetryCall {\n\treadonly callerSignal: AbortSignal | undefined;\n\treadonly current: LuauExecutionCapacityError;\n\treadonly options: RequestOptions;\n\treadonly submitCall: SubmitOnceCall;\n}\n\ntype CapacityRetryDecision =\n\t| { readonly capacityError: LuauExecutionCapacityError; readonly continue: true }\n\t| {\n\t\t\treadonly continue: false;\n\t\t\treadonly result: Result<LuauExecutionTask, OpenCloudError>;\n\t  };\n\n/**\n * Submits through capacity admission when the caller opts in.\n *\n * @param call - Resource client, submit parameters, and per-request options.\n * @returns The submitted task or the failure that stopped admission.\n */\nexport async function submitWithCapacityAsync({\n\tinner,\n\toptions,\n\tparameters,\n}: CapacitySubmitCall): Promise<Result<LuauExecutionTask, OpenCloudError>> {\n\tconst { capacityWaitMs, ...requestOptions } = options ?? {};\n\tif (capacityWaitMs === undefined) {\n\t\treturn submitOnceAsync({ inner, options: requestOptions, parameters });\n\t}\n\n\tfunction refineError(error: OpenCloudError): OpenCloudError {\n\t\treturn capacityErrorFrom(error, parameters) ?? error;\n\t}\n\n\tconst submitCall = { inner, options: requestOptions, parameters, refineError };\n\tconst first = await submitOnceAsync(submitCall);\n\tif (!isCapacityFailure(first)) {\n\t\treturn first;\n\t}\n\n\tif (\n\t\t!Number.isFinite(capacityWaitMs) ||\n\t\tcapacityWaitMs < 1 ||\n\t\tcapacityWaitMs > MAX_CAPACITY_WAIT_MS\n\t) {\n\t\treturn first;\n\t}\n\n\treturn admitWithinCapacityAsync({\n\t\tcapacityError: first.err,\n\t\toptions: requestOptions,\n\t\tsubmitCall,\n\t\twaitMs: capacityWaitMs,\n\t});\n}\n\nfunction isCapacityFailure(\n\tresult: Result<LuauExecutionTask, OpenCloudError>,\n): result is { readonly err: LuauExecutionCapacityError; readonly success: false } {\n\treturn !result.success && result.err instanceof LuauExecutionCapacityError;\n}\n\nasync function submitOnceAsync({\n\tinner,\n\toptions,\n\tparameters,\n\trefineError,\n}: SubmitOnceCall): Promise<Result<LuauExecutionTask, OpenCloudError>> {\n\treturn \"versionId\" in parameters\n\t\t? inner.executeAsync({ options, parameters, refineError, spec: SUBMIT_VERSION_SPEC })\n\t\t: inner.executeAsync({ options, parameters, refineError, spec: SUBMIT_HEAD_SPEC });\n}\n\nfunction capacityBoundAborted(\n\toptions: RequestOptions,\n\tcallerSignal: AbortSignal | undefined,\n): boolean {\n\treturn options.signal?.aborted === true && callerSignal?.aborted !== true;\n}\n\nasync function observeBlockersAsync({\n\tblockers,\n\tinner,\n\toptions,\n}: ObserveBlockersCall): Promise<Result<LuauExecutionTaskRef | undefined, OpenCloudError>> {\n\tfor (const blocker of blockers) {\n\t\tconst observed = await inner.executeAsync({\n\t\t\toptions,\n\t\t\tparameters: { ref: blocker, view: \"BASIC\" as const },\n\t\t\tspec: GET_SPEC,\n\t\t});\n\t\tif (!observed.success) {\n\t\t\treturn observed;\n\t\t}\n\n\t\tif (isTerminalTask(observed.data)) {\n\t\t\treturn { data: blocker, success: true };\n\t\t}\n\t}\n\n\treturn { data: undefined, success: true };\n}\n\nasync function sleepForCapacityAsync({ inner, options, waitMs }: CapacitySleepCall): Promise<void> {\n\tawait observeAdmissionWaitAsync({\n\t\tdurationMs: waitMs,\n\t\tobserver: options.onAdmissionWait,\n\t\treason: \"operation-capacity\",\n\t\twaitAsync: async () => {\n\t\t\treturn raceWithAbortAsync(\n\t\t\t\tasync () => inner.sleep(waitMs, options.signal),\n\t\t\t\toptions.signal,\n\t\t\t);\n\t\t},\n\t});\n}\n\nasync function observeWithinCapacityAsync({\n\tblockers,\n\tcapacityError,\n\tdeadlineAt,\n\tinner,\n\toptions,\n\tstartedAt,\n}: CapacityWaitCall): Promise<Result<LuauExecutionTaskRef, OpenCloudError>> {\n\twhile (Date.now() < deadlineAt) {\n\t\tconst observed = await observeBlockersAsync({ blockers, inner, options });\n\t\tif (!observed.success) {\n\t\t\treturn observed;\n\t\t}\n\n\t\tif (observed.data !== undefined) {\n\t\t\treturn { data: observed.data, success: true };\n\t\t}\n\n\t\tconst elapsedMs = Date.now() - startedAt;\n\t\tconst pollWaitMs = defaultPollDelay(elapsedMs);\n\t\tconst deadlineFailure = waitDeadlineFailure({\n\t\t\tcause: capacityError,\n\t\t\tdeadlineMs: options.deadlineMs,\n\t\t\twaitMs: pollWaitMs,\n\t\t\twaitReason: \"operation-capacity\",\n\t\t});\n\t\tif (deadlineFailure !== undefined) {\n\t\t\treturn { err: deadlineFailure, success: false };\n\t\t}\n\n\t\tconst waitMs = Math.min(pollWaitMs, deadlineAt - Date.now());\n\t\tawait sleepForCapacityAsync({ inner, options, waitMs });\n\t}\n\n\treturn { err: capacityError, success: false };\n}\n\nfunction hasSameBlockers(\n\tleft: LuauExecutionCapacityError,\n\tright: LuauExecutionCapacityError,\n): boolean {\n\tif (left.blockers.length !== right.blockers.length) {\n\t\treturn false;\n\t}\n\n\tconst rightKeys = new Set(right.blockers.map(luauTaskRefKey));\n\treturn left.blockers.every((blocker) => rightKeys.has(luauTaskRefKey(blocker)));\n}\n\nasync function retryAfterCapacityAsync({\n\tcallerSignal,\n\tcurrent,\n\toptions,\n\tsubmitCall,\n}: CapacityRetryCall): Promise<CapacityRetryDecision> {\n\tconst retried = await submitOnceAsync(submitCall);\n\tif (!retried.success && capacityBoundAborted(options, callerSignal)) {\n\t\treturn { continue: false, result: { err: current, success: false } };\n\t}\n\n\tif (!isCapacityFailure(retried) || hasSameBlockers(current, retried.err)) {\n\t\treturn { continue: false, result: retried };\n\t}\n\n\treturn { capacityError: retried.err, continue: true };\n}\n\nasync function runCapacityAdmissionAsync({\n\tcallerSignal,\n\tcapacityError,\n\tdeadlineAt,\n\toptions,\n\tstartedAt,\n\tsubmitCall,\n}: CapacityAdmissionCall): Promise<Result<LuauExecutionTask, OpenCloudError>> {\n\tconst cleared = new Set<string>();\n\tlet current = capacityError;\n\twhile (true) {\n\t\tconst pending = current.blockers.filter((blocker) => !cleared.has(luauTaskRefKey(blocker)));\n\t\tif (pending.length === 0) {\n\t\t\treturn { err: current, success: false };\n\t\t}\n\n\t\tconst observed = await observeWithinCapacityAsync({\n\t\t\tblockers: pending,\n\t\t\tcapacityError: current,\n\t\t\tdeadlineAt,\n\t\t\tinner: submitCall.inner,\n\t\t\toptions,\n\t\t\tstartedAt,\n\t\t});\n\t\tif (!observed.success) {\n\t\t\treturn capacityBoundAborted(options, callerSignal)\n\t\t\t\t? { err: current, success: false }\n\t\t\t\t: observed;\n\t\t}\n\n\t\tcleared.add(luauTaskRefKey(observed.data));\n\t\tconst retry = await retryAfterCapacityAsync({ callerSignal, current, options, submitCall });\n\t\tif (!retry.continue) {\n\t\t\treturn retry.result;\n\t\t}\n\n\t\tcurrent = retry.capacityError;\n\t}\n}\n\nasync function admitWithinCapacityAsync({\n\tcapacityError,\n\toptions,\n\tsubmitCall,\n\twaitMs,\n}: {\n\treadonly capacityError: LuauExecutionCapacityError;\n\treadonly options: RequestOptions;\n\treadonly submitCall: SubmitOnceCall;\n\treadonly waitMs: number;\n}): Promise<Result<LuauExecutionTask, OpenCloudError>> {\n\tconst deadline = new AbortController();\n\tconst timer = setTimeout(() => {\n\t\tdeadline.abort();\n\t}, waitMs);\n\tconst signal =\n\t\toptions.signal === undefined\n\t\t\t? deadline.signal\n\t\t\t: AbortSignal.any([options.signal, deadline.signal]);\n\tconst startedAt = Date.now();\n\ttry {\n\t\treturn await runCapacityAdmissionAsync({\n\t\t\tcallerSignal: options.signal,\n\t\t\tcapacityError,\n\t\t\tdeadlineAt: startedAt + waitMs,\n\t\t\toptions: { ...options, signal },\n\t\t\tstartedAt,\n\t\t\tsubmitCall: { ...submitCall, options: { ...submitCall.options, signal } },\n\t\t});\n\t} finally {\n\t\tclearTimeout(timer);\n\t}\n}\n","import { GET_SPEC } from \"../../domains/cloud-v2/luau-execution-tasks/specs.ts\";\nimport type {\n\tLuauExecutionTask,\n\tLuauExecutionTaskRef,\n\tSubmitAtHeadParameters,\n\tSubmitAtVersionParameters,\n} from \"../../domains/cloud-v2/luau-execution-tasks/types.ts\";\nimport type { OpenCloudError } from \"../../errors/base.ts\";\nimport type { ResourceClient } from \"../../internal/resource-client.ts\";\nimport type { Result } from \"../../types.ts\";\nimport { type LuauExecutionRunOptions, submitWithCapacityAsync } from \"./capacity-admission.ts\";\nimport {\n\ttype PollDependencies,\n\tpollUntilDoneCoreAsync,\n\ttype PollUntilDoneOptions,\n} from \"./polling.ts\";\n\n/**\n * Builds the {@link PollDependencies} bundle used by {@link\n * pollUntilDoneCoreAsync}, closing over the supplied {@link ResourceClient},\n * task ref, and per-request options so the core loop stays narrow.\n *\n * @param inner - The {@link ResourceClient} that issues each `tasks.get` call.\n * @param args - The polling options and the task ref to fetch on every iteration.\n * @returns A {@link PollDependencies} bundle wiring `fetch`, `now`, and `sleep`.\n */\nexport function buildPollDependencies(\n\tinner: ResourceClient,\n\targs: { options: PollUntilDoneOptions; ref: LuauExecutionTaskRef },\n): PollDependencies {\n\treturn {\n\t\tfetch: async () => {\n\t\t\treturn inner.executeAsync({\n\t\t\t\toptions: args.options,\n\t\t\t\tparameters: { ref: args.ref, view: \"BASIC\" },\n\t\t\t\tspec: GET_SPEC,\n\t\t\t});\n\t\t},\n\t\tnow: Date.now,\n\t\tsleep: inner.sleep,\n\t};\n}\n\n/**\n * Submits a Luau execution task and polls it to a terminal state. Dispatches\n * to the head-version or specific-version submit spec based on the presence of\n * `versionId`, then delegates to {@link pollUntilDoneCoreAsync}.\n *\n * @param inner - The {@link ResourceClient} that issues submit and poll calls.\n * @param args - The polling options and submit parameters.\n * @returns A {@link Result} wrapping the terminal {@link LuauExecutionTask}, or\n *   the {@link OpenCloudError} that caused submit or polling to fail.\n */\nexport async function submitAndPollAsync(\n\tinner: ResourceClient,\n\t{\n\t\toptions,\n\t\tparameters,\n\t}: {\n\t\toptions: LuauExecutionRunOptions;\n\t\tparameters: SubmitAtHeadParameters | SubmitAtVersionParameters;\n\t},\n): Promise<Result<LuauExecutionTask, OpenCloudError>> {\n\tconst submitResult = await submitWithCapacityAsync({ inner, options, parameters });\n\tif (!submitResult.success) {\n\t\treturn submitResult;\n\t}\n\n\treturn pollUntilDoneCoreAsync(\n\t\tbuildPollDependencies(inner, { options, ref: submitResult.data.ref }),\n\t\toptions,\n\t);\n}\n"],"mappings":"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"}