imgx-cli 0.5.2 → 0.6.1

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;
@@ -39207,8 +39210,9 @@ function getApiKeyFromEnv() {
39207
39210
 
39208
39211
  // build/core/storage.js
39209
39212
  import { readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2 } from "node:fs";
39210
- import { dirname, resolve as resolve2 } from "node:path";
39213
+ import { dirname, join as join2, resolve as resolve2 } from "node:path";
39211
39214
  import { randomUUID } from "node:crypto";
39215
+ import { homedir as homedir2 } from "node:os";
39212
39216
  var MIME_TO_EXT = {
39213
39217
  "image/png": ".png",
39214
39218
  "image/jpeg": ".jpg",
@@ -39221,9 +39225,17 @@ function readImageAsBase64(filePath) {
39221
39225
  const mimeType = ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "webp" ? "image/webp" : "image/png";
39222
39226
  return { data: buffer.toString("base64"), mimeType };
39223
39227
  }
39228
+ function fallbackOutputDir(outputDir) {
39229
+ if (outputDir)
39230
+ return outputDir;
39231
+ const configured = resolveDefault("outputDir");
39232
+ if (configured)
39233
+ return configured;
39234
+ return join2(homedir2(), "Pictures", "imgx");
39235
+ }
39224
39236
  function saveImage(image, outputPath, outputDir) {
39225
39237
  const ext = MIME_TO_EXT[image.mimeType] || ".png";
39226
- const filePath = outputPath ? resolve2(outputPath) : resolve2(outputDir || ".", `imgx-${randomUUID().slice(0, 8)}${ext}`);
39238
+ const filePath = outputPath ? resolve2(outputPath) : resolve2(fallbackOutputDir(outputDir), `imgx-${randomUUID().slice(0, 8)}${ext}`);
39227
39239
  mkdirSync2(dirname(filePath), { recursive: true });
39228
39240
  writeFileSync2(filePath, image.data);
39229
39241
  return filePath;
@@ -39359,9 +39371,191 @@ function initGemini() {
39359
39371
  registerProvider(new GeminiProvider(apiKey));
39360
39372
  }
39361
39373
 
39374
+ // build/providers/openai/client.js
39375
+ import { readFileSync as readFileSync3 } from "node:fs";
39376
+ import { resolve as resolve3 } from "node:path";
39377
+
39378
+ // build/providers/openai/capabilities.js
39379
+ var OPENAI_PROVIDER_INFO = {
39380
+ name: "openai",
39381
+ models: ["gpt-image-1"],
39382
+ defaultModel: "gpt-image-1",
39383
+ capabilities: /* @__PURE__ */ new Set([
39384
+ Capability.TEXT_TO_IMAGE,
39385
+ Capability.ASPECT_RATIO,
39386
+ Capability.IMAGE_EDITING,
39387
+ Capability.MULTIPLE_OUTPUTS
39388
+ ]),
39389
+ aspectRatios: ["1:1", "3:2", "2:3", "16:9", "9:16", "4:3", "3:4"],
39390
+ resolutions: ["1K", "2K", "4K"]
39391
+ };
39392
+
39393
+ // build/providers/openai/client.js
39394
+ var API_BASE = "https://api.openai.com/v1";
39395
+ function mapSize(aspectRatio) {
39396
+ switch (aspectRatio) {
39397
+ case "1:1":
39398
+ return "1024x1024";
39399
+ case "3:2":
39400
+ case "16:9":
39401
+ case "4:3":
39402
+ return "1536x1024";
39403
+ case "2:3":
39404
+ case "9:16":
39405
+ case "3:4":
39406
+ return "1024x1536";
39407
+ default:
39408
+ return "auto";
39409
+ }
39410
+ }
39411
+ function mapQuality(resolution) {
39412
+ switch (resolution) {
39413
+ case "1K":
39414
+ return "low";
39415
+ case "4K":
39416
+ return "high";
39417
+ default:
39418
+ return "auto";
39419
+ }
39420
+ }
39421
+ function buildMultipart(fields, files) {
39422
+ const boundary = `----imgx${Date.now()}${Math.random().toString(36).slice(2)}`;
39423
+ const parts = [];
39424
+ for (const [key, value] of Object.entries(fields)) {
39425
+ parts.push(Buffer.from(`--${boundary}\r
39426
+ Content-Disposition: form-data; name="${key}"\r
39427
+ \r
39428
+ ${value}\r
39429
+ `));
39430
+ }
39431
+ for (const file of files) {
39432
+ parts.push(Buffer.from(`--${boundary}\r
39433
+ Content-Disposition: form-data; name="${file.name}"; filename="${file.filename}"\r
39434
+ Content-Type: ${file.contentType}\r
39435
+ \r
39436
+ `));
39437
+ parts.push(file.data);
39438
+ parts.push(Buffer.from("\r\n"));
39439
+ }
39440
+ parts.push(Buffer.from(`--${boundary}--\r
39441
+ `));
39442
+ const concatenated = Buffer.concat(parts);
39443
+ return {
39444
+ body: new Uint8Array(concatenated.buffer, concatenated.byteOffset, concatenated.byteLength),
39445
+ contentType: `multipart/form-data; boundary=${boundary}`
39446
+ };
39447
+ }
39448
+ var OpenAIProvider = class {
39449
+ info = OPENAI_PROVIDER_INFO;
39450
+ apiKey;
39451
+ constructor(apiKey) {
39452
+ this.apiKey = apiKey;
39453
+ }
39454
+ async generate(input, model) {
39455
+ const modelName = model || this.info.defaultModel;
39456
+ try {
39457
+ const response = await fetch(`${API_BASE}/images/generations`, {
39458
+ method: "POST",
39459
+ headers: {
39460
+ "Content-Type": "application/json",
39461
+ Authorization: `Bearer ${this.apiKey}`
39462
+ },
39463
+ body: JSON.stringify({
39464
+ model: modelName,
39465
+ prompt: input.prompt,
39466
+ n: input.count || 1,
39467
+ size: mapSize(input.aspectRatio),
39468
+ quality: mapQuality(input.resolution)
39469
+ })
39470
+ });
39471
+ const json = await response.json();
39472
+ if (!response.ok || json.error) {
39473
+ return {
39474
+ success: false,
39475
+ images: [],
39476
+ error: json.error?.message || `HTTP ${response.status}`
39477
+ };
39478
+ }
39479
+ return this.parseResponse(json);
39480
+ } catch (err) {
39481
+ const msg = err instanceof Error ? err.message : String(err);
39482
+ return { success: false, images: [], error: msg };
39483
+ }
39484
+ }
39485
+ async edit(input, model) {
39486
+ const modelName = model || this.info.defaultModel;
39487
+ const absPath = resolve3(input.inputImage);
39488
+ const imageBuffer = readFileSync3(absPath);
39489
+ const ext = absPath.split(".").pop()?.toLowerCase();
39490
+ const contentType = ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "webp" ? "image/webp" : "image/png";
39491
+ const fields = {
39492
+ model: modelName,
39493
+ prompt: input.prompt,
39494
+ n: String(input.count || 1),
39495
+ size: mapSize(input.aspectRatio),
39496
+ quality: mapQuality(input.resolution)
39497
+ };
39498
+ const { body, contentType: ct } = buildMultipart(fields, [
39499
+ {
39500
+ name: "image",
39501
+ data: imageBuffer,
39502
+ filename: `image.${ext || "png"}`,
39503
+ contentType
39504
+ }
39505
+ ]);
39506
+ try {
39507
+ const response = await fetch(`${API_BASE}/images/edits`, {
39508
+ method: "POST",
39509
+ headers: {
39510
+ Authorization: `Bearer ${this.apiKey}`,
39511
+ "Content-Type": ct
39512
+ },
39513
+ body
39514
+ });
39515
+ const json = await response.json();
39516
+ if (!response.ok || json.error) {
39517
+ return {
39518
+ success: false,
39519
+ images: [],
39520
+ error: json.error?.message || `HTTP ${response.status}`
39521
+ };
39522
+ }
39523
+ return this.parseResponse(json);
39524
+ } catch (err) {
39525
+ const msg = err instanceof Error ? err.message : String(err);
39526
+ return { success: false, images: [], error: msg };
39527
+ }
39528
+ }
39529
+ parseResponse(json) {
39530
+ const images = [];
39531
+ if (json.data) {
39532
+ for (const item of json.data) {
39533
+ if (item.b64_json) {
39534
+ images.push({
39535
+ data: Buffer.from(item.b64_json, "base64"),
39536
+ mimeType: "image/png"
39537
+ });
39538
+ }
39539
+ }
39540
+ }
39541
+ if (images.length === 0) {
39542
+ return { success: false, images: [], error: "No image data in response" };
39543
+ }
39544
+ return { success: true, images };
39545
+ }
39546
+ };
39547
+
39548
+ // build/providers/openai/index.js
39549
+ function initOpenAI() {
39550
+ const apiKey = resolveApiKey("openai");
39551
+ if (!apiKey)
39552
+ return;
39553
+ registerProvider(new OpenAIProvider(apiKey));
39554
+ }
39555
+
39362
39556
  // build/cli/commands/init.js
39363
39557
  import { existsSync, writeFileSync as writeFileSync3 } from "node:fs";
39364
- import { resolve as resolve3 } from "node:path";
39558
+ import { resolve as resolve4 } from "node:path";
39365
39559
 
39366
39560
  // build/cli/output.js
39367
39561
  function success(data) {
@@ -39382,7 +39576,7 @@ var TEMPLATE = {
39382
39576
  }
39383
39577
  };
39384
39578
  function runInit() {
39385
- const filePath = resolve3(".imgxrc");
39579
+ const filePath = resolve4(".imgxrc");
39386
39580
  if (existsSync(filePath)) {
39387
39581
  fail(".imgxrc already exists in current directory");
39388
39582
  }
@@ -39439,6 +39633,19 @@ async function runEdit(provider, args) {
39439
39633
  }
39440
39634
 
39441
39635
  // build/cli/commands/config.js
39636
+ function extractProvider(args) {
39637
+ const rest = [];
39638
+ let provider = "gemini";
39639
+ for (let i2 = 0; i2 < args.length; i2++) {
39640
+ if (args[i2] === "--provider" && i2 + 1 < args.length) {
39641
+ provider = args[i2 + 1];
39642
+ i2++;
39643
+ } else {
39644
+ rest.push(args[i2]);
39645
+ }
39646
+ }
39647
+ return { provider, rest };
39648
+ }
39442
39649
  function runConfig(args) {
39443
39650
  const sub = args[0];
39444
39651
  if (!sub || sub === "list") {
@@ -39446,20 +39653,22 @@ function runConfig(args) {
39446
39653
  return;
39447
39654
  }
39448
39655
  if (sub === "set") {
39449
- const key = args[1];
39450
- const value = args[2];
39656
+ const { provider, rest } = extractProvider(args.slice(1));
39657
+ const key = rest[0];
39658
+ const value = rest[1];
39451
39659
  if (!key || !value) {
39452
- fail("Usage: imgx config set <key> <value>\n Keys: api-key, provider, model, output-dir, aspect-ratio, resolution");
39660
+ fail("Usage: imgx config set <key> <value> [--provider <name>]\n Keys: api-key, provider, model, output-dir, aspect-ratio, resolution");
39453
39661
  }
39454
- setKey(key, value);
39662
+ setKey(key, value, provider);
39455
39663
  return;
39456
39664
  }
39457
39665
  if (sub === "get") {
39458
- const key = args[1];
39666
+ const { provider, rest } = extractProvider(args.slice(1));
39667
+ const key = rest[0];
39459
39668
  if (!key) {
39460
- fail("Usage: imgx config get <key>");
39669
+ fail("Usage: imgx config get <key> [--provider <name>]");
39461
39670
  }
39462
- getKey(key);
39671
+ getKey(key, provider);
39463
39672
  return;
39464
39673
  }
39465
39674
  if (sub === "path") {
@@ -39468,15 +39677,15 @@ function runConfig(args) {
39468
39677
  }
39469
39678
  fail(`Unknown config subcommand: ${sub}. Use: list, set, get, path`);
39470
39679
  }
39471
- function setKey(key, value) {
39680
+ function setKey(key, value, provider) {
39472
39681
  const config = loadConfig();
39473
39682
  switch (key) {
39474
39683
  case "api-key": {
39475
39684
  if (!config.providers)
39476
39685
  config.providers = {};
39477
- if (!config.providers.gemini)
39478
- config.providers.gemini = {};
39479
- config.providers.gemini.apiKey = value;
39686
+ if (!config.providers[provider])
39687
+ config.providers[provider] = {};
39688
+ config.providers[provider].apiKey = value;
39480
39689
  break;
39481
39690
  }
39482
39691
  case "provider": {
@@ -39515,13 +39724,13 @@ function setKey(key, value) {
39515
39724
  saveConfig(config);
39516
39725
  success({ key, status: "saved" });
39517
39726
  }
39518
- function getKey(key) {
39727
+ function getKey(key, provider) {
39519
39728
  const config = loadConfig();
39520
39729
  switch (key) {
39521
39730
  case "api-key": {
39522
- const val = config.providers?.gemini?.apiKey;
39731
+ const val = config.providers?.[provider]?.apiKey;
39523
39732
  const masked = val ? val.slice(0, 6) + "..." + val.slice(-4) : void 0;
39524
- success({ key, value: masked ?? null });
39733
+ success({ key, provider, value: masked ?? null });
39525
39734
  return;
39526
39735
  }
39527
39736
  case "provider":
@@ -39545,16 +39754,22 @@ function getKey(key) {
39545
39754
  }
39546
39755
  function showAll() {
39547
39756
  const config = loadConfig();
39548
- const hasApiKey = !!config.providers?.gemini?.apiKey;
39757
+ const providerKeys = {};
39758
+ if (config.providers) {
39759
+ for (const [name, prov] of Object.entries(config.providers)) {
39760
+ if (prov?.apiKey)
39761
+ providerKeys[name] = "(set)";
39762
+ }
39763
+ }
39549
39764
  success({
39550
39765
  configPath: getConfigPath(),
39551
- apiKey: hasApiKey ? "(set)" : "(not set)",
39766
+ apiKeys: Object.keys(providerKeys).length > 0 ? providerKeys : "(none set)",
39552
39767
  defaults: config.defaults ?? {}
39553
39768
  });
39554
39769
  }
39555
39770
 
39556
39771
  // build/cli/index.js
39557
- var VERSION2 = "0.5.2";
39772
+ var VERSION2 = "0.6.1";
39558
39773
  var HELP = `imgx v${VERSION2} \u2014 AI image generation and editing CLI
39559
39774
 
39560
39775
  Commands:
@@ -39568,7 +39783,7 @@ Commands:
39568
39783
  Usage:
39569
39784
  imgx generate -p "prompt" -o "./output.png"
39570
39785
  imgx edit -i "./input.png" -p "change background" -o "./output.png"
39571
- imgx config set api-key <your-gemini-api-key>
39786
+ imgx config set api-key <your-api-key> --provider gemini
39572
39787
  imgx config list
39573
39788
 
39574
39789
  Options:
@@ -39580,7 +39795,7 @@ Options:
39580
39795
  -n, --count <number> Number of images to generate
39581
39796
  -r, --resolution <size> Resolution: 1K, 2K, 4K
39582
39797
  -m, --model <model> Model name
39583
- --provider <name> Provider (default: gemini)
39798
+ --provider <name> Provider: gemini, openai (default: gemini)
39584
39799
  -d, --output-dir <dir> Output directory
39585
39800
  -h, --help Show help
39586
39801
  -v, --version Show version
@@ -39597,12 +39812,14 @@ Configuration:
39597
39812
 
39598
39813
  Environment variables (override config file):
39599
39814
  GEMINI_API_KEY Gemini API key
39815
+ OPENAI_API_KEY OpenAI API key
39600
39816
  IMGX_PROVIDER Default provider
39601
39817
  IMGX_MODEL Default model
39602
39818
  IMGX_OUTPUT_DIR Default output directory
39603
39819
  `;
39604
39820
  function main() {
39605
39821
  initGemini();
39822
+ initOpenAI();
39606
39823
  const args = process.argv.slice(2);
39607
39824
  const command = args[0];
39608
39825
  if (!command || command === "-h" || command === "--help") {
@@ -39624,7 +39841,7 @@ function main() {
39624
39841
  if (command === "providers") {
39625
39842
  const all = listProviders();
39626
39843
  if (all.length === 0) {
39627
- fail("No providers configured. Set GEMINI_API_KEY to enable Gemini.");
39844
+ fail("No providers configured. Set GEMINI_API_KEY or OPENAI_API_KEY to enable a provider.");
39628
39845
  }
39629
39846
  const data = all.map((p) => ({
39630
39847
  name: p.info.name,