@runware/sdk-js 1.1.26 → 1.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -4
- package/dist/index.d.ts +9 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +12 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../Runware/reconnect.ts","../Runware/index.ts","../Runware/types.ts","../Runware/utils.ts","../Runware/async-retry.ts","../Runware/Runware-base.ts","../Runware/Runware-client.ts","../Runware/Runware-server.ts","../Runware/Runware.ts"],"sourcesContent":["// @ts-nocheck\n/*\nReady state constants\nhttps://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Ready_state_constants\n\nCONNECTING 0 The connection is not yet open.\nOPEN 1 The connection is open and ready to communicate.\nCLOSING 2 The connection is in the process of closing.\nCLOSED 3 The connection is closed or couldn't be opened.\n*/\ntype Options = {\n constructor?: new (url: string, protocols?: string | string[]) => WebSocket;\n maxReconnectionDelay?: number;\n minReconnectionDelay?: number;\n reconnectionDelayGrowFactor?: number;\n connectionTimeout?: number;\n maxRetries?: number;\n debug?: boolean;\n};\n\nconst isWebSocket = (constructor) => constructor && constructor.CLOSING === 2;\n\nconst isGlobalWebSocket = () =>\n typeof WebSocket !== \"undefined\" && isWebSocket(WebSocket);\n\nconst getDefaultOptions = () =>\n <Options>{\n constructor: isGlobalWebSocket() ? WebSocket : null,\n maxReconnectionDelay: 10000,\n minReconnectionDelay: 1500,\n reconnectionDelayGrowFactor: 1.3,\n connectionTimeout: 4000,\n maxRetries: Infinity,\n debug: false,\n };\n\nconst bypassProperty = (src, dst, name: string) => {\n Object.defineProperty(dst, name, {\n get: () => src[name],\n set: (value) => {\n src[name] = value;\n },\n enumerable: true,\n configurable: true,\n });\n};\n\nconst initReconnectionDelay = (config: Options) =>\n config.minReconnectionDelay + Math.random() * config.minReconnectionDelay;\n\nconst updateReconnectionDelay = (config: Options, previousDelay: number) => {\n const newDelay = previousDelay * config.reconnectionDelayGrowFactor;\n return newDelay > config.maxReconnectionDelay\n ? config.maxReconnectionDelay\n : newDelay;\n};\n\nconst LEVEL_0_EVENTS = [\"onopen\", \"onclose\", \"onmessage\", \"onerror\"];\n\nconst reassignEventListeners = (ws: WebSocket, oldWs, listeners) => {\n Object.keys(listeners).forEach((type) => {\n listeners[type].forEach(([listener, options]) => {\n ws.addEventListener(type, listener, options);\n });\n });\n if (oldWs) {\n LEVEL_0_EVENTS.forEach((name) => {\n ws[name] = oldWs[name];\n });\n }\n};\n\nconst ReconnectingWebsocket = function (\n url: string,\n protocols?: string | string[],\n options = <Options>{}\n) {\n let ws: WebSocket;\n let connectingTimeout;\n let reconnectDelay = 0;\n let retriesCount = 0;\n let shouldRetry = true;\n const listeners: any = {};\n\n // require new to construct\n if (!(this instanceof ReconnectingWebsocket)) {\n throw new TypeError(\n \"Failed to construct 'ReconnectingWebSocket': Please use the 'new' operator\"\n );\n }\n\n // Set config. Not using `Object.assign` because of IE11\n const config = getDefaultOptions();\n Object.keys(config)\n .filter((key) => options.hasOwnProperty(key))\n .forEach((key) => (config[key] = options[key]));\n\n if (!isWebSocket(config.constructor)) {\n throw new TypeError(\n \"Invalid WebSocket constructor. Set `options.constructor`\"\n );\n }\n\n const log = config.debug\n ? (...params) => console.log(\"RWS:\", ...params)\n : () => {};\n\n /**\n * Not using dispatchEvent, otherwise we must use a DOM Event object\n * Deferred because we want to handle the close event before this\n */\n const emitError = (code: string, msg: string) =>\n setTimeout(() => {\n const err = <any>new Error(msg);\n err.code = code;\n if (Array.isArray(listeners.error)) {\n listeners.error.forEach(([fn]) => fn(err));\n }\n if (ws.onerror) {\n ws.onerror(err);\n }\n }, 0);\n\n const handleClose = () => {\n log(\"close\");\n retriesCount++;\n log(\"retries count:\", retriesCount);\n if (retriesCount > config.maxRetries) {\n emitError(\"EHOSTDOWN\", \"Too many failed connection attempts\");\n return;\n }\n if (!reconnectDelay) {\n reconnectDelay = initReconnectionDelay(config);\n } else {\n reconnectDelay = updateReconnectionDelay(config, reconnectDelay);\n }\n log(\"reconnectDelay:\", reconnectDelay);\n\n if (shouldRetry) {\n setTimeout(connect, reconnectDelay);\n }\n };\n\n const connect = () => {\n log(\"connect\");\n const oldWs = ws;\n ws = new (<any>config.constructor)(url, protocols);\n\n connectingTimeout = setTimeout(() => {\n log(\"timeout\");\n ws.close();\n emitError(\"ETIMEDOUT\", \"Connection timeout\");\n }, config.connectionTimeout);\n\n log(\"bypass properties\");\n for (let key in ws) {\n // @todo move to constant\n if (\n [\"addEventListener\", \"removeEventListener\", \"close\", \"send\"].indexOf(\n key\n ) < 0\n ) {\n bypassProperty(ws, this, key);\n }\n }\n\n ws.addEventListener(\"open\", () => {\n clearTimeout(connectingTimeout);\n log(\"open\");\n reconnectDelay = initReconnectionDelay(config);\n log(\"reconnectDelay:\", reconnectDelay);\n retriesCount = 0;\n });\n\n ws.addEventListener(\"close\", handleClose);\n\n reassignEventListeners(ws, oldWs, listeners);\n };\n\n log(\"init\");\n connect();\n\n this.close = (\n code = 1000,\n reason = \"\",\n { keepClosed = false, fastClose = true, delay = 0 } = {}\n ) => {\n if (delay) {\n reconnectDelay = delay;\n }\n shouldRetry = !keepClosed;\n\n ws.close(code, reason);\n\n if (fastClose) {\n const fakeCloseEvent = <CloseEvent>{\n code,\n reason,\n wasClean: true,\n };\n\n // execute close listeners soon with a fake closeEvent\n // and remove all close listeners from the WS instance\n // so they don't get fired on the real close.\n\n handleClose();\n\n if (Array.isArray(listeners.close)) {\n listeners.close.forEach(([listener, options]) => {\n listener(fakeCloseEvent);\n ws.removeEventListener(\"close\", listener, options);\n });\n }\n\n if (ws.onclose) {\n ws.onclose(fakeCloseEvent);\n ws.onclose = null;\n }\n }\n };\n\n this.send = (data) => {\n ws.send(data);\n };\n\n this.addEventListener = (\n type: string,\n listener: EventListener,\n options: any\n ) => {\n if (Array.isArray(listeners[type])) {\n if (!listeners[type].some(([l]) => l === listener)) {\n listeners[type].push([listener, options]);\n }\n } else {\n listeners[type] = [[listener, options]];\n }\n ws.addEventListener(type, listener, options);\n };\n\n this.removeEventListener = (\n type: string,\n listener: EventListener,\n options: any\n ) => {\n if (Array.isArray(listeners[type])) {\n listeners[type] = listeners[type].filter(([l]) => l !== listener);\n }\n ws.removeEventListener(type, listener, options);\n };\n};\n\nexport = ReconnectingWebsocket;\n","export * from \"./Runware-client\";\nexport * from \"./types\";\n\nexport * from \"./Runware-server\";\nexport * from \"./Runware\";\n","export enum Environment {\n PRODUCTION = \"PRODUCTION\",\n DEVELOPMENT = \"DEVELOPMENT\",\n TEST = \"TEST\",\n}\nexport enum SdkType {\n CLIENT = \"CLIENT\",\n SERVER = \"SERVER\",\n}\n\nexport enum ETaskType {\n IMAGE_INFERENCE = \"imageInference\",\n IMAGE_UPLOAD = \"imageUpload\",\n IMAGE_UPSCALE = \"imageUpscale\",\n IMAGE_BACKGROUND_REMOVAL = \"imageBackgroundRemoval\",\n IMAGE_CAPTION = \"imageCaption\",\n IMAGE_CONTROL_NET_PRE_PROCESS = \"imageControlNetPreProcess\",\n PROMPT_ENHANCE = \"promptEnhance\",\n AUTHENTICATION = \"authentication\",\n MODEL_UPLOAD = \"modelUpload\",\n PHOTO_MAKER = \"photoMaker\",\n MODEL_SEARCH = \"modelSearch\",\n IMAGE_MASKING = \"imageMasking\",\n}\n\nexport type RunwareBaseType = {\n apiKey: string;\n url?: string;\n shouldReconnect?: boolean;\n globalMaxRetries?: number;\n timeoutDuration?: number;\n};\n\nexport type IOutputType = \"base64Data\" | \"dataURI\" | \"URL\";\nexport type IOutputFormat = \"JPG\" | \"PNG\" | \"WEBP\";\n\nexport interface IImage {\n taskType: ETaskType;\n imageUUID: string;\n inputImageUUID?: string;\n taskUUID: string;\n imageURL?: string;\n imageBase64Data?: string;\n imageDataURI?: string;\n NSFWContent?: boolean;\n cost?: number;\n seed: number;\n}\n\nexport interface ITextToImage extends IImage {\n positivePrompt?: string;\n negativePrompt?: string;\n}\nexport interface IControlNetImage {\n taskUUID: string;\n inputImageUUID: string;\n guideImageUUID: string;\n guideImageURL?: string;\n guideImageBase64Data?: string;\n guideImageDataURI?: string;\n cost?: number;\n}\n\ninterface ILora {\n model: string | number;\n weight: number;\n}\n\nexport enum EControlMode {\n BALANCED = \"balanced\",\n PROMPT = \"prompt\",\n CONTROL_NET = \"controlnet\",\n}\n\nexport type IControlNetGeneral = {\n model: string;\n guideImage: string | File;\n weight?: number;\n startStep?: number;\n startStepPercentage?: number;\n endStep?: number;\n endStepPercentage?: number;\n controlMode: EControlMode;\n};\nexport type IControlNetPreprocess = {\n inputImage: string | File;\n preProcessorType: EPreProcessorGroup;\n height?: number;\n width?: number;\n outputType?: IOutputType;\n outputFormat?: IOutputFormat;\n highThresholdCanny?: number;\n lowThresholdCanny?: number;\n includeHandsAndFaceOpenPose?: boolean;\n includeCost?: boolean;\n customTaskUUID?: string;\n retry?: number;\n};\n\n// export type IControlNetA = RequireOnlyOne<\n// IControlNetGeneral,\n// \"guideImage\" | \"guideImageUnprocessed\"\n// >;\n\n// export type IControlNetCanny = IControlNetA & {\n// preprocessor: \"canny\";\n// lowThresholdCanny: Number;\n// highThresholdCanny: Number;\n// outputType?: IOutputType;\n// };\n\n// export type IControlNetHandsAndFace = IControlNetA & {\n// preprocessor: keyof typeof EOpenPosePreProcessor;\n// includeHandsAndFaceOpenPose: boolean;\n// outputType?: IOutputType;\n// };\n\nexport type IControlNet = IControlNetGeneral;\n\nexport type IControlNetWithUUID = Omit<IControlNet, \"guideImage\"> & {\n guideImage?: string;\n};\n\nexport interface IError {\n error: boolean;\n errorMessage: string;\n taskUUID: string;\n}\n\nexport interface IRequestImage {\n outputType?: IOutputType;\n outputFormat?: IOutputFormat;\n uploadEndpoint?: string;\n checkNSFW?: boolean;\n positivePrompt: string;\n negativePrompt?: string;\n seedImage?: File | string;\n maskImage?: File | string;\n strength?: number;\n height?: number;\n width?: number;\n model: number | string;\n steps?: number;\n scheduler?: string;\n seed?: number;\n maskMargin?: number;\n CFGScale?: number;\n clipSkip?: number;\n usePromptWeighting?: boolean;\n numberResults?: number; // default to 1\n controlNet?: IControlNet[];\n lora?: ILora[];\n includeCost?: boolean;\n customTaskUUID?: string;\n\n // imageSize?: number;\n onPartialImages?: (images: IImage[], error?: IError) => void;\n retry?: number;\n refiner?: IRefiner;\n // gScale?: number;\n}\n\nexport interface IRefiner {\n model: string;\n startStep?: number;\n startStepPercentage?: number;\n}\nexport interface IRequestImageToText {\n inputImage?: File | string;\n includeCost?: boolean;\n customTaskUUID?: string;\n retry?: number;\n}\nexport interface IImageToText {\n taskType: ETaskType;\n taskUUID: string;\n text: string;\n cost?: number;\n}\n\nexport interface IRemoveImageBackground extends IRequestImageToText {\n outputType?: IOutputType;\n outputFormat?: IOutputFormat;\n rgba?: number[];\n postProcessMask?: boolean;\n returnOnlyMask?: boolean;\n alphaMatting?: boolean;\n alphaMattingForegroundThreshold?: number;\n alphaMattingBackgroundThreshold?: number;\n alphaMattingErodeSize?: number;\n includeCost?: boolean;\n retry?: number;\n}\n\nexport interface IRemoveImage {\n taskType: ETaskType;\n taskUUID: string;\n imageUUID: string;\n inputImageUUID: string;\n imageURL?: string;\n imageBase64Data?: string;\n imageDataURI?: string;\n cost?: number;\n}\n\nexport interface IPromptEnhancer {\n promptMaxLength?: number;\n promptVersions?: number;\n prompt: string;\n includeCost?: boolean;\n customTaskUUID?: string;\n retry?: number;\n}\n\nexport interface IEnhancedPrompt extends IImageToText {}\n\nexport interface IUpscaleGan {\n inputImage: File | string;\n upscaleFactor: number;\n outputType?: IOutputType;\n outputFormat?: IOutputFormat;\n includeCost?: boolean;\n customTaskUUID?: string;\n retry?: number;\n}\n\nexport type ReconnectingWebsocketProps = {\n addEventListener: (\n type: string,\n listener: EventListener,\n options: any\n ) => void;\n send: (data: any) => void;\n} & WebSocket;\n\nexport type UploadImageType = {\n imageURL: string;\n imageUUID: string;\n taskUUID: string;\n taskType: ETaskType;\n};\n\nexport type GetWithPromiseCallBackType = ({\n resolve,\n reject,\n intervalId,\n}: {\n resolve: <T>(value: T) => void;\n reject: <T>(value: T) => void;\n intervalId: any;\n}) => boolean | undefined;\n\nexport enum EPreProcessorGroup {\n \"canny\" = \"canny\",\n \"depth\" = \"depth\",\n \"mlsd\" = \"mlsd\",\n \"normalbae\" = \"normalbae\",\n \"openpose\" = \"openpose\",\n \"tile\" = \"tile\",\n \"seg\" = \"seg\",\n \"lineart\" = \"lineart\",\n \"lineart_anime\" = \"lineart_anime\",\n \"shuffle\" = \"shuffle\",\n \"scribble\" = \"scribble\",\n \"softedge\" = \"softedge\",\n}\n\nexport enum EPreProcessor {\n \"canny\" = \"canny\",\n \"depth_leres\" = \"depth_leres\",\n \"depth_midas\" = \"depth_midas\",\n \"depth_zoe\" = \"depth_zoe\",\n \"inpaint_global_harmonious\" = \"inpaint_global_harmonious\",\n \"lineart_anime\" = \"lineart_anime\",\n \"lineart_coarse\" = \"lineart_coarse\",\n \"lineart_realistic\" = \"lineart_realistic\",\n \"lineart_standard\" = \"lineart_standard\",\n \"mlsd\" = \"mlsd\",\n \"normal_bae\" = \"normal_bae\",\n\n \"scribble_hed\" = \"scribble_hed\",\n \"scribble_pidinet\" = \"scribble_pidinet\",\n \"seg_ofade20k\" = \"seg_ofade20k\",\n \"seg_ofcoco\" = \"seg_ofcoco\",\n \"seg_ufade20k\" = \"seg_ufade20k\",\n \"shuffle\" = \"shuffle\",\n \"softedge_hed\" = \"softedge_hed\",\n \"softedge_hedsafe\" = \"softedge_hedsafe\",\n \"softedge_pidinet\" = \"softedge_pidinet\",\n \"softedge_pidisafe\" = \"softedge_pidisafe\",\n \"tile_gaussian\" = \"tile_gaussian\",\n\n \"openpose\" = \"openpose\",\n \"openpose_face\" = \"openpose_face\",\n \"openpose_faceonly\" = \"openpose_faceonly\",\n \"openpose_full\" = \"openpose_full\",\n \"openpose_hand\" = \"openpose_hand\",\n}\n\nexport enum EOpenPosePreProcessor {\n \"openpose\" = \"openpose\",\n \"openpose_face\" = \"openpose_face\",\n \"openpose_faceonly\" = \"openpose_faceonly\",\n \"openpose_full\" = \"openpose_full\",\n \"openpose_hand\" = \"openpose_hand\",\n}\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<\n T,\n Exclude<keyof T, Keys>\n> &\n {\n [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n }[Keys];\n\nexport type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<\n T,\n Exclude<keyof T, Keys>\n> &\n {\n [K in Keys]-?: Required<Pick<T, K>> &\n Partial<Record<Exclude<Keys, K>, undefined>>;\n }[Keys];\n\nexport type ListenerType = {\n key: string;\n listener: (msg: any) => void;\n groupKey?: string;\n};\n\nexport interface IAddModelResponse {\n status: string;\n message: string;\n taskUUID: string;\n air: string;\n taskType: string;\n}\n\nexport interface IErrorResponse {\n code: string;\n message: string;\n parameter: string;\n type: string;\n documentation: string;\n taskUUID: string;\n min?: number;\n max?: number;\n default?: string | number;\n}\n\nexport type TAddModelBaseType = {\n air: string;\n name: string;\n downloadUrl: string;\n uniqueIdentifier: string;\n\n version: string;\n format: EModelFormat;\n architecture: EModelArchitecture;\n heroImageUrl?: string;\n tags?: string[];\n shortDescription?: string;\n comment?: string;\n private: boolean;\n\n // Custom parameters\n customTaskUUID?: string;\n retry?: number;\n onUploadStream?: (\n response?: IAddModelResponse,\n error?: IErrorResponse\n ) => void;\n};\n\nexport type TAddModelControlNet = {\n category: \"controlnet\";\n conditioning: EModelConditioning;\n} & TAddModelBaseType;\n\nexport type TAddModelCheckPoint = {\n category: \"checkpoint\";\n defaultCFGScale?: number;\n defaultStrength: number;\n defaultSteps?: number;\n defaultScheduler?: number;\n type?: EModelType;\n} & TAddModelBaseType;\n\nexport type TAddModelLora = {\n category: \"lora\";\n defaultWeight: number;\n positiveTriggerWords?: string;\n} & TAddModelBaseType;\n\nexport type TAddModel =\n | TAddModelCheckPoint\n | TAddModelControlNet\n | TAddModelLora;\n\nexport type TPhotoMaker = {\n model?: string; // this should be hidden for now cause we have a single model\n inputImages: string[];\n style: EPhotoMakerEnum;\n strength?: number;\n positivePrompt: string;\n negativePrompt?: string;\n height: number;\n width: number;\n scheduler?: string;\n steps?: number;\n CFGScale?: number;\n outputFormat?: string;\n includeCost?: boolean;\n numberResults: number;\n seed?: number;\n\n // other options\n customTaskUUID?: string;\n retry?: number;\n onPartialImages?: (images: IImage[], error?: IError) => void;\n};\n\nexport type TPhotoMakerResponse = {\n taskType: string;\n taskUUID: string;\n imageUUID: string;\n NSFWContent: boolean;\n cost: number;\n seed: number;\n imageURL: string;\n positivePrompt: string;\n negativePrompt?: string;\n};\n\nexport enum EModelFormat {\n safetensors = \"safetensors\",\n pickletensor = \"pickletensor\",\n}\n\nexport enum EModelArchitecture {\n flux1d = \"flux1d\",\n flux1s = \"flux1s\",\n pony = \"pony\",\n sdhyper = \"sdhyper\",\n sd1x = \"sd1x\",\n sd1xlcm = \"sd1xlcm\",\n sd3 = \"sd3\",\n sdxl = \"sdxl\",\n sdxllcm = \"sdxllcm\",\n sdxldistilled = \"sdxldistilled\",\n sdxlhyper = \"sdxlhyper\",\n sdxllightning = \"sdxllightning\",\n sdxlturbo = \"sdxlturbo\",\n}\n\nexport enum EModelType {\n base = \"base\",\n inpainting = \"inpainting\",\n pix2pix = \"pix2pix\",\n}\n\nexport enum EModelConditioning {\n canny = \"canny\",\n depth = \"depth\",\n qrcode = \"qrcode\",\n hed = \"hed\",\n scrible = \"scrible\",\n openpose = \"openpose\",\n seg = \"segmentation\",\n openmlsd = \"openmlsd\",\n softedge = \"softedge\",\n normal = \"normal bae\",\n shuffle = \"shuffle\",\n pix2pix = \"pix2pix\",\n inpaint = \"inpaint\",\n lineart = \"line art\",\n sketch = \"sketch\",\n inpaintdepth = \"inpaint depth\",\n tile = \"tile\",\n outfit = \"outfit\",\n blur = \"blur\",\n gray = \"gray\",\n lowquality = \"low quality\",\n}\n\nexport enum EPhotoMakerEnum {\n NoStyle = \"No style\",\n Cinematic = \"Cinematic\",\n DisneyCharacter = \"Disney Character\",\n DigitalArt = \"Digital Art\",\n Photographic = \"Photographic\",\n FantasyArt = \"Fantasy art\",\n Neonpunk = \"Neonpunk\",\n Enhance = \"Enhance\",\n ComicBook = \"Comic book\",\n Lowpoly = \"Lowpoly\",\n LineArt = \"Line art\",\n}\n\nexport type TModelSearch = {\n search: string;\n tags?: string[];\n category?: \"checkpoint\" | \"lora\" | \"controlnet\";\n architecture?: EModelArchitecture;\n limit?: number;\n offset?: number;\n owned?: boolean;\n featured: boolean;\n type: string;\n conditioning: string;\n private: boolean;\n\n // other options\n customTaskUUID?: string;\n retry?: number;\n};\n\nexport type TModel = {\n name: string;\n air: string;\n downloadUrl: string;\n tags: string[];\n heroImage: string;\n category: string;\n floatingPoint: string;\n private: boolean;\n shortDescription: string;\n comment: string;\n positiveTriggerWords: string;\n defaultSteps: number;\n defaultGuidanceScale: number;\n defaultStrength: number;\n defaultVaeId: number;\n updatedDateUnixTimestamp: number;\n version: string;\n conditioning: string;\n defaultScheduler: string;\n defaultCFG: number;\n format: string;\n uniqueIdentifier: string;\n architecture: string;\n type: string;\n nsfw: boolean;\n sourceUrl: string;\n downloadCount: number;\n nsfwLevel: number;\n rating: number;\n ratingCount: number;\n thumbsUpCount: number;\n thumbsDownCount: number;\n defaultEmaEnable: boolean;\n defaultImageSizeId: string;\n compatibleSizeIds: number[];\n};\n\nexport type TModelSearchResponse = {\n results: TModel[];\n taskUUID: string;\n taskType: string;\n totalResults: number;\n};\n\nexport type TImageMasking = {\n model: string;\n inputImage: string;\n confidence?: number;\n maskPadding?: number;\n maskBlur?: number;\n outputFormat?: string;\n outputType?: string;\n includeCost?: boolean;\n uploadEndpoint?: string;\n maxDetections?: number;\n\n customTaskUUID?: string;\n retry?: number;\n};\n\nexport type TImageMaskingResponse = {\n taskType: string;\n taskUUID: string;\n imageUUID: string;\n\n detections: [\n {\n x_min: number;\n y_min: number;\n x_max: number;\n y_max: number;\n }\n ];\n maskImageURL: string;\n cost: number;\n};\n","import {\n EPreProcessor,\n EPreProcessorGroup,\n Environment,\n GetWithPromiseCallBackType,\n IRequestImage,\n} from \"./types\";\nimport { v4 as uuidv4, validate as validateUUID } from \"uuid\";\n\nexport const TIMEOUT_DURATION = 60000; // 120S;\nexport const MINIMUM_TIMEOUT_DURATION = 1000; // 120S;\nconst POLLING_INTERVAL = 100; // 1s;\n\nexport const BASE_RUNWARE_URLS = {\n [Environment.PRODUCTION]: \"wss://ws-api.runware.ai/v1\",\n [Environment.TEST]: \"ws://localhost:8080\",\n};\n\nexport const removeFromAray = <T>(col: T[], targetElem: T) => {\n if (col == null) {\n return;\n }\n let i = col.indexOf(targetElem);\n if (i === -1) {\n return;\n }\n col.splice(i, 1);\n};\n\nexport const getIntervalWithPromise = (\n callback: GetWithPromiseCallBackType,\n {\n debugKey = \"debugKey\",\n timeoutDuration = TIMEOUT_DURATION,\n shouldThrowError = true,\n }: {\n debugKey?: string;\n timeoutDuration?: number;\n shouldThrowError?: boolean;\n }\n) => {\n timeoutDuration =\n timeoutDuration < MINIMUM_TIMEOUT_DURATION\n ? MINIMUM_TIMEOUT_DURATION\n : timeoutDuration;\n\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n if (intervalId) {\n clearInterval(intervalId);\n if (shouldThrowError) {\n reject(`Response could not be received from server for ${debugKey}`);\n }\n }\n clearTimeout(timeoutId);\n // reject();\n }, timeoutDuration);\n\n let intervalId = setInterval(async () => {\n const shouldClear = callback({ resolve, reject, intervalId });\n if (shouldClear) {\n clearInterval(intervalId);\n clearTimeout(timeoutId);\n }\n // resolve(imagesWithSimilarTask); // Resolve the promise with the data\n }, POLLING_INTERVAL); // Check every 1 second (adjust the interval as needed)\n });\n};\n\nexport const fileToBase64 = (file: File) =>\n new Promise((resolve) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = function () {\n resolve(reader.result);\n };\n });\n\n// export const getUUID = () => crypto.randomUUID();\nexport const getUUID = () => uuidv4();\n\nexport const isValidUUID = (uuid: string) => validateUUID(uuid);\n\nconst evaluateToBoolean = (...args: any) => [...args].every((e) => !!e);\n\nexport const compact = (value: any, data: any) => (!!value ? data : {});\n\nexport const getPreprocessorType = (\n processor: EPreProcessor\n): EPreProcessorGroup => {\n const processorGroup = Object.keys(\n EPreProcessorGroup\n ) as EPreProcessorGroup[];\n\n switch (processor) {\n case EPreProcessor.canny:\n return EPreProcessorGroup.canny;\n // break\n case EPreProcessor.depth_leres:\n case EPreProcessor.depth_midas:\n case EPreProcessor.depth_zoe:\n return EPreProcessorGroup.depth;\n // break\n case EPreProcessor.inpaint_global_harmonious:\n return EPreProcessorGroup.depth;\n // break\n case EPreProcessor.lineart_anime:\n return EPreProcessorGroup.lineart_anime;\n // break\n case EPreProcessor.lineart_coarse:\n case EPreProcessor.lineart_realistic:\n case EPreProcessor.lineart_standard:\n return EPreProcessorGroup.lineart;\n // break\n case EPreProcessor.mlsd:\n return EPreProcessorGroup.mlsd;\n // break\n case EPreProcessor.normal_bae:\n return EPreProcessorGroup.normalbae;\n // break\n case EPreProcessor.openpose_face:\n case EPreProcessor.openpose_faceonly:\n case EPreProcessor.openpose_full:\n case EPreProcessor.openpose_hand:\n case EPreProcessor.openpose:\n return EPreProcessorGroup.openpose;\n // break\n case EPreProcessor.scribble_hed:\n case EPreProcessor.scribble_pidinet:\n return EPreProcessorGroup.scribble;\n // break\n case EPreProcessor.seg_ofade20k:\n case EPreProcessor.seg_ofcoco:\n case EPreProcessor.seg_ufade20k:\n return EPreProcessorGroup.seg;\n // break\n case EPreProcessor.shuffle:\n return EPreProcessorGroup.shuffle;\n // break\n case EPreProcessor.softedge_hed:\n case EPreProcessor.softedge_hedsafe:\n case EPreProcessor.softedge_pidinet:\n case EPreProcessor.softedge_pidisafe:\n return EPreProcessorGroup.softedge;\n // break\n case EPreProcessor.tile_gaussian:\n return EPreProcessorGroup.tile;\n // break\n default:\n return EPreProcessorGroup.canny;\n }\n};\n\nexport const accessDeepObject = ({\n key,\n data,\n useZero = true,\n shouldReturnString = false,\n}: {\n key: string;\n data: Record<string, any>;\n useZero?: boolean;\n shouldReturnString?: boolean;\n}) => {\n const splittedKeys = key.split(/\\.|\\[/).map((key) => key.replace(/\\]$/, \"\"));\n\n const value = splittedKeys.reduce((acc, curr) => {\n const returnZero = useZero ? 0 : undefined;\n const currentValue = acc?.[curr];\n\n if (!currentValue) {\n return returnZero;\n }\n if (Array.isArray(currentValue) && /^\\d+$/.test(curr)) {\n const index = parseInt(curr, 10);\n if (index >= 0 && index < currentValue.length) {\n return (acc[curr] = currentValue[index]);\n } else {\n return acc[curr] ?? returnZero;\n }\n } else {\n return acc[curr] ?? returnZero;\n }\n }, data || {});\n\n // if (typeof value === \"object\" && shouldReturnString) {\n // return JSON.stringify(value);\n // }\n return value ?? {};\n};\n\nexport const delay = (time: number, milliseconds = 1000) => {\n return new Promise((resolve) => setTimeout(resolve, time * milliseconds));\n};\n\nexport class MockFile {\n create = function (name: string, size: number, mimeType: string) {\n name = name || \"mock.txt\";\n size = size || 1024;\n mimeType = mimeType || \"plain/txt\";\n\n var blob: any = new Blob([range(size)], { type: mimeType });\n blob.lastModifiedDate = new Date();\n blob.name = name;\n\n return blob;\n };\n}\n\nfunction range(count: number) {\n var output = \"\";\n for (var i = 0; i < count; i++) {\n output += \"a\";\n }\n return output;\n}\n\nexport const RETRY_SDK_COUNTS = {\n GLOBAL: 2,\n REQUEST_IMAGES: 2,\n};\n\nexport const remove1Mutate = (col: any, targetElem: any) => {\n if (col == null) {\n return;\n }\n\n let i = col.indexOf(targetElem);\n if (i === -1) {\n return;\n }\n col.splice(i, 1);\n};\n\nexport const removeListener = (listeners: any[], listener: any) => {\n return listeners.filter((lis) => lis.key !== listener.key);\n};\n\nexport const removeAllKeyListener = ({\n listeners,\n key,\n}: {\n listeners: any[];\n key: any;\n}) => {\n return listeners.filter((lis) => lis?.key !== key);\n};\n\nexport enum LISTEN_TO_IMAGES_KEY {\n REQUEST_IMAGES = \"REQUEST_IMAGES\",\n}\n\nexport const evaluateNonTrue = ({\n key,\n value,\n}: {\n key: string;\n value: any;\n}) => {\n if (!!value || value === 0 || value === false) {\n return { [key]: value };\n } else {\n return {};\n }\n};\n","import { delay } from \"./utils\";\n\nexport const asyncRetry = async (\n apiCall: Function,\n options: {\n maxRetries?: number;\n delayInSeconds?: number;\n callback?: Function;\n } = {}\n) => {\n const { delayInSeconds = 1, callback } = options;\n let maxRetries = options.maxRetries ?? 1;\n while (maxRetries) {\n try {\n const result = await apiCall();\n return result; // Return the result if successful\n } catch (error: any) {\n callback?.();\n maxRetries--;\n if (maxRetries > 0) {\n await delay(delayInSeconds); // Delay before the next retry\n await asyncRetry(apiCall, { ...options, maxRetries });\n } else {\n throw error; // Throw the error if max retries are reached\n }\n }\n }\n};\n","// @ts-ignore\nimport { asyncRetry } from \"./async-retry\";\nimport {\n EControlMode,\n IControlNet,\n IControlNetWithUUID,\n IEnhancedPrompt,\n IError,\n IImage,\n IImageToText,\n IPromptEnhancer,\n IRemoveImageBackground,\n IRequestImage,\n IRequestImageToText,\n IUpscaleGan,\n ListenerType,\n ReconnectingWebsocketProps,\n RunwareBaseType,\n SdkType,\n UploadImageType,\n ETaskType,\n IControlNetPreprocess,\n IControlNetImage,\n IRemoveImage,\n ITextToImage,\n TAddModel,\n IAddModelResponse,\n IErrorResponse,\n TPhotoMaker,\n TPhotoMakerResponse,\n TModelSearch,\n TImageMaskingResponse,\n TImageMasking,\n TModelSearchResponse,\n} from \"./types\";\nimport {\n BASE_RUNWARE_URLS,\n LISTEN_TO_IMAGES_KEY,\n TIMEOUT_DURATION,\n accessDeepObject,\n delay,\n evaluateNonTrue,\n fileToBase64,\n getIntervalWithPromise,\n getUUID,\n isValidUUID,\n removeFromAray,\n removeListener,\n} from \"./utils\";\n\n// let allImages: IImage[] = [];\n\nexport class RunwareBase {\n _ws: ReconnectingWebsocketProps | any;\n _listeners: ListenerType[] = [];\n _apiKey: string;\n _url?: string;\n // _globalMessages: any[] = [];\n _globalMessages: Record<string, any> = {};\n _globalImages: IImage[] = [];\n _globalError: IError | undefined;\n _connectionSessionUUID: string | undefined;\n _invalidAPIkey: string | undefined;\n _sdkType: SdkType;\n _shouldReconnect: boolean;\n _globalMaxRetries: number;\n _timeoutDuration: number;\n\n constructor({\n apiKey,\n url = BASE_RUNWARE_URLS.PRODUCTION,\n shouldReconnect = true,\n globalMaxRetries = 2,\n timeoutDuration = TIMEOUT_DURATION,\n }: RunwareBaseType) {\n this._apiKey = apiKey;\n this._url = url;\n this._sdkType = SdkType.CLIENT;\n this._shouldReconnect = shouldReconnect;\n this._globalMaxRetries = globalMaxRetries;\n this._timeoutDuration = timeoutDuration;\n }\n\n static async initialize(props: RunwareBaseType) {\n try {\n const instance = new this(props);\n await instance.ensureConnection();\n return instance;\n } catch (e) {\n throw e;\n }\n }\n\n protected isWebsocketReadyState = () => this._ws?.readyState === 1;\n\n // protected addListener({\n // lis,\n // check,\n // }: {\n // lis: (v: any) => any;\n // check: (v: any) => any;\n // groupKey?: string;\n // }): { destroy: Function } {\n // this._ws.onmessage = (e: any) => {\n // const m = JSON.parse(e.data);\n\n // if (m?.error) {\n // lis(m);\n // } else if (check(m)) {\n // lis(m);\n // }\n // };\n\n // return {\n // destroy: () => {},\n // };\n // }\n\n protected addListener({\n lis,\n // check,\n groupKey,\n taskUUID,\n }: {\n lis: (v: any) => any;\n // check: ETaskType;\n groupKey?: string;\n taskUUID: string;\n }) {\n const listener = (msg: {\n data: any[];\n errors?: { taskUUID: string; code: string; taskType?: string }[];\n errorMessage?: string;\n }) => {\n const arrayMessage = Array.isArray(msg?.data) ? msg.data : [msg.data];\n\n const arrayErrors = (msg as any)?.[0]?.errors\n ? (msg as any)?.[0]?.errors\n : Array.isArray(msg?.errors)\n ? msg.errors\n : [msg.errors];\n\n const filteredMessage = arrayMessage.filter(\n (v) => (v?.taskUUID || v?.taskType) === taskUUID\n );\n\n const filteredErrors = arrayErrors.filter(\n (v: any) => (v?.taskUUID || v?.taskType) === taskUUID\n );\n\n if (filteredErrors.length) {\n lis({ error: { ...(arrayErrors[0] ?? {}) } });\n return;\n }\n\n if (filteredMessage.length) {\n lis({ [taskUUID]: arrayMessage });\n return;\n }\n };\n const groupListener = { key: taskUUID || getUUID(), listener, groupKey };\n this._listeners.push(groupListener);\n const destroy = () => {\n this._listeners = removeListener(this._listeners, groupListener);\n };\n\n return {\n destroy,\n };\n }\n\n protected connect() {\n this._ws.onopen = (e: any) => {\n if (this._connectionSessionUUID) {\n this.send({\n taskType: ETaskType.AUTHENTICATION,\n apiKey: this._apiKey,\n connectionSessionUUID: this._connectionSessionUUID,\n });\n } else {\n this.send({ apiKey: this._apiKey, taskType: ETaskType.AUTHENTICATION });\n }\n\n this.addListener({\n taskUUID: ETaskType.AUTHENTICATION,\n lis: (m) => {\n if (m?.error) {\n this._invalidAPIkey = m;\n return;\n }\n this._connectionSessionUUID =\n m?.[ETaskType.AUTHENTICATION]?.[0]?.connectionSessionUUID;\n this._invalidAPIkey = undefined;\n },\n });\n };\n\n this._ws.onmessage = (e: any) => {\n const data = JSON.parse(e.data);\n for (const lis of this._listeners) {\n const result = (lis as any)?.listener?.(data);\n if (result) return;\n }\n };\n\n this._ws.onclose = (e: any) => {\n // console.log(\"closing\");\n // console.log(\"invalid\", this._invalidAPIkey);\n if (this._invalidAPIkey) {\n return;\n }\n };\n }\n\n // We moving to an array format, it make sense to consolidate all request to an array here\n protected send = (msg: Object) => {\n this._ws.send(JSON.stringify([msg]));\n };\n\n private destroy(lis: any) {\n removeFromAray(this._listeners, lis);\n }\n\n private uploadImage = async (\n file: File | string\n ): Promise<UploadImageType | null> => {\n try {\n return await asyncRetry(async () => {\n const taskUUID = getUUID();\n\n if (typeof file === \"string\" && isValidUUID(file)) {\n return {\n imageURL: file,\n imageUUID: file,\n taskUUID,\n taskType: ETaskType.IMAGE_UPLOAD,\n };\n }\n\n const imageBase64 =\n typeof file === \"string\" ? file : await fileToBase64(file);\n\n return {\n imageURL: imageBase64,\n imageUUID: imageBase64,\n taskUUID,\n taskType: ETaskType.IMAGE_UPLOAD,\n };\n });\n } catch (e) {\n throw e;\n }\n };\n\n private listenToImages({\n onPartialImages,\n taskUUID,\n groupKey,\n positivePrompt,\n negativePrompt,\n }: {\n taskUUID: string;\n onPartialImages?: (images: IImage[], error?: any) => void;\n groupKey: LISTEN_TO_IMAGES_KEY;\n positivePrompt?: string;\n negativePrompt?: string;\n }) {\n return this.addListener({\n taskUUID: taskUUID,\n lis: (m) => {\n let images = (m?.[taskUUID] as IImage[])?.filter(\n (img) => img.taskUUID === taskUUID\n );\n\n if (m.error) {\n onPartialImages?.(images, m?.error && m);\n this._globalError = m;\n } else {\n images = images.map((image) => ({\n ...image,\n positivePrompt,\n negativePrompt,\n }));\n onPartialImages?.(images, m?.error && m);\n\n if (this._sdkType === SdkType.CLIENT) {\n // this._globalImages = [...this._globalImages, ...m.images];\n this._globalImages = [\n ...this._globalImages,\n ...(m?.[taskUUID] ?? []).map((image: IImage) => ({\n ...image,\n positivePrompt,\n negativePrompt,\n })),\n ];\n } else {\n this._globalImages = [...this._globalImages, ...images];\n }\n }\n },\n groupKey,\n });\n }\n\n private listenToUpload({\n onUploadStream,\n taskUUID,\n }: {\n taskUUID: string;\n onUploadStream?: (\n addModelResponse?: IAddModelResponse,\n error?: IErrorResponse\n ) => void;\n }) {\n return this.addListener({\n taskUUID: taskUUID,\n lis: (m) => {\n const error = m?.error;\n\n const result = m?.[taskUUID]?.[0] as IAddModelResponse;\n let response = result?.taskUUID === taskUUID ? result : null;\n\n if (response || error) {\n onUploadStream?.(response || undefined, error);\n }\n },\n });\n }\n\n private globalListener({ taskUUID }: { taskUUID: string }) {\n return this.addListener({\n // check: (m) => {\n // const value = accessDeepObject({\n // key: responseKey,\n // data: m,\n // useZero: false,\n // });\n // return !!value;\n // },\n // check: responseKey,\n taskUUID: taskUUID,\n lis: (m) => {\n if (m.error) {\n this._globalMessages[taskUUID] = m;\n return;\n }\n\n const value = accessDeepObject({\n key: taskUUID,\n data: m,\n useZero: false,\n });\n\n if (Array.isArray(value)) {\n value.forEach((v) => {\n this._globalMessages[v.taskUUID] = [\n ...(this._globalMessages[v.taskUUID] ?? []),\n v,\n ];\n });\n } else {\n this._globalMessages[value.taskUUID] = value;\n }\n },\n });\n }\n\n async requestImages({\n outputType,\n outputFormat,\n uploadEndpoint,\n checkNSFW,\n positivePrompt,\n negativePrompt,\n seedImage,\n maskImage,\n strength,\n height,\n width,\n model,\n steps,\n scheduler,\n seed,\n CFGScale,\n clipSkip,\n usePromptWeighting,\n numberResults = 1,\n controlNet,\n lora,\n onPartialImages,\n includeCost,\n customTaskUUID,\n retry,\n refiner,\n maskMargin,\n }: // imageSize,\n\n // gScale,\n IRequestImage): Promise<ITextToImage[] | undefined> {\n let lis: any = undefined;\n let requestObject: Record<string, any> | undefined = undefined;\n let taskUUIDs: string[] = [];\n let retryCount = 0;\n\n const totalRetry = retry || this._globalMaxRetries;\n\n try {\n await this.ensureConnection();\n\n let seedImageUUID: string | null = null;\n let maskImageUUID: string | null = null;\n let controlNetData: IControlNetWithUUID[] = [];\n\n if (seedImage) {\n const uploadedImage = await this.uploadImage(seedImage);\n\n if (!uploadedImage) return [];\n seedImageUUID = uploadedImage.imageUUID;\n }\n if (maskImage) {\n const uploadedMaskInitiator = await this.uploadImage(maskImage);\n if (!uploadedMaskInitiator) return [];\n maskImageUUID = uploadedMaskInitiator.imageUUID;\n }\n\n if (controlNet?.length) {\n for (let i = 0; i < controlNet.length; i++) {\n const controlData: IControlNet = controlNet[i];\n const {\n endStep,\n startStep,\n weight,\n guideImage,\n controlMode,\n startStepPercentage,\n endStepPercentage,\n model: controlNetModel,\n } = controlData;\n\n const imageUploaded = guideImage\n ? await this.uploadImage(guideImage as File | string)\n : null;\n\n controlNetData.push({\n guideImage: imageUploaded?.imageUUID,\n model: controlNetModel,\n endStep,\n startStep,\n weight,\n ...evaluateNonTrue({\n key: \"startStepPercentage\",\n value: startStepPercentage,\n }),\n ...evaluateNonTrue({\n key: \"endStepPercentage\",\n value: endStepPercentage,\n }),\n controlMode: controlMode || EControlMode.CONTROL_NET,\n });\n }\n }\n\n requestObject = {\n taskType: ETaskType.IMAGE_INFERENCE,\n model,\n positivePrompt: positivePrompt,\n ...(negativePrompt ? { negativePrompt } : {}),\n ...(height ? { height } : {}),\n ...(width ? { width } : {}),\n numberResults,\n ...(lora?.length ? { lora: lora } : {}),\n ...(outputType ? { outputType } : {}),\n ...(outputFormat ? { outputFormat } : {}),\n ...(uploadEndpoint ? { uploadEndpoint } : {}),\n ...evaluateNonTrue({ key: \"checkNSFW\", value: checkNSFW }),\n ...evaluateNonTrue({ key: \"strength\", value: strength }),\n ...evaluateNonTrue({ key: \"CFGScale\", value: CFGScale }),\n ...evaluateNonTrue({ key: \"clipSkip\", value: clipSkip }),\n ...evaluateNonTrue({ key: \"maskMargin\", value: maskMargin }),\n ...evaluateNonTrue({\n key: \"usePromptWeighting\",\n value: usePromptWeighting,\n }),\n ...evaluateNonTrue({ key: \"steps\", value: steps }),\n ...(controlNetData.length ? { controlNet: controlNetData } : {}),\n ...(seed ? { seed: seed } : {}),\n ...(scheduler ? { scheduler } : {}),\n ...(refiner ? { refiner } : {}),\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n ...(seedImageUUID ? { seedImage: seedImageUUID } : {}),\n ...(maskImageUUID ? { maskImage: maskImageUUID } : {}),\n };\n\n return await asyncRetry(\n async () => {\n retryCount++;\n lis?.destroy();\n const imagesWithSimilarTask = this._globalImages.filter((img) =>\n taskUUIDs.includes(img.taskUUID)\n );\n\n const taskUUID = customTaskUUID || getUUID();\n\n taskUUIDs.push(taskUUID);\n\n const imageRemaining = numberResults - imagesWithSimilarTask.length;\n\n const newRequestObject = {\n ...requestObject,\n taskUUID: taskUUID,\n numberResults: imageRemaining,\n };\n this.send(newRequestObject);\n\n lis = this.listenToImages({\n onPartialImages,\n taskUUID: taskUUID,\n groupKey: LISTEN_TO_IMAGES_KEY.REQUEST_IMAGES,\n positivePrompt,\n negativePrompt,\n });\n\n const promise = await this.getSimilarImages({\n taskUUID: taskUUIDs,\n numberResults,\n lis,\n });\n\n lis.destroy();\n\n return promise;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n if ((e as any).taskUUID) {\n throw e;\n }\n if (retryCount >= totalRetry) {\n return this.handleIncompleteImages({ taskUUIDs, error: e });\n }\n }\n }\n\n controlNetPreProcess = async ({\n inputImage,\n preProcessorType,\n height,\n width,\n outputType,\n outputFormat,\n highThresholdCanny,\n lowThresholdCanny,\n includeHandsAndFaceOpenPose,\n includeCost,\n customTaskUUID,\n retry,\n }: IControlNetPreprocess): Promise<IControlNetImage | null> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const image = await this.uploadImage(inputImage);\n if (!image?.imageUUID) return null;\n\n const taskUUID = customTaskUUID || getUUID();\n this.send({\n inputImage: image.imageUUID,\n taskType: ETaskType.IMAGE_CONTROL_NET_PRE_PROCESS,\n taskUUID,\n preProcessorType,\n ...evaluateNonTrue({ key: \"height\", value: height }),\n ...evaluateNonTrue({ key: \"width\", value: width }),\n ...evaluateNonTrue({ key: \"outputType\", value: outputType }),\n ...evaluateNonTrue({ key: \"outputFormat\", value: outputFormat }),\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n ...evaluateNonTrue({\n key: \"highThresholdCanny\",\n value: highThresholdCanny,\n }),\n ...evaluateNonTrue({\n key: \"lowThresholdCanny\",\n value: lowThresholdCanny,\n }),\n ...evaluateNonTrue({\n key: \"includeHandsAndFaceOpenPose\",\n value: includeHandsAndFaceOpenPose,\n }),\n });\n lis = this.globalListener({\n taskUUID,\n });\n\n const guideImage = (await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const uploadedImage = this.getSingleMessage({\n taskUUID,\n });\n\n if (!uploadedImage) return;\n\n if (uploadedImage?.error) {\n reject(uploadedImage);\n return true;\n }\n\n if (uploadedImage) {\n // delete this._globalMessages[taskUUID];\n resolve(uploadedImage);\n return true;\n }\n },\n {\n debugKey: \"unprocessed-image\",\n timeoutDuration: this._timeoutDuration,\n }\n )) as IControlNetImage;\n\n lis.destroy();\n\n return guideImage;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e: any) {\n throw e;\n }\n };\n\n requestImageToText = async ({\n inputImage,\n includeCost,\n customTaskUUID,\n retry,\n }: IRequestImageToText): Promise<IImageToText> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const imageUploaded = inputImage\n ? await this.uploadImage(inputImage as File | string)\n : null;\n\n const taskUUID = customTaskUUID || getUUID();\n this.send({\n taskUUID,\n taskType: ETaskType.IMAGE_CAPTION,\n inputImage: imageUploaded?.imageUUID,\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const newReverseClip = this.getSingleMessage({\n taskUUID,\n });\n\n if (!newReverseClip) return;\n\n if (newReverseClip?.error) {\n reject(newReverseClip);\n return true;\n }\n\n if (newReverseClip) {\n delete this._globalMessages[taskUUID];\n resolve(newReverseClip);\n return true;\n }\n },\n {\n debugKey: \"remove-image-background\",\n timeoutDuration: this._timeoutDuration,\n }\n );\n\n lis.destroy();\n\n return response as IImageToText;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n removeImageBackground = async ({\n inputImage,\n outputType,\n outputFormat,\n rgba,\n postProcessMask,\n returnOnlyMask,\n alphaMatting,\n alphaMattingForegroundThreshold,\n alphaMattingBackgroundThreshold,\n alphaMattingErodeSize,\n includeCost,\n customTaskUUID,\n retry,\n }: IRemoveImageBackground): Promise<IRemoveImage> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const imageUploaded = inputImage\n ? await this.uploadImage(inputImage as File | string)\n : null;\n\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n taskType: ETaskType.IMAGE_BACKGROUND_REMOVAL,\n taskUUID,\n inputImage: imageUploaded?.imageUUID,\n ...evaluateNonTrue({ key: \"rgba\", value: rgba }),\n ...evaluateNonTrue({\n key: \"postProcessMask\",\n value: postProcessMask,\n }),\n ...evaluateNonTrue({\n key: \"returnOnlyMask\",\n value: returnOnlyMask,\n }),\n ...evaluateNonTrue({ key: \"alphaMatting\", value: alphaMatting }),\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n ...evaluateNonTrue({\n key: \"alphaMattingForegroundThreshold\",\n value: alphaMattingForegroundThreshold,\n }),\n ...evaluateNonTrue({\n key: \"alphaMattingBackgroundThreshold\",\n value: alphaMattingBackgroundThreshold,\n }),\n ...evaluateNonTrue({\n key: \"alphaMattingErodeSize\",\n value: alphaMattingErodeSize,\n }),\n ...evaluateNonTrue({ key: \"outputType\", value: outputType }),\n ...evaluateNonTrue({ key: \"outputFormat\", value: outputFormat }),\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const newRemoveBackground = this.getSingleMessage({ taskUUID });\n\n if (!newRemoveBackground) return;\n\n if (newRemoveBackground?.error) {\n reject(newRemoveBackground);\n return true;\n }\n\n if (newRemoveBackground) {\n delete this._globalMessages[taskUUID];\n resolve(newRemoveBackground);\n return true;\n }\n },\n {\n debugKey: \"remove-image-background\",\n timeoutDuration: this._timeoutDuration,\n }\n );\n\n lis.destroy();\n\n return response as IImage;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n upscaleGan = async ({\n inputImage,\n upscaleFactor,\n outputType,\n outputFormat,\n includeCost,\n customTaskUUID,\n retry,\n }: IUpscaleGan): Promise<IImage> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n let imageUploaded;\n\n imageUploaded = await this.uploadImage(inputImage as File | string);\n\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n taskUUID,\n inputImage: imageUploaded?.imageUUID,\n taskType: ETaskType.IMAGE_UPSCALE,\n upscaleFactor,\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n ...(outputType ? { outputType } : {}),\n ...(outputFormat ? { outputFormat } : {}),\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const newUpscaleGan = this.getSingleMessage({ taskUUID });\n if (!newUpscaleGan) return;\n\n if (newUpscaleGan?.error) {\n reject(newUpscaleGan);\n return true;\n }\n\n if (newUpscaleGan) {\n delete this._globalMessages[taskUUID];\n resolve(newUpscaleGan);\n return true;\n }\n },\n { debugKey: \"upscale-gan\", timeoutDuration: this._timeoutDuration }\n );\n\n lis.destroy();\n\n return response as IImage;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n enhancePrompt = async ({\n prompt,\n promptMaxLength = 380,\n promptVersions = 1,\n includeCost,\n customTaskUUID,\n retry,\n }: IPromptEnhancer): Promise<IEnhancedPrompt[]> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n prompt,\n taskUUID,\n promptMaxLength,\n promptVersions,\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n taskType: ETaskType.PROMPT_ENHANCE,\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const reducedPrompt: IEnhancedPrompt[] =\n this._globalMessages[taskUUID];\n\n if ((reducedPrompt as any)?.error) {\n reject(reducedPrompt as any);\n return true;\n }\n\n if (reducedPrompt?.length >= promptVersions) {\n delete this._globalMessages[taskUUID];\n resolve(reducedPrompt);\n return true;\n }\n },\n {\n debugKey: \"enhance-prompt\",\n timeoutDuration: this._timeoutDuration,\n }\n );\n\n lis.destroy();\n return response as IEnhancedPrompt[];\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n modelUpload = async (payload: TAddModel) => {\n // This is written to destructure the payload from the additional parameters\n const { onUploadStream, retry, customTaskUUID, ...addModelPayload } =\n payload;\n\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n ...addModelPayload,\n taskUUID,\n taskType: ETaskType.MODEL_UPLOAD,\n });\n\n let result: IAddModelResponse;\n let errorResult: IErrorResponse;\n\n lis = this.listenToUpload({\n taskUUID,\n onUploadStream: (response, error) => {\n onUploadStream?.(response, error);\n if (response?.status === \"ready\") {\n result = response;\n } else if (error) {\n errorResult = error;\n }\n },\n });\n\n const modelUploadResponse = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n if (result) {\n resolve(result);\n return true;\n } else if (errorResult) {\n reject(errorResult);\n return false;\n }\n },\n {\n shouldThrowError: false,\n timeoutDuration: 60 * 60 * 1000,\n }\n );\n\n return modelUploadResponse as IAddModelResponse | IErrorResponse;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n photoMaker = async (\n payload: TPhotoMaker\n ): Promise<TPhotoMakerResponse[] | undefined> => {\n // This is written to destructure the payload from the additional parameters\n const {\n onPartialImages,\n retry,\n customTaskUUID,\n numberResults,\n ...photoMakerPayload\n } = payload;\n\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n let taskUUIDs: string[] = [];\n let retryCount = 0;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n retryCount++;\n const imagesWithSimilarTask = this._globalImages.filter((img) =>\n taskUUIDs.includes(img.taskUUID)\n );\n\n const taskUUID = customTaskUUID || getUUID();\n taskUUIDs.push(taskUUID);\n\n const imageRemaining = numberResults - imagesWithSimilarTask.length;\n\n this.send({\n ...photoMakerPayload,\n numberResults: imageRemaining,\n taskUUID,\n taskType: ETaskType.PHOTO_MAKER,\n });\n\n lis = this.listenToImages({\n onPartialImages,\n taskUUID: taskUUID,\n groupKey: LISTEN_TO_IMAGES_KEY.REQUEST_IMAGES,\n positivePrompt: photoMakerPayload.positivePrompt,\n // negativePrompt: payload.ne,\n });\n\n const promise = await this.getSimilarImages({\n taskUUID: taskUUIDs,\n numberResults,\n lis,\n });\n\n lis.destroy();\n\n return promise as TPhotoMakerResponse[];\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n if ((e as any).taskUUID) {\n throw e;\n }\n if (retryCount >= totalRetry) {\n return this.handleIncompleteImages({\n taskUUIDs,\n error: e,\n }) as TPhotoMakerResponse[];\n }\n }\n };\n\n modelSearch = async (\n payload: TModelSearch\n ): Promise<TModelSearchResponse> => {\n return this.baseSingleRequest({\n payload: {\n ...payload,\n extra: true,\n taskType: ETaskType.MODEL_SEARCH,\n },\n debugKey: \"model-search\",\n });\n };\n\n imageMasking = async (\n payload: TImageMasking\n ): Promise<TImageMaskingResponse> => {\n return this.baseSingleRequest({\n payload: {\n ...payload,\n taskType: ETaskType.IMAGE_MASKING,\n },\n debugKey: \"image-masking\",\n });\n };\n\n protected baseSingleRequest = async <T>({\n payload,\n debugKey,\n }: {\n payload: Record<string, any>;\n debugKey: string;\n }): Promise<T> => {\n const { retry, customTaskUUID, ...restPayload } = payload;\n\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n ...restPayload,\n taskUUID,\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const response = this.getSingleMessage({ taskUUID });\n if (!response) return;\n\n if (response?.error) {\n reject(response);\n return true;\n }\n\n if (response) {\n delete this._globalMessages[taskUUID];\n resolve(response);\n return true;\n }\n },\n {\n debugKey,\n timeoutDuration: this._timeoutDuration,\n }\n );\n\n lis.destroy();\n return response as T;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n async ensureConnection() {\n let isConnected = this.connected();\n\n if (isConnected || this._url === BASE_RUNWARE_URLS.TEST) return;\n\n const retryInterval = 2000;\n const pollingInterval = 200;\n // const pollingInterval = this._sdkType === SdkType.CLIENT ? 200 : 2000;\n\n try {\n if (this._invalidAPIkey) throw this._invalidAPIkey;\n\n return new Promise((resolve, reject) => {\n // const isConnected =\n let retry = 0;\n const MAX_RETRY = 30;\n\n // Retry every (retryInterval % retry) => 60s\n // every 20 seconds (ie. => retry is 10 (20s), retry is 20 (40s))\n const SHOULD_RETRY = retry % 10 === 0;\n\n let retryIntervalId: any;\n let pollingIntervalId: any;\n\n const clearAllIntervals = () => {\n clearInterval(retryIntervalId);\n clearInterval(pollingIntervalId);\n };\n\n if (this._sdkType === SdkType.SERVER) {\n retryIntervalId = setInterval(async () => {\n try {\n const hasConnected = this.connected();\n\n if (hasConnected) {\n clearAllIntervals();\n resolve(true);\n } else if (retry >= MAX_RETRY) {\n clearAllIntervals();\n reject(new Error(\"Retry timed out\"));\n } else {\n if (SHOULD_RETRY) {\n this.connect();\n }\n retry++;\n }\n } catch (error) {\n clearAllIntervals();\n reject(error);\n }\n }, retryInterval);\n }\n\n pollingIntervalId = setInterval(async () => {\n const hasConnected = this.connected();\n\n if (hasConnected) {\n clearAllIntervals();\n resolve(true);\n return;\n }\n if (!!this._invalidAPIkey) {\n clearAllIntervals();\n reject(this._invalidAPIkey);\n return;\n }\n }, pollingInterval);\n });\n } catch (e) {\n throw (\n this._invalidAPIkey ??\n \"Could not connect to server. Ensure your API key is correct\"\n );\n }\n }\n\n private async getSimilarImages({\n taskUUID,\n numberResults,\n shouldThrowError,\n lis,\n }: {\n taskUUID: string | string[];\n numberResults: number;\n shouldThrowError?: boolean;\n lis: any;\n }): Promise<IImage[] | IError> {\n return (await getIntervalWithPromise(\n ({ resolve, reject, intervalId }) => {\n const taskUUIDs = Array.isArray(taskUUID) ? taskUUID : [taskUUID];\n const imagesWithSimilarTask = this._globalImages.filter((img) =>\n taskUUIDs.includes(img.taskUUID)\n );\n\n if (this._globalError) {\n const newData = this._globalError;\n this._globalError = undefined;\n // throw errorData[0]\n clearInterval(intervalId);\n reject<IError>?.(newData);\n return true;\n }\n // onPartialImages?.(imagesWithSimilarTask)\n else if (imagesWithSimilarTask.length >= numberResults) {\n // lis?.destroy();\n clearInterval(intervalId);\n this._globalImages = this._globalImages.filter(\n (img) => !taskUUIDs.includes(img.taskUUID)\n );\n resolve<IImage[]>([...imagesWithSimilarTask].slice(0, numberResults));\n return true;\n // Resolve the promise with the data\n }\n },\n {\n debugKey: \"getting images\",\n shouldThrowError,\n timeoutDuration: this._timeoutDuration,\n }\n )) as IImage[];\n }\n\n private getSingleMessage = ({ taskUUID }: { taskUUID: string }) => {\n const value = this._globalMessages[taskUUID]?.[0];\n const errorValue = this._globalMessages[taskUUID];\n if (!value && !errorValue) return null;\n return errorValue?.error ? errorValue : value;\n };\n\n private handleIncompleteImages({\n taskUUIDs,\n error,\n }: {\n taskUUIDs: string[];\n error: any;\n }) {\n const imagesWithSimilarTask = this._globalImages.filter((img) =>\n taskUUIDs.includes(img.taskUUID)\n );\n if (imagesWithSimilarTask.length > 1) {\n this._globalImages = this._globalImages.filter(\n (img) => !taskUUIDs.includes(img.taskUUID)\n );\n return imagesWithSimilarTask;\n } else {\n throw error;\n }\n }\n\n disconnect = async () => {\n this._shouldReconnect = false;\n this._ws?.terminate?.();\n this._ws?.close?.();\n };\n\n private connected = () =>\n this.isWebsocketReadyState() && !!this._connectionSessionUUID;\n //end of data\n}\n","import { RunwareBase } from \"./Runware-base\";\nimport ReconnectingWebsocket from \"./reconnect\";\nimport { ReconnectingWebsocketProps, RunwareBaseType } from \"./types\";\n\nexport class RunwareClient extends RunwareBase {\n constructor(props: RunwareBaseType) {\n const { shouldReconnect, ...rest } = props;\n\n super(rest);\n this._ws = new (ReconnectingWebsocket as any)(\n this._url\n ) as ReconnectingWebsocketProps;\n this.connect();\n }\n}\n","// @ts-ignore\n// import ReconnectingWebsocket from \"./reconnect\";\nimport WebSocket from \"ws\";\n\nimport { RunwareBase } from \"./Runware-base\";\nimport { ETaskType, RunwareBaseType, SdkType } from \"./types\";\nimport { delay } from \"./utils\";\n\n// let allImages: IImage[] = [];\n\nexport class RunwareServer extends RunwareBase {\n _instantiated: boolean = false;\n _listeners: any[] = [];\n _reconnectingIntervalId: null | any = null;\n _pingTimeout: any;\n _pongListener: any;\n\n constructor(props: RunwareBaseType) {\n super(props);\n\n this._sdkType = SdkType.SERVER;\n this.connect();\n }\n\n // protected addListener({\n // lis,\n // check,\n // groupKey,\n // }: {\n // lis: (v: any) => any;\n // check: (v: any) => any;\n // groupKey?: string;\n // }) {\n // const listener = (msg: any) => {\n // if (msg?.error) {\n // lis(msg);\n // } else if (check(msg)) {\n // lis(msg);\n // }\n // };\n // const groupListener = { key: getUUID(), listener, groupKey };\n // this._listeners.push(groupListener);\n // const destroy = () => {\n // this._listeners = removeListener(this._listeners, groupListener);\n // };\n\n // return {\n // destroy,\n // };\n // }\n\n protected async connect() {\n if (!this._url) return;\n\n this.resetConnection();\n\n this._ws = new WebSocket(this._url, {\n perMessageDeflate: false,\n });\n\n // delay(1);\n\n this._ws.on(\"error\", () => {});\n this._ws.on(\"close\", () => {\n this.handleClose();\n });\n\n this._ws.on(\"open\", () => {\n if (this._reconnectingIntervalId) {\n clearInterval(this._reconnectingIntervalId);\n }\n if (this._connectionSessionUUID && this.isWebsocketReadyState()) {\n this.send({\n taskType: ETaskType.AUTHENTICATION,\n apiKey: this._apiKey,\n connectionSessionUUID: this._connectionSessionUUID,\n });\n } else {\n if (this.isWebsocketReadyState()) {\n this.send({\n apiKey: this._apiKey,\n taskType: ETaskType.AUTHENTICATION,\n });\n }\n }\n\n this.addListener({\n taskUUID: ETaskType.AUTHENTICATION,\n lis: (m) => {\n if (m?.error) {\n this._invalidAPIkey = m;\n return;\n }\n this._connectionSessionUUID =\n m?.[ETaskType.AUTHENTICATION]?.[0]?.connectionSessionUUID;\n this._invalidAPIkey = undefined;\n },\n });\n });\n\n this._ws.on(\"message\", (e: any, isBinary: any) => {\n const data = isBinary ? e : e?.toString();\n if (!data) return;\n const m = JSON.parse(data);\n\n // console.log(\"response\", JSON.stringify(m, null, 4));\n\n this._listeners.forEach((lis) => {\n const result = lis.listener(m);\n if (result) {\n return;\n }\n });\n });\n }\n\n protected send = (msg: Object) => {\n // console.log(\"message\", JSON.stringify(msg, null, 4));\n\n this._ws.send(JSON.stringify([msg]));\n };\n\n protected handleClose() {\n if (this._invalidAPIkey) {\n return;\n }\n if (this._reconnectingIntervalId) {\n clearInterval(this._reconnectingIntervalId);\n }\n\n if (this._shouldReconnect) {\n setTimeout(() => this.connect(), 1000);\n }\n // this._reconnectingIntervalId = setInterval(() => this.connect(), 1000);\n }\n\n protected resetConnection = () => {\n if (this._ws) {\n this._listeners.forEach((list) => {\n list?.destroy?.();\n });\n this._ws.removeAllListeners(); // Remove all listeners\n if (this._ws.readyState === 1) {\n this._ws.terminate();\n this._ws.close(); // Attempt to close gracefully\n }\n\n this._ws = null;\n this._listeners = [];\n }\n };\n\n protected heartBeat() {\n clearTimeout(this._pingTimeout);\n\n this._pingTimeout = setTimeout(() => {\n if (this.isWebsocketReadyState()) {\n this.send({ ping: true });\n }\n }, 5000);\n }\n\n //end of data\n}\n","// @ts-ignore\nimport { RunwareClient } from \"./Runware-client\";\nimport { RunwareServer } from \"./Runware-server\";\n\nlet Runware: typeof RunwareClient | typeof RunwareServer;\n\nif (typeof window === \"undefined\") {\n Runware = RunwareServer;\n} else {\n Runware = RunwareClient;\n}\n\nexport { Runware };\n"],"mappings":"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","names":["require_reconnect","__commonJSMin","exports","module","isWebSocket","constructor","isGlobalWebSocket","getDefaultOptions","bypassProperty","src","dst","name","value","initReconnectionDelay","config","updateReconnectionDelay","previousDelay","newDelay","LEVEL_0_EVENTS","reassignEventListeners","ws","oldWs","listeners","type","listener","options","ReconnectingWebsocket","url","protocols","connectingTimeout","reconnectDelay","retriesCount","shouldRetry","key","log","params","emitError","code","msg","err","fn","handleClose","connect","reason","keepClosed","fastClose","delay","fakeCloseEvent","data","l","Runware_exports","__export","EControlMode","EModelArchitecture","EModelConditioning","EModelFormat","EModelType","EOpenPosePreProcessor","EPhotoMakerEnum","EPreProcessor","EPreProcessorGroup","ETaskType","Environment","Runware","RunwareClient","RunwareServer","SdkType","__toCommonJS","Environment","SdkType","ETaskType","EControlMode","EPreProcessorGroup","EPreProcessor","EOpenPosePreProcessor","EModelFormat","EModelArchitecture","EModelType","EModelConditioning","EPhotoMakerEnum","import_uuid","TIMEOUT_DURATION","MINIMUM_TIMEOUT_DURATION","POLLING_INTERVAL","BASE_RUNWARE_URLS","removeFromAray","col","targetElem","i","getIntervalWithPromise","callback","debugKey","timeoutDuration","shouldThrowError","resolve","reject","timeoutId","intervalId","fileToBase64","file","reader","getUUID","uuidv4","isValidUUID","uuid","validateUUID","accessDeepObject","key","data","useZero","shouldReturnString","acc","curr","returnZero","currentValue","index","delay","time","milliseconds","resolve","removeListener","listeners","listener","lis","evaluateNonTrue","key","value","asyncRetry","apiCall","options","delayInSeconds","callback","maxRetries","error","delay","RunwareBase","apiKey","url","BASE_RUNWARE_URLS","shouldReconnect","globalMaxRetries","timeoutDuration","TIMEOUT_DURATION","msg","file","asyncRetry","taskUUID","getUUID","isValidUUID","imageBase64","fileToBase64","inputImage","preProcessorType","height","width","outputType","outputFormat","highThresholdCanny","lowThresholdCanny","includeHandsAndFaceOpenPose","includeCost","customTaskUUID","retry","totalRetry","lis","image","evaluateNonTrue","guideImage","getIntervalWithPromise","resolve","reject","uploadedImage","e","imageUploaded","response","newReverseClip","rgba","postProcessMask","returnOnlyMask","alphaMatting","alphaMattingForegroundThreshold","alphaMattingBackgroundThreshold","alphaMattingErodeSize","newRemoveBackground","upscaleFactor","newUpscaleGan","prompt","promptMaxLength","promptVersions","reducedPrompt","payload","onUploadStream","addModelPayload","result","errorResult","error","onPartialImages","numberResults","photoMakerPayload","taskUUIDs","retryCount","imagesWithSimilarTask","img","imageRemaining","promise","debugKey","restPayload","value","errorValue","props","instance","groupKey","listener","arrayMessage","arrayErrors","filteredMessage","v","groupListener","removeListener","m","data","removeFromAray","positivePrompt","negativePrompt","images","accessDeepObject","uploadEndpoint","checkNSFW","seedImage","maskImage","strength","model","steps","scheduler","seed","CFGScale","clipSkip","usePromptWeighting","controlNet","lora","refiner","maskMargin","requestObject","seedImageUUID","maskImageUUID","controlNetData","uploadedMaskInitiator","i","controlData","endStep","startStep","weight","controlMode","startStepPercentage","endStepPercentage","controlNetModel","newRequestObject","retryInterval","pollingInterval","MAX_RETRY","SHOULD_RETRY","retryIntervalId","pollingIntervalId","clearAllIntervals","shouldThrowError","intervalId","newData","import_reconnect","RunwareClient","RunwareBase","props","shouldReconnect","rest","ReconnectingWebsocket","import_ws","RunwareServer","RunwareBase","props","msg","list","WebSocket","m","isBinary","data","lis","Runware","RunwareServer","RunwareClient"]}
|
|
1
|
+
{"version":3,"sources":["../Runware/reconnect.ts","../Runware/index.ts","../Runware/types.ts","../Runware/utils.ts","../Runware/async-retry.ts","../Runware/Runware-base.ts","../Runware/Runware-client.ts","../Runware/Runware-server.ts","../Runware/Runware.ts"],"sourcesContent":["// @ts-nocheck\n/*\nReady state constants\nhttps://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Ready_state_constants\n\nCONNECTING 0 The connection is not yet open.\nOPEN 1 The connection is open and ready to communicate.\nCLOSING 2 The connection is in the process of closing.\nCLOSED 3 The connection is closed or couldn't be opened.\n*/\ntype Options = {\n constructor?: new (url: string, protocols?: string | string[]) => WebSocket;\n maxReconnectionDelay?: number;\n minReconnectionDelay?: number;\n reconnectionDelayGrowFactor?: number;\n connectionTimeout?: number;\n maxRetries?: number;\n debug?: boolean;\n};\n\nconst isWebSocket = (constructor) => constructor && constructor.CLOSING === 2;\n\nconst isGlobalWebSocket = () =>\n typeof WebSocket !== \"undefined\" && isWebSocket(WebSocket);\n\nconst getDefaultOptions = () =>\n <Options>{\n constructor: isGlobalWebSocket() ? WebSocket : null,\n maxReconnectionDelay: 10000,\n minReconnectionDelay: 1500,\n reconnectionDelayGrowFactor: 1.3,\n connectionTimeout: 4000,\n maxRetries: Infinity,\n debug: false,\n };\n\nconst bypassProperty = (src, dst, name: string) => {\n Object.defineProperty(dst, name, {\n get: () => src[name],\n set: (value) => {\n src[name] = value;\n },\n enumerable: true,\n configurable: true,\n });\n};\n\nconst initReconnectionDelay = (config: Options) =>\n config.minReconnectionDelay + Math.random() * config.minReconnectionDelay;\n\nconst updateReconnectionDelay = (config: Options, previousDelay: number) => {\n const newDelay = previousDelay * config.reconnectionDelayGrowFactor;\n return newDelay > config.maxReconnectionDelay\n ? config.maxReconnectionDelay\n : newDelay;\n};\n\nconst LEVEL_0_EVENTS = [\"onopen\", \"onclose\", \"onmessage\", \"onerror\"];\n\nconst reassignEventListeners = (ws: WebSocket, oldWs, listeners) => {\n Object.keys(listeners).forEach((type) => {\n listeners[type].forEach(([listener, options]) => {\n ws.addEventListener(type, listener, options);\n });\n });\n if (oldWs) {\n LEVEL_0_EVENTS.forEach((name) => {\n ws[name] = oldWs[name];\n });\n }\n};\n\nconst ReconnectingWebsocket = function (\n url: string,\n protocols?: string | string[],\n options = <Options>{}\n) {\n let ws: WebSocket;\n let connectingTimeout;\n let reconnectDelay = 0;\n let retriesCount = 0;\n let shouldRetry = true;\n const listeners: any = {};\n\n // require new to construct\n if (!(this instanceof ReconnectingWebsocket)) {\n throw new TypeError(\n \"Failed to construct 'ReconnectingWebSocket': Please use the 'new' operator\"\n );\n }\n\n // Set config. Not using `Object.assign` because of IE11\n const config = getDefaultOptions();\n Object.keys(config)\n .filter((key) => options.hasOwnProperty(key))\n .forEach((key) => (config[key] = options[key]));\n\n if (!isWebSocket(config.constructor)) {\n throw new TypeError(\n \"Invalid WebSocket constructor. Set `options.constructor`\"\n );\n }\n\n const log = config.debug\n ? (...params) => console.log(\"RWS:\", ...params)\n : () => {};\n\n /**\n * Not using dispatchEvent, otherwise we must use a DOM Event object\n * Deferred because we want to handle the close event before this\n */\n const emitError = (code: string, msg: string) =>\n setTimeout(() => {\n const err = <any>new Error(msg);\n err.code = code;\n if (Array.isArray(listeners.error)) {\n listeners.error.forEach(([fn]) => fn(err));\n }\n if (ws.onerror) {\n ws.onerror(err);\n }\n }, 0);\n\n const handleClose = () => {\n log(\"close\");\n retriesCount++;\n log(\"retries count:\", retriesCount);\n if (retriesCount > config.maxRetries) {\n emitError(\"EHOSTDOWN\", \"Too many failed connection attempts\");\n return;\n }\n if (!reconnectDelay) {\n reconnectDelay = initReconnectionDelay(config);\n } else {\n reconnectDelay = updateReconnectionDelay(config, reconnectDelay);\n }\n log(\"reconnectDelay:\", reconnectDelay);\n\n if (shouldRetry) {\n setTimeout(connect, reconnectDelay);\n }\n };\n\n const connect = () => {\n log(\"connect\");\n const oldWs = ws;\n ws = new (<any>config.constructor)(url, protocols);\n\n connectingTimeout = setTimeout(() => {\n log(\"timeout\");\n ws.close();\n emitError(\"ETIMEDOUT\", \"Connection timeout\");\n }, config.connectionTimeout);\n\n log(\"bypass properties\");\n for (let key in ws) {\n // @todo move to constant\n if (\n [\"addEventListener\", \"removeEventListener\", \"close\", \"send\"].indexOf(\n key\n ) < 0\n ) {\n bypassProperty(ws, this, key);\n }\n }\n\n ws.addEventListener(\"open\", () => {\n clearTimeout(connectingTimeout);\n log(\"open\");\n reconnectDelay = initReconnectionDelay(config);\n log(\"reconnectDelay:\", reconnectDelay);\n retriesCount = 0;\n });\n\n ws.addEventListener(\"close\", handleClose);\n\n reassignEventListeners(ws, oldWs, listeners);\n };\n\n log(\"init\");\n connect();\n\n this.close = (\n code = 1000,\n reason = \"\",\n { keepClosed = false, fastClose = true, delay = 0 } = {}\n ) => {\n if (delay) {\n reconnectDelay = delay;\n }\n shouldRetry = !keepClosed;\n\n ws.close(code, reason);\n\n if (fastClose) {\n const fakeCloseEvent = <CloseEvent>{\n code,\n reason,\n wasClean: true,\n };\n\n // execute close listeners soon with a fake closeEvent\n // and remove all close listeners from the WS instance\n // so they don't get fired on the real close.\n\n handleClose();\n\n if (Array.isArray(listeners.close)) {\n listeners.close.forEach(([listener, options]) => {\n listener(fakeCloseEvent);\n ws.removeEventListener(\"close\", listener, options);\n });\n }\n\n if (ws.onclose) {\n ws.onclose(fakeCloseEvent);\n ws.onclose = null;\n }\n }\n };\n\n this.send = (data) => {\n ws.send(data);\n };\n\n this.addEventListener = (\n type: string,\n listener: EventListener,\n options: any\n ) => {\n if (Array.isArray(listeners[type])) {\n if (!listeners[type].some(([l]) => l === listener)) {\n listeners[type].push([listener, options]);\n }\n } else {\n listeners[type] = [[listener, options]];\n }\n ws.addEventListener(type, listener, options);\n };\n\n this.removeEventListener = (\n type: string,\n listener: EventListener,\n options: any\n ) => {\n if (Array.isArray(listeners[type])) {\n listeners[type] = listeners[type].filter(([l]) => l !== listener);\n }\n ws.removeEventListener(type, listener, options);\n };\n};\n\nexport = ReconnectingWebsocket;\n","export * from \"./Runware-client\";\nexport * from \"./types\";\n\nexport * from \"./Runware-server\";\nexport * from \"./Runware\";\n","export enum Environment {\n PRODUCTION = \"PRODUCTION\",\n DEVELOPMENT = \"DEVELOPMENT\",\n TEST = \"TEST\",\n}\nexport enum SdkType {\n CLIENT = \"CLIENT\",\n SERVER = \"SERVER\",\n}\n\nexport enum ETaskType {\n IMAGE_INFERENCE = \"imageInference\",\n IMAGE_UPLOAD = \"imageUpload\",\n IMAGE_UPSCALE = \"imageUpscale\",\n IMAGE_BACKGROUND_REMOVAL = \"imageBackgroundRemoval\",\n IMAGE_CAPTION = \"imageCaption\",\n IMAGE_CONTROL_NET_PRE_PROCESS = \"imageControlNetPreProcess\",\n PROMPT_ENHANCE = \"promptEnhance\",\n AUTHENTICATION = \"authentication\",\n MODEL_UPLOAD = \"modelUpload\",\n PHOTO_MAKER = \"photoMaker\",\n MODEL_SEARCH = \"modelSearch\",\n IMAGE_MASKING = \"imageMasking\",\n}\n\nexport type RunwareBaseType = {\n apiKey: string;\n url?: string;\n shouldReconnect?: boolean;\n globalMaxRetries?: number;\n timeoutDuration?: number;\n};\n\nexport type IOutputType = \"base64Data\" | \"dataURI\" | \"URL\";\nexport type IOutputFormat = \"JPG\" | \"PNG\" | \"WEBP\";\n\nexport interface IImage {\n taskType: ETaskType;\n imageUUID: string;\n inputImageUUID?: string;\n taskUUID: string;\n imageURL?: string;\n imageBase64Data?: string;\n imageDataURI?: string;\n NSFWContent?: boolean;\n cost?: number;\n seed: number;\n}\n\nexport interface ITextToImage extends IImage {\n positivePrompt?: string;\n negativePrompt?: string;\n}\nexport interface IControlNetImage {\n taskUUID: string;\n inputImageUUID: string;\n guideImageUUID: string;\n guideImageURL?: string;\n guideImageBase64Data?: string;\n guideImageDataURI?: string;\n cost?: number;\n}\n\ninterface ILora {\n model: string | number;\n weight: number;\n}\n\nexport enum EControlMode {\n BALANCED = \"balanced\",\n PROMPT = \"prompt\",\n CONTROL_NET = \"controlnet\",\n}\n\nexport type IControlNetGeneral = {\n model: string;\n guideImage: string | File;\n weight?: number;\n startStep?: number;\n startStepPercentage?: number;\n endStep?: number;\n endStepPercentage?: number;\n controlMode: EControlMode;\n};\nexport type IControlNetPreprocess = {\n inputImage: string | File;\n preProcessorType: EPreProcessorGroup;\n height?: number;\n width?: number;\n outputType?: IOutputType;\n outputFormat?: IOutputFormat;\n highThresholdCanny?: number;\n lowThresholdCanny?: number;\n includeHandsAndFaceOpenPose?: boolean;\n includeCost?: boolean;\n customTaskUUID?: string;\n retry?: number;\n};\n\n// export type IControlNetA = RequireOnlyOne<\n// IControlNetGeneral,\n// \"guideImage\" | \"guideImageUnprocessed\"\n// >;\n\n// export type IControlNetCanny = IControlNetA & {\n// preprocessor: \"canny\";\n// lowThresholdCanny: Number;\n// highThresholdCanny: Number;\n// outputType?: IOutputType;\n// };\n\n// export type IControlNetHandsAndFace = IControlNetA & {\n// preprocessor: keyof typeof EOpenPosePreProcessor;\n// includeHandsAndFaceOpenPose: boolean;\n// outputType?: IOutputType;\n// };\n\nexport type IControlNet = IControlNetGeneral;\n\nexport type IControlNetWithUUID = Omit<IControlNet, \"guideImage\"> & {\n guideImage?: string;\n};\n\nexport interface IError {\n error: boolean;\n errorMessage: string;\n taskUUID: string;\n}\n\nexport type TPromptWeighting = \"compel\" | \"sdEmbeds\";\n\nexport interface IRequestImage {\n outputType?: IOutputType;\n outputFormat?: IOutputFormat;\n uploadEndpoint?: string;\n checkNSFW?: boolean;\n positivePrompt: string;\n negativePrompt?: string;\n seedImage?: File | string;\n maskImage?: File | string;\n strength?: number;\n height?: number;\n width?: number;\n model: number | string;\n steps?: number;\n scheduler?: string;\n seed?: number;\n maskMargin?: number;\n CFGScale?: number;\n clipSkip?: number;\n /**\n * @deprecated The usePromptWeighting should not be used, use promptWeighting instead\n */\n usePromptWeighting?: boolean;\n promptWeighting?: TPromptWeighting;\n numberResults?: number; // default to 1\n controlNet?: IControlNet[];\n lora?: ILora[];\n includeCost?: boolean;\n customTaskUUID?: string;\n\n // imageSize?: number;\n onPartialImages?: (images: IImage[], error?: IError) => void;\n retry?: number;\n refiner?: IRefiner;\n // gScale?: number;\n}\n\nexport interface IRefiner {\n model: string;\n startStep?: number;\n startStepPercentage?: number;\n}\nexport interface IRequestImageToText {\n inputImage?: File | string;\n includeCost?: boolean;\n customTaskUUID?: string;\n retry?: number;\n}\nexport interface IImageToText {\n taskType: ETaskType;\n taskUUID: string;\n text: string;\n cost?: number;\n}\n\nexport interface IRemoveImageBackground extends IRequestImageToText {\n outputType?: IOutputType;\n outputFormat?: IOutputFormat;\n rgba?: number[];\n postProcessMask?: boolean;\n returnOnlyMask?: boolean;\n alphaMatting?: boolean;\n alphaMattingForegroundThreshold?: number;\n alphaMattingBackgroundThreshold?: number;\n alphaMattingErodeSize?: number;\n includeCost?: boolean;\n retry?: number;\n}\n\nexport interface IRemoveImage {\n taskType: ETaskType;\n taskUUID: string;\n imageUUID: string;\n inputImageUUID: string;\n imageURL?: string;\n imageBase64Data?: string;\n imageDataURI?: string;\n cost?: number;\n}\n\nexport interface IPromptEnhancer {\n promptMaxLength?: number;\n promptVersions?: number;\n prompt: string;\n includeCost?: boolean;\n customTaskUUID?: string;\n retry?: number;\n}\n\nexport interface IEnhancedPrompt extends IImageToText {}\n\nexport interface IUpscaleGan {\n inputImage: File | string;\n upscaleFactor: number;\n outputType?: IOutputType;\n outputFormat?: IOutputFormat;\n includeCost?: boolean;\n customTaskUUID?: string;\n retry?: number;\n}\n\nexport type ReconnectingWebsocketProps = {\n addEventListener: (\n type: string,\n listener: EventListener,\n options: any\n ) => void;\n send: (data: any) => void;\n} & WebSocket;\n\nexport type UploadImageType = {\n imageURL: string;\n imageUUID: string;\n taskUUID: string;\n taskType: ETaskType;\n};\n\nexport type GetWithPromiseCallBackType = ({\n resolve,\n reject,\n intervalId,\n}: {\n resolve: <T>(value: T) => void;\n reject: <T>(value: T) => void;\n intervalId: any;\n}) => boolean | undefined;\n\nexport enum EPreProcessorGroup {\n \"canny\" = \"canny\",\n \"depth\" = \"depth\",\n \"mlsd\" = \"mlsd\",\n \"normalbae\" = \"normalbae\",\n \"openpose\" = \"openpose\",\n \"tile\" = \"tile\",\n \"seg\" = \"seg\",\n \"lineart\" = \"lineart\",\n \"lineart_anime\" = \"lineart_anime\",\n \"shuffle\" = \"shuffle\",\n \"scribble\" = \"scribble\",\n \"softedge\" = \"softedge\",\n}\n\nexport enum EPreProcessor {\n \"canny\" = \"canny\",\n \"depth_leres\" = \"depth_leres\",\n \"depth_midas\" = \"depth_midas\",\n \"depth_zoe\" = \"depth_zoe\",\n \"inpaint_global_harmonious\" = \"inpaint_global_harmonious\",\n \"lineart_anime\" = \"lineart_anime\",\n \"lineart_coarse\" = \"lineart_coarse\",\n \"lineart_realistic\" = \"lineart_realistic\",\n \"lineart_standard\" = \"lineart_standard\",\n \"mlsd\" = \"mlsd\",\n \"normal_bae\" = \"normal_bae\",\n\n \"scribble_hed\" = \"scribble_hed\",\n \"scribble_pidinet\" = \"scribble_pidinet\",\n \"seg_ofade20k\" = \"seg_ofade20k\",\n \"seg_ofcoco\" = \"seg_ofcoco\",\n \"seg_ufade20k\" = \"seg_ufade20k\",\n \"shuffle\" = \"shuffle\",\n \"softedge_hed\" = \"softedge_hed\",\n \"softedge_hedsafe\" = \"softedge_hedsafe\",\n \"softedge_pidinet\" = \"softedge_pidinet\",\n \"softedge_pidisafe\" = \"softedge_pidisafe\",\n \"tile_gaussian\" = \"tile_gaussian\",\n\n \"openpose\" = \"openpose\",\n \"openpose_face\" = \"openpose_face\",\n \"openpose_faceonly\" = \"openpose_faceonly\",\n \"openpose_full\" = \"openpose_full\",\n \"openpose_hand\" = \"openpose_hand\",\n}\n\nexport enum EOpenPosePreProcessor {\n \"openpose\" = \"openpose\",\n \"openpose_face\" = \"openpose_face\",\n \"openpose_faceonly\" = \"openpose_faceonly\",\n \"openpose_full\" = \"openpose_full\",\n \"openpose_hand\" = \"openpose_hand\",\n}\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<\n T,\n Exclude<keyof T, Keys>\n> &\n {\n [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n }[Keys];\n\nexport type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<\n T,\n Exclude<keyof T, Keys>\n> &\n {\n [K in Keys]-?: Required<Pick<T, K>> &\n Partial<Record<Exclude<Keys, K>, undefined>>;\n }[Keys];\n\nexport type ListenerType = {\n key: string;\n listener: (msg: any) => void;\n groupKey?: string;\n};\n\nexport interface IAddModelResponse {\n status: string;\n message: string;\n taskUUID: string;\n air: string;\n taskType: string;\n}\n\nexport interface IErrorResponse {\n code: string;\n message: string;\n parameter: string;\n type: string;\n documentation: string;\n taskUUID: string;\n min?: number;\n max?: number;\n default?: string | number;\n}\n\nexport type TAddModelBaseType = {\n air: string;\n name: string;\n downloadUrl: string;\n uniqueIdentifier: string;\n\n version: string;\n format: EModelFormat;\n architecture: EModelArchitecture;\n heroImageUrl?: string;\n tags?: string[];\n shortDescription?: string;\n comment?: string;\n private: boolean;\n\n // Custom parameters\n customTaskUUID?: string;\n retry?: number;\n onUploadStream?: (\n response?: IAddModelResponse,\n error?: IErrorResponse\n ) => void;\n};\n\nexport type TAddModelControlNet = {\n category: \"controlnet\";\n conditioning: EModelConditioning;\n} & TAddModelBaseType;\n\nexport type TAddModelCheckPoint = {\n category: \"checkpoint\";\n defaultCFGScale?: number;\n defaultStrength: number;\n defaultSteps?: number;\n defaultScheduler?: string;\n type: EModelType;\n} & TAddModelBaseType;\n\nexport type TAddModelLora = {\n category: \"lora\";\n defaultWeight: number;\n positiveTriggerWords?: string;\n} & TAddModelBaseType;\n\nexport type TAddModel =\n | TAddModelCheckPoint\n | TAddModelControlNet\n | TAddModelLora;\n\nexport type TPhotoMaker = {\n model?: string; // this should be hidden for now cause we have a single model\n inputImages: string[];\n style: EPhotoMakerEnum;\n strength?: number;\n positivePrompt: string;\n negativePrompt?: string;\n height: number;\n width: number;\n scheduler?: string;\n steps?: number;\n CFGScale?: number;\n outputFormat?: string;\n includeCost?: boolean;\n numberResults: number;\n seed?: number;\n\n // other options\n customTaskUUID?: string;\n retry?: number;\n onPartialImages?: (images: IImage[], error?: IError) => void;\n};\n\nexport type TPhotoMakerResponse = {\n taskType: string;\n taskUUID: string;\n imageUUID: string;\n NSFWContent: boolean;\n cost: number;\n seed: number;\n imageURL: string;\n positivePrompt: string;\n negativePrompt?: string;\n};\n\nexport enum EModelFormat {\n safetensors = \"safetensors\",\n pickletensor = \"pickletensor\",\n}\n\nexport enum EModelArchitecture {\n flux1d = \"flux1d\",\n flux1s = \"flux1s\",\n pony = \"pony\",\n sdhyper = \"sdhyper\",\n sd1x = \"sd1x\",\n sd1xlcm = \"sd1xlcm\",\n sd3 = \"sd3\",\n sdxl = \"sdxl\",\n sdxllcm = \"sdxllcm\",\n sdxldistilled = \"sdxldistilled\",\n sdxlhyper = \"sdxlhyper\",\n sdxllightning = \"sdxllightning\",\n sdxlturbo = \"sdxlturbo\",\n}\n\nexport enum EModelType {\n base = \"base\",\n inpainting = \"inpainting\",\n pix2pix = \"pix2pix\",\n}\n\nexport enum EModelConditioning {\n canny = \"canny\",\n depth = \"depth\",\n qrcode = \"qrcode\",\n hed = \"hed\",\n scrible = \"scrible\",\n openpose = \"openpose\",\n seg = \"segmentation\",\n openmlsd = \"openmlsd\",\n softedge = \"softedge\",\n normal = \"normal bae\",\n shuffle = \"shuffle\",\n pix2pix = \"pix2pix\",\n inpaint = \"inpaint\",\n lineart = \"line art\",\n sketch = \"sketch\",\n inpaintdepth = \"inpaint depth\",\n tile = \"tile\",\n outfit = \"outfit\",\n blur = \"blur\",\n gray = \"gray\",\n lowquality = \"low quality\",\n}\n\nexport enum EPhotoMakerEnum {\n NoStyle = \"No style\",\n Cinematic = \"Cinematic\",\n DisneyCharacter = \"Disney Character\",\n DigitalArt = \"Digital Art\",\n Photographic = \"Photographic\",\n FantasyArt = \"Fantasy art\",\n Neonpunk = \"Neonpunk\",\n Enhance = \"Enhance\",\n ComicBook = \"Comic book\",\n Lowpoly = \"Lowpoly\",\n LineArt = \"Line art\",\n}\n\nexport type TModelSearch = {\n search: string;\n tags?: string[];\n category?: \"checkpoint\" | \"lora\" | \"controlnet\";\n architecture?: EModelArchitecture;\n limit?: number;\n offset?: number;\n owned?: boolean;\n featured: boolean;\n type: string;\n conditioning: string;\n private: boolean;\n\n // other options\n customTaskUUID?: string;\n retry?: number;\n};\n\nexport type TModel = {\n name: string;\n air: string;\n downloadUrl: string;\n tags: string[];\n heroImage: string;\n category: string;\n floatingPoint: string;\n private: boolean;\n shortDescription: string;\n comment: string;\n positiveTriggerWords: string;\n defaultSteps: number;\n defaultGuidanceScale: number;\n defaultStrength: number;\n defaultVaeId: number;\n updatedDateUnixTimestamp: number;\n version: string;\n conditioning: string;\n defaultScheduler: string;\n defaultCFG: number;\n format: string;\n uniqueIdentifier: string;\n architecture: string;\n type: string;\n nsfw: boolean;\n sourceUrl: string;\n downloadCount: number;\n nsfwLevel: number;\n rating: number;\n ratingCount: number;\n thumbsUpCount: number;\n thumbsDownCount: number;\n defaultEmaEnable: boolean;\n defaultImageSizeId: string;\n compatibleSizeIds: number[];\n};\n\nexport type TModelSearchResponse = {\n results: TModel[];\n taskUUID: string;\n taskType: string;\n totalResults: number;\n};\n\nexport type TImageMasking = {\n model: string;\n inputImage: string;\n confidence?: number;\n maskPadding?: number;\n maskBlur?: number;\n outputFormat?: string;\n outputType?: string;\n includeCost?: boolean;\n uploadEndpoint?: string;\n maxDetections?: number;\n\n customTaskUUID?: string;\n retry?: number;\n};\n\nexport type TImageMaskingResponse = {\n taskType: string;\n taskUUID: string;\n imageUUID: string;\n\n detections: [\n {\n x_min: number;\n y_min: number;\n x_max: number;\n y_max: number;\n }\n ];\n maskImageURL: string;\n cost: number;\n};\n","import {\n EPreProcessor,\n EPreProcessorGroup,\n Environment,\n GetWithPromiseCallBackType,\n IRequestImage,\n} from \"./types\";\nimport { v4 as uuidv4, validate as validateUUID } from \"uuid\";\n\nexport const TIMEOUT_DURATION = 60000; // 120S;\nexport const MINIMUM_TIMEOUT_DURATION = 1000; // 120S;\nconst POLLING_INTERVAL = 100; // 1s;\n\nexport const BASE_RUNWARE_URLS = {\n [Environment.PRODUCTION]: \"wss://ws-api.runware.ai/v1\",\n [Environment.TEST]: \"ws://localhost:8080\",\n};\n\nexport const removeFromAray = <T>(col: T[], targetElem: T) => {\n if (col == null) {\n return;\n }\n let i = col.indexOf(targetElem);\n if (i === -1) {\n return;\n }\n col.splice(i, 1);\n};\n\nexport const getIntervalWithPromise = (\n callback: GetWithPromiseCallBackType,\n {\n debugKey = \"debugKey\",\n timeoutDuration = TIMEOUT_DURATION,\n shouldThrowError = true,\n }: {\n debugKey?: string;\n timeoutDuration?: number;\n shouldThrowError?: boolean;\n }\n) => {\n timeoutDuration =\n timeoutDuration < MINIMUM_TIMEOUT_DURATION\n ? MINIMUM_TIMEOUT_DURATION\n : timeoutDuration;\n\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n if (intervalId) {\n clearInterval(intervalId);\n if (shouldThrowError) {\n reject(`Response could not be received from server for ${debugKey}`);\n }\n }\n clearTimeout(timeoutId);\n // reject();\n }, timeoutDuration);\n\n let intervalId = setInterval(async () => {\n const shouldClear = callback({ resolve, reject, intervalId });\n if (shouldClear) {\n clearInterval(intervalId);\n clearTimeout(timeoutId);\n }\n // resolve(imagesWithSimilarTask); // Resolve the promise with the data\n }, POLLING_INTERVAL); // Check every 1 second (adjust the interval as needed)\n });\n};\n\nexport const fileToBase64 = (file: File) =>\n new Promise((resolve) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = function () {\n resolve(reader.result);\n };\n });\n\n// export const getUUID = () => crypto.randomUUID();\nexport const getUUID = () => uuidv4();\n\nexport const isValidUUID = (uuid: string) => validateUUID(uuid);\n\nconst evaluateToBoolean = (...args: any) => [...args].every((e) => !!e);\n\nexport const compact = (value: any, data: any) => (!!value ? data : {});\n\nexport const getPreprocessorType = (\n processor: EPreProcessor\n): EPreProcessorGroup => {\n const processorGroup = Object.keys(\n EPreProcessorGroup\n ) as EPreProcessorGroup[];\n\n switch (processor) {\n case EPreProcessor.canny:\n return EPreProcessorGroup.canny;\n // break\n case EPreProcessor.depth_leres:\n case EPreProcessor.depth_midas:\n case EPreProcessor.depth_zoe:\n return EPreProcessorGroup.depth;\n // break\n case EPreProcessor.inpaint_global_harmonious:\n return EPreProcessorGroup.depth;\n // break\n case EPreProcessor.lineart_anime:\n return EPreProcessorGroup.lineart_anime;\n // break\n case EPreProcessor.lineart_coarse:\n case EPreProcessor.lineart_realistic:\n case EPreProcessor.lineart_standard:\n return EPreProcessorGroup.lineart;\n // break\n case EPreProcessor.mlsd:\n return EPreProcessorGroup.mlsd;\n // break\n case EPreProcessor.normal_bae:\n return EPreProcessorGroup.normalbae;\n // break\n case EPreProcessor.openpose_face:\n case EPreProcessor.openpose_faceonly:\n case EPreProcessor.openpose_full:\n case EPreProcessor.openpose_hand:\n case EPreProcessor.openpose:\n return EPreProcessorGroup.openpose;\n // break\n case EPreProcessor.scribble_hed:\n case EPreProcessor.scribble_pidinet:\n return EPreProcessorGroup.scribble;\n // break\n case EPreProcessor.seg_ofade20k:\n case EPreProcessor.seg_ofcoco:\n case EPreProcessor.seg_ufade20k:\n return EPreProcessorGroup.seg;\n // break\n case EPreProcessor.shuffle:\n return EPreProcessorGroup.shuffle;\n // break\n case EPreProcessor.softedge_hed:\n case EPreProcessor.softedge_hedsafe:\n case EPreProcessor.softedge_pidinet:\n case EPreProcessor.softedge_pidisafe:\n return EPreProcessorGroup.softedge;\n // break\n case EPreProcessor.tile_gaussian:\n return EPreProcessorGroup.tile;\n // break\n default:\n return EPreProcessorGroup.canny;\n }\n};\n\nexport const accessDeepObject = ({\n key,\n data,\n useZero = true,\n shouldReturnString = false,\n}: {\n key: string;\n data: Record<string, any>;\n useZero?: boolean;\n shouldReturnString?: boolean;\n}) => {\n const splittedKeys = key.split(/\\.|\\[/).map((key) => key.replace(/\\]$/, \"\"));\n\n const value = splittedKeys.reduce((acc, curr) => {\n const returnZero = useZero ? 0 : undefined;\n const currentValue = acc?.[curr];\n\n if (!currentValue) {\n return returnZero;\n }\n if (Array.isArray(currentValue) && /^\\d+$/.test(curr)) {\n const index = parseInt(curr, 10);\n if (index >= 0 && index < currentValue.length) {\n return (acc[curr] = currentValue[index]);\n } else {\n return acc[curr] ?? returnZero;\n }\n } else {\n return acc[curr] ?? returnZero;\n }\n }, data || {});\n\n // if (typeof value === \"object\" && shouldReturnString) {\n // return JSON.stringify(value);\n // }\n return value ?? {};\n};\n\nexport const delay = (time: number, milliseconds = 1000) => {\n return new Promise((resolve) => setTimeout(resolve, time * milliseconds));\n};\n\nexport class MockFile {\n create = function (name: string, size: number, mimeType: string) {\n name = name || \"mock.txt\";\n size = size || 1024;\n mimeType = mimeType || \"plain/txt\";\n\n var blob: any = new Blob([range(size)], { type: mimeType });\n blob.lastModifiedDate = new Date();\n blob.name = name;\n\n return blob;\n };\n}\n\nfunction range(count: number) {\n var output = \"\";\n for (var i = 0; i < count; i++) {\n output += \"a\";\n }\n return output;\n}\n\nexport const RETRY_SDK_COUNTS = {\n GLOBAL: 2,\n REQUEST_IMAGES: 2,\n};\n\nexport const remove1Mutate = (col: any, targetElem: any) => {\n if (col == null) {\n return;\n }\n\n let i = col.indexOf(targetElem);\n if (i === -1) {\n return;\n }\n col.splice(i, 1);\n};\n\nexport const removeListener = (listeners: any[], listener: any) => {\n return listeners.filter((lis) => lis.key !== listener.key);\n};\n\nexport const removeAllKeyListener = ({\n listeners,\n key,\n}: {\n listeners: any[];\n key: any;\n}) => {\n return listeners.filter((lis) => lis?.key !== key);\n};\n\nexport enum LISTEN_TO_IMAGES_KEY {\n REQUEST_IMAGES = \"REQUEST_IMAGES\",\n}\n\nexport const evaluateNonTrue = ({\n key,\n value,\n}: {\n key: string;\n value: any;\n}) => {\n if (!!value || value === 0 || value === false) {\n return { [key]: value };\n } else {\n return {};\n }\n};\n","import { delay } from \"./utils\";\n\nexport const asyncRetry = async (\n apiCall: Function,\n options: {\n maxRetries?: number;\n delayInSeconds?: number;\n callback?: Function;\n } = {}\n) => {\n const { delayInSeconds = 1, callback } = options;\n let maxRetries = options.maxRetries ?? 1;\n while (maxRetries) {\n try {\n const result = await apiCall();\n return result; // Return the result if successful\n } catch (error: any) {\n callback?.();\n maxRetries--;\n if (maxRetries > 0) {\n await delay(delayInSeconds); // Delay before the next retry\n await asyncRetry(apiCall, { ...options, maxRetries });\n } else {\n throw error; // Throw the error if max retries are reached\n }\n }\n }\n};\n","// @ts-ignore\nimport { asyncRetry } from \"./async-retry\";\nimport {\n EControlMode,\n IControlNet,\n IControlNetWithUUID,\n IEnhancedPrompt,\n IError,\n IImage,\n IImageToText,\n IPromptEnhancer,\n IRemoveImageBackground,\n IRequestImage,\n IRequestImageToText,\n IUpscaleGan,\n ListenerType,\n ReconnectingWebsocketProps,\n RunwareBaseType,\n SdkType,\n UploadImageType,\n ETaskType,\n IControlNetPreprocess,\n IControlNetImage,\n IRemoveImage,\n ITextToImage,\n TAddModel,\n IAddModelResponse,\n IErrorResponse,\n TPhotoMaker,\n TPhotoMakerResponse,\n TModelSearch,\n TImageMaskingResponse,\n TImageMasking,\n TModelSearchResponse,\n} from \"./types\";\nimport {\n BASE_RUNWARE_URLS,\n LISTEN_TO_IMAGES_KEY,\n TIMEOUT_DURATION,\n accessDeepObject,\n delay,\n evaluateNonTrue,\n fileToBase64,\n getIntervalWithPromise,\n getUUID,\n isValidUUID,\n removeFromAray,\n removeListener,\n} from \"./utils\";\n\n// let allImages: IImage[] = [];\n\nexport class RunwareBase {\n _ws: ReconnectingWebsocketProps | any;\n _listeners: ListenerType[] = [];\n _apiKey: string;\n _url?: string;\n // _globalMessages: any[] = [];\n _globalMessages: Record<string, any> = {};\n _globalImages: IImage[] = [];\n _globalError: IError | undefined;\n _connectionSessionUUID: string | undefined;\n _invalidAPIkey: string | undefined;\n _sdkType: SdkType;\n _shouldReconnect: boolean;\n _globalMaxRetries: number;\n _timeoutDuration: number;\n\n constructor({\n apiKey,\n url = BASE_RUNWARE_URLS.PRODUCTION,\n shouldReconnect = true,\n globalMaxRetries = 2,\n timeoutDuration = TIMEOUT_DURATION,\n }: RunwareBaseType) {\n this._apiKey = apiKey;\n this._url = url;\n this._sdkType = SdkType.CLIENT;\n this._shouldReconnect = shouldReconnect;\n this._globalMaxRetries = globalMaxRetries;\n this._timeoutDuration = timeoutDuration;\n }\n\n static async initialize(props: RunwareBaseType) {\n try {\n const instance = new this(props);\n await instance.ensureConnection();\n return instance;\n } catch (e) {\n throw e;\n }\n }\n\n protected isWebsocketReadyState = () => this._ws?.readyState === 1;\n\n // protected addListener({\n // lis,\n // check,\n // }: {\n // lis: (v: any) => any;\n // check: (v: any) => any;\n // groupKey?: string;\n // }): { destroy: Function } {\n // this._ws.onmessage = (e: any) => {\n // const m = JSON.parse(e.data);\n\n // if (m?.error) {\n // lis(m);\n // } else if (check(m)) {\n // lis(m);\n // }\n // };\n\n // return {\n // destroy: () => {},\n // };\n // }\n\n protected addListener({\n lis,\n // check,\n groupKey,\n taskUUID,\n }: {\n lis: (v: any) => any;\n // check: ETaskType;\n groupKey?: string;\n taskUUID: string;\n }) {\n const listener = (msg: {\n data: any[];\n errors?: { taskUUID: string; code: string; taskType?: string }[];\n errorMessage?: string;\n }) => {\n const arrayMessage = Array.isArray(msg?.data) ? msg.data : [msg.data];\n\n const arrayErrors = (msg as any)?.[0]?.errors\n ? (msg as any)?.[0]?.errors\n : Array.isArray(msg?.errors)\n ? msg.errors\n : [msg.errors];\n\n const filteredMessage = arrayMessage.filter(\n (v) => (v?.taskUUID || v?.taskType) === taskUUID\n );\n\n const filteredErrors = arrayErrors.filter(\n (v: any) => (v?.taskUUID || v?.taskType) === taskUUID\n );\n\n if (filteredErrors.length) {\n lis({ error: { ...(arrayErrors[0] ?? {}) } });\n return;\n }\n\n if (filteredMessage.length) {\n lis({ [taskUUID]: arrayMessage });\n return;\n }\n };\n const groupListener = { key: taskUUID || getUUID(), listener, groupKey };\n this._listeners.push(groupListener);\n const destroy = () => {\n this._listeners = removeListener(this._listeners, groupListener);\n };\n\n return {\n destroy,\n };\n }\n\n protected connect() {\n this._ws.onopen = (e: any) => {\n if (this._connectionSessionUUID) {\n this.send({\n taskType: ETaskType.AUTHENTICATION,\n apiKey: this._apiKey,\n connectionSessionUUID: this._connectionSessionUUID,\n });\n } else {\n this.send({ apiKey: this._apiKey, taskType: ETaskType.AUTHENTICATION });\n }\n\n this.addListener({\n taskUUID: ETaskType.AUTHENTICATION,\n lis: (m) => {\n if (m?.error) {\n this._invalidAPIkey = m;\n return;\n }\n this._connectionSessionUUID =\n m?.[ETaskType.AUTHENTICATION]?.[0]?.connectionSessionUUID;\n this._invalidAPIkey = undefined;\n },\n });\n };\n\n this._ws.onmessage = (e: any) => {\n const data = JSON.parse(e.data);\n for (const lis of this._listeners) {\n const result = (lis as any)?.listener?.(data);\n if (result) return;\n }\n };\n\n this._ws.onclose = (e: any) => {\n // console.log(\"closing\");\n // console.log(\"invalid\", this._invalidAPIkey);\n if (this._invalidAPIkey) {\n return;\n }\n };\n }\n\n // We moving to an array format, it make sense to consolidate all request to an array here\n protected send = (msg: Object) => {\n this._ws.send(JSON.stringify([msg]));\n };\n\n private destroy(lis: any) {\n removeFromAray(this._listeners, lis);\n }\n\n private uploadImage = async (\n file: File | string\n ): Promise<UploadImageType | null> => {\n try {\n return await asyncRetry(async () => {\n const taskUUID = getUUID();\n\n if (typeof file === \"string\" && isValidUUID(file)) {\n return {\n imageURL: file,\n imageUUID: file,\n taskUUID,\n taskType: ETaskType.IMAGE_UPLOAD,\n };\n }\n\n const imageBase64 =\n typeof file === \"string\" ? file : await fileToBase64(file);\n\n return {\n imageURL: imageBase64,\n imageUUID: imageBase64,\n taskUUID,\n taskType: ETaskType.IMAGE_UPLOAD,\n };\n });\n } catch (e) {\n throw e;\n }\n };\n\n private listenToImages({\n onPartialImages,\n taskUUID,\n groupKey,\n positivePrompt,\n negativePrompt,\n }: {\n taskUUID: string;\n onPartialImages?: (images: IImage[], error?: any) => void;\n groupKey: LISTEN_TO_IMAGES_KEY;\n positivePrompt?: string;\n negativePrompt?: string;\n }) {\n return this.addListener({\n taskUUID: taskUUID,\n lis: (m) => {\n let images = (m?.[taskUUID] as IImage[])?.filter(\n (img) => img.taskUUID === taskUUID\n );\n\n if (m.error) {\n onPartialImages?.(images, m?.error && m);\n this._globalError = m;\n } else {\n images = images.map((image) => ({\n ...image,\n positivePrompt,\n negativePrompt,\n }));\n onPartialImages?.(images, m?.error && m);\n\n if (this._sdkType === SdkType.CLIENT) {\n // this._globalImages = [...this._globalImages, ...m.images];\n this._globalImages = [\n ...this._globalImages,\n ...(m?.[taskUUID] ?? []).map((image: IImage) => ({\n ...image,\n positivePrompt,\n negativePrompt,\n })),\n ];\n } else {\n this._globalImages = [...this._globalImages, ...images];\n }\n }\n },\n groupKey,\n });\n }\n\n private listenToUpload({\n onUploadStream,\n taskUUID,\n }: {\n taskUUID: string;\n onUploadStream?: (\n addModelResponse?: IAddModelResponse,\n error?: IErrorResponse\n ) => void;\n }) {\n return this.addListener({\n taskUUID: taskUUID,\n lis: (m) => {\n const error = m?.error;\n\n const result = m?.[taskUUID]?.[0] as IAddModelResponse;\n let response = result?.taskUUID === taskUUID ? result : null;\n\n if (response || error) {\n onUploadStream?.(response || undefined, error);\n }\n },\n });\n }\n\n private globalListener({ taskUUID }: { taskUUID: string }) {\n return this.addListener({\n // check: (m) => {\n // const value = accessDeepObject({\n // key: responseKey,\n // data: m,\n // useZero: false,\n // });\n // return !!value;\n // },\n // check: responseKey,\n taskUUID: taskUUID,\n lis: (m) => {\n if (m.error) {\n this._globalMessages[taskUUID] = m;\n return;\n }\n\n const value = accessDeepObject({\n key: taskUUID,\n data: m,\n useZero: false,\n });\n\n if (Array.isArray(value)) {\n value.forEach((v) => {\n this._globalMessages[v.taskUUID] = [\n ...(this._globalMessages[v.taskUUID] ?? []),\n v,\n ];\n });\n } else {\n this._globalMessages[value.taskUUID] = value;\n }\n },\n });\n }\n\n async requestImages({\n outputType,\n outputFormat,\n uploadEndpoint,\n checkNSFW,\n positivePrompt,\n negativePrompt,\n seedImage,\n maskImage,\n strength,\n height,\n width,\n model,\n steps,\n scheduler,\n seed,\n CFGScale,\n clipSkip,\n usePromptWeighting,\n promptWeighting,\n numberResults = 1,\n controlNet,\n lora,\n onPartialImages,\n includeCost,\n customTaskUUID,\n retry,\n refiner,\n maskMargin,\n }: // imageSize,\n\n // gScale,\n IRequestImage): Promise<ITextToImage[] | undefined> {\n let lis: any = undefined;\n let requestObject: Record<string, any> | undefined = undefined;\n let taskUUIDs: string[] = [];\n let retryCount = 0;\n\n const totalRetry = retry || this._globalMaxRetries;\n\n try {\n await this.ensureConnection();\n\n let seedImageUUID: string | null = null;\n let maskImageUUID: string | null = null;\n let controlNetData: IControlNetWithUUID[] = [];\n\n if (seedImage) {\n const uploadedImage = await this.uploadImage(seedImage);\n\n if (!uploadedImage) return [];\n seedImageUUID = uploadedImage.imageUUID;\n }\n if (maskImage) {\n const uploadedMaskInitiator = await this.uploadImage(maskImage);\n if (!uploadedMaskInitiator) return [];\n maskImageUUID = uploadedMaskInitiator.imageUUID;\n }\n\n if (controlNet?.length) {\n for (let i = 0; i < controlNet.length; i++) {\n const controlData: IControlNet = controlNet[i];\n const {\n endStep,\n startStep,\n weight,\n guideImage,\n controlMode,\n startStepPercentage,\n endStepPercentage,\n model: controlNetModel,\n } = controlData;\n\n const imageUploaded = guideImage\n ? await this.uploadImage(guideImage as File | string)\n : null;\n\n controlNetData.push({\n guideImage: imageUploaded?.imageUUID,\n model: controlNetModel,\n endStep,\n startStep,\n weight,\n ...evaluateNonTrue({\n key: \"startStepPercentage\",\n value: startStepPercentage,\n }),\n ...evaluateNonTrue({\n key: \"endStepPercentage\",\n value: endStepPercentage,\n }),\n controlMode: controlMode || EControlMode.CONTROL_NET,\n });\n }\n }\n\n requestObject = {\n taskType: ETaskType.IMAGE_INFERENCE,\n model,\n positivePrompt: positivePrompt,\n ...(negativePrompt ? { negativePrompt } : {}),\n ...(height ? { height } : {}),\n ...(width ? { width } : {}),\n numberResults,\n ...(lora?.length ? { lora: lora } : {}),\n ...(outputType ? { outputType } : {}),\n ...(outputFormat ? { outputFormat } : {}),\n ...(uploadEndpoint ? { uploadEndpoint } : {}),\n ...evaluateNonTrue({ key: \"checkNSFW\", value: checkNSFW }),\n ...evaluateNonTrue({ key: \"strength\", value: strength }),\n ...evaluateNonTrue({ key: \"CFGScale\", value: CFGScale }),\n ...evaluateNonTrue({ key: \"clipSkip\", value: clipSkip }),\n ...evaluateNonTrue({ key: \"maskMargin\", value: maskMargin }),\n ...evaluateNonTrue({\n key: \"usePromptWeighting\",\n value: usePromptWeighting,\n }),\n ...evaluateNonTrue({ key: \"steps\", value: steps }),\n ...(promptWeighting ? { promptWeighting } : {}),\n ...(controlNetData.length ? { controlNet: controlNetData } : {}),\n ...(seed ? { seed: seed } : {}),\n ...(scheduler ? { scheduler } : {}),\n ...(refiner ? { refiner } : {}),\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n ...(seedImageUUID ? { seedImage: seedImageUUID } : {}),\n ...(maskImageUUID ? { maskImage: maskImageUUID } : {}),\n };\n\n return await asyncRetry(\n async () => {\n retryCount++;\n lis?.destroy();\n const imagesWithSimilarTask = this._globalImages.filter((img) =>\n taskUUIDs.includes(img.taskUUID)\n );\n\n const taskUUID = customTaskUUID || getUUID();\n\n taskUUIDs.push(taskUUID);\n\n const imageRemaining = numberResults - imagesWithSimilarTask.length;\n\n const newRequestObject = {\n ...requestObject,\n taskUUID: taskUUID,\n numberResults: imageRemaining,\n };\n this.send(newRequestObject);\n\n lis = this.listenToImages({\n onPartialImages,\n taskUUID: taskUUID,\n groupKey: LISTEN_TO_IMAGES_KEY.REQUEST_IMAGES,\n positivePrompt,\n negativePrompt,\n });\n\n const promise = await this.getSimilarImages({\n taskUUID: taskUUIDs,\n numberResults,\n lis,\n });\n\n lis.destroy();\n\n return promise;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n if ((e as any).taskUUID) {\n throw e;\n }\n if (retryCount >= totalRetry) {\n return this.handleIncompleteImages({ taskUUIDs, error: e });\n }\n }\n }\n\n controlNetPreProcess = async ({\n inputImage,\n preProcessorType,\n height,\n width,\n outputType,\n outputFormat,\n highThresholdCanny,\n lowThresholdCanny,\n includeHandsAndFaceOpenPose,\n includeCost,\n customTaskUUID,\n retry,\n }: IControlNetPreprocess): Promise<IControlNetImage | null> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const image = await this.uploadImage(inputImage);\n if (!image?.imageUUID) return null;\n\n const taskUUID = customTaskUUID || getUUID();\n this.send({\n inputImage: image.imageUUID,\n taskType: ETaskType.IMAGE_CONTROL_NET_PRE_PROCESS,\n taskUUID,\n preProcessorType,\n ...evaluateNonTrue({ key: \"height\", value: height }),\n ...evaluateNonTrue({ key: \"width\", value: width }),\n ...evaluateNonTrue({ key: \"outputType\", value: outputType }),\n ...evaluateNonTrue({ key: \"outputFormat\", value: outputFormat }),\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n ...evaluateNonTrue({\n key: \"highThresholdCanny\",\n value: highThresholdCanny,\n }),\n ...evaluateNonTrue({\n key: \"lowThresholdCanny\",\n value: lowThresholdCanny,\n }),\n ...evaluateNonTrue({\n key: \"includeHandsAndFaceOpenPose\",\n value: includeHandsAndFaceOpenPose,\n }),\n });\n lis = this.globalListener({\n taskUUID,\n });\n\n const guideImage = (await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const uploadedImage = this.getSingleMessage({\n taskUUID,\n });\n\n if (!uploadedImage) return;\n\n if (uploadedImage?.error) {\n reject(uploadedImage);\n return true;\n }\n\n if (uploadedImage) {\n // delete this._globalMessages[taskUUID];\n resolve(uploadedImage);\n return true;\n }\n },\n {\n debugKey: \"unprocessed-image\",\n timeoutDuration: this._timeoutDuration,\n }\n )) as IControlNetImage;\n\n lis.destroy();\n\n return guideImage;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e: any) {\n throw e;\n }\n };\n\n requestImageToText = async ({\n inputImage,\n includeCost,\n customTaskUUID,\n retry,\n }: IRequestImageToText): Promise<IImageToText> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const imageUploaded = inputImage\n ? await this.uploadImage(inputImage as File | string)\n : null;\n\n const taskUUID = customTaskUUID || getUUID();\n this.send({\n taskUUID,\n taskType: ETaskType.IMAGE_CAPTION,\n inputImage: imageUploaded?.imageUUID,\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const newReverseClip = this.getSingleMessage({\n taskUUID,\n });\n\n if (!newReverseClip) return;\n\n if (newReverseClip?.error) {\n reject(newReverseClip);\n return true;\n }\n\n if (newReverseClip) {\n delete this._globalMessages[taskUUID];\n resolve(newReverseClip);\n return true;\n }\n },\n {\n debugKey: \"remove-image-background\",\n timeoutDuration: this._timeoutDuration,\n }\n );\n\n lis.destroy();\n\n return response as IImageToText;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n removeImageBackground = async ({\n inputImage,\n outputType,\n outputFormat,\n rgba,\n postProcessMask,\n returnOnlyMask,\n alphaMatting,\n alphaMattingForegroundThreshold,\n alphaMattingBackgroundThreshold,\n alphaMattingErodeSize,\n includeCost,\n customTaskUUID,\n retry,\n }: IRemoveImageBackground): Promise<IRemoveImage> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const imageUploaded = inputImage\n ? await this.uploadImage(inputImage as File | string)\n : null;\n\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n taskType: ETaskType.IMAGE_BACKGROUND_REMOVAL,\n taskUUID,\n inputImage: imageUploaded?.imageUUID,\n ...evaluateNonTrue({ key: \"rgba\", value: rgba }),\n ...evaluateNonTrue({\n key: \"postProcessMask\",\n value: postProcessMask,\n }),\n ...evaluateNonTrue({\n key: \"returnOnlyMask\",\n value: returnOnlyMask,\n }),\n ...evaluateNonTrue({ key: \"alphaMatting\", value: alphaMatting }),\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n ...evaluateNonTrue({\n key: \"alphaMattingForegroundThreshold\",\n value: alphaMattingForegroundThreshold,\n }),\n ...evaluateNonTrue({\n key: \"alphaMattingBackgroundThreshold\",\n value: alphaMattingBackgroundThreshold,\n }),\n ...evaluateNonTrue({\n key: \"alphaMattingErodeSize\",\n value: alphaMattingErodeSize,\n }),\n ...evaluateNonTrue({ key: \"outputType\", value: outputType }),\n ...evaluateNonTrue({ key: \"outputFormat\", value: outputFormat }),\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const newRemoveBackground = this.getSingleMessage({ taskUUID });\n\n if (!newRemoveBackground) return;\n\n if (newRemoveBackground?.error) {\n reject(newRemoveBackground);\n return true;\n }\n\n if (newRemoveBackground) {\n delete this._globalMessages[taskUUID];\n resolve(newRemoveBackground);\n return true;\n }\n },\n {\n debugKey: \"remove-image-background\",\n timeoutDuration: this._timeoutDuration,\n }\n );\n\n lis.destroy();\n\n return response as IImage;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n upscaleGan = async ({\n inputImage,\n upscaleFactor,\n outputType,\n outputFormat,\n includeCost,\n customTaskUUID,\n retry,\n }: IUpscaleGan): Promise<IImage> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n let imageUploaded;\n\n imageUploaded = await this.uploadImage(inputImage as File | string);\n\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n taskUUID,\n inputImage: imageUploaded?.imageUUID,\n taskType: ETaskType.IMAGE_UPSCALE,\n upscaleFactor,\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n ...(outputType ? { outputType } : {}),\n ...(outputFormat ? { outputFormat } : {}),\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const newUpscaleGan = this.getSingleMessage({ taskUUID });\n if (!newUpscaleGan) return;\n\n if (newUpscaleGan?.error) {\n reject(newUpscaleGan);\n return true;\n }\n\n if (newUpscaleGan) {\n delete this._globalMessages[taskUUID];\n resolve(newUpscaleGan);\n return true;\n }\n },\n { debugKey: \"upscale-gan\", timeoutDuration: this._timeoutDuration }\n );\n\n lis.destroy();\n\n return response as IImage;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n enhancePrompt = async ({\n prompt,\n promptMaxLength = 380,\n promptVersions = 1,\n includeCost,\n customTaskUUID,\n retry,\n }: IPromptEnhancer): Promise<IEnhancedPrompt[]> => {\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n prompt,\n taskUUID,\n promptMaxLength,\n promptVersions,\n ...evaluateNonTrue({ key: \"includeCost\", value: includeCost }),\n taskType: ETaskType.PROMPT_ENHANCE,\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const reducedPrompt: IEnhancedPrompt[] =\n this._globalMessages[taskUUID];\n\n if ((reducedPrompt as any)?.error) {\n reject(reducedPrompt as any);\n return true;\n }\n\n if (reducedPrompt?.length >= promptVersions) {\n delete this._globalMessages[taskUUID];\n resolve(reducedPrompt);\n return true;\n }\n },\n {\n debugKey: \"enhance-prompt\",\n timeoutDuration: this._timeoutDuration,\n }\n );\n\n lis.destroy();\n return response as IEnhancedPrompt[];\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n modelUpload = async (payload: TAddModel) => {\n // This is written to destructure the payload from the additional parameters\n const { onUploadStream, retry, customTaskUUID, ...addModelPayload } =\n payload;\n\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n ...addModelPayload,\n taskUUID,\n taskType: ETaskType.MODEL_UPLOAD,\n });\n\n let result: IAddModelResponse;\n let errorResult: IErrorResponse;\n\n lis = this.listenToUpload({\n taskUUID,\n onUploadStream: (response, error) => {\n onUploadStream?.(response, error);\n if (response?.status === \"ready\") {\n result = response;\n } else if (error) {\n errorResult = error;\n }\n },\n });\n\n const modelUploadResponse = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n if (result) {\n resolve(result);\n return true;\n } else if (errorResult) {\n reject(errorResult);\n return false;\n }\n },\n {\n shouldThrowError: false,\n timeoutDuration: 60 * 60 * 1000,\n }\n );\n\n return modelUploadResponse as IAddModelResponse | IErrorResponse;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n photoMaker = async (\n payload: TPhotoMaker\n ): Promise<TPhotoMakerResponse[] | undefined> => {\n // This is written to destructure the payload from the additional parameters\n const {\n onPartialImages,\n retry,\n customTaskUUID,\n numberResults,\n ...photoMakerPayload\n } = payload;\n\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n let taskUUIDs: string[] = [];\n let retryCount = 0;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n retryCount++;\n const imagesWithSimilarTask = this._globalImages.filter((img) =>\n taskUUIDs.includes(img.taskUUID)\n );\n\n const taskUUID = customTaskUUID || getUUID();\n taskUUIDs.push(taskUUID);\n\n const imageRemaining = numberResults - imagesWithSimilarTask.length;\n\n this.send({\n ...photoMakerPayload,\n numberResults: imageRemaining,\n taskUUID,\n taskType: ETaskType.PHOTO_MAKER,\n });\n\n lis = this.listenToImages({\n onPartialImages,\n taskUUID: taskUUID,\n groupKey: LISTEN_TO_IMAGES_KEY.REQUEST_IMAGES,\n positivePrompt: photoMakerPayload.positivePrompt,\n // negativePrompt: payload.ne,\n });\n\n const promise = await this.getSimilarImages({\n taskUUID: taskUUIDs,\n numberResults,\n lis,\n });\n\n lis.destroy();\n\n return promise as TPhotoMakerResponse[];\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n if ((e as any).taskUUID) {\n throw e;\n }\n if (retryCount >= totalRetry) {\n return this.handleIncompleteImages({\n taskUUIDs,\n error: e,\n }) as TPhotoMakerResponse[];\n }\n }\n };\n\n modelSearch = async (\n payload: TModelSearch\n ): Promise<TModelSearchResponse> => {\n return this.baseSingleRequest({\n payload: {\n ...payload,\n extra: true,\n taskType: ETaskType.MODEL_SEARCH,\n },\n debugKey: \"model-search\",\n });\n };\n\n imageMasking = async (\n payload: TImageMasking\n ): Promise<TImageMaskingResponse> => {\n return this.baseSingleRequest({\n payload: {\n ...payload,\n taskType: ETaskType.IMAGE_MASKING,\n },\n debugKey: \"image-masking\",\n });\n };\n\n protected baseSingleRequest = async <T>({\n payload,\n debugKey,\n }: {\n payload: Record<string, any>;\n debugKey: string;\n }): Promise<T> => {\n const { retry, customTaskUUID, ...restPayload } = payload;\n\n const totalRetry = retry || this._globalMaxRetries;\n let lis: any = undefined;\n\n try {\n return await asyncRetry(\n async () => {\n await this.ensureConnection();\n const taskUUID = customTaskUUID || getUUID();\n\n this.send({\n ...restPayload,\n taskUUID,\n });\n\n lis = this.globalListener({\n taskUUID,\n });\n\n const response = await getIntervalWithPromise(\n ({ resolve, reject }) => {\n const response = this.getSingleMessage({ taskUUID });\n if (!response) return;\n\n if (response?.error) {\n reject(response);\n return true;\n }\n\n if (response) {\n delete this._globalMessages[taskUUID];\n resolve(response);\n return true;\n }\n },\n {\n debugKey,\n timeoutDuration: this._timeoutDuration,\n }\n );\n\n lis.destroy();\n return response as T;\n },\n {\n maxRetries: totalRetry,\n callback: () => {\n lis?.destroy();\n },\n }\n );\n } catch (e) {\n throw e;\n }\n };\n\n async ensureConnection() {\n let isConnected = this.connected();\n\n if (isConnected || this._url === BASE_RUNWARE_URLS.TEST) return;\n\n const retryInterval = 2000;\n const pollingInterval = 200;\n // const pollingInterval = this._sdkType === SdkType.CLIENT ? 200 : 2000;\n\n try {\n if (this._invalidAPIkey) throw this._invalidAPIkey;\n\n return new Promise((resolve, reject) => {\n // const isConnected =\n let retry = 0;\n const MAX_RETRY = 30;\n\n // Retry every (retryInterval % retry) => 60s\n // every 20 seconds (ie. => retry is 10 (20s), retry is 20 (40s))\n const SHOULD_RETRY = retry % 10 === 0;\n\n let retryIntervalId: any;\n let pollingIntervalId: any;\n\n const clearAllIntervals = () => {\n clearInterval(retryIntervalId);\n clearInterval(pollingIntervalId);\n };\n\n if (this._sdkType === SdkType.SERVER) {\n retryIntervalId = setInterval(async () => {\n try {\n const hasConnected = this.connected();\n\n if (hasConnected) {\n clearAllIntervals();\n resolve(true);\n } else if (retry >= MAX_RETRY) {\n clearAllIntervals();\n reject(new Error(\"Retry timed out\"));\n } else {\n if (SHOULD_RETRY) {\n this.connect();\n }\n retry++;\n }\n } catch (error) {\n clearAllIntervals();\n reject(error);\n }\n }, retryInterval);\n }\n\n pollingIntervalId = setInterval(async () => {\n const hasConnected = this.connected();\n\n if (hasConnected) {\n clearAllIntervals();\n resolve(true);\n return;\n }\n if (!!this._invalidAPIkey) {\n clearAllIntervals();\n reject(this._invalidAPIkey);\n return;\n }\n }, pollingInterval);\n });\n } catch (e) {\n throw (\n this._invalidAPIkey ??\n \"Could not connect to server. Ensure your API key is correct\"\n );\n }\n }\n\n private async getSimilarImages({\n taskUUID,\n numberResults,\n shouldThrowError,\n lis,\n }: {\n taskUUID: string | string[];\n numberResults: number;\n shouldThrowError?: boolean;\n lis: any;\n }): Promise<IImage[] | IError> {\n return (await getIntervalWithPromise(\n ({ resolve, reject, intervalId }) => {\n const taskUUIDs = Array.isArray(taskUUID) ? taskUUID : [taskUUID];\n const imagesWithSimilarTask = this._globalImages.filter((img) =>\n taskUUIDs.includes(img.taskUUID)\n );\n\n if (this._globalError) {\n const newData = this._globalError;\n this._globalError = undefined;\n // throw errorData[0]\n clearInterval(intervalId);\n reject<IError>?.(newData);\n return true;\n }\n // onPartialImages?.(imagesWithSimilarTask)\n else if (imagesWithSimilarTask.length >= numberResults) {\n // lis?.destroy();\n clearInterval(intervalId);\n this._globalImages = this._globalImages.filter(\n (img) => !taskUUIDs.includes(img.taskUUID)\n );\n resolve<IImage[]>([...imagesWithSimilarTask].slice(0, numberResults));\n return true;\n // Resolve the promise with the data\n }\n },\n {\n debugKey: \"getting images\",\n shouldThrowError,\n timeoutDuration: this._timeoutDuration,\n }\n )) as IImage[];\n }\n\n private getSingleMessage = ({ taskUUID }: { taskUUID: string }) => {\n const value = this._globalMessages[taskUUID]?.[0];\n const errorValue = this._globalMessages[taskUUID];\n if (!value && !errorValue) return null;\n return errorValue?.error ? errorValue : value;\n };\n\n private handleIncompleteImages({\n taskUUIDs,\n error,\n }: {\n taskUUIDs: string[];\n error: any;\n }) {\n const imagesWithSimilarTask = this._globalImages.filter((img) =>\n taskUUIDs.includes(img.taskUUID)\n );\n if (imagesWithSimilarTask.length > 1) {\n this._globalImages = this._globalImages.filter(\n (img) => !taskUUIDs.includes(img.taskUUID)\n );\n return imagesWithSimilarTask;\n } else {\n throw error;\n }\n }\n\n disconnect = async () => {\n this._shouldReconnect = false;\n this._ws?.terminate?.();\n this._ws?.close?.();\n };\n\n private connected = () =>\n this.isWebsocketReadyState() && !!this._connectionSessionUUID;\n //end of data\n}\n","import { RunwareBase } from \"./Runware-base\";\nimport ReconnectingWebsocket from \"./reconnect\";\nimport { ReconnectingWebsocketProps, RunwareBaseType } from \"./types\";\n\nexport class RunwareClient extends RunwareBase {\n constructor(props: RunwareBaseType) {\n const { shouldReconnect, ...rest } = props;\n\n super(rest);\n this._ws = new (ReconnectingWebsocket as any)(\n this._url\n ) as ReconnectingWebsocketProps;\n this.connect();\n }\n}\n","// @ts-ignore\n// import ReconnectingWebsocket from \"./reconnect\";\nimport WebSocket from \"ws\";\n\nimport { RunwareBase } from \"./Runware-base\";\nimport { ETaskType, RunwareBaseType, SdkType } from \"./types\";\nimport { delay } from \"./utils\";\n\n// let allImages: IImage[] = [];\n\nexport class RunwareServer extends RunwareBase {\n _instantiated: boolean = false;\n _listeners: any[] = [];\n _reconnectingIntervalId: null | any = null;\n _pingTimeout: any;\n _pongListener: any;\n\n constructor(props: RunwareBaseType) {\n super(props);\n\n this._sdkType = SdkType.SERVER;\n this.connect();\n }\n\n // protected addListener({\n // lis,\n // check,\n // groupKey,\n // }: {\n // lis: (v: any) => any;\n // check: (v: any) => any;\n // groupKey?: string;\n // }) {\n // const listener = (msg: any) => {\n // if (msg?.error) {\n // lis(msg);\n // } else if (check(msg)) {\n // lis(msg);\n // }\n // };\n // const groupListener = { key: getUUID(), listener, groupKey };\n // this._listeners.push(groupListener);\n // const destroy = () => {\n // this._listeners = removeListener(this._listeners, groupListener);\n // };\n\n // return {\n // destroy,\n // };\n // }\n\n protected async connect() {\n if (!this._url) return;\n\n this.resetConnection();\n\n this._ws = new WebSocket(this._url, {\n perMessageDeflate: false,\n });\n\n // delay(1);\n\n this._ws.on(\"error\", () => {});\n this._ws.on(\"close\", () => {\n this.handleClose();\n });\n\n this._ws.on(\"open\", () => {\n if (this._reconnectingIntervalId) {\n clearInterval(this._reconnectingIntervalId);\n }\n if (this._connectionSessionUUID && this.isWebsocketReadyState()) {\n this.send({\n taskType: ETaskType.AUTHENTICATION,\n apiKey: this._apiKey,\n connectionSessionUUID: this._connectionSessionUUID,\n });\n } else {\n if (this.isWebsocketReadyState()) {\n this.send({\n apiKey: this._apiKey,\n taskType: ETaskType.AUTHENTICATION,\n });\n }\n }\n\n this.addListener({\n taskUUID: ETaskType.AUTHENTICATION,\n lis: (m) => {\n if (m?.error) {\n this._invalidAPIkey = m;\n return;\n }\n this._connectionSessionUUID =\n m?.[ETaskType.AUTHENTICATION]?.[0]?.connectionSessionUUID;\n this._invalidAPIkey = undefined;\n },\n });\n });\n\n this._ws.on(\"message\", (e: any, isBinary: any) => {\n const data = isBinary ? e : e?.toString();\n if (!data) return;\n const m = JSON.parse(data);\n\n // console.log(\"response\", JSON.stringify(m, null, 4));\n\n this._listeners.forEach((lis) => {\n const result = lis.listener(m);\n if (result) {\n return;\n }\n });\n });\n }\n\n protected send = (msg: Object) => {\n this._ws.send(JSON.stringify([msg]));\n };\n\n protected handleClose() {\n if (this._invalidAPIkey) {\n return;\n }\n if (this._reconnectingIntervalId) {\n clearInterval(this._reconnectingIntervalId);\n }\n\n if (this._shouldReconnect) {\n setTimeout(() => this.connect(), 1000);\n }\n // this._reconnectingIntervalId = setInterval(() => this.connect(), 1000);\n }\n\n protected resetConnection = () => {\n if (this._ws) {\n this._listeners.forEach((list) => {\n list?.destroy?.();\n });\n this._ws.removeAllListeners(); // Remove all listeners\n if (this._ws.readyState === 1) {\n this._ws.terminate();\n this._ws.close(); // Attempt to close gracefully\n }\n\n this._ws = null;\n this._listeners = [];\n }\n };\n\n protected heartBeat() {\n clearTimeout(this._pingTimeout);\n\n this._pingTimeout = setTimeout(() => {\n if (this.isWebsocketReadyState()) {\n this.send({ ping: true });\n }\n }, 5000);\n }\n\n //end of data\n}\n","// @ts-ignore\nimport { RunwareClient } from \"./Runware-client\";\nimport { RunwareServer } from \"./Runware-server\";\n\nlet Runware: typeof RunwareClient | typeof RunwareServer;\n\nif (typeof window === \"undefined\") {\n Runware = RunwareServer;\n} else {\n Runware = RunwareClient;\n}\n\nexport { Runware };\n"],"mappings":"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","names":["require_reconnect","__commonJSMin","exports","module","isWebSocket","constructor","isGlobalWebSocket","getDefaultOptions","bypassProperty","src","dst","name","value","initReconnectionDelay","config","updateReconnectionDelay","previousDelay","newDelay","LEVEL_0_EVENTS","reassignEventListeners","ws","oldWs","listeners","type","listener","options","ReconnectingWebsocket","url","protocols","connectingTimeout","reconnectDelay","retriesCount","shouldRetry","key","log","params","emitError","code","msg","err","fn","handleClose","connect","reason","keepClosed","fastClose","delay","fakeCloseEvent","data","l","Runware_exports","__export","EControlMode","EModelArchitecture","EModelConditioning","EModelFormat","EModelType","EOpenPosePreProcessor","EPhotoMakerEnum","EPreProcessor","EPreProcessorGroup","ETaskType","Environment","Runware","RunwareClient","RunwareServer","SdkType","__toCommonJS","Environment","SdkType","ETaskType","EControlMode","EPreProcessorGroup","EPreProcessor","EOpenPosePreProcessor","EModelFormat","EModelArchitecture","EModelType","EModelConditioning","EPhotoMakerEnum","import_uuid","TIMEOUT_DURATION","MINIMUM_TIMEOUT_DURATION","POLLING_INTERVAL","BASE_RUNWARE_URLS","removeFromAray","col","targetElem","i","getIntervalWithPromise","callback","debugKey","timeoutDuration","shouldThrowError","resolve","reject","timeoutId","intervalId","fileToBase64","file","reader","getUUID","uuidv4","isValidUUID","uuid","validateUUID","accessDeepObject","key","data","useZero","shouldReturnString","acc","curr","returnZero","currentValue","index","delay","time","milliseconds","resolve","removeListener","listeners","listener","lis","evaluateNonTrue","key","value","asyncRetry","apiCall","options","delayInSeconds","callback","maxRetries","error","delay","RunwareBase","apiKey","url","BASE_RUNWARE_URLS","shouldReconnect","globalMaxRetries","timeoutDuration","TIMEOUT_DURATION","msg","file","asyncRetry","taskUUID","getUUID","isValidUUID","imageBase64","fileToBase64","inputImage","preProcessorType","height","width","outputType","outputFormat","highThresholdCanny","lowThresholdCanny","includeHandsAndFaceOpenPose","includeCost","customTaskUUID","retry","totalRetry","lis","image","evaluateNonTrue","guideImage","getIntervalWithPromise","resolve","reject","uploadedImage","e","imageUploaded","response","newReverseClip","rgba","postProcessMask","returnOnlyMask","alphaMatting","alphaMattingForegroundThreshold","alphaMattingBackgroundThreshold","alphaMattingErodeSize","newRemoveBackground","upscaleFactor","newUpscaleGan","prompt","promptMaxLength","promptVersions","reducedPrompt","payload","onUploadStream","addModelPayload","result","errorResult","error","onPartialImages","numberResults","photoMakerPayload","taskUUIDs","retryCount","imagesWithSimilarTask","img","imageRemaining","promise","debugKey","restPayload","value","errorValue","props","instance","groupKey","listener","arrayMessage","arrayErrors","filteredMessage","v","groupListener","removeListener","m","data","removeFromAray","positivePrompt","negativePrompt","images","accessDeepObject","uploadEndpoint","checkNSFW","seedImage","maskImage","strength","model","steps","scheduler","seed","CFGScale","clipSkip","usePromptWeighting","promptWeighting","controlNet","lora","refiner","maskMargin","requestObject","seedImageUUID","maskImageUUID","controlNetData","uploadedMaskInitiator","i","controlData","endStep","startStep","weight","controlMode","startStepPercentage","endStepPercentage","controlNetModel","newRequestObject","retryInterval","pollingInterval","MAX_RETRY","SHOULD_RETRY","retryIntervalId","pollingIntervalId","clearAllIntervals","shouldThrowError","intervalId","newData","import_reconnect","RunwareClient","RunwareBase","props","shouldReconnect","rest","ReconnectingWebsocket","import_ws","RunwareServer","RunwareBase","props","msg","list","WebSocket","m","isBinary","data","lis","Runware","RunwareServer","RunwareClient"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -97,6 +97,7 @@ interface IError {
|
|
|
97
97
|
errorMessage: string;
|
|
98
98
|
taskUUID: string;
|
|
99
99
|
}
|
|
100
|
+
type TPromptWeighting = "compel" | "sdEmbeds";
|
|
100
101
|
interface IRequestImage {
|
|
101
102
|
outputType?: IOutputType;
|
|
102
103
|
outputFormat?: IOutputFormat;
|
|
@@ -116,7 +117,11 @@ interface IRequestImage {
|
|
|
116
117
|
maskMargin?: number;
|
|
117
118
|
CFGScale?: number;
|
|
118
119
|
clipSkip?: number;
|
|
120
|
+
/**
|
|
121
|
+
* @deprecated The usePromptWeighting should not be used, use promptWeighting instead
|
|
122
|
+
*/
|
|
119
123
|
usePromptWeighting?: boolean;
|
|
124
|
+
promptWeighting?: TPromptWeighting;
|
|
120
125
|
numberResults?: number;
|
|
121
126
|
controlNet?: IControlNet[];
|
|
122
127
|
lora?: ILora[];
|
|
@@ -305,8 +310,8 @@ type TAddModelCheckPoint = {
|
|
|
305
310
|
defaultCFGScale?: number;
|
|
306
311
|
defaultStrength: number;
|
|
307
312
|
defaultSteps?: number;
|
|
308
|
-
defaultScheduler?:
|
|
309
|
-
type
|
|
313
|
+
defaultScheduler?: string;
|
|
314
|
+
type: EModelType;
|
|
310
315
|
} & TAddModelBaseType;
|
|
311
316
|
type TAddModelLora = {
|
|
312
317
|
category: "lora";
|
|
@@ -524,7 +529,7 @@ declare class RunwareBase {
|
|
|
524
529
|
private listenToImages;
|
|
525
530
|
private listenToUpload;
|
|
526
531
|
private globalListener;
|
|
527
|
-
requestImages({ outputType, outputFormat, uploadEndpoint, checkNSFW, positivePrompt, negativePrompt, seedImage, maskImage, strength, height, width, model, steps, scheduler, seed, CFGScale, clipSkip, usePromptWeighting, numberResults, controlNet, lora, onPartialImages, includeCost, customTaskUUID, retry, refiner, maskMargin, }: IRequestImage): Promise<ITextToImage[] | undefined>;
|
|
532
|
+
requestImages({ outputType, outputFormat, uploadEndpoint, checkNSFW, positivePrompt, negativePrompt, seedImage, maskImage, strength, height, width, model, steps, scheduler, seed, CFGScale, clipSkip, usePromptWeighting, promptWeighting, numberResults, controlNet, lora, onPartialImages, includeCost, customTaskUUID, retry, refiner, maskMargin, }: IRequestImage): Promise<ITextToImage[] | undefined>;
|
|
528
533
|
controlNetPreProcess: ({ inputImage, preProcessorType, height, width, outputType, outputFormat, highThresholdCanny, lowThresholdCanny, includeHandsAndFaceOpenPose, includeCost, customTaskUUID, retry, }: IControlNetPreprocess) => Promise<IControlNetImage | null>;
|
|
529
534
|
requestImageToText: ({ inputImage, includeCost, customTaskUUID, retry, }: IRequestImageToText) => Promise<IImageToText>;
|
|
530
535
|
removeImageBackground: ({ inputImage, outputType, outputFormat, rgba, postProcessMask, returnOnlyMask, alphaMatting, alphaMattingForegroundThreshold, alphaMattingBackgroundThreshold, alphaMattingErodeSize, includeCost, customTaskUUID, retry, }: IRemoveImageBackground) => Promise<IRemoveImage>;
|
|
@@ -566,4 +571,4 @@ declare class RunwareServer extends RunwareBase {
|
|
|
566
571
|
|
|
567
572
|
declare let Runware: typeof RunwareClient | typeof RunwareServer;
|
|
568
573
|
|
|
569
|
-
export { EControlMode, EModelArchitecture, EModelConditioning, EModelFormat, EModelType, EOpenPosePreProcessor, EPhotoMakerEnum, EPreProcessor, EPreProcessorGroup, ETaskType, Environment, type GetWithPromiseCallBackType, type IAddModelResponse, type IControlNet, type IControlNetGeneral, type IControlNetImage, type IControlNetPreprocess, type IControlNetWithUUID, type IEnhancedPrompt, type IError, type IErrorResponse, type IImage, type IImageToText, type IOutputFormat, type IOutputType, type IPromptEnhancer, type IRefiner, type IRemoveImage, type IRemoveImageBackground, type IRequestImage, type IRequestImageToText, type ITextToImage, type IUpscaleGan, type ListenerType, type ReconnectingWebsocketProps, type RequireAtLeastOne, type RequireOnlyOne, Runware, type RunwareBaseType, RunwareClient, RunwareServer, SdkType, type TAddModel, type TAddModelBaseType, type TAddModelCheckPoint, type TAddModelControlNet, type TAddModelLora, type TImageMasking, type TImageMaskingResponse, type TModel, type TModelSearch, type TModelSearchResponse, type TPhotoMaker, type TPhotoMakerResponse, type UploadImageType };
|
|
574
|
+
export { EControlMode, EModelArchitecture, EModelConditioning, EModelFormat, EModelType, EOpenPosePreProcessor, EPhotoMakerEnum, EPreProcessor, EPreProcessorGroup, ETaskType, Environment, type GetWithPromiseCallBackType, type IAddModelResponse, type IControlNet, type IControlNetGeneral, type IControlNetImage, type IControlNetPreprocess, type IControlNetWithUUID, type IEnhancedPrompt, type IError, type IErrorResponse, type IImage, type IImageToText, type IOutputFormat, type IOutputType, type IPromptEnhancer, type IRefiner, type IRemoveImage, type IRemoveImageBackground, type IRequestImage, type IRequestImageToText, type ITextToImage, type IUpscaleGan, type ListenerType, type ReconnectingWebsocketProps, type RequireAtLeastOne, type RequireOnlyOne, Runware, type RunwareBaseType, RunwareClient, RunwareServer, SdkType, type TAddModel, type TAddModelBaseType, type TAddModelCheckPoint, type TAddModelControlNet, type TAddModelLora, type TImageMasking, type TImageMaskingResponse, type TModel, type TModelSearch, type TModelSearchResponse, type TPhotoMaker, type TPhotoMakerResponse, type TPromptWeighting, type UploadImageType };
|