imgx-cli 0.5.1 → 0.6.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.
@@ -303,7 +303,7 @@ var require_p_retry = __commonJS({
303
303
  return error;
304
304
  };
305
305
  var isNetworkError = (errorMessage) => networkErrorMsgs.includes(errorMessage);
306
- var pRetry2 = (input, options) => new Promise((resolve4, reject) => {
306
+ var pRetry2 = (input, options) => new Promise((resolve5, reject) => {
307
307
  options = {
308
308
  onFailedAttempt: () => {
309
309
  },
@@ -313,7 +313,7 @@ var require_p_retry = __commonJS({
313
313
  const operation = retry.operation(options);
314
314
  operation.attempt(async (attemptNumber) => {
315
315
  try {
316
- resolve4(await input(attemptNumber));
316
+ resolve5(await input(attemptNumber));
317
317
  } catch (error) {
318
318
  if (!(error instanceof Error)) {
319
319
  reject(new TypeError(`Non-error was thrown: "${error}". You should only throw errors.`));
@@ -850,8 +850,8 @@ var require_retry3 = __commonJS({
850
850
  }
851
851
  const delay = getNextRetryDelay(config);
852
852
  err.config.retryConfig.currentRetryAttempt += 1;
853
- const backoff = config.retryBackoff ? config.retryBackoff(err, delay) : new Promise((resolve4) => {
854
- setTimeout(resolve4, delay);
853
+ const backoff = config.retryBackoff ? config.retryBackoff(err, delay) : new Promise((resolve5) => {
854
+ setTimeout(resolve5, delay);
855
855
  });
856
856
  if (config.onRetryAttempt) {
857
857
  await config.onRetryAttempt(err);
@@ -1627,8 +1627,8 @@ var require_helpers = __commonJS({
1627
1627
  function req(url, opts = {}) {
1628
1628
  const href = typeof url === "string" ? url : url.href;
1629
1629
  const req2 = (href.startsWith("https:") ? https2 : http3).request(url, opts);
1630
- const promise = new Promise((resolve4, reject) => {
1631
- req2.once("response", resolve4).once("error", reject).end();
1630
+ const promise = new Promise((resolve5, reject) => {
1631
+ req2.once("response", resolve5).once("error", reject).end();
1632
1632
  });
1633
1633
  req2.then = promise.then.bind(promise);
1634
1634
  return req2;
@@ -1805,7 +1805,7 @@ var require_parse_proxy_response = __commonJS({
1805
1805
  var debug_1 = __importDefault(require_src());
1806
1806
  var debug = (0, debug_1.default)("https-proxy-agent:parse-proxy-response");
1807
1807
  function parseProxyResponse(socket) {
1808
- return new Promise((resolve4, reject) => {
1808
+ return new Promise((resolve5, reject) => {
1809
1809
  let buffersLength = 0;
1810
1810
  const buffers = [];
1811
1811
  function read() {
@@ -1871,7 +1871,7 @@ var require_parse_proxy_response = __commonJS({
1871
1871
  }
1872
1872
  debug("got proxy server response: %o %o", firstLine, headers);
1873
1873
  cleanup();
1874
- resolve4({
1874
+ resolve5({
1875
1875
  connect: {
1876
1876
  statusCode,
1877
1877
  statusText,
@@ -2113,7 +2113,7 @@ var require_ponyfill_es2018 = __commonJS({
2113
2113
  return new originalPromise(executor);
2114
2114
  }
2115
2115
  function promiseResolvedWith(value) {
2116
- return newPromise((resolve4) => resolve4(value));
2116
+ return newPromise((resolve5) => resolve5(value));
2117
2117
  }
2118
2118
  function promiseRejectedWith(reason) {
2119
2119
  return originalPromiseReject(reason);
@@ -2283,8 +2283,8 @@ var require_ponyfill_es2018 = __commonJS({
2283
2283
  return new TypeError("Cannot " + name + " a stream using a released reader");
2284
2284
  }
2285
2285
  function defaultReaderClosedPromiseInitialize(reader) {
2286
- reader._closedPromise = newPromise((resolve4, reject) => {
2287
- reader._closedPromise_resolve = resolve4;
2286
+ reader._closedPromise = newPromise((resolve5, reject) => {
2287
+ reader._closedPromise_resolve = resolve5;
2288
2288
  reader._closedPromise_reject = reject;
2289
2289
  });
2290
2290
  }
@@ -2458,8 +2458,8 @@ var require_ponyfill_es2018 = __commonJS({
2458
2458
  }
2459
2459
  let resolvePromise;
2460
2460
  let rejectPromise;
2461
- const promise = newPromise((resolve4, reject) => {
2462
- resolvePromise = resolve4;
2461
+ const promise = newPromise((resolve5, reject) => {
2462
+ resolvePromise = resolve5;
2463
2463
  rejectPromise = reject;
2464
2464
  });
2465
2465
  const readRequest = {
@@ -2564,8 +2564,8 @@ var require_ponyfill_es2018 = __commonJS({
2564
2564
  const reader = this._reader;
2565
2565
  let resolvePromise;
2566
2566
  let rejectPromise;
2567
- const promise = newPromise((resolve4, reject) => {
2568
- resolvePromise = resolve4;
2567
+ const promise = newPromise((resolve5, reject) => {
2568
+ resolvePromise = resolve5;
2569
2569
  rejectPromise = reject;
2570
2570
  });
2571
2571
  const readRequest = {
@@ -3584,8 +3584,8 @@ var require_ponyfill_es2018 = __commonJS({
3584
3584
  }
3585
3585
  let resolvePromise;
3586
3586
  let rejectPromise;
3587
- const promise = newPromise((resolve4, reject) => {
3588
- resolvePromise = resolve4;
3587
+ const promise = newPromise((resolve5, reject) => {
3588
+ resolvePromise = resolve5;
3589
3589
  rejectPromise = reject;
3590
3590
  });
3591
3591
  const readIntoRequest = {
@@ -3897,10 +3897,10 @@ var require_ponyfill_es2018 = __commonJS({
3897
3897
  wasAlreadyErroring = true;
3898
3898
  reason = void 0;
3899
3899
  }
3900
- const promise = newPromise((resolve4, reject) => {
3900
+ const promise = newPromise((resolve5, reject) => {
3901
3901
  stream._pendingAbortRequest = {
3902
3902
  _promise: void 0,
3903
- _resolve: resolve4,
3903
+ _resolve: resolve5,
3904
3904
  _reject: reject,
3905
3905
  _reason: reason,
3906
3906
  _wasAlreadyErroring: wasAlreadyErroring
@@ -3917,9 +3917,9 @@ var require_ponyfill_es2018 = __commonJS({
3917
3917
  if (state === "closed" || state === "errored") {
3918
3918
  return promiseRejectedWith(new TypeError(`The stream (in ${state} state) is not in the writable state and cannot be closed`));
3919
3919
  }
3920
- const promise = newPromise((resolve4, reject) => {
3920
+ const promise = newPromise((resolve5, reject) => {
3921
3921
  const closeRequest = {
3922
- _resolve: resolve4,
3922
+ _resolve: resolve5,
3923
3923
  _reject: reject
3924
3924
  };
3925
3925
  stream._closeRequest = closeRequest;
@@ -3932,9 +3932,9 @@ var require_ponyfill_es2018 = __commonJS({
3932
3932
  return promise;
3933
3933
  }
3934
3934
  function WritableStreamAddWriteRequest(stream) {
3935
- const promise = newPromise((resolve4, reject) => {
3935
+ const promise = newPromise((resolve5, reject) => {
3936
3936
  const writeRequest = {
3937
- _resolve: resolve4,
3937
+ _resolve: resolve5,
3938
3938
  _reject: reject
3939
3939
  };
3940
3940
  stream._writeRequests.push(writeRequest);
@@ -4550,8 +4550,8 @@ var require_ponyfill_es2018 = __commonJS({
4550
4550
  return new TypeError("Cannot " + name + " a stream using a released writer");
4551
4551
  }
4552
4552
  function defaultWriterClosedPromiseInitialize(writer) {
4553
- writer._closedPromise = newPromise((resolve4, reject) => {
4554
- writer._closedPromise_resolve = resolve4;
4553
+ writer._closedPromise = newPromise((resolve5, reject) => {
4554
+ writer._closedPromise_resolve = resolve5;
4555
4555
  writer._closedPromise_reject = reject;
4556
4556
  writer._closedPromiseState = "pending";
4557
4557
  });
@@ -4587,8 +4587,8 @@ var require_ponyfill_es2018 = __commonJS({
4587
4587
  writer._closedPromiseState = "resolved";
4588
4588
  }
4589
4589
  function defaultWriterReadyPromiseInitialize(writer) {
4590
- writer._readyPromise = newPromise((resolve4, reject) => {
4591
- writer._readyPromise_resolve = resolve4;
4590
+ writer._readyPromise = newPromise((resolve5, reject) => {
4591
+ writer._readyPromise_resolve = resolve5;
4592
4592
  writer._readyPromise_reject = reject;
4593
4593
  });
4594
4594
  writer._readyPromiseState = "pending";
@@ -4675,7 +4675,7 @@ var require_ponyfill_es2018 = __commonJS({
4675
4675
  source._disturbed = true;
4676
4676
  let shuttingDown = false;
4677
4677
  let currentWrite = promiseResolvedWith(void 0);
4678
- return newPromise((resolve4, reject) => {
4678
+ return newPromise((resolve5, reject) => {
4679
4679
  let abortAlgorithm;
4680
4680
  if (signal !== void 0) {
4681
4681
  abortAlgorithm = () => {
@@ -4820,7 +4820,7 @@ var require_ponyfill_es2018 = __commonJS({
4820
4820
  if (isError) {
4821
4821
  reject(error);
4822
4822
  } else {
4823
- resolve4(void 0);
4823
+ resolve5(void 0);
4824
4824
  }
4825
4825
  return null;
4826
4826
  }
@@ -5101,8 +5101,8 @@ var require_ponyfill_es2018 = __commonJS({
5101
5101
  let branch1;
5102
5102
  let branch2;
5103
5103
  let resolveCancelPromise;
5104
- const cancelPromise = newPromise((resolve4) => {
5105
- resolveCancelPromise = resolve4;
5104
+ const cancelPromise = newPromise((resolve5) => {
5105
+ resolveCancelPromise = resolve5;
5106
5106
  });
5107
5107
  function pullAlgorithm() {
5108
5108
  if (reading) {
@@ -5193,8 +5193,8 @@ var require_ponyfill_es2018 = __commonJS({
5193
5193
  let branch1;
5194
5194
  let branch2;
5195
5195
  let resolveCancelPromise;
5196
- const cancelPromise = newPromise((resolve4) => {
5197
- resolveCancelPromise = resolve4;
5196
+ const cancelPromise = newPromise((resolve5) => {
5197
+ resolveCancelPromise = resolve5;
5198
5198
  });
5199
5199
  function forwardReaderError(thisReader) {
5200
5200
  uponRejection(thisReader._closedPromise, (r2) => {
@@ -5974,8 +5974,8 @@ var require_ponyfill_es2018 = __commonJS({
5974
5974
  const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);
5975
5975
  const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);
5976
5976
  let startPromise_resolve;
5977
- const startPromise = newPromise((resolve4) => {
5978
- startPromise_resolve = resolve4;
5977
+ const startPromise = newPromise((resolve5) => {
5978
+ startPromise_resolve = resolve5;
5979
5979
  });
5980
5980
  InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
5981
5981
  SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);
@@ -6068,8 +6068,8 @@ var require_ponyfill_es2018 = __commonJS({
6068
6068
  if (stream._backpressureChangePromise !== void 0) {
6069
6069
  stream._backpressureChangePromise_resolve();
6070
6070
  }
6071
- stream._backpressureChangePromise = newPromise((resolve4) => {
6072
- stream._backpressureChangePromise_resolve = resolve4;
6071
+ stream._backpressureChangePromise = newPromise((resolve5) => {
6072
+ stream._backpressureChangePromise_resolve = resolve5;
6073
6073
  });
6074
6074
  stream._backpressure = backpressure;
6075
6075
  }
@@ -6237,8 +6237,8 @@ var require_ponyfill_es2018 = __commonJS({
6237
6237
  return controller._finishPromise;
6238
6238
  }
6239
6239
  const readable = stream._readable;
6240
- controller._finishPromise = newPromise((resolve4, reject) => {
6241
- controller._finishPromise_resolve = resolve4;
6240
+ controller._finishPromise = newPromise((resolve5, reject) => {
6241
+ controller._finishPromise_resolve = resolve5;
6242
6242
  controller._finishPromise_reject = reject;
6243
6243
  });
6244
6244
  const cancelPromise = controller._cancelAlgorithm(reason);
@@ -6264,8 +6264,8 @@ var require_ponyfill_es2018 = __commonJS({
6264
6264
  return controller._finishPromise;
6265
6265
  }
6266
6266
  const readable = stream._readable;
6267
- controller._finishPromise = newPromise((resolve4, reject) => {
6268
- controller._finishPromise_resolve = resolve4;
6267
+ controller._finishPromise = newPromise((resolve5, reject) => {
6268
+ controller._finishPromise_resolve = resolve5;
6269
6269
  controller._finishPromise_reject = reject;
6270
6270
  });
6271
6271
  const flushPromise = controller._flushAlgorithm();
@@ -6295,8 +6295,8 @@ var require_ponyfill_es2018 = __commonJS({
6295
6295
  return controller._finishPromise;
6296
6296
  }
6297
6297
  const writable = stream._writable;
6298
- controller._finishPromise = newPromise((resolve4, reject) => {
6299
- controller._finishPromise_resolve = resolve4;
6298
+ controller._finishPromise = newPromise((resolve5, reject) => {
6299
+ controller._finishPromise_resolve = resolve5;
6300
6300
  controller._finishPromise_reject = reject;
6301
6301
  });
6302
6302
  const cancelPromise = controller._cancelAlgorithm(reason);
@@ -8247,7 +8247,7 @@ import zlib from "node:zlib";
8247
8247
  import Stream2, { PassThrough as PassThrough2, pipeline as pump } from "node:stream";
8248
8248
  import { Buffer as Buffer3 } from "node:buffer";
8249
8249
  async function fetch2(url, options_) {
8250
- return new Promise((resolve4, reject) => {
8250
+ return new Promise((resolve5, reject) => {
8251
8251
  const request = new Request(url, options_);
8252
8252
  const { parsedURL, options } = getNodeRequestOptions(request);
8253
8253
  if (!supportedSchemas.has(parsedURL.protocol)) {
@@ -8256,7 +8256,7 @@ async function fetch2(url, options_) {
8256
8256
  if (parsedURL.protocol === "data:") {
8257
8257
  const data = dist_default(request.url);
8258
8258
  const response2 = new Response2(data, { headers: { "Content-Type": data.typeFull } });
8259
- resolve4(response2);
8259
+ resolve5(response2);
8260
8260
  return;
8261
8261
  }
8262
8262
  const send = (parsedURL.protocol === "https:" ? https : http2).request;
@@ -8378,7 +8378,7 @@ async function fetch2(url, options_) {
8378
8378
  if (responseReferrerPolicy) {
8379
8379
  requestOptions.referrerPolicy = responseReferrerPolicy;
8380
8380
  }
8381
- resolve4(fetch2(new Request(locationURL, requestOptions)));
8381
+ resolve5(fetch2(new Request(locationURL, requestOptions)));
8382
8382
  finalize();
8383
8383
  return;
8384
8384
  }
@@ -8411,7 +8411,7 @@ async function fetch2(url, options_) {
8411
8411
  const codings = headers.get("Content-Encoding");
8412
8412
  if (!request.compress || request.method === "HEAD" || codings === null || response_.statusCode === 204 || response_.statusCode === 304) {
8413
8413
  response = new Response2(body, responseOptions);
8414
- resolve4(response);
8414
+ resolve5(response);
8415
8415
  return;
8416
8416
  }
8417
8417
  const zlibOptions = {
@@ -8425,7 +8425,7 @@ async function fetch2(url, options_) {
8425
8425
  }
8426
8426
  });
8427
8427
  response = new Response2(body, responseOptions);
8428
- resolve4(response);
8428
+ resolve5(response);
8429
8429
  return;
8430
8430
  }
8431
8431
  if (codings === "deflate" || codings === "x-deflate") {
@@ -8449,12 +8449,12 @@ async function fetch2(url, options_) {
8449
8449
  });
8450
8450
  }
8451
8451
  response = new Response2(body, responseOptions);
8452
- resolve4(response);
8452
+ resolve5(response);
8453
8453
  });
8454
8454
  raw.once("end", () => {
8455
8455
  if (!response) {
8456
8456
  response = new Response2(body, responseOptions);
8457
- resolve4(response);
8457
+ resolve5(response);
8458
8458
  }
8459
8459
  });
8460
8460
  return;
@@ -8466,11 +8466,11 @@ async function fetch2(url, options_) {
8466
8466
  }
8467
8467
  });
8468
8468
  response = new Response2(body, responseOptions);
8469
- resolve4(response);
8469
+ resolve5(response);
8470
8470
  return;
8471
8471
  }
8472
8472
  response = new Response2(body, responseOptions);
8473
- resolve4(response);
8473
+ resolve5(response);
8474
8474
  });
8475
8475
  writeToStream(request_, request).catch(reject);
8476
8476
  });
@@ -14540,7 +14540,7 @@ var require_jwtaccess = __commonJS({
14540
14540
  }
14541
14541
  }
14542
14542
  fromStreamAsync(inputStream) {
14543
- return new Promise((resolve4, reject) => {
14543
+ return new Promise((resolve5, reject) => {
14544
14544
  if (!inputStream) {
14545
14545
  reject(new Error("Must pass in a stream containing the service account auth settings."));
14546
14546
  }
@@ -14549,7 +14549,7 @@ var require_jwtaccess = __commonJS({
14549
14549
  try {
14550
14550
  const data = JSON.parse(s2);
14551
14551
  this.fromJSON(data);
14552
- resolve4();
14552
+ resolve5();
14553
14553
  } catch (err) {
14554
14554
  reject(err);
14555
14555
  }
@@ -14788,7 +14788,7 @@ var require_jwtclient = __commonJS({
14788
14788
  }
14789
14789
  }
14790
14790
  fromStreamAsync(inputStream) {
14791
- return new Promise((resolve4, reject) => {
14791
+ return new Promise((resolve5, reject) => {
14792
14792
  if (!inputStream) {
14793
14793
  throw new Error("Must pass in a stream containing the service account auth settings.");
14794
14794
  }
@@ -14797,7 +14797,7 @@ var require_jwtclient = __commonJS({
14797
14797
  try {
14798
14798
  const data = JSON.parse(s2);
14799
14799
  this.fromJSON(data);
14800
- resolve4();
14800
+ resolve5();
14801
14801
  } catch (e2) {
14802
14802
  reject(e2);
14803
14803
  }
@@ -14930,7 +14930,7 @@ var require_refreshclient = __commonJS({
14930
14930
  }
14931
14931
  }
14932
14932
  async fromStreamAsync(inputStream) {
14933
- return new Promise((resolve4, reject) => {
14933
+ return new Promise((resolve5, reject) => {
14934
14934
  if (!inputStream) {
14935
14935
  return reject(new Error("Must pass in a stream containing the user refresh token."));
14936
14936
  }
@@ -14939,7 +14939,7 @@ var require_refreshclient = __commonJS({
14939
14939
  try {
14940
14940
  const data = JSON.parse(s2);
14941
14941
  this.fromJSON(data);
14942
- return resolve4();
14942
+ return resolve5();
14943
14943
  } catch (err) {
14944
14944
  return reject(err);
14945
14945
  }
@@ -16772,7 +16772,7 @@ var require_pluggable_auth_handler = __commonJS({
16772
16772
  * @return A promise that resolves with the executable response.
16773
16773
  */
16774
16774
  retrieveResponseFromExecutable(envMap) {
16775
- return new Promise((resolve4, reject) => {
16775
+ return new Promise((resolve5, reject) => {
16776
16776
  const child = childProcess.spawn(this.commandComponents[0], this.commandComponents.slice(1), {
16777
16777
  env: { ...process.env, ...Object.fromEntries(envMap) }
16778
16778
  });
@@ -16794,7 +16794,7 @@ var require_pluggable_auth_handler = __commonJS({
16794
16794
  try {
16795
16795
  const responseJson = JSON.parse(output);
16796
16796
  const response = new executable_response_1.ExecutableResponse(responseJson);
16797
- return resolve4(response);
16797
+ return resolve5(response);
16798
16798
  } catch (error) {
16799
16799
  if (error instanceof executable_response_1.ExecutableResponseError) {
16800
16800
  return reject(error);
@@ -17697,7 +17697,7 @@ var require_googleauth = __commonJS({
17697
17697
  }
17698
17698
  }
17699
17699
  fromStreamAsync(inputStream, options) {
17700
- return new Promise((resolve4, reject) => {
17700
+ return new Promise((resolve5, reject) => {
17701
17701
  if (!inputStream) {
17702
17702
  throw new Error("Must pass in a stream containing the Google auth settings.");
17703
17703
  }
@@ -17707,7 +17707,7 @@ var require_googleauth = __commonJS({
17707
17707
  try {
17708
17708
  const data = JSON.parse(chunks.join(""));
17709
17709
  const r2 = this._cacheClientFromJSON(data, options);
17710
- return resolve4(r2);
17710
+ return resolve5(r2);
17711
17711
  } catch (err) {
17712
17712
  if (!this.keyFilename)
17713
17713
  throw err;
@@ -17717,7 +17717,7 @@ var require_googleauth = __commonJS({
17717
17717
  });
17718
17718
  this.cachedCredential = client;
17719
17719
  this.setGapicJWTValues(client);
17720
- return resolve4(client);
17720
+ return resolve5(client);
17721
17721
  }
17722
17722
  } catch (err) {
17723
17723
  return reject(err);
@@ -17753,17 +17753,17 @@ var require_googleauth = __commonJS({
17753
17753
  * Run the Google Cloud SDK command that prints the default project ID
17754
17754
  */
17755
17755
  async getDefaultServiceProjectId() {
17756
- return new Promise((resolve4) => {
17756
+ return new Promise((resolve5) => {
17757
17757
  (0, child_process_1.exec)("gcloud config config-helper --format json", (err, stdout) => {
17758
17758
  if (!err && stdout) {
17759
17759
  try {
17760
17760
  const projectId = JSON.parse(stdout).configuration.properties.core.project;
17761
- resolve4(projectId);
17761
+ resolve5(projectId);
17762
17762
  return;
17763
17763
  } catch (e2) {
17764
17764
  }
17765
17765
  }
17766
- resolve4(null);
17766
+ resolve5(null);
17767
17767
  });
17768
17768
  });
17769
17769
  }
@@ -22081,9 +22081,12 @@ function saveConfig(config) {
22081
22081
  }
22082
22082
  }
22083
22083
  function resolveApiKey(providerName) {
22084
- if (providerName === "gemini" && process.env.GEMINI_API_KEY) {
22085
- return process.env.GEMINI_API_KEY;
22086
- }
22084
+ const envMap = {
22085
+ gemini: process.env.GEMINI_API_KEY,
22086
+ openai: process.env.OPENAI_API_KEY
22087
+ };
22088
+ if (envMap[providerName])
22089
+ return envMap[providerName];
22087
22090
  const config = loadConfig();
22088
22091
  return config.providers?.[providerName]?.apiKey;
22089
22092
  }
@@ -26893,14 +26896,14 @@ function __asyncValues(o) {
26893
26896
  }, i2);
26894
26897
  function verb(n) {
26895
26898
  i2[n] = o[n] && function(v) {
26896
- return new Promise(function(resolve4, reject) {
26897
- v = o[n](v), settle(resolve4, reject, v.done, v.value);
26899
+ return new Promise(function(resolve5, reject) {
26900
+ v = o[n](v), settle(resolve5, reject, v.done, v.value);
26898
26901
  });
26899
26902
  };
26900
26903
  }
26901
- function settle(resolve4, reject, d, v) {
26904
+ function settle(resolve5, reject, d, v) {
26902
26905
  Promise.resolve(v).then(function(v2) {
26903
- resolve4({ value: v2, done: d });
26906
+ resolve5({ value: v2, done: d });
26904
26907
  }, reject);
26905
26908
  }
26906
26909
  }
@@ -32871,8 +32874,8 @@ var LiveMusic = class {
32871
32874
  const url = `${websocketBaseUrl}/ws/google.ai.generativelanguage.${apiVersion}.GenerativeService.BidiGenerateMusic?key=${apiKey}`;
32872
32875
  let onopenResolve = () => {
32873
32876
  };
32874
- const onopenPromise = new Promise((resolve4) => {
32875
- onopenResolve = resolve4;
32877
+ const onopenPromise = new Promise((resolve5) => {
32878
+ onopenResolve = resolve5;
32876
32879
  });
32877
32880
  const callbacks = params.callbacks;
32878
32881
  const onopenAwaitedCallback = function() {
@@ -33112,8 +33115,8 @@ var Live = class {
33112
33115
  }
33113
33116
  let onopenResolve = () => {
33114
33117
  };
33115
- const onopenPromise = new Promise((resolve4) => {
33116
- onopenResolve = resolve4;
33118
+ const onopenPromise = new Promise((resolve5) => {
33119
+ onopenResolve = resolve5;
33117
33120
  });
33118
33121
  const callbacks = params.callbacks;
33119
33122
  const onopenAwaitedCallback = function() {
@@ -36055,7 +36058,7 @@ var safeJSON = (text) => {
36055
36058
  return void 0;
36056
36059
  }
36057
36060
  };
36058
- var sleep$1 = (ms) => new Promise((resolve4) => setTimeout(resolve4, ms));
36061
+ var sleep$1 = (ms) => new Promise((resolve5) => setTimeout(resolve5, ms));
36059
36062
  var VERSION = "0.0.1";
36060
36063
  function getDetectedPlatform() {
36061
36064
  if (typeof Deno !== "undefined" && Deno.build != null) {
@@ -36975,8 +36978,8 @@ async function defaultParseResponse(client, props) {
36975
36978
  }
36976
36979
  var APIPromise = class _APIPromise extends Promise {
36977
36980
  constructor(client, responsePromise, parseResponse = defaultParseResponse) {
36978
- super((resolve4) => {
36979
- resolve4(null);
36981
+ super((resolve5) => {
36982
+ resolve5(null);
36980
36983
  });
36981
36984
  this.responsePromise = responsePromise;
36982
36985
  this.parseResponse = parseResponse;
@@ -39359,9 +39362,191 @@ function initGemini() {
39359
39362
  registerProvider(new GeminiProvider(apiKey));
39360
39363
  }
39361
39364
 
39365
+ // build/providers/openai/client.js
39366
+ import { readFileSync as readFileSync3 } from "node:fs";
39367
+ import { resolve as resolve3 } from "node:path";
39368
+
39369
+ // build/providers/openai/capabilities.js
39370
+ var OPENAI_PROVIDER_INFO = {
39371
+ name: "openai",
39372
+ models: ["gpt-image-1"],
39373
+ defaultModel: "gpt-image-1",
39374
+ capabilities: /* @__PURE__ */ new Set([
39375
+ Capability.TEXT_TO_IMAGE,
39376
+ Capability.ASPECT_RATIO,
39377
+ Capability.IMAGE_EDITING,
39378
+ Capability.MULTIPLE_OUTPUTS
39379
+ ]),
39380
+ aspectRatios: ["1:1", "3:2", "2:3", "16:9", "9:16", "4:3", "3:4"],
39381
+ resolutions: ["1K", "2K", "4K"]
39382
+ };
39383
+
39384
+ // build/providers/openai/client.js
39385
+ var API_BASE = "https://api.openai.com/v1";
39386
+ function mapSize(aspectRatio) {
39387
+ switch (aspectRatio) {
39388
+ case "1:1":
39389
+ return "1024x1024";
39390
+ case "3:2":
39391
+ case "16:9":
39392
+ case "4:3":
39393
+ return "1536x1024";
39394
+ case "2:3":
39395
+ case "9:16":
39396
+ case "3:4":
39397
+ return "1024x1536";
39398
+ default:
39399
+ return "auto";
39400
+ }
39401
+ }
39402
+ function mapQuality(resolution) {
39403
+ switch (resolution) {
39404
+ case "1K":
39405
+ return "low";
39406
+ case "4K":
39407
+ return "high";
39408
+ default:
39409
+ return "auto";
39410
+ }
39411
+ }
39412
+ function buildMultipart(fields, files) {
39413
+ const boundary = `----imgx${Date.now()}${Math.random().toString(36).slice(2)}`;
39414
+ const parts = [];
39415
+ for (const [key, value] of Object.entries(fields)) {
39416
+ parts.push(Buffer.from(`--${boundary}\r
39417
+ Content-Disposition: form-data; name="${key}"\r
39418
+ \r
39419
+ ${value}\r
39420
+ `));
39421
+ }
39422
+ for (const file of files) {
39423
+ parts.push(Buffer.from(`--${boundary}\r
39424
+ Content-Disposition: form-data; name="${file.name}"; filename="${file.filename}"\r
39425
+ Content-Type: ${file.contentType}\r
39426
+ \r
39427
+ `));
39428
+ parts.push(file.data);
39429
+ parts.push(Buffer.from("\r\n"));
39430
+ }
39431
+ parts.push(Buffer.from(`--${boundary}--\r
39432
+ `));
39433
+ const concatenated = Buffer.concat(parts);
39434
+ return {
39435
+ body: new Uint8Array(concatenated.buffer, concatenated.byteOffset, concatenated.byteLength),
39436
+ contentType: `multipart/form-data; boundary=${boundary}`
39437
+ };
39438
+ }
39439
+ var OpenAIProvider = class {
39440
+ info = OPENAI_PROVIDER_INFO;
39441
+ apiKey;
39442
+ constructor(apiKey) {
39443
+ this.apiKey = apiKey;
39444
+ }
39445
+ async generate(input, model) {
39446
+ const modelName = model || this.info.defaultModel;
39447
+ try {
39448
+ const response = await fetch(`${API_BASE}/images/generations`, {
39449
+ method: "POST",
39450
+ headers: {
39451
+ "Content-Type": "application/json",
39452
+ Authorization: `Bearer ${this.apiKey}`
39453
+ },
39454
+ body: JSON.stringify({
39455
+ model: modelName,
39456
+ prompt: input.prompt,
39457
+ n: input.count || 1,
39458
+ size: mapSize(input.aspectRatio),
39459
+ quality: mapQuality(input.resolution)
39460
+ })
39461
+ });
39462
+ const json = await response.json();
39463
+ if (!response.ok || json.error) {
39464
+ return {
39465
+ success: false,
39466
+ images: [],
39467
+ error: json.error?.message || `HTTP ${response.status}`
39468
+ };
39469
+ }
39470
+ return this.parseResponse(json);
39471
+ } catch (err) {
39472
+ const msg = err instanceof Error ? err.message : String(err);
39473
+ return { success: false, images: [], error: msg };
39474
+ }
39475
+ }
39476
+ async edit(input, model) {
39477
+ const modelName = model || this.info.defaultModel;
39478
+ const absPath = resolve3(input.inputImage);
39479
+ const imageBuffer = readFileSync3(absPath);
39480
+ const ext = absPath.split(".").pop()?.toLowerCase();
39481
+ const contentType = ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "webp" ? "image/webp" : "image/png";
39482
+ const fields = {
39483
+ model: modelName,
39484
+ prompt: input.prompt,
39485
+ n: String(input.count || 1),
39486
+ size: mapSize(input.aspectRatio),
39487
+ quality: mapQuality(input.resolution)
39488
+ };
39489
+ const { body, contentType: ct } = buildMultipart(fields, [
39490
+ {
39491
+ name: "image",
39492
+ data: imageBuffer,
39493
+ filename: `image.${ext || "png"}`,
39494
+ contentType
39495
+ }
39496
+ ]);
39497
+ try {
39498
+ const response = await fetch(`${API_BASE}/images/edits`, {
39499
+ method: "POST",
39500
+ headers: {
39501
+ Authorization: `Bearer ${this.apiKey}`,
39502
+ "Content-Type": ct
39503
+ },
39504
+ body
39505
+ });
39506
+ const json = await response.json();
39507
+ if (!response.ok || json.error) {
39508
+ return {
39509
+ success: false,
39510
+ images: [],
39511
+ error: json.error?.message || `HTTP ${response.status}`
39512
+ };
39513
+ }
39514
+ return this.parseResponse(json);
39515
+ } catch (err) {
39516
+ const msg = err instanceof Error ? err.message : String(err);
39517
+ return { success: false, images: [], error: msg };
39518
+ }
39519
+ }
39520
+ parseResponse(json) {
39521
+ const images = [];
39522
+ if (json.data) {
39523
+ for (const item of json.data) {
39524
+ if (item.b64_json) {
39525
+ images.push({
39526
+ data: Buffer.from(item.b64_json, "base64"),
39527
+ mimeType: "image/png"
39528
+ });
39529
+ }
39530
+ }
39531
+ }
39532
+ if (images.length === 0) {
39533
+ return { success: false, images: [], error: "No image data in response" };
39534
+ }
39535
+ return { success: true, images };
39536
+ }
39537
+ };
39538
+
39539
+ // build/providers/openai/index.js
39540
+ function initOpenAI() {
39541
+ const apiKey = resolveApiKey("openai");
39542
+ if (!apiKey)
39543
+ return;
39544
+ registerProvider(new OpenAIProvider(apiKey));
39545
+ }
39546
+
39362
39547
  // build/cli/commands/init.js
39363
39548
  import { existsSync, writeFileSync as writeFileSync3 } from "node:fs";
39364
- import { resolve as resolve3 } from "node:path";
39549
+ import { resolve as resolve4 } from "node:path";
39365
39550
 
39366
39551
  // build/cli/output.js
39367
39552
  function success(data) {
@@ -39382,7 +39567,7 @@ var TEMPLATE = {
39382
39567
  }
39383
39568
  };
39384
39569
  function runInit() {
39385
- const filePath = resolve3(".imgxrc");
39570
+ const filePath = resolve4(".imgxrc");
39386
39571
  if (existsSync(filePath)) {
39387
39572
  fail(".imgxrc already exists in current directory");
39388
39573
  }
@@ -39439,6 +39624,19 @@ async function runEdit(provider, args) {
39439
39624
  }
39440
39625
 
39441
39626
  // build/cli/commands/config.js
39627
+ function extractProvider(args) {
39628
+ const rest = [];
39629
+ let provider = "gemini";
39630
+ for (let i2 = 0; i2 < args.length; i2++) {
39631
+ if (args[i2] === "--provider" && i2 + 1 < args.length) {
39632
+ provider = args[i2 + 1];
39633
+ i2++;
39634
+ } else {
39635
+ rest.push(args[i2]);
39636
+ }
39637
+ }
39638
+ return { provider, rest };
39639
+ }
39442
39640
  function runConfig(args) {
39443
39641
  const sub = args[0];
39444
39642
  if (!sub || sub === "list") {
@@ -39446,20 +39644,22 @@ function runConfig(args) {
39446
39644
  return;
39447
39645
  }
39448
39646
  if (sub === "set") {
39449
- const key = args[1];
39450
- const value = args[2];
39647
+ const { provider, rest } = extractProvider(args.slice(1));
39648
+ const key = rest[0];
39649
+ const value = rest[1];
39451
39650
  if (!key || !value) {
39452
- fail("Usage: imgx config set <key> <value>\n Keys: api-key, provider, model, output-dir, aspect-ratio, resolution");
39651
+ fail("Usage: imgx config set <key> <value> [--provider <name>]\n Keys: api-key, provider, model, output-dir, aspect-ratio, resolution");
39453
39652
  }
39454
- setKey(key, value);
39653
+ setKey(key, value, provider);
39455
39654
  return;
39456
39655
  }
39457
39656
  if (sub === "get") {
39458
- const key = args[1];
39657
+ const { provider, rest } = extractProvider(args.slice(1));
39658
+ const key = rest[0];
39459
39659
  if (!key) {
39460
- fail("Usage: imgx config get <key>");
39660
+ fail("Usage: imgx config get <key> [--provider <name>]");
39461
39661
  }
39462
- getKey(key);
39662
+ getKey(key, provider);
39463
39663
  return;
39464
39664
  }
39465
39665
  if (sub === "path") {
@@ -39468,15 +39668,15 @@ function runConfig(args) {
39468
39668
  }
39469
39669
  fail(`Unknown config subcommand: ${sub}. Use: list, set, get, path`);
39470
39670
  }
39471
- function setKey(key, value) {
39671
+ function setKey(key, value, provider) {
39472
39672
  const config = loadConfig();
39473
39673
  switch (key) {
39474
39674
  case "api-key": {
39475
39675
  if (!config.providers)
39476
39676
  config.providers = {};
39477
- if (!config.providers.gemini)
39478
- config.providers.gemini = {};
39479
- config.providers.gemini.apiKey = value;
39677
+ if (!config.providers[provider])
39678
+ config.providers[provider] = {};
39679
+ config.providers[provider].apiKey = value;
39480
39680
  break;
39481
39681
  }
39482
39682
  case "provider": {
@@ -39515,13 +39715,13 @@ function setKey(key, value) {
39515
39715
  saveConfig(config);
39516
39716
  success({ key, status: "saved" });
39517
39717
  }
39518
- function getKey(key) {
39718
+ function getKey(key, provider) {
39519
39719
  const config = loadConfig();
39520
39720
  switch (key) {
39521
39721
  case "api-key": {
39522
- const val = config.providers?.gemini?.apiKey;
39722
+ const val = config.providers?.[provider]?.apiKey;
39523
39723
  const masked = val ? val.slice(0, 6) + "..." + val.slice(-4) : void 0;
39524
- success({ key, value: masked ?? null });
39724
+ success({ key, provider, value: masked ?? null });
39525
39725
  return;
39526
39726
  }
39527
39727
  case "provider":
@@ -39545,16 +39745,22 @@ function getKey(key) {
39545
39745
  }
39546
39746
  function showAll() {
39547
39747
  const config = loadConfig();
39548
- const hasApiKey = !!config.providers?.gemini?.apiKey;
39748
+ const providerKeys = {};
39749
+ if (config.providers) {
39750
+ for (const [name, prov] of Object.entries(config.providers)) {
39751
+ if (prov?.apiKey)
39752
+ providerKeys[name] = "(set)";
39753
+ }
39754
+ }
39549
39755
  success({
39550
39756
  configPath: getConfigPath(),
39551
- apiKey: hasApiKey ? "(set)" : "(not set)",
39757
+ apiKeys: Object.keys(providerKeys).length > 0 ? providerKeys : "(none set)",
39552
39758
  defaults: config.defaults ?? {}
39553
39759
  });
39554
39760
  }
39555
39761
 
39556
39762
  // build/cli/index.js
39557
- var VERSION2 = "0.5.1";
39763
+ var VERSION2 = "0.6.0";
39558
39764
  var HELP = `imgx v${VERSION2} \u2014 AI image generation and editing CLI
39559
39765
 
39560
39766
  Commands:
@@ -39568,7 +39774,7 @@ Commands:
39568
39774
  Usage:
39569
39775
  imgx generate -p "prompt" -o "./output.png"
39570
39776
  imgx edit -i "./input.png" -p "change background" -o "./output.png"
39571
- imgx config set api-key <your-gemini-api-key>
39777
+ imgx config set api-key <your-api-key> --provider gemini
39572
39778
  imgx config list
39573
39779
 
39574
39780
  Options:
@@ -39580,7 +39786,7 @@ Options:
39580
39786
  -n, --count <number> Number of images to generate
39581
39787
  -r, --resolution <size> Resolution: 1K, 2K, 4K
39582
39788
  -m, --model <model> Model name
39583
- --provider <name> Provider (default: gemini)
39789
+ --provider <name> Provider: gemini, openai (default: gemini)
39584
39790
  -d, --output-dir <dir> Output directory
39585
39791
  -h, --help Show help
39586
39792
  -v, --version Show version
@@ -39597,12 +39803,14 @@ Configuration:
39597
39803
 
39598
39804
  Environment variables (override config file):
39599
39805
  GEMINI_API_KEY Gemini API key
39806
+ OPENAI_API_KEY OpenAI API key
39600
39807
  IMGX_PROVIDER Default provider
39601
39808
  IMGX_MODEL Default model
39602
39809
  IMGX_OUTPUT_DIR Default output directory
39603
39810
  `;
39604
39811
  function main() {
39605
39812
  initGemini();
39813
+ initOpenAI();
39606
39814
  const args = process.argv.slice(2);
39607
39815
  const command = args[0];
39608
39816
  if (!command || command === "-h" || command === "--help") {
@@ -39624,7 +39832,7 @@ function main() {
39624
39832
  if (command === "providers") {
39625
39833
  const all = listProviders();
39626
39834
  if (all.length === 0) {
39627
- fail("No providers configured. Set GEMINI_API_KEY to enable Gemini.");
39835
+ fail("No providers configured. Set GEMINI_API_KEY or OPENAI_API_KEY to enable a provider.");
39628
39836
  }
39629
39837
  const data = all.map((p) => ({
39630
39838
  name: p.info.name,