@putdotio/sdk 11.2.1 → 11.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -316,6 +316,13 @@ const playlistUrl = await sdk.files.getHlsStreamUrl(fileId, {
316
316
 
317
317
  const vlcPlaylistUrl = await sdk.files.getXspfPlaylistUrl(fileId);
318
318
 
319
+ // The master playlist put.io would serve, for inspecting the selected
320
+ // variant's CODECS and VIDEO-RANGE. `playOriginal` picks the original
321
+ // file over the MP4 conversion.
322
+ const masterPlaylist = await sdk.files.getHlsMasterPlaylist(fileId, {
323
+ playOriginal: false,
324
+ });
325
+
319
326
  const upload = await sdk.files.upload({
320
327
  file: new File(["hello"], "hello.txt"),
321
328
  parentId: 0,
@@ -219,7 +219,7 @@ const withBody = (body) => {
219
219
  const makeRequest = (url, options, authorization) => Effect.gen(function* () {
220
220
  const headers = new Headers(options.headers);
221
221
  const body = options.body ?? { type: "none" };
222
- headers.set("accept", "application/json");
222
+ if (!headers.has("accept")) headers.set("accept", "application/json");
223
223
  if (authorization) headers.set("authorization", authorization);
224
224
  if (body.type === "json" && !headers.has("content-type")) headers.set("content-type", "application/json");
225
225
  return {
@@ -244,6 +244,7 @@ const requestJson = (schema, options) => executeRequest(options).pipe(Effect.fla
244
244
  const selectJsonField = (field) => (effect) => effect.pipe(Effect.map((value) => value[field]));
245
245
  const selectJsonFields = (...fields) => (effect) => effect.pipe(Effect.map((value) => Object.fromEntries(fields.map((field) => [field, value[field]]))));
246
246
  const requestArrayBuffer = (options) => executeRequest(options).pipe(Effect.flatMap((response) => isSuccessStatus(response.status) ? response.arrayBuffer.pipe(Effect.map((buffer) => new Uint8Array(buffer))) : decodeFailure(response, response.headers).pipe(Effect.flatMap(Effect.fail))));
247
+ const requestText = (options) => requestArrayBuffer(options).pipe(Effect.map((bytes) => new TextDecoder().decode(bytes)));
247
248
  const requestVoid = (options) => executeRequest(options).pipe(Effect.flatMap((response) => isSuccessStatus(response.status) ? Effect.void : decodeFailure(response, response.headers).pipe(Effect.flatMap(Effect.fail))));
248
249
  //#endregion
249
250
  //#region src/core/forms.ts
@@ -257,6 +258,6 @@ const toCursorSelectionForm = (selection, idsFieldName) => {
257
258
  };
258
259
  };
259
260
  //#endregion
260
- export { definePutioOperationErrorSpec as A, mapTransportError as B, PutioConfigurationError as C, PutioTransportError as D, PutioRateLimitError as E, isPutioOperationError as F, responseRateLimitHeaders as H, isPutioRateLimitError as I, makeResponseError as L, isPutioApiError as M, isPutioAuthError as N, PutioValidationError as O, isPutioErrorEnvelope as P, mapConfigurationError as R, PutioAuthError as S, PutioOperationError as T, withOperationErrors as U, parseErrorBody as V, selectJsonFields as _, PutioSdkConfig as a, DEFAULT_PUTIO_WEB_APP_URL as b, makePutioFetchClient as c, makePutioSdkLayer as d, makePutioSdkLiveLayer as f, selectJsonField as g, requestVoid as h, PutioHttpClient as i, fallbackPutioErrorEnvelope as j, decodePutioErrorEnvelope as k, makePutioFetchLayer as l, requestJson as m, toCursorSelectionForm as n, buildPutioUrl as o, requestArrayBuffer as p, OkResponseSchema as r, encodePathSegment as s, joinCsv as t, makePutioSdkConfig as u, DEFAULT_PUTIO_API_BASE_URL as v, PutioErrorEnvelopeSchema as w, PutioApiError as x, DEFAULT_PUTIO_UPLOAD_BASE_URL as y, mapDecodeErrorToValidationError as z };
261
+ export { decodePutioErrorEnvelope as A, mapDecodeErrorToValidationError as B, PutioAuthError as C, PutioRateLimitError as D, PutioOperationError as E, isPutioErrorEnvelope as F, parseErrorBody as H, isPutioOperationError as I, isPutioRateLimitError as L, fallbackPutioErrorEnvelope as M, isPutioApiError as N, PutioTransportError as O, isPutioAuthError as P, makeResponseError as R, PutioApiError as S, PutioErrorEnvelopeSchema as T, responseRateLimitHeaders as U, mapTransportError as V, withOperationErrors as W, selectJsonField as _, PutioSdkConfig as a, DEFAULT_PUTIO_UPLOAD_BASE_URL as b, makePutioFetchClient as c, makePutioSdkLayer as d, makePutioSdkLiveLayer as f, requestVoid as g, requestText as h, PutioHttpClient as i, definePutioOperationErrorSpec as j, PutioValidationError as k, makePutioFetchLayer as l, requestJson as m, toCursorSelectionForm as n, buildPutioUrl as o, requestArrayBuffer as p, OkResponseSchema as r, encodePathSegment as s, joinCsv as t, makePutioSdkConfig as u, selectJsonFields as v, PutioConfigurationError as w, DEFAULT_PUTIO_WEB_APP_URL as x, DEFAULT_PUTIO_API_BASE_URL as y, mapConfigurationError as z };
261
262
 
262
- //# sourceMappingURL=forms-bd8oHsdi.js.map
263
+ //# sourceMappingURL=forms-C7FIvCRP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"forms-bd8oHsdi.js","names":[],"sources":["../src/core/errors.ts","../src/core/defaults.ts","../src/core/http.ts","../src/core/forms.ts"],"sourcesContent":["import { Data, Effect, Predicate, Schema } from \"effect\";\n\nexport const PutioErrorEnvelopeSchema = Schema.Struct({\n status: Schema.optional(Schema.String),\n error: Schema.optional(Schema.String),\n error_message: Schema.optional(Schema.String),\n error_type: Schema.optional(Schema.String),\n error_uri: Schema.optional(Schema.String),\n error_id: Schema.optional(Schema.NullOr(Schema.String)),\n extra: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n status_code: Schema.optional(Schema.Int),\n details: Schema.optional(Schema.Unknown),\n});\n\nexport type PutioErrorEnvelope = Schema.Schema.Type<typeof PutioErrorEnvelopeSchema>;\n\nexport interface PutioKnownErrorContract<\n TType extends string = string,\n TStatus extends number = number,\n TBody extends PutioErrorEnvelope = PutioErrorEnvelope,\n> {\n readonly bodySchema?: Schema.Schema<TBody> | undefined;\n readonly errorType?: TType | undefined;\n readonly statusCode?: TStatus | undefined;\n}\n\ntype ContractErrorType<TContract extends PutioKnownErrorContract> =\n TContract extends PutioKnownErrorContract<infer TType, number> ? TType : never;\n\ntype ContractStatusCode<TContract extends PutioKnownErrorContract> =\n TContract extends PutioKnownErrorContract<string, infer TStatus> ? TStatus : never;\n\ntype ContractBody<TContract extends PutioKnownErrorContract> = TContract extends {\n readonly bodySchema: Schema.Schema<infer TBody extends PutioErrorEnvelope>;\n}\n ? TBody\n : PutioErrorEnvelope;\n\nexport type PutioTypedErrorEnvelope<TContract extends PutioKnownErrorContract> =\n TContract extends PutioKnownErrorContract\n ? Omit<ContractBody<TContract>, \"error_message\" | \"error_type\" | \"status_code\"> & {\n readonly error_message?: string;\n readonly error_type?: [ContractErrorType<TContract>] extends [never]\n ? string\n : ContractErrorType<TContract>;\n readonly status_code?: [ContractStatusCode<TContract>] extends [never]\n ? number\n : ContractStatusCode<TContract>;\n }\n : never;\n\nexport interface PutioOperationErrorSpec<\n TDomain extends string = string,\n TOperation extends string = string,\n TContracts extends ReadonlyArray<PutioKnownErrorContract> =\n ReadonlyArray<PutioKnownErrorContract>,\n> {\n readonly domain: TDomain;\n readonly operation: TOperation;\n readonly knownErrors: TContracts;\n}\n\ntype OperationContractOf<TSpec extends PutioOperationErrorSpec> = Extract<\n TSpec[\"knownErrors\"][number],\n PutioKnownOperationErrorContract\n>;\n\ntype OperationContractOfParts<\n TDomain extends string,\n TOperation extends string,\n TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n> = OperationContractOf<PutioOperationErrorSpec<TDomain, TOperation, TContracts>>;\n\ntype PutioOperationErrorReason<TContract extends PutioKnownErrorContract> = TContract extends {\n readonly errorType: infer TType extends string;\n}\n ? {\n readonly kind: \"error_type\";\n readonly errorType: TType;\n }\n : TContract extends { readonly statusCode: infer TStatus extends number }\n ? {\n readonly kind: \"status_code\";\n readonly statusCode: TStatus;\n }\n : never;\n\nexport type PutioKnownOperationErrorContract =\n | {\n readonly errorType: string;\n readonly statusCode?: number;\n }\n | {\n readonly errorType?: undefined;\n readonly statusCode: number;\n };\n\nconst isKnownContractMatch = <TContract extends PutioKnownErrorContract>(\n contract: TContract,\n error: PutioApiError | PutioAuthError,\n): contract is Extract<TContract, PutioKnownOperationErrorContract> => {\n if (contract.bodySchema !== undefined && !Schema.is(contract.bodySchema)(error.body)) {\n return false;\n }\n\n if (contract.errorType !== undefined) {\n if (error.body.error_type !== contract.errorType) {\n return false;\n }\n\n return contract.statusCode === undefined || error.status === contract.statusCode;\n }\n\n if (contract.statusCode !== undefined) {\n return error.status === contract.statusCode;\n }\n\n return false;\n};\n\nconst isMatchableApiError = (error: PutioSdkError): error is PutioApiError | PutioAuthError =>\n error._tag === \"PutioApiError\" || error._tag === \"PutioAuthError\";\n\nconst hasOptionalString = (record: Readonly<Record<string, unknown>>, key: string): boolean =>\n !(key in record) || record[key] === undefined || typeof record[key] === \"string\";\n\nconst hasOptionalInteger = (record: Readonly<Record<string, unknown>>, key: string): boolean =>\n !(key in record) ||\n record[key] === undefined ||\n (typeof record[key] === \"number\" && Number.isInteger(record[key]));\n\nconst hasOptionalNullableString = (\n record: Readonly<Record<string, unknown>>,\n key: string,\n): boolean =>\n !(key in record) ||\n record[key] === undefined ||\n record[key] === null ||\n typeof record[key] === \"string\";\n\nconst hasOptionalRecord = (record: Readonly<Record<string, unknown>>, key: string): boolean =>\n !(key in record) || record[key] === undefined || Predicate.isObject(record[key]);\n\nconst isKnownOperationErrorContract = (value: unknown): value is PutioKnownOperationErrorContract =>\n Predicate.isObject(value) &&\n (typeof value.errorType === \"string\" || typeof value.statusCode === \"number\") &&\n hasOptionalString(value, \"errorType\") &&\n hasOptionalInteger(value, \"statusCode\");\n\nconst isOperationReason = (\n value: unknown,\n): value is PutioOperationErrorReason<PutioKnownOperationErrorContract> => {\n if (!Predicate.isObject(value)) {\n return false;\n }\n\n if (value.kind === \"error_type\") {\n return typeof value.errorType === \"string\";\n }\n\n if (value.kind === \"status_code\") {\n return typeof value.statusCode === \"number\";\n }\n\n return false;\n};\n\nfunction toOperationReason<TContract extends { readonly errorType: string }>(\n contract: TContract,\n): PutioOperationErrorReason<TContract>;\nfunction toOperationReason<TContract extends { readonly statusCode: number }>(\n contract: TContract,\n): PutioOperationErrorReason<TContract>;\nfunction toOperationReason(\n contract: PutioKnownOperationErrorContract,\n): PutioOperationErrorReason<PutioKnownOperationErrorContract> {\n if (contract.errorType !== undefined) {\n return {\n kind: \"error_type\",\n errorType: contract.errorType,\n };\n }\n\n return {\n kind: \"status_code\",\n statusCode: contract.statusCode,\n };\n}\n\nexport class PutioTransportError extends Data.TaggedError(\"PutioTransportError\")<{\n readonly cause: unknown;\n}> {}\n\nexport class PutioConfigurationError extends Data.TaggedError(\"PutioConfigurationError\")<{\n readonly cause: unknown;\n}> {}\n\nexport class PutioValidationError extends Data.TaggedError(\"PutioValidationError\")<{\n readonly cause: unknown;\n}> {}\n\nconst PutioResponseErrorFields = {\n status: Schema.Int,\n body: PutioErrorEnvelopeSchema,\n};\n\nexport class PutioApiError extends Schema.TaggedError<PutioApiError>()(\"PutioApiError\", {\n ...PutioResponseErrorFields,\n}) {}\n\nexport class PutioAuthError extends Schema.TaggedError<PutioAuthError>()(\"PutioAuthError\", {\n ...PutioResponseErrorFields,\n}) {}\n\nexport class PutioRateLimitError extends Schema.TaggedError<PutioRateLimitError>()(\n \"PutioRateLimitError\",\n {\n ...PutioResponseErrorFields,\n action: Schema.optional(Schema.String),\n id: Schema.optional(Schema.String),\n limit: Schema.optional(Schema.String),\n remaining: Schema.optional(Schema.String),\n retryAfter: Schema.optional(Schema.String),\n reset: Schema.optional(Schema.String),\n },\n) {}\n\nexport class PutioOperationError<\n TDomain extends string,\n TOperation extends string,\n TContract extends PutioKnownOperationErrorContract,\n> extends Data.TaggedError(\"PutioOperationError\")<{\n readonly body: PutioTypedErrorEnvelope<TContract>;\n readonly contract: TContract;\n readonly domain: TDomain;\n readonly operation: TOperation;\n readonly reason: PutioOperationErrorReason<TContract>;\n readonly status: number;\n}> {}\n\nexport type PutioSdkError =\n | PutioConfigurationError\n | PutioTransportError\n | PutioValidationError\n | PutioApiError\n | PutioAuthError\n | PutioRateLimitError;\n\nexport type PutioUnhandledSdkError =\n | PutioConfigurationError\n | PutioTransportError\n | PutioValidationError\n | PutioApiError\n | PutioAuthError\n | PutioRateLimitError;\n\nexport type PutioOperationErrorFromSpec<TSpec extends PutioOperationErrorSpec> =\n PutioOperationError<TSpec[\"domain\"], TSpec[\"operation\"], OperationContractOf<TSpec>>;\n\nexport type PutioOperationFailure<TSpec extends PutioOperationErrorSpec> =\n | PutioUnhandledSdkError\n | PutioOperationErrorFromSpec<TSpec>;\n\nexport type AnyPutioOperationError = PutioOperationError<\n string,\n string,\n PutioKnownOperationErrorContract\n>;\n\nexport const definePutioOperationErrorSpec = <\n const TDomain extends string,\n const TOperation extends string,\n const TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n>(\n spec: PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n) => spec;\n\nexport const decodePutioErrorEnvelope = Schema.decodeUnknownEffect(PutioErrorEnvelopeSchema);\n\nexport const isPutioErrorEnvelope = (value: unknown): value is PutioErrorEnvelope =>\n Predicate.isObject(value) &&\n hasOptionalString(value, \"status\") &&\n hasOptionalString(value, \"error\") &&\n hasOptionalString(value, \"error_message\") &&\n hasOptionalString(value, \"error_type\") &&\n hasOptionalString(value, \"error_uri\") &&\n hasOptionalNullableString(value, \"error_id\") &&\n hasOptionalRecord(value, \"extra\") &&\n hasOptionalInteger(value, \"status_code\");\n\nconst hasStatusAndBody = <TTag extends string>(\n value: unknown,\n tag: TTag,\n): value is {\n readonly _tag: TTag;\n readonly body: PutioErrorEnvelope;\n readonly status: number;\n} =>\n Predicate.isObject(value) &&\n value._tag === tag &&\n typeof value.status === \"number\" &&\n isPutioErrorEnvelope(value.body);\n\nexport const isPutioApiError = (value: unknown): value is PutioApiError =>\n hasStatusAndBody(value, \"PutioApiError\");\n\nexport const isPutioAuthError = (value: unknown): value is PutioAuthError =>\n hasStatusAndBody(value, \"PutioAuthError\");\n\nexport const isPutioRateLimitError = (value: unknown): value is PutioRateLimitError =>\n hasStatusAndBody(value, \"PutioRateLimitError\") &&\n Predicate.isObject(value) &&\n hasOptionalString(value, \"action\") &&\n hasOptionalString(value, \"id\") &&\n hasOptionalString(value, \"limit\") &&\n hasOptionalString(value, \"remaining\") &&\n hasOptionalString(value, \"retryAfter\") &&\n hasOptionalString(value, \"reset\");\n\nexport const isPutioOperationError = (value: unknown): value is AnyPutioOperationError =>\n Predicate.isObject(value) &&\n value._tag === \"PutioOperationError\" &&\n isPutioErrorEnvelope(value.body) &&\n isKnownOperationErrorContract(value.contract) &&\n typeof value.domain === \"string\" &&\n typeof value.operation === \"string\" &&\n isOperationReason(value.reason) &&\n typeof value.status === \"number\";\n\nexport const fallbackPutioErrorEnvelope = (status: number): PutioErrorEnvelope => ({\n error_message: `put.io API request failed with status ${status}`,\n status_code: status,\n});\n\nconst getHeader = (headers: Headers, name: string): string | undefined =>\n headers.get(name) ?? undefined;\n\nexport const responseRateLimitHeaders = (headers: Headers) => ({\n action: getHeader(headers, \"x-ratelimit-action\"),\n id: getHeader(headers, \"x-ratelimit-id\"),\n limit: getHeader(headers, \"x-ratelimit-limit\"),\n remaining: getHeader(headers, \"x-ratelimit-remaining\"),\n retryAfter: getHeader(headers, \"retry-after\"),\n reset: getHeader(headers, \"x-ratelimit-reset\"),\n});\n\nexport const mapDecodeErrorToValidationError = (cause: unknown) =>\n new PutioValidationError({ cause });\n\nexport const mapConfigurationError = (cause: unknown) => new PutioConfigurationError({ cause });\n\nexport const mapTransportError = (cause: unknown) => new PutioTransportError({ cause });\n\nexport const makeResponseError = (\n status: number,\n headers: Headers,\n body: PutioErrorEnvelope,\n): PutioSdkError => {\n if (status === 429) {\n return new PutioRateLimitError({\n status,\n body,\n ...responseRateLimitHeaders(headers),\n });\n }\n\n if (status === 401 || status === 403) {\n return new PutioAuthError({ status, body });\n }\n\n return new PutioApiError({ status, body });\n};\n\nexport const parseErrorBody = (status: number, json: unknown) =>\n decodePutioErrorEnvelope(json).pipe(\n Effect.orElseSucceed(() => fallbackPutioErrorEnvelope(status)),\n );\n\nexport function withOperationErrors<\n A,\n E extends PutioSdkError,\n R,\n const TDomain extends string,\n const TOperation extends string,\n const TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n>(\n effect: Effect.Effect<A, E, R>,\n spec: PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n): Effect.Effect<\n A,\n | E\n | PutioOperationError<\n TDomain,\n TOperation,\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n R\n>;\nexport function withOperationErrors<\n const TDomain extends string,\n const TOperation extends string,\n const TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n>(\n spec: PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n): <A, E extends PutioSdkError, R>(\n effect: Effect.Effect<A, E, R>,\n) => Effect.Effect<\n A,\n | E\n | PutioOperationError<\n TDomain,\n TOperation,\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n R\n>;\nexport function withOperationErrors<\n A,\n E extends PutioSdkError,\n R,\n const TDomain extends string,\n const TOperation extends string,\n const TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n>(\n effectOrSpec: Effect.Effect<A, E, R> | PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n maybeSpec?: PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n):\n | Effect.Effect<\n A,\n | E\n | PutioOperationError<\n TDomain,\n TOperation,\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n R\n >\n | (<A2, E2 extends PutioSdkError, R2>(\n effect: Effect.Effect<A2, E2, R2>,\n ) => Effect.Effect<\n A2,\n | E2\n | PutioOperationError<\n TDomain,\n TOperation,\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n R2\n >) {\n if (maybeSpec === undefined) {\n const spec = effectOrSpec as PutioOperationErrorSpec<TDomain, TOperation, TContracts>;\n\n return <A2, E2 extends PutioSdkError, R2>(effect: Effect.Effect<A2, E2, R2>) =>\n withOperationErrors(effect, spec);\n }\n\n const effect = effectOrSpec as Effect.Effect<A, E, R>;\n const spec = maybeSpec;\n\n return effect.pipe(\n Effect.mapError((error) => {\n if (!isMatchableApiError(error)) {\n return error;\n }\n\n const contract = spec.knownErrors.find((candidate) => isKnownContractMatch(candidate, error));\n\n if (!contract) {\n return error;\n }\n\n return new PutioOperationError({\n body: error.body as PutioTypedErrorEnvelope<\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n contract,\n domain: spec.domain,\n operation: spec.operation,\n reason: toOperationReason(contract),\n status: error.status,\n });\n }),\n );\n}\n","export const DEFAULT_PUTIO_API_BASE_URL = \"https://api.put.io\";\nexport const DEFAULT_PUTIO_UPLOAD_BASE_URL = \"https://upload.put.io\";\nexport const DEFAULT_PUTIO_WEB_APP_URL = \"https://app.put.io\";\n","import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport {\n DEFAULT_PUTIO_API_BASE_URL,\n DEFAULT_PUTIO_UPLOAD_BASE_URL,\n DEFAULT_PUTIO_WEB_APP_URL,\n} from \"./defaults.js\";\nimport {\n makeResponseError,\n mapConfigurationError,\n mapDecodeErrorToValidationError,\n mapTransportError,\n parseErrorBody,\n PutioConfigurationError,\n type PutioSdkError,\n} from \"./errors.js\";\n\nexport type PutioQueryValue = string | number | boolean | null | undefined;\n\nexport type PutioQuery = Readonly<Record<string, PutioQueryValue>>;\n\nexport type PutioPathSegment = string | number | boolean;\n\nexport interface PutioSdkConfigShape {\n readonly accessToken?: string;\n readonly baseUrl?: string | URL;\n readonly uploadBaseUrl?: string | URL;\n readonly webAppUrl?: string | URL;\n}\n\nexport class PutioSdkConfig extends Context.Service<PutioSdkConfig, PutioSdkConfigShape>()(\n \"PutioSdkConfig\",\n) {}\n\nexport interface PutioHttpRequest {\n readonly body?: BodyInit;\n readonly headers: Headers;\n readonly method: PutioRequestMethod;\n readonly url: string;\n}\n\nexport interface PutioHttpResponse {\n readonly arrayBuffer: Effect.Effect<ArrayBuffer, PutioSdkError>;\n readonly headers: Headers;\n readonly json: Effect.Effect<unknown, PutioSdkError>;\n readonly status: number;\n}\n\nexport interface PutioHttpClientShape {\n readonly execute: (request: PutioHttpRequest) => Effect.Effect<PutioHttpResponse, PutioSdkError>;\n}\n\nexport class PutioHttpClient extends Context.Service<PutioHttpClient, PutioHttpClientShape>()(\n \"PutioHttpClient\",\n) {}\n\nexport type PutioSdkContext = PutioSdkConfig | PutioHttpClient;\n\nexport const makePutioSdkConfig = (config: PutioSdkConfigShape): PutioSdkConfigShape => ({\n accessToken: config.accessToken,\n baseUrl: config.baseUrl ?? DEFAULT_PUTIO_API_BASE_URL,\n uploadBaseUrl: config.uploadBaseUrl ?? DEFAULT_PUTIO_UPLOAD_BASE_URL,\n webAppUrl: config.webAppUrl ?? DEFAULT_PUTIO_WEB_APP_URL,\n});\n\nexport const makePutioSdkLayer = (config: PutioSdkConfigShape) =>\n Layer.succeed(PutioSdkConfig, makePutioSdkConfig(config));\n\nexport const makePutioSdkLiveLayer = (config: PutioSdkConfigShape) =>\n Layer.mergeAll(makePutioSdkLayer(config), makePutioFetchLayer());\n\nexport const makePutioFetchLayer = (\n fetchImplementation: typeof globalThis.fetch = globalThis.fetch,\n) => Layer.succeed(PutioHttpClient, makePutioFetchClient(fetchImplementation));\n\nexport const makePutioFetchClient = (\n fetchImplementation: typeof globalThis.fetch = globalThis.fetch,\n): PutioHttpClientShape => ({\n execute: (request) =>\n Effect.tryPromise({\n try: async (signal) => {\n const response = await fetchImplementation(request.url, {\n body: request.body,\n headers: request.headers,\n method: request.method,\n signal,\n });\n\n return {\n arrayBuffer: Effect.tryPromise({\n try: () => response.arrayBuffer(),\n catch: mapTransportError,\n }),\n headers: response.headers,\n json: Effect.tryPromise({\n try: () => response.json(),\n catch: mapTransportError,\n }),\n status: response.status,\n };\n },\n catch: mapTransportError,\n }),\n});\n\nexport const encodePathSegment = (value: PutioPathSegment): string =>\n encodeURIComponent(String(value));\n\nconst absoluteUrlPattern = /^(?:[a-z][a-z\\d+.-]*:|\\/\\/)/i;\n\nconst normalizeApiPath = (path: string): string => {\n if (absoluteUrlPattern.test(path)) {\n throw mapConfigurationError(\"SDK API request paths must be relative to the configured baseUrl\");\n }\n\n return path.startsWith(\"/\") ? path : `/${path}`;\n};\n\nexport const buildPutioUrl = (baseUrl: string | URL, path: string, query?: PutioQuery): string => {\n const url = new URL(normalizeApiPath(path), baseUrl);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return url.toString();\n};\n\nconst mapUrlBuildError = (cause: unknown) =>\n cause instanceof PutioConfigurationError ? cause : mapConfigurationError(cause);\n\nexport const OkResponseSchema = Schema.Struct({\n status: Schema.Literal(\"OK\"),\n});\n\nexport type PutioAuth =\n | { readonly type: \"config-token\" }\n | { readonly type: \"token\"; readonly token: string }\n | { readonly type: \"basic\"; readonly username: string; readonly password: string }\n | { readonly type: \"none\" };\n\ntype PutioRequestMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\ntype PutioRequestBody =\n | { readonly type: \"none\" }\n | { readonly type: \"json\"; readonly value: unknown }\n | { readonly type: \"form\"; readonly value: Record<string, unknown> }\n | { readonly type: \"form-data\"; readonly value: FormData };\n\ninterface PutioRequestOptions {\n readonly method: PutioRequestMethod;\n readonly path: string;\n readonly baseUrl?: string | URL;\n readonly query?: PutioQuery;\n readonly headers?: HeadersInit;\n readonly auth?: PutioAuth;\n readonly body?: PutioRequestBody;\n}\n\nconst isSuccessStatus = (status: number) => status >= 200 && status < 300;\n\nconst decodeSuccessJson = <S extends Schema.Top>(schema: S, response: PutioHttpResponse) =>\n response.json.pipe(\n Effect.flatMap((json) =>\n Schema.decodeUnknownEffect(schema)(json).pipe(\n Effect.mapError(mapDecodeErrorToValidationError),\n ),\n ),\n );\n\nconst decodeFailure = (response: PutioHttpResponse, headers: Headers) =>\n response.json.pipe(\n Effect.flatMap((json) => parseErrorBody(response.status, json)),\n Effect.map((body) => makeResponseError(response.status, headers, body)),\n );\n\nconst toBasicAuthorization = (username: string, password: string) => {\n if (typeof globalThis.btoa === \"function\") {\n return `Basic ${globalThis.btoa(`${username}:${password}`)}`;\n }\n\n throw mapConfigurationError(\n \"This runtime does not provide btoa(), so Basic auth cannot be encoded safely\",\n );\n};\n\nconst resolveAuthorization = (\n config: PutioSdkConfigShape,\n auth: PutioAuth | undefined,\n): Effect.Effect<string | undefined, PutioSdkError> => {\n const resolvedAuth = auth ?? { type: \"config-token\" as const };\n\n switch (resolvedAuth.type) {\n case \"none\":\n return Effect.succeed(undefined);\n case \"token\":\n return Effect.succeed(`Token ${resolvedAuth.token}`);\n case \"basic\":\n return Effect.try({\n try: () => toBasicAuthorization(resolvedAuth.username, resolvedAuth.password),\n catch: mapConfigurationError,\n });\n case \"config-token\":\n if (!config.accessToken) {\n return Effect.fail(\n mapConfigurationError(\n \"This endpoint requires an access token, but PutioSdkConfig.accessToken is missing\",\n ),\n );\n }\n\n return Effect.succeed(`Token ${config.accessToken}`);\n }\n};\n\nconst normalizeFormValue = (value: unknown): string => {\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n\n return JSON.stringify(value);\n};\n\nconst withBody = (body: PutioRequestBody): Effect.Effect<BodyInit | undefined, PutioSdkError> => {\n switch (body.type) {\n case \"none\":\n return Effect.succeed(undefined);\n case \"json\":\n return Effect.try({\n try: () => JSON.stringify(body.value),\n catch: mapDecodeErrorToValidationError,\n });\n case \"form\":\n return Effect.succeed(\n new URLSearchParams(\n Object.entries(body.value).flatMap(([key, value]) =>\n value === undefined ? [] : [[key, normalizeFormValue(value)]],\n ),\n ),\n );\n case \"form-data\":\n return Effect.succeed(body.value);\n }\n};\n\nconst makeRequest = (url: string, options: PutioRequestOptions, authorization?: string) =>\n Effect.gen(function* () {\n const headers = new Headers(options.headers);\n\n const body = options.body ?? { type: \"none\" as const };\n headers.set(\"accept\", \"application/json\");\n\n if (authorization) {\n headers.set(\"authorization\", authorization);\n }\n\n if (body.type === \"json\" && !headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n\n return {\n body: yield* withBody(body),\n headers,\n method: options.method,\n url,\n };\n });\n\nconst executeRequest = (options: PutioRequestOptions) =>\n Effect.gen(function* () {\n const config = yield* PutioSdkConfig;\n const httpClient = yield* PutioHttpClient;\n const authorization = yield* resolveAuthorization(config, options.auth);\n const url = yield* Effect.try({\n try: () =>\n buildPutioUrl(\n options.baseUrl ?? config.baseUrl ?? DEFAULT_PUTIO_API_BASE_URL,\n options.path,\n options.query,\n ),\n catch: mapUrlBuildError,\n });\n const request = yield* makeRequest(url, options, authorization);\n\n return yield* httpClient.execute(request);\n });\n\nexport const requestJson = <S extends Schema.Top>(\n schema: S,\n options: PutioRequestOptions,\n): Effect.Effect<S[\"Type\"], PutioSdkError, PutioSdkContext | S[\"DecodingServices\"]> =>\n executeRequest(options).pipe(\n Effect.flatMap((response) =>\n isSuccessStatus(response.status)\n ? decodeSuccessJson(schema, response)\n : decodeFailure(response, response.headers).pipe(Effect.flatMap(Effect.fail)),\n ),\n );\n\nexport const selectJsonField =\n <K extends string>(field: K) =>\n <A extends { readonly [P in K]: unknown }, E, R>(\n effect: Effect.Effect<A, E, R>,\n ): Effect.Effect<A[K], E, R> =>\n effect.pipe(Effect.map((value) => value[field]));\n\nexport const selectJsonFields =\n <const K extends readonly string[]>(...fields: K) =>\n <A extends { readonly [P in K[number]]: unknown }, E, R>(\n effect: Effect.Effect<A, E, R>,\n ): Effect.Effect<Pick<A, K[number]>, E, R> =>\n effect.pipe(\n Effect.map(\n (value) =>\n Object.fromEntries(fields.map((field) => [field, value[field as K[number]]])) as Pick<\n A,\n K[number]\n >,\n ),\n );\n\nexport const requestArrayBuffer = (\n options: PutioRequestOptions,\n): Effect.Effect<Uint8Array, PutioSdkError, PutioSdkContext> =>\n executeRequest(options).pipe(\n Effect.flatMap((response) =>\n isSuccessStatus(response.status)\n ? response.arrayBuffer.pipe(Effect.map((buffer) => new Uint8Array(buffer)))\n : decodeFailure(response, response.headers).pipe(Effect.flatMap(Effect.fail)),\n ),\n );\n\nexport const requestVoid = (\n options: PutioRequestOptions,\n): Effect.Effect<void, PutioSdkError, PutioSdkContext> =>\n executeRequest(options).pipe(\n Effect.flatMap((response) =>\n isSuccessStatus(response.status)\n ? Effect.void\n : decodeFailure(response, response.headers).pipe(Effect.flatMap(Effect.fail)),\n ),\n );\n","type CsvValue = string | number;\n\nexport interface CursorSelectionInput<TValue extends CsvValue = number> {\n readonly cursor?: string;\n readonly excludeIds?: ReadonlyArray<TValue>;\n readonly ids?: ReadonlyArray<TValue>;\n}\n\nexport const joinCsv = <TValue extends CsvValue>(\n values: ReadonlyArray<TValue> | undefined,\n): string | undefined => (values && values.length > 0 ? values.join(\",\") : undefined);\n\nexport const toCursorSelectionForm = <\n TValue extends CsvValue,\n const TIdsFieldName extends string = \"file_ids\",\n>(\n selection: CursorSelectionInput<TValue>,\n idsFieldName?: TIdsFieldName,\n): {\n readonly cursor?: string;\n readonly exclude_ids?: string;\n} & Record<TIdsFieldName, string | undefined> => {\n const resolvedIdsFieldName = (idsFieldName ?? \"file_ids\") as TIdsFieldName;\n\n return {\n cursor: selection.cursor,\n exclude_ids: joinCsv(selection.excludeIds),\n [resolvedIdsFieldName]: joinCsv(selection.ids),\n } as {\n readonly cursor?: string;\n readonly exclude_ids?: string;\n } & Record<TIdsFieldName, string | undefined>;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"forms-C7FIvCRP.js","names":[],"sources":["../src/core/errors.ts","../src/core/defaults.ts","../src/core/http.ts","../src/core/forms.ts"],"sourcesContent":["import { Data, Effect, Predicate, Schema } from \"effect\";\n\nexport const PutioErrorEnvelopeSchema = Schema.Struct({\n status: Schema.optional(Schema.String),\n error: Schema.optional(Schema.String),\n error_message: Schema.optional(Schema.String),\n error_type: Schema.optional(Schema.String),\n error_uri: Schema.optional(Schema.String),\n error_id: Schema.optional(Schema.NullOr(Schema.String)),\n extra: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n status_code: Schema.optional(Schema.Int),\n details: Schema.optional(Schema.Unknown),\n});\n\nexport type PutioErrorEnvelope = Schema.Schema.Type<typeof PutioErrorEnvelopeSchema>;\n\nexport interface PutioKnownErrorContract<\n TType extends string = string,\n TStatus extends number = number,\n TBody extends PutioErrorEnvelope = PutioErrorEnvelope,\n> {\n readonly bodySchema?: Schema.Schema<TBody> | undefined;\n readonly errorType?: TType | undefined;\n readonly statusCode?: TStatus | undefined;\n}\n\ntype ContractErrorType<TContract extends PutioKnownErrorContract> =\n TContract extends PutioKnownErrorContract<infer TType, number> ? TType : never;\n\ntype ContractStatusCode<TContract extends PutioKnownErrorContract> =\n TContract extends PutioKnownErrorContract<string, infer TStatus> ? TStatus : never;\n\ntype ContractBody<TContract extends PutioKnownErrorContract> = TContract extends {\n readonly bodySchema: Schema.Schema<infer TBody extends PutioErrorEnvelope>;\n}\n ? TBody\n : PutioErrorEnvelope;\n\nexport type PutioTypedErrorEnvelope<TContract extends PutioKnownErrorContract> =\n TContract extends PutioKnownErrorContract\n ? Omit<ContractBody<TContract>, \"error_message\" | \"error_type\" | \"status_code\"> & {\n readonly error_message?: string;\n readonly error_type?: [ContractErrorType<TContract>] extends [never]\n ? string\n : ContractErrorType<TContract>;\n readonly status_code?: [ContractStatusCode<TContract>] extends [never]\n ? number\n : ContractStatusCode<TContract>;\n }\n : never;\n\nexport interface PutioOperationErrorSpec<\n TDomain extends string = string,\n TOperation extends string = string,\n TContracts extends ReadonlyArray<PutioKnownErrorContract> =\n ReadonlyArray<PutioKnownErrorContract>,\n> {\n readonly domain: TDomain;\n readonly operation: TOperation;\n readonly knownErrors: TContracts;\n}\n\ntype OperationContractOf<TSpec extends PutioOperationErrorSpec> = Extract<\n TSpec[\"knownErrors\"][number],\n PutioKnownOperationErrorContract\n>;\n\ntype OperationContractOfParts<\n TDomain extends string,\n TOperation extends string,\n TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n> = OperationContractOf<PutioOperationErrorSpec<TDomain, TOperation, TContracts>>;\n\ntype PutioOperationErrorReason<TContract extends PutioKnownErrorContract> = TContract extends {\n readonly errorType: infer TType extends string;\n}\n ? {\n readonly kind: \"error_type\";\n readonly errorType: TType;\n }\n : TContract extends { readonly statusCode: infer TStatus extends number }\n ? {\n readonly kind: \"status_code\";\n readonly statusCode: TStatus;\n }\n : never;\n\nexport type PutioKnownOperationErrorContract =\n | {\n readonly errorType: string;\n readonly statusCode?: number;\n }\n | {\n readonly errorType?: undefined;\n readonly statusCode: number;\n };\n\nconst isKnownContractMatch = <TContract extends PutioKnownErrorContract>(\n contract: TContract,\n error: PutioApiError | PutioAuthError,\n): contract is Extract<TContract, PutioKnownOperationErrorContract> => {\n if (contract.bodySchema !== undefined && !Schema.is(contract.bodySchema)(error.body)) {\n return false;\n }\n\n if (contract.errorType !== undefined) {\n if (error.body.error_type !== contract.errorType) {\n return false;\n }\n\n return contract.statusCode === undefined || error.status === contract.statusCode;\n }\n\n if (contract.statusCode !== undefined) {\n return error.status === contract.statusCode;\n }\n\n return false;\n};\n\nconst isMatchableApiError = (error: PutioSdkError): error is PutioApiError | PutioAuthError =>\n error._tag === \"PutioApiError\" || error._tag === \"PutioAuthError\";\n\nconst hasOptionalString = (record: Readonly<Record<string, unknown>>, key: string): boolean =>\n !(key in record) || record[key] === undefined || typeof record[key] === \"string\";\n\nconst hasOptionalInteger = (record: Readonly<Record<string, unknown>>, key: string): boolean =>\n !(key in record) ||\n record[key] === undefined ||\n (typeof record[key] === \"number\" && Number.isInteger(record[key]));\n\nconst hasOptionalNullableString = (\n record: Readonly<Record<string, unknown>>,\n key: string,\n): boolean =>\n !(key in record) ||\n record[key] === undefined ||\n record[key] === null ||\n typeof record[key] === \"string\";\n\nconst hasOptionalRecord = (record: Readonly<Record<string, unknown>>, key: string): boolean =>\n !(key in record) || record[key] === undefined || Predicate.isObject(record[key]);\n\nconst isKnownOperationErrorContract = (value: unknown): value is PutioKnownOperationErrorContract =>\n Predicate.isObject(value) &&\n (typeof value.errorType === \"string\" || typeof value.statusCode === \"number\") &&\n hasOptionalString(value, \"errorType\") &&\n hasOptionalInteger(value, \"statusCode\");\n\nconst isOperationReason = (\n value: unknown,\n): value is PutioOperationErrorReason<PutioKnownOperationErrorContract> => {\n if (!Predicate.isObject(value)) {\n return false;\n }\n\n if (value.kind === \"error_type\") {\n return typeof value.errorType === \"string\";\n }\n\n if (value.kind === \"status_code\") {\n return typeof value.statusCode === \"number\";\n }\n\n return false;\n};\n\nfunction toOperationReason<TContract extends { readonly errorType: string }>(\n contract: TContract,\n): PutioOperationErrorReason<TContract>;\nfunction toOperationReason<TContract extends { readonly statusCode: number }>(\n contract: TContract,\n): PutioOperationErrorReason<TContract>;\nfunction toOperationReason(\n contract: PutioKnownOperationErrorContract,\n): PutioOperationErrorReason<PutioKnownOperationErrorContract> {\n if (contract.errorType !== undefined) {\n return {\n kind: \"error_type\",\n errorType: contract.errorType,\n };\n }\n\n return {\n kind: \"status_code\",\n statusCode: contract.statusCode,\n };\n}\n\nexport class PutioTransportError extends Data.TaggedError(\"PutioTransportError\")<{\n readonly cause: unknown;\n}> {}\n\nexport class PutioConfigurationError extends Data.TaggedError(\"PutioConfigurationError\")<{\n readonly cause: unknown;\n}> {}\n\nexport class PutioValidationError extends Data.TaggedError(\"PutioValidationError\")<{\n readonly cause: unknown;\n}> {}\n\nconst PutioResponseErrorFields = {\n status: Schema.Int,\n body: PutioErrorEnvelopeSchema,\n};\n\nexport class PutioApiError extends Schema.TaggedError<PutioApiError>()(\"PutioApiError\", {\n ...PutioResponseErrorFields,\n}) {}\n\nexport class PutioAuthError extends Schema.TaggedError<PutioAuthError>()(\"PutioAuthError\", {\n ...PutioResponseErrorFields,\n}) {}\n\nexport class PutioRateLimitError extends Schema.TaggedError<PutioRateLimitError>()(\n \"PutioRateLimitError\",\n {\n ...PutioResponseErrorFields,\n action: Schema.optional(Schema.String),\n id: Schema.optional(Schema.String),\n limit: Schema.optional(Schema.String),\n remaining: Schema.optional(Schema.String),\n retryAfter: Schema.optional(Schema.String),\n reset: Schema.optional(Schema.String),\n },\n) {}\n\nexport class PutioOperationError<\n TDomain extends string,\n TOperation extends string,\n TContract extends PutioKnownOperationErrorContract,\n> extends Data.TaggedError(\"PutioOperationError\")<{\n readonly body: PutioTypedErrorEnvelope<TContract>;\n readonly contract: TContract;\n readonly domain: TDomain;\n readonly operation: TOperation;\n readonly reason: PutioOperationErrorReason<TContract>;\n readonly status: number;\n}> {}\n\nexport type PutioSdkError =\n | PutioConfigurationError\n | PutioTransportError\n | PutioValidationError\n | PutioApiError\n | PutioAuthError\n | PutioRateLimitError;\n\nexport type PutioUnhandledSdkError =\n | PutioConfigurationError\n | PutioTransportError\n | PutioValidationError\n | PutioApiError\n | PutioAuthError\n | PutioRateLimitError;\n\nexport type PutioOperationErrorFromSpec<TSpec extends PutioOperationErrorSpec> =\n PutioOperationError<TSpec[\"domain\"], TSpec[\"operation\"], OperationContractOf<TSpec>>;\n\nexport type PutioOperationFailure<TSpec extends PutioOperationErrorSpec> =\n | PutioUnhandledSdkError\n | PutioOperationErrorFromSpec<TSpec>;\n\nexport type AnyPutioOperationError = PutioOperationError<\n string,\n string,\n PutioKnownOperationErrorContract\n>;\n\nexport const definePutioOperationErrorSpec = <\n const TDomain extends string,\n const TOperation extends string,\n const TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n>(\n spec: PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n) => spec;\n\nexport const decodePutioErrorEnvelope = Schema.decodeUnknownEffect(PutioErrorEnvelopeSchema);\n\nexport const isPutioErrorEnvelope = (value: unknown): value is PutioErrorEnvelope =>\n Predicate.isObject(value) &&\n hasOptionalString(value, \"status\") &&\n hasOptionalString(value, \"error\") &&\n hasOptionalString(value, \"error_message\") &&\n hasOptionalString(value, \"error_type\") &&\n hasOptionalString(value, \"error_uri\") &&\n hasOptionalNullableString(value, \"error_id\") &&\n hasOptionalRecord(value, \"extra\") &&\n hasOptionalInteger(value, \"status_code\");\n\nconst hasStatusAndBody = <TTag extends string>(\n value: unknown,\n tag: TTag,\n): value is {\n readonly _tag: TTag;\n readonly body: PutioErrorEnvelope;\n readonly status: number;\n} =>\n Predicate.isObject(value) &&\n value._tag === tag &&\n typeof value.status === \"number\" &&\n isPutioErrorEnvelope(value.body);\n\nexport const isPutioApiError = (value: unknown): value is PutioApiError =>\n hasStatusAndBody(value, \"PutioApiError\");\n\nexport const isPutioAuthError = (value: unknown): value is PutioAuthError =>\n hasStatusAndBody(value, \"PutioAuthError\");\n\nexport const isPutioRateLimitError = (value: unknown): value is PutioRateLimitError =>\n hasStatusAndBody(value, \"PutioRateLimitError\") &&\n Predicate.isObject(value) &&\n hasOptionalString(value, \"action\") &&\n hasOptionalString(value, \"id\") &&\n hasOptionalString(value, \"limit\") &&\n hasOptionalString(value, \"remaining\") &&\n hasOptionalString(value, \"retryAfter\") &&\n hasOptionalString(value, \"reset\");\n\nexport const isPutioOperationError = (value: unknown): value is AnyPutioOperationError =>\n Predicate.isObject(value) &&\n value._tag === \"PutioOperationError\" &&\n isPutioErrorEnvelope(value.body) &&\n isKnownOperationErrorContract(value.contract) &&\n typeof value.domain === \"string\" &&\n typeof value.operation === \"string\" &&\n isOperationReason(value.reason) &&\n typeof value.status === \"number\";\n\nexport const fallbackPutioErrorEnvelope = (status: number): PutioErrorEnvelope => ({\n error_message: `put.io API request failed with status ${status}`,\n status_code: status,\n});\n\nconst getHeader = (headers: Headers, name: string): string | undefined =>\n headers.get(name) ?? undefined;\n\nexport const responseRateLimitHeaders = (headers: Headers) => ({\n action: getHeader(headers, \"x-ratelimit-action\"),\n id: getHeader(headers, \"x-ratelimit-id\"),\n limit: getHeader(headers, \"x-ratelimit-limit\"),\n remaining: getHeader(headers, \"x-ratelimit-remaining\"),\n retryAfter: getHeader(headers, \"retry-after\"),\n reset: getHeader(headers, \"x-ratelimit-reset\"),\n});\n\nexport const mapDecodeErrorToValidationError = (cause: unknown) =>\n new PutioValidationError({ cause });\n\nexport const mapConfigurationError = (cause: unknown) => new PutioConfigurationError({ cause });\n\nexport const mapTransportError = (cause: unknown) => new PutioTransportError({ cause });\n\nexport const makeResponseError = (\n status: number,\n headers: Headers,\n body: PutioErrorEnvelope,\n): PutioSdkError => {\n if (status === 429) {\n return new PutioRateLimitError({\n status,\n body,\n ...responseRateLimitHeaders(headers),\n });\n }\n\n if (status === 401 || status === 403) {\n return new PutioAuthError({ status, body });\n }\n\n return new PutioApiError({ status, body });\n};\n\nexport const parseErrorBody = (status: number, json: unknown) =>\n decodePutioErrorEnvelope(json).pipe(\n Effect.orElseSucceed(() => fallbackPutioErrorEnvelope(status)),\n );\n\nexport function withOperationErrors<\n A,\n E extends PutioSdkError,\n R,\n const TDomain extends string,\n const TOperation extends string,\n const TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n>(\n effect: Effect.Effect<A, E, R>,\n spec: PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n): Effect.Effect<\n A,\n | E\n | PutioOperationError<\n TDomain,\n TOperation,\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n R\n>;\nexport function withOperationErrors<\n const TDomain extends string,\n const TOperation extends string,\n const TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n>(\n spec: PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n): <A, E extends PutioSdkError, R>(\n effect: Effect.Effect<A, E, R>,\n) => Effect.Effect<\n A,\n | E\n | PutioOperationError<\n TDomain,\n TOperation,\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n R\n>;\nexport function withOperationErrors<\n A,\n E extends PutioSdkError,\n R,\n const TDomain extends string,\n const TOperation extends string,\n const TContracts extends ReadonlyArray<PutioKnownErrorContract>,\n>(\n effectOrSpec: Effect.Effect<A, E, R> | PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n maybeSpec?: PutioOperationErrorSpec<TDomain, TOperation, TContracts>,\n):\n | Effect.Effect<\n A,\n | E\n | PutioOperationError<\n TDomain,\n TOperation,\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n R\n >\n | (<A2, E2 extends PutioSdkError, R2>(\n effect: Effect.Effect<A2, E2, R2>,\n ) => Effect.Effect<\n A2,\n | E2\n | PutioOperationError<\n TDomain,\n TOperation,\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n R2\n >) {\n if (maybeSpec === undefined) {\n const spec = effectOrSpec as PutioOperationErrorSpec<TDomain, TOperation, TContracts>;\n\n return <A2, E2 extends PutioSdkError, R2>(effect: Effect.Effect<A2, E2, R2>) =>\n withOperationErrors(effect, spec);\n }\n\n const effect = effectOrSpec as Effect.Effect<A, E, R>;\n const spec = maybeSpec;\n\n return effect.pipe(\n Effect.mapError((error) => {\n if (!isMatchableApiError(error)) {\n return error;\n }\n\n const contract = spec.knownErrors.find((candidate) => isKnownContractMatch(candidate, error));\n\n if (!contract) {\n return error;\n }\n\n return new PutioOperationError({\n body: error.body as PutioTypedErrorEnvelope<\n OperationContractOfParts<TDomain, TOperation, TContracts>\n >,\n contract,\n domain: spec.domain,\n operation: spec.operation,\n reason: toOperationReason(contract),\n status: error.status,\n });\n }),\n );\n}\n","export const DEFAULT_PUTIO_API_BASE_URL = \"https://api.put.io\";\nexport const DEFAULT_PUTIO_UPLOAD_BASE_URL = \"https://upload.put.io\";\nexport const DEFAULT_PUTIO_WEB_APP_URL = \"https://app.put.io\";\n","import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport {\n DEFAULT_PUTIO_API_BASE_URL,\n DEFAULT_PUTIO_UPLOAD_BASE_URL,\n DEFAULT_PUTIO_WEB_APP_URL,\n} from \"./defaults.js\";\nimport {\n makeResponseError,\n mapConfigurationError,\n mapDecodeErrorToValidationError,\n mapTransportError,\n parseErrorBody,\n PutioConfigurationError,\n type PutioSdkError,\n} from \"./errors.js\";\n\nexport type PutioQueryValue = string | number | boolean | null | undefined;\n\nexport type PutioQuery = Readonly<Record<string, PutioQueryValue>>;\n\nexport type PutioPathSegment = string | number | boolean;\n\nexport interface PutioSdkConfigShape {\n readonly accessToken?: string;\n readonly baseUrl?: string | URL;\n readonly uploadBaseUrl?: string | URL;\n readonly webAppUrl?: string | URL;\n}\n\nexport class PutioSdkConfig extends Context.Service<PutioSdkConfig, PutioSdkConfigShape>()(\n \"PutioSdkConfig\",\n) {}\n\nexport interface PutioHttpRequest {\n readonly body?: BodyInit;\n readonly headers: Headers;\n readonly method: PutioRequestMethod;\n readonly url: string;\n}\n\nexport interface PutioHttpResponse {\n readonly arrayBuffer: Effect.Effect<ArrayBuffer, PutioSdkError>;\n readonly headers: Headers;\n readonly json: Effect.Effect<unknown, PutioSdkError>;\n readonly status: number;\n}\n\nexport interface PutioHttpClientShape {\n readonly execute: (request: PutioHttpRequest) => Effect.Effect<PutioHttpResponse, PutioSdkError>;\n}\n\nexport class PutioHttpClient extends Context.Service<PutioHttpClient, PutioHttpClientShape>()(\n \"PutioHttpClient\",\n) {}\n\nexport type PutioSdkContext = PutioSdkConfig | PutioHttpClient;\n\nexport const makePutioSdkConfig = (config: PutioSdkConfigShape): PutioSdkConfigShape => ({\n accessToken: config.accessToken,\n baseUrl: config.baseUrl ?? DEFAULT_PUTIO_API_BASE_URL,\n uploadBaseUrl: config.uploadBaseUrl ?? DEFAULT_PUTIO_UPLOAD_BASE_URL,\n webAppUrl: config.webAppUrl ?? DEFAULT_PUTIO_WEB_APP_URL,\n});\n\nexport const makePutioSdkLayer = (config: PutioSdkConfigShape) =>\n Layer.succeed(PutioSdkConfig, makePutioSdkConfig(config));\n\nexport const makePutioSdkLiveLayer = (config: PutioSdkConfigShape) =>\n Layer.mergeAll(makePutioSdkLayer(config), makePutioFetchLayer());\n\nexport const makePutioFetchLayer = (\n fetchImplementation: typeof globalThis.fetch = globalThis.fetch,\n) => Layer.succeed(PutioHttpClient, makePutioFetchClient(fetchImplementation));\n\nexport const makePutioFetchClient = (\n fetchImplementation: typeof globalThis.fetch = globalThis.fetch,\n): PutioHttpClientShape => ({\n execute: (request) =>\n Effect.tryPromise({\n try: async (signal) => {\n const response = await fetchImplementation(request.url, {\n body: request.body,\n headers: request.headers,\n method: request.method,\n signal,\n });\n\n return {\n arrayBuffer: Effect.tryPromise({\n try: () => response.arrayBuffer(),\n catch: mapTransportError,\n }),\n headers: response.headers,\n json: Effect.tryPromise({\n try: () => response.json(),\n catch: mapTransportError,\n }),\n status: response.status,\n };\n },\n catch: mapTransportError,\n }),\n});\n\nexport const encodePathSegment = (value: PutioPathSegment): string =>\n encodeURIComponent(String(value));\n\nconst absoluteUrlPattern = /^(?:[a-z][a-z\\d+.-]*:|\\/\\/)/i;\n\nconst normalizeApiPath = (path: string): string => {\n if (absoluteUrlPattern.test(path)) {\n throw mapConfigurationError(\"SDK API request paths must be relative to the configured baseUrl\");\n }\n\n return path.startsWith(\"/\") ? path : `/${path}`;\n};\n\nexport const buildPutioUrl = (baseUrl: string | URL, path: string, query?: PutioQuery): string => {\n const url = new URL(normalizeApiPath(path), baseUrl);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return url.toString();\n};\n\nconst mapUrlBuildError = (cause: unknown) =>\n cause instanceof PutioConfigurationError ? cause : mapConfigurationError(cause);\n\nexport const OkResponseSchema = Schema.Struct({\n status: Schema.Literal(\"OK\"),\n});\n\nexport type PutioAuth =\n | { readonly type: \"config-token\" }\n | { readonly type: \"token\"; readonly token: string }\n | { readonly type: \"basic\"; readonly username: string; readonly password: string }\n | { readonly type: \"none\" };\n\ntype PutioRequestMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\ntype PutioRequestBody =\n | { readonly type: \"none\" }\n | { readonly type: \"json\"; readonly value: unknown }\n | { readonly type: \"form\"; readonly value: Record<string, unknown> }\n | { readonly type: \"form-data\"; readonly value: FormData };\n\ninterface PutioRequestOptions {\n readonly method: PutioRequestMethod;\n readonly path: string;\n readonly baseUrl?: string | URL;\n readonly query?: PutioQuery;\n readonly headers?: HeadersInit;\n readonly auth?: PutioAuth;\n readonly body?: PutioRequestBody;\n}\n\nconst isSuccessStatus = (status: number) => status >= 200 && status < 300;\n\nconst decodeSuccessJson = <S extends Schema.Top>(schema: S, response: PutioHttpResponse) =>\n response.json.pipe(\n Effect.flatMap((json) =>\n Schema.decodeUnknownEffect(schema)(json).pipe(\n Effect.mapError(mapDecodeErrorToValidationError),\n ),\n ),\n );\n\nconst decodeFailure = (response: PutioHttpResponse, headers: Headers) =>\n response.json.pipe(\n Effect.flatMap((json) => parseErrorBody(response.status, json)),\n Effect.map((body) => makeResponseError(response.status, headers, body)),\n );\n\nconst toBasicAuthorization = (username: string, password: string) => {\n if (typeof globalThis.btoa === \"function\") {\n return `Basic ${globalThis.btoa(`${username}:${password}`)}`;\n }\n\n throw mapConfigurationError(\n \"This runtime does not provide btoa(), so Basic auth cannot be encoded safely\",\n );\n};\n\nconst resolveAuthorization = (\n config: PutioSdkConfigShape,\n auth: PutioAuth | undefined,\n): Effect.Effect<string | undefined, PutioSdkError> => {\n const resolvedAuth = auth ?? { type: \"config-token\" as const };\n\n switch (resolvedAuth.type) {\n case \"none\":\n return Effect.succeed(undefined);\n case \"token\":\n return Effect.succeed(`Token ${resolvedAuth.token}`);\n case \"basic\":\n return Effect.try({\n try: () => toBasicAuthorization(resolvedAuth.username, resolvedAuth.password),\n catch: mapConfigurationError,\n });\n case \"config-token\":\n if (!config.accessToken) {\n return Effect.fail(\n mapConfigurationError(\n \"This endpoint requires an access token, but PutioSdkConfig.accessToken is missing\",\n ),\n );\n }\n\n return Effect.succeed(`Token ${config.accessToken}`);\n }\n};\n\nconst normalizeFormValue = (value: unknown): string => {\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n\n return JSON.stringify(value);\n};\n\nconst withBody = (body: PutioRequestBody): Effect.Effect<BodyInit | undefined, PutioSdkError> => {\n switch (body.type) {\n case \"none\":\n return Effect.succeed(undefined);\n case \"json\":\n return Effect.try({\n try: () => JSON.stringify(body.value),\n catch: mapDecodeErrorToValidationError,\n });\n case \"form\":\n return Effect.succeed(\n new URLSearchParams(\n Object.entries(body.value).flatMap(([key, value]) =>\n value === undefined ? [] : [[key, normalizeFormValue(value)]],\n ),\n ),\n );\n case \"form-data\":\n return Effect.succeed(body.value);\n }\n};\n\nconst makeRequest = (url: string, options: PutioRequestOptions, authorization?: string) =>\n Effect.gen(function* () {\n const headers = new Headers(options.headers);\n\n const body = options.body ?? { type: \"none\" as const };\n if (!headers.has(\"accept\")) {\n headers.set(\"accept\", \"application/json\");\n }\n\n if (authorization) {\n headers.set(\"authorization\", authorization);\n }\n\n if (body.type === \"json\" && !headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n\n return {\n body: yield* withBody(body),\n headers,\n method: options.method,\n url,\n };\n });\n\nconst executeRequest = (options: PutioRequestOptions) =>\n Effect.gen(function* () {\n const config = yield* PutioSdkConfig;\n const httpClient = yield* PutioHttpClient;\n const authorization = yield* resolveAuthorization(config, options.auth);\n const url = yield* Effect.try({\n try: () =>\n buildPutioUrl(\n options.baseUrl ?? config.baseUrl ?? DEFAULT_PUTIO_API_BASE_URL,\n options.path,\n options.query,\n ),\n catch: mapUrlBuildError,\n });\n const request = yield* makeRequest(url, options, authorization);\n\n return yield* httpClient.execute(request);\n });\n\nexport const requestJson = <S extends Schema.Top>(\n schema: S,\n options: PutioRequestOptions,\n): Effect.Effect<S[\"Type\"], PutioSdkError, PutioSdkContext | S[\"DecodingServices\"]> =>\n executeRequest(options).pipe(\n Effect.flatMap((response) =>\n isSuccessStatus(response.status)\n ? decodeSuccessJson(schema, response)\n : decodeFailure(response, response.headers).pipe(Effect.flatMap(Effect.fail)),\n ),\n );\n\nexport const selectJsonField =\n <K extends string>(field: K) =>\n <A extends { readonly [P in K]: unknown }, E, R>(\n effect: Effect.Effect<A, E, R>,\n ): Effect.Effect<A[K], E, R> =>\n effect.pipe(Effect.map((value) => value[field]));\n\nexport const selectJsonFields =\n <const K extends readonly string[]>(...fields: K) =>\n <A extends { readonly [P in K[number]]: unknown }, E, R>(\n effect: Effect.Effect<A, E, R>,\n ): Effect.Effect<Pick<A, K[number]>, E, R> =>\n effect.pipe(\n Effect.map(\n (value) =>\n Object.fromEntries(fields.map((field) => [field, value[field as K[number]]])) as Pick<\n A,\n K[number]\n >,\n ),\n );\n\nexport const requestArrayBuffer = (\n options: PutioRequestOptions,\n): Effect.Effect<Uint8Array, PutioSdkError, PutioSdkContext> =>\n executeRequest(options).pipe(\n Effect.flatMap((response) =>\n isSuccessStatus(response.status)\n ? response.arrayBuffer.pipe(Effect.map((buffer) => new Uint8Array(buffer)))\n : decodeFailure(response, response.headers).pipe(Effect.flatMap(Effect.fail)),\n ),\n );\n\nexport const requestText = (\n options: PutioRequestOptions,\n): Effect.Effect<string, PutioSdkError, PutioSdkContext> =>\n requestArrayBuffer(options).pipe(Effect.map((bytes) => new TextDecoder().decode(bytes)));\n\nexport const requestVoid = (\n options: PutioRequestOptions,\n): Effect.Effect<void, PutioSdkError, PutioSdkContext> =>\n executeRequest(options).pipe(\n Effect.flatMap((response) =>\n isSuccessStatus(response.status)\n ? Effect.void\n : decodeFailure(response, response.headers).pipe(Effect.flatMap(Effect.fail)),\n ),\n );\n","type CsvValue = string | number;\n\nexport interface CursorSelectionInput<TValue extends CsvValue = number> {\n readonly cursor?: string;\n readonly excludeIds?: ReadonlyArray<TValue>;\n readonly ids?: ReadonlyArray<TValue>;\n}\n\nexport const joinCsv = <TValue extends CsvValue>(\n values: ReadonlyArray<TValue> | undefined,\n): string | undefined => (values && values.length > 0 ? values.join(\",\") : undefined);\n\nexport const toCursorSelectionForm = <\n TValue extends CsvValue,\n const TIdsFieldName extends string = \"file_ids\",\n>(\n selection: CursorSelectionInput<TValue>,\n idsFieldName?: TIdsFieldName,\n): {\n readonly cursor?: string;\n readonly exclude_ids?: string;\n} & Record<TIdsFieldName, string | undefined> => {\n const resolvedIdsFieldName = (idsFieldName ?? \"file_ids\") as TIdsFieldName;\n\n return {\n cursor: selection.cursor,\n exclude_ids: joinCsv(selection.excludeIds),\n [resolvedIdsFieldName]: joinCsv(selection.ids),\n } as {\n readonly cursor?: string;\n readonly exclude_ids?: string;\n } & Record<TIdsFieldName, string | undefined>;\n};\n"],"mappings":";;AAEA,MAAa,2BAA2B,OAAO,OAAO;CACpD,QAAQ,OAAO,SAAS,OAAO,MAAM;CACrC,OAAO,OAAO,SAAS,OAAO,MAAM;CACpC,eAAe,OAAO,SAAS,OAAO,MAAM;CAC5C,YAAY,OAAO,SAAS,OAAO,MAAM;CACzC,WAAW,OAAO,SAAS,OAAO,MAAM;CACxC,UAAU,OAAO,SAAS,OAAO,OAAO,OAAO,MAAM,CAAC;CACtD,OAAO,OAAO,SAAS,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,CAAC;CACnE,aAAa,OAAO,SAAS,OAAO,GAAG;CACvC,SAAS,OAAO,SAAS,OAAO,OAAO;AACzC,CAAC;AAqFD,MAAM,wBACJ,UACA,UACqE;CACrE,IAAI,SAAS,eAAe,KAAA,KAAa,CAAC,OAAO,GAAG,SAAS,UAAU,CAAC,CAAC,MAAM,IAAI,GACjF,OAAO;CAGT,IAAI,SAAS,cAAc,KAAA,GAAW;EACpC,IAAI,MAAM,KAAK,eAAe,SAAS,WACrC,OAAO;EAGT,OAAO,SAAS,eAAe,KAAA,KAAa,MAAM,WAAW,SAAS;CACxE;CAEA,IAAI,SAAS,eAAe,KAAA,GAC1B,OAAO,MAAM,WAAW,SAAS;CAGnC,OAAO;AACT;AAEA,MAAM,uBAAuB,UAC3B,MAAM,SAAS,mBAAmB,MAAM,SAAS;AAEnD,MAAM,qBAAqB,QAA2C,QACpE,EAAE,OAAO,WAAW,OAAO,SAAS,KAAA,KAAa,OAAO,OAAO,SAAS;AAE1E,MAAM,sBAAsB,QAA2C,QACrE,EAAE,OAAO,WACT,OAAO,SAAS,KAAA,KACf,OAAO,OAAO,SAAS,YAAY,OAAO,UAAU,OAAO,IAAI;AAElE,MAAM,6BACJ,QACA,QAEA,EAAE,OAAO,WACT,OAAO,SAAS,KAAA,KAChB,OAAO,SAAS,QAChB,OAAO,OAAO,SAAS;AAEzB,MAAM,qBAAqB,QAA2C,QACpE,EAAE,OAAO,WAAW,OAAO,SAAS,KAAA,KAAa,UAAU,SAAS,OAAO,IAAI;AAEjF,MAAM,iCAAiC,UACrC,UAAU,SAAS,KAAK,MACvB,OAAO,MAAM,cAAc,YAAY,OAAO,MAAM,eAAe,aACpE,kBAAkB,OAAO,WAAW,KACpC,mBAAmB,OAAO,YAAY;AAExC,MAAM,qBACJ,UACyE;CACzE,IAAI,CAAC,UAAU,SAAS,KAAK,GAC3B,OAAO;CAGT,IAAI,MAAM,SAAS,cACjB,OAAO,OAAO,MAAM,cAAc;CAGpC,IAAI,MAAM,SAAS,eACjB,OAAO,OAAO,MAAM,eAAe;CAGrC,OAAO;AACT;AAQA,SAAS,kBACP,UAC6D;CAC7D,IAAI,SAAS,cAAc,KAAA,GACzB,OAAO;EACL,MAAM;EACN,WAAW,SAAS;CACtB;CAGF,OAAO;EACL,MAAM;EACN,YAAY,SAAS;CACvB;AACF;AAEA,IAAa,sBAAb,cAAyC,KAAK,YAAY,qBAAqB,CAAC,CAE7E,CAAC;AAEJ,IAAa,0BAAb,cAA6C,KAAK,YAAY,yBAAyB,CAAC,CAErF,CAAC;AAEJ,IAAa,uBAAb,cAA0C,KAAK,YAAY,sBAAsB,CAAC,CAE/E,CAAC;AAEJ,MAAM,2BAA2B;CAC/B,QAAQ,OAAO;CACf,MAAM;AACR;AAEA,IAAa,gBAAb,cAAmC,OAAO,YAA2B,CAAC,CAAC,iBAAiB,EACtF,GAAG,yBACL,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,iBAAb,cAAoC,OAAO,YAA4B,CAAC,CAAC,kBAAkB,EACzF,GAAG,yBACL,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,sBAAb,cAAyC,OAAO,YAAiC,CAAC,CAChF,uBACA;CACE,GAAG;CACH,QAAQ,OAAO,SAAS,OAAO,MAAM;CACrC,IAAI,OAAO,SAAS,OAAO,MAAM;CACjC,OAAO,OAAO,SAAS,OAAO,MAAM;CACpC,WAAW,OAAO,SAAS,OAAO,MAAM;CACxC,YAAY,OAAO,SAAS,OAAO,MAAM;CACzC,OAAO,OAAO,SAAS,OAAO,MAAM;AACtC,CACF,CAAC,CAAC,CAAC;AAEH,IAAa,sBAAb,cAIU,KAAK,YAAY,qBAAqB,CAAC,CAO9C,CAAC;AA+BJ,MAAa,iCAKX,SACG;AAEL,MAAa,2BAA2B,OAAO,oBAAoB,wBAAwB;AAE3F,MAAa,wBAAwB,UACnC,UAAU,SAAS,KAAK,KACxB,kBAAkB,OAAO,QAAQ,KACjC,kBAAkB,OAAO,OAAO,KAChC,kBAAkB,OAAO,eAAe,KACxC,kBAAkB,OAAO,YAAY,KACrC,kBAAkB,OAAO,WAAW,KACpC,0BAA0B,OAAO,UAAU,KAC3C,kBAAkB,OAAO,OAAO,KAChC,mBAAmB,OAAO,aAAa;AAEzC,MAAM,oBACJ,OACA,QAMA,UAAU,SAAS,KAAK,KACxB,MAAM,SAAS,OACf,OAAO,MAAM,WAAW,YACxB,qBAAqB,MAAM,IAAI;AAEjC,MAAa,mBAAmB,UAC9B,iBAAiB,OAAO,eAAe;AAEzC,MAAa,oBAAoB,UAC/B,iBAAiB,OAAO,gBAAgB;AAE1C,MAAa,yBAAyB,UACpC,iBAAiB,OAAO,qBAAqB,KAC7C,UAAU,SAAS,KAAK,KACxB,kBAAkB,OAAO,QAAQ,KACjC,kBAAkB,OAAO,IAAI,KAC7B,kBAAkB,OAAO,OAAO,KAChC,kBAAkB,OAAO,WAAW,KACpC,kBAAkB,OAAO,YAAY,KACrC,kBAAkB,OAAO,OAAO;AAElC,MAAa,yBAAyB,UACpC,UAAU,SAAS,KAAK,KACxB,MAAM,SAAS,yBACf,qBAAqB,MAAM,IAAI,KAC/B,8BAA8B,MAAM,QAAQ,KAC5C,OAAO,MAAM,WAAW,YACxB,OAAO,MAAM,cAAc,YAC3B,kBAAkB,MAAM,MAAM,KAC9B,OAAO,MAAM,WAAW;AAE1B,MAAa,8BAA8B,YAAwC;CACjF,eAAe,yCAAyC;CACxD,aAAa;AACf;AAEA,MAAM,aAAa,SAAkB,SACnC,QAAQ,IAAI,IAAI,KAAK,KAAA;AAEvB,MAAa,4BAA4B,aAAsB;CAC7D,QAAQ,UAAU,SAAS,oBAAoB;CAC/C,IAAI,UAAU,SAAS,gBAAgB;CACvC,OAAO,UAAU,SAAS,mBAAmB;CAC7C,WAAW,UAAU,SAAS,uBAAuB;CACrD,YAAY,UAAU,SAAS,aAAa;CAC5C,OAAO,UAAU,SAAS,mBAAmB;AAC/C;AAEA,MAAa,mCAAmC,UAC9C,IAAI,qBAAqB,EAAE,MAAM,CAAC;AAEpC,MAAa,yBAAyB,UAAmB,IAAI,wBAAwB,EAAE,MAAM,CAAC;AAE9F,MAAa,qBAAqB,UAAmB,IAAI,oBAAoB,EAAE,MAAM,CAAC;AAEtF,MAAa,qBACX,QACA,SACA,SACkB;CAClB,IAAI,WAAW,KACb,OAAO,IAAI,oBAAoB;EAC7B;EACA;EACA,GAAG,yBAAyB,OAAO;CACrC,CAAC;CAGH,IAAI,WAAW,OAAO,WAAW,KAC/B,OAAO,IAAI,eAAe;EAAE;EAAQ;CAAK,CAAC;CAG5C,OAAO,IAAI,cAAc;EAAE;EAAQ;CAAK,CAAC;AAC3C;AAEA,MAAa,kBAAkB,QAAgB,SAC7C,yBAAyB,IAAI,CAAC,CAAC,KAC7B,OAAO,oBAAoB,2BAA2B,MAAM,CAAC,CAC/D;AAwCF,SAAgB,oBAQd,cACA,WAuBK;CACL,IAAI,cAAc,KAAA,GAAW;EAC3B,MAAM,OAAO;EAEb,QAA0C,WACxC,oBAAoB,QAAQ,IAAI;CACpC;CAEA,MAAM,SAAS;CACf,MAAM,OAAO;CAEb,OAAO,OAAO,KACZ,OAAO,UAAU,UAAU;EACzB,IAAI,CAAC,oBAAoB,KAAK,GAC5B,OAAO;EAGT,MAAM,WAAW,KAAK,YAAY,MAAM,cAAc,qBAAqB,WAAW,KAAK,CAAC;EAE5F,IAAI,CAAC,UACH,OAAO;EAGT,OAAO,IAAI,oBAAoB;GAC7B,MAAM,MAAM;GAGZ;GACA,QAAQ,KAAK;GACb,WAAW,KAAK;GAChB,QAAQ,kBAAkB,QAAQ;GAClC,QAAQ,MAAM;EAChB,CAAC;CACH,CAAC,CACH;AACF;;;ACneA,MAAa,6BAA6B;AAC1C,MAAa,gCAAgC;AAC7C,MAAa,4BAA4B;;;AC4BzC,IAAa,iBAAb,cAAoC,QAAQ,QAA6C,CAAC,CACxF,gBACF,CAAC,CAAC,CAAC;AAoBH,IAAa,kBAAb,cAAqC,QAAQ,QAA+C,CAAC,CAC3F,iBACF,CAAC,CAAC,CAAC;AAIH,MAAa,sBAAsB,YAAsD;CACvF,aAAa,OAAO;CACpB,SAAS,OAAO,WAAA;CAChB,eAAe,OAAO,iBAAA;CACtB,WAAW,OAAO,aAAA;AACpB;AAEA,MAAa,qBAAqB,WAChC,MAAM,QAAQ,gBAAgB,mBAAmB,MAAM,CAAC;AAE1D,MAAa,yBAAyB,WACpC,MAAM,SAAS,kBAAkB,MAAM,GAAG,oBAAoB,CAAC;AAEjE,MAAa,uBACX,sBAA+C,WAAW,UACvD,MAAM,QAAQ,iBAAiB,qBAAqB,mBAAmB,CAAC;AAE7E,MAAa,wBACX,sBAA+C,WAAW,WAChC,EAC1B,UAAU,YACR,OAAO,WAAW;CAChB,KAAK,OAAO,WAAW;EACrB,MAAM,WAAW,MAAM,oBAAoB,QAAQ,KAAK;GACtD,MAAM,QAAQ;GACd,SAAS,QAAQ;GACjB,QAAQ,QAAQ;GAChB;EACF,CAAC;EAED,OAAO;GACL,aAAa,OAAO,WAAW;IAC7B,WAAW,SAAS,YAAY;IAChC,OAAO;GACT,CAAC;GACD,SAAS,SAAS;GAClB,MAAM,OAAO,WAAW;IACtB,WAAW,SAAS,KAAK;IACzB,OAAO;GACT,CAAC;GACD,QAAQ,SAAS;EACnB;CACF;CACA,OAAO;AACT,CAAC,EACL;AAEA,MAAa,qBAAqB,UAChC,mBAAmB,OAAO,KAAK,CAAC;AAElC,MAAM,qBAAqB;AAE3B,MAAM,oBAAoB,SAAyB;CACjD,IAAI,mBAAmB,KAAK,IAAI,GAC9B,MAAM,sBAAsB,kEAAkE;CAGhG,OAAO,KAAK,WAAW,GAAG,IAAI,OAAO,IAAI;AAC3C;AAEA,MAAa,iBAAiB,SAAuB,MAAc,UAA+B;CAChG,MAAM,MAAM,IAAI,IAAI,iBAAiB,IAAI,GAAG,OAAO;CAEnD,IAAI,OACG;OAAA,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,GAC7C,IAAI,UAAU,KAAA,KAAa,UAAU,MACnC,IAAI,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;CAAA;CAK7C,OAAO,IAAI,SAAS;AACtB;AAEA,MAAM,oBAAoB,UACxB,iBAAiB,0BAA0B,QAAQ,sBAAsB,KAAK;AAEhF,MAAa,mBAAmB,OAAO,OAAO,EAC5C,QAAQ,OAAO,QAAQ,IAAI,EAC7B,CAAC;AA0BD,MAAM,mBAAmB,WAAmB,UAAU,OAAO,SAAS;AAEtE,MAAM,qBAA2C,QAAW,aAC1D,SAAS,KAAK,KACZ,OAAO,SAAS,SACd,OAAO,oBAAoB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KACvC,OAAO,SAAS,+BAA+B,CACjD,CACF,CACF;AAEF,MAAM,iBAAiB,UAA6B,YAClD,SAAS,KAAK,KACZ,OAAO,SAAS,SAAS,eAAe,SAAS,QAAQ,IAAI,CAAC,GAC9D,OAAO,KAAK,SAAS,kBAAkB,SAAS,QAAQ,SAAS,IAAI,CAAC,CACxE;AAEF,MAAM,wBAAwB,UAAkB,aAAqB;CACnE,IAAI,OAAO,WAAW,SAAS,YAC7B,OAAO,SAAS,WAAW,KAAK,GAAG,SAAS,GAAG,UAAU;CAG3D,MAAM,sBACJ,8EACF;AACF;AAEA,MAAM,wBACJ,QACA,SACqD;CACrD,MAAM,eAAe,QAAQ,EAAE,MAAM,eAAwB;CAE7D,QAAQ,aAAa,MAArB;EACE,KAAK,QACH,OAAO,OAAO,QAAQ,KAAA,CAAS;EACjC,KAAK,SACH,OAAO,OAAO,QAAQ,SAAS,aAAa,OAAO;EACrD,KAAK,SACH,OAAO,OAAO,IAAI;GAChB,WAAW,qBAAqB,aAAa,UAAU,aAAa,QAAQ;GAC5E,OAAO;EACT,CAAC;EACH,KAAK;GACH,IAAI,CAAC,OAAO,aACV,OAAO,OAAO,KACZ,sBACE,mFACF,CACF;GAGF,OAAO,OAAO,QAAQ,SAAS,OAAO,aAAa;CACvD;AACF;AAEA,MAAM,sBAAsB,UAA2B;CACrD,IAAI,UAAU,QAAQ,UAAU,KAAA,GAC9B,OAAO;CAGT,IAAI,OAAO,UAAU,UACnB,OAAO;CAGT,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,WAChD,OAAO,OAAO,KAAK;CAGrB,OAAO,KAAK,UAAU,KAAK;AAC7B;AAEA,MAAM,YAAY,SAA+E;CAC/F,QAAQ,KAAK,MAAb;EACE,KAAK,QACH,OAAO,OAAO,QAAQ,KAAA,CAAS;EACjC,KAAK,QACH,OAAO,OAAO,IAAI;GAChB,WAAW,KAAK,UAAU,KAAK,KAAK;GACpC,OAAO;EACT,CAAC;EACH,KAAK,QACH,OAAO,OAAO,QACZ,IAAI,gBACF,OAAO,QAAQ,KAAK,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,WACxC,UAAU,KAAA,IAAY,CAAC,IAAI,CAAC,CAAC,KAAK,mBAAmB,KAAK,CAAC,CAAC,CAC9D,CACF,CACF;EACF,KAAK,aACH,OAAO,OAAO,QAAQ,KAAK,KAAK;CACpC;AACF;AAEA,MAAM,eAAe,KAAa,SAA8B,kBAC9D,OAAO,IAAI,aAAa;CACtB,MAAM,UAAU,IAAI,QAAQ,QAAQ,OAAO;CAE3C,MAAM,OAAO,QAAQ,QAAQ,EAAE,MAAM,OAAgB;CACrD,IAAI,CAAC,QAAQ,IAAI,QAAQ,GACvB,QAAQ,IAAI,UAAU,kBAAkB;CAG1C,IAAI,eACF,QAAQ,IAAI,iBAAiB,aAAa;CAG5C,IAAI,KAAK,SAAS,UAAU,CAAC,QAAQ,IAAI,cAAc,GACrD,QAAQ,IAAI,gBAAgB,kBAAkB;CAGhD,OAAO;EACL,MAAM,OAAO,SAAS,IAAI;EAC1B;EACA,QAAQ,QAAQ;EAChB;CACF;AACF,CAAC;AAEH,MAAM,kBAAkB,YACtB,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CACtB,MAAM,aAAa,OAAO;CAC1B,MAAM,gBAAgB,OAAO,qBAAqB,QAAQ,QAAQ,IAAI;CACtE,MAAM,MAAM,OAAO,OAAO,IAAI;EAC5B,WACE,cACE,QAAQ,WAAW,OAAO,WAAA,sBAC1B,QAAQ,MACR,QAAQ,KACV;EACF,OAAO;CACT,CAAC;CACD,MAAM,UAAU,OAAO,YAAY,KAAK,SAAS,aAAa;CAE9D,OAAO,OAAO,WAAW,QAAQ,OAAO;AAC1C,CAAC;AAEH,MAAa,eACX,QACA,YAEA,eAAe,OAAO,CAAC,CAAC,KACtB,OAAO,SAAS,aACd,gBAAgB,SAAS,MAAM,IAC3B,kBAAkB,QAAQ,QAAQ,IAClC,cAAc,UAAU,SAAS,OAAO,CAAC,CAAC,KAAK,OAAO,QAAQ,OAAO,IAAI,CAAC,CAChF,CACF;AAEF,MAAa,mBACQ,WAEjB,WAEA,OAAO,KAAK,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AAEnD,MAAa,oBACyB,GAAG,YAErC,WAEA,OAAO,KACL,OAAO,KACJ,UACC,OAAO,YAAY,OAAO,KAAK,UAAU,CAAC,OAAO,MAAM,MAAmB,CAAC,CAAC,CAIhF,CACF;AAEJ,MAAa,sBACX,YAEA,eAAe,OAAO,CAAC,CAAC,KACtB,OAAO,SAAS,aACd,gBAAgB,SAAS,MAAM,IAC3B,SAAS,YAAY,KAAK,OAAO,KAAK,WAAW,IAAI,WAAW,MAAM,CAAC,CAAC,IACxE,cAAc,UAAU,SAAS,OAAO,CAAC,CAAC,KAAK,OAAO,QAAQ,OAAO,IAAI,CAAC,CAChF,CACF;AAEF,MAAa,eACX,YAEA,mBAAmB,OAAO,CAAC,CAAC,KAAK,OAAO,KAAK,UAAU,IAAI,YAAY,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;AAEzF,MAAa,eACX,YAEA,eAAe,OAAO,CAAC,CAAC,KACtB,OAAO,SAAS,aACd,gBAAgB,SAAS,MAAM,IAC3B,OAAO,OACP,cAAc,UAAU,SAAS,OAAO,CAAC,CAAC,KAAK,OAAO,QAAQ,OAAO,IAAI,CAAC,CAChF,CACF;;;AChWF,MAAa,WACX,WACwB,UAAU,OAAO,SAAS,IAAI,OAAO,KAAK,GAAG,IAAI,KAAA;AAE3E,MAAa,yBAIX,WACA,iBAI+C;CAC/C,MAAM,uBAAwB,gBAAgB;CAE9C,OAAO;EACL,QAAQ,UAAU;EAClB,aAAa,QAAQ,UAAU,UAAU;GACxC,uBAAuB,QAAQ,UAAU,GAAG;CAC/C;AAIF"}