@musallam/ffs-firefly-client 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -0
- package/dist/chunk-Bmb41Sf3.cjs +1 -0
- package/dist/flat.cjs +2 -2
- package/dist/flat.d.cts +448 -25
- package/dist/flat.d.cts.map +1 -1
- package/dist/flat.d.mts +448 -25
- package/dist/flat.d.mts.map +1 -1
- package/dist/flat.mjs +2 -2
- package/dist/flat.mjs.map +1 -1
- package/dist/sdk.cjs +2 -2
- package/dist/sdk.d.cts +448 -25
- package/dist/sdk.d.cts.map +1 -1
- package/dist/sdk.d.mts +448 -25
- package/dist/sdk.d.mts.map +1 -1
- package/dist/sdk.mjs +2 -2
- package/dist/sdk.mjs.map +1 -1
- package/package.json +10 -3
- package/dist/distribution-BwPC3bzJ.cjs +0 -3
- package/dist/distribution-WitwksSh.mjs +0 -4
- package/dist/distribution-WitwksSh.mjs.map +0 -1
- package/dist/index-B2PznWi7.d.cts +0 -979
- package/dist/index-B2PznWi7.d.cts.map +0 -1
- package/dist/index-IOhsyoSY.d.mts +0 -979
- package/dist/index-IOhsyoSY.d.mts.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# @musallam/ffs-firefly-client
|
|
2
|
+
|
|
3
|
+
JavaScript/TypeScript client for the [Adobe Firefly API](https://developer.adobe.com/firefly-services/docs/firefly-api/api/).
|
|
4
|
+
|
|
5
|
+
Generate images from text prompts, expand or fill images with AI-generated content, and create videos using Adobe Firefly models.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm install @musallam/ffs-firefly-client ky
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`ky` is a peer dependency (`^1.0.0`); install a compatible 1.x version alongside this package. Releases that bundled `ky` internally are a previous major line—when upgrading, ensure `ky` is listed in your app if your package manager does not add it automatically.
|
|
14
|
+
|
|
15
|
+
## Authentication
|
|
16
|
+
|
|
17
|
+
Obtain a Bearer token and API key from the [Adobe Developer Console](https://developer.adobe.com/console).
|
|
18
|
+
|
|
19
|
+
The package exports a singleton `client` with `baseUrl` pre-configured. Set auth once at app startup:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { client } from '@musallam/ffs-firefly-client';
|
|
23
|
+
|
|
24
|
+
client.setConfig({
|
|
25
|
+
auth: () => 'YOUR_ACCESS_TOKEN',
|
|
26
|
+
headers: { 'x-api-key': 'YOUR_API_KEY' },
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Interceptors
|
|
31
|
+
|
|
32
|
+
Use `client.interceptors` to handle token refresh, logging, or errors:
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
import { client } from '@musallam/ffs-firefly-client';
|
|
36
|
+
|
|
37
|
+
// Refresh token before each request
|
|
38
|
+
client.interceptors.request.use((request) => {
|
|
39
|
+
request.headers.set('Authorization', `Bearer ${getAccessToken()}`);
|
|
40
|
+
return request;
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Log responses
|
|
44
|
+
client.interceptors.response.use((response) => {
|
|
45
|
+
console.log(`${response.status} ${response.url}`);
|
|
46
|
+
return response;
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Eject when no longer needed
|
|
50
|
+
const id = client.interceptors.request.use(myInterceptor);
|
|
51
|
+
client.interceptors.request.eject(id);
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Usage
|
|
55
|
+
|
|
56
|
+
### Flat (tree-shakeable)
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { createClient, createConfig } from '@musallam/ffs-firefly-client';
|
|
60
|
+
import {
|
|
61
|
+
generateImagesV3Async,
|
|
62
|
+
expandImagesV3Async,
|
|
63
|
+
fillImagesV3Async,
|
|
64
|
+
} from '@musallam/ffs-firefly-client';
|
|
65
|
+
|
|
66
|
+
createClient(
|
|
67
|
+
createConfig({
|
|
68
|
+
baseUrl: 'https://firefly-api.adobe.io',
|
|
69
|
+
headers: {
|
|
70
|
+
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
|
|
71
|
+
'x-api-key': 'YOUR_API_KEY',
|
|
72
|
+
},
|
|
73
|
+
})
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
const result = await generateImagesV3Async({ body: { prompt: 'a cat on a surfboard' } });
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Class-based
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
import { createClient, createConfig, FireflySdk } from '@musallam/ffs-firefly-client/sdk';
|
|
83
|
+
|
|
84
|
+
const client = createClient(
|
|
85
|
+
createConfig({
|
|
86
|
+
baseUrl: 'https://firefly-api.adobe.io',
|
|
87
|
+
headers: {
|
|
88
|
+
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
|
|
89
|
+
'x-api-key': 'YOUR_API_KEY',
|
|
90
|
+
},
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
const firefly = new FireflySdk(client);
|
|
94
|
+
|
|
95
|
+
const result = await firefly.generateImagesV3Async({ body: { prompt: 'a cat on a surfboard' } });
|
|
96
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
|
package/dist/flat.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`);let t=require(`ky`);t=e.t(t);const n={bodySerializer:e=>JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)};Object.entries({$body_:`body`,$headers_:`headers`,$path_:`path`,$query_:`query`});const r=({onRequest:e,onSseError:t,onSseEvent:n,responseTransformer:r,responseValidator:i,sseDefaultRetryDelay:a,sseMaxRetryAttempts:o,sseMaxRetryDelay:s,sseSleepFn:c,url:l,...u})=>{let d,f=c??(e=>new Promise(t=>setTimeout(t,e)));return{stream:async function*(){let c=a??3e3,p=0,m=u.signal??new AbortController().signal;for(;!m.aborted;){p++;let a=u.headers instanceof Headers?u.headers:new Headers(u.headers);d!==void 0&&a.set(`Last-Event-ID`,d);try{let t={redirect:`follow`,...u,body:u.serializedBody,headers:a,signal:m},o=new Request(l,t);e&&(o=await e(l,t));let s=await(u.fetch??globalThis.fetch)(o);if(!s.ok)throw Error(`SSE failed: ${s.status} ${s.statusText}`);if(!s.body)throw Error(`No body in SSE response`);let f=s.body.pipeThrough(new TextDecoderStream).getReader(),p=``,h=()=>{try{f.cancel()}catch{}};m.addEventListener(`abort`,h);try{for(;;){let{done:e,value:t}=await f.read();if(e)break;p+=t,p=p.replace(/\r\n/g,`
|
|
2
2
|
`).replace(/\r/g,`
|
|
3
3
|
`);let a=p.split(`
|
|
4
4
|
|
|
5
5
|
`);p=a.pop()??``;for(let e of a){let t=e.split(`
|
|
6
6
|
`),a=[],o;for(let e of t)if(e.startsWith(`data:`))a.push(e.replace(/^data:\s*/,``));else if(e.startsWith(`event:`))o=e.replace(/^event:\s*/,``);else if(e.startsWith(`id:`))d=e.replace(/^id:\s*/,``);else if(e.startsWith(`retry:`)){let t=Number.parseInt(e.replace(/^retry:\s*/,``),10);Number.isNaN(t)||(c=t)}let s,l=!1;if(a.length){let e=a.join(`
|
|
7
|
-
`);try{s=JSON.parse(e),l=!0}catch{s=e}}l&&(i&&await i(s),r&&(s=await r(s))),n?.({data:s,event:o,id:d,retry:c}),a.length&&(yield s)}}}finally{m.removeEventListener(`abort`,h),f.releaseLock()}break}catch(e){if(t?.(e),o!==void 0&&p>=o)break;await f(Math.min(c*2**(p-1),s??3e4))}}}()}},r=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},i=e=>{switch(e){case`form`:return`,`;case`pipeDelimited`:return`|`;case`spaceDelimited`:return`%20`;default:return`,`}},a=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},o=({allowReserved:e,explode:t,name:n,style:a,value:o})=>{if(!t){let t=(e?o:o.map(e=>encodeURIComponent(e))).join(i(a));switch(a){case`label`:return`.${t}`;case`matrix`:return`;${n}=${t}`;case`simple`:return t;default:return`${n}=${t}`}}let c=r(a),l=o.map(t=>a===`label`||a===`simple`?e?t:encodeURIComponent(t):s({allowReserved:e,name:n,value:t})).join(c);return a===`label`||a===`matrix`?c+l:l},s=({allowReserved:e,name:t,value:n})=>{if(n==null)return``;if(typeof n==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${t}=${e?n:encodeURIComponent(n)}`},c=({allowReserved:e,explode:t,name:n,style:r,value:i,valueOnly:o})=>{if(i instanceof Date)return o?i.toISOString():`${n}=${i.toISOString()}`;if(r!==`deepObject`&&!t){let t=[];Object.entries(i).forEach(([n,r])=>{t=[...t,n,e?r:encodeURIComponent(r)]});let a=t.join(`,`);switch(r){case`form`:return`${n}=${a}`;case`label`:return`.${a}`;case`matrix`:return`;${n}=${a}`;default:return a}}let c=a(r),l=Object.entries(i).map(([t,i])=>s({allowReserved:e,name:r===`deepObject`?`${n}[${t}]`:t,value:i})).join(c);return r===`label`||r===`matrix`?c+l:l},l=/\{[^{}]+\}/g,u=({path:e,url:t})=>{let n=t,r=t.match(l);if(r)for(let t of r){let r=!1,i=t.substring(1,t.length-1),a=`simple`;i.endsWith(`*`)&&(r=!0,i=i.substring(0,i.length-1)),i.startsWith(`.`)?(i=i.substring(1),a=`label`):i.startsWith(`;`)&&(i=i.substring(1),a=`matrix`);let l=e[i];if(l==null)continue;if(Array.isArray(l)){n=n.replace(t,o({explode:r,name:i,style:a,value:l}));continue}if(typeof l==`object`){n=n.replace(t,c({explode:r,name:i,style:a,value:l,valueOnly:!0}));continue}if(a===`matrix`){n=n.replace(t,`;${s({name:i,value:l})}`);continue}let u=encodeURIComponent(a===`label`?`.${l}`:l);n=n.replace(t,u)}return n},d=({baseUrl:e,path:t,query:n,querySerializer:r,url:i})=>{let a=i.startsWith(`/`)?i:`/${i}`,o=(e??``)+a;t&&(o=u({path:t,url:o}));let s=n?r(n):``;return s.startsWith(`?`)&&(s=s.substring(1)),s&&(o+=`?${s}`),o};function f(e){let t=e.body!==void 0;if(t&&e.bodySerializer)return`serializedBody`in e?e.serializedBody!==void 0&&e.serializedBody!==``?e.serializedBody:null:e.body===``?null:e.body;if(t)return e.body}const p=async(e,t)=>{let n=typeof t==`function`?await t(e):t;if(n)return e.scheme===`bearer`?`Bearer ${n}`:e.scheme===`basic`?`Basic ${btoa(n)}`:n},m=({parameters:e={},...t}={})=>n=>{let r=[];if(n&&typeof n==`object`)for(let i in n){let a=n[i];if(a==null)continue;let l=e[i]||t;if(Array.isArray(a)){let e=o({allowReserved:l.allowReserved,explode:!0,name:i,style:`form`,value:a,...l.array});e&&r.push(e)}else if(typeof a==`object`){let e=c({allowReserved:l.allowReserved,explode:!0,name:i,style:`deepObject`,value:a,...l.object});e&&r.push(e)}else{let e=s({allowReserved:l.allowReserved,name:i,value:a});e&&r.push(e)}}return r.join(`&`)},h=e=>{if(!e)return`stream`;let t=e.split(`;`)[0]?.trim();if(t){if(t.startsWith(`application/json`)||t.endsWith(`+json`))return`json`;if(t===`multipart/form-data`)return`formData`;if([`application/`,`audio/`,`image/`,`video/`].some(e=>t.startsWith(e)))return`blob`;if(t.startsWith(`text/`))return`text`}},g=(e,t)=>t?!!(e.headers.has(t)||e.query?.[t]||e.headers.get(`Cookie`)?.includes(`${t}=`)):!1,_=async({security:e,...t})=>{for(let n of e){if(g(t,n.name))continue;let e=await p(n,t.auth);if(!e)continue;let r=n.name??`Authorization`;switch(n.in){case`query`:t.query||={},t.query[r]=e;break;case`cookie`:t.headers.append(`Cookie`,`${r}=${e}`);break;default:t.headers.set(r,e);break}}},v=e=>d({baseUrl:e.baseUrl,path:e.path,query:e.query,querySerializer:typeof e.querySerializer==`function`?e.querySerializer:m(e.querySerializer),url:e.url}),y=(e,t)=>{let n={...e,...t};return n.baseUrl?.endsWith(`/`)&&(n.baseUrl=n.baseUrl.substring(0,n.baseUrl.length-1)),n.headers=x(e.headers,t.headers),n},b=e=>{let t=[];return e.forEach((e,n)=>{t.push([n,e])}),t},x=(...e)=>{let t=new Headers;for(let n of e){if(!n)continue;let e=n instanceof Headers?b(n):Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,typeof r==`object`?JSON.stringify(r):r)}return t};var S=class{fns=[];clear(){this.fns=[]}eject(e){let t=this.getInterceptorIndex(e);this.fns[t]&&(this.fns[t]=null)}exists(e){let t=this.getInterceptorIndex(e);return!!this.fns[t]}getInterceptorIndex(e){return typeof e==`number`?this.fns[e]?e:-1:this.fns.indexOf(e)}update(e,t){let n=this.getInterceptorIndex(e);return this.fns[n]?(this.fns[n]=t,e):!1}use(e){return this.fns.push(e),this.fns.length-1}};const C=()=>({error:new S,request:new S,response:new S}),w=m({allowReserved:!1,array:{explode:!0,style:`form`},object:{explode:!0,style:`deepObject`}}),T={"Content-Type":`application/json`},E=(e={})=>({...t,headers:T,parseAs:`auto`,querySerializer:w,throwOnError:!1,timeout:1e4,...e}),D=((t={})=>{let r=y(E(),t),i=()=>({...r}),a=e=>(r=y(r,e),i()),o=C(),s=async t=>{let n={...r,...t,headers:x(r.headers,t.headers),ky:t.ky??r.ky??e.t,serializedBody:void 0};return n.security&&await _({...n,security:n.security}),n.requestValidator&&await n.requestValidator(n),n.body!==void 0&&n.bodySerializer&&(n.serializedBody=n.bodySerializer(n.body)),(n.body===void 0||n.serializedBody===``)&&n.headers.delete(`Content-Type`),{opts:n,url:v(n)}},c=async(e,t,n,r)=>{let i={request:t,response:e},a=await e.text(),o;try{o=JSON.parse(a)}catch{o=void 0}let s=o??a,c=s;for(let i of r.error.fns)i&&(c=await i(s,e,t,n));if(c||={},n.throwOnError)throw c;return n.responseStyle===`data`?void 0:{error:c,...i}},l=async e=>{let{opts:t,url:n}=await s(e),r=t.ky,i={body:f(t),cache:t.cache,credentials:t.credentials,headers:t.headers,integrity:t.integrity,keepalive:t.keepalive,method:t.method,mode:t.mode,redirect:`follow`,referrer:t.referrer,referrerPolicy:t.referrerPolicy,signal:t.signal,throwHttpErrors:t.throwOnError??!1,timeout:t.timeout,...t.kyOptions};if(t.retry&&typeof t.retry==`object`){let e=t.retry;i.retry={limit:e.limit??2,methods:e.methods,statusCodes:e.statusCodes}}let a=new Request(n,{body:i.body,headers:i.headers,method:i.method});for(let e of o.request.fns)e&&(a=await e(a,t));let l;try{l=await r(a,i)}catch(e){if(e&&typeof e==`object`&&`response`in e){l=e.response;for(let e of o.response.fns)e&&(l=await e(l,a,t));return c(l,a,t,o)}throw e}for(let e of o.response.fns)e&&(l=await e(l,a,t));let u={request:a,response:l};if(l.ok){let e=(t.parseAs===`auto`?h(l.headers.get(`Content-Type`)):t.parseAs)??`json`;if(l.status===204||l.headers.get(`Content-Length`)===`0`){let n;switch(e){case`arrayBuffer`:case`blob`:case`text`:n=await l[e]();break;case`formData`:n=new FormData;break;case`stream`:n=l.body;break;default:n={};break}return t.responseStyle===`data`?n:{data:n,...u}}let n;switch(e){case`arrayBuffer`:case`blob`:case`formData`:case`text`:n=await l[e]();break;case`json`:{let e=await l.text();n=e?JSON.parse(e):{};break}case`stream`:return t.responseStyle===`data`?l.body:{data:l.body,...u}}return e===`json`&&(t.responseValidator&&await t.responseValidator(n),t.responseTransformer&&(n=await t.responseTransformer(n))),t.responseStyle===`data`?n:{data:n,...u}}return c(l,a,t,o)},u=e=>t=>l({...t,method:e}),d=e=>async t=>{let{opts:r,url:i}=await s(t);return n({...r,body:r.body,fetch:globalThis.fetch,headers:r.headers,method:e,onRequest:async(e,t)=>{let n=new Request(e,t);for(let e of o.request.fns)e&&(n=await e(n,r));return n},serializedBody:f(r),url:i})};return{buildUrl:e=>v({...r,...e}),connect:u(`CONNECT`),delete:u(`DELETE`),get:u(`GET`),getConfig:i,head:u(`HEAD`),interceptors:o,options:u(`OPTIONS`),patch:u(`PATCH`),post:u(`POST`),put:u(`PUT`),request:l,setConfig:a,sse:{connect:d(`CONNECT`),delete:d(`DELETE`),get:d(`GET`),head:d(`HEAD`),options:d(`OPTIONS`),patch:d(`PATCH`),post:d(`POST`),put:d(`PUT`),trace:d(`TRACE`)},trace:u(`TRACE`)}})(E({baseUrl:`https://firefly-api.adobe.io`})),O=e=>(e.client??D).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/generate-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),k=e=>(e.client??D).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/generate-similar-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),A=e=>(e.client??D).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/expand-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),j=e=>(e.client??D).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/fill-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),M=e=>(e.client??D).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/generate-object-composite-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),N=e=>(e.client??D).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/precise-composite`,...e}),P=e=>(e.client??D).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/adaptive-composite`,...e}),F=e=>(e.client??D).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/videos/generate`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),I=e=>(e.client??D).get({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/custom-models`,...e}),L=e=>(e.client??D).post({bodySerializer:null,security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v2/storage/image`,...e,headers:{"Content-Type":`image/jpeg`,...e.headers}}),R=e=>(e.client??D).get({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/status/{jobId}`,...e}),z=e=>(e.client??D).put({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/cancel/{jobId}`,...e});exports.adaptiveComposite=P,exports.cancelJobV4=z,exports.expandImagesV3Async=A,exports.fillImagesV3Async=j,exports.generateImagesV3Async=O,exports.generateObjectCompositeV3Async=M,exports.generateSimilarImagesV3Async=k,exports.generateVideoV3=F,exports.getCustomModels=I,exports.jobResultV3=R,exports.preciseComposite=N,exports.storageImageV2=L;
|
|
7
|
+
`);try{s=JSON.parse(e),l=!0}catch{s=e}}l&&(i&&await i(s),r&&(s=await r(s))),n?.({data:s,event:o,id:d,retry:c}),a.length&&(yield s)}}}finally{m.removeEventListener(`abort`,h),f.releaseLock()}break}catch(e){if(t?.(e),o!==void 0&&p>=o)break;await f(Math.min(c*2**(p-1),s??3e4))}}}()}},i=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},a=e=>{switch(e){case`form`:return`,`;case`pipeDelimited`:return`|`;case`spaceDelimited`:return`%20`;default:return`,`}},o=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},s=({allowReserved:e,explode:t,name:n,style:r,value:o})=>{if(!t){let t=(e?o:o.map(e=>encodeURIComponent(e))).join(a(r));switch(r){case`label`:return`.${t}`;case`matrix`:return`;${n}=${t}`;case`simple`:return t;default:return`${n}=${t}`}}let s=i(r),l=o.map(t=>r===`label`||r===`simple`?e?t:encodeURIComponent(t):c({allowReserved:e,name:n,value:t})).join(s);return r===`label`||r===`matrix`?s+l:l},c=({allowReserved:e,name:t,value:n})=>{if(n==null)return``;if(typeof n==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${t}=${e?n:encodeURIComponent(n)}`},l=({allowReserved:e,explode:t,name:n,style:r,value:i,valueOnly:a})=>{if(i instanceof Date)return a?i.toISOString():`${n}=${i.toISOString()}`;if(r!==`deepObject`&&!t){let t=[];Object.entries(i).forEach(([n,r])=>{t=[...t,n,e?r:encodeURIComponent(r)]});let a=t.join(`,`);switch(r){case`form`:return`${n}=${a}`;case`label`:return`.${a}`;case`matrix`:return`;${n}=${a}`;default:return a}}let s=o(r),l=Object.entries(i).map(([t,i])=>c({allowReserved:e,name:r===`deepObject`?`${n}[${t}]`:t,value:i})).join(s);return r===`label`||r===`matrix`?s+l:l},u=/\{[^{}]+\}/g,d=({path:e,url:t})=>{let n=t,r=t.match(u);if(r)for(let t of r){let r=!1,i=t.substring(1,t.length-1),a=`simple`;i.endsWith(`*`)&&(r=!0,i=i.substring(0,i.length-1)),i.startsWith(`.`)?(i=i.substring(1),a=`label`):i.startsWith(`;`)&&(i=i.substring(1),a=`matrix`);let o=e[i];if(o==null)continue;if(Array.isArray(o)){n=n.replace(t,s({explode:r,name:i,style:a,value:o}));continue}if(typeof o==`object`){n=n.replace(t,l({explode:r,name:i,style:a,value:o,valueOnly:!0}));continue}if(a===`matrix`){n=n.replace(t,`;${c({name:i,value:o})}`);continue}let u=encodeURIComponent(a===`label`?`.${o}`:o);n=n.replace(t,u)}return n},f=({baseUrl:e,path:t,query:n,querySerializer:r,url:i})=>{let a=i.startsWith(`/`)?i:`/${i}`,o=(e??``)+a;t&&(o=d({path:t,url:o}));let s=n?r(n):``;return s.startsWith(`?`)&&(s=s.substring(1)),s&&(o+=`?${s}`),o};function p(e){let t=e.body!==void 0;if(t&&e.bodySerializer)return`serializedBody`in e?e.serializedBody!==void 0&&e.serializedBody!==``?e.serializedBody:null:e.body===``?null:e.body;if(t)return e.body}const m=async(e,t)=>{let n=typeof t==`function`?await t(e):t;if(n)return e.scheme===`bearer`?`Bearer ${n}`:e.scheme===`basic`?`Basic ${btoa(n)}`:n},h=({parameters:e={},...t}={})=>n=>{let r=[];if(n&&typeof n==`object`)for(let i in n){let a=n[i];if(a==null)continue;let o=e[i]||t;if(Array.isArray(a)){let e=s({allowReserved:o.allowReserved,explode:!0,name:i,style:`form`,value:a,...o.array});e&&r.push(e)}else if(typeof a==`object`){let e=l({allowReserved:o.allowReserved,explode:!0,name:i,style:`deepObject`,value:a,...o.object});e&&r.push(e)}else{let e=c({allowReserved:o.allowReserved,name:i,value:a});e&&r.push(e)}}return r.join(`&`)},g=e=>{if(!e)return`stream`;let t=e.split(`;`)[0]?.trim();if(t){if(t.startsWith(`application/json`)||t.endsWith(`+json`))return`json`;if(t===`multipart/form-data`)return`formData`;if([`application/`,`audio/`,`image/`,`video/`].some(e=>t.startsWith(e)))return`blob`;if(t.startsWith(`text/`))return`text`}},_=(e,t)=>t?!!(e.headers.has(t)||e.query?.[t]||e.headers.get(`Cookie`)?.includes(`${t}=`)):!1,v=async({security:e,...t})=>{for(let n of e){if(_(t,n.name))continue;let e=await m(n,t.auth);if(!e)continue;let r=n.name??`Authorization`;switch(n.in){case`query`:t.query||={},t.query[r]=e;break;case`cookie`:t.headers.append(`Cookie`,`${r}=${e}`);break;default:t.headers.set(r,e);break}}},y=e=>f({baseUrl:e.baseUrl,path:e.path,query:e.query,querySerializer:typeof e.querySerializer==`function`?e.querySerializer:h(e.querySerializer),url:e.url}),b=(e,t)=>{let n={...e,...t};return n.baseUrl?.endsWith(`/`)&&(n.baseUrl=n.baseUrl.substring(0,n.baseUrl.length-1)),n.headers=S(e.headers,t.headers),n},x=e=>{let t=[];return e.forEach((e,n)=>{t.push([n,e])}),t},S=(...e)=>{let t=new Headers;for(let n of e){if(!n)continue;let e=n instanceof Headers?x(n):Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,typeof r==`object`?JSON.stringify(r):r)}return t};var C=class{fns=[];clear(){this.fns=[]}eject(e){let t=this.getInterceptorIndex(e);this.fns[t]&&(this.fns[t]=null)}exists(e){let t=this.getInterceptorIndex(e);return!!this.fns[t]}getInterceptorIndex(e){return typeof e==`number`?this.fns[e]?e:-1:this.fns.indexOf(e)}update(e,t){let n=this.getInterceptorIndex(e);return this.fns[n]?(this.fns[n]=t,e):!1}use(e){return this.fns.push(e),this.fns.length-1}};const w=()=>({error:new C,request:new C,response:new C}),T=h({allowReserved:!1,array:{explode:!0,style:`form`},object:{explode:!0,style:`deepObject`}}),E={"Content-Type":`application/json`},D=(e={})=>({...n,headers:E,parseAs:`auto`,querySerializer:T,throwOnError:!1,timeout:1e4,...e}),O=(e={})=>{let n=b(D(),e),i=()=>({...n}),a=e=>(n=b(n,e),i()),o=w(),s=async e=>{let r={...n,...e,headers:S(n.headers,e.headers),ky:e.ky??n.ky??t.default,serializedBody:void 0};return r.security&&await v({...r,security:r.security}),r.requestValidator&&await r.requestValidator(r),r.body!==void 0&&r.bodySerializer&&(r.serializedBody=r.bodySerializer(r.body)),(r.body===void 0||r.serializedBody===``)&&r.headers.delete(`Content-Type`),{opts:r,url:y(r)}},c=async(e,t,n,r)=>{let i={request:t,response:e},a=await e.text(),o;try{o=JSON.parse(a)}catch{o=void 0}let s=o??a,c=s;for(let i of r.error.fns)i&&(c=await i(s,e,t,n));if(c||={},n.throwOnError)throw c;return n.responseStyle===`data`?void 0:{error:c,...i}},l=async e=>{let{opts:t,url:n}=await s(e),r=t.ky,i={body:p(t),cache:t.cache,credentials:t.credentials,headers:t.headers,integrity:t.integrity,keepalive:t.keepalive,method:t.method,mode:t.mode,redirect:`follow`,referrer:t.referrer,referrerPolicy:t.referrerPolicy,signal:t.signal,throwHttpErrors:t.throwOnError??!1,timeout:t.timeout,...t.kyOptions};if(t.retry&&typeof t.retry==`object`){let e=t.retry;i.retry={limit:e.limit??2,methods:e.methods,statusCodes:e.statusCodes}}let a=new Request(n,{body:i.body,headers:i.headers,method:i.method});for(let e of o.request.fns)e&&(a=await e(a,t));let l;try{l=await r(a,i)}catch(e){if(e&&typeof e==`object`&&`response`in e){l=e.response;for(let e of o.response.fns)e&&(l=await e(l,a,t));return c(l,a,t,o)}throw e}for(let e of o.response.fns)e&&(l=await e(l,a,t));let u={request:a,response:l};if(l.ok){let e=(t.parseAs===`auto`?g(l.headers.get(`Content-Type`)):t.parseAs)??`json`;if(l.status===204||l.headers.get(`Content-Length`)===`0`){let n;switch(e){case`arrayBuffer`:case`blob`:case`text`:n=await l[e]();break;case`formData`:n=new FormData;break;case`stream`:n=l.body;break;default:n={};break}return t.responseStyle===`data`?n:{data:n,...u}}let n;switch(e){case`arrayBuffer`:case`blob`:case`formData`:case`text`:n=await l[e]();break;case`json`:{let e=await l.text();n=e?JSON.parse(e):{};break}case`stream`:return t.responseStyle===`data`?l.body:{data:l.body,...u}}return e===`json`&&(t.responseValidator&&await t.responseValidator(n),t.responseTransformer&&(n=await t.responseTransformer(n))),t.responseStyle===`data`?n:{data:n,...u}}return c(l,a,t,o)},u=e=>t=>l({...t,method:e}),d=e=>async t=>{let{opts:n,url:i}=await s(t);return r({...n,body:n.body,fetch:globalThis.fetch,headers:n.headers,method:e,onRequest:async(e,t)=>{let r=new Request(e,t);for(let e of o.request.fns)e&&(r=await e(r,n));return r},serializedBody:p(n),url:i})};return{buildUrl:e=>y({...n,...e}),connect:u(`CONNECT`),delete:u(`DELETE`),get:u(`GET`),getConfig:i,head:u(`HEAD`),interceptors:o,options:u(`OPTIONS`),patch:u(`PATCH`),post:u(`POST`),put:u(`PUT`),request:l,setConfig:a,sse:{connect:d(`CONNECT`),delete:d(`DELETE`),get:d(`GET`),head:d(`HEAD`),options:d(`OPTIONS`),patch:d(`PATCH`),post:d(`POST`),put:d(`PUT`),trace:d(`TRACE`)},trace:u(`TRACE`)}},k=O(D({baseUrl:`https://firefly-api.adobe.io`})),A=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/generate-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),j=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v4/images/generate-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),M=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/generate-similar-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),N=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/expand-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),P=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/fill-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),F=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/generate-object-composite-async`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),I=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/precise-composite`,...e}),L=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/adaptive-composite`,...e}),R=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/images/upscale`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),z=e=>(e.client??k).post({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/videos/generate`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),B=e=>(e.client??k).get({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/custom-models`,...e}),V=e=>(e.client??k).post({bodySerializer:null,security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v2/storage/image`,...e,headers:{"Content-Type":`image/jpeg`,...e.headers}}),H=e=>(e.client??k).get({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/status/{jobId}`,...e}),U=e=>(e.client??k).put({security:[{name:`x-api-key`,type:`apiKey`},{scheme:`bearer`,type:`http`}],url:`/v3/cancel/{jobId}`,...e});exports.adaptiveComposite=L,exports.cancelJobV4=U,exports.client=k,exports.createClient=O,exports.createConfig=D,exports.creativeUpsamplerV3Async=R,exports.expandImagesV3Async=N,exports.fillImagesV3Async=P,exports.fireflyImageV5GenerateAsyncV4=j,exports.generateImagesV3Async=A,exports.generateObjectCompositeV3Async=F,exports.generateSimilarImagesV3Async=M,exports.generateVideoV3=z,exports.getCustomModels=B,exports.jobResultV3=H,exports.mergeHeaders=S,exports.preciseComposite=I,exports.storageImageV2=V;
|