{"version":3,"file":"index.cjs","names":["status?: string","cause?: unknown"],"sources":["../src/mutator/custom-photoshop-axios-instance.ts","../src/generated/photoshop-client/photoshop-client.ts","../src/generated/photoshop-client/photoshop-client.schemas.ts","../src/generated/photoshop-client/index.ts","../src/extension/photoshop-job-polling-extension.ts"],"sourcesContent":["import Axios, { type AxiosRequestConfig } from 'axios';\n\nexport const PHOTOSHOP_AXIOS_INSTANCE = Axios.create();\nPHOTOSHOP_AXIOS_INSTANCE.defaults.baseURL = 'https://image.adobe.io';\n\n// add a second `options` argument here if you want to pass extra options to each generated query\nexport const customPhotoshopAxiosInstance = <T>(\n  config: AxiosRequestConfig,\n  options?: AxiosRequestConfig\n): Promise<T> => {\n  const source = Axios.CancelToken.source();\n\n  const promise = PHOTOSHOP_AXIOS_INSTANCE({\n    ...config,\n    ...options,\n    cancelToken: source.token,\n  }).then(({ data }) => data);\n\n  return promise;\n};\n","/**\n * Generated by orval v7.14.0 🍺\n * Do not edit manually.\n * Adobe Photoshop API\n * This is the comprehesive reference for the Adobe Photoshop API, including all available API endpoints, request formats, parameters, authentication requirements, and example responses to use when integrating with or building on top of our APIs.\n * OpenAPI spec version: 1.0\n */\nimport type {\n  ApplyAutoCropRequest,\n  ApplyDepthBlurRequest,\n  ConvertToActionsJsonRequest,\n  CreateArtboardRequest,\n  CreateDocumentRequest,\n  CreateMaskRequest,\n  CreateRenditionRequest,\n  DocumentManifestRequest,\n  EditTextLayerRequest,\n  FacadeJobStatus200,\n  FacadeJobStatusPathParameters,\n  FillMaskedAreasRequest,\n  GetJobStatus200,\n  GetJobStatusPathParameters,\n  JobLinkResponse,\n  JobStatusLinkResponse,\n  MaskBodyPartsRequest,\n  MaskObjectsRequest,\n  ModifyDocumentRequest,\n  PlayPhotoshopActionsJsonRequest,\n  PlayPhotoshopActionsRequest,\n  PsJobResponse,\n  PsJobStatusPathParameters,\n  RefineMaskRequest,\n  RemoveBackgroundRequest,\n  RemoveBackgroundV2Request,\n  ReplaceSmartObjectRequest,\n  SenseiJobApiResponse,\n  SenseiJobStatusPathParameters,\n} from './photoshop-client.schemas';\n\nimport { customPhotoshopAxiosInstance } from '../../mutator/custom-photoshop-axios-instance';\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * This endpoint returns the status of a job for a Remove Background and Create Mask operation. The schema of a 200 response varies depending on the status of the job.\n * @summary Get status - mask\n */\nexport const senseiJobStatus = (\n  { jobId }: SenseiJobStatusPathParameters,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<SenseiJobApiResponse>>\n) => {\n  return customPhotoshopAxiosInstance<SenseiJobApiResponse>(\n    { url: `/sensei/status/${jobId}`, method: 'GET' },\n    options\n  );\n};\n\n/**\n * ⚠️ **DEPRECATED**: This endpoint is deprecated and will no longer be accessible after Oct 15, 2025. Use `/v2/remove-background` instead. For more information, see the [Deprecation Announcement](https://developer.adobe.com/firefly-services/docs/photoshop/getting_started/deprecation_announcement/). This endpoint will identify the main subject of your image and removes the background automatically. It also provides options to return a PNG file in 4 channel RGBA or 3 channel RGB format. To check the status of this process, utilize the `Get Status - Mask` endpoint.\n * @deprecated\n * @summary Remove background v1 (Deprecated)\n */\nexport const removeBackgroundAsync = (\n  removeBackgroundRequest: RemoveBackgroundRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/sensei/cutout`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: removeBackgroundRequest,\n    },\n    options\n  );\n};\n\n/**\n * This endpoint allows you to remove the background from an image. The request is processed asynchronously and the status of the running job can be checked with the Get Status endpoint.\n * @summary Remove background v2\n */\nexport const removeBackground = (\n  removeBackgroundV2Request: RemoveBackgroundV2Request,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobLinkResponse>(\n    {\n      url: `/v2/remove-background`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: removeBackgroundV2Request,\n    },\n    options\n  );\n};\n\n/**\n * Retrieve the status of a running Remove Background job by providing the job ID. The job ID is obtained from the response of the asynchronous Remove Background API call.\n * @summary Get status - v2\n */\nexport const facadeJobStatus = (\n  { jobId }: FacadeJobStatusPathParameters,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<FacadeJobStatus200>>\n) => {\n  return customPhotoshopAxiosInstance<FacadeJobStatus200>(\n    { url: `/v2/status/${jobId}`, method: 'GET' },\n    options\n  );\n};\n\n/**\n * ⚠️ **DEPRECATED**: This endpoint is deprecated and will no longer be accessible after Oct 15, 2025. Use `/v2/remove-background` instead. For more information, see the [Deprecation Announcement](https://developer.adobe.com/firefly-services/docs/photoshop/getting_started/deprecation_announcement/).This endpoint uses the Remove Background AI/ML model to return a PNG file with a mask applied around the subject. To check the status of this process, utilize the `Get Status - Mask` endpoint.\n * @deprecated\n * @summary Create mask\n */\nexport const createMaskAsync = (\n  createMaskRequest: CreateMaskRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/sensei/mask`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: createMaskRequest,\n    },\n    options\n  );\n};\n\n/**\n * Get the job status of a Photoshop job.\n * @summary Get status\n */\nexport const psJobStatus = (\n  { jobId }: PsJobStatusPathParameters,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<PsJobResponse>>\n) => {\n  return customPhotoshopAxiosInstance<PsJobResponse>(\n    { url: `/pie/psdService/status/${jobId}`, method: 'GET' },\n    options\n  );\n};\n\n/**\n * Extract metadata from PSD document, including general file and layer information.\n * @summary Extract document manifest\n */\nexport const getDocumentManifestAsync = (\n  documentManifestRequest: DocumentManifestRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/documentManifest`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: documentManifestRequest,\n    },\n    options\n  );\n};\n\n/**\n * Create new PSD with layers.\n * @summary Create PSD\n */\nexport const createDocumentAsync = (\n  createDocumentRequest: CreateDocumentRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/documentCreate`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: createDocumentRequest,\n    },\n    options\n  );\n};\n\n/**\n * Apply basic layer edits (name, state, etc.), add/edit adjustment, pixel, and shape layers.\n * @summary Apply photoshop edits\n */\nexport const modifyDocumentAsync = (\n  modifyDocumentRequest: ModifyDocumentRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/documentOperations`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: modifyDocumentRequest,\n    },\n    options\n  );\n};\n\n/**\n * Create flat image representations of a PSD in multiple formats.\n * @summary Create renditions\n */\nexport const createRenditionAsync = (\n  createRenditionRequest: CreateRenditionRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/renditionCreate`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: createRenditionRequest,\n    },\n    options\n  );\n};\n\n/**\n * Replace Smart Object in a PSD.\n * @summary Replace smart object\n */\nexport const replaceSmartObjectAsync = (\n  replaceSmartObjectRequest: ReplaceSmartObjectRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/smartObject`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: replaceSmartObjectRequest,\n    },\n    options\n  );\n};\n\n/**\n * Executes Photoshop Action file against a PSD, JPEG, PNG, or TIFF.\n * @summary Run photoshop actions\n */\nexport const playPhotoshopActionsAsync = (\n  playPhotoshopActionsRequest: PlayPhotoshopActionsRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/photoshopActions`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: playPhotoshopActionsRequest,\n    },\n    options\n  );\n};\n\n/**\n * Execute given Photoshop Action specified in actionJSON format.\n * @summary Run actionJSON\n */\nexport const playPhotoshopActionsJsonAsync = (\n  playPhotoshopActionsJsonRequest: PlayPhotoshopActionsJsonRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/actionJSON`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: playPhotoshopActionsJsonRequest,\n    },\n    options\n  );\n};\n\n/**\n * Convert an ATN file to actionJSON format.\n * @summary Convert to actionJSON\n */\nexport const convertToActionsJsonAsync = (\n  convertToActionsJsonRequest: ConvertToActionsJsonRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/actionJsonCreate`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: convertToActionsJsonRequest,\n    },\n    options\n  );\n};\n\n/**\n * This endpoint identifies the subject of the input file and automatically crops the image to keep the subject in the center. Check the status of this process with the `Get Status` endpoint.\n * @summary Product crop\n */\nexport const applyAutoCropAsync = (\n  applyAutoCropRequest: ApplyAutoCropRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/productCrop`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: applyAutoCropRequest,\n    },\n    options\n  );\n};\n\n/**\n * Apply depth blur to an image input.\n * @summary Depth blur\n */\nexport const applyDepthBlurAsync = (\n  applyDepthBlurRequest: ApplyDepthBlurRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/depthBlur`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: applyDepthBlurRequest,\n    },\n    options\n  );\n};\n\n/**\n * Change the contents of a text layer in a PSD, e.g. for localization.\n * @summary Edit text layer\n */\nexport const editTextLayerAsync = (\n  editTextLayerRequest: EditTextLayerRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/text`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: editTextLayerRequest,\n    },\n    options\n  );\n};\n\n/**\n * Create artboards from multiple PSD inputs.\n * @summary Create artboards\n */\nexport const createArtboardAsync = (\n  createArtboardRequest: CreateArtboardRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobStatusLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobStatusLinkResponse>(\n    {\n      url: `/pie/psdService/artboardCreate`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: createArtboardRequest,\n    },\n    options\n  );\n};\n\n/**\n * Given an image, this API generates semantic masks for the foreground objects and a list of background masks that segment the background elements of the image. Each mask includes a label and a URL for the mask image. To check the status of this process, utilize the `Get Status - V1` endpoint.\n * @summary Generate object and background masks\n */\nexport const maskObjects = (\n  maskObjectsRequest: MaskObjectsRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobLinkResponse>(\n    {\n      url: `/v1/mask-objects`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: maskObjectsRequest,\n    },\n    options\n  );\n};\n\n/**\n * This endpoint processes an input image of a human, then identifies and creates masks for various items and sections on the body including sunglasses, hats, upper body apparel, lower body apparel, left arm, right arm, and more. The API returns an array of masks corresponding to each detected item and body part. To check the status of this process, utilize the `Get Status - V1` endpoint.\n * @summary Generate human item masks\n */\nexport const maskBodyParts = (\n  maskBodyPartsRequest: MaskBodyPartsRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobLinkResponse>(\n    {\n      url: `/v1/mask-body-parts`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: maskBodyPartsRequest,\n    },\n    options\n  );\n};\n\n/**\n * This endpoint allows you to refine and improve the quality of existing masks. The API will enhance the edges and details of the provided masks to create more precise and accurate results. To check the status of this process, utilize the `Get Status - V1` endpoint.\n * @summary Refine mask\n */\nexport const refineMask = (\n  refineMaskRequest: RefineMaskRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobLinkResponse>(\n    {\n      url: `/v1/refine-mask`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: refineMaskRequest,\n    },\n    options\n  );\n};\n\n/**\n * This endpoint allows you to inpaint masked areas within an image. The API will remove the objects represented by these masks and inpaint the specified areas. Provide a list of masks corresponding to the regions you wish to modify. To check the status of this process, utilize the `Get Status - V1` endpoint.\n * @summary Fill masked areas\n */\nexport const fillMaskedAreas = (\n  fillMaskedAreasRequest: FillMaskedAreasRequest,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<JobLinkResponse>>\n) => {\n  return customPhotoshopAxiosInstance<JobLinkResponse>(\n    {\n      url: `/v1/fill-masked-areas`,\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      data: fillMaskedAreasRequest,\n    },\n    options\n  );\n};\n\n/**\n * This endpoint allows you to check the status of an asynchronous job for a masking operation. The schema of a 200 response varies depending on the status of the job. A job with a `succeeded` status will include the results in the response and the result objects vary depending on the operation.\n * @summary Get status - v1\n */\nexport const getJobStatus = (\n  { jobId }: GetJobStatusPathParameters,\n  options?: SecondParameter<typeof customPhotoshopAxiosInstance<GetJobStatus200>>\n) => {\n  return customPhotoshopAxiosInstance<GetJobStatus200>(\n    { url: `/v1/status/${jobId}`, method: 'GET' },\n    options\n  );\n};\n\ntype AwaitedInput<T> = PromiseLike<T> | T;\n\ntype Awaited<O> = O extends AwaitedInput<infer T> ? T : never;\n\nexport type SenseiJobStatusResult = NonNullable<Awaited<ReturnType<typeof senseiJobStatus>>>;\nexport type RemoveBackgroundAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof removeBackgroundAsync>>\n>;\nexport type RemoveBackgroundResult = NonNullable<Awaited<ReturnType<typeof removeBackground>>>;\nexport type FacadeJobStatusResult = NonNullable<Awaited<ReturnType<typeof facadeJobStatus>>>;\nexport type CreateMaskAsyncResult = NonNullable<Awaited<ReturnType<typeof createMaskAsync>>>;\nexport type PsJobStatusResult = NonNullable<Awaited<ReturnType<typeof psJobStatus>>>;\nexport type GetDocumentManifestAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof getDocumentManifestAsync>>\n>;\nexport type CreateDocumentAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof createDocumentAsync>>\n>;\nexport type ModifyDocumentAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof modifyDocumentAsync>>\n>;\nexport type CreateRenditionAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof createRenditionAsync>>\n>;\nexport type ReplaceSmartObjectAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof replaceSmartObjectAsync>>\n>;\nexport type PlayPhotoshopActionsAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof playPhotoshopActionsAsync>>\n>;\nexport type PlayPhotoshopActionsJsonAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof playPhotoshopActionsJsonAsync>>\n>;\nexport type ConvertToActionsJsonAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof convertToActionsJsonAsync>>\n>;\nexport type ApplyAutoCropAsyncResult = NonNullable<Awaited<ReturnType<typeof applyAutoCropAsync>>>;\nexport type ApplyDepthBlurAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof applyDepthBlurAsync>>\n>;\nexport type EditTextLayerAsyncResult = NonNullable<Awaited<ReturnType<typeof editTextLayerAsync>>>;\nexport type CreateArtboardAsyncResult = NonNullable<\n  Awaited<ReturnType<typeof createArtboardAsync>>\n>;\nexport type MaskObjectsResult = NonNullable<Awaited<ReturnType<typeof maskObjects>>>;\nexport type MaskBodyPartsResult = NonNullable<Awaited<ReturnType<typeof maskBodyParts>>>;\nexport type RefineMaskResult = NonNullable<Awaited<ReturnType<typeof refineMask>>>;\nexport type FillMaskedAreasResult = NonNullable<Awaited<ReturnType<typeof fillMaskedAreas>>>;\nexport type GetJobStatusResult = NonNullable<Awaited<ReturnType<typeof getJobStatus>>>;\n","/**\n * Generated by orval v7.14.0 🍺\n * Do not edit manually.\n * Adobe Photoshop API\n * This is the comprehesive reference for the Adobe Photoshop API, including all available API endpoints, request formats, parameters, authentication requirements, and example responses to use when integrating with or building on top of our APIs.\n * OpenAPI spec version: 1.0\n */\n/**\n * Any errors reported in the requested output.\n */\nexport interface JobError {\n  /** The error type. */\n  type?: string;\n  /** The error code. */\n  code?: string;\n  /** The error description. */\n  title?: string;\n  /** The internal error code. */\n  error_code?: string;\n  /** The details of the error returned. */\n  details?: ErrorDetails[];\n}\n\n/**\n * Any errors reported in the requested output.\n */\nexport interface InputValidationError {\n  /** The error type. */\n  type?: string;\n  /** The error code. */\n  code?: string;\n  /** The error description. */\n  title?: string;\n  /** The details of the error returned. */\n  details?: InputValidationErrorDetail[];\n}\n\n/**\n * Any errors reported in the requested output.\n */\nexport interface TrialLimitExceededError {\n  /** The error type. */\n  type?: string;\n  /** The error code. */\n  code?: string;\n  /** The error description. */\n  title?: string;\n  /** The details of the error returned. */\n  details?: string;\n}\n\n/**\n * Details of the input validation error returned.\n */\nexport interface InputValidationErrorDetail {\n  /** The name of the input parameter. */\n  allowedValues?: string;\n  /** The reason for the error. */\n  reason?: string;\n}\n\n/**\n * A file located on Adobe's cloud or a supported external service.\n */\nexport interface StorageDetails {\n  /** A pre-signed GET URL. */\n  href: string;\n  storage: StorageType;\n}\n\n/**\n * Color space for output image\n */\nexport interface SenseiColor {\n  space?: ColorSpaceType;\n}\n\n/**\n * Color space for output image\n */\nexport type ColorSpaceType = (typeof ColorSpaceType)[keyof typeof ColorSpaceType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ColorSpaceType = {\n  rgb: 'rgb',\n  rgba: 'rgba',\n} as const;\n\n/**\n * A PNG file.\n */\nexport interface SenseiOutputDetails {\n  /** A pre-signed POST URL to the output file. */\n  href: string;\n  storage: StorageType;\n  mask?: MaskFormat;\n  color?: SenseiColor;\n  /** If the file already exists, indicates if the output file should be overwritten. Will eventually support eTags. Only applies to CC Storage. */\n  overwrite?: boolean;\n}\n\nexport interface SenseiJobApiResponse {\n  /** The job ID requested. */\n  jobId?: string;\n  /** Created timestamp of the job (YYYY-DD-MMThh:mm:ss.mmmmmZ). */\n  created?: string;\n  /** Modified timestamp of the job (YYYY-DD-MMThh:mm:ss.mmmmmZ). */\n  modified?: string;\n  status?: JobStatus;\n  output?: SenseiOutputDetails;\n  errors?: JobError;\n  _links?: JobStatusLink;\n}\n\nexport interface JobStatusLink {\n  self?: SelfLink;\n}\n\nexport interface RemoveBackgroundRequest {\n  input: StorageDetails;\n  output: SenseiOutputDetails;\n}\n\nexport interface CreateMaskRequest {\n  input: StorageDetails;\n  output: SenseiOutputDetails;\n}\n\nexport interface JobStatusLinkResponse {\n  _links?: JobStatusLink;\n}\n\nexport interface IccProfileDetails {\n  imageMode?: ImageModeType;\n  input?: StorageDetails;\n  profileName?: ColorProfileType;\n}\n\n/**\n * An output object.\n */\nexport interface SmartObjectOutputDetails {\n  /** A pre-signed POST URL to the output file. */\n  href: string;\n  storage: StorageType;\n  type: ImageFormatType;\n  /** If the file already exists, indicates if the output file should be overwritten. Will eventually support eTags. Only applies to CC Storage. */\n  overwrite?: boolean;\n  /** The width, in pixels, of the renditions. A width of 0 generates a full size rendition. Height is generated automatically using the aspect ratio. Only supported for image rendition. */\n  width?: number;\n  /**\n   * The quality of the renditions for JPEG. The range is 1 to 7, 7 being the highest quality.\n   * @minimum 1\n   * @maximum 7\n   */\n  quality?: number;\n  compression?: CompressionType;\n}\n\n/**\n * An output object.\n */\nexport interface ActionOutputDetails {\n  /** A pre-signed POST URL to the output file. */\n  href: string;\n  storage: StorageType;\n  type: ImageFormatType;\n  /** If the file already exists, indicates if the output file should be overwritten. Will eventually support eTags. Only applies to CC Storage. */\n  overwrite?: boolean;\n  /**\n   * The quality of the renditions for JPEG. The range is 1 to 7, 7 being the highest quality.\n   * @minimum 1\n   * @maximum 12\n   */\n  quality?: number;\n  compression?: CompressionType;\n}\n\n/**\n * An output object.\n */\nexport interface PsOutputDetails {\n  /** A pre-signed POST URL to the output file. */\n  href: string;\n  storage: StorageType;\n  type: ImageFormatType;\n  /** If the file already exists, indicates if the output file should be overwritten. Will eventually support eTags. Only applies to CC Storage. */\n  overwrite?: boolean;\n  /** The width, in pixels, of the renditions. A width of 0 generates a full size rendition. Height is generated automatically using the aspect ratio. Only supported for image rendition. */\n  width?: number;\n  /** The size, in pixels, of the renditions. When width is 0, maxWidth can be provided to get the rendition size. maxWidth when less than document width gets precedence over width. Height is not necessary as the rendition generate will automatically maintain the aspect ratio. */\n  maxWidth?: number;\n  /**\n   * The quality of the renditions for JPEG. The range is 1 to 7, 7 being the highest quality.\n   * @minimum 1\n   * @maximum 7\n   */\n  quality?: number;\n  compression?: CompressionType;\n  trimToCanvas?: TrimToCanvasType;\n  /** An array of layer objects.\nBy including this array you are signaling that you'd like a rendition created from these layer id's or layer names. Excluding it will generate a document-level rendition. */\n  layers?: LayerReference[];\n  iccProfile?: IccProfileDetails;\n}\n\n/**\n * A rendition object.\n */\nexport interface RenditionLinkDetails {\n  /** The rendition location. */\n  href?: string;\n  storage?: StorageType;\n  /** The requested rendition width in pixels. */\n  width?: number;\n  type?: ImageFormatType;\n}\n\nexport interface ManifestJobApiResponse {\n  /** The job ID requested. */\n  jobId?: string;\n  /** The outputs requested. */\n  outputs?: ManifestJobStatusOutputDetails[];\n  _links?: JobStatusLink;\n}\n\nexport interface PsJobApiResponse {\n  /** The job ID requested. */\n  jobId?: string;\n  /** API output details. */\n  outputs?: JobOutputDetails[];\n  _links?: JobStatusLink;\n}\n\n/**\n * Photoshop Job response.\n */\nexport type PsJobResponse = ManifestJobApiResponse | PsJobApiResponse;\n\nexport type DocumentManifestRequestOptions = DocumentManifestOptions & unknown;\n\nexport interface DocumentManifestRequest {\n  /** An array of input objects. Each input object represents a file to be processed. */\n  inputs: StorageDetails[];\n  options?: DocumentManifestRequestOptions;\n}\n\nexport interface LayerPosition {\n  insertAbove?: LayerReference;\n  insertBelow?: LayerReference;\n  insertInto?: LayerReference;\n  insertTop?: boolean;\n  insertBottom?: boolean;\n}\n\n/**\n * Indicates you want to delete the layer, identified by the `id` or `name`. Note the object is currently empty but leaves room for further enhancements.\n */\nexport interface DeleteDetails {\n  /** Indicates that child layers are included when deleting a group layer. */\n  includeChildren?: boolean;\n  /** The layer ID. */\n  id?: number;\n  /** The layer name. You can identify a layer by id or name. That makes either id or name a required field. */\n  name?: string;\n}\n\n/**\n * A layer reference object.\n */\nexport interface LayerReference {\n  /** The id of the layer. Use either `id` OR `name`. */\n  id?: number;\n  /** The name of the layer. Use either `id` OR `name`. */\n  name?: string;\n}\n\nexport interface CreateDocumentRequest {\n  /** An array of output objects. Each output object represents a file to be created. */\n  outputs: PsOutputDetails[];\n  options: DocumentCreateOptions;\n}\n\nexport interface ModifyDocumentRequest {\n  /** An array of input objects. Each input object represents a file to be processed. */\n  inputs: StorageDetails[];\n  /** An array of output objects. Each output object represents a file to be created. */\n  outputs: PsOutputDetails[];\n  options: DocumentOperationOptions;\n}\n\nexport interface CreateRenditionRequest {\n  /** An array of input objects. Only one input object is currently supported. */\n  inputs: StorageDetails[];\n  /** An array of output objects. */\n  outputs: PsOutputDetails[];\n}\n\nexport interface ReplaceSmartObjectRequest {\n  /** An array of input objects. Only one input object is currently supported. */\n  inputs: StorageDetails[];\n  /** An array of output objects. */\n  outputs: SmartObjectOutputDetails[];\n  options: SmartObjectOptions;\n}\n\nexport interface PlayPhotoshopActionsRequest {\n  /** An array of input objects. Only one input object is currently supported. */\n  inputs: StorageDetails[];\n  /** An array of output objects. */\n  outputs: ActionOutputDetails[];\n  options: ActionOptions;\n}\n\nexport interface PlayPhotoshopActionsJsonRequest {\n  /** An array of input objects. Only one input object is currently supported. */\n  inputs: StorageDetails[];\n  /** An array of output objects. */\n  outputs: ActionOutputDetails[];\n  options: ActionJsonOptions;\n}\n\nexport interface ConvertToActionsJsonRequest {\n  /** An array of input action sets in ATN format. Only one input object is currently supported. */\n  inputs: StorageDetails[];\n  options?: ActionJsonCreateOptions;\n}\n\nexport interface ApplyAutoCropRequest {\n  /** An array of input objects. Only one input object is currently supported. */\n  inputs: StorageDetails[];\n  /** An array of output objects */\n  outputs: ActionOutputDetails[];\n  options: CropOptions;\n}\n\nexport interface ApplyDepthBlurRequest {\n  /** An array of input objects. We currently only support one input object */\n  inputs: StorageDetails[];\n  /** An array of output objects */\n  outputs: ActionOutputDetails[];\n  options?: DepthBlurDetails;\n}\n\nexport interface EditTextLayerRequest {\n  /** An array of input objects. We currently only support one input object */\n  inputs: StorageDetails[];\n  /** An array of output objects */\n  outputs: ActionOutputDetails[];\n  options: TextOptions;\n}\n\nexport interface CreateArtboardRequest {\n  options: ArtboardDetails;\n  /** An array of output objects */\n  outputs: PsOutputDetails[];\n}\n\nexport interface DocumentDetails {\n  /** In pixels */\n  height: number;\n  /** In pixels */\n  width: number;\n  /**\n   * In pixels per inch\n   * @minimum 72\n   * @maximum 300\n   */\n  resolution: number;\n  fill: FillType;\n  mode: ChannelModeType;\n  depth?: DepthType;\n}\n\nexport interface ManifestJobDocumentDetails {\n  /** The name of the document */\n  name?: string;\n  /** In pixels */\n  height?: number;\n  /** In pixels */\n  width?: number;\n  /** The version of Photoshop used to create the document */\n  photoshopBuild?: string;\n  imageMode?: ImageModeType;\n  bitDepth?: ChannelModeType;\n  /** The name of the ICC profile used for the document */\n  iccProfileName?: string;\n}\n\nexport interface ChildrenLayerDetails {\n  /** The layer ID. An ID of -1 is valid and indicates a PSD that only contains a background image and no layers. */\n  id?: number;\n  /** The layer index. */\n  index?: number;\n  /** If thumbnails were requested, a pre-signed GET URL to the thumbnail */\n  thumbnail?: string;\n  type?: LayerType;\n  /** The layer name. */\n  name?: string;\n  /** Whether the layer is locked */\n  locked?: boolean;\n  /** Whether the layer is visible */\n  visible?: boolean;\n  adjustments?: AdjustmentDetails;\n  bounds?: Bounds;\n  blendOptions?: BlendDetails;\n  mask?: LayerMaskDetails;\n  smartObject?: SmartObjectDetails;\n  fill?: FillDetails;\n  text?: TextLayerDetails;\n}\n\nexport interface LayerDetails {\n  /** The layer ID. An ID of -1 is valid and indicates a PSD that only contains a background image and no layers. */\n  id?: number;\n  /** The layer index. */\n  index?: number;\n  /** If thumbnails were requested, this is a pre-signed GET URL to the thumbnail. */\n  thumbnail?: string;\n  /** An array of nested layer objects. Only layerSections (group layers) can include children. */\n  children?: ChildrenLayerDetails[];\n  type?: LayerType;\n  /** The layer name. */\n  name?: string;\n  /** Whether the layer is locked. */\n  locked?: boolean;\n  /** Whether the layer is visible. */\n  visible?: boolean;\n  adjustments?: ManifestJobAdjustmentDetails;\n  bounds?: Bounds;\n  blendOptions?: BlendDetails;\n  mask?: LayerMaskDetails;\n  smartObject?: SmartObjectDetails;\n  fill?: FillDetails;\n  text?: TextLayerDetails;\n}\n\nexport type ActionStorage = StorageType & unknown;\n\n/**\n * An object describing the input Photoshop Actions to play.\n */\nexport interface Action {\n  storage?: ActionStorage;\n  /** Presigned GET URL */\n  href?: string;\n  /** If you only want to execute a particular action, you may specify which action to play from the ActionSet */\n  actionName?: string;\n}\n\n/**\n * Details of Actions from the ActionSet.\n */\nexport interface ActionDetails {\n  /** If you only want to execute a particular action, you may specify whcih action to convert from the ActionSet */\n  actionName?: string;\n}\n\n/**\n * Adjustment layer information.\n */\nexport interface AdjustmentDetails {\n  brightnessContrast?: BrightnessContrast;\n  exposure?: ExposureDetails;\n  hueSaturation?: HueSaturation;\n  colorBalance?: ColorBalance;\n}\n\n/**\n * Adjustment layer information.\n */\nexport interface ManifestJobAdjustmentDetails {\n  brightness_contrast?: BrightnessContrast;\n  exposure?: ExposureDetails;\n  hue_saturation?: HueSaturation;\n  color_balance?: ColorBalance;\n}\n\n/**\n * Brightness and contrast settings.\n */\nexport interface BrightnessContrast {\n  /**\n   * The adjustment layer's brightness.\n   * @minimum -150\n   * @maximum 150\n   */\n  brightness?: number;\n  /**\n   * The adjustment layer's contrast.\n   * @minimum -150\n   * @maximum 150\n   */\n  contrast?: number;\n}\n\n/**\n * Exposure settings.\n */\nexport interface ExposureDetails {\n  /**\n   * The layer's exposure.\n   * @minimum -20\n   * @maximum 20\n   */\n  exposure?: number;\n  /**\n   * The layer's offset.\n   * @minimum -0.5\n   * @maximum 0.5\n   */\n  offset?: number;\n  /**\n   * The layer's gamma correction.\n   * @minimum 0.01\n   * @maximum 9.99\n   */\n  gammaCorrection?: number;\n}\n\nexport interface HueSaturation {\n  /** Whether to colorize. */\n  colorize?: boolean;\n  /** An array of hashes representing the 'master' channel (the remaining five channels of 'magentas', 'yellows', 'greens', etc. are not yet supported). */\n  channels?: ChannelDetails[];\n}\n\n/**\n * Color balance settings.\n */\nexport interface ColorBalance {\n  /** Whether to preserve luminosity. */\n  preserveLuminosity?: boolean;\n  /** Shadow levels. */\n  shadowLevels?: number[];\n  /** Midtone levels. */\n  midtoneLevels?: number[];\n  /** Highlight levels. */\n  highlightLevels?: number[];\n}\n\n/**\n * The bounds of the layer.\n */\nexport interface Bounds {\n  /** The top position in pixels. */\n  top?: number;\n  /** The left position in pixels. */\n  left?: number;\n  /** The width in pixels. */\n  width?: number;\n  /** The height in pixels. */\n  height?: number;\n}\n\n/**\n * Character style settings.\n */\nexport interface CharacterStyleDetails {\n  /**\n   * The font size, in pixels.\n   * @minimum 0.04\n   * @maximum 5400\n   */\n  size?: number;\n  /** The font's PostScript name to be used to set the font for this layer. */\n  fontPostScriptName?: string;\n  color?: ColorDetails;\n  /** The font's leading value, where leading is the distance between each line of text. */\n  leading?: number;\n  /** The font's tracking value, where tracking is the horizontal spacing between a range of characters. */\n  tracking?: number;\n  baseline?: BaselineType;\n  fontCaps?: FontCaps;\n  autoKern?: AutoKernType;\n  /** Toggle strikethrough for selected text. */\n  strikethrough?: boolean;\n  /** Toggle bold for selected text. */\n  syntheticBold?: boolean;\n  /** Toggle italic for selected text. */\n  syntheticItalic?: boolean;\n  /** Toggle underlining of text. */\n  underline?: boolean;\n  /** Toggle text ligature, which are special characters in a font that combine two (or more). */\n  ligature?: boolean;\n  /** Toggle automatic formatting of fractions: numbers separated by a slash (such as 1/2). */\n  fractions?: boolean;\n  /** Toggle stylistic alternates, which formats stylized characters that create a purely aesthetic effect. */\n  stylisticAlternates?: boolean;\n  /**\n   * The amount of vertical scaling to apply to the font.\n   * @minimum 0\n   * @maximum 1000\n   */\n  verticalScale?: number;\n  /**\n   * The amount of horizontal scaling to apply to the font.\n   * @minimum 0\n   * @maximum 1000\n   */\n  horizontalScale?: number;\n}\n\n/**\n * Paragraph style settings.\n */\nexport interface ParagraphStyleDetails {\n  /** The paragraph alignment. */\n  alignment?: ParagraphStyleAlignmentType;\n  /** The amount of indent to add to the left margin. */\n  startIndent?: number;\n  /** The amount of indent to add to the right margin. */\n  endIndent?: number;\n  /** Toggle hyphenate for paragraph text. */\n  hyphenate?: boolean;\n  /** The amount of indent to add to the first line of the paragraph. */\n  firstLineIndent?: number;\n  /** The amount of space to add before the paragraph. */\n  spaceBefore?: number;\n  /** The amount of space to add after the paragraph. */\n  spaceAfter?: number;\n}\n\n/**\n * An object describing the input mask replaced or added to the layer.\n */\nexport interface LayerMaskDetails {\n  /** Indicates if this is a clipped layer. */\n  clip?: boolean;\n  /** Indicates whether a mask is enabled on that layer. */\n  enabled?: boolean;\n  /** Indicates whether a mask is linked to the layer. */\n  linked?: boolean;\n  offset?: Offset;\n}\n\n/**\n * Offset details.\n */\nexport interface Offset {\n  /** Offset to indicate horizontal move of the mask. */\n  x?: number;\n  /** Offset to indicate vertical move of the mask. */\n  y?: number;\n}\n\n/**\n * Smart object details.\n */\nexport interface SmartObjectDetails {\n  /** Desired image format for the smart object. */\n  type?: string;\n  /** Indicates if the smart object is linked. Currently we support embedded smart object only, which means \"linked = false\". */\n  linked?: boolean;\n  /** Name of the embedded or linked smart object. Currently we support embedded smart object only. */\n  name?: string;\n  /** Only for a linked smart object. Indicates the relative path for the linked smart object. */\n  path?: string;\n  /** Only for an embedded smart object. Indicates the instance ID of the embedded smart object. This ID is unique and the value is derived from the RAW data of the document. `instanceId` may show a value as unknown, if the embedded smart object is generated using a non-Adobe application. */\n  instanceId?: string;\n}\n\nexport interface FillDetails {\n  solidColor?: SolidColor;\n}\n\nexport interface SolidColor {\n  rgb: RgbColor;\n}\n\n/**\n * An object describing the RGB color format in 8 bits.\n */\nexport interface RgbColor {\n  /**\n   * @minimum 0\n   * @maximum 255\n   */\n  red?: number;\n  /**\n   * @minimum 0\n   * @maximum 255\n   */\n  green?: number;\n  /**\n   * @minimum 0\n   * @maximum 255\n   */\n  blue?: number;\n}\n\n/**\n * An object describing the RGB color format in 16 bits.\n */\nexport interface FontColorRgb {\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  red?: number;\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  green?: number;\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  blue?: number;\n}\n\n/**\n * The font color settings for CMYK mode in 16-bit representation.\n */\nexport interface FontColorCmyk {\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  cyan?: number;\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  magenta?: number;\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  yellowColor?: number;\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  black?: number;\n}\n\n/**\n * The font color settings for gray mode in 16-bit representation.\n */\nexport interface FontColorGray {\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  gray?: number;\n}\n\n/**\n * The font color settings for Lab mode in 16-bit representation.\n */\nexport interface FontColorLab {\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  luminance?: number;\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  a?: number;\n  /**\n   * @minimum 0\n   * @maximum 32768\n   */\n  b?: number;\n}\n\n/**\n * Text settings.\n */\nexport interface TextLayerDetails {\n  /** The text string. */\n  content?: string;\n  /** Character style settings. If the same supported attributes apply to all characters in the layer, then this will be an array of one item. Otherwise, each `characterStyle` object will have a 'from' and 'to' value indicating the range of characters that style applies to. */\n  characterStyles?: TextLayerCharacterStyleDetails[];\n  /** Paragraph style settings. If the same supported attributes apply to all characters in the layer then this will be an array of one item, otherwise each paragraph style object will have a 'from' and 'to' value indicating the range of characters that the style applies to. */\n  paragraphStyles?: TextLayerParagraphStyleDetails[];\n}\n\nexport interface TextLayerCharacterStyleDetails {\n  /**\n   * The beginning of the range of characters that this character style applies to. Based on initial index of 0. For example a style applied to only the first two characters would be from=0 and to=1.\n   * @minimum 0\n   */\n  from?: number;\n  /**\n   * The ending of the range of characters that this character style applies to. Based on initial index of 0. For example a style applied to only the first two characters would be from=0 and to=1.\n   * @minimum 0\n   */\n  to?: number;\n  /** The font size in points. */\n  fontSize?: number;\n  /** The font's PostScript name from the [list of supported fonts](../../getting_started/technical_usage_notes/index.md#photoshop-api-supported-fonts). */\n  fontName?: string;\n  orientation?: OrientationType;\n  fontColor?: FontColorDetails;\n}\n\n/**\n * If the same supported attributes apply to all characters in the layer then this will be an array of one item, otherwise each paragraph style object will have a 'from' and 'to' value indicating the range of characters that the style applies to.\n */\nexport interface TextLayerParagraphStyleDetails {\n  /**\n   * The beginning of the range of characters that this paragraph style applies to. Based on initial index of 0. For example a style applied to only the first two characters would be from=0 and to=1.\n   * @minimum 0\n   */\n  from?: number;\n  /**\n   * The ending of the range of characters that this paragraph style applies to. Based on initial index of 0. For example a style applied to only the first two characters would be from=0 and to=1.\n   * @minimum 0\n   */\n  to?: number;\n  alignment?: AlignmentType;\n}\n\n/**\n * Blend options of a layer, including opacity and blend mode.\n */\nexport interface BlendDetails {\n  /**\n   * Indicates the opacity value of a layer.\n   * @minimum 0\n   * @maximum 100\n   */\n  opacity?: number;\n  blendMode?: BlendModeType;\n}\n\n/**\n * The paragraph alignment.\n */\nexport type AlignmentType = (typeof AlignmentType)[keyof typeof AlignmentType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AlignmentType = {\n  left: 'left',\n  center: 'center',\n  right: 'right',\n  justify: 'justify',\n  justifyLeft: 'justifyLeft',\n  justifyCenter: 'justifyCenter',\n  justifyRight: 'justifyRight',\n} as const;\n\n/**\n * The paragraph alignment.\n */\nexport type ParagraphStyleAlignmentType =\n  (typeof ParagraphStyleAlignmentType)[keyof typeof ParagraphStyleAlignmentType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ParagraphStyleAlignmentType = {\n  left: 'left',\n  center: 'center',\n  right: 'right',\n  justify: 'justify',\n  justifyLeft: 'justifyLeft',\n  justifyCenter: 'justifyCenter',\n  justifyRight: 'justifyRight',\n  justifyAll: 'justifyAll',\n} as const;\n\n/**\n * The text's aliasing type which determines the smoothness of the jagged edges of the text.\n */\nexport type AntiAliasType = (typeof AntiAliasType)[keyof typeof AntiAliasType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AntiAliasType = {\n  antiAliasNone: 'antiAliasNone',\n  antiAliasSharp: 'antiAliasSharp',\n  antiAliasCrisp: 'antiAliasCrisp',\n  antiAliasStrong: 'antiAliasStrong',\n  antiAliasSmooth: 'antiAliasSmooth',\n  antiAliasPlatformLCD: 'antiAliasPlatformLCD',\n  antiAliasPlatformGray: 'antiAliasPlatformGray',\n} as const;\n\n/**\n * The text's kerning setting. Optical: set based on the shape of the font. Metrics: uses kern pairs included in fonts.\n */\nexport type AutoKernType = (typeof AutoKernType)[keyof typeof AutoKernType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AutoKernType = {\n  opticalKern: 'opticalKern',\n  metricsKern: 'metricsKern',\n} as const;\n\n/**\n * Based on type.\n */\nexport type BasedOnType = (typeof BasedOnType)[keyof typeof BasedOnType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const BasedOnType = {\n  transparentPixels: 'transparentPixels',\n} as const;\n\n/**\n * Indicates if the text is raised or lowered in relation to a font's baseline.\n */\nexport type BaselineType = (typeof BaselineType)[keyof typeof BaselineType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const BaselineType = {\n  subScript: 'subScript',\n  superScript: 'superScript',\n} as const;\n\n/**\n * Blend mode of layer.\n */\nexport type BlendModeType = (typeof BlendModeType)[keyof typeof BlendModeType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const BlendModeType = {\n  normal: 'normal',\n  dissolve: 'dissolve',\n  darken: 'darken',\n  multiply: 'multiply',\n  colorBurn: 'colorBurn',\n  linearBurn: 'linearBurn',\n  darkerColor: 'darkerColor',\n  lighten: 'lighten',\n  screen: 'screen',\n  colorDodge: 'colorDodge',\n  linearDodge: 'linearDodge',\n  lighterColor: 'lighterColor',\n  overlay: 'overlay',\n  softLight: 'softLight',\n  hardLight: 'hardLight',\n  vividLight: 'vividLight',\n  linearLight: 'linearLight',\n  pinLight: 'pinLight',\n  hardMix: 'hardMix',\n  difference: 'difference',\n  exclusion: 'exclusion',\n  subtract: 'subtract',\n  divide: 'divide',\n  hue: 'hue',\n  saturation: 'saturation',\n  color: 'color',\n  luminosity: 'luminosity',\n} as const;\n\nexport interface CanvasSize {\n  bounds: Bounds;\n}\n\nexport interface ChannelDetails {\n  channel?: ChannelType;\n  /**\n   * @minimum -180\n   * @maximum 180\n   */\n  hue?: number;\n  /**\n   * @minimum -100\n   * @maximum 100\n   */\n  saturation?: number;\n  /**\n   * @minimum -100\n   * @maximum 100\n   */\n  lightness?: number;\n}\n\n/**\n * The channel type.\n */\nexport type ChannelType = (typeof ChannelType)[keyof typeof ChannelType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ChannelType = {\n  master: 'master',\n} as const;\n\n/**\n * Font color in RGB format.\n */\nexport interface ColorDetails {\n  /**\n   * The color red value.\n   * @minimum 0\n   * @maximum 65535\n   */\n  red: number;\n  /**\n   * The color green value.\n   * @minimum 0\n   * @maximum 65535\n   */\n  green: number;\n  /**\n   * The color blue value.\n   * @minimum 0\n   * @maximum 65535\n   */\n  blue: number;\n}\n\n/**\n * Desired PNG compression level.\n */\nexport type CompressionType = (typeof CompressionType)[keyof typeof CompressionType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const CompressionType = {\n  small: 'small',\n  medium: 'medium',\n  large: 'large',\n} as const;\n\n/**\n * Bit depth. This is either 8, 16 or 32 bit.\n */\nexport type DepthType = (typeof DepthType)[keyof typeof DepthType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const DepthType = {\n  NUMBER_8: 8,\n  NUMBER_16: 16,\n  NUMBER_32: 32,\n} as const;\n\nexport interface OperationDocument {\n  canvasSize?: CanvasSize;\n  imageSize?: ImageSize;\n  trim?: Trim;\n}\n\nexport type EastAsianFeaturesTextStyle = TextStyleType & unknown;\n\n/**\n * Text features specifically for East Asian languages.\n */\nexport interface EastAsianFeatures {\n  textStyle?: EastAsianFeaturesTextStyle;\n}\n\n/**\n * Error details.\n */\nexport interface ErrorDetails {\n  /** The parameter name. */\n  name?: string;\n  /** The error. */\n  reason?: string;\n}\n\n/**\n * Type of fill for the background layer.\n */\nexport type FillType = (typeof FillType)[keyof typeof FillType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const FillType = {\n  white: 'white',\n  backgroundColor: 'backgroundColor',\n  transparent: 'transparent',\n} as const;\n\n/**\n * Focal selector.\n */\nexport interface FocalSelector {\n  /** X coordinate. */\n  x?: number;\n  /** Y coordinate. */\n  y?: number;\n}\n\n/**\n * The text's capitalization values.\n */\nexport type FontCaps = (typeof FontCaps)[keyof typeof FontCaps];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const FontCaps = {\n  allCaps: 'allCaps',\n  smallCaps: 'smallCaps',\n} as const;\n\nexport type FontColorDetailsRgb = FontColorRgb & unknown;\n\nexport type FontColorDetailsCmyk = FontColorCmyk & unknown;\n\nexport type FontColorDetailsGray = FontColorGray & unknown;\n\nexport type FontColorDetailsLab = FontColorLab & unknown;\n\nexport interface FontColorDetails {\n  rgb?: FontColorDetailsRgb;\n  cmyk?: FontColorDetailsCmyk;\n  gray?: FontColorDetailsGray;\n  lab?: FontColorDetailsLab;\n}\n\n/**\n * Soft mask or binary mask.\n */\nexport type MaskFormatType = (typeof MaskFormatType)[keyof typeof MaskFormatType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MaskFormatType = {\n  binary: 'binary',\n  soft: 'soft',\n} as const;\n\n/**\n * The image mode.\n */\nexport type ImageModeType = (typeof ImageModeType)[keyof typeof ImageModeType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ImageModeType = {\n  grayscale: 'grayscale',\n  rgb: 'rgb',\n  cmyk: 'cmyk',\n} as const;\n\n/**\n * The size of the image\n */\nexport interface ImageSize {\n  width: number;\n  height: number;\n}\n\nexport type DocumentCreateLayerInput = StorageDetails & unknown;\n\nexport type DocumentCreateLayerSmartObject = SmartObject & unknown;\n\nexport type DocumentCreateLayerText = TextLayerDetails & unknown;\n\nexport type DocumentCreateLayerBlendOptions = BlendDetails & unknown;\n\nexport interface DocumentCreateLayer {\n  type: LayerType;\n  input: DocumentCreateLayerInput;\n  name?: string;\n  /** is the layer locked */\n  locked?: boolean;\n  /** is the layer visible */\n  visible?: boolean;\n  adjustments?: AdjustmentDetails;\n  bounds?: Bounds;\n  children?: ChildrenLayerDetails[];\n  mask?: MaskDetails;\n  smartObject?: DocumentCreateLayerSmartObject;\n  fill?: FillDetails;\n  text?: DocumentCreateLayerText;\n  blendOptions?: DocumentCreateLayerBlendOptions;\n}\n\n/**\n * Indicates the layer to edit, by it's ID or name. Note the object is currently empty but leaves room for further enhancements. The layer block should contain changes from the original manifest. If you apply it to a group layer, you will be affecting the attributes of the group layer itself, not the child layers. This edit is supported for layer type `smartObject` and `fillLayer` only.\n */\nexport type DocumentOperationLayerEdit = { [key: string]: unknown };\n\nexport type DocumentOperationLayerSmartObject = SmartObject & unknown;\n\nexport type DocumentOperationLayerText = TextLayerDetails & unknown;\n\nexport type DocumentOperationLayerBlendOptions = BlendDetails & unknown;\n\nexport interface DocumentOperationLayer {\n  /** Indicates the layer to edit, by it's ID or name. Note the object is currently empty but leaves room for further enhancements. The layer block should contain changes from the original manifest. If you apply it to a group layer, you will be affecting the attributes of the group layer itself, not the child layers. This edit is supported for layer type `smartObject` and `fillLayer` only. */\n  edit?: DocumentOperationLayerEdit;\n  move?: MoveDetails;\n  add?: LayerPosition;\n  delete: DeleteDetails;\n  /** The layer ID. */\n  id: number;\n  /** The layer index. Required when deleting a layer, otherwise not used. */\n  index?: number;\n  /** A tree of layer objects representing the PSD layer structure extracted from the PSD document. */\n  children?: ChildrenLayerDetails[];\n  type?: LayerType;\n  input?: StorageDetails;\n  name?: string;\n  /** is the layer locked */\n  locked?: boolean;\n  /** is the layer visible */\n  visible?: boolean;\n  adjustments?: AdjustmentDetails;\n  mask?: MaskDetails;\n  bounds?: Bounds;\n  smartObject?: DocumentOperationLayerSmartObject;\n  fill?: FillDetails;\n  text?: DocumentOperationLayerText;\n  blendOptions?: DocumentOperationLayerBlendOptions;\n  horizontalAlign?: HorizontalAlignType;\n  verticalAlign?: VerticalAlignType;\n  /** Indicates if the pixels need to proportionally fill into the entire canvas of the document. */\n  fillToCanvas?: boolean;\n}\n\nexport interface SmartObjectLayer {\n  add?: LayerPosition;\n  /** the layer id */\n  id?: number;\n  name?: string;\n  /** is the layer locked */\n  locked?: boolean;\n  /** is the layer visible */\n  visible?: boolean;\n  input: StorageDetails;\n  bounds?: Bounds;\n}\n\nexport type TextOptionsLayerText = TextDetails & unknown;\n\nexport interface TextOptionsLayer {\n  /** The name of the layer you want to insert. Use either ID or name. */\n  name?: string;\n  /** The ID of the layer you want to insert. Use either ID or name. */\n  id?: number;\n  bounds?: Bounds;\n  /** Is the layer editable. */\n  locked?: boolean;\n  /** Is the layer visible. */\n  visible?: boolean;\n  text?: TextOptionsLayerText;\n}\n\n/**\n * The rendition links.\n */\nexport interface RenditionLinks {\n  /** Array of rendition objects. */\n  renditions?: RenditionLinkDetails[];\n}\n\n/**\n * Action to take if there are one or more missing fonts in the document. Using `fail` - the job will not succeed and the status will be set to `failed` with the details of the error provided in the `details` section in the status. Using `useDefault` - the job will succeed, however all the missing fonts will use the font: ArialMT.\n */\nexport type ManageMissingFonts = (typeof ManageMissingFonts)[keyof typeof ManageMissingFonts];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ManageMissingFonts = {\n  useDefault: 'useDefault',\n  fail: 'fail',\n} as const;\n\nexport interface MaskFormat {\n  format?: MaskFormatType;\n}\n\nexport interface MaskDetails {\n  input?: StorageDetails;\n  /** Indicates if this is a clipped layer */\n  clip?: boolean;\n  /** Indicates a mask is enabled on that layer or not */\n  enabled?: boolean;\n  /** Indicates a mask is linked to the layer or not */\n  linked?: boolean;\n  offset?: Offset;\n}\n\n/**\n * The document's bit/channel depth.\n */\nexport type ChannelModeType = (typeof ChannelModeType)[keyof typeof ChannelModeType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ChannelModeType = {\n  bitmap: 'bitmap',\n  greyscale: 'greyscale',\n  indexed: 'indexed',\n  rgb: 'rgb',\n  cmyk: 'cmyk',\n  hsl: 'hsl',\n  hsb: 'hsb',\n  multichannel: 'multichannel',\n  duotone: 'duotone',\n  lab: 'lab',\n  xyz: 'xyz',\n} as const;\n\nexport interface MoveDetails {\n  moveChildren?: boolean;\n  insertAbove?: LayerReference;\n  insertBelow?: LayerReference;\n  insertInto?: LayerReference;\n  insertTop?: boolean;\n  insertBottom?: boolean;\n}\n\nexport type DocumentManifestOptionsThumbnails = Thumbnails & unknown;\n\n/**\n * Available options to apply to all input files.\n */\nexport interface DocumentManifestOptions {\n  thumbnails?: DocumentManifestOptionsThumbnails;\n}\n\nexport type DocumentCreateOptionsManageMissingFonts = ManageMissingFonts & unknown;\n\nexport interface DocumentCreateOptions {\n  manageMissingFonts?: DocumentCreateOptionsManageMissingFonts;\n  /** The PostScript name of the font to be used as the global default for the document. If this font is also missing, the option specified in `manageMissingFonts` will take effect. */\n  globalFont?: string;\n  /** array of custom fonts needed in this document */\n  fonts?: StorageDetails[];\n  document: DocumentDetails;\n  /** Array of layers to be created in the document. */\n  layers?: DocumentCreateLayer[];\n}\n\nexport type DocumentOperationOptionsManageMissingFonts = ManageMissingFonts & unknown;\n\nexport interface DocumentOperationOptions {\n  manageMissingFonts?: DocumentOperationOptionsManageMissingFonts;\n  /** The PostScript name of the font to be used as the global default. If this font is also missing, the option specified in `manageMissingFonts` will take effect */\n  globalFont?: string;\n  /** array of custom fonts needed in this document */\n  fonts?: StorageDetails[];\n  document?: OperationDocument;\n  /** Array of layers to be created in the document. */\n  layers?: DocumentOperationLayer[];\n}\n\nexport interface SmartObjectOptions {\n  /** Array of Smart Object layers to be created in the document */\n  layers: SmartObjectLayer[];\n}\n\nexport interface ActionOptions {\n  /** Array of Photoshop Actions to play. */\n  actions: Action[];\n  /** array of custom pattern preset to be used in Photoshop Actions */\n  patterns?: StorageDetails[];\n  /** array of custom fonts needed in this document */\n  fonts?: StorageDetails[];\n  /** array of custom brushes needed in this document */\n  brushes?: StorageDetails[];\n}\n\nexport type ActionJsonOptionsActionJSONItem = { [key: string]: unknown };\n\nexport interface ActionJsonOptions {\n  /** Array of Photoshop JSON-formatted Actions to play. */\n  actionJSON: ActionJsonOptionsActionJSONItem[];\n  /** array of custom pattern preset to be used in Photoshop Actions */\n  patterns?: StorageDetails[];\n  /** array of custom fonts needed in this document */\n  fonts?: StorageDetails[];\n  /** array of custom brushes needed in this document */\n  brushes?: StorageDetails[];\n  /**\n   * Array of references to additional images, which can be referred by actionJson commands.\n   * @minItems 1\n   */\n  additionalImages?: StorageDetails[];\n}\n\n/**\n * This block is needed only if you want to specify which action to convert from the ActionSet.\n */\nexport interface ActionJsonCreateOptions {\n  /**\n   * Array of action objects.\n   * @minItems 1\n   * @maxItems 1\n   */\n  actions: ActionDetails[];\n}\n\nexport type CropOptionsUnit = UnitType & unknown;\n\nexport interface CropOptions {\n  unit: CropOptionsUnit;\n  /** The width to be added as padding. */\n  width: number;\n  /** The height to be added as padding. */\n  height: number;\n}\n\nexport type DepthBlurDetailsFocalSelector = FocalSelector & unknown;\n\nexport interface DepthBlurDetails {\n  /**\n   * The distance of the point to be in focus. 0 would be the nearest point, 100 would be the furthest point.\n   * @minimum 0\n   * @maximum 100\n   */\n  focalDistance?: number;\n  /**\n   * The range of the focal point.\n   * @minimum 0\n   * @maximum 100\n   */\n  focalRange?: number;\n  focalSelector?: DepthBlurDetailsFocalSelector;\n  /** If enabled uses select subject to automatically select the prominent subject for focus. Also would override focalDistance. */\n  focusSubject?: boolean;\n  /**\n   * The amount of blur to apply.\n   * @minimum 0\n   * @maximum 100\n   */\n  blurStrength?: number;\n  /**\n   * The amount of haze to apply.\n   * @minimum 0\n   * @maximum 100\n   */\n  haze?: number;\n  /**\n   * The value of the temperature to apply. -50 would be coldest and 50 would be the warmest setting.\n   * @minimum -50\n   * @maximum 50\n   */\n  temp?: number;\n  /**\n   * The amount of the tint to apply.\n   * @minimum -50\n   * @maximum 50\n   */\n  tint?: number;\n  /**\n   * The amount of the saturation to apply. -50 implies fully unsaturated colors and 50 will fully saturate the colors.\n   * @minimum -50\n   * @maximum 50\n   */\n  saturation?: number;\n  /**\n   * The amount of the brightness to apply.\n   * @minimum -50\n   * @maximum 50\n   */\n  brightness?: number;\n  /**\n   * The amount of the graining to add to the image.\n   * @minimum 0\n   * @maximum 100\n   */\n  grain?: number;\n}\n\nexport type TextOptionsManageMissingFonts = ManageMissingFonts & unknown;\n\nexport interface TextOptions {\n  manageMissingFonts?: TextOptionsManageMissingFonts;\n  /** The PostScript name of the font to be used as the global default. If this font is also missing, the option specified in `manageMissingFonts` will take effect */\n  globalFont?: string;\n  /**\n   * Array of text layer objects you wish to act upon.\n   * @minItems 1\n   */\n  layers: TextOptionsLayer[];\n  /** Array of custom fonts needed in this document. */\n  fonts?: StorageDetails[];\n}\n\nexport interface ArtboardDetails {\n  /** An array of hashes describing the input files to edit. Each input object will be either 'external', 'adobe', 'azure' or 'dropbox'. */\n  artboard: StorageDetails[];\n}\n\n/**\n * The text orientation.\n */\nexport type OrientationType = (typeof OrientationType)[keyof typeof OrientationType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const OrientationType = {\n  horizontal: 'horizontal',\n  vertical: 'vertical',\n} as const;\n\nexport interface ManifestJobStatusOutputDetails {\n  /** the original input href */\n  input?: string;\n  /** Created timestamp of the job (YYYY-DD-MMThh:mm:ss.mmmmmZ) */\n  created?: string;\n  /** Modified timestamp of the job (YYYY-DD-MMThh:mm:ss.mmmmmZ) */\n  modified?: string;\n  status?: JobStatus;\n  document?: ManifestJobDocumentDetails;\n  /** A tree of layer objects representing the PSD layer structure extracted from the PSD document. */\n  layers?: LayerDetails[];\n}\n\nexport interface JobOutputDetails {\n  /** the original input href */\n  input?: string;\n  /** Created timestamp of the job (YYYY-DD-MMThh:mm:ss.mmmmmZ) */\n  created?: string;\n  /** Modified timestamp of the job (YYYY-DD-MMThh:mm:ss.mmmmmZ) */\n  modified?: string;\n  status?: JobOutputStatus;\n  _links?: RenditionLinks;\n}\n\n/**\n * The name of the color profile.\n */\nexport type ColorProfileType = (typeof ColorProfileType)[keyof typeof ColorProfileType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ColorProfileType = {\n  'Adobe_RGB_(1998)': 'Adobe RGB (1998)',\n  Apple_RGB: 'Apple RGB',\n  ColorMatch_RGB: 'ColorMatch RGB',\n  'sRGB_IEC61966-21': 'sRGB IEC61966-2.1',\n  'Dot_Gain_10%': 'Dot Gain 10%',\n  'Dot_Gain_15%': 'Dot Gain 15%',\n  'Dot_Gain_20%': 'Dot Gain 20%',\n  'Dot_Gain_25%': 'Dot Gain 25%',\n  'Dot_Gain_30%': 'Dot Gain 30%',\n  Gray_Gamma_18: 'Gray Gamma 1.8',\n  Gray_Gamma_22: 'Gray Gamma 2.2',\n} as const;\n\n/**\n * Self link.\n */\nexport interface SelfLink {\n  /** Job Status URL. */\n  href?: string;\n}\n\n/**\n * An object describing the attributes specific to creating or editing a smart object. `SmartObject` properties operate on the input smart object file. When creating a linked smart object, this is a required. When creating an embedded smart object, it is optional.\n */\nexport interface SmartObject {\n  /** Indicates if this Smart Object is linked. Currently we support Embedded Smart Object only which means \"linked = false\". */\n  linked?: boolean;\n}\n\n/**\n * Job status.\n */\nexport type JobStatus = (typeof JobStatus)[keyof typeof JobStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const JobStatus = {\n  pending: 'pending',\n  running: 'running',\n  succeeded: 'succeeded',\n  failed: 'failed',\n} as const;\n\n/**\n * The child job status. Using `pending` - the request has been accepted and is waiting to start. Using `running` - the child job is running. Using `uploading` - files have been generated and are uploading to destination. Using `succeeded` - the child job has succeeded. Using `failed` - the child job has failed.\n */\nexport type JobOutputStatus = (typeof JobOutputStatus)[keyof typeof JobOutputStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const JobOutputStatus = {\n  pending: 'pending',\n  running: 'running',\n  uploading: 'uploading',\n  succeeded: 'succeeded',\n  failed: 'failed',\n} as const;\n\n/**\n * Storage platforms supported.\n */\nexport type StorageType = (typeof StorageType)[keyof typeof StorageType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const StorageType = {\n  external: 'external',\n  azure: 'azure',\n  dropbox: 'dropbox',\n} as const;\n\nexport type TextDetailsAntiAlias = AntiAliasType & unknown;\n\nexport type TextDetailsEastAsianFeatures = EastAsianFeatures & unknown;\n\nexport type TextDetailsTextType = TextType & unknown;\n\n/**\n * Supported text layer attributes.\n */\nexport interface TextDetails {\n  /** The content of the text layer. */\n  content?: string;\n  orientation?: OrientationType;\n  /**\n   * The text's rotation in angle.\n   * @minimum -180\n   * @maximum 180\n   */\n  rotate?: number;\n  antiAlias?: TextDetailsAntiAlias;\n  eastAsianFeatures?: TextDetailsEastAsianFeatures;\n  /**\n   * Array of character style objects. Any of the `characterStyles` property is required.\n   * @minItems 1\n   */\n  characterStyles?: CharacterStyleDetails[];\n  /**\n   * Array of paragraph style objects. Any of the `paragraphStyles` properties is required.\n   * @minItems 1\n   */\n  paragraphStyles?: ParagraphStyleDetails[];\n  textType?: TextDetailsTextType;\n}\n\n/**\n * Base line direction for text style.\n */\nexport type TextStyleType = (typeof TextStyleType)[keyof typeof TextStyleType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const TextStyleType = {\n  cross: 'cross',\n  rotated: 'rotated',\n  withSream: 'withSream',\n} as const;\n\n/**\n * The type of text's contents, point or paragraph.\n */\nexport type TextType = (typeof TextType)[keyof typeof TextType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const TextType = {\n  point: 'point',\n  paragraph: 'paragraph',\n} as const;\n\nexport type ThumbnailsType = ThumbnailType & unknown;\n\n/**\n * Include pre-signed GET URLs to small preview thumbnails for any renderable layer.\n */\nexport interface Thumbnails {\n  type?: ThumbnailsType;\n}\n\nexport interface Trim {\n  basedOn: BasedOnType;\n}\n\n/**\n * Use this if the renditions needs to be of Canvas size. Using `True` trims the renditions to Canvas size, while `False` makes the renditions Layer Size.\n */\nexport type TrimToCanvasType = boolean;\n\n/**\n * The desired image format. Using `image/vnd.adobe.photoshop` - create a new PSD file. Using `image/jpeg`, `image/png`, `image/tiff` - create a new JPEG, PNG or TIFF rendition. Certain image modes (RGB, CMYK, greyscale, etc.) must be converted to another image mode before a rendition can be created. With TIFF requested, Multichannel and Duotone will convert to RGB. With PNG requested, CMYK, HSL, HSB, Multichannel, Duotone, Lab and XYZ will convert to RGB.\n */\nexport type ImageFormatType = (typeof ImageFormatType)[keyof typeof ImageFormatType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ImageFormatType = {\n  'image/vndadobephotoshop': 'image/vnd.adobe.photoshop',\n  'image/jpeg': 'image/jpeg',\n  'image/png': 'image/png',\n  'image/tiff': 'image/tiff',\n  vndadobephotoshop: 'vnd.adobe.photoshop',\n} as const;\n\n/**\n * The layer type. Using `layer` - a pixel layer. Using `textLayer` - a text layer. Using `adjustmentLayer` - an adjustment layer. Using `layerSection` - a grouping layer. Using `smartObject` - a smart object. Using `backgroundLayer` - a background layer. Using `fillLayer` - a fill layer.\n */\nexport type LayerType = (typeof LayerType)[keyof typeof LayerType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const LayerType = {\n  layer: 'layer',\n  textLayer: 'textLayer',\n  adjustmentLayer: 'adjustmentLayer',\n  smartObject: 'smartObject',\n  fillLayer: 'fillLayer',\n  backgroundLayer: 'backgroundLayer',\n  layerSection: 'layerSection',\n} as const;\n\n/**\n * Desired image format.\n */\nexport type ThumbnailType = (typeof ThumbnailType)[keyof typeof ThumbnailType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ThumbnailType = {\n  'image/jpeg': 'image/jpeg',\n  'image/png': 'image/png',\n  'image/tiff': 'image/tiff',\n} as const;\n\n/**\n * Unit for width and height.\n */\nexport type UnitType = (typeof UnitType)[keyof typeof UnitType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const UnitType = {\n  Pixels: 'Pixels',\n  Percent: 'Percent',\n} as const;\n\n/**\n * Indicates the relative horizontal position of the layer with respect to the canvas of the document.\n */\nexport type HorizontalAlignType = (typeof HorizontalAlignType)[keyof typeof HorizontalAlignType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const HorizontalAlignType = {\n  left: 'left',\n  center: 'center',\n  right: 'right',\n} as const;\n\n/**\n * Indicates the relative vertical position of the layer with respect to the canvas of the document.\n */\nexport type VerticalAlignType = (typeof VerticalAlignType)[keyof typeof VerticalAlignType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const VerticalAlignType = {\n  top: 'top',\n  center: 'center',\n  bottom: 'bottom',\n} as const;\n\nexport interface UrlResource {\n  /** The URL of the resource. Only these listed domains are accepted in the request:  \n  <ul><li><code>amazonaws.com</code></li><li><code>windows.net</code></li><li><code>dropboxusercontent.com</code></li><li><code>assets.frame.io</code></li><li><code>storage.googleapis.com</code></li></ul> */\n  url: string;\n}\n\nexport interface RemoveBgInputImage {\n  /** The source path for the input image. Dimensions of the image should not be greater than 6000px X 6000px. The image media type must be `image/jpeg`, `image/png`, `image/webp`, or `image/tiff`. */\n  source: UrlResource;\n}\n\n/**\n * The mode of background removal.\n */\nexport type RemoveBgMode = (typeof RemoveBgMode)[keyof typeof RemoveBgMode];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const RemoveBgMode = {\n  cutout: 'cutout',\n  mask: 'mask',\n  psd: 'psd',\n} as const;\n\n/**\n * The media type of the output image. By default this will match the input source file format.\n */\nexport type RemoveBgOutputImageMediaType =\n  (typeof RemoveBgOutputImageMediaType)[keyof typeof RemoveBgOutputImageMediaType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const RemoveBgOutputImageMediaType = {\n  'image/jpeg': 'image/jpeg',\n  'image/png': 'image/png',\n  'image/webp': 'image/webp',\n  'image/vndadobephotoshop': 'image/vnd.adobe.photoshop',\n} as const;\n\nexport interface RemoveBgOutputImageOptions {\n  mediaType?: RemoveBgOutputImageMediaType;\n}\n\nexport interface RemoveBgColor {\n  /**\n   * The red value of the color.\n   * @minimum 0\n   * @maximum 255\n   */\n  red: number;\n  /**\n   * The green value of the color.\n   * @minimum 0\n   * @maximum 255\n   */\n  green: number;\n  /**\n   * The blue value of the color.\n   * @minimum 0\n   * @maximum 255\n   */\n  blue: number;\n  /**\n   * The transparency value. 0 is fully transparent and 1 is fully opaque.\n   * @minimum 0\n   * @maximum 1\n   */\n  alpha: number;\n}\n\nexport interface RemoveBackgroundV2Request {\n  /** The image to be processed. */\n  image: RemoveBgInputImage;\n  mode?: RemoveBgMode;\n  /** The options for the output image. */\n  output?: RemoveBgOutputImageOptions;\n  /** If true, the image returned is cropped to the cutout border. Transparent pixels are removed. */\n  trim?: boolean;\n  /** The background color. */\n  backgroundColor?: RemoveBgColor;\n  /**\n   * If the value is greater than 0, automatically removes colored reflections that have been left on the main subject by the background.\n   * @minimum 0\n   * @maximum 1\n   */\n  colorDecontamination?: number;\n}\n\nexport interface JobLinkResponse {\n  /** The job ID for the asynchronous job. */\n  jobId: string;\n  /** The URL to check the status of the asynchronous job. */\n  statusUrl: string;\n}\n\nexport interface JobStatusPollPayload {\n  status: JobStatus;\n  /** The job ID. */\n  jobId: string;\n}\n\nexport type JobStatusSucceededResponseStatus =\n  (typeof JobStatusSucceededResponseStatus)[keyof typeof JobStatusSucceededResponseStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const JobStatusSucceededResponseStatus = {\n  succeeded: 'succeeded',\n} as const;\n\nexport type JobStatusSucceededResponseResultOutputsItemDestination = {\n  /** The output URL */\n  url?: string;\n};\n\nexport type JobStatusSucceededResponseResultOutputsItem = {\n  destination?: JobStatusSucceededResponseResultOutputsItemDestination;\n  /** The media type of the output */\n  mediaType?: string;\n};\n\nexport type JobStatusSucceededResponseResult = {\n  outputs?: JobStatusSucceededResponseResultOutputsItem[];\n};\n\nexport interface JobStatusSucceededResponse {\n  status: JobStatusSucceededResponseStatus;\n  /** The job ID. */\n  jobId: string;\n  result: JobStatusSucceededResponseResult;\n}\n\nexport interface FillMaskedAreasInputImage {\n  /** The source of the input image. Dimensions of the image should not be greater than (4000px X 4000px). */\n  source: UrlResource;\n}\n\nexport interface FillMaskedAreasRequest {\n  /** The image to be processed. */\n  image: FillMaskedAreasInputImage;\n  /** The areas of the image represented by this list of masks will be inpainted. */\n  masks: FillMaskedAreasInputImage[];\n}\n\n/**\n * The media type of the input image.\n */\nexport type MaskBodyPartsImageMediaType =\n  (typeof MaskBodyPartsImageMediaType)[keyof typeof MaskBodyPartsImageMediaType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MaskBodyPartsImageMediaType = {\n  'image/jpeg': 'image/jpeg',\n  'image/png': 'image/png',\n} as const;\n\nexport interface MaskBodyPartsInputImage {\n  /** The source of the input image. Dimensions of the image should not be greater than (4000px X 4000px). */\n  source: UrlResource;\n}\n\n/**\n * The media type of the mask.\n */\nexport type MaskBodyPartsMaskMediaType =\n  (typeof MaskBodyPartsMaskMediaType)[keyof typeof MaskBodyPartsMaskMediaType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MaskBodyPartsMaskMediaType = {\n  'image/png': 'image/png',\n} as const;\n\nexport interface MaskBodyPartsInputMask {\n  /** The URL of the mask. Dimensions of the mask should not be greater than (4000px X 4000px). */\n  source: UrlResource;\n}\n\nexport interface MaskBodyPartsRequest {\n  /** The input image. */\n  image: MaskBodyPartsInputImage;\n  /** The mask of the subject in the input image. */\n  mask: MaskBodyPartsInputMask;\n}\n\n/**\n * The media type of the input image.\n */\nexport type MaskObjectsInputImageMediaType =\n  (typeof MaskObjectsInputImageMediaType)[keyof typeof MaskObjectsInputImageMediaType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MaskObjectsInputImageMediaType = {\n  'image/jpeg': 'image/jpeg',\n  'image/png': 'image/png',\n} as const;\n\nexport interface MaskObjectsInputImage {\n  /** The source of the input image. Dimensions of the image should not be greater than (4000px X 4000px). */\n  source: UrlResource;\n}\n\nexport interface MaskObjectsRequest {\n  /** The input image. */\n  image: MaskObjectsInputImage;\n}\n\n/**\n * The media type of the input image.\n */\nexport type RefineMaskImageMediaType =\n  (typeof RefineMaskImageMediaType)[keyof typeof RefineMaskImageMediaType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const RefineMaskImageMediaType = {\n  'image/jpeg': 'image/jpeg',\n  'image/png': 'image/png',\n} as const;\n\nexport interface RefineMaskInputImage {\n  /** The source of the input image. Dimensions of the image should not be greater than (4000px X 4000px). */\n  source: UrlResource;\n}\n\nexport interface RefineMaskRequest {\n  /** The input image. */\n  image: RefineMaskInputImage;\n  /** The mask in the input image that needs to be refined. */\n  mask: RefineMaskInputImage;\n  /** When `true`, this returns an RGBA image where the masked area has been further refined with color decontamination. A `false` value (default) means that the output will simply be the refined mask. */\n  colorDecontamination?: boolean;\n}\n\n/**\n * Media type of the output image.\n */\nexport type OutputImageDetailsMediaType =\n  (typeof OutputImageDetailsMediaType)[keyof typeof OutputImageDetailsMediaType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const OutputImageDetailsMediaType = {\n  'image/jpeg': 'image/jpeg',\n  'image/png': 'image/png',\n} as const;\n\nexport interface OutputImageDetails {\n  /** Details of the location where the output image is located. */\n  destination: UrlResource;\n  /** Media type of the output image. */\n  mediaType: OutputImageDetailsMediaType;\n}\n\nexport interface FillMaskedAreasJobApiResponse {\n  status: JobStatus;\n  /** The job ID. */\n  jobId: string;\n  /** The output image. */\n  image: OutputImageDetails;\n}\n\nexport interface ImageBoundingBox {\n  /** The x coordinate of the upper-left corner of the bounding box. The origin (0,0) is at the upper-left corner of the image. */\n  x: number;\n  /** The y coordinate of the upper-left corner of the bounding box. The origin (0,0) is at the upper-left corner of the image. */\n  y: number;\n  /** The width of the bounding box, starting from the x coordinate. */\n  width: number;\n  /** The height of the bounding box, starting from the y coordinate. */\n  height: number;\n}\n\n/**\n * Media type of the mask of the identified body part.\n */\nexport type MaskBodyPartsOutputImageMediaType =\n  (typeof MaskBodyPartsOutputImageMediaType)[keyof typeof MaskBodyPartsOutputImageMediaType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MaskBodyPartsOutputImageMediaType = {\n  'image/png': 'image/png',\n} as const;\n\nexport interface MaskBodyPartsOutputImage {\n  /** The label of the identified body part. */\n  label: string;\n  /** The bounding box of the identified body part. */\n  boundingBox: ImageBoundingBox;\n  /** The probability or confidence score of the match. */\n  score: number;\n  /** Details of the location where the mask of the identified body part is located. */\n  destination: UrlResource;\n  /** Media type of the mask of the identified body part. */\n  mediaType: MaskBodyPartsOutputImageMediaType;\n}\n\nexport interface MaskBodyPartsJobApiResponse {\n  status: JobStatus;\n  /** The job ID. */\n  jobId: string;\n  /** An array of output image masks. */\n  masks: MaskBodyPartsOutputImage[];\n}\n\n/**\n * Media type of the mask.\n */\nexport type MaskObjectsOutputImageMediaType =\n  (typeof MaskObjectsOutputImageMediaType)[keyof typeof MaskObjectsOutputImageMediaType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MaskObjectsOutputImageMediaType = {\n  'image/png': 'image/png',\n} as const;\n\nexport interface MaskObjectsOutputImage {\n  /** The label of the identified object or area of interest. */\n  label: string;\n  /** The bounding box of the object or area of interest. */\n  boundingBox: ImageBoundingBox;\n  /** The probability or confidence score of the match. */\n  score: number;\n  /** Details of the location where the mask is located. */\n  destination: UrlResource;\n  /** Media type of the mask. */\n  mediaType: MaskObjectsOutputImageMediaType;\n}\n\nexport interface MaskObjectsJobApiResponse {\n  status: JobStatus;\n  /** The job ID. */\n  jobId: string;\n  /** List of masks representing foreground objects. */\n  semanticMasks: MaskObjectsOutputImage[];\n  /** List of masks representing background regions. */\n  backgroundMasks: MaskObjectsOutputImage[];\n}\n\n/**\n * Media type of the refined mask or image.\n */\nexport type RefineMaskOutputImageMediaType =\n  (typeof RefineMaskOutputImageMediaType)[keyof typeof RefineMaskOutputImageMediaType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const RefineMaskOutputImageMediaType = {\n  'image/jpeg': 'image/jpeg',\n  'image/png': 'image/png',\n} as const;\n\nexport interface RefineMaskOutputImage {\n  /** Details of the location where the refined mask or image is located. */\n  destination: UrlResource;\n  /** Media type of the refined mask or image. */\n  mediaType: RefineMaskOutputImageMediaType;\n  /** The bounding box of the refined mask or image. */\n  boundingBox: ImageBoundingBox;\n}\n\nexport interface RefineMaskJobApiResponse {\n  status: JobStatus;\n  /** The job ID. */\n  jobId: string;\n  /** The refined mask. This will only be attached to the response when mask is specified as an input. Only applicable when colorDecontamination is false. */\n  mask?: RefineMaskOutputImage;\n  /** The image with color decontamination. This will only be attached to the response when mask is specified as an input. Only applicable when colorDecontamination is true. */\n  image?: RefineMaskOutputImage;\n}\n\n/**\n * The results of the job if completed.\n */\nexport type JobStatusResponseResults = { [key: string]: unknown };\n\nexport interface JobStatusResponse {\n  status: JobStatus;\n  /** The results of the job if completed. */\n  results: JobStatusResponseResults;\n}\n\n/**\n * The status of the job.\n */\nexport type JobStatusRunningStatus =\n  (typeof JobStatusRunningStatus)[keyof typeof JobStatusRunningStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const JobStatusRunningStatus = {\n  running: 'running',\n} as const;\n\n/**\n * Response when a job is currently being processed. The job has started but is not yet complete.\n */\nexport interface JobStatusRunning {\n  /** The job ID. */\n  jobId: string;\n  /** The status of the job. */\n  status: JobStatusRunningStatus;\n}\n\n/**\n * The status of the job.\n */\nexport type JobStatusSucceededStatus =\n  (typeof JobStatusSucceededStatus)[keyof typeof JobStatusSucceededStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const JobStatusSucceededStatus = {\n  succeeded: 'succeeded',\n} as const;\n\n/**\n * Response when a job has completed successfully. In addition to the jobId and status, the response includes the results of the job which vary depending on the operation.\n */\nexport interface JobStatusSucceeded {\n  /** The job ID. */\n  jobId: string;\n  /** The status of the job. */\n  status: JobStatusSucceededStatus;\n}\n\n/**\n * The status of the job.\n */\nexport type JobStatusFailedStatus =\n  (typeof JobStatusFailedStatus)[keyof typeof JobStatusFailedStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const JobStatusFailedStatus = {\n  failed: 'failed',\n} as const;\n\n/**\n * Response when a job has failed during processing. Contains error details explaining what went wrong.\n */\nexport interface JobStatusFailed {\n  /** The job ID. */\n  jobId: string;\n  /** The status of the job. */\n  status: JobStatusFailedStatus;\n  /** The error code. */\n  error_code: string;\n  /** The error message. */\n  message: string;\n}\n\n/**\n * The status of the job.\n */\nexport type JobStatusNotStartedStatus =\n  (typeof JobStatusNotStartedStatus)[keyof typeof JobStatusNotStartedStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const JobStatusNotStartedStatus = {\n  not_started: 'not_started',\n} as const;\n\n/**\n * Response when a job has been created but processing has not yet begun. This status indicates the job is queued and waiting to start.\n */\nexport interface JobStatusNotStarted {\n  /** The job ID. */\n  jobId: string;\n  /** The status of the job. */\n  status: JobStatusNotStartedStatus;\n}\n\nexport type SenseiJobStatusPathParameters = {\n  jobId: string;\n};\nexport type FacadeJobStatusPathParameters = {\n  jobId: string;\n};\nexport type FacadeJobStatus200 = JobStatusPollPayload | JobStatusSucceededResponse;\n\nexport type PsJobStatusPathParameters = {\n  jobId: string;\n};\nexport type GetJobStatusPathParameters = {\n  jobId: string;\n};\n/**\n * The schema of a 200 response varies depending on the status of the job. A job with a `succeeded` status will include the results in the response. Result objects vary depending on the operation.\n */\nexport type GetJobStatus200 =\n  | JobStatusNotStarted\n  | JobStatusRunning\n  | JobStatusSucceeded\n  | JobStatusFailed;\n","export * from './photoshop-client';\nexport * from './photoshop-client.schemas';\n","import type { PhotoshopClient } from '..';\nimport { PHOTOSHOP_AXIOS_INSTANCE } from '../mutator/custom-photoshop-axios-instance';\nimport type { AxiosRequestConfig } from 'axios';\n\n/**\n * Polling utilities for async Photoshop jobs\n */\n\nexport interface PollPhotoshopJobOptions<TResult = unknown> {\n  /**\n   * Authentication and other fetch options\n   */\n  axiosRequestConfig?: AxiosRequestConfig;\n  /**\n   * Interval between polling attempts in milliseconds\n   * @default 2000\n   */\n  intervalMs?: number;\n  /**\n   * Maximum number of polling attempts\n   * @default 60\n   */\n  maxAttempts?: number;\n  /**\n   * Callback for progress updates\n   */\n  onProgress?: (status: PhotoshopJobStatus<TResult>) => void;\n  /**\n   * Custom timeout in milliseconds (overrides maxAttempts)\n   */\n  timeoutMs?: number;\n}\n\nexport interface PhotoshopJobStatus<TResult = unknown> {\n  jobId?: string;\n  status: 'not_started' | 'running' | 'succeeded' | 'failed';\n  created?: string;\n  modified?: string;\n  error_code?: string;\n  message?: string;\n  result?: TResult;\n}\n\nexport class PollingError extends Error {\n  constructor(\n    message: string,\n    public readonly status?: string,\n    public readonly cause?: unknown\n  ) {\n    super(message);\n    this.name = 'PollingError';\n  }\n}\n\nexport class PollingTimeoutError extends PollingError {\n  constructor(message: string, status?: string) {\n    super(message, status);\n    this.name = 'PollingTimeoutError';\n  }\n}\n\n/**\n * Polls a Photoshop async job until completion\n *\n * @param jobResult - The job result containing a jobId from the initial async response\n * @param options - Polling configuration options\n * @returns The final job result when succeeded, with type automatically inferred from the job response\n * @throws {PollingTimeoutError} If max attempts or timeout is reached\n * @throws {PollingError} If the job fails\n *\n * @example\n * ```typescript\n * // Type is automatically inferred as MaskObjectsJobApiResponse\n * const result = await pollPhotoshopJob(maskJob, { axiosRequestConfig: { headers } });\n *\n * // Type is automatically inferred as document result type\n * const docResult = await pollPhotoshopJob(docJob, { axiosRequestConfig: { headers } });\n * ```\n */\nexport async function pollPhotoshopJob<TResult>(\n  jobResult: { statusUrl: string },\n  options: PollPhotoshopJobOptions<TResult> = {}\n): Promise<TResult> {\n  const { statusUrl } = jobResult;\n  const {\n    axiosRequestConfig = {},\n    intervalMs = 2000,\n    maxAttempts = 60,\n    onProgress,\n    timeoutMs,\n  } = options;\n\n  const startTime = Date.now();\n  const effectiveTimeout = timeoutMs ?? maxAttempts * intervalMs;\n  let attempts = 0;\n\n  while (true) {\n    attempts++;\n\n    // Check timeout\n    const elapsed = Date.now() - startTime;\n    if (elapsed >= effectiveTimeout) {\n      throw new PollingTimeoutError(`Polling timeout after ${elapsed}ms (${attempts} attempts)`);\n    }\n\n    try {\n      const response = await PHOTOSHOP_AXIOS_INSTANCE.get(statusUrl, axiosRequestConfig);\n      const status = response.data as PhotoshopJobStatus<TResult>;\n\n      // Call progress callback if provided\n      if (onProgress) {\n        onProgress(status);\n      }\n\n      // Check terminal states\n      if (status.status === 'succeeded') {\n        // For succeeded jobs, the entire response is the result\n        return status as unknown as TResult;\n      }\n\n      if (status.status === 'failed') {\n        throw new PollingError(\n          `Job failed: ${status.error_code || 'unknown'} - ${status.message || 'No message'}`,\n          JSON.stringify(status)\n        );\n      }\n\n      // Job still running (not_started or running), wait before next poll\n      await sleep(intervalMs);\n    } catch (error) {\n      // Re-throw our custom errors\n      if (error instanceof PollingError) {\n        throw error;\n      }\n\n      // Wrap other errors\n      throw new PollingError(\n        `Failed to poll job status: ${error instanceof Error ? error.message : String(error)}`,\n        undefined,\n        error\n      );\n    }\n  }\n}\n\n/**\n * Polls a mask objects job until completion\n */\nexport async function pollMaskObjectsJob(\n  jobResult: { statusUrl: string },\n  options: PollPhotoshopJobOptions<PhotoshopClient.MaskObjectsJobApiResponse> = {}\n): Promise<PhotoshopClient.MaskObjectsJobApiResponse> {\n  return pollPhotoshopJob<PhotoshopClient.MaskObjectsJobApiResponse>(jobResult, options);\n}\n\n/**\n * Polls a mask body parts job until completion\n */\nexport async function pollMaskBodyPartsJob(\n  jobResult: { statusUrl: string },\n  options: PollPhotoshopJobOptions<PhotoshopClient.MaskBodyPartsJobApiResponse> = {}\n): Promise<PhotoshopClient.MaskBodyPartsJobApiResponse> {\n  return pollPhotoshopJob<PhotoshopClient.MaskBodyPartsJobApiResponse>(jobResult, options);\n}\n\n/**\n * Polls a refine mask job until completion\n */\nexport async function pollRefineMaskJob(\n  jobResult: { statusUrl: string },\n  options: PollPhotoshopJobOptions<PhotoshopClient.RefineMaskJobApiResponse> = {}\n): Promise<PhotoshopClient.RefineMaskJobApiResponse> {\n  return pollPhotoshopJob<PhotoshopClient.RefineMaskJobApiResponse>(jobResult, options);\n}\n\n/**\n * Polls a fill masked areas job until completion\n */\nexport async function pollFillMaskedAreasJob(\n  jobResult: { statusUrl: string },\n  options: PollPhotoshopJobOptions<PhotoshopClient.FillMaskedAreasJobApiResponse> = {}\n): Promise<PhotoshopClient.FillMaskedAreasJobApiResponse> {\n  return pollPhotoshopJob<PhotoshopClient.FillMaskedAreasJobApiResponse>(jobResult, options);\n}\n\n/**\n * Polls a remove background job until completion\n */\nexport async function pollRemoveBackgroundJob(\n  jobResult: { statusUrl: string },\n  options: PollPhotoshopJobOptions<PhotoshopClient.SenseiJobApiResponse> = {}\n): Promise<PhotoshopClient.SenseiJobApiResponse> {\n  return pollPhotoshopJob<PhotoshopClient.SenseiJobApiResponse>(jobResult, options);\n}\n\n/**\n * Polls a document manifest job until completion\n */\nexport async function pollDocumentManifestJob(\n  jobResult: { statusUrl: string },\n  options: PollPhotoshopJobOptions<PhotoshopClient.ManifestJobApiResponse> = {}\n): Promise<PhotoshopClient.ManifestJobApiResponse> {\n  return pollPhotoshopJob<PhotoshopClient.ManifestJobApiResponse>(jobResult, options);\n}\n\n/**\n * Polls a Photoshop job (document operations like create, modify, rendition, etc.)\n */\nexport async function pollPsJob(\n  jobResult: { statusUrl: string },\n  options: PollPhotoshopJobOptions<PhotoshopClient.PsJobApiResponse> = {}\n): Promise<PhotoshopClient.PsJobApiResponse> {\n  return pollPhotoshopJob<PhotoshopClient.PsJobApiResponse>(jobResult, options);\n}\n\n/**\n * Utility function to sleep for a given duration\n */\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"],"mappings":"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"}