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.
- package/CHANGELOG.md +26 -0
- package/README.md +24 -62
- package/dist/cli.bundle.js +321 -104
- package/dist/mcp.bundle.js +314 -97
- package/package.json +2 -1
package/dist/mcp.bundle.js
CHANGED
|
@@ -2990,7 +2990,7 @@ var require_compile = __commonJS({
|
|
|
2990
2990
|
const schOrFunc = root.refs[ref];
|
|
2991
2991
|
if (schOrFunc)
|
|
2992
2992
|
return schOrFunc;
|
|
2993
|
-
let _sch =
|
|
2993
|
+
let _sch = resolve4.call(this, root, ref);
|
|
2994
2994
|
if (_sch === void 0) {
|
|
2995
2995
|
const schema = (_a3 = root.localRefs) === null || _a3 === void 0 ? void 0 : _a3[ref];
|
|
2996
2996
|
const { schemaId } = this.opts;
|
|
@@ -3017,7 +3017,7 @@ var require_compile = __commonJS({
|
|
|
3017
3017
|
function sameSchemaEnv(s1, s2) {
|
|
3018
3018
|
return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
|
|
3019
3019
|
}
|
|
3020
|
-
function
|
|
3020
|
+
function resolve4(root, ref) {
|
|
3021
3021
|
let sch;
|
|
3022
3022
|
while (typeof (sch = this.refs[ref]) == "string")
|
|
3023
3023
|
ref = sch;
|
|
@@ -3592,7 +3592,7 @@ var require_fast_uri = __commonJS({
|
|
|
3592
3592
|
}
|
|
3593
3593
|
return uri;
|
|
3594
3594
|
}
|
|
3595
|
-
function
|
|
3595
|
+
function resolve4(baseURI, relativeURI, options) {
|
|
3596
3596
|
const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
|
|
3597
3597
|
const resolved = resolveComponent(parse3(baseURI, schemelessOptions), parse3(relativeURI, schemelessOptions), schemelessOptions, true);
|
|
3598
3598
|
schemelessOptions.skipEscape = true;
|
|
@@ -3819,7 +3819,7 @@ var require_fast_uri = __commonJS({
|
|
|
3819
3819
|
var fastUri = {
|
|
3820
3820
|
SCHEMES,
|
|
3821
3821
|
normalize,
|
|
3822
|
-
resolve:
|
|
3822
|
+
resolve: resolve4,
|
|
3823
3823
|
resolveComponent,
|
|
3824
3824
|
equal,
|
|
3825
3825
|
serialize,
|
|
@@ -7072,7 +7072,7 @@ var require_p_retry = __commonJS({
|
|
|
7072
7072
|
return error48;
|
|
7073
7073
|
};
|
|
7074
7074
|
var isNetworkError = (errorMessage) => networkErrorMsgs.includes(errorMessage);
|
|
7075
|
-
var pRetry2 = (input, options) => new Promise((
|
|
7075
|
+
var pRetry2 = (input, options) => new Promise((resolve4, reject) => {
|
|
7076
7076
|
options = {
|
|
7077
7077
|
onFailedAttempt: () => {
|
|
7078
7078
|
},
|
|
@@ -7082,7 +7082,7 @@ var require_p_retry = __commonJS({
|
|
|
7082
7082
|
const operation = retry.operation(options);
|
|
7083
7083
|
operation.attempt(async (attemptNumber) => {
|
|
7084
7084
|
try {
|
|
7085
|
-
|
|
7085
|
+
resolve4(await input(attemptNumber));
|
|
7086
7086
|
} catch (error48) {
|
|
7087
7087
|
if (!(error48 instanceof Error)) {
|
|
7088
7088
|
reject(new TypeError(`Non-error was thrown: "${error48}". You should only throw errors.`));
|
|
@@ -7619,8 +7619,8 @@ var require_retry3 = __commonJS({
|
|
|
7619
7619
|
}
|
|
7620
7620
|
const delay = getNextRetryDelay(config2);
|
|
7621
7621
|
err.config.retryConfig.currentRetryAttempt += 1;
|
|
7622
|
-
const backoff = config2.retryBackoff ? config2.retryBackoff(err, delay) : new Promise((
|
|
7623
|
-
setTimeout(
|
|
7622
|
+
const backoff = config2.retryBackoff ? config2.retryBackoff(err, delay) : new Promise((resolve4) => {
|
|
7623
|
+
setTimeout(resolve4, delay);
|
|
7624
7624
|
});
|
|
7625
7625
|
if (config2.onRetryAttempt) {
|
|
7626
7626
|
await config2.onRetryAttempt(err);
|
|
@@ -8396,8 +8396,8 @@ var require_helpers = __commonJS({
|
|
|
8396
8396
|
function req(url2, opts = {}) {
|
|
8397
8397
|
const href = typeof url2 === "string" ? url2 : url2.href;
|
|
8398
8398
|
const req2 = (href.startsWith("https:") ? https2 : http3).request(url2, opts);
|
|
8399
|
-
const promise2 = new Promise((
|
|
8400
|
-
req2.once("response",
|
|
8399
|
+
const promise2 = new Promise((resolve4, reject) => {
|
|
8400
|
+
req2.once("response", resolve4).once("error", reject).end();
|
|
8401
8401
|
});
|
|
8402
8402
|
req2.then = promise2.then.bind(promise2);
|
|
8403
8403
|
return req2;
|
|
@@ -8574,7 +8574,7 @@ var require_parse_proxy_response = __commonJS({
|
|
|
8574
8574
|
var debug_1 = __importDefault(require_src());
|
|
8575
8575
|
var debug = (0, debug_1.default)("https-proxy-agent:parse-proxy-response");
|
|
8576
8576
|
function parseProxyResponse(socket) {
|
|
8577
|
-
return new Promise((
|
|
8577
|
+
return new Promise((resolve4, reject) => {
|
|
8578
8578
|
let buffersLength = 0;
|
|
8579
8579
|
const buffers = [];
|
|
8580
8580
|
function read() {
|
|
@@ -8640,7 +8640,7 @@ var require_parse_proxy_response = __commonJS({
|
|
|
8640
8640
|
}
|
|
8641
8641
|
debug("got proxy server response: %o %o", firstLine, headers);
|
|
8642
8642
|
cleanup();
|
|
8643
|
-
|
|
8643
|
+
resolve4({
|
|
8644
8644
|
connect: {
|
|
8645
8645
|
statusCode,
|
|
8646
8646
|
statusText,
|
|
@@ -8882,7 +8882,7 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
8882
8882
|
return new originalPromise(executor);
|
|
8883
8883
|
}
|
|
8884
8884
|
function promiseResolvedWith(value) {
|
|
8885
|
-
return newPromise((
|
|
8885
|
+
return newPromise((resolve4) => resolve4(value));
|
|
8886
8886
|
}
|
|
8887
8887
|
function promiseRejectedWith(reason) {
|
|
8888
8888
|
return originalPromiseReject(reason);
|
|
@@ -9052,8 +9052,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
9052
9052
|
return new TypeError("Cannot " + name + " a stream using a released reader");
|
|
9053
9053
|
}
|
|
9054
9054
|
function defaultReaderClosedPromiseInitialize(reader) {
|
|
9055
|
-
reader._closedPromise = newPromise((
|
|
9056
|
-
reader._closedPromise_resolve =
|
|
9055
|
+
reader._closedPromise = newPromise((resolve4, reject) => {
|
|
9056
|
+
reader._closedPromise_resolve = resolve4;
|
|
9057
9057
|
reader._closedPromise_reject = reject;
|
|
9058
9058
|
});
|
|
9059
9059
|
}
|
|
@@ -9227,8 +9227,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
9227
9227
|
}
|
|
9228
9228
|
let resolvePromise;
|
|
9229
9229
|
let rejectPromise;
|
|
9230
|
-
const promise2 = newPromise((
|
|
9231
|
-
resolvePromise =
|
|
9230
|
+
const promise2 = newPromise((resolve4, reject) => {
|
|
9231
|
+
resolvePromise = resolve4;
|
|
9232
9232
|
rejectPromise = reject;
|
|
9233
9233
|
});
|
|
9234
9234
|
const readRequest = {
|
|
@@ -9333,8 +9333,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
9333
9333
|
const reader = this._reader;
|
|
9334
9334
|
let resolvePromise;
|
|
9335
9335
|
let rejectPromise;
|
|
9336
|
-
const promise2 = newPromise((
|
|
9337
|
-
resolvePromise =
|
|
9336
|
+
const promise2 = newPromise((resolve4, reject) => {
|
|
9337
|
+
resolvePromise = resolve4;
|
|
9338
9338
|
rejectPromise = reject;
|
|
9339
9339
|
});
|
|
9340
9340
|
const readRequest = {
|
|
@@ -10353,8 +10353,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
10353
10353
|
}
|
|
10354
10354
|
let resolvePromise;
|
|
10355
10355
|
let rejectPromise;
|
|
10356
|
-
const promise2 = newPromise((
|
|
10357
|
-
resolvePromise =
|
|
10356
|
+
const promise2 = newPromise((resolve4, reject) => {
|
|
10357
|
+
resolvePromise = resolve4;
|
|
10358
10358
|
rejectPromise = reject;
|
|
10359
10359
|
});
|
|
10360
10360
|
const readIntoRequest = {
|
|
@@ -10666,10 +10666,10 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
10666
10666
|
wasAlreadyErroring = true;
|
|
10667
10667
|
reason = void 0;
|
|
10668
10668
|
}
|
|
10669
|
-
const promise2 = newPromise((
|
|
10669
|
+
const promise2 = newPromise((resolve4, reject) => {
|
|
10670
10670
|
stream._pendingAbortRequest = {
|
|
10671
10671
|
_promise: void 0,
|
|
10672
|
-
_resolve:
|
|
10672
|
+
_resolve: resolve4,
|
|
10673
10673
|
_reject: reject,
|
|
10674
10674
|
_reason: reason,
|
|
10675
10675
|
_wasAlreadyErroring: wasAlreadyErroring
|
|
@@ -10686,9 +10686,9 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
10686
10686
|
if (state === "closed" || state === "errored") {
|
|
10687
10687
|
return promiseRejectedWith(new TypeError(`The stream (in ${state} state) is not in the writable state and cannot be closed`));
|
|
10688
10688
|
}
|
|
10689
|
-
const promise2 = newPromise((
|
|
10689
|
+
const promise2 = newPromise((resolve4, reject) => {
|
|
10690
10690
|
const closeRequest = {
|
|
10691
|
-
_resolve:
|
|
10691
|
+
_resolve: resolve4,
|
|
10692
10692
|
_reject: reject
|
|
10693
10693
|
};
|
|
10694
10694
|
stream._closeRequest = closeRequest;
|
|
@@ -10701,9 +10701,9 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
10701
10701
|
return promise2;
|
|
10702
10702
|
}
|
|
10703
10703
|
function WritableStreamAddWriteRequest(stream) {
|
|
10704
|
-
const promise2 = newPromise((
|
|
10704
|
+
const promise2 = newPromise((resolve4, reject) => {
|
|
10705
10705
|
const writeRequest = {
|
|
10706
|
-
_resolve:
|
|
10706
|
+
_resolve: resolve4,
|
|
10707
10707
|
_reject: reject
|
|
10708
10708
|
};
|
|
10709
10709
|
stream._writeRequests.push(writeRequest);
|
|
@@ -11319,8 +11319,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
11319
11319
|
return new TypeError("Cannot " + name + " a stream using a released writer");
|
|
11320
11320
|
}
|
|
11321
11321
|
function defaultWriterClosedPromiseInitialize(writer) {
|
|
11322
|
-
writer._closedPromise = newPromise((
|
|
11323
|
-
writer._closedPromise_resolve =
|
|
11322
|
+
writer._closedPromise = newPromise((resolve4, reject) => {
|
|
11323
|
+
writer._closedPromise_resolve = resolve4;
|
|
11324
11324
|
writer._closedPromise_reject = reject;
|
|
11325
11325
|
writer._closedPromiseState = "pending";
|
|
11326
11326
|
});
|
|
@@ -11356,8 +11356,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
11356
11356
|
writer._closedPromiseState = "resolved";
|
|
11357
11357
|
}
|
|
11358
11358
|
function defaultWriterReadyPromiseInitialize(writer) {
|
|
11359
|
-
writer._readyPromise = newPromise((
|
|
11360
|
-
writer._readyPromise_resolve =
|
|
11359
|
+
writer._readyPromise = newPromise((resolve4, reject) => {
|
|
11360
|
+
writer._readyPromise_resolve = resolve4;
|
|
11361
11361
|
writer._readyPromise_reject = reject;
|
|
11362
11362
|
});
|
|
11363
11363
|
writer._readyPromiseState = "pending";
|
|
@@ -11444,7 +11444,7 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
11444
11444
|
source._disturbed = true;
|
|
11445
11445
|
let shuttingDown = false;
|
|
11446
11446
|
let currentWrite = promiseResolvedWith(void 0);
|
|
11447
|
-
return newPromise((
|
|
11447
|
+
return newPromise((resolve4, reject) => {
|
|
11448
11448
|
let abortAlgorithm;
|
|
11449
11449
|
if (signal !== void 0) {
|
|
11450
11450
|
abortAlgorithm = () => {
|
|
@@ -11589,7 +11589,7 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
11589
11589
|
if (isError) {
|
|
11590
11590
|
reject(error48);
|
|
11591
11591
|
} else {
|
|
11592
|
-
|
|
11592
|
+
resolve4(void 0);
|
|
11593
11593
|
}
|
|
11594
11594
|
return null;
|
|
11595
11595
|
}
|
|
@@ -11870,8 +11870,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
11870
11870
|
let branch1;
|
|
11871
11871
|
let branch2;
|
|
11872
11872
|
let resolveCancelPromise;
|
|
11873
|
-
const cancelPromise = newPromise((
|
|
11874
|
-
resolveCancelPromise =
|
|
11873
|
+
const cancelPromise = newPromise((resolve4) => {
|
|
11874
|
+
resolveCancelPromise = resolve4;
|
|
11875
11875
|
});
|
|
11876
11876
|
function pullAlgorithm() {
|
|
11877
11877
|
if (reading) {
|
|
@@ -11962,8 +11962,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
11962
11962
|
let branch1;
|
|
11963
11963
|
let branch2;
|
|
11964
11964
|
let resolveCancelPromise;
|
|
11965
|
-
const cancelPromise = newPromise((
|
|
11966
|
-
resolveCancelPromise =
|
|
11965
|
+
const cancelPromise = newPromise((resolve4) => {
|
|
11966
|
+
resolveCancelPromise = resolve4;
|
|
11967
11967
|
});
|
|
11968
11968
|
function forwardReaderError(thisReader) {
|
|
11969
11969
|
uponRejection(thisReader._closedPromise, (r2) => {
|
|
@@ -12743,8 +12743,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
12743
12743
|
const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);
|
|
12744
12744
|
const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);
|
|
12745
12745
|
let startPromise_resolve;
|
|
12746
|
-
const startPromise = newPromise((
|
|
12747
|
-
startPromise_resolve =
|
|
12746
|
+
const startPromise = newPromise((resolve4) => {
|
|
12747
|
+
startPromise_resolve = resolve4;
|
|
12748
12748
|
});
|
|
12749
12749
|
InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
|
|
12750
12750
|
SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);
|
|
@@ -12837,8 +12837,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
12837
12837
|
if (stream._backpressureChangePromise !== void 0) {
|
|
12838
12838
|
stream._backpressureChangePromise_resolve();
|
|
12839
12839
|
}
|
|
12840
|
-
stream._backpressureChangePromise = newPromise((
|
|
12841
|
-
stream._backpressureChangePromise_resolve =
|
|
12840
|
+
stream._backpressureChangePromise = newPromise((resolve4) => {
|
|
12841
|
+
stream._backpressureChangePromise_resolve = resolve4;
|
|
12842
12842
|
});
|
|
12843
12843
|
stream._backpressure = backpressure;
|
|
12844
12844
|
}
|
|
@@ -13006,8 +13006,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
13006
13006
|
return controller._finishPromise;
|
|
13007
13007
|
}
|
|
13008
13008
|
const readable = stream._readable;
|
|
13009
|
-
controller._finishPromise = newPromise((
|
|
13010
|
-
controller._finishPromise_resolve =
|
|
13009
|
+
controller._finishPromise = newPromise((resolve4, reject) => {
|
|
13010
|
+
controller._finishPromise_resolve = resolve4;
|
|
13011
13011
|
controller._finishPromise_reject = reject;
|
|
13012
13012
|
});
|
|
13013
13013
|
const cancelPromise = controller._cancelAlgorithm(reason);
|
|
@@ -13033,8 +13033,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
13033
13033
|
return controller._finishPromise;
|
|
13034
13034
|
}
|
|
13035
13035
|
const readable = stream._readable;
|
|
13036
|
-
controller._finishPromise = newPromise((
|
|
13037
|
-
controller._finishPromise_resolve =
|
|
13036
|
+
controller._finishPromise = newPromise((resolve4, reject) => {
|
|
13037
|
+
controller._finishPromise_resolve = resolve4;
|
|
13038
13038
|
controller._finishPromise_reject = reject;
|
|
13039
13039
|
});
|
|
13040
13040
|
const flushPromise = controller._flushAlgorithm();
|
|
@@ -13064,8 +13064,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
13064
13064
|
return controller._finishPromise;
|
|
13065
13065
|
}
|
|
13066
13066
|
const writable = stream._writable;
|
|
13067
|
-
controller._finishPromise = newPromise((
|
|
13068
|
-
controller._finishPromise_resolve =
|
|
13067
|
+
controller._finishPromise = newPromise((resolve4, reject) => {
|
|
13068
|
+
controller._finishPromise_resolve = resolve4;
|
|
13069
13069
|
controller._finishPromise_reject = reject;
|
|
13070
13070
|
});
|
|
13071
13071
|
const cancelPromise = controller._cancelAlgorithm(reason);
|
|
@@ -15016,7 +15016,7 @@ import zlib from "node:zlib";
|
|
|
15016
15016
|
import Stream2, { PassThrough as PassThrough2, pipeline as pump } from "node:stream";
|
|
15017
15017
|
import { Buffer as Buffer3 } from "node:buffer";
|
|
15018
15018
|
async function fetch2(url2, options_) {
|
|
15019
|
-
return new Promise((
|
|
15019
|
+
return new Promise((resolve4, reject) => {
|
|
15020
15020
|
const request = new Request(url2, options_);
|
|
15021
15021
|
const { parsedURL, options } = getNodeRequestOptions(request);
|
|
15022
15022
|
if (!supportedSchemas.has(parsedURL.protocol)) {
|
|
@@ -15025,7 +15025,7 @@ async function fetch2(url2, options_) {
|
|
|
15025
15025
|
if (parsedURL.protocol === "data:") {
|
|
15026
15026
|
const data = dist_default(request.url);
|
|
15027
15027
|
const response2 = new Response2(data, { headers: { "Content-Type": data.typeFull } });
|
|
15028
|
-
|
|
15028
|
+
resolve4(response2);
|
|
15029
15029
|
return;
|
|
15030
15030
|
}
|
|
15031
15031
|
const send = (parsedURL.protocol === "https:" ? https : http2).request;
|
|
@@ -15147,7 +15147,7 @@ async function fetch2(url2, options_) {
|
|
|
15147
15147
|
if (responseReferrerPolicy) {
|
|
15148
15148
|
requestOptions.referrerPolicy = responseReferrerPolicy;
|
|
15149
15149
|
}
|
|
15150
|
-
|
|
15150
|
+
resolve4(fetch2(new Request(locationURL, requestOptions)));
|
|
15151
15151
|
finalize2();
|
|
15152
15152
|
return;
|
|
15153
15153
|
}
|
|
@@ -15180,7 +15180,7 @@ async function fetch2(url2, options_) {
|
|
|
15180
15180
|
const codings = headers.get("Content-Encoding");
|
|
15181
15181
|
if (!request.compress || request.method === "HEAD" || codings === null || response_.statusCode === 204 || response_.statusCode === 304) {
|
|
15182
15182
|
response = new Response2(body, responseOptions);
|
|
15183
|
-
|
|
15183
|
+
resolve4(response);
|
|
15184
15184
|
return;
|
|
15185
15185
|
}
|
|
15186
15186
|
const zlibOptions = {
|
|
@@ -15194,7 +15194,7 @@ async function fetch2(url2, options_) {
|
|
|
15194
15194
|
}
|
|
15195
15195
|
});
|
|
15196
15196
|
response = new Response2(body, responseOptions);
|
|
15197
|
-
|
|
15197
|
+
resolve4(response);
|
|
15198
15198
|
return;
|
|
15199
15199
|
}
|
|
15200
15200
|
if (codings === "deflate" || codings === "x-deflate") {
|
|
@@ -15218,12 +15218,12 @@ async function fetch2(url2, options_) {
|
|
|
15218
15218
|
});
|
|
15219
15219
|
}
|
|
15220
15220
|
response = new Response2(body, responseOptions);
|
|
15221
|
-
|
|
15221
|
+
resolve4(response);
|
|
15222
15222
|
});
|
|
15223
15223
|
raw.once("end", () => {
|
|
15224
15224
|
if (!response) {
|
|
15225
15225
|
response = new Response2(body, responseOptions);
|
|
15226
|
-
|
|
15226
|
+
resolve4(response);
|
|
15227
15227
|
}
|
|
15228
15228
|
});
|
|
15229
15229
|
return;
|
|
@@ -15235,11 +15235,11 @@ async function fetch2(url2, options_) {
|
|
|
15235
15235
|
}
|
|
15236
15236
|
});
|
|
15237
15237
|
response = new Response2(body, responseOptions);
|
|
15238
|
-
|
|
15238
|
+
resolve4(response);
|
|
15239
15239
|
return;
|
|
15240
15240
|
}
|
|
15241
15241
|
response = new Response2(body, responseOptions);
|
|
15242
|
-
|
|
15242
|
+
resolve4(response);
|
|
15243
15243
|
});
|
|
15244
15244
|
writeToStream(request_, request).catch(reject);
|
|
15245
15245
|
});
|
|
@@ -21309,7 +21309,7 @@ var require_jwtaccess = __commonJS({
|
|
|
21309
21309
|
}
|
|
21310
21310
|
}
|
|
21311
21311
|
fromStreamAsync(inputStream) {
|
|
21312
|
-
return new Promise((
|
|
21312
|
+
return new Promise((resolve4, reject) => {
|
|
21313
21313
|
if (!inputStream) {
|
|
21314
21314
|
reject(new Error("Must pass in a stream containing the service account auth settings."));
|
|
21315
21315
|
}
|
|
@@ -21318,7 +21318,7 @@ var require_jwtaccess = __commonJS({
|
|
|
21318
21318
|
try {
|
|
21319
21319
|
const data = JSON.parse(s2);
|
|
21320
21320
|
this.fromJSON(data);
|
|
21321
|
-
|
|
21321
|
+
resolve4();
|
|
21322
21322
|
} catch (err) {
|
|
21323
21323
|
reject(err);
|
|
21324
21324
|
}
|
|
@@ -21557,7 +21557,7 @@ var require_jwtclient = __commonJS({
|
|
|
21557
21557
|
}
|
|
21558
21558
|
}
|
|
21559
21559
|
fromStreamAsync(inputStream) {
|
|
21560
|
-
return new Promise((
|
|
21560
|
+
return new Promise((resolve4, reject) => {
|
|
21561
21561
|
if (!inputStream) {
|
|
21562
21562
|
throw new Error("Must pass in a stream containing the service account auth settings.");
|
|
21563
21563
|
}
|
|
@@ -21566,7 +21566,7 @@ var require_jwtclient = __commonJS({
|
|
|
21566
21566
|
try {
|
|
21567
21567
|
const data = JSON.parse(s2);
|
|
21568
21568
|
this.fromJSON(data);
|
|
21569
|
-
|
|
21569
|
+
resolve4();
|
|
21570
21570
|
} catch (e2) {
|
|
21571
21571
|
reject(e2);
|
|
21572
21572
|
}
|
|
@@ -21699,7 +21699,7 @@ var require_refreshclient = __commonJS({
|
|
|
21699
21699
|
}
|
|
21700
21700
|
}
|
|
21701
21701
|
async fromStreamAsync(inputStream) {
|
|
21702
|
-
return new Promise((
|
|
21702
|
+
return new Promise((resolve4, reject) => {
|
|
21703
21703
|
if (!inputStream) {
|
|
21704
21704
|
return reject(new Error("Must pass in a stream containing the user refresh token."));
|
|
21705
21705
|
}
|
|
@@ -21708,7 +21708,7 @@ var require_refreshclient = __commonJS({
|
|
|
21708
21708
|
try {
|
|
21709
21709
|
const data = JSON.parse(s2);
|
|
21710
21710
|
this.fromJSON(data);
|
|
21711
|
-
return
|
|
21711
|
+
return resolve4();
|
|
21712
21712
|
} catch (err) {
|
|
21713
21713
|
return reject(err);
|
|
21714
21714
|
}
|
|
@@ -23541,7 +23541,7 @@ var require_pluggable_auth_handler = __commonJS({
|
|
|
23541
23541
|
* @return A promise that resolves with the executable response.
|
|
23542
23542
|
*/
|
|
23543
23543
|
retrieveResponseFromExecutable(envMap) {
|
|
23544
|
-
return new Promise((
|
|
23544
|
+
return new Promise((resolve4, reject) => {
|
|
23545
23545
|
const child = childProcess.spawn(this.commandComponents[0], this.commandComponents.slice(1), {
|
|
23546
23546
|
env: { ...process.env, ...Object.fromEntries(envMap) }
|
|
23547
23547
|
});
|
|
@@ -23563,7 +23563,7 @@ var require_pluggable_auth_handler = __commonJS({
|
|
|
23563
23563
|
try {
|
|
23564
23564
|
const responseJson = JSON.parse(output);
|
|
23565
23565
|
const response = new executable_response_1.ExecutableResponse(responseJson);
|
|
23566
|
-
return
|
|
23566
|
+
return resolve4(response);
|
|
23567
23567
|
} catch (error48) {
|
|
23568
23568
|
if (error48 instanceof executable_response_1.ExecutableResponseError) {
|
|
23569
23569
|
return reject(error48);
|
|
@@ -24466,7 +24466,7 @@ var require_googleauth = __commonJS({
|
|
|
24466
24466
|
}
|
|
24467
24467
|
}
|
|
24468
24468
|
fromStreamAsync(inputStream, options) {
|
|
24469
|
-
return new Promise((
|
|
24469
|
+
return new Promise((resolve4, reject) => {
|
|
24470
24470
|
if (!inputStream) {
|
|
24471
24471
|
throw new Error("Must pass in a stream containing the Google auth settings.");
|
|
24472
24472
|
}
|
|
@@ -24476,7 +24476,7 @@ var require_googleauth = __commonJS({
|
|
|
24476
24476
|
try {
|
|
24477
24477
|
const data = JSON.parse(chunks.join(""));
|
|
24478
24478
|
const r2 = this._cacheClientFromJSON(data, options);
|
|
24479
|
-
return
|
|
24479
|
+
return resolve4(r2);
|
|
24480
24480
|
} catch (err) {
|
|
24481
24481
|
if (!this.keyFilename)
|
|
24482
24482
|
throw err;
|
|
@@ -24486,7 +24486,7 @@ var require_googleauth = __commonJS({
|
|
|
24486
24486
|
});
|
|
24487
24487
|
this.cachedCredential = client;
|
|
24488
24488
|
this.setGapicJWTValues(client);
|
|
24489
|
-
return
|
|
24489
|
+
return resolve4(client);
|
|
24490
24490
|
}
|
|
24491
24491
|
} catch (err) {
|
|
24492
24492
|
return reject(err);
|
|
@@ -24522,17 +24522,17 @@ var require_googleauth = __commonJS({
|
|
|
24522
24522
|
* Run the Google Cloud SDK command that prints the default project ID
|
|
24523
24523
|
*/
|
|
24524
24524
|
async getDefaultServiceProjectId() {
|
|
24525
|
-
return new Promise((
|
|
24525
|
+
return new Promise((resolve4) => {
|
|
24526
24526
|
(0, child_process_1.exec)("gcloud config config-helper --format json", (err, stdout) => {
|
|
24527
24527
|
if (!err && stdout) {
|
|
24528
24528
|
try {
|
|
24529
24529
|
const projectId = JSON.parse(stdout).configuration.properties.core.project;
|
|
24530
|
-
|
|
24530
|
+
resolve4(projectId);
|
|
24531
24531
|
return;
|
|
24532
24532
|
} catch (e2) {
|
|
24533
24533
|
}
|
|
24534
24534
|
}
|
|
24535
|
-
|
|
24535
|
+
resolve4(null);
|
|
24536
24536
|
});
|
|
24537
24537
|
});
|
|
24538
24538
|
}
|
|
@@ -49973,7 +49973,7 @@ var Protocol = class {
|
|
|
49973
49973
|
return;
|
|
49974
49974
|
}
|
|
49975
49975
|
const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1e3;
|
|
49976
|
-
await new Promise((
|
|
49976
|
+
await new Promise((resolve4) => setTimeout(resolve4, pollInterval));
|
|
49977
49977
|
options?.signal?.throwIfAborted();
|
|
49978
49978
|
}
|
|
49979
49979
|
} catch (error48) {
|
|
@@ -49990,7 +49990,7 @@ var Protocol = class {
|
|
|
49990
49990
|
*/
|
|
49991
49991
|
request(request, resultSchema, options) {
|
|
49992
49992
|
const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {};
|
|
49993
|
-
return new Promise((
|
|
49993
|
+
return new Promise((resolve4, reject) => {
|
|
49994
49994
|
const earlyReject = (error48) => {
|
|
49995
49995
|
reject(error48);
|
|
49996
49996
|
};
|
|
@@ -50068,7 +50068,7 @@ var Protocol = class {
|
|
|
50068
50068
|
if (!parseResult.success) {
|
|
50069
50069
|
reject(parseResult.error);
|
|
50070
50070
|
} else {
|
|
50071
|
-
|
|
50071
|
+
resolve4(parseResult.data);
|
|
50072
50072
|
}
|
|
50073
50073
|
} catch (error48) {
|
|
50074
50074
|
reject(error48);
|
|
@@ -50329,12 +50329,12 @@ var Protocol = class {
|
|
|
50329
50329
|
}
|
|
50330
50330
|
} catch {
|
|
50331
50331
|
}
|
|
50332
|
-
return new Promise((
|
|
50332
|
+
return new Promise((resolve4, reject) => {
|
|
50333
50333
|
if (signal.aborted) {
|
|
50334
50334
|
reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
|
|
50335
50335
|
return;
|
|
50336
50336
|
}
|
|
50337
|
-
const timeoutId = setTimeout(
|
|
50337
|
+
const timeoutId = setTimeout(resolve4, interval);
|
|
50338
50338
|
signal.addEventListener("abort", () => {
|
|
50339
50339
|
clearTimeout(timeoutId);
|
|
50340
50340
|
reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
|
|
@@ -51434,7 +51434,7 @@ var McpServer = class {
|
|
|
51434
51434
|
let task = createTaskResult.task;
|
|
51435
51435
|
const pollInterval = task.pollInterval ?? 5e3;
|
|
51436
51436
|
while (task.status !== "completed" && task.status !== "failed" && task.status !== "cancelled") {
|
|
51437
|
-
await new Promise((
|
|
51437
|
+
await new Promise((resolve4) => setTimeout(resolve4, pollInterval));
|
|
51438
51438
|
const updatedTask = await extra.taskStore.getTask(taskId);
|
|
51439
51439
|
if (!updatedTask) {
|
|
51440
51440
|
throw new McpError(ErrorCode.InternalError, `Task ${taskId} not found during polling`);
|
|
@@ -52077,12 +52077,12 @@ var StdioServerTransport = class {
|
|
|
52077
52077
|
this.onclose?.();
|
|
52078
52078
|
}
|
|
52079
52079
|
send(message) {
|
|
52080
|
-
return new Promise((
|
|
52080
|
+
return new Promise((resolve4) => {
|
|
52081
52081
|
const json2 = serializeMessage(message);
|
|
52082
52082
|
if (this._stdout.write(json2)) {
|
|
52083
|
-
|
|
52083
|
+
resolve4();
|
|
52084
52084
|
} else {
|
|
52085
|
-
this._stdout.once("drain",
|
|
52085
|
+
this._stdout.once("drain", resolve4);
|
|
52086
52086
|
}
|
|
52087
52087
|
});
|
|
52088
52088
|
}
|
|
@@ -52122,12 +52122,37 @@ function loadConfig() {
|
|
|
52122
52122
|
}
|
|
52123
52123
|
}
|
|
52124
52124
|
function resolveApiKey(providerName) {
|
|
52125
|
-
|
|
52126
|
-
|
|
52127
|
-
|
|
52125
|
+
const envMap = {
|
|
52126
|
+
gemini: process.env.GEMINI_API_KEY,
|
|
52127
|
+
openai: process.env.OPENAI_API_KEY
|
|
52128
|
+
};
|
|
52129
|
+
if (envMap[providerName])
|
|
52130
|
+
return envMap[providerName];
|
|
52128
52131
|
const config2 = loadConfig();
|
|
52129
52132
|
return config2.providers?.[providerName]?.apiKey;
|
|
52130
52133
|
}
|
|
52134
|
+
function loadProjectConfig() {
|
|
52135
|
+
try {
|
|
52136
|
+
const raw = readFileSync(resolve(".imgxrc"), "utf-8");
|
|
52137
|
+
return JSON.parse(raw);
|
|
52138
|
+
} catch {
|
|
52139
|
+
return {};
|
|
52140
|
+
}
|
|
52141
|
+
}
|
|
52142
|
+
function resolveDefault(key) {
|
|
52143
|
+
const envMap = {
|
|
52144
|
+
provider: process.env.IMGX_PROVIDER,
|
|
52145
|
+
model: process.env.IMGX_MODEL,
|
|
52146
|
+
outputDir: process.env.IMGX_OUTPUT_DIR
|
|
52147
|
+
};
|
|
52148
|
+
if (envMap[key])
|
|
52149
|
+
return envMap[key];
|
|
52150
|
+
const project = loadProjectConfig();
|
|
52151
|
+
if (project.defaults?.[key])
|
|
52152
|
+
return project.defaults[key];
|
|
52153
|
+
const config2 = loadConfig();
|
|
52154
|
+
return config2.defaults?.[key];
|
|
52155
|
+
}
|
|
52131
52156
|
function saveLastOutput(filePaths) {
|
|
52132
52157
|
const dir = configDir();
|
|
52133
52158
|
mkdirSync(dir, { recursive: true });
|
|
@@ -56909,14 +56934,14 @@ function __asyncValues(o) {
|
|
|
56909
56934
|
}, i2);
|
|
56910
56935
|
function verb(n) {
|
|
56911
56936
|
i2[n] = o[n] && function(v) {
|
|
56912
|
-
return new Promise(function(
|
|
56913
|
-
v = o[n](v), settle(
|
|
56937
|
+
return new Promise(function(resolve4, reject) {
|
|
56938
|
+
v = o[n](v), settle(resolve4, reject, v.done, v.value);
|
|
56914
56939
|
});
|
|
56915
56940
|
};
|
|
56916
56941
|
}
|
|
56917
|
-
function settle(
|
|
56942
|
+
function settle(resolve4, reject, d, v) {
|
|
56918
56943
|
Promise.resolve(v).then(function(v2) {
|
|
56919
|
-
|
|
56944
|
+
resolve4({ value: v2, done: d });
|
|
56920
56945
|
}, reject);
|
|
56921
56946
|
}
|
|
56922
56947
|
}
|
|
@@ -62887,8 +62912,8 @@ var LiveMusic = class {
|
|
|
62887
62912
|
const url2 = `${websocketBaseUrl}/ws/google.ai.generativelanguage.${apiVersion}.GenerativeService.BidiGenerateMusic?key=${apiKey}`;
|
|
62888
62913
|
let onopenResolve = () => {
|
|
62889
62914
|
};
|
|
62890
|
-
const onopenPromise = new Promise((
|
|
62891
|
-
onopenResolve =
|
|
62915
|
+
const onopenPromise = new Promise((resolve4) => {
|
|
62916
|
+
onopenResolve = resolve4;
|
|
62892
62917
|
});
|
|
62893
62918
|
const callbacks = params.callbacks;
|
|
62894
62919
|
const onopenAwaitedCallback = function() {
|
|
@@ -63128,8 +63153,8 @@ var Live = class {
|
|
|
63128
63153
|
}
|
|
63129
63154
|
let onopenResolve = () => {
|
|
63130
63155
|
};
|
|
63131
|
-
const onopenPromise = new Promise((
|
|
63132
|
-
onopenResolve =
|
|
63156
|
+
const onopenPromise = new Promise((resolve4) => {
|
|
63157
|
+
onopenResolve = resolve4;
|
|
63133
63158
|
});
|
|
63134
63159
|
const callbacks = params.callbacks;
|
|
63135
63160
|
const onopenAwaitedCallback = function() {
|
|
@@ -66071,7 +66096,7 @@ var safeJSON = (text) => {
|
|
|
66071
66096
|
return void 0;
|
|
66072
66097
|
}
|
|
66073
66098
|
};
|
|
66074
|
-
var sleep$1 = (ms) => new Promise((
|
|
66099
|
+
var sleep$1 = (ms) => new Promise((resolve4) => setTimeout(resolve4, ms));
|
|
66075
66100
|
var VERSION = "0.0.1";
|
|
66076
66101
|
function getDetectedPlatform() {
|
|
66077
66102
|
if (typeof Deno !== "undefined" && Deno.build != null) {
|
|
@@ -66991,8 +67016,8 @@ async function defaultParseResponse(client, props) {
|
|
|
66991
67016
|
}
|
|
66992
67017
|
var APIPromise = class _APIPromise extends Promise {
|
|
66993
67018
|
constructor(client, responsePromise, parseResponse = defaultParseResponse) {
|
|
66994
|
-
super((
|
|
66995
|
-
|
|
67019
|
+
super((resolve4) => {
|
|
67020
|
+
resolve4(null);
|
|
66996
67021
|
});
|
|
66997
67022
|
this.responsePromise = responsePromise;
|
|
66998
67023
|
this.parseResponse = parseResponse;
|
|
@@ -69223,8 +69248,9 @@ function getApiKeyFromEnv() {
|
|
|
69223
69248
|
|
|
69224
69249
|
// build/core/storage.js
|
|
69225
69250
|
import { readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2 } from "node:fs";
|
|
69226
|
-
import { dirname, resolve as resolve2 } from "node:path";
|
|
69251
|
+
import { dirname, join as join2, resolve as resolve2 } from "node:path";
|
|
69227
69252
|
import { randomUUID } from "node:crypto";
|
|
69253
|
+
import { homedir as homedir2 } from "node:os";
|
|
69228
69254
|
var MIME_TO_EXT = {
|
|
69229
69255
|
"image/png": ".png",
|
|
69230
69256
|
"image/jpeg": ".jpg",
|
|
@@ -69237,9 +69263,17 @@ function readImageAsBase64(filePath) {
|
|
|
69237
69263
|
const mimeType = ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "webp" ? "image/webp" : "image/png";
|
|
69238
69264
|
return { data: buffer.toString("base64"), mimeType };
|
|
69239
69265
|
}
|
|
69266
|
+
function fallbackOutputDir(outputDir) {
|
|
69267
|
+
if (outputDir)
|
|
69268
|
+
return outputDir;
|
|
69269
|
+
const configured = resolveDefault("outputDir");
|
|
69270
|
+
if (configured)
|
|
69271
|
+
return configured;
|
|
69272
|
+
return join2(homedir2(), "Pictures", "imgx");
|
|
69273
|
+
}
|
|
69240
69274
|
function saveImage(image, outputPath, outputDir) {
|
|
69241
69275
|
const ext = MIME_TO_EXT[image.mimeType] || ".png";
|
|
69242
|
-
const filePath = outputPath ? resolve2(outputPath) : resolve2(outputDir
|
|
69276
|
+
const filePath = outputPath ? resolve2(outputPath) : resolve2(fallbackOutputDir(outputDir), `imgx-${randomUUID().slice(0, 8)}${ext}`);
|
|
69243
69277
|
mkdirSync2(dirname(filePath), { recursive: true });
|
|
69244
69278
|
writeFileSync2(filePath, image.data);
|
|
69245
69279
|
return filePath;
|
|
@@ -69375,18 +69409,201 @@ function initGemini() {
|
|
|
69375
69409
|
registerProvider(new GeminiProvider(apiKey));
|
|
69376
69410
|
}
|
|
69377
69411
|
|
|
69412
|
+
// build/providers/openai/client.js
|
|
69413
|
+
import { readFileSync as readFileSync3 } from "node:fs";
|
|
69414
|
+
import { resolve as resolve3 } from "node:path";
|
|
69415
|
+
|
|
69416
|
+
// build/providers/openai/capabilities.js
|
|
69417
|
+
var OPENAI_PROVIDER_INFO = {
|
|
69418
|
+
name: "openai",
|
|
69419
|
+
models: ["gpt-image-1"],
|
|
69420
|
+
defaultModel: "gpt-image-1",
|
|
69421
|
+
capabilities: /* @__PURE__ */ new Set([
|
|
69422
|
+
Capability.TEXT_TO_IMAGE,
|
|
69423
|
+
Capability.ASPECT_RATIO,
|
|
69424
|
+
Capability.IMAGE_EDITING,
|
|
69425
|
+
Capability.MULTIPLE_OUTPUTS
|
|
69426
|
+
]),
|
|
69427
|
+
aspectRatios: ["1:1", "3:2", "2:3", "16:9", "9:16", "4:3", "3:4"],
|
|
69428
|
+
resolutions: ["1K", "2K", "4K"]
|
|
69429
|
+
};
|
|
69430
|
+
|
|
69431
|
+
// build/providers/openai/client.js
|
|
69432
|
+
var API_BASE = "https://api.openai.com/v1";
|
|
69433
|
+
function mapSize(aspectRatio) {
|
|
69434
|
+
switch (aspectRatio) {
|
|
69435
|
+
case "1:1":
|
|
69436
|
+
return "1024x1024";
|
|
69437
|
+
case "3:2":
|
|
69438
|
+
case "16:9":
|
|
69439
|
+
case "4:3":
|
|
69440
|
+
return "1536x1024";
|
|
69441
|
+
case "2:3":
|
|
69442
|
+
case "9:16":
|
|
69443
|
+
case "3:4":
|
|
69444
|
+
return "1024x1536";
|
|
69445
|
+
default:
|
|
69446
|
+
return "auto";
|
|
69447
|
+
}
|
|
69448
|
+
}
|
|
69449
|
+
function mapQuality(resolution) {
|
|
69450
|
+
switch (resolution) {
|
|
69451
|
+
case "1K":
|
|
69452
|
+
return "low";
|
|
69453
|
+
case "4K":
|
|
69454
|
+
return "high";
|
|
69455
|
+
default:
|
|
69456
|
+
return "auto";
|
|
69457
|
+
}
|
|
69458
|
+
}
|
|
69459
|
+
function buildMultipart(fields, files) {
|
|
69460
|
+
const boundary = `----imgx${Date.now()}${Math.random().toString(36).slice(2)}`;
|
|
69461
|
+
const parts = [];
|
|
69462
|
+
for (const [key, value] of Object.entries(fields)) {
|
|
69463
|
+
parts.push(Buffer.from(`--${boundary}\r
|
|
69464
|
+
Content-Disposition: form-data; name="${key}"\r
|
|
69465
|
+
\r
|
|
69466
|
+
${value}\r
|
|
69467
|
+
`));
|
|
69468
|
+
}
|
|
69469
|
+
for (const file2 of files) {
|
|
69470
|
+
parts.push(Buffer.from(`--${boundary}\r
|
|
69471
|
+
Content-Disposition: form-data; name="${file2.name}"; filename="${file2.filename}"\r
|
|
69472
|
+
Content-Type: ${file2.contentType}\r
|
|
69473
|
+
\r
|
|
69474
|
+
`));
|
|
69475
|
+
parts.push(file2.data);
|
|
69476
|
+
parts.push(Buffer.from("\r\n"));
|
|
69477
|
+
}
|
|
69478
|
+
parts.push(Buffer.from(`--${boundary}--\r
|
|
69479
|
+
`));
|
|
69480
|
+
const concatenated = Buffer.concat(parts);
|
|
69481
|
+
return {
|
|
69482
|
+
body: new Uint8Array(concatenated.buffer, concatenated.byteOffset, concatenated.byteLength),
|
|
69483
|
+
contentType: `multipart/form-data; boundary=${boundary}`
|
|
69484
|
+
};
|
|
69485
|
+
}
|
|
69486
|
+
var OpenAIProvider = class {
|
|
69487
|
+
info = OPENAI_PROVIDER_INFO;
|
|
69488
|
+
apiKey;
|
|
69489
|
+
constructor(apiKey) {
|
|
69490
|
+
this.apiKey = apiKey;
|
|
69491
|
+
}
|
|
69492
|
+
async generate(input, model) {
|
|
69493
|
+
const modelName = model || this.info.defaultModel;
|
|
69494
|
+
try {
|
|
69495
|
+
const response = await fetch(`${API_BASE}/images/generations`, {
|
|
69496
|
+
method: "POST",
|
|
69497
|
+
headers: {
|
|
69498
|
+
"Content-Type": "application/json",
|
|
69499
|
+
Authorization: `Bearer ${this.apiKey}`
|
|
69500
|
+
},
|
|
69501
|
+
body: JSON.stringify({
|
|
69502
|
+
model: modelName,
|
|
69503
|
+
prompt: input.prompt,
|
|
69504
|
+
n: input.count || 1,
|
|
69505
|
+
size: mapSize(input.aspectRatio),
|
|
69506
|
+
quality: mapQuality(input.resolution)
|
|
69507
|
+
})
|
|
69508
|
+
});
|
|
69509
|
+
const json2 = await response.json();
|
|
69510
|
+
if (!response.ok || json2.error) {
|
|
69511
|
+
return {
|
|
69512
|
+
success: false,
|
|
69513
|
+
images: [],
|
|
69514
|
+
error: json2.error?.message || `HTTP ${response.status}`
|
|
69515
|
+
};
|
|
69516
|
+
}
|
|
69517
|
+
return this.parseResponse(json2);
|
|
69518
|
+
} catch (err) {
|
|
69519
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
69520
|
+
return { success: false, images: [], error: msg };
|
|
69521
|
+
}
|
|
69522
|
+
}
|
|
69523
|
+
async edit(input, model) {
|
|
69524
|
+
const modelName = model || this.info.defaultModel;
|
|
69525
|
+
const absPath = resolve3(input.inputImage);
|
|
69526
|
+
const imageBuffer = readFileSync3(absPath);
|
|
69527
|
+
const ext = absPath.split(".").pop()?.toLowerCase();
|
|
69528
|
+
const contentType = ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "webp" ? "image/webp" : "image/png";
|
|
69529
|
+
const fields = {
|
|
69530
|
+
model: modelName,
|
|
69531
|
+
prompt: input.prompt,
|
|
69532
|
+
n: String(input.count || 1),
|
|
69533
|
+
size: mapSize(input.aspectRatio),
|
|
69534
|
+
quality: mapQuality(input.resolution)
|
|
69535
|
+
};
|
|
69536
|
+
const { body, contentType: ct } = buildMultipart(fields, [
|
|
69537
|
+
{
|
|
69538
|
+
name: "image",
|
|
69539
|
+
data: imageBuffer,
|
|
69540
|
+
filename: `image.${ext || "png"}`,
|
|
69541
|
+
contentType
|
|
69542
|
+
}
|
|
69543
|
+
]);
|
|
69544
|
+
try {
|
|
69545
|
+
const response = await fetch(`${API_BASE}/images/edits`, {
|
|
69546
|
+
method: "POST",
|
|
69547
|
+
headers: {
|
|
69548
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
69549
|
+
"Content-Type": ct
|
|
69550
|
+
},
|
|
69551
|
+
body
|
|
69552
|
+
});
|
|
69553
|
+
const json2 = await response.json();
|
|
69554
|
+
if (!response.ok || json2.error) {
|
|
69555
|
+
return {
|
|
69556
|
+
success: false,
|
|
69557
|
+
images: [],
|
|
69558
|
+
error: json2.error?.message || `HTTP ${response.status}`
|
|
69559
|
+
};
|
|
69560
|
+
}
|
|
69561
|
+
return this.parseResponse(json2);
|
|
69562
|
+
} catch (err) {
|
|
69563
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
69564
|
+
return { success: false, images: [], error: msg };
|
|
69565
|
+
}
|
|
69566
|
+
}
|
|
69567
|
+
parseResponse(json2) {
|
|
69568
|
+
const images = [];
|
|
69569
|
+
if (json2.data) {
|
|
69570
|
+
for (const item of json2.data) {
|
|
69571
|
+
if (item.b64_json) {
|
|
69572
|
+
images.push({
|
|
69573
|
+
data: Buffer.from(item.b64_json, "base64"),
|
|
69574
|
+
mimeType: "image/png"
|
|
69575
|
+
});
|
|
69576
|
+
}
|
|
69577
|
+
}
|
|
69578
|
+
}
|
|
69579
|
+
if (images.length === 0) {
|
|
69580
|
+
return { success: false, images: [], error: "No image data in response" };
|
|
69581
|
+
}
|
|
69582
|
+
return { success: true, images };
|
|
69583
|
+
}
|
|
69584
|
+
};
|
|
69585
|
+
|
|
69586
|
+
// build/providers/openai/index.js
|
|
69587
|
+
function initOpenAI() {
|
|
69588
|
+
const apiKey = resolveApiKey("openai");
|
|
69589
|
+
if (!apiKey)
|
|
69590
|
+
return;
|
|
69591
|
+
registerProvider(new OpenAIProvider(apiKey));
|
|
69592
|
+
}
|
|
69593
|
+
|
|
69378
69594
|
// build/mcp/server.js
|
|
69379
69595
|
var server = new McpServer({
|
|
69380
69596
|
name: "imgx",
|
|
69381
|
-
version: "0.
|
|
69597
|
+
version: "0.6.1"
|
|
69382
69598
|
});
|
|
69383
69599
|
initGemini();
|
|
69600
|
+
initOpenAI();
|
|
69384
69601
|
function resolveProvider(providerName) {
|
|
69385
69602
|
const name = providerName || process.env.IMGX_PROVIDER || "gemini";
|
|
69386
69603
|
const provider = getProvider(name);
|
|
69387
69604
|
if (!provider) {
|
|
69388
69605
|
const available = listProviders().map((p) => p.info.name).join(", ");
|
|
69389
|
-
throw new Error(`Provider "${name}" not available.` + (available ? ` Available: ${available}` : " Set GEMINI_API_KEY to enable
|
|
69606
|
+
throw new Error(`Provider "${name}" not available.` + (available ? ` Available: ${available}` : " Set GEMINI_API_KEY or OPENAI_API_KEY to enable a provider."));
|
|
69390
69607
|
}
|
|
69391
69608
|
return provider;
|
|
69392
69609
|
}
|