@warmhub/cli 0.53.0 → 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/wh.js +729 -1555
- package/package.json +2 -2
package/dist/wh.js
CHANGED
|
@@ -4,7 +4,7 @@ import { createRequire } from "node:module";
|
|
|
4
4
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
5
5
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
6
6
|
|
|
7
|
-
// ../../node_modules/.bun/undici@6.
|
|
7
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/core/symbols.js
|
|
8
8
|
var require_symbols = __commonJS((exports, module) => {
|
|
9
9
|
module.exports = {
|
|
10
10
|
kClose: Symbol("close"),
|
|
@@ -75,7 +75,7 @@ var require_symbols = __commonJS((exports, module) => {
|
|
|
75
75
|
};
|
|
76
76
|
});
|
|
77
77
|
|
|
78
|
-
// ../../node_modules/.bun/undici@6.
|
|
78
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/core/errors.js
|
|
79
79
|
var require_errors = __commonJS((exports, module) => {
|
|
80
80
|
var kUndiciError = Symbol.for("undici.error.UND_ERR");
|
|
81
81
|
|
|
@@ -454,7 +454,7 @@ var require_errors = __commonJS((exports, module) => {
|
|
|
454
454
|
};
|
|
455
455
|
});
|
|
456
456
|
|
|
457
|
-
// ../../node_modules/.bun/undici@6.
|
|
457
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/core/constants.js
|
|
458
458
|
var require_constants = __commonJS((exports, module) => {
|
|
459
459
|
var headerNameLowerCasedRecord = {};
|
|
460
460
|
var wellknownHeaderNames = [
|
|
@@ -566,7 +566,7 @@ var require_constants = __commonJS((exports, module) => {
|
|
|
566
566
|
};
|
|
567
567
|
});
|
|
568
568
|
|
|
569
|
-
// ../../node_modules/.bun/undici@6.
|
|
569
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/core/tree.js
|
|
570
570
|
var require_tree = __commonJS((exports, module) => {
|
|
571
571
|
var {
|
|
572
572
|
wellknownHeaderNames,
|
|
@@ -678,7 +678,7 @@ var require_tree = __commonJS((exports, module) => {
|
|
|
678
678
|
};
|
|
679
679
|
});
|
|
680
680
|
|
|
681
|
-
// ../../node_modules/.bun/undici@6.
|
|
681
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/core/util.js
|
|
682
682
|
var require_util = __commonJS((exports, module) => {
|
|
683
683
|
var assert2 = __require("node:assert");
|
|
684
684
|
var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols();
|
|
@@ -1182,7 +1182,7 @@ var require_util = __commonJS((exports, module) => {
|
|
|
1182
1182
|
};
|
|
1183
1183
|
});
|
|
1184
1184
|
|
|
1185
|
-
// ../../node_modules/.bun/undici@6.
|
|
1185
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/core/diagnostics.js
|
|
1186
1186
|
var require_diagnostics = __commonJS((exports, module) => {
|
|
1187
1187
|
var diagnosticsChannel = __require("node:diagnostics_channel");
|
|
1188
1188
|
var util = __require("node:util");
|
|
@@ -1309,7 +1309,7 @@ var require_diagnostics = __commonJS((exports, module) => {
|
|
|
1309
1309
|
};
|
|
1310
1310
|
});
|
|
1311
1311
|
|
|
1312
|
-
// ../../node_modules/.bun/undici@6.
|
|
1312
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/core/request.js
|
|
1313
1313
|
var require_request = __commonJS((exports, module) => {
|
|
1314
1314
|
var {
|
|
1315
1315
|
InvalidArgumentError,
|
|
@@ -1640,7 +1640,7 @@ var require_request = __commonJS((exports, module) => {
|
|
|
1640
1640
|
module.exports = Request;
|
|
1641
1641
|
});
|
|
1642
1642
|
|
|
1643
|
-
// ../../node_modules/.bun/undici@6.
|
|
1643
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/dispatcher.js
|
|
1644
1644
|
var require_dispatcher = __commonJS((exports, module) => {
|
|
1645
1645
|
var EventEmitter = __require("node:events");
|
|
1646
1646
|
|
|
@@ -1694,7 +1694,7 @@ var require_dispatcher = __commonJS((exports, module) => {
|
|
|
1694
1694
|
module.exports = Dispatcher;
|
|
1695
1695
|
});
|
|
1696
1696
|
|
|
1697
|
-
// ../../node_modules/.bun/undici@6.
|
|
1697
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/dispatcher-base.js
|
|
1698
1698
|
var require_dispatcher_base = __commonJS((exports, module) => {
|
|
1699
1699
|
var Dispatcher = require_dispatcher();
|
|
1700
1700
|
var {
|
|
@@ -1719,6 +1719,7 @@ var require_dispatcher_base = __commonJS((exports, module) => {
|
|
|
1719
1719
|
}
|
|
1720
1720
|
get webSocketOptions() {
|
|
1721
1721
|
return {
|
|
1722
|
+
maxFragments: this[kWebSocketOptions].maxFragments ?? 131072,
|
|
1722
1723
|
maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024
|
|
1723
1724
|
};
|
|
1724
1725
|
}
|
|
@@ -1857,7 +1858,7 @@ var require_dispatcher_base = __commonJS((exports, module) => {
|
|
|
1857
1858
|
module.exports = DispatcherBase;
|
|
1858
1859
|
});
|
|
1859
1860
|
|
|
1860
|
-
// ../../node_modules/.bun/undici@6.
|
|
1861
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/util/timers.js
|
|
1861
1862
|
var require_timers = __commonJS((exports, module) => {
|
|
1862
1863
|
var fastNow = 0;
|
|
1863
1864
|
var RESOLUTION_MS = 1000;
|
|
@@ -1971,7 +1972,7 @@ var require_timers = __commonJS((exports, module) => {
|
|
|
1971
1972
|
};
|
|
1972
1973
|
});
|
|
1973
1974
|
|
|
1974
|
-
// ../../node_modules/.bun/undici@6.
|
|
1975
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/core/connect.js
|
|
1975
1976
|
var require_connect = __commonJS((exports, module) => {
|
|
1976
1977
|
var net = __require("node:net");
|
|
1977
1978
|
var assert2 = __require("node:assert");
|
|
@@ -2143,7 +2144,7 @@ var require_connect = __commonJS((exports, module) => {
|
|
|
2143
2144
|
module.exports = buildConnector;
|
|
2144
2145
|
});
|
|
2145
2146
|
|
|
2146
|
-
// ../../node_modules/.bun/undici@6.
|
|
2147
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/llhttp/utils.js
|
|
2147
2148
|
var require_utils = __commonJS((exports) => {
|
|
2148
2149
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2149
2150
|
exports.enumToMap = undefined;
|
|
@@ -2160,7 +2161,7 @@ var require_utils = __commonJS((exports) => {
|
|
|
2160
2161
|
exports.enumToMap = enumToMap;
|
|
2161
2162
|
});
|
|
2162
2163
|
|
|
2163
|
-
// ../../node_modules/.bun/undici@6.
|
|
2164
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/llhttp/constants.js
|
|
2164
2165
|
var require_constants2 = __commonJS((exports) => {
|
|
2165
2166
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2166
2167
|
exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = undefined;
|
|
@@ -2476,19 +2477,19 @@ var require_constants2 = __commonJS((exports) => {
|
|
|
2476
2477
|
};
|
|
2477
2478
|
});
|
|
2478
2479
|
|
|
2479
|
-
// ../../node_modules/.bun/undici@6.
|
|
2480
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/llhttp/llhttp-wasm.js
|
|
2480
2481
|
var require_llhttp_wasm = __commonJS((exports, module) => {
|
|
2481
2482
|
var { Buffer: Buffer3 } = __require("node:buffer");
|
|
2482
2483
|
module.exports = Buffer3.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64");
|
|
2483
2484
|
});
|
|
2484
2485
|
|
|
2485
|
-
// ../../node_modules/.bun/undici@6.
|
|
2486
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
|
|
2486
2487
|
var require_llhttp_simd_wasm = __commonJS((exports, module) => {
|
|
2487
2488
|
var { Buffer: Buffer3 } = __require("node:buffer");
|
|
2488
2489
|
module.exports = Buffer3.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64");
|
|
2489
2490
|
});
|
|
2490
2491
|
|
|
2491
|
-
// ../../node_modules/.bun/undici@6.
|
|
2492
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/constants.js
|
|
2492
2493
|
var require_constants3 = __commonJS((exports, module) => {
|
|
2493
2494
|
var corsSafeListedMethods = ["GET", "HEAD", "POST"];
|
|
2494
2495
|
var corsSafeListedMethodsSet = new Set(corsSafeListedMethods);
|
|
@@ -2657,7 +2658,7 @@ var require_constants3 = __commonJS((exports, module) => {
|
|
|
2657
2658
|
};
|
|
2658
2659
|
});
|
|
2659
2660
|
|
|
2660
|
-
// ../../node_modules/.bun/undici@6.
|
|
2661
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/global.js
|
|
2661
2662
|
var require_global = __commonJS((exports, module) => {
|
|
2662
2663
|
var globalOrigin = Symbol.for("undici.globalOrigin.1");
|
|
2663
2664
|
function getGlobalOrigin() {
|
|
@@ -2690,7 +2691,7 @@ var require_global = __commonJS((exports, module) => {
|
|
|
2690
2691
|
};
|
|
2691
2692
|
});
|
|
2692
2693
|
|
|
2693
|
-
// ../../node_modules/.bun/undici@6.
|
|
2694
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/data-url.js
|
|
2694
2695
|
var require_data_url = __commonJS((exports, module) => {
|
|
2695
2696
|
var assert2 = __require("node:assert");
|
|
2696
2697
|
var encoder = new TextEncoder;
|
|
@@ -3003,7 +3004,7 @@ var require_data_url = __commonJS((exports, module) => {
|
|
|
3003
3004
|
};
|
|
3004
3005
|
});
|
|
3005
3006
|
|
|
3006
|
-
// ../../node_modules/.bun/undici@6.
|
|
3007
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/webidl.js
|
|
3007
3008
|
var require_webidl = __commonJS((exports, module) => {
|
|
3008
3009
|
var { types, inspect } = __require("node:util");
|
|
3009
3010
|
var { markAsUncloneable } = __require("node:worker_threads");
|
|
@@ -3409,7 +3410,7 @@ var require_webidl = __commonJS((exports, module) => {
|
|
|
3409
3410
|
};
|
|
3410
3411
|
});
|
|
3411
3412
|
|
|
3412
|
-
// ../../node_modules/.bun/undici@6.
|
|
3413
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/util.js
|
|
3413
3414
|
var require_util2 = __commonJS((exports, module) => {
|
|
3414
3415
|
var { Transform } = __require("node:stream");
|
|
3415
3416
|
var zlib = __require("node:zlib");
|
|
@@ -4221,7 +4222,7 @@ var require_util2 = __commonJS((exports, module) => {
|
|
|
4221
4222
|
};
|
|
4222
4223
|
});
|
|
4223
4224
|
|
|
4224
|
-
// ../../node_modules/.bun/undici@6.
|
|
4225
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/symbols.js
|
|
4225
4226
|
var require_symbols2 = __commonJS((exports, module) => {
|
|
4226
4227
|
module.exports = {
|
|
4227
4228
|
kUrl: Symbol("url"),
|
|
@@ -4232,7 +4233,7 @@ var require_symbols2 = __commonJS((exports, module) => {
|
|
|
4232
4233
|
};
|
|
4233
4234
|
});
|
|
4234
4235
|
|
|
4235
|
-
// ../../node_modules/.bun/undici@6.
|
|
4236
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/file.js
|
|
4236
4237
|
var require_file = __commonJS((exports, module) => {
|
|
4237
4238
|
var { Blob: Blob2, File } = __require("node:buffer");
|
|
4238
4239
|
var { kState } = require_symbols2();
|
|
@@ -4293,7 +4294,7 @@ var require_file = __commonJS((exports, module) => {
|
|
|
4293
4294
|
module.exports = { FileLike, isFileLike };
|
|
4294
4295
|
});
|
|
4295
4296
|
|
|
4296
|
-
// ../../node_modules/.bun/undici@6.
|
|
4297
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/formdata.js
|
|
4297
4298
|
var require_formdata = __commonJS((exports, module) => {
|
|
4298
4299
|
var { isBlobLike, iteratorMixin } = require_util2();
|
|
4299
4300
|
var { kState } = require_symbols2();
|
|
@@ -4433,7 +4434,7 @@ var require_formdata = __commonJS((exports, module) => {
|
|
|
4433
4434
|
module.exports = { FormData: FormData2, makeEntry };
|
|
4434
4435
|
});
|
|
4435
4436
|
|
|
4436
|
-
// ../../node_modules/.bun/undici@6.
|
|
4437
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/formdata-parser.js
|
|
4437
4438
|
var require_formdata_parser = __commonJS((exports, module) => {
|
|
4438
4439
|
var { isUSVString, bufferToLowerCasedHeaderName } = require_util();
|
|
4439
4440
|
var { utf8DecodeBytes } = require_util2();
|
|
@@ -4661,7 +4662,7 @@ var require_formdata_parser = __commonJS((exports, module) => {
|
|
|
4661
4662
|
};
|
|
4662
4663
|
});
|
|
4663
4664
|
|
|
4664
|
-
// ../../node_modules/.bun/undici@6.
|
|
4665
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/body.js
|
|
4665
4666
|
var require_body = __commonJS((exports, module) => {
|
|
4666
4667
|
var util = require_util();
|
|
4667
4668
|
var {
|
|
@@ -4968,7 +4969,7 @@ ${normalizeLinefeeds(value)}\r
|
|
|
4968
4969
|
};
|
|
4969
4970
|
});
|
|
4970
4971
|
|
|
4971
|
-
// ../../node_modules/.bun/undici@6.
|
|
4972
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/client-h1.js
|
|
4972
4973
|
var require_client_h1 = __commonJS((exports, module) => {
|
|
4973
4974
|
var assert2 = __require("node:assert");
|
|
4974
4975
|
var util = require_util();
|
|
@@ -5024,6 +5025,9 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5024
5025
|
var FastBuffer = Buffer[Symbol.species];
|
|
5025
5026
|
var addListener = util.addListener;
|
|
5026
5027
|
var removeAllListeners = util.removeAllListeners;
|
|
5028
|
+
var kIdleSocketValidation = Symbol("kIdleSocketValidation");
|
|
5029
|
+
var kIdleSocketValidationTimeout = Symbol("kIdleSocketValidationTimeout");
|
|
5030
|
+
var kSocketUsed = Symbol("kSocketUsed");
|
|
5027
5031
|
var extractBody;
|
|
5028
5032
|
async function lazyllhttp() {
|
|
5029
5033
|
const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : undefined;
|
|
@@ -5185,24 +5189,55 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5185
5189
|
currentBufferRef = null;
|
|
5186
5190
|
}
|
|
5187
5191
|
const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
|
|
5188
|
-
if (ret
|
|
5189
|
-
|
|
5190
|
-
|
|
5191
|
-
|
|
5192
|
-
|
|
5193
|
-
|
|
5194
|
-
|
|
5195
|
-
|
|
5196
|
-
|
|
5197
|
-
const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
|
|
5198
|
-
message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
|
|
5192
|
+
if (ret !== constants.ERROR.OK) {
|
|
5193
|
+
const body = data.subarray(offset);
|
|
5194
|
+
if (ret === constants.ERROR.PAUSED_UPGRADE) {
|
|
5195
|
+
this.onUpgrade(body);
|
|
5196
|
+
} else if (ret === constants.ERROR.PAUSED) {
|
|
5197
|
+
this.paused = true;
|
|
5198
|
+
socket.unshift(body);
|
|
5199
|
+
} else {
|
|
5200
|
+
throw this.createError(ret, body);
|
|
5199
5201
|
}
|
|
5200
|
-
throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset));
|
|
5201
5202
|
}
|
|
5202
5203
|
} catch (err) {
|
|
5203
5204
|
util.destroy(socket, err);
|
|
5204
5205
|
}
|
|
5205
5206
|
}
|
|
5207
|
+
finish() {
|
|
5208
|
+
assert2(currentParser === null);
|
|
5209
|
+
assert2(this.ptr != null);
|
|
5210
|
+
assert2(!this.paused);
|
|
5211
|
+
const { llhttp } = this;
|
|
5212
|
+
let ret;
|
|
5213
|
+
try {
|
|
5214
|
+
currentParser = this;
|
|
5215
|
+
ret = llhttp.llhttp_finish(this.ptr);
|
|
5216
|
+
} finally {
|
|
5217
|
+
currentParser = null;
|
|
5218
|
+
}
|
|
5219
|
+
if (ret === constants.ERROR.OK) {
|
|
5220
|
+
return null;
|
|
5221
|
+
}
|
|
5222
|
+
if (ret === constants.ERROR.PAUSED || ret === constants.ERROR.PAUSED_UPGRADE) {
|
|
5223
|
+
this.paused = true;
|
|
5224
|
+
return null;
|
|
5225
|
+
}
|
|
5226
|
+
return this.createError(ret, EMPTY_BUF);
|
|
5227
|
+
}
|
|
5228
|
+
createError(ret, data) {
|
|
5229
|
+
const { llhttp, contentLength, bytesRead } = this;
|
|
5230
|
+
if (contentLength && bytesRead !== parseInt(contentLength, 10)) {
|
|
5231
|
+
return new ResponseContentLengthMismatchError;
|
|
5232
|
+
}
|
|
5233
|
+
const ptr = llhttp.llhttp_get_error_reason(this.ptr);
|
|
5234
|
+
let message = "";
|
|
5235
|
+
if (ptr) {
|
|
5236
|
+
const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
|
|
5237
|
+
message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
|
|
5238
|
+
}
|
|
5239
|
+
return new HTTPParserError(message, constants.ERROR[ret], data);
|
|
5240
|
+
}
|
|
5206
5241
|
destroy() {
|
|
5207
5242
|
assert2(this.ptr != null);
|
|
5208
5243
|
assert2(currentParser == null);
|
|
@@ -5222,6 +5257,10 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5222
5257
|
if (socket.destroyed) {
|
|
5223
5258
|
return -1;
|
|
5224
5259
|
}
|
|
5260
|
+
if (client[kRunning] === 0) {
|
|
5261
|
+
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
|
|
5262
|
+
return -1;
|
|
5263
|
+
}
|
|
5225
5264
|
const request = client[kQueue][client[kRunningIdx]];
|
|
5226
5265
|
if (!request) {
|
|
5227
5266
|
return -1;
|
|
@@ -5301,6 +5340,10 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5301
5340
|
if (socket.destroyed) {
|
|
5302
5341
|
return -1;
|
|
5303
5342
|
}
|
|
5343
|
+
if (client[kRunning] === 0) {
|
|
5344
|
+
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
|
|
5345
|
+
return -1;
|
|
5346
|
+
}
|
|
5304
5347
|
const request = client[kQueue][client[kRunningIdx]];
|
|
5305
5348
|
if (!request) {
|
|
5306
5349
|
return -1;
|
|
@@ -5422,6 +5465,7 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5422
5465
|
}
|
|
5423
5466
|
request.onComplete(headers);
|
|
5424
5467
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
5468
|
+
socket[kSocketUsed] = true;
|
|
5425
5469
|
if (socket[kWriting]) {
|
|
5426
5470
|
assert2(client[kRunning] === 0);
|
|
5427
5471
|
util.destroy(socket, new InformationalError("reset"));
|
|
@@ -5465,12 +5509,19 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5465
5509
|
socket[kWriting] = false;
|
|
5466
5510
|
socket[kReset] = false;
|
|
5467
5511
|
socket[kBlocking] = false;
|
|
5512
|
+
socket[kIdleSocketValidation] = 0;
|
|
5513
|
+
socket[kIdleSocketValidationTimeout] = null;
|
|
5514
|
+
socket[kSocketUsed] = false;
|
|
5468
5515
|
socket[kParser] = new Parser(client, socket, llhttpInstance);
|
|
5469
5516
|
addListener(socket, "error", function(err) {
|
|
5470
5517
|
assert2(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
|
5471
5518
|
const parser = this[kParser];
|
|
5472
5519
|
if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) {
|
|
5473
|
-
parser.
|
|
5520
|
+
const parserErr = parser.finish();
|
|
5521
|
+
if (parserErr) {
|
|
5522
|
+
this[kError] = parserErr;
|
|
5523
|
+
this[kClient][kOnError](parserErr);
|
|
5524
|
+
}
|
|
5474
5525
|
return;
|
|
5475
5526
|
}
|
|
5476
5527
|
this[kError] = err;
|
|
@@ -5485,7 +5536,10 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5485
5536
|
addListener(socket, "end", function() {
|
|
5486
5537
|
const parser = this[kParser];
|
|
5487
5538
|
if (parser.statusCode && !parser.shouldKeepAlive) {
|
|
5488
|
-
parser.
|
|
5539
|
+
const parserErr = parser.finish();
|
|
5540
|
+
if (parserErr) {
|
|
5541
|
+
util.destroy(this, parserErr);
|
|
5542
|
+
}
|
|
5489
5543
|
return;
|
|
5490
5544
|
}
|
|
5491
5545
|
util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this)));
|
|
@@ -5493,9 +5547,10 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5493
5547
|
addListener(socket, "close", function() {
|
|
5494
5548
|
const client2 = this[kClient];
|
|
5495
5549
|
const parser = this[kParser];
|
|
5550
|
+
clearIdleSocketValidation(this);
|
|
5496
5551
|
if (parser) {
|
|
5497
5552
|
if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
|
|
5498
|
-
parser.
|
|
5553
|
+
this[kError] = parser.finish() || this[kError];
|
|
5499
5554
|
}
|
|
5500
5555
|
this[kParser].destroy();
|
|
5501
5556
|
this[kParser] = null;
|
|
@@ -5544,7 +5599,7 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5544
5599
|
return socket.destroyed;
|
|
5545
5600
|
},
|
|
5546
5601
|
busy(request) {
|
|
5547
|
-
if (socket[kWriting] || socket[kReset] || socket[kBlocking]) {
|
|
5602
|
+
if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) {
|
|
5548
5603
|
return true;
|
|
5549
5604
|
}
|
|
5550
5605
|
if (request) {
|
|
@@ -5562,6 +5617,24 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5562
5617
|
}
|
|
5563
5618
|
};
|
|
5564
5619
|
}
|
|
5620
|
+
function clearIdleSocketValidation(socket) {
|
|
5621
|
+
if (socket[kIdleSocketValidationTimeout]) {
|
|
5622
|
+
clearTimeout(socket[kIdleSocketValidationTimeout]);
|
|
5623
|
+
socket[kIdleSocketValidationTimeout] = null;
|
|
5624
|
+
}
|
|
5625
|
+
socket[kIdleSocketValidation] = 0;
|
|
5626
|
+
}
|
|
5627
|
+
function scheduleIdleSocketValidation(client, socket) {
|
|
5628
|
+
socket[kIdleSocketValidation] = 1;
|
|
5629
|
+
socket[kIdleSocketValidationTimeout] = setTimeout(() => {
|
|
5630
|
+
socket[kIdleSocketValidationTimeout] = null;
|
|
5631
|
+
socket[kIdleSocketValidation] = 2;
|
|
5632
|
+
if (client[kSocket] === socket && !socket.destroyed) {
|
|
5633
|
+
client[kResume]();
|
|
5634
|
+
}
|
|
5635
|
+
}, 0);
|
|
5636
|
+
socket[kIdleSocketValidationTimeout].unref?.();
|
|
5637
|
+
}
|
|
5565
5638
|
function resumeH1(client) {
|
|
5566
5639
|
const socket = client[kSocket];
|
|
5567
5640
|
if (socket && !socket.destroyed) {
|
|
@@ -5574,6 +5647,29 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5574
5647
|
socket.ref();
|
|
5575
5648
|
socket[kNoRef] = false;
|
|
5576
5649
|
}
|
|
5650
|
+
if (client[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) {
|
|
5651
|
+
if (socket[kIdleSocketValidation] === 0) {
|
|
5652
|
+
scheduleIdleSocketValidation(client, socket);
|
|
5653
|
+
socket[kParser].readMore();
|
|
5654
|
+
if (socket.destroyed) {
|
|
5655
|
+
return;
|
|
5656
|
+
}
|
|
5657
|
+
return;
|
|
5658
|
+
}
|
|
5659
|
+
if (socket[kIdleSocketValidation] === 1) {
|
|
5660
|
+
socket[kParser].readMore();
|
|
5661
|
+
if (socket.destroyed) {
|
|
5662
|
+
return;
|
|
5663
|
+
}
|
|
5664
|
+
return;
|
|
5665
|
+
}
|
|
5666
|
+
}
|
|
5667
|
+
if (client[kRunning] === 0) {
|
|
5668
|
+
socket[kParser].readMore();
|
|
5669
|
+
if (socket.destroyed) {
|
|
5670
|
+
return;
|
|
5671
|
+
}
|
|
5672
|
+
}
|
|
5577
5673
|
if (client[kSize] === 0) {
|
|
5578
5674
|
if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {
|
|
5579
5675
|
socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE);
|
|
@@ -5626,6 +5722,7 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
5626
5722
|
process.emitWarning(new RequestContentLengthMismatchError);
|
|
5627
5723
|
}
|
|
5628
5724
|
const socket = client[kSocket];
|
|
5725
|
+
clearIdleSocketValidation(socket);
|
|
5629
5726
|
const abort = (err) => {
|
|
5630
5727
|
if (request.aborted || request.completed) {
|
|
5631
5728
|
return;
|
|
@@ -5986,7 +6083,7 @@ ${len.toString(16)}\r
|
|
|
5986
6083
|
module.exports = connectH1;
|
|
5987
6084
|
});
|
|
5988
6085
|
|
|
5989
|
-
// ../../node_modules/.bun/undici@6.
|
|
6086
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/client-h2.js
|
|
5990
6087
|
var require_client_h2 = __commonJS((exports, module) => {
|
|
5991
6088
|
var assert2 = __require("node:assert");
|
|
5992
6089
|
var { pipeline } = __require("node:stream");
|
|
@@ -6467,7 +6564,7 @@ var require_client_h2 = __commonJS((exports, module) => {
|
|
|
6467
6564
|
module.exports = connectH2;
|
|
6468
6565
|
});
|
|
6469
6566
|
|
|
6470
|
-
// ../../node_modules/.bun/undici@6.
|
|
6567
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/handler/redirect-handler.js
|
|
6471
6568
|
var require_redirect_handler = __commonJS((exports, module) => {
|
|
6472
6569
|
var util = require_util();
|
|
6473
6570
|
var { kBodyUsed } = require_symbols();
|
|
@@ -6624,7 +6721,7 @@ var require_redirect_handler = __commonJS((exports, module) => {
|
|
|
6624
6721
|
module.exports = RedirectHandler;
|
|
6625
6722
|
});
|
|
6626
6723
|
|
|
6627
|
-
// ../../node_modules/.bun/undici@6.
|
|
6724
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/interceptor/redirect-interceptor.js
|
|
6628
6725
|
var require_redirect_interceptor = __commonJS((exports, module) => {
|
|
6629
6726
|
var RedirectHandler = require_redirect_handler();
|
|
6630
6727
|
function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) {
|
|
@@ -6643,7 +6740,7 @@ var require_redirect_interceptor = __commonJS((exports, module) => {
|
|
|
6643
6740
|
module.exports = createRedirectInterceptor;
|
|
6644
6741
|
});
|
|
6645
6742
|
|
|
6646
|
-
// ../../node_modules/.bun/undici@6.
|
|
6743
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/client.js
|
|
6647
6744
|
var require_client = __commonJS((exports, module) => {
|
|
6648
6745
|
var assert2 = __require("node:assert");
|
|
6649
6746
|
var net = __require("node:net");
|
|
@@ -7131,7 +7228,7 @@ var require_client = __commonJS((exports, module) => {
|
|
|
7131
7228
|
module.exports = Client;
|
|
7132
7229
|
});
|
|
7133
7230
|
|
|
7134
|
-
// ../../node_modules/.bun/undici@6.
|
|
7231
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/fixed-queue.js
|
|
7135
7232
|
var require_fixed_queue = __commonJS((exports, module) => {
|
|
7136
7233
|
var kSize = 2048;
|
|
7137
7234
|
var kMask = kSize - 1;
|
|
@@ -7186,7 +7283,7 @@ var require_fixed_queue = __commonJS((exports, module) => {
|
|
|
7186
7283
|
};
|
|
7187
7284
|
});
|
|
7188
7285
|
|
|
7189
|
-
// ../../node_modules/.bun/undici@6.
|
|
7286
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/pool-stats.js
|
|
7190
7287
|
var require_pool_stats = __commonJS((exports, module) => {
|
|
7191
7288
|
var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols();
|
|
7192
7289
|
var kPool = Symbol("pool");
|
|
@@ -7217,7 +7314,7 @@ var require_pool_stats = __commonJS((exports, module) => {
|
|
|
7217
7314
|
module.exports = PoolStats;
|
|
7218
7315
|
});
|
|
7219
7316
|
|
|
7220
|
-
// ../../node_modules/.bun/undici@6.
|
|
7317
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/pool-base.js
|
|
7221
7318
|
var require_pool_base = __commonJS((exports, module) => {
|
|
7222
7319
|
var DispatcherBase = require_dispatcher_base();
|
|
7223
7320
|
var FixedQueue = require_fixed_queue();
|
|
@@ -7370,7 +7467,7 @@ var require_pool_base = __commonJS((exports, module) => {
|
|
|
7370
7467
|
};
|
|
7371
7468
|
});
|
|
7372
7469
|
|
|
7373
|
-
// ../../node_modules/.bun/undici@6.
|
|
7470
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/pool.js
|
|
7374
7471
|
var require_pool = __commonJS((exports, module) => {
|
|
7375
7472
|
var {
|
|
7376
7473
|
PoolBase,
|
|
@@ -7459,7 +7556,7 @@ var require_pool = __commonJS((exports, module) => {
|
|
|
7459
7556
|
module.exports = Pool;
|
|
7460
7557
|
});
|
|
7461
7558
|
|
|
7462
|
-
// ../../node_modules/.bun/undici@6.
|
|
7559
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/balanced-pool.js
|
|
7463
7560
|
var require_balanced_pool = __commonJS((exports, module) => {
|
|
7464
7561
|
var {
|
|
7465
7562
|
BalancedPoolMissingUpstreamError,
|
|
@@ -7602,7 +7699,7 @@ var require_balanced_pool = __commonJS((exports, module) => {
|
|
|
7602
7699
|
module.exports = BalancedPool;
|
|
7603
7700
|
});
|
|
7604
7701
|
|
|
7605
|
-
// ../../node_modules/.bun/undici@6.
|
|
7702
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/agent.js
|
|
7606
7703
|
var require_agent = __commonJS((exports, module) => {
|
|
7607
7704
|
var { InvalidArgumentError } = require_errors();
|
|
7608
7705
|
var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
|
|
@@ -7697,7 +7794,7 @@ var require_agent = __commonJS((exports, module) => {
|
|
|
7697
7794
|
module.exports = Agent;
|
|
7698
7795
|
});
|
|
7699
7796
|
|
|
7700
|
-
// ../../node_modules/.bun/undici@6.
|
|
7797
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/proxy-agent.js
|
|
7701
7798
|
var require_proxy_agent = __commonJS((exports, module) => {
|
|
7702
7799
|
var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
|
|
7703
7800
|
var { URL: URL2 } = __require("node:url");
|
|
@@ -7912,7 +8009,7 @@ var require_proxy_agent = __commonJS((exports, module) => {
|
|
|
7912
8009
|
module.exports = ProxyAgent;
|
|
7913
8010
|
});
|
|
7914
8011
|
|
|
7915
|
-
// ../../node_modules/.bun/undici@6.
|
|
8012
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js
|
|
7916
8013
|
var require_env_http_proxy_agent = __commonJS((exports, module) => {
|
|
7917
8014
|
var DispatcherBase = require_dispatcher_base();
|
|
7918
8015
|
var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols();
|
|
@@ -8046,7 +8143,7 @@ var require_env_http_proxy_agent = __commonJS((exports, module) => {
|
|
|
8046
8143
|
module.exports = EnvHttpProxyAgent;
|
|
8047
8144
|
});
|
|
8048
8145
|
|
|
8049
|
-
// ../../node_modules/.bun/undici@6.
|
|
8146
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/handler/retry-handler.js
|
|
8050
8147
|
var require_retry_handler = __commonJS((exports, module) => {
|
|
8051
8148
|
var assert2 = __require("node:assert");
|
|
8052
8149
|
var { kRetryHandlerDefaultRetry } = require_symbols();
|
|
@@ -8303,7 +8400,7 @@ var require_retry_handler = __commonJS((exports, module) => {
|
|
|
8303
8400
|
module.exports = RetryHandler;
|
|
8304
8401
|
});
|
|
8305
8402
|
|
|
8306
|
-
// ../../node_modules/.bun/undici@6.
|
|
8403
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/dispatcher/retry-agent.js
|
|
8307
8404
|
var require_retry_agent = __commonJS((exports, module) => {
|
|
8308
8405
|
var Dispatcher = require_dispatcher();
|
|
8309
8406
|
var RetryHandler = require_retry_handler();
|
|
@@ -8336,7 +8433,7 @@ var require_retry_agent = __commonJS((exports, module) => {
|
|
|
8336
8433
|
module.exports = RetryAgent;
|
|
8337
8434
|
});
|
|
8338
8435
|
|
|
8339
|
-
// ../../node_modules/.bun/undici@6.
|
|
8436
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/api/readable.js
|
|
8340
8437
|
var require_readable = __commonJS((exports, module) => {
|
|
8341
8438
|
var assert2 = __require("node:assert");
|
|
8342
8439
|
var { Readable } = __require("node:stream");
|
|
@@ -8616,7 +8713,7 @@ var require_readable = __commonJS((exports, module) => {
|
|
|
8616
8713
|
module.exports = { Readable: BodyReadable, chunksDecode };
|
|
8617
8714
|
});
|
|
8618
8715
|
|
|
8619
|
-
// ../../node_modules/.bun/undici@6.
|
|
8716
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/api/util.js
|
|
8620
8717
|
var require_util3 = __commonJS((exports, module) => {
|
|
8621
8718
|
var assert2 = __require("node:assert");
|
|
8622
8719
|
var {
|
|
@@ -8674,7 +8771,7 @@ var require_util3 = __commonJS((exports, module) => {
|
|
|
8674
8771
|
};
|
|
8675
8772
|
});
|
|
8676
8773
|
|
|
8677
|
-
// ../../node_modules/.bun/undici@6.
|
|
8774
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/api/api-request.js
|
|
8678
8775
|
var require_api_request = __commonJS((exports, module) => {
|
|
8679
8776
|
var assert2 = __require("node:assert");
|
|
8680
8777
|
var { Readable } = require_readable();
|
|
@@ -8854,7 +8951,7 @@ var require_api_request = __commonJS((exports, module) => {
|
|
|
8854
8951
|
module.exports.RequestHandler = RequestHandler;
|
|
8855
8952
|
});
|
|
8856
8953
|
|
|
8857
|
-
// ../../node_modules/.bun/undici@6.
|
|
8954
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/api/abort-signal.js
|
|
8858
8955
|
var require_abort_signal = __commonJS((exports, module) => {
|
|
8859
8956
|
var { addAbortListener } = require_util();
|
|
8860
8957
|
var { RequestAbortedError } = require_errors();
|
|
@@ -8903,7 +9000,7 @@ var require_abort_signal = __commonJS((exports, module) => {
|
|
|
8903
9000
|
};
|
|
8904
9001
|
});
|
|
8905
9002
|
|
|
8906
|
-
// ../../node_modules/.bun/undici@6.
|
|
9003
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/api/api-stream.js
|
|
8907
9004
|
var require_api_stream = __commonJS((exports, module) => {
|
|
8908
9005
|
var assert2 = __require("node:assert");
|
|
8909
9006
|
var { finished, PassThrough } = __require("node:stream");
|
|
@@ -9070,7 +9167,7 @@ var require_api_stream = __commonJS((exports, module) => {
|
|
|
9070
9167
|
module.exports = stream;
|
|
9071
9168
|
});
|
|
9072
9169
|
|
|
9073
|
-
// ../../node_modules/.bun/undici@6.
|
|
9170
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/api/api-pipeline.js
|
|
9074
9171
|
var require_api_pipeline = __commonJS((exports, module) => {
|
|
9075
9172
|
var {
|
|
9076
9173
|
Readable,
|
|
@@ -9270,7 +9367,7 @@ var require_api_pipeline = __commonJS((exports, module) => {
|
|
|
9270
9367
|
module.exports = pipeline;
|
|
9271
9368
|
});
|
|
9272
9369
|
|
|
9273
|
-
// ../../node_modules/.bun/undici@6.
|
|
9370
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/api/api-upgrade.js
|
|
9274
9371
|
var require_api_upgrade = __commonJS((exports, module) => {
|
|
9275
9372
|
var { InvalidArgumentError, SocketError } = require_errors();
|
|
9276
9373
|
var { AsyncResource } = __require("node:async_hooks");
|
|
@@ -9360,7 +9457,7 @@ var require_api_upgrade = __commonJS((exports, module) => {
|
|
|
9360
9457
|
module.exports = upgrade;
|
|
9361
9458
|
});
|
|
9362
9459
|
|
|
9363
|
-
// ../../node_modules/.bun/undici@6.
|
|
9460
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/api/api-connect.js
|
|
9364
9461
|
var require_api_connect = __commonJS((exports, module) => {
|
|
9365
9462
|
var assert2 = __require("node:assert");
|
|
9366
9463
|
var { AsyncResource } = __require("node:async_hooks");
|
|
@@ -9448,7 +9545,7 @@ var require_api_connect = __commonJS((exports, module) => {
|
|
|
9448
9545
|
module.exports = connect;
|
|
9449
9546
|
});
|
|
9450
9547
|
|
|
9451
|
-
// ../../node_modules/.bun/undici@6.
|
|
9548
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/api/index.js
|
|
9452
9549
|
var require_api = __commonJS((exports, module) => {
|
|
9453
9550
|
exports.request = require_api_request();
|
|
9454
9551
|
exports.stream = require_api_stream();
|
|
@@ -9457,7 +9554,7 @@ var require_api = __commonJS((exports, module) => {
|
|
|
9457
9554
|
exports.connect = require_api_connect();
|
|
9458
9555
|
});
|
|
9459
9556
|
|
|
9460
|
-
// ../../node_modules/.bun/undici@6.
|
|
9557
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/mock/mock-errors.js
|
|
9461
9558
|
var require_mock_errors = __commonJS((exports, module) => {
|
|
9462
9559
|
var { UndiciError } = require_errors();
|
|
9463
9560
|
var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");
|
|
@@ -9480,7 +9577,7 @@ var require_mock_errors = __commonJS((exports, module) => {
|
|
|
9480
9577
|
};
|
|
9481
9578
|
});
|
|
9482
9579
|
|
|
9483
|
-
// ../../node_modules/.bun/undici@6.
|
|
9580
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/mock/mock-symbols.js
|
|
9484
9581
|
var require_mock_symbols = __commonJS((exports, module) => {
|
|
9485
9582
|
module.exports = {
|
|
9486
9583
|
kAgent: Symbol("agent"),
|
|
@@ -9505,7 +9602,7 @@ var require_mock_symbols = __commonJS((exports, module) => {
|
|
|
9505
9602
|
};
|
|
9506
9603
|
});
|
|
9507
9604
|
|
|
9508
|
-
// ../../node_modules/.bun/undici@6.
|
|
9605
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/mock/mock-utils.js
|
|
9509
9606
|
var require_mock_utils = __commonJS((exports, module) => {
|
|
9510
9607
|
var { MockNotMatchedError } = require_mock_errors();
|
|
9511
9608
|
var {
|
|
@@ -9795,7 +9892,7 @@ var require_mock_utils = __commonJS((exports, module) => {
|
|
|
9795
9892
|
};
|
|
9796
9893
|
});
|
|
9797
9894
|
|
|
9798
|
-
// ../../node_modules/.bun/undici@6.
|
|
9895
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/mock/mock-interceptor.js
|
|
9799
9896
|
var require_mock_interceptor = __commonJS((exports, module) => {
|
|
9800
9897
|
var { getResponseData, buildKey, addMockDispatch } = require_mock_utils();
|
|
9801
9898
|
var {
|
|
@@ -9932,7 +10029,7 @@ var require_mock_interceptor = __commonJS((exports, module) => {
|
|
|
9932
10029
|
exports.MockScope = MockScope;
|
|
9933
10030
|
});
|
|
9934
10031
|
|
|
9935
|
-
// ../../node_modules/.bun/undici@6.
|
|
10032
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/mock/mock-client.js
|
|
9936
10033
|
var require_mock_client = __commonJS((exports, module) => {
|
|
9937
10034
|
var { promisify: promisify7 } = __require("node:util");
|
|
9938
10035
|
var Client = require_client();
|
|
@@ -9980,7 +10077,7 @@ var require_mock_client = __commonJS((exports, module) => {
|
|
|
9980
10077
|
module.exports = MockClient;
|
|
9981
10078
|
});
|
|
9982
10079
|
|
|
9983
|
-
// ../../node_modules/.bun/undici@6.
|
|
10080
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/mock/mock-pool.js
|
|
9984
10081
|
var require_mock_pool = __commonJS((exports, module) => {
|
|
9985
10082
|
var { promisify: promisify7 } = __require("node:util");
|
|
9986
10083
|
var Pool = require_pool();
|
|
@@ -10028,7 +10125,7 @@ var require_mock_pool = __commonJS((exports, module) => {
|
|
|
10028
10125
|
module.exports = MockPool;
|
|
10029
10126
|
});
|
|
10030
10127
|
|
|
10031
|
-
// ../../node_modules/.bun/undici@6.
|
|
10128
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/mock/pluralizer.js
|
|
10032
10129
|
var require_pluralizer = __commonJS((exports, module) => {
|
|
10033
10130
|
var singulars = {
|
|
10034
10131
|
pronoun: "it",
|
|
@@ -10056,7 +10153,7 @@ var require_pluralizer = __commonJS((exports, module) => {
|
|
|
10056
10153
|
};
|
|
10057
10154
|
});
|
|
10058
10155
|
|
|
10059
|
-
// ../../node_modules/.bun/undici@6.
|
|
10156
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/mock/pending-interceptors-formatter.js
|
|
10060
10157
|
var require_pending_interceptors_formatter = __commonJS((exports, module) => {
|
|
10061
10158
|
var { Transform } = __require("node:stream");
|
|
10062
10159
|
var { Console } = __require("node:console");
|
|
@@ -10092,7 +10189,7 @@ var require_pending_interceptors_formatter = __commonJS((exports, module) => {
|
|
|
10092
10189
|
};
|
|
10093
10190
|
});
|
|
10094
10191
|
|
|
10095
|
-
// ../../node_modules/.bun/undici@6.
|
|
10192
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/mock/mock-agent.js
|
|
10096
10193
|
var require_mock_agent = __commonJS((exports, module) => {
|
|
10097
10194
|
var { kClients } = require_symbols();
|
|
10098
10195
|
var Agent = require_agent();
|
|
@@ -10218,7 +10315,7 @@ ${pendingInterceptorsFormatter.format(pending)}
|
|
|
10218
10315
|
module.exports = MockAgent;
|
|
10219
10316
|
});
|
|
10220
10317
|
|
|
10221
|
-
// ../../node_modules/.bun/undici@6.
|
|
10318
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/global.js
|
|
10222
10319
|
var require_global2 = __commonJS((exports, module) => {
|
|
10223
10320
|
var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
|
|
10224
10321
|
var { InvalidArgumentError } = require_errors();
|
|
@@ -10246,7 +10343,7 @@ var require_global2 = __commonJS((exports, module) => {
|
|
|
10246
10343
|
};
|
|
10247
10344
|
});
|
|
10248
10345
|
|
|
10249
|
-
// ../../node_modules/.bun/undici@6.
|
|
10346
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/handler/decorator-handler.js
|
|
10250
10347
|
var require_decorator_handler = __commonJS((exports, module) => {
|
|
10251
10348
|
module.exports = class DecoratorHandler {
|
|
10252
10349
|
#handler;
|
|
@@ -10283,7 +10380,7 @@ var require_decorator_handler = __commonJS((exports, module) => {
|
|
|
10283
10380
|
};
|
|
10284
10381
|
});
|
|
10285
10382
|
|
|
10286
|
-
// ../../node_modules/.bun/undici@6.
|
|
10383
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/interceptor/redirect.js
|
|
10287
10384
|
var require_redirect = __commonJS((exports, module) => {
|
|
10288
10385
|
var RedirectHandler = require_redirect_handler();
|
|
10289
10386
|
module.exports = (opts) => {
|
|
@@ -10301,7 +10398,7 @@ var require_redirect = __commonJS((exports, module) => {
|
|
|
10301
10398
|
};
|
|
10302
10399
|
});
|
|
10303
10400
|
|
|
10304
|
-
// ../../node_modules/.bun/undici@6.
|
|
10401
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/interceptor/retry.js
|
|
10305
10402
|
var require_retry = __commonJS((exports, module) => {
|
|
10306
10403
|
var RetryHandler = require_retry_handler();
|
|
10307
10404
|
module.exports = (globalOpts) => {
|
|
@@ -10316,7 +10413,7 @@ var require_retry = __commonJS((exports, module) => {
|
|
|
10316
10413
|
};
|
|
10317
10414
|
});
|
|
10318
10415
|
|
|
10319
|
-
// ../../node_modules/.bun/undici@6.
|
|
10416
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/interceptor/dump.js
|
|
10320
10417
|
var require_dump = __commonJS((exports, module) => {
|
|
10321
10418
|
var util = require_util();
|
|
10322
10419
|
var { InvalidArgumentError, RequestAbortedError } = require_errors();
|
|
@@ -10401,7 +10498,7 @@ var require_dump = __commonJS((exports, module) => {
|
|
|
10401
10498
|
module.exports = createDumpInterceptor;
|
|
10402
10499
|
});
|
|
10403
10500
|
|
|
10404
|
-
// ../../node_modules/.bun/undici@6.
|
|
10501
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/interceptor/dns.js
|
|
10405
10502
|
var require_dns = __commonJS((exports, module) => {
|
|
10406
10503
|
var { isIP } = __require("node:net");
|
|
10407
10504
|
var { lookup } = __require("node:dns");
|
|
@@ -10663,7 +10760,7 @@ var require_dns = __commonJS((exports, module) => {
|
|
|
10663
10760
|
};
|
|
10664
10761
|
});
|
|
10665
10762
|
|
|
10666
|
-
// ../../node_modules/.bun/undici@6.
|
|
10763
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/headers.js
|
|
10667
10764
|
var require_headers = __commonJS((exports, module) => {
|
|
10668
10765
|
var { kConstruct } = require_symbols();
|
|
10669
10766
|
var { kEnumerableProperty } = require_util();
|
|
@@ -11070,7 +11167,7 @@ var require_headers = __commonJS((exports, module) => {
|
|
|
11070
11167
|
};
|
|
11071
11168
|
});
|
|
11072
11169
|
|
|
11073
|
-
// ../../node_modules/.bun/undici@6.
|
|
11170
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/response.js
|
|
11074
11171
|
var require_response = __commonJS((exports, module) => {
|
|
11075
11172
|
var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers();
|
|
11076
11173
|
var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body();
|
|
@@ -11440,7 +11537,7 @@ var require_response = __commonJS((exports, module) => {
|
|
|
11440
11537
|
};
|
|
11441
11538
|
});
|
|
11442
11539
|
|
|
11443
|
-
// ../../node_modules/.bun/undici@6.
|
|
11540
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/dispatcher-weakref.js
|
|
11444
11541
|
var require_dispatcher_weakref = __commonJS((exports, module) => {
|
|
11445
11542
|
var { kConnected, kSize } = require_symbols();
|
|
11446
11543
|
|
|
@@ -11480,7 +11577,7 @@ var require_dispatcher_weakref = __commonJS((exports, module) => {
|
|
|
11480
11577
|
};
|
|
11481
11578
|
});
|
|
11482
11579
|
|
|
11483
|
-
// ../../node_modules/.bun/undici@6.
|
|
11580
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/request.js
|
|
11484
11581
|
var require_request2 = __commonJS((exports, module) => {
|
|
11485
11582
|
var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body();
|
|
11486
11583
|
var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers();
|
|
@@ -12070,7 +12167,7 @@ var require_request2 = __commonJS((exports, module) => {
|
|
|
12070
12167
|
module.exports = { Request, makeRequest, fromInnerRequest, cloneRequest };
|
|
12071
12168
|
});
|
|
12072
12169
|
|
|
12073
|
-
// ../../node_modules/.bun/undici@6.
|
|
12170
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fetch/index.js
|
|
12074
12171
|
var require_fetch = __commonJS((exports, module) => {
|
|
12075
12172
|
var {
|
|
12076
12173
|
makeNetworkError,
|
|
@@ -13067,7 +13164,7 @@ var require_fetch = __commonJS((exports, module) => {
|
|
|
13067
13164
|
};
|
|
13068
13165
|
});
|
|
13069
13166
|
|
|
13070
|
-
// ../../node_modules/.bun/undici@6.
|
|
13167
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fileapi/symbols.js
|
|
13071
13168
|
var require_symbols3 = __commonJS((exports, module) => {
|
|
13072
13169
|
module.exports = {
|
|
13073
13170
|
kState: Symbol("FileReader state"),
|
|
@@ -13079,7 +13176,7 @@ var require_symbols3 = __commonJS((exports, module) => {
|
|
|
13079
13176
|
};
|
|
13080
13177
|
});
|
|
13081
13178
|
|
|
13082
|
-
// ../../node_modules/.bun/undici@6.
|
|
13179
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fileapi/progressevent.js
|
|
13083
13180
|
var require_progressevent = __commonJS((exports, module) => {
|
|
13084
13181
|
var { webidl } = require_webidl();
|
|
13085
13182
|
var kState = Symbol("ProgressEvent state");
|
|
@@ -13145,7 +13242,7 @@ var require_progressevent = __commonJS((exports, module) => {
|
|
|
13145
13242
|
};
|
|
13146
13243
|
});
|
|
13147
13244
|
|
|
13148
|
-
// ../../node_modules/.bun/undici@6.
|
|
13245
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fileapi/encoding.js
|
|
13149
13246
|
var require_encoding = __commonJS((exports, module) => {
|
|
13150
13247
|
function getEncoding(label) {
|
|
13151
13248
|
if (!label) {
|
|
@@ -13428,7 +13525,7 @@ var require_encoding = __commonJS((exports, module) => {
|
|
|
13428
13525
|
};
|
|
13429
13526
|
});
|
|
13430
13527
|
|
|
13431
|
-
// ../../node_modules/.bun/undici@6.
|
|
13528
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fileapi/util.js
|
|
13432
13529
|
var require_util4 = __commonJS((exports, module) => {
|
|
13433
13530
|
var {
|
|
13434
13531
|
kState,
|
|
@@ -13610,7 +13707,7 @@ var require_util4 = __commonJS((exports, module) => {
|
|
|
13610
13707
|
};
|
|
13611
13708
|
});
|
|
13612
13709
|
|
|
13613
|
-
// ../../node_modules/.bun/undici@6.
|
|
13710
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/fileapi/filereader.js
|
|
13614
13711
|
var require_filereader = __commonJS((exports, module) => {
|
|
13615
13712
|
var {
|
|
13616
13713
|
staticPropertyDescriptors,
|
|
@@ -13838,14 +13935,14 @@ var require_filereader = __commonJS((exports, module) => {
|
|
|
13838
13935
|
};
|
|
13839
13936
|
});
|
|
13840
13937
|
|
|
13841
|
-
// ../../node_modules/.bun/undici@6.
|
|
13938
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/cache/symbols.js
|
|
13842
13939
|
var require_symbols4 = __commonJS((exports, module) => {
|
|
13843
13940
|
module.exports = {
|
|
13844
13941
|
kConstruct: require_symbols().kConstruct
|
|
13845
13942
|
};
|
|
13846
13943
|
});
|
|
13847
13944
|
|
|
13848
|
-
// ../../node_modules/.bun/undici@6.
|
|
13945
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/cache/util.js
|
|
13849
13946
|
var require_util5 = __commonJS((exports, module) => {
|
|
13850
13947
|
var assert2 = __require("node:assert");
|
|
13851
13948
|
var { URLSerializer } = require_data_url();
|
|
@@ -13872,7 +13969,7 @@ var require_util5 = __commonJS((exports, module) => {
|
|
|
13872
13969
|
};
|
|
13873
13970
|
});
|
|
13874
13971
|
|
|
13875
|
-
// ../../node_modules/.bun/undici@6.
|
|
13972
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/cache/cache.js
|
|
13876
13973
|
var require_cache = __commonJS((exports, module) => {
|
|
13877
13974
|
var { kConstruct } = require_symbols4();
|
|
13878
13975
|
var { urlEquals, getFieldValues } = require_util5();
|
|
@@ -14375,7 +14472,7 @@ var require_cache = __commonJS((exports, module) => {
|
|
|
14375
14472
|
};
|
|
14376
14473
|
});
|
|
14377
14474
|
|
|
14378
|
-
// ../../node_modules/.bun/undici@6.
|
|
14475
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/cache/cachestorage.js
|
|
14379
14476
|
var require_cachestorage = __commonJS((exports, module) => {
|
|
14380
14477
|
var { kConstruct } = require_symbols4();
|
|
14381
14478
|
var { Cache } = require_cache();
|
|
@@ -14460,7 +14557,7 @@ var require_cachestorage = __commonJS((exports, module) => {
|
|
|
14460
14557
|
};
|
|
14461
14558
|
});
|
|
14462
14559
|
|
|
14463
|
-
// ../../node_modules/.bun/undici@6.
|
|
14560
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/cookies/constants.js
|
|
14464
14561
|
var require_constants4 = __commonJS((exports, module) => {
|
|
14465
14562
|
var maxAttributeValueSize = 1024;
|
|
14466
14563
|
var maxNameValuePairSize = 4096;
|
|
@@ -14470,7 +14567,7 @@ var require_constants4 = __commonJS((exports, module) => {
|
|
|
14470
14567
|
};
|
|
14471
14568
|
});
|
|
14472
14569
|
|
|
14473
|
-
// ../../node_modules/.bun/undici@6.
|
|
14570
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/cookies/util.js
|
|
14474
14571
|
var require_util6 = __commonJS((exports, module) => {
|
|
14475
14572
|
function isCTLExcludingHtab(value) {
|
|
14476
14573
|
for (let i = 0;i < value.length; ++i) {
|
|
@@ -14612,7 +14709,7 @@ var require_util6 = __commonJS((exports, module) => {
|
|
|
14612
14709
|
};
|
|
14613
14710
|
});
|
|
14614
14711
|
|
|
14615
|
-
// ../../node_modules/.bun/undici@6.
|
|
14712
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/cookies/parse.js
|
|
14616
14713
|
var require_parse = __commonJS((exports, module) => {
|
|
14617
14714
|
var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4();
|
|
14618
14715
|
var { isCTLExcludingHtab } = require_util6();
|
|
@@ -14713,18 +14810,14 @@ var require_parse = __commonJS((exports, module) => {
|
|
|
14713
14810
|
} else if (attributeNameLowercase === "httponly") {
|
|
14714
14811
|
cookieAttributeList.httpOnly = true;
|
|
14715
14812
|
} else if (attributeNameLowercase === "samesite") {
|
|
14716
|
-
let enforcement = "Default";
|
|
14717
14813
|
const attributeValueLowercase = attributeValue.toLowerCase();
|
|
14718
|
-
if (attributeValueLowercase
|
|
14719
|
-
|
|
14720
|
-
}
|
|
14721
|
-
|
|
14722
|
-
|
|
14723
|
-
|
|
14724
|
-
if (attributeValueLowercase.includes("lax")) {
|
|
14725
|
-
enforcement = "Lax";
|
|
14814
|
+
if (attributeValueLowercase === "none") {
|
|
14815
|
+
cookieAttributeList.sameSite = "None";
|
|
14816
|
+
} else if (attributeValueLowercase === "strict") {
|
|
14817
|
+
cookieAttributeList.sameSite = "Strict";
|
|
14818
|
+
} else if (attributeValueLowercase === "lax") {
|
|
14819
|
+
cookieAttributeList.sameSite = "Lax";
|
|
14726
14820
|
}
|
|
14727
|
-
cookieAttributeList.sameSite = enforcement;
|
|
14728
14821
|
} else {
|
|
14729
14822
|
cookieAttributeList.unparsed ??= [];
|
|
14730
14823
|
cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`);
|
|
@@ -14737,7 +14830,7 @@ var require_parse = __commonJS((exports, module) => {
|
|
|
14737
14830
|
};
|
|
14738
14831
|
});
|
|
14739
14832
|
|
|
14740
|
-
// ../../node_modules/.bun/undici@6.
|
|
14833
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/cookies/index.js
|
|
14741
14834
|
var require_cookies = __commonJS((exports, module) => {
|
|
14742
14835
|
var { parseSetCookie } = require_parse();
|
|
14743
14836
|
var { stringify } = require_util6();
|
|
@@ -14863,7 +14956,7 @@ var require_cookies = __commonJS((exports, module) => {
|
|
|
14863
14956
|
};
|
|
14864
14957
|
});
|
|
14865
14958
|
|
|
14866
|
-
// ../../node_modules/.bun/undici@6.
|
|
14959
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/events.js
|
|
14867
14960
|
var require_events = __commonJS((exports, module) => {
|
|
14868
14961
|
var { webidl } = require_webidl();
|
|
14869
14962
|
var { kEnumerableProperty } = require_util();
|
|
@@ -15125,7 +15218,7 @@ var require_events = __commonJS((exports, module) => {
|
|
|
15125
15218
|
};
|
|
15126
15219
|
});
|
|
15127
15220
|
|
|
15128
|
-
// ../../node_modules/.bun/undici@6.
|
|
15221
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/constants.js
|
|
15129
15222
|
var require_constants5 = __commonJS((exports, module) => {
|
|
15130
15223
|
var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
15131
15224
|
var staticPropertyDescriptors = {
|
|
@@ -15179,7 +15272,7 @@ var require_constants5 = __commonJS((exports, module) => {
|
|
|
15179
15272
|
};
|
|
15180
15273
|
});
|
|
15181
15274
|
|
|
15182
|
-
// ../../node_modules/.bun/undici@6.
|
|
15275
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/symbols.js
|
|
15183
15276
|
var require_symbols5 = __commonJS((exports, module) => {
|
|
15184
15277
|
module.exports = {
|
|
15185
15278
|
kWebSocketURL: Symbol("url"),
|
|
@@ -15193,7 +15286,7 @@ var require_symbols5 = __commonJS((exports, module) => {
|
|
|
15193
15286
|
};
|
|
15194
15287
|
});
|
|
15195
15288
|
|
|
15196
|
-
// ../../node_modules/.bun/undici@6.
|
|
15289
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/util.js
|
|
15197
15290
|
var require_util7 = __commonJS((exports, module) => {
|
|
15198
15291
|
var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5();
|
|
15199
15292
|
var { states, opcodes } = require_constants5();
|
|
@@ -15341,7 +15434,7 @@ var require_util7 = __commonJS((exports, module) => {
|
|
|
15341
15434
|
};
|
|
15342
15435
|
});
|
|
15343
15436
|
|
|
15344
|
-
// ../../node_modules/.bun/undici@6.
|
|
15437
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/frame.js
|
|
15345
15438
|
var require_frame = __commonJS((exports, module) => {
|
|
15346
15439
|
var { maxUnsigned16Bit } = require_constants5();
|
|
15347
15440
|
var BUFFER_SIZE = 16386;
|
|
@@ -15413,7 +15506,7 @@ var require_frame = __commonJS((exports, module) => {
|
|
|
15413
15506
|
};
|
|
15414
15507
|
});
|
|
15415
15508
|
|
|
15416
|
-
// ../../node_modules/.bun/undici@6.
|
|
15509
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/connection.js
|
|
15417
15510
|
var require_connection = __commonJS((exports, module) => {
|
|
15418
15511
|
var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5();
|
|
15419
15512
|
var {
|
|
@@ -15593,7 +15686,7 @@ var require_connection = __commonJS((exports, module) => {
|
|
|
15593
15686
|
};
|
|
15594
15687
|
});
|
|
15595
15688
|
|
|
15596
|
-
// ../../node_modules/.bun/undici@6.
|
|
15689
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/permessage-deflate.js
|
|
15597
15690
|
var require_permessage_deflate = __commonJS((exports, module) => {
|
|
15598
15691
|
var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = __require("node:zlib");
|
|
15599
15692
|
var { isValidClientWindowBits } = require_util7();
|
|
@@ -15662,7 +15755,7 @@ var require_permessage_deflate = __commonJS((exports, module) => {
|
|
|
15662
15755
|
module.exports = { PerMessageDeflate };
|
|
15663
15756
|
});
|
|
15664
15757
|
|
|
15665
|
-
// ../../node_modules/.bun/undici@6.
|
|
15758
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/receiver.js
|
|
15666
15759
|
var require_receiver = __commonJS((exports, module) => {
|
|
15667
15760
|
var { Writable } = __require("node:stream");
|
|
15668
15761
|
var assert2 = __require("node:assert");
|
|
@@ -15683,6 +15776,10 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
15683
15776
|
var { closeWebSocketConnection } = require_connection();
|
|
15684
15777
|
var { PerMessageDeflate } = require_permessage_deflate();
|
|
15685
15778
|
var { MessageSizeExceededError } = require_errors();
|
|
15779
|
+
function failWebsocketConnectionWithCode(ws, code, reason) {
|
|
15780
|
+
closeWebSocketConnection(ws, code, reason, Buffer.byteLength(reason));
|
|
15781
|
+
failWebsocketConnection(ws, reason);
|
|
15782
|
+
}
|
|
15686
15783
|
|
|
15687
15784
|
class ByteParser extends Writable {
|
|
15688
15785
|
#buffers = [];
|
|
@@ -15693,11 +15790,13 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
15693
15790
|
#info = {};
|
|
15694
15791
|
#fragments = [];
|
|
15695
15792
|
#extensions;
|
|
15793
|
+
#maxFragments;
|
|
15696
15794
|
#maxPayloadSize;
|
|
15697
15795
|
constructor(ws, extensions, options = {}) {
|
|
15698
15796
|
super();
|
|
15699
15797
|
this.ws = ws;
|
|
15700
15798
|
this.#extensions = extensions == null ? new Map : extensions;
|
|
15799
|
+
this.#maxFragments = options.maxFragments ?? 0;
|
|
15701
15800
|
this.#maxPayloadSize = options.maxPayloadSize ?? 0;
|
|
15702
15801
|
if (this.#extensions.has("permessage-deflate")) {
|
|
15703
15802
|
this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions, options));
|
|
@@ -15710,8 +15809,8 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
15710
15809
|
this.run(callback);
|
|
15711
15810
|
}
|
|
15712
15811
|
#validatePayloadLength() {
|
|
15713
|
-
if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength > this.#maxPayloadSize) {
|
|
15714
|
-
|
|
15812
|
+
if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength + this.#fragmentsBytes > this.#maxPayloadSize) {
|
|
15813
|
+
failWebsocketConnectionWithCode(this.ws, 1009, "Payload size exceeds maximum allowed size");
|
|
15715
15814
|
return false;
|
|
15716
15815
|
}
|
|
15717
15816
|
return true;
|
|
@@ -15822,9 +15921,11 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
15822
15921
|
this.#state = parserStates.INFO;
|
|
15823
15922
|
} else {
|
|
15824
15923
|
if (!this.#info.compressed) {
|
|
15825
|
-
this.writeFragments(body)
|
|
15924
|
+
if (!this.writeFragments(body)) {
|
|
15925
|
+
return;
|
|
15926
|
+
}
|
|
15826
15927
|
if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {
|
|
15827
|
-
|
|
15928
|
+
failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message);
|
|
15828
15929
|
return;
|
|
15829
15930
|
}
|
|
15830
15931
|
if (!this.#info.fragmented && this.#info.fin) {
|
|
@@ -15834,12 +15935,15 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
15834
15935
|
} else {
|
|
15835
15936
|
this.#extensions.get("permessage-deflate").decompress(body, this.#info.fin, (error, data) => {
|
|
15836
15937
|
if (error) {
|
|
15837
|
-
|
|
15938
|
+
const code = error instanceof MessageSizeExceededError ? 1009 : 1007;
|
|
15939
|
+
failWebsocketConnectionWithCode(this.ws, code, error.message);
|
|
15940
|
+
return;
|
|
15941
|
+
}
|
|
15942
|
+
if (!this.writeFragments(data)) {
|
|
15838
15943
|
return;
|
|
15839
15944
|
}
|
|
15840
|
-
this.writeFragments(data);
|
|
15841
15945
|
if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {
|
|
15842
|
-
|
|
15946
|
+
failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message);
|
|
15843
15947
|
return;
|
|
15844
15948
|
}
|
|
15845
15949
|
if (!this.#info.fin) {
|
|
@@ -15891,8 +15995,13 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
15891
15995
|
return buffer;
|
|
15892
15996
|
}
|
|
15893
15997
|
writeFragments(fragment) {
|
|
15998
|
+
if (this.#maxFragments > 0 && this.#fragments.length === this.#maxFragments) {
|
|
15999
|
+
failWebsocketConnectionWithCode(this.ws, 1008, "Too many message fragments");
|
|
16000
|
+
return false;
|
|
16001
|
+
}
|
|
15894
16002
|
this.#fragmentsBytes += fragment.length;
|
|
15895
16003
|
this.#fragments.push(fragment);
|
|
16004
|
+
return true;
|
|
15896
16005
|
}
|
|
15897
16006
|
consumeFragments() {
|
|
15898
16007
|
const fragments = this.#fragments;
|
|
@@ -15983,7 +16092,7 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
15983
16092
|
};
|
|
15984
16093
|
});
|
|
15985
16094
|
|
|
15986
|
-
// ../../node_modules/.bun/undici@6.
|
|
16095
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/sender.js
|
|
15987
16096
|
var require_sender = __commonJS((exports, module) => {
|
|
15988
16097
|
var { WebsocketFrameSend } = require_frame();
|
|
15989
16098
|
var { opcodes, sendHints } = require_constants5();
|
|
@@ -16056,7 +16165,7 @@ var require_sender = __commonJS((exports, module) => {
|
|
|
16056
16165
|
module.exports = { SendQueue };
|
|
16057
16166
|
});
|
|
16058
16167
|
|
|
16059
|
-
// ../../node_modules/.bun/undici@6.
|
|
16168
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/websocket/websocket.js
|
|
16060
16169
|
var require_websocket = __commonJS((exports, module) => {
|
|
16061
16170
|
var { webidl } = require_webidl();
|
|
16062
16171
|
var { URLSerializer } = require_data_url();
|
|
@@ -16294,8 +16403,11 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
16294
16403
|
}
|
|
16295
16404
|
#onConnectionEstablished(response, parsedExtensions) {
|
|
16296
16405
|
this[kResponse] = response;
|
|
16297
|
-
const
|
|
16406
|
+
const webSocketOptions = this[kController]?.dispatcher?.webSocketOptions;
|
|
16407
|
+
const maxFragments = webSocketOptions?.maxFragments;
|
|
16408
|
+
const maxPayloadSize = webSocketOptions?.maxPayloadSize;
|
|
16298
16409
|
const parser = new ByteParser(this, parsedExtensions, {
|
|
16410
|
+
maxFragments,
|
|
16299
16411
|
maxPayloadSize
|
|
16300
16412
|
});
|
|
16301
16413
|
parser.on("drain", onParserDrain);
|
|
@@ -16409,7 +16521,7 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
16409
16521
|
};
|
|
16410
16522
|
});
|
|
16411
16523
|
|
|
16412
|
-
// ../../node_modules/.bun/undici@6.
|
|
16524
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/eventsource/util.js
|
|
16413
16525
|
var require_util8 = __commonJS((exports, module) => {
|
|
16414
16526
|
function isValidLastEventId(value) {
|
|
16415
16527
|
return value.indexOf("\x00") === -1;
|
|
@@ -16435,7 +16547,7 @@ var require_util8 = __commonJS((exports, module) => {
|
|
|
16435
16547
|
};
|
|
16436
16548
|
});
|
|
16437
16549
|
|
|
16438
|
-
// ../../node_modules/.bun/undici@6.
|
|
16550
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/eventsource/eventsource-stream.js
|
|
16439
16551
|
var require_eventsource_stream = __commonJS((exports, module) => {
|
|
16440
16552
|
var { Transform } = __require("node:stream");
|
|
16441
16553
|
var { isASCIINumber, isValidLastEventId } = require_util8();
|
|
@@ -16629,7 +16741,7 @@ ${value}`;
|
|
|
16629
16741
|
};
|
|
16630
16742
|
});
|
|
16631
16743
|
|
|
16632
|
-
// ../../node_modules/.bun/undici@6.
|
|
16744
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/lib/web/eventsource/eventsource.js
|
|
16633
16745
|
var require_eventsource = __commonJS((exports, module) => {
|
|
16634
16746
|
var { pipeline } = __require("node:stream");
|
|
16635
16747
|
var { fetching } = require_fetch();
|
|
@@ -18432,6 +18544,88 @@ function inferOperationKind(op) {
|
|
|
18432
18544
|
const segments = op.name ? op.name.split("/").filter(Boolean) : [];
|
|
18433
18545
|
return segments.length >= 3 ? "assertion" : "thing";
|
|
18434
18546
|
}
|
|
18547
|
+
// ../../packages/rules/src/component-manifest-hash.ts
|
|
18548
|
+
function stableJson(value) {
|
|
18549
|
+
if (!value || typeof value !== "object") {
|
|
18550
|
+
return JSON.stringify(value);
|
|
18551
|
+
}
|
|
18552
|
+
if (Array.isArray(value)) {
|
|
18553
|
+
return `[${value.map((entry) => stableJson(entry)).join(",")}]`;
|
|
18554
|
+
}
|
|
18555
|
+
const record = value;
|
|
18556
|
+
return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${stableJson(record[key])}`).join(",")}}`;
|
|
18557
|
+
}
|
|
18558
|
+
function stableJsonEquals(left, right) {
|
|
18559
|
+
return stableJson(left) === stableJson(right);
|
|
18560
|
+
}
|
|
18561
|
+
|
|
18562
|
+
// ../../packages/rules/src/component-name-templates.ts
|
|
18563
|
+
var COMPONENT_TEMPLATE_VALUES = {
|
|
18564
|
+
"org-name": (ctx) => ctx.orgName,
|
|
18565
|
+
"repo-name": (ctx) => ctx.repoName
|
|
18566
|
+
};
|
|
18567
|
+
var TEMPLATE_TOKEN_RE = /<([a-z-]+)>/g;
|
|
18568
|
+
function listComponentTemplateTokens(value) {
|
|
18569
|
+
const tokens = new Set;
|
|
18570
|
+
for (const match of value.matchAll(TEMPLATE_TOKEN_RE)) {
|
|
18571
|
+
if (match[1]) {
|
|
18572
|
+
tokens.add(match[1]);
|
|
18573
|
+
}
|
|
18574
|
+
}
|
|
18575
|
+
return [...tokens];
|
|
18576
|
+
}
|
|
18577
|
+
function unsupportedComponentTemplateTokens(value) {
|
|
18578
|
+
return listComponentTemplateTokens(value).filter((token) => !(token in COMPONENT_TEMPLATE_VALUES));
|
|
18579
|
+
}
|
|
18580
|
+
function resolveComponentTemplate(value, ctx) {
|
|
18581
|
+
return value.replace(TEMPLATE_TOKEN_RE, (_match, token) => {
|
|
18582
|
+
const resolver = COMPONENT_TEMPLATE_VALUES[token];
|
|
18583
|
+
if (!resolver) {
|
|
18584
|
+
throw new Error(`Unsupported component template token <${token}>`);
|
|
18585
|
+
}
|
|
18586
|
+
return resolver(ctx);
|
|
18587
|
+
});
|
|
18588
|
+
}
|
|
18589
|
+
|
|
18590
|
+
// ../../packages/rules/src/component-install.ts
|
|
18591
|
+
function manifestShapeData(shape) {
|
|
18592
|
+
const data = { fields: shape.fields };
|
|
18593
|
+
if (shape.description !== undefined)
|
|
18594
|
+
data.description = shape.description;
|
|
18595
|
+
return data;
|
|
18596
|
+
}
|
|
18597
|
+
function shapeDataEquals(left, right) {
|
|
18598
|
+
return stableJsonEquals(left, right);
|
|
18599
|
+
}
|
|
18600
|
+
function describeShapeDataMismatch(expected, actual) {
|
|
18601
|
+
const actualData = actual && typeof actual === "object" && !Array.isArray(actual) ? actual : {};
|
|
18602
|
+
const missing = [];
|
|
18603
|
+
const different = [];
|
|
18604
|
+
for (const key of Object.keys(expected)) {
|
|
18605
|
+
if (!(key in actualData)) {
|
|
18606
|
+
missing.push(key);
|
|
18607
|
+
} else if (!shapeDataEquals(expected[key], actualData[key])) {
|
|
18608
|
+
different.push(key);
|
|
18609
|
+
}
|
|
18610
|
+
}
|
|
18611
|
+
for (const key of Object.keys(actualData)) {
|
|
18612
|
+
if (!(key in expected)) {
|
|
18613
|
+
different.push(key);
|
|
18614
|
+
}
|
|
18615
|
+
}
|
|
18616
|
+
const parts = [];
|
|
18617
|
+
if (missing.length > 0)
|
|
18618
|
+
parts.push(`missing ${missing.join(", ")}`);
|
|
18619
|
+
if (different.length > 0)
|
|
18620
|
+
parts.push(`different ${different.join(", ")}`);
|
|
18621
|
+
return parts.length > 0 ? parts.join("; ") : "data differs";
|
|
18622
|
+
}
|
|
18623
|
+
function resolveManifestCredentialName(name, ctx) {
|
|
18624
|
+
return resolveComponentTemplate(name, {
|
|
18625
|
+
orgName: ctx.orgName,
|
|
18626
|
+
repoName: ctx.repoName
|
|
18627
|
+
});
|
|
18628
|
+
}
|
|
18435
18629
|
// ../../packages/rules/src/repo-auth-scopes.ts
|
|
18436
18630
|
var REPO_AUTH_SCOPES = [
|
|
18437
18631
|
"repo:read",
|
|
@@ -18799,53 +18993,6 @@ function validateComponentManifestCliContract(manifest) {
|
|
|
18799
18993
|
}
|
|
18800
18994
|
return findings;
|
|
18801
18995
|
}
|
|
18802
|
-
// ../../packages/rules/src/component-manifest-hash.ts
|
|
18803
|
-
function stableJson(value) {
|
|
18804
|
-
if (!value || typeof value !== "object") {
|
|
18805
|
-
return JSON.stringify(value);
|
|
18806
|
-
}
|
|
18807
|
-
if (Array.isArray(value)) {
|
|
18808
|
-
return `[${value.map((entry) => stableJson(entry)).join(",")}]`;
|
|
18809
|
-
}
|
|
18810
|
-
const record = value;
|
|
18811
|
-
return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${stableJson(record[key])}`).join(",")}}`;
|
|
18812
|
-
}
|
|
18813
|
-
function stableJsonEquals(left, right) {
|
|
18814
|
-
return stableJson(left) === stableJson(right);
|
|
18815
|
-
}
|
|
18816
|
-
async function computeComponentManifestHash(manifest) {
|
|
18817
|
-
const { createHash } = await import("node:crypto");
|
|
18818
|
-
const content = stableJson(manifest);
|
|
18819
|
-
return createHash("sha256").update(content).digest("hex").slice(0, 16);
|
|
18820
|
-
}
|
|
18821
|
-
// ../../packages/rules/src/component-name-templates.ts
|
|
18822
|
-
var COMPONENT_TEMPLATE_VALUES = {
|
|
18823
|
-
"org-name": (ctx) => ctx.orgName,
|
|
18824
|
-
"repo-name": (ctx) => ctx.repoName
|
|
18825
|
-
};
|
|
18826
|
-
var TEMPLATE_TOKEN_RE = /<([a-z-]+)>/g;
|
|
18827
|
-
function listComponentTemplateTokens(value) {
|
|
18828
|
-
const tokens = new Set;
|
|
18829
|
-
for (const match of value.matchAll(TEMPLATE_TOKEN_RE)) {
|
|
18830
|
-
if (match[1]) {
|
|
18831
|
-
tokens.add(match[1]);
|
|
18832
|
-
}
|
|
18833
|
-
}
|
|
18834
|
-
return [...tokens];
|
|
18835
|
-
}
|
|
18836
|
-
function unsupportedComponentTemplateTokens(value) {
|
|
18837
|
-
return listComponentTemplateTokens(value).filter((token) => !(token in COMPONENT_TEMPLATE_VALUES));
|
|
18838
|
-
}
|
|
18839
|
-
function resolveComponentTemplate(value, ctx) {
|
|
18840
|
-
return value.replace(TEMPLATE_TOKEN_RE, (_match, token) => {
|
|
18841
|
-
const resolver = COMPONENT_TEMPLATE_VALUES[token];
|
|
18842
|
-
if (!resolver) {
|
|
18843
|
-
throw new Error(`Unsupported component template token <${token}>`);
|
|
18844
|
-
}
|
|
18845
|
-
return resolver(ctx);
|
|
18846
|
-
});
|
|
18847
|
-
}
|
|
18848
|
-
|
|
18849
18996
|
// ../../packages/rules/src/component-version.ts
|
|
18850
18997
|
var SEMVER_RE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
|
18851
18998
|
function isValidSemver(version) {
|
|
@@ -21294,7 +21441,7 @@ function findSystemComponent(componentId) {
|
|
|
21294
21441
|
// ../../packages/sdk-ts/package.json
|
|
21295
21442
|
var package_default = {
|
|
21296
21443
|
name: "@warmhub/sdk-ts",
|
|
21297
|
-
version: "0.
|
|
21444
|
+
version: "0.55.0",
|
|
21298
21445
|
private: false,
|
|
21299
21446
|
type: "module",
|
|
21300
21447
|
description: "The TypeScript SDK for WarmHub — create repos, commit and query data, and compound knowledge with your AI agents.",
|
|
@@ -22184,6 +22331,17 @@ class WarmHubClient {
|
|
|
22184
22331
|
throw toWarmHubError(error);
|
|
22185
22332
|
}
|
|
22186
22333
|
},
|
|
22334
|
+
search: async (query, opts) => {
|
|
22335
|
+
try {
|
|
22336
|
+
return await this.trpc.component.search.query({
|
|
22337
|
+
query,
|
|
22338
|
+
limit: opts?.limit,
|
|
22339
|
+
cursor: opts?.cursor
|
|
22340
|
+
});
|
|
22341
|
+
} catch (error) {
|
|
22342
|
+
throw toWarmHubError(error);
|
|
22343
|
+
}
|
|
22344
|
+
},
|
|
22187
22345
|
get: async (orgName, repoName, componentRef) => {
|
|
22188
22346
|
try {
|
|
22189
22347
|
return await this.trpc.component.get.query({
|
|
@@ -22195,6 +22353,28 @@ class WarmHubClient {
|
|
|
22195
22353
|
throw toWarmHubError(error);
|
|
22196
22354
|
}
|
|
22197
22355
|
},
|
|
22356
|
+
install: async (orgName, repoName, componentRef) => {
|
|
22357
|
+
try {
|
|
22358
|
+
return await this.trpc.component.install.mutate({
|
|
22359
|
+
orgName,
|
|
22360
|
+
repoName,
|
|
22361
|
+
componentRef
|
|
22362
|
+
});
|
|
22363
|
+
} catch (error) {
|
|
22364
|
+
throw toWarmHubError(error);
|
|
22365
|
+
}
|
|
22366
|
+
},
|
|
22367
|
+
uninstall: async (orgName, repoName, componentRef) => {
|
|
22368
|
+
try {
|
|
22369
|
+
return await this.trpc.component.uninstall.mutate({
|
|
22370
|
+
orgName,
|
|
22371
|
+
repoName,
|
|
22372
|
+
componentRef
|
|
22373
|
+
});
|
|
22374
|
+
} catch (error) {
|
|
22375
|
+
throw toWarmHubError(error);
|
|
22376
|
+
}
|
|
22377
|
+
},
|
|
22198
22378
|
registry: {
|
|
22199
22379
|
register: async (orgName, componentName, input) => {
|
|
22200
22380
|
try {
|
|
@@ -22519,6 +22699,17 @@ class WarmHubClient {
|
|
|
22519
22699
|
throw toWarmHubError(error);
|
|
22520
22700
|
}
|
|
22521
22701
|
},
|
|
22702
|
+
search: async (query, opts) => {
|
|
22703
|
+
try {
|
|
22704
|
+
return await this.trpc.repo.search.query({
|
|
22705
|
+
query,
|
|
22706
|
+
limit: opts?.limit,
|
|
22707
|
+
cursor: opts?.cursor
|
|
22708
|
+
});
|
|
22709
|
+
} catch (error) {
|
|
22710
|
+
throw toWarmHubError(error);
|
|
22711
|
+
}
|
|
22712
|
+
},
|
|
22522
22713
|
create: async (orgName, repoName, description, visibility, displayName) => {
|
|
22523
22714
|
try {
|
|
22524
22715
|
return await this.trpc.repo.create.mutate({
|
|
@@ -24005,32 +24196,6 @@ function toCliError(err) {
|
|
|
24005
24196
|
const message = err instanceof Error ? err.message : String(err);
|
|
24006
24197
|
return new CliError(1 /* Runtime */, "UNKNOWN", message, err);
|
|
24007
24198
|
}
|
|
24008
|
-
function isAlreadyExistsError(err, seen = new WeakSet) {
|
|
24009
|
-
if (typeof err === "string") {
|
|
24010
|
-
return err.includes("already exists") || err.includes("ALREADY_EXISTS");
|
|
24011
|
-
}
|
|
24012
|
-
if (err === null || typeof err !== "object") {
|
|
24013
|
-
return false;
|
|
24014
|
-
}
|
|
24015
|
-
if (seen.has(err)) {
|
|
24016
|
-
return false;
|
|
24017
|
-
}
|
|
24018
|
-
seen.add(err);
|
|
24019
|
-
const payloadMessage = err.message;
|
|
24020
|
-
const message = err instanceof Error ? err.message : typeof payloadMessage === "string" ? payloadMessage : undefined;
|
|
24021
|
-
const isAlreadyExistsMessage = message !== undefined && (message.includes("already exists") || message.includes("ALREADY_EXISTS"));
|
|
24022
|
-
const code = err.code;
|
|
24023
|
-
if (code === "ALREADY_EXISTS") {
|
|
24024
|
-
return true;
|
|
24025
|
-
}
|
|
24026
|
-
if (code === "CONFLICT") {
|
|
24027
|
-
return isAlreadyExistsMessage;
|
|
24028
|
-
}
|
|
24029
|
-
if (isAlreadyExistsMessage) {
|
|
24030
|
-
return true;
|
|
24031
|
-
}
|
|
24032
|
-
return isAlreadyExistsError(err.cause, seen);
|
|
24033
|
-
}
|
|
24034
24199
|
function generateSuggestions(code, message, context, errorCode) {
|
|
24035
24200
|
const suggestions = [];
|
|
24036
24201
|
if (code === "CONFIG" && (message.includes("repo") || message.includes("WARMHUB_REPO"))) {
|
|
@@ -24705,37 +24870,65 @@ function makeStderrSink(minLevel) {
|
|
|
24705
24870
|
function enforceLineCap(record) {
|
|
24706
24871
|
const initial = `${JSON.stringify(record)}
|
|
24707
24872
|
`;
|
|
24708
|
-
if (initial
|
|
24873
|
+
if (lineByteLength(initial) <= LINE_CAP + 1)
|
|
24709
24874
|
return initial;
|
|
24710
24875
|
const trimmed = { ...record };
|
|
24711
24876
|
for (let pass = 0;pass < 8; pass++) {
|
|
24712
24877
|
const candidate = `${JSON.stringify(trimmed)}
|
|
24713
24878
|
`;
|
|
24714
|
-
if (candidate
|
|
24879
|
+
if (lineByteLength(candidate) <= LINE_CAP + 1)
|
|
24715
24880
|
return candidate;
|
|
24716
24881
|
let largestKey = null;
|
|
24717
24882
|
let largestLen = 0;
|
|
24718
24883
|
for (const [key, val] of Object.entries(trimmed)) {
|
|
24719
|
-
if (typeof val === "string"
|
|
24884
|
+
if (typeof val === "string") {
|
|
24885
|
+
const byteLen = lineByteLength(val);
|
|
24886
|
+
if (byteLen <= largestLen)
|
|
24887
|
+
continue;
|
|
24720
24888
|
largestKey = key;
|
|
24721
|
-
largestLen =
|
|
24889
|
+
largestLen = byteLen;
|
|
24722
24890
|
}
|
|
24723
24891
|
}
|
|
24724
24892
|
if (largestKey === null)
|
|
24725
24893
|
break;
|
|
24726
|
-
const overage = candidate
|
|
24894
|
+
const overage = lineByteLength(candidate) - LINE_CAP - 1;
|
|
24727
24895
|
const current = trimmed[largestKey];
|
|
24728
|
-
const
|
|
24729
|
-
trimmed[largestKey] = `${current
|
|
24896
|
+
const allowedBytes = Math.max(0, lineByteLength(current) - overage - lineByteLength(TRUNCATED_MARKER));
|
|
24897
|
+
trimmed[largestKey] = `${sliceUtf8Bytes(current, allowedBytes)}${TRUNCATED_MARKER}`;
|
|
24730
24898
|
}
|
|
24731
|
-
|
|
24899
|
+
const fallback = {
|
|
24732
24900
|
v: trimmed.v,
|
|
24733
24901
|
ts: trimmed.ts,
|
|
24734
24902
|
level: trimmed.level,
|
|
24735
24903
|
msg: trimmed.msg,
|
|
24736
24904
|
truncated: TRUNCATED_MARKER
|
|
24737
|
-
}
|
|
24905
|
+
};
|
|
24906
|
+
let line = `${JSON.stringify(fallback)}
|
|
24907
|
+
`;
|
|
24908
|
+
if (lineByteLength(line) <= LINE_CAP + 1)
|
|
24909
|
+
return line;
|
|
24910
|
+
const emptyMsgLine = `${JSON.stringify({ ...fallback, msg: "" })}
|
|
24911
|
+
`;
|
|
24912
|
+
const msgBudget = Math.max(0, LINE_CAP + 1 - lineByteLength(emptyMsgLine));
|
|
24913
|
+
fallback.msg = sliceUtf8Bytes(fallback.msg, msgBudget);
|
|
24914
|
+
line = `${JSON.stringify(fallback)}
|
|
24738
24915
|
`;
|
|
24916
|
+
return line;
|
|
24917
|
+
}
|
|
24918
|
+
function lineByteLength(value) {
|
|
24919
|
+
return Buffer.byteLength(value, "utf8");
|
|
24920
|
+
}
|
|
24921
|
+
function sliceUtf8Bytes(value, maxBytes) {
|
|
24922
|
+
let bytes = 0;
|
|
24923
|
+
let result = "";
|
|
24924
|
+
for (const char of value) {
|
|
24925
|
+
const charBytes = lineByteLength(char);
|
|
24926
|
+
if (bytes + charBytes > maxBytes)
|
|
24927
|
+
break;
|
|
24928
|
+
result += char;
|
|
24929
|
+
bytes += charBytes;
|
|
24930
|
+
}
|
|
24931
|
+
return result;
|
|
24739
24932
|
}
|
|
24740
24933
|
function rotateIfNeeded(path, dir) {
|
|
24741
24934
|
if (!existsSync(path))
|
|
@@ -25410,10 +25603,11 @@ async function getValidToken(profile) {
|
|
|
25410
25603
|
});
|
|
25411
25604
|
await delay(1000);
|
|
25412
25605
|
log.info("auth.refresh.retry", { profile: profileName, attempt: 2 });
|
|
25606
|
+
let retryStarted = Date.now();
|
|
25413
25607
|
try {
|
|
25414
25608
|
const retryProf = getProfile(profileName, authPath);
|
|
25415
25609
|
const retryTokens = retryProf?.tokens ?? lockedTokens;
|
|
25416
|
-
|
|
25610
|
+
retryStarted = Date.now();
|
|
25417
25611
|
const refreshed = await refreshAccessToken(retryTokens);
|
|
25418
25612
|
saveProfileWhileLocked(profileName, { ...retryProf ?? lockedProf, tokens: refreshed }, authPath);
|
|
25419
25613
|
log.info("auth.refresh.ok", {
|
|
@@ -25428,7 +25622,7 @@ async function getValidToken(profile) {
|
|
|
25428
25622
|
const fields = {
|
|
25429
25623
|
profile: profileName,
|
|
25430
25624
|
classification,
|
|
25431
|
-
duration_ms: Date.now() -
|
|
25625
|
+
duration_ms: Date.now() - retryStarted,
|
|
25432
25626
|
error_name: retryErr instanceof Error ? retryErr.name : "Unknown",
|
|
25433
25627
|
on_retry: true
|
|
25434
25628
|
};
|
|
@@ -26172,9 +26366,34 @@ function writeOutput(ctx, data, prettyFn) {
|
|
|
26172
26366
|
}
|
|
26173
26367
|
prettyFn();
|
|
26174
26368
|
}
|
|
26175
|
-
function
|
|
26369
|
+
function pageEnvelope(items, opts) {
|
|
26370
|
+
const nextCursor = opts.nextCursor ?? null;
|
|
26371
|
+
return {
|
|
26372
|
+
items,
|
|
26373
|
+
page: {
|
|
26374
|
+
limit: opts.limit,
|
|
26375
|
+
count: items.length,
|
|
26376
|
+
hasMore: nextCursor !== null,
|
|
26377
|
+
nextCursor
|
|
26378
|
+
}
|
|
26379
|
+
};
|
|
26380
|
+
}
|
|
26381
|
+
function writePageOutput(ctx, items, opts, prettyFn) {
|
|
26382
|
+
if (ctx.format === "json") {
|
|
26383
|
+
printJson(ctx.out, pageEnvelope(items, opts));
|
|
26384
|
+
return;
|
|
26385
|
+
}
|
|
26386
|
+
if (ctx.format === "jsonl") {
|
|
26387
|
+
printJsonl(ctx.out, items);
|
|
26388
|
+
return;
|
|
26389
|
+
}
|
|
26390
|
+
prettyFn();
|
|
26391
|
+
}
|
|
26392
|
+
function emitPartialPageHint(ctx, count, _nextCursor, _limit) {
|
|
26393
|
+
if (ctx.format === "json" || ctx.format === "jsonl")
|
|
26394
|
+
return;
|
|
26176
26395
|
const c = ctx.colors;
|
|
26177
|
-
ctx.status(`${c.yellow}${count} shown
|
|
26396
|
+
ctx.status(`${c.yellow}${count} shown; more available${c.reset}. Use ${c.cyan}--all${c.reset} to fetch every page.`);
|
|
26178
26397
|
}
|
|
26179
26398
|
|
|
26180
26399
|
// ../../packages/warmhub-cli/src/domains/thing/shared.ts
|
|
@@ -26250,7 +26469,7 @@ var handleAbout = async (ctx, { flags, args }) => {
|
|
|
26250
26469
|
apiUrl: ctx.config.apiUrl,
|
|
26251
26470
|
poll: (c) => c.thing.about(org, repo, wref, aboutOpts),
|
|
26252
26471
|
render: (r) => {
|
|
26253
|
-
renderAboutResult(ctx.out, ctx.colors, r, wref
|
|
26472
|
+
renderAboutResult(ctx.out, ctx.colors, r, wref);
|
|
26254
26473
|
},
|
|
26255
26474
|
out: ctx.out,
|
|
26256
26475
|
err: ctx.err,
|
|
@@ -26278,22 +26497,21 @@ var handleAbout = async (ctx, { flags, args }) => {
|
|
|
26278
26497
|
cur = page.nextCursor;
|
|
26279
26498
|
}
|
|
26280
26499
|
const result2 = { target, assertions, nextCursor: undefined };
|
|
26281
|
-
|
|
26500
|
+
writePageOutput(ctx, assertions, { limit: pageLimit, nextCursor: null }, () => renderAboutResult(ctx.out, ctx.colors, result2, wref));
|
|
26282
26501
|
return;
|
|
26283
26502
|
}
|
|
26284
26503
|
const result = await fetchPage(cursor);
|
|
26285
26504
|
if (result.nextCursor) {
|
|
26286
26505
|
emitPartialPageHint(ctx, result.assertions.length, result.nextCursor, boundedLimit);
|
|
26287
26506
|
}
|
|
26288
|
-
|
|
26507
|
+
writePageOutput(ctx, result.assertions, { limit: boundedLimit, nextCursor: result.nextCursor ?? null }, () => renderAboutResult(ctx.out, ctx.colors, result, wref));
|
|
26289
26508
|
};
|
|
26290
|
-
function renderAboutResult(out, c, result, wref
|
|
26291
|
-
const resumeHint = `${c.dim}Next: --limit=${limit} --cursor=${result.nextCursor}${c.reset}`;
|
|
26509
|
+
function renderAboutResult(out, c, result, wref) {
|
|
26292
26510
|
out(`${c.bold}Assertions about${c.reset} ${pinnedWref(c, wref)} (${result.assertions.length}${result.nextCursor ? "+" : ""})`);
|
|
26293
26511
|
if (result.assertions.length === 0) {
|
|
26294
26512
|
out(` ${c.dim}(no assertions found)${c.reset}`);
|
|
26295
26513
|
if (result.nextCursor) {
|
|
26296
|
-
out(
|
|
26514
|
+
out(`${c.dim}More available. Use --all to fetch every page.${c.reset}`);
|
|
26297
26515
|
}
|
|
26298
26516
|
return;
|
|
26299
26517
|
}
|
|
@@ -26301,7 +26519,7 @@ function renderAboutResult(out, c, result, wref, limit) {
|
|
|
26301
26519
|
renderAboutAssertion(out, c, a, " ");
|
|
26302
26520
|
}
|
|
26303
26521
|
if (result.nextCursor) {
|
|
26304
|
-
out(
|
|
26522
|
+
out(`${c.dim}More available. Use --all to fetch every page.${c.reset}`);
|
|
26305
26523
|
}
|
|
26306
26524
|
}
|
|
26307
26525
|
function renderAboutAssertion(out, c, assertion, indent) {
|
|
@@ -26714,7 +26932,10 @@ var handleHistory = async (ctx, { flags, args }) => {
|
|
|
26714
26932
|
if (!all && result.nextCursor) {
|
|
26715
26933
|
emitPartialPageHint(ctx, (result.versions ?? []).length, result.nextCursor, boundedLimit);
|
|
26716
26934
|
}
|
|
26717
|
-
|
|
26935
|
+
writePageOutput(ctx, result.versions ?? [], {
|
|
26936
|
+
limit: all ? pageLimit : boundedLimit,
|
|
26937
|
+
nextCursor: result.nextCursor ?? null
|
|
26938
|
+
}, () => renderHistory(ctx.out, ctx.colors, result));
|
|
26718
26939
|
};
|
|
26719
26940
|
async function fetchAllHistoryPages(ctx, org, repo, opts) {
|
|
26720
26941
|
const versions = [];
|
|
@@ -26989,7 +27210,10 @@ var handleHead = async (ctx, { flags, args }) => {
|
|
|
26989
27210
|
if (!all && result.nextCursor) {
|
|
26990
27211
|
emitPartialPageHint(ctx, (result.items ?? []).length, result.nextCursor, boundedLimit);
|
|
26991
27212
|
}
|
|
26992
|
-
|
|
27213
|
+
writePageOutput(ctx, result.items ?? [], {
|
|
27214
|
+
limit: all ? pageLimit : boundedLimit,
|
|
27215
|
+
nextCursor: result.nextCursor ?? null
|
|
27216
|
+
}, () => renderHead(ctx.out, ctx.colors, ctx.chars, result, org, repo, shape, kind));
|
|
26993
27217
|
};
|
|
26994
27218
|
async function fetchAllHeadPages(ctx, org, repo, opts) {
|
|
26995
27219
|
const items = [];
|
|
@@ -27154,7 +27378,10 @@ var handleQuery = async (ctx, { flags }) => {
|
|
|
27154
27378
|
if (!all && result.nextCursor) {
|
|
27155
27379
|
emitPartialPageHint(ctx, (result.items ?? []).length, result.nextCursor, boundedLimit);
|
|
27156
27380
|
}
|
|
27157
|
-
|
|
27381
|
+
writePageOutput(ctx, result.items ?? [], {
|
|
27382
|
+
limit: all ? pageLimit : boundedLimit,
|
|
27383
|
+
nextCursor: result.nextCursor ?? null
|
|
27384
|
+
}, () => renderQueryResults(ctx.out, c, result));
|
|
27158
27385
|
};
|
|
27159
27386
|
async function fetchAllQueryPages(ctx, org, repo, opts) {
|
|
27160
27387
|
const items = [];
|
|
@@ -27260,7 +27487,7 @@ var handleRefs = async (ctx, { flags, args }) => {
|
|
|
27260
27487
|
cur = page.nextCursor;
|
|
27261
27488
|
}
|
|
27262
27489
|
const result2 = { items, nextCursor: undefined };
|
|
27263
|
-
|
|
27490
|
+
writePageOutput(ctx, items, { limit: pageLimit, nextCursor: null }, () => renderRefs(ctx.out, ctx.colors, result2, wref, direction));
|
|
27264
27491
|
maybeEmitAboutHint(ctx, direction, items.length, refsQueryIsNarrowed);
|
|
27265
27492
|
return;
|
|
27266
27493
|
}
|
|
@@ -27268,7 +27495,7 @@ var handleRefs = async (ctx, { flags, args }) => {
|
|
|
27268
27495
|
if (result.nextCursor) {
|
|
27269
27496
|
emitPartialPageHint(ctx, (result.items ?? []).length, result.nextCursor, boundedLimit);
|
|
27270
27497
|
}
|
|
27271
|
-
|
|
27498
|
+
writePageOutput(ctx, result.items ?? [], { limit: boundedLimit, nextCursor: result.nextCursor ?? null }, () => renderRefs(ctx.out, ctx.colors, result, wref, direction));
|
|
27272
27499
|
maybeEmitAboutHint(ctx, direction, result.items?.length ?? 0, refsQueryIsNarrowed);
|
|
27273
27500
|
};
|
|
27274
27501
|
function maybeEmitAboutHint(ctx, direction, itemCount, refsQueryIsNarrowed) {
|
|
@@ -27521,7 +27748,10 @@ var handleSearch = async (ctx, { flags, args }) => {
|
|
|
27521
27748
|
if (!all && result.nextCursor) {
|
|
27522
27749
|
emitPartialPageHint(ctx, result.items.length, result.nextCursor, boundedTextLimit);
|
|
27523
27750
|
}
|
|
27524
|
-
|
|
27751
|
+
writePageOutput(ctx, result.items, {
|
|
27752
|
+
limit: all ? pageLimit : boundedTextLimit,
|
|
27753
|
+
nextCursor: result.nextCursor ?? null
|
|
27754
|
+
}, () => renderQueryResults(ctx.out, c, result));
|
|
27525
27755
|
};
|
|
27526
27756
|
async function fetchAllSearchPages(ctx, org, repo, queryText, opts) {
|
|
27527
27757
|
const items = [];
|
|
@@ -28206,7 +28436,10 @@ var handleHistory2 = async (ctx, { flags, args }) => {
|
|
|
28206
28436
|
versions,
|
|
28207
28437
|
nextCursor: flags.all ? undefined : nextCursor
|
|
28208
28438
|
};
|
|
28209
|
-
|
|
28439
|
+
if (!flags.all && result.nextCursor) {
|
|
28440
|
+
emitPartialPageHint(ctx, result.versions.length, result.nextCursor, limit);
|
|
28441
|
+
}
|
|
28442
|
+
writePageOutput(ctx, result.versions, { limit, nextCursor: result.nextCursor ?? null }, () => renderHistory(ctx.out, ctx.colors, result));
|
|
28210
28443
|
};
|
|
28211
28444
|
var handleCreate2 = async (ctx, { flags, args }) => {
|
|
28212
28445
|
const { org, repo } = parseOrgRepo(getRepoRef(ctx) ?? args[0], ctx.config);
|
|
@@ -28336,7 +28569,10 @@ var handleList = async (ctx, { flags, args }) => {
|
|
|
28336
28569
|
if (!all && result2.nextCursor) {
|
|
28337
28570
|
emitPartialPageHint(ctx, (result2.items ?? []).length, result2.nextCursor, boundedLimit);
|
|
28338
28571
|
}
|
|
28339
|
-
|
|
28572
|
+
writePageOutput(ctx, result2.items ?? [], {
|
|
28573
|
+
limit: all ? pageLimit : boundedLimit,
|
|
28574
|
+
nextCursor: result2.nextCursor ?? null
|
|
28575
|
+
}, () => renderHead(ctx.out, ctx.colors, ctx.chars, result2, org, repo, shape, "assertion"));
|
|
28340
28576
|
return;
|
|
28341
28577
|
}
|
|
28342
28578
|
const aboutOpts = {
|
|
@@ -28388,7 +28624,10 @@ var handleList = async (ctx, { flags, args }) => {
|
|
|
28388
28624
|
if (!all && result.nextCursor) {
|
|
28389
28625
|
emitPartialPageHint(ctx, (result.assertions ?? []).length, result.nextCursor, boundedLimit);
|
|
28390
28626
|
}
|
|
28391
|
-
|
|
28627
|
+
writePageOutput(ctx, result.assertions ?? [], {
|
|
28628
|
+
limit: all ? pageLimit : boundedLimit,
|
|
28629
|
+
nextCursor: result.nextCursor ?? null
|
|
28630
|
+
}, () => renderAbout(ctx.out, ctx.colors, result));
|
|
28392
28631
|
};
|
|
28393
28632
|
async function fetchAllAssertionAboutPages(ctx, org, repo, wref, opts) {
|
|
28394
28633
|
const assertions = [];
|
|
@@ -31106,7 +31345,7 @@ async function fetchAllSummaries(client, org, repo) {
|
|
|
31106
31345
|
return items;
|
|
31107
31346
|
}
|
|
31108
31347
|
function filterActiveItems(items) {
|
|
31109
|
-
return items.filter((i) => i.active && i.state !== "paused" && i.state !== "error");
|
|
31348
|
+
return items.filter((i) => i.active && i.state !== "uninstalled" && i.state !== "paused" && i.state !== "error");
|
|
31110
31349
|
}
|
|
31111
31350
|
function extractRegisteredRef(data) {
|
|
31112
31351
|
if (typeof data !== "object" || data === null)
|
|
@@ -31481,81 +31720,41 @@ function formatReservedNameWarning(name) {
|
|
|
31481
31720
|
return `warning: component name "${name}" shadows the builtin \`wh ${name}\` domain. Operators will need to invoke methods via \`wh component exec ${name} <method>\` — the shorthand \`wh ${name} <method>\` will route to the builtin instead.`;
|
|
31482
31721
|
}
|
|
31483
31722
|
|
|
31484
|
-
// ../../packages/warmhub-cli/src/
|
|
31485
|
-
|
|
31486
|
-
|
|
31487
|
-
|
|
31488
|
-
|
|
31489
|
-
|
|
31490
|
-
|
|
31491
|
-
|
|
31492
|
-
|
|
31493
|
-
}
|
|
31494
|
-
|
|
31495
|
-
|
|
31496
|
-
function manifestShapeData(shape) {
|
|
31497
|
-
const data = { fields: shape.fields };
|
|
31498
|
-
if (shape.description !== undefined)
|
|
31499
|
-
data.description = shape.description;
|
|
31500
|
-
return data;
|
|
31501
|
-
}
|
|
31502
|
-
function shapeDataEquals(left, right) {
|
|
31503
|
-
return stableJsonEquals(left, right);
|
|
31504
|
-
}
|
|
31505
|
-
function describeShapeDataMismatch(expected, actual) {
|
|
31506
|
-
const actualData = actual && typeof actual === "object" && !Array.isArray(actual) ? actual : {};
|
|
31507
|
-
const missing = [];
|
|
31508
|
-
const different = [];
|
|
31509
|
-
for (const key of Object.keys(expected)) {
|
|
31510
|
-
if (!(key in actualData)) {
|
|
31511
|
-
missing.push(key);
|
|
31512
|
-
} else if (!shapeDataEquals(expected[key], actualData[key])) {
|
|
31513
|
-
different.push(key);
|
|
31723
|
+
// ../../packages/warmhub-cli/src/global-search-command.ts
|
|
31724
|
+
var DEFAULT_LIMIT = 25;
|
|
31725
|
+
async function runGlobalSearchCommand(ctx, args) {
|
|
31726
|
+
const c = ctx.colors;
|
|
31727
|
+
const first = await args.fetch({ limit: args.limit, cursor: args.cursor });
|
|
31728
|
+
const items = [...first.items];
|
|
31729
|
+
let nextCursor = first.nextCursor;
|
|
31730
|
+
if (args.all) {
|
|
31731
|
+
while (nextCursor) {
|
|
31732
|
+
const page = await args.fetch({ limit: args.limit, cursor: nextCursor });
|
|
31733
|
+
items.push(...page.items);
|
|
31734
|
+
nextCursor = page.nextCursor;
|
|
31514
31735
|
}
|
|
31515
31736
|
}
|
|
31516
|
-
|
|
31517
|
-
|
|
31518
|
-
different.push(key);
|
|
31519
|
-
}
|
|
31737
|
+
if (!args.all && nextCursor) {
|
|
31738
|
+
emitPartialPageHint(ctx, items.length, nextCursor, args.limit ?? DEFAULT_LIMIT);
|
|
31520
31739
|
}
|
|
31521
|
-
|
|
31522
|
-
|
|
31523
|
-
|
|
31524
|
-
|
|
31525
|
-
|
|
31526
|
-
|
|
31740
|
+
writePageOutput(ctx, items, {
|
|
31741
|
+
limit: args.limit ?? DEFAULT_LIMIT,
|
|
31742
|
+
nextCursor: args.all ? null : nextCursor ?? null
|
|
31743
|
+
}, () => {
|
|
31744
|
+
if (items.length === 0) {
|
|
31745
|
+
ctx.status(`${c.dim}No ${args.emptyLabel} matching "${args.query}"${c.reset}`);
|
|
31746
|
+
return;
|
|
31747
|
+
}
|
|
31748
|
+
ctx.out(`${c.bold}${args.title}${c.reset} ${c.dim}"${args.query}"${c.reset}`);
|
|
31749
|
+
ctx.out("");
|
|
31750
|
+
for (const item of items) {
|
|
31751
|
+
const desc = item.description ? ` ${c.dim}${item.description}${c.reset}` : "";
|
|
31752
|
+
ctx.out(` ${c.cyan}${item.orgName}/${item.name}${c.reset}${desc}`);
|
|
31753
|
+
}
|
|
31754
|
+
});
|
|
31527
31755
|
}
|
|
31528
|
-
|
|
31529
31756
|
// ../../packages/warmhub-cli/src/manifest/shared-infra.ts
|
|
31530
31757
|
var SHARED_INFRA_SHAPES = findSystemComponent(SYSTEM_COMPONENT_ID)?.shapes ?? [];
|
|
31531
|
-
async function ensureSharedInfra(client, org, repo) {
|
|
31532
|
-
for (const shape of SHARED_INFRA_SHAPES) {
|
|
31533
|
-
try {
|
|
31534
|
-
await client.commit.apply(org, repo, `Ensure ${shape.name} shape`, [
|
|
31535
|
-
{
|
|
31536
|
-
operation: "add",
|
|
31537
|
-
kind: "shape",
|
|
31538
|
-
name: shape.name,
|
|
31539
|
-
data: { fields: shape.fields }
|
|
31540
|
-
}
|
|
31541
|
-
], { componentRef: SYSTEM_REGISTERED_COMPONENT_REF });
|
|
31542
|
-
} catch (err) {
|
|
31543
|
-
if (!isAlreadyExistsError(err)) {
|
|
31544
|
-
throw err;
|
|
31545
|
-
}
|
|
31546
|
-
try {
|
|
31547
|
-
await client.commit.apply(org, repo, `Tag ${shape.name} with system componentId`, [
|
|
31548
|
-
{
|
|
31549
|
-
operation: "revise",
|
|
31550
|
-
kind: "shape",
|
|
31551
|
-
name: shape.name,
|
|
31552
|
-
data: { fields: shape.fields }
|
|
31553
|
-
}
|
|
31554
|
-
], { componentRef: SYSTEM_REGISTERED_COMPONENT_REF });
|
|
31555
|
-
} catch {}
|
|
31556
|
-
}
|
|
31557
|
-
}
|
|
31558
|
-
}
|
|
31559
31758
|
|
|
31560
31759
|
// ../../packages/warmhub-cli/src/manifest/doctor.ts
|
|
31561
31760
|
async function doctorComponent(client, org, repo, componentId) {
|
|
@@ -31602,6 +31801,14 @@ async function doctorComponent(client, org, repo, componentId) {
|
|
|
31602
31801
|
});
|
|
31603
31802
|
return { componentId, componentName, state: "error", findings };
|
|
31604
31803
|
}
|
|
31804
|
+
if (existingState === "uninstalled") {
|
|
31805
|
+
findings.push({
|
|
31806
|
+
resource: "state",
|
|
31807
|
+
status: "inactive",
|
|
31808
|
+
message: "Component is uninstalled; reinstall to revive it"
|
|
31809
|
+
});
|
|
31810
|
+
return { componentId, componentName, state: "uninstalled", findings };
|
|
31811
|
+
}
|
|
31605
31812
|
let manifest;
|
|
31606
31813
|
try {
|
|
31607
31814
|
const raw = typeof installData.manifest === "string" ? installData.manifest : undefined;
|
|
@@ -31839,129 +32046,6 @@ function parseComponentPackage(dirPath) {
|
|
|
31839
32046
|
};
|
|
31840
32047
|
}
|
|
31841
32048
|
|
|
31842
|
-
// ../../packages/warmhub-cli/src/manifest/teardown.ts
|
|
31843
|
-
async function teardownComponent(client, org, repo, componentId) {
|
|
31844
|
-
const steps = [];
|
|
31845
|
-
const errors = [];
|
|
31846
|
-
let installData;
|
|
31847
|
-
try {
|
|
31848
|
-
const thing = await client.thing.get(org, repo, `ComponentInstall/${componentId}`);
|
|
31849
|
-
installData = thing.data && typeof thing.data === "object" ? thing.data : {};
|
|
31850
|
-
} catch {
|
|
31851
|
-
return {
|
|
31852
|
-
componentId,
|
|
31853
|
-
componentName: componentId,
|
|
31854
|
-
state: "error",
|
|
31855
|
-
steps: [
|
|
31856
|
-
{
|
|
31857
|
-
step: "load-install",
|
|
31858
|
-
status: "error",
|
|
31859
|
-
message: `ComponentInstall/${componentId} not found`
|
|
31860
|
-
}
|
|
31861
|
-
],
|
|
31862
|
-
errors: [`ComponentInstall/${componentId} not found`]
|
|
31863
|
-
};
|
|
31864
|
-
}
|
|
31865
|
-
const componentName = typeof installData.name === "string" ? installData.name : componentId;
|
|
31866
|
-
const registeredComponentRef = typeof installData.registeredComponentRef === "string" && installData.registeredComponentRef.length > 0 ? installData.registeredComponentRef : undefined;
|
|
31867
|
-
if (!registeredComponentRef) {
|
|
31868
|
-
return {
|
|
31869
|
-
componentId,
|
|
31870
|
-
componentName,
|
|
31871
|
-
state: "error",
|
|
31872
|
-
steps: [
|
|
31873
|
-
{
|
|
31874
|
-
step: "load-install",
|
|
31875
|
-
status: "error",
|
|
31876
|
-
message: "Install record is missing registeredComponentRef"
|
|
31877
|
-
}
|
|
31878
|
-
],
|
|
31879
|
-
errors: ["Install record is missing registeredComponentRef"]
|
|
31880
|
-
};
|
|
31881
|
-
}
|
|
31882
|
-
let subscriptionNames = [];
|
|
31883
|
-
let teardownPolicy = {};
|
|
31884
|
-
try {
|
|
31885
|
-
const raw = typeof installData.manifest === "string" ? installData.manifest : undefined;
|
|
31886
|
-
if (raw) {
|
|
31887
|
-
const manifest = JSON.parse(raw);
|
|
31888
|
-
subscriptionNames = (manifest.subscriptions ?? []).map((s) => s.name);
|
|
31889
|
-
teardownPolicy = manifest.teardown ?? {};
|
|
31890
|
-
}
|
|
31891
|
-
} catch {
|
|
31892
|
-
errors.push("Failed to parse manifest — cannot identify subscriptions");
|
|
31893
|
-
steps.push({
|
|
31894
|
-
step: "parse-manifest",
|
|
31895
|
-
status: "error",
|
|
31896
|
-
message: "Invalid manifest JSON"
|
|
31897
|
-
});
|
|
31898
|
-
}
|
|
31899
|
-
const subPolicy = teardownPolicy.subscriptions?.onDisable ?? "pause";
|
|
31900
|
-
if (subPolicy === "pause") {
|
|
31901
|
-
for (const subName of subscriptionNames) {
|
|
31902
|
-
try {
|
|
31903
|
-
const sub = await client.subscription.get(org, repo, subName);
|
|
31904
|
-
const ownerComponentRef = sub && typeof sub === "object" && "componentRef" in sub ? sub.componentRef : undefined;
|
|
31905
|
-
if (typeof ownerComponentRef === "string" && ownerComponentRef !== registeredComponentRef) {
|
|
31906
|
-
const msg = `Subscription "${subName}" is owned by "${ownerComponentRef}", not "${registeredComponentRef}"`;
|
|
31907
|
-
errors.push(msg);
|
|
31908
|
-
steps.push({
|
|
31909
|
-
step: `pause-${subName}`,
|
|
31910
|
-
status: "error",
|
|
31911
|
-
message: msg
|
|
31912
|
-
});
|
|
31913
|
-
continue;
|
|
31914
|
-
}
|
|
31915
|
-
await client.subscription.pause(org, repo, subName);
|
|
31916
|
-
steps.push({ step: `pause-${subName}`, status: "ok" });
|
|
31917
|
-
} catch (err) {
|
|
31918
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
31919
|
-
if (msg.includes("already paused") || msg.includes("not active")) {
|
|
31920
|
-
steps.push({
|
|
31921
|
-
step: `pause-${subName}`,
|
|
31922
|
-
status: "skipped",
|
|
31923
|
-
message: "Already paused"
|
|
31924
|
-
});
|
|
31925
|
-
} else if (msg.includes("not found") || msg.includes("NOT_FOUND")) {
|
|
31926
|
-
steps.push({
|
|
31927
|
-
step: `pause-${subName}`,
|
|
31928
|
-
status: "skipped",
|
|
31929
|
-
message: "Subscription not found"
|
|
31930
|
-
});
|
|
31931
|
-
} else {
|
|
31932
|
-
errors.push(`Failed to pause ${subName}: ${msg}`);
|
|
31933
|
-
steps.push({
|
|
31934
|
-
step: `pause-${subName}`,
|
|
31935
|
-
status: "error",
|
|
31936
|
-
message: msg
|
|
31937
|
-
});
|
|
31938
|
-
}
|
|
31939
|
-
}
|
|
31940
|
-
}
|
|
31941
|
-
}
|
|
31942
|
-
const state = errors.length > 0 ? "degraded" : "paused";
|
|
31943
|
-
try {
|
|
31944
|
-
await client.commit.apply(org, repo, `Teardown ${componentName}: ${state}`, [
|
|
31945
|
-
{
|
|
31946
|
-
operation: "revise",
|
|
31947
|
-
kind: "thing",
|
|
31948
|
-
name: `ComponentInstall/${componentId}`,
|
|
31949
|
-
data: {
|
|
31950
|
-
...installData,
|
|
31951
|
-
state,
|
|
31952
|
-
updatedAt: new Date().toISOString()
|
|
31953
|
-
}
|
|
31954
|
-
}
|
|
31955
|
-
], { componentRef: SYSTEM_REGISTERED_COMPONENT_REF });
|
|
31956
|
-
steps.push({ step: "update-state", status: "ok" });
|
|
31957
|
-
} catch (err) {
|
|
31958
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
31959
|
-
errors.push(`Failed to update state: ${msg}`);
|
|
31960
|
-
steps.push({ step: "update-state", status: "error", message: msg });
|
|
31961
|
-
}
|
|
31962
|
-
return { componentId, componentName, state, steps, errors };
|
|
31963
|
-
}
|
|
31964
|
-
|
|
31965
32049
|
// ../../packages/warmhub-cli/src/manifest/validate.ts
|
|
31966
32050
|
function crossValidate(pkg) {
|
|
31967
32051
|
const findings = [];
|
|
@@ -32025,6 +32109,12 @@ function resolveMintedTokensFlag(args) {
|
|
|
32025
32109
|
return false;
|
|
32026
32110
|
return;
|
|
32027
32111
|
}
|
|
32112
|
+
var showSecretsFlag = flag.boolean({
|
|
32113
|
+
description: "Reveal raw lifecycle URLs in command output"
|
|
32114
|
+
});
|
|
32115
|
+
var showSecretsStructuredOutputFlag = flag.boolean({
|
|
32116
|
+
description: "Reveal raw lifecycle URLs in JSON/JSONL output"
|
|
32117
|
+
});
|
|
32028
32118
|
var installFlags = {};
|
|
32029
32119
|
var updateFlags = {};
|
|
32030
32120
|
var validateFlags = {};
|
|
@@ -32037,13 +32127,15 @@ var listFlags2 = {
|
|
|
32037
32127
|
description: "Fetch all pages (auto-paginate until exhausted)"
|
|
32038
32128
|
})
|
|
32039
32129
|
};
|
|
32130
|
+
var DEFAULT_COMPONENT_LIST_LIMIT = 50;
|
|
32131
|
+
var MAX_COMPONENT_LIST_LIMIT = 500;
|
|
32040
32132
|
var viewFlags3 = {};
|
|
32041
32133
|
var teardownFlags = {};
|
|
32042
32134
|
var doctorFlags = {};
|
|
32043
32135
|
var initFlags = {};
|
|
32044
32136
|
var searchFlags2 = {
|
|
32045
32137
|
limit: flag.number({
|
|
32046
|
-
description: "Maximum
|
|
32138
|
+
description: "Maximum results per page"
|
|
32047
32139
|
}),
|
|
32048
32140
|
cursor: flag.string({ description: "Opaque pagination cursor" }),
|
|
32049
32141
|
all: flag.boolean({
|
|
@@ -32089,7 +32181,8 @@ var registerFlags = {
|
|
|
32089
32181
|
}),
|
|
32090
32182
|
"no-minted-tokens": flag.boolean({
|
|
32091
32183
|
description: "Disable minted tokens (default)"
|
|
32092
|
-
})
|
|
32184
|
+
}),
|
|
32185
|
+
"show-secrets": showSecretsFlag
|
|
32093
32186
|
};
|
|
32094
32187
|
function readManifestArg(path2) {
|
|
32095
32188
|
let raw;
|
|
@@ -32113,9 +32206,12 @@ var unregisterFlags = {};
|
|
|
32113
32206
|
var registryListFlags = {
|
|
32114
32207
|
org: flag.string({
|
|
32115
32208
|
description: "Owner org to list registrations for"
|
|
32116
|
-
})
|
|
32209
|
+
}),
|
|
32210
|
+
"show-secrets": showSecretsStructuredOutputFlag
|
|
32211
|
+
};
|
|
32212
|
+
var registryViewFlags = {
|
|
32213
|
+
"show-secrets": showSecretsFlag
|
|
32117
32214
|
};
|
|
32118
|
-
var registryViewFlags = {};
|
|
32119
32215
|
var registryUpdateFlags = {
|
|
32120
32216
|
manifest: flag.string({
|
|
32121
32217
|
description: "Path to a manifest.json to publish as a new version (optional; must have a strictly-greater semver)"
|
|
@@ -32154,7 +32250,8 @@ var registryUpdateFlags = {
|
|
|
32154
32250
|
}),
|
|
32155
32251
|
"no-minted-tokens": flag.boolean({
|
|
32156
32252
|
description: "Disable minted tokens"
|
|
32157
|
-
})
|
|
32253
|
+
}),
|
|
32254
|
+
"show-secrets": showSecretsFlag
|
|
32158
32255
|
};
|
|
32159
32256
|
function asRecord(value) {
|
|
32160
32257
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
@@ -32248,7 +32345,8 @@ var handleRegister = async (ctx, { flags, args }) => {
|
|
|
32248
32345
|
if (reservedWarning) {
|
|
32249
32346
|
ctx.err(reservedWarning);
|
|
32250
32347
|
}
|
|
32251
|
-
|
|
32348
|
+
const output = redactRegistryEntryLifecycleUrls(result, flags["show-secrets"]);
|
|
32349
|
+
writeOutput(ctx, output, () => renderRegistryEntry(ctx, output));
|
|
32252
32350
|
};
|
|
32253
32351
|
var handleUnregister = async (ctx, { args }) => {
|
|
32254
32352
|
const { orgName, componentName } = resolveRegisteredComponentRef(args[0], "Usage: wh component unregister <org/name>", "wh component unregister warmhub/veritas");
|
|
@@ -32263,12 +32361,14 @@ var handleRegistryList = async (ctx, { flags, args }) => {
|
|
|
32263
32361
|
usageError("Usage: wh component registry list --org <org>", "wh component registry list --org warmhub");
|
|
32264
32362
|
}
|
|
32265
32363
|
const result = await ctx.client.component.registry.list(orgName);
|
|
32266
|
-
|
|
32364
|
+
const items = redactRegistryEntryListLifecycleUrls(result.items, flags["show-secrets"]);
|
|
32365
|
+
writePageOutput(ctx, items, { limit: items.length, nextCursor: null }, () => renderRegistryList(ctx, orgName, { ...result, items }));
|
|
32267
32366
|
};
|
|
32268
|
-
var handleRegistryView = async (ctx, { args }) => {
|
|
32367
|
+
var handleRegistryView = async (ctx, { flags, args }) => {
|
|
32269
32368
|
const { orgName, componentName } = resolveRegisteredComponentRef(args[0], "Usage: wh component registry view <org/name>", "wh component registry view warmhub/veritas");
|
|
32270
32369
|
const result = await ctx.client.component.registry.view(orgName, componentName);
|
|
32271
|
-
|
|
32370
|
+
const output = redactRegistryEntryLifecycleUrls(result, flags["show-secrets"]);
|
|
32371
|
+
writeOutput(ctx, output, () => renderRegistryEntry(ctx, output));
|
|
32272
32372
|
};
|
|
32273
32373
|
var handleRegistryUpdate = async (ctx, { flags, args }) => {
|
|
32274
32374
|
const { orgName, componentName } = resolveRegisteredComponentRef(args[0], "Usage: wh component registry update <org/name> [flags]", "wh component registry update warmhub/veritas --public");
|
|
@@ -32296,9 +32396,10 @@ var handleRegistryUpdate = async (ctx, { flags, args }) => {
|
|
|
32296
32396
|
description: flags.description,
|
|
32297
32397
|
mintedTokens
|
|
32298
32398
|
});
|
|
32299
|
-
|
|
32399
|
+
const output = redactRegistryEntryLifecycleUrls(result, flags["show-secrets"]);
|
|
32400
|
+
writeOutput(ctx, output, () => renderRegistryEntry(ctx, output));
|
|
32300
32401
|
};
|
|
32301
|
-
var handleInstall = async (
|
|
32402
|
+
var handleInstall = async (_ctx, { args }) => {
|
|
32302
32403
|
const source = args[0];
|
|
32303
32404
|
const usage = "Usage: wh component install <org/name> --repo org/repo";
|
|
32304
32405
|
const example = "wh component install warmhub/veritas --repo myorg/myrepo";
|
|
@@ -32331,9 +32432,12 @@ var handleList2 = async (ctx, { flags }) => {
|
|
|
32331
32432
|
const c = ctx.colors;
|
|
32332
32433
|
const { items, nextCursor } = await fetchComponentPages(ctx.client, org, repo, { all: flags.all, limit: flags.limit, cursor: flags.cursor });
|
|
32333
32434
|
if (!flags.all && nextCursor) {
|
|
32334
|
-
ctx
|
|
32435
|
+
emitPartialPageHint(ctx, items.length, nextCursor, Math.min(flags.limit ?? DEFAULT_COMPONENT_LIST_LIMIT, MAX_COMPONENT_LIST_LIMIT));
|
|
32335
32436
|
}
|
|
32336
|
-
|
|
32437
|
+
writePageOutput(ctx, items, {
|
|
32438
|
+
limit: Math.min(flags.limit ?? DEFAULT_COMPONENT_LIST_LIMIT, MAX_COMPONENT_LIST_LIMIT),
|
|
32439
|
+
nextCursor: flags.all ? null : nextCursor ?? null
|
|
32440
|
+
}, () => {
|
|
32337
32441
|
if (!items.length) {
|
|
32338
32442
|
ctx.status(`${c.dim}No components installed${c.reset}`);
|
|
32339
32443
|
return;
|
|
@@ -32352,30 +32456,20 @@ var handleList2 = async (ctx, { flags }) => {
|
|
|
32352
32456
|
var handleSearch2 = async (ctx, { flags, args }) => {
|
|
32353
32457
|
const query = args[0]?.trim();
|
|
32354
32458
|
if (!query) {
|
|
32355
|
-
usageError("Usage: wh component search <query>
|
|
32459
|
+
usageError("Usage: wh component search <query>", 'wh component search "subjective logic"');
|
|
32356
32460
|
}
|
|
32357
|
-
|
|
32358
|
-
|
|
32359
|
-
|
|
32360
|
-
const needle = query.toLowerCase();
|
|
32361
|
-
const items = allItems.filter((item) => [item.ref, item.componentName, item.source].filter((value) => typeof value === "string").some((value) => value.toLowerCase().includes(needle)));
|
|
32362
|
-
if (!flags.all && nextCursor) {
|
|
32363
|
-
ctx.status(`${c.yellow}${allItems.length} component(s) searched, more pages available${c.reset} — matches beyond this page were not searched. ` + `Use ${c.cyan}--all${c.reset} to search every page, ` + `or re-run the same command plus ${c.cyan}--cursor=${nextCursor}${c.reset} to continue from here.`);
|
|
32461
|
+
if (getRepoRef(ctx)) {
|
|
32462
|
+
const c = ctx.colors;
|
|
32463
|
+
ctx.status(`${c.dim}--repo is ignored: \`wh component search\` searches the cross-org registry. ` + `Use \`wh component list --repo <org/repo>\` to see installed components.${c.reset}`);
|
|
32364
32464
|
}
|
|
32365
|
-
|
|
32366
|
-
|
|
32367
|
-
|
|
32368
|
-
|
|
32369
|
-
|
|
32370
|
-
ctx.
|
|
32371
|
-
|
|
32372
|
-
|
|
32373
|
-
const version = item.version ?? "unknown";
|
|
32374
|
-
const state = item.state ?? "unknown";
|
|
32375
|
-
const source = item.source ?? "-";
|
|
32376
|
-
const stateColor = stateToColor(c, state);
|
|
32377
|
-
ctx.out(` ${c.cyan}${item.ref ?? item.componentName}${c.reset} ${stateColor}${state}${c.reset} ${c.dim}v${version}${c.reset} ${source}`);
|
|
32378
|
-
}
|
|
32465
|
+
await runGlobalSearchCommand(ctx, {
|
|
32466
|
+
query,
|
|
32467
|
+
all: flags.all,
|
|
32468
|
+
limit: flags.limit,
|
|
32469
|
+
cursor: flags.cursor,
|
|
32470
|
+
fetch: (opts) => ctx.client.component.search(query, opts),
|
|
32471
|
+
title: "Component search",
|
|
32472
|
+
emptyLabel: "public components"
|
|
32379
32473
|
});
|
|
32380
32474
|
};
|
|
32381
32475
|
var handleView3 = async (ctx, { args }) => {
|
|
@@ -32479,31 +32573,25 @@ var handleTeardown = async (ctx, { args }) => {
|
|
|
32479
32573
|
}
|
|
32480
32574
|
const { org, repo } = parseOrgRepo(getRepoRef(ctx), ctx.config);
|
|
32481
32575
|
const repoSlug = `${org}/${repo}`;
|
|
32482
|
-
const componentId = await resolveInstalledComponentRefId(ctx.client, org, repo, name);
|
|
32483
32576
|
let result;
|
|
32484
32577
|
try {
|
|
32485
|
-
result = await
|
|
32578
|
+
result = await ctx.client.component.uninstall(org, repo, name);
|
|
32486
32579
|
} catch (error) {
|
|
32487
32580
|
invalidateInstallSnapshotCache(repoSlug);
|
|
32488
32581
|
throw error;
|
|
32489
32582
|
}
|
|
32490
|
-
|
|
32491
|
-
|
|
32492
|
-
|
|
32493
|
-
|
|
32494
|
-
await refreshInstallSnapshotCache(repoSlug, ctx.client);
|
|
32495
|
-
} catch {}
|
|
32496
|
-
}
|
|
32583
|
+
invalidateInstallSnapshotCache(repoSlug);
|
|
32584
|
+
try {
|
|
32585
|
+
await refreshInstallSnapshotCache(repoSlug, ctx.client);
|
|
32586
|
+
} catch {}
|
|
32497
32587
|
writeOutput(ctx, result, () => renderTeardownResult(ctx, result));
|
|
32498
|
-
if (result.errors.length > 0) {
|
|
32499
|
-
throw new CliError(1 /* Runtime */, "UNKNOWN", "Teardown had errors");
|
|
32500
|
-
}
|
|
32501
32588
|
};
|
|
32502
32589
|
function stateToColor(c, state) {
|
|
32503
32590
|
switch (state) {
|
|
32504
32591
|
case "ready":
|
|
32505
32592
|
return c.green;
|
|
32506
32593
|
case "paused":
|
|
32594
|
+
case "uninstalled":
|
|
32507
32595
|
return c.yellow;
|
|
32508
32596
|
case "degraded":
|
|
32509
32597
|
return c.red;
|
|
@@ -32529,12 +32617,15 @@ function renderTeardownResult(ctx, result) {
|
|
|
32529
32617
|
const c = ctx.colors;
|
|
32530
32618
|
const stateColor = stateToColor(c, result.state);
|
|
32531
32619
|
ctx.out(`${c.bold}Teardown:${c.reset} ${c.cyan}${result.componentName}${c.reset} ${stateColor}${result.state}${c.reset}`);
|
|
32532
|
-
|
|
32533
|
-
|
|
32534
|
-
|
|
32620
|
+
if (result.pausedSubscriptions.length > 0) {
|
|
32621
|
+
ctx.out(` ${c.green}paused${c.reset} ${result.pausedSubscriptions.length} subscription(s): ${result.pausedSubscriptions.join(", ")}`);
|
|
32622
|
+
}
|
|
32623
|
+
if (result.tokensRevoked > 0) {
|
|
32624
|
+
ctx.out(` ${c.green}revoked${c.reset} ${result.tokensRevoked} token(s)`);
|
|
32535
32625
|
}
|
|
32536
|
-
|
|
32537
|
-
|
|
32626
|
+
ctx.out(` uninstall callback: ${result.uninstallDispatched ? `${c.green}dispatched${c.reset}` : `${c.dim}not dispatched${c.reset}`}`);
|
|
32627
|
+
for (const warning of result.warnings) {
|
|
32628
|
+
ctx.out(` ${c.yellow}warning${c.reset}: ${warning}`);
|
|
32538
32629
|
}
|
|
32539
32630
|
}
|
|
32540
32631
|
function renderRegistryEntry(ctx, entry) {
|
|
@@ -32550,10 +32641,10 @@ function renderRegistryEntry(ctx, entry) {
|
|
|
32550
32641
|
ctx.out(` Source: ${c.dim}(not installable — no source URL)${c.reset}`);
|
|
32551
32642
|
}
|
|
32552
32643
|
if (entry.setupUrl) {
|
|
32553
|
-
ctx.out(` Setup: ${entry.setupUrl}`);
|
|
32644
|
+
ctx.out(` Setup: ${formatLifecycleUrl(entry.setupUrl, c)}`);
|
|
32554
32645
|
}
|
|
32555
32646
|
if (entry.uninstallUrl) {
|
|
32556
|
-
ctx.out(` Uninstall: ${entry.uninstallUrl}`);
|
|
32647
|
+
ctx.out(` Uninstall: ${formatLifecycleUrl(entry.uninstallUrl, c)}`);
|
|
32557
32648
|
}
|
|
32558
32649
|
if (entry.credentialSetName || entry.credentialSetId) {
|
|
32559
32650
|
ctx.out(` Credential set: ${entry.credentialSetName ?? entry.credentialSetId}`);
|
|
@@ -32563,6 +32654,43 @@ function renderRegistryEntry(ctx, entry) {
|
|
|
32563
32654
|
}
|
|
32564
32655
|
ctx.out(` ${c.dim}Updated: ${new Date(entry.updatedAt).toISOString().slice(0, 16)}${c.reset}`);
|
|
32565
32656
|
}
|
|
32657
|
+
function redactRegistryEntryLifecycleUrls(entry, showSecrets) {
|
|
32658
|
+
if (showSecrets)
|
|
32659
|
+
return entry;
|
|
32660
|
+
return {
|
|
32661
|
+
...entry,
|
|
32662
|
+
...entry.setupUrl ? { setupUrl: redactSecretBearingUrl(entry.setupUrl) } : {},
|
|
32663
|
+
...entry.uninstallUrl ? { uninstallUrl: redactSecretBearingUrl(entry.uninstallUrl) } : {}
|
|
32664
|
+
};
|
|
32665
|
+
}
|
|
32666
|
+
function redactRegistryEntryListLifecycleUrls(entries, showSecrets) {
|
|
32667
|
+
if (showSecrets)
|
|
32668
|
+
return entries;
|
|
32669
|
+
return entries.map((entry) => redactRegistryEntryLifecycleUrls(entry, showSecrets));
|
|
32670
|
+
}
|
|
32671
|
+
var REDACTED_LIFECYCLE_URL = "[redacted-url]";
|
|
32672
|
+
var REDACTED_LIFECYCLE_PATH_SUFFIX = "/***";
|
|
32673
|
+
function redactSecretBearingUrl(rawUrl) {
|
|
32674
|
+
try {
|
|
32675
|
+
const origin = new URL(rawUrl).origin;
|
|
32676
|
+
if (origin === "null") {
|
|
32677
|
+
return REDACTED_LIFECYCLE_URL;
|
|
32678
|
+
}
|
|
32679
|
+
return `${origin}${REDACTED_LIFECYCLE_PATH_SUFFIX}`;
|
|
32680
|
+
} catch {
|
|
32681
|
+
return REDACTED_LIFECYCLE_URL;
|
|
32682
|
+
}
|
|
32683
|
+
}
|
|
32684
|
+
function formatLifecycleUrl(url, colors) {
|
|
32685
|
+
if (url === REDACTED_LIFECYCLE_URL) {
|
|
32686
|
+
return `${colors.dim}${url}${colors.reset}`;
|
|
32687
|
+
}
|
|
32688
|
+
if (url.endsWith(REDACTED_LIFECYCLE_PATH_SUFFIX)) {
|
|
32689
|
+
const visiblePrefix = url.slice(0, -REDACTED_LIFECYCLE_PATH_SUFFIX.length);
|
|
32690
|
+
return `${visiblePrefix}${colors.dim}${REDACTED_LIFECYCLE_PATH_SUFFIX}${colors.reset}`;
|
|
32691
|
+
}
|
|
32692
|
+
return url;
|
|
32693
|
+
}
|
|
32566
32694
|
function renderRegistryList(ctx, orgName, result) {
|
|
32567
32695
|
const c = ctx.colors;
|
|
32568
32696
|
if (!result.items.length) {
|
|
@@ -32686,10 +32814,13 @@ var COMPONENT_DOMAIN = defineDomain({
|
|
|
32686
32814
|
handler: handleComponentExec
|
|
32687
32815
|
},
|
|
32688
32816
|
search: {
|
|
32689
|
-
summary: "Search
|
|
32817
|
+
summary: "Search public components across all orgs (the registry). To list components installed in a repo, use `wh component list --repo`.",
|
|
32690
32818
|
args: "<query>",
|
|
32691
32819
|
flags: searchFlags2,
|
|
32692
|
-
examples: [
|
|
32820
|
+
examples: [
|
|
32821
|
+
'wh component search "subjective logic"',
|
|
32822
|
+
"wh component search reputation"
|
|
32823
|
+
],
|
|
32693
32824
|
handler: handleSearch2
|
|
32694
32825
|
}
|
|
32695
32826
|
},
|
|
@@ -32812,7 +32943,7 @@ var handleCreate3 = async (ctx, { flags, args }) => {
|
|
|
32812
32943
|
var handleList3 = async (ctx, { flags }) => {
|
|
32813
32944
|
const context = resolveCredentialContext({ ctx, orgFlag: flags.org });
|
|
32814
32945
|
const items = await ctx.client.credential.listSets(context.org, context.repo);
|
|
32815
|
-
|
|
32946
|
+
writePageOutput(ctx, items, { limit: items.length, nextCursor: null }, () => {
|
|
32816
32947
|
const c = ctx.colors;
|
|
32817
32948
|
if (!items.length) {
|
|
32818
32949
|
ctx.status(`${c.dim}No credential sets in ${formatCredentialContextTarget(context)}${c.reset}`);
|
|
@@ -32963,7 +33094,7 @@ var handleAudit = async (ctx, { flags, args }) => {
|
|
|
32963
33094
|
limit: flags.limit
|
|
32964
33095
|
})
|
|
32965
33096
|
});
|
|
32966
|
-
|
|
33097
|
+
writePageOutput(ctx, entries, { limit: flags.limit ?? entries.length, nextCursor: null }, () => {
|
|
32967
33098
|
const c = ctx.colors;
|
|
32968
33099
|
if (!entries.length) {
|
|
32969
33100
|
ctx.status(`${c.dim}No audit entries for ${setName}${c.reset}`);
|
|
@@ -33372,7 +33503,7 @@ function comparePrereleaseIdentifiers2(a, b) {
|
|
|
33372
33503
|
return -1;
|
|
33373
33504
|
if (!aNum && bNum)
|
|
33374
33505
|
return 1;
|
|
33375
|
-
return a
|
|
33506
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
33376
33507
|
}
|
|
33377
33508
|
function compareVersions(candidate, current) {
|
|
33378
33509
|
if (candidate.major !== current.major)
|
|
@@ -34035,7 +34166,7 @@ var handleNotifications = async (ctx, { flags }) => {
|
|
|
34035
34166
|
since: parseSince(flags.since, usage, example),
|
|
34036
34167
|
limit: flags.limit
|
|
34037
34168
|
});
|
|
34038
|
-
|
|
34169
|
+
writePageOutput(ctx, result, { limit: flags.limit ?? result.length, nextCursor: null }, () => renderActionNotifications(ctx.out, ctx.status, ctx.colors, result));
|
|
34039
34170
|
};
|
|
34040
34171
|
var NOTIFICATIONS_DOMAIN = defineDomain({
|
|
34041
34172
|
kind: "flat",
|
|
@@ -34108,7 +34239,7 @@ var handleList4 = async (ctx, { flags }) => {
|
|
|
34108
34239
|
const result = await ctx.client.org.list({
|
|
34109
34240
|
includeArchived: flags["include-archived"]
|
|
34110
34241
|
});
|
|
34111
|
-
|
|
34242
|
+
writePageOutput(ctx, result.items, { limit: result.items.length, nextCursor: null }, () => {
|
|
34112
34243
|
if (!result.items.length) {
|
|
34113
34244
|
ctx.status(`${c.dim}No organizations${c.reset}`);
|
|
34114
34245
|
return;
|
|
@@ -34870,6 +35001,8 @@ var repoListFlags = {
|
|
|
34870
35001
|
description: "Fetch all pages (auto-paginate until exhausted)"
|
|
34871
35002
|
})
|
|
34872
35003
|
};
|
|
35004
|
+
var DEFAULT_REPO_LIST_LIMIT = 50;
|
|
35005
|
+
var MAX_REPO_LIST_LIMIT = 200;
|
|
34873
35006
|
var handleList5 = async (ctx, { flags, args }) => {
|
|
34874
35007
|
const orgName = args[0] ?? ctx.config.defaultOrg;
|
|
34875
35008
|
if (!orgName) {
|
|
@@ -34897,9 +35030,12 @@ var handleList5 = async (ctx, { flags, args }) => {
|
|
|
34897
35030
|
}
|
|
34898
35031
|
}
|
|
34899
35032
|
if (!all && nextCursor) {
|
|
34900
|
-
ctx
|
|
35033
|
+
emitPartialPageHint(ctx, items.length, nextCursor, Math.min(flags.limit ?? DEFAULT_REPO_LIST_LIMIT, MAX_REPO_LIST_LIMIT));
|
|
34901
35034
|
}
|
|
34902
|
-
|
|
35035
|
+
writePageOutput(ctx, items, {
|
|
35036
|
+
limit: Math.min(flags.limit ?? DEFAULT_REPO_LIST_LIMIT, MAX_REPO_LIST_LIMIT),
|
|
35037
|
+
nextCursor: all ? null : nextCursor ?? null
|
|
35038
|
+
}, () => {
|
|
34903
35039
|
if (!items.length) {
|
|
34904
35040
|
ctx.status(`${c.dim}No repos in ${orgName}${c.reset}`);
|
|
34905
35041
|
return;
|
|
@@ -35420,6 +35556,30 @@ var CONTENT_SUBDOMAIN = defineDomain({
|
|
|
35420
35556
|
}
|
|
35421
35557
|
}
|
|
35422
35558
|
});
|
|
35559
|
+
var repoSearchFlags = {
|
|
35560
|
+
limit: flag.number({
|
|
35561
|
+
description: "Maximum results per page (default: 25, max: 100)"
|
|
35562
|
+
}),
|
|
35563
|
+
cursor: flag.string({ description: "Opaque pagination cursor" }),
|
|
35564
|
+
all: flag.boolean({
|
|
35565
|
+
description: "Fetch all pages (auto-paginate until exhausted)"
|
|
35566
|
+
})
|
|
35567
|
+
};
|
|
35568
|
+
var handleRepoSearch = async (ctx, { flags, args }) => {
|
|
35569
|
+
const query = args[0]?.trim();
|
|
35570
|
+
if (!query) {
|
|
35571
|
+
usageError("Usage: wh repo search <query>", 'wh repo search "payment processing"');
|
|
35572
|
+
}
|
|
35573
|
+
await runGlobalSearchCommand(ctx, {
|
|
35574
|
+
query,
|
|
35575
|
+
all: flags.all,
|
|
35576
|
+
limit: flags.limit,
|
|
35577
|
+
cursor: flags.cursor,
|
|
35578
|
+
fetch: (opts) => ctx.client.repo.search(query, opts),
|
|
35579
|
+
title: "Repo search",
|
|
35580
|
+
emptyLabel: "public repos"
|
|
35581
|
+
});
|
|
35582
|
+
};
|
|
35423
35583
|
var REPO_DOMAIN = defineDomain({
|
|
35424
35584
|
name: "repo",
|
|
35425
35585
|
summary: "Repository management",
|
|
@@ -35450,6 +35610,14 @@ var REPO_DOMAIN = defineDomain({
|
|
|
35450
35610
|
],
|
|
35451
35611
|
handler: handleList5
|
|
35452
35612
|
},
|
|
35613
|
+
search: {
|
|
35614
|
+
prime: true,
|
|
35615
|
+
summary: "Search public repos across all orgs",
|
|
35616
|
+
args: "<query>",
|
|
35617
|
+
flags: repoSearchFlags,
|
|
35618
|
+
examples: ["wh repo search users", "wh repo search users --limit 10"],
|
|
35619
|
+
handler: handleRepoSearch
|
|
35620
|
+
},
|
|
35453
35621
|
view: {
|
|
35454
35622
|
prime: true,
|
|
35455
35623
|
summary: "Show repo details",
|
|
@@ -35576,7 +35744,7 @@ var handleList6 = async (ctx, { flags }) => {
|
|
|
35576
35744
|
includeRetracted
|
|
35577
35745
|
});
|
|
35578
35746
|
const items = result.items;
|
|
35579
|
-
|
|
35747
|
+
writePageOutput(ctx, items, { limit: items.length, nextCursor: null }, () => {
|
|
35580
35748
|
if (!items.length) {
|
|
35581
35749
|
ctx.status(`${c.dim}No shapes registered${c.reset}`);
|
|
35582
35750
|
return;
|
|
@@ -35813,7 +35981,7 @@ var handleHistory3 = async (ctx, { flags, args }) => {
|
|
|
35813
35981
|
if (!all && result.nextCursor) {
|
|
35814
35982
|
emitPartialPageHint(ctx, (result.versions ?? []).length, result.nextCursor, pageLimit);
|
|
35815
35983
|
}
|
|
35816
|
-
|
|
35984
|
+
writePageOutput(ctx, result.versions ?? [], { limit: pageLimit, nextCursor: result.nextCursor ?? null }, () => renderHistory(ctx.out, ctx.colors, result));
|
|
35817
35985
|
};
|
|
35818
35986
|
var handleShapeRename = async (ctx, { args }) => {
|
|
35819
35987
|
const oldName = args[0];
|
|
@@ -36255,7 +36423,7 @@ var handleList7 = async (ctx, { flags }) => {
|
|
|
36255
36423
|
const { org, repo } = resolveRepoContext(ctx);
|
|
36256
36424
|
const all = await ctx.client.subscription.list(org, repo);
|
|
36257
36425
|
const items = all.slice(0, flags.limit ?? all.length);
|
|
36258
|
-
|
|
36426
|
+
writePageOutput(ctx, items, { limit: flags.limit ?? all.length, nextCursor: null }, () => {
|
|
36259
36427
|
const c = ctx.colors;
|
|
36260
36428
|
if (!items.length) {
|
|
36261
36429
|
ctx.status(`${c.dim}No subscriptions in ${org}/${repo}${c.reset}`);
|
|
@@ -36722,7 +36890,7 @@ var handleCreate8 = async (ctx, { flags }) => {
|
|
|
36722
36890
|
var handleList8 = async (ctx, { flags }) => {
|
|
36723
36891
|
const c = ctx.colors;
|
|
36724
36892
|
const items = await ctx.client.token.list({ includeInactive: flags.all });
|
|
36725
|
-
|
|
36893
|
+
writePageOutput(ctx, items, { limit: items.length, nextCursor: null }, () => {
|
|
36726
36894
|
if (!items.length) {
|
|
36727
36895
|
ctx.status(`${c.dim}No tokens${c.reset}`);
|
|
36728
36896
|
return;
|
|
@@ -37970,862 +38138,6 @@ async function dispatch(ctx) {
|
|
|
37970
38138
|
const hint = ctx._domainHint ? ` ${ctx._domainHint}` : "";
|
|
37971
38139
|
throw new CliError(2 /* UserInput */, "USER_INPUT", `Unknown command: ${command}`, undefined, hint.trim() || "Run 'wh help' for available commands.");
|
|
37972
38140
|
}
|
|
37973
|
-
// ../../packages/warmhub-cli/src/manifest/action-compiler.ts
|
|
37974
|
-
function compileSubscription(subscription) {
|
|
37975
|
-
if (!subscription.webhookUrl || subscription.webhookUrl.trim().length === 0) {
|
|
37976
|
-
throw new Error(`Subscription "${subscription.name}" must declare a non-empty "webhookUrl".`);
|
|
37977
|
-
}
|
|
37978
|
-
if (subscription.trigger.kind === "cron") {
|
|
37979
|
-
throw new Error(`Subscription "${subscription.name}" uses a cron trigger; cron subscriptions are no longer supported. Use an event trigger instead.`);
|
|
37980
|
-
}
|
|
37981
|
-
if (subscription.trigger.kind === "event") {
|
|
37982
|
-
return {
|
|
37983
|
-
name: subscription.name,
|
|
37984
|
-
kind: "webhook",
|
|
37985
|
-
shapeName: subscription.trigger.shape,
|
|
37986
|
-
filterJson: subscription.trigger.filter ?? {
|
|
37987
|
-
shape: subscription.trigger.shape
|
|
37988
|
-
},
|
|
37989
|
-
webhookUrl: subscription.webhookUrl,
|
|
37990
|
-
fallbackWebhookUrl: subscription.fallbackWebhookUrl,
|
|
37991
|
-
credentials: subscription.credentials ?? []
|
|
37992
|
-
};
|
|
37993
|
-
}
|
|
37994
|
-
const triggerKind = subscription.trigger.kind;
|
|
37995
|
-
throw new Error(`Subscription "${subscription.name}" has unsupported trigger kind "${triggerKind}".`);
|
|
37996
|
-
}
|
|
37997
|
-
// ../../packages/warmhub-cli/src/manifest/reconciler.ts
|
|
37998
|
-
function normalizeCredentialBindings(names) {
|
|
37999
|
-
return [...new Set(names)].sort();
|
|
38000
|
-
}
|
|
38001
|
-
async function reconcileComponent(client, org, repo, pkg, source, existingInstall) {
|
|
38002
|
-
const steps = [];
|
|
38003
|
-
const errors = [];
|
|
38004
|
-
const { meta, manifest } = pkg;
|
|
38005
|
-
const componentId = meta.id;
|
|
38006
|
-
const componentRef = source.registeredComponentRef;
|
|
38007
|
-
const validation = validateComponentPackage(pkg);
|
|
38008
|
-
if (!validation.valid) {
|
|
38009
|
-
const validationErrors = validation.findings.filter((f) => f.level === "error").map((f) => f.message);
|
|
38010
|
-
return {
|
|
38011
|
-
ok: false,
|
|
38012
|
-
componentId,
|
|
38013
|
-
componentName: meta.name,
|
|
38014
|
-
version: meta.version,
|
|
38015
|
-
state: "error",
|
|
38016
|
-
steps: [
|
|
38017
|
-
{
|
|
38018
|
-
step: "validate",
|
|
38019
|
-
status: "error",
|
|
38020
|
-
message: validationErrors.join("; ")
|
|
38021
|
-
}
|
|
38022
|
-
],
|
|
38023
|
-
errors: validationErrors,
|
|
38024
|
-
setupCreates: []
|
|
38025
|
-
};
|
|
38026
|
-
}
|
|
38027
|
-
steps.push({ step: "validate", status: "ok" });
|
|
38028
|
-
const partitionedShapes = partitionByProvisioning(manifest.shapes, "Shape");
|
|
38029
|
-
const partitionedCreds = partitionByProvisioning(manifest.credentials, "CredentialSet");
|
|
38030
|
-
const partitionedSubs = partitionByProvisioning(manifest.subscriptions, "Subscription");
|
|
38031
|
-
const setupCreates = [
|
|
38032
|
-
...partitionedShapes.setupRefs,
|
|
38033
|
-
...partitionedCreds.setupRefs,
|
|
38034
|
-
...partitionedSubs.setupRefs
|
|
38035
|
-
];
|
|
38036
|
-
const reconcileShapes = partitionedShapes.manifestEntries;
|
|
38037
|
-
const reconcileCreds = partitionedCreds.manifestEntries;
|
|
38038
|
-
const reconcileSubs = partitionedSubs.manifestEntries;
|
|
38039
|
-
await ensureSharedInfra(client, org, repo);
|
|
38040
|
-
steps.push({ step: "ensure-shared-infra", status: "ok" });
|
|
38041
|
-
const existingData = existingInstall.data;
|
|
38042
|
-
const persistedInstallId = typeof existingData?.installId === "string" ? existingData.installId : null;
|
|
38043
|
-
let oldManifest;
|
|
38044
|
-
if (existingData?.manifest && typeof existingData.manifest === "string") {
|
|
38045
|
-
try {
|
|
38046
|
-
oldManifest = JSON.parse(existingData.manifest);
|
|
38047
|
-
} catch {}
|
|
38048
|
-
}
|
|
38049
|
-
const previousState = typeof existingData?.state === "string" ? existingData.state : "";
|
|
38050
|
-
const isFailedInstallState = previousState === "error" || previousState === "installing";
|
|
38051
|
-
const wasIncomplete = isFailedInstallState;
|
|
38052
|
-
const oldShapeNames = wasIncomplete ? new Set : new Set(oldManifest?.shapes?.map((s) => s.name) ?? []);
|
|
38053
|
-
const oldSubNames = wasIncomplete ? new Set : new Set(oldManifest?.subscriptions?.map((s) => s.name) ?? []);
|
|
38054
|
-
const oldCredNames = wasIncomplete ? new Set : new Set(oldManifest?.credentials?.map((c) => c.name) ?? []);
|
|
38055
|
-
const liveShapeNames = new Set;
|
|
38056
|
-
const liveShapeDataByName = new Map;
|
|
38057
|
-
const liveShapeComponentRefByName = new Map;
|
|
38058
|
-
for (const shape of reconcileShapes) {
|
|
38059
|
-
if (isFailedInstallState || previousState !== "degraded" && !oldShapeNames.has(shape.name)) {
|
|
38060
|
-
continue;
|
|
38061
|
-
}
|
|
38062
|
-
try {
|
|
38063
|
-
const liveThing = await client.thing.get(org, repo, shape.name, undefined, {
|
|
38064
|
-
includeRetracted: true
|
|
38065
|
-
});
|
|
38066
|
-
if (liveThing.active === false)
|
|
38067
|
-
continue;
|
|
38068
|
-
liveShapeNames.add(shape.name);
|
|
38069
|
-
try {
|
|
38070
|
-
const liveShape = await client.shape.get(org, repo, shape.name, {
|
|
38071
|
-
includeRetracted: true
|
|
38072
|
-
});
|
|
38073
|
-
liveShapeDataByName.set(shape.name, liveShape.version?.data);
|
|
38074
|
-
liveShapeComponentRefByName.set(shape.name, liveShape.componentRef);
|
|
38075
|
-
} catch {}
|
|
38076
|
-
} catch {}
|
|
38077
|
-
}
|
|
38078
|
-
const liveSubNames = new Set;
|
|
38079
|
-
for (const sub of reconcileSubs) {
|
|
38080
|
-
if (wasIncomplete || !oldSubNames.has(sub.name))
|
|
38081
|
-
continue;
|
|
38082
|
-
try {
|
|
38083
|
-
await client.subscription.get(org, repo, sub.name);
|
|
38084
|
-
liveSubNames.add(sub.name);
|
|
38085
|
-
} catch {}
|
|
38086
|
-
}
|
|
38087
|
-
const liveCredNames = new Set;
|
|
38088
|
-
for (const cred of reconcileCreds) {
|
|
38089
|
-
if (wasIncomplete || !oldCredNames.has(cred.name))
|
|
38090
|
-
continue;
|
|
38091
|
-
const credentialSetName = resolveManifestCredentialName(cred.name, {
|
|
38092
|
-
orgName: org,
|
|
38093
|
-
repoName: repo
|
|
38094
|
-
});
|
|
38095
|
-
try {
|
|
38096
|
-
await client.credential.getSet(org, repo, credentialSetName);
|
|
38097
|
-
liveCredNames.add(cred.name);
|
|
38098
|
-
} catch {}
|
|
38099
|
-
}
|
|
38100
|
-
const newShapes = reconcileShapes.filter((s) => !liveShapeNames.has(s.name));
|
|
38101
|
-
if (newShapes.length > 0) {
|
|
38102
|
-
const shapeOps = newShapes.map((shape) => ({
|
|
38103
|
-
operation: "add",
|
|
38104
|
-
kind: "shape",
|
|
38105
|
-
name: shape.name,
|
|
38106
|
-
data: manifestShapeData(shape)
|
|
38107
|
-
}));
|
|
38108
|
-
try {
|
|
38109
|
-
await client.commit.apply(org, repo, `Add new shapes for ${meta.name}`, shapeOps, { componentRef });
|
|
38110
|
-
steps.push({ step: "add-new-shapes", status: "ok" });
|
|
38111
|
-
} catch (err) {
|
|
38112
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38113
|
-
if (isAlreadyExistsError(err)) {
|
|
38114
|
-
steps.push({ step: "add-new-shapes", status: "skipped" });
|
|
38115
|
-
} else {
|
|
38116
|
-
errors.push(`Failed to add new shapes: ${msg}`);
|
|
38117
|
-
steps.push({ step: "add-new-shapes", status: "error", message: msg });
|
|
38118
|
-
}
|
|
38119
|
-
}
|
|
38120
|
-
}
|
|
38121
|
-
const changedShapes = reconcileShapes.filter((shape) => {
|
|
38122
|
-
if (!liveShapeNames.has(shape.name))
|
|
38123
|
-
return false;
|
|
38124
|
-
const liveData = liveShapeDataByName.get(shape.name);
|
|
38125
|
-
const liveComponentRef = liveShapeComponentRefByName.get(shape.name);
|
|
38126
|
-
return liveComponentRef !== componentRef || !shapeDataEquals(manifestShapeData(shape), liveData);
|
|
38127
|
-
});
|
|
38128
|
-
if (changedShapes.length > 0) {
|
|
38129
|
-
const shapeOps = changedShapes.map((shape) => ({
|
|
38130
|
-
operation: "revise",
|
|
38131
|
-
kind: "shape",
|
|
38132
|
-
name: shape.name,
|
|
38133
|
-
data: manifestShapeData(shape)
|
|
38134
|
-
}));
|
|
38135
|
-
try {
|
|
38136
|
-
await client.commit.apply(org, repo, `Reconcile shapes for ${meta.name}`, shapeOps, { componentRef });
|
|
38137
|
-
steps.push({ step: "claim-existing-shapes", status: "ok" });
|
|
38138
|
-
} catch (err) {
|
|
38139
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38140
|
-
errors.push(`Failed to reconcile existing shapes: ${msg}`);
|
|
38141
|
-
steps.push({
|
|
38142
|
-
step: "claim-existing-shapes",
|
|
38143
|
-
status: "error",
|
|
38144
|
-
message: msg
|
|
38145
|
-
});
|
|
38146
|
-
}
|
|
38147
|
-
}
|
|
38148
|
-
const newCreds = reconcileCreds.filter((c) => !oldCredNames.has(c.name) || !liveCredNames.has(c.name));
|
|
38149
|
-
for (const cred of newCreds) {
|
|
38150
|
-
const credentialSetName = resolveManifestCredentialName(cred.name, {
|
|
38151
|
-
orgName: org,
|
|
38152
|
-
repoName: repo
|
|
38153
|
-
});
|
|
38154
|
-
try {
|
|
38155
|
-
await client.credential.createSet(org, repo, credentialSetName, {
|
|
38156
|
-
scope: "repo",
|
|
38157
|
-
description: cred.description
|
|
38158
|
-
});
|
|
38159
|
-
steps.push({ step: `add-credential-${credentialSetName}`, status: "ok" });
|
|
38160
|
-
} catch (err) {
|
|
38161
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38162
|
-
if (isAlreadyExistsError(err)) {
|
|
38163
|
-
steps.push({
|
|
38164
|
-
step: `add-credential-${credentialSetName}`,
|
|
38165
|
-
status: "skipped"
|
|
38166
|
-
});
|
|
38167
|
-
} else {
|
|
38168
|
-
errors.push(`Failed to add credential ${credentialSetName}: ${msg}`);
|
|
38169
|
-
steps.push({
|
|
38170
|
-
step: `add-credential-${credentialSetName}`,
|
|
38171
|
-
status: "error",
|
|
38172
|
-
message: msg
|
|
38173
|
-
});
|
|
38174
|
-
}
|
|
38175
|
-
}
|
|
38176
|
-
}
|
|
38177
|
-
const newSubs = reconcileSubs.filter((s) => !oldSubNames.has(s.name) || !liveSubNames.has(s.name));
|
|
38178
|
-
for (const sub of newSubs) {
|
|
38179
|
-
let compiled;
|
|
38180
|
-
try {
|
|
38181
|
-
compiled = compileSubscription(sub);
|
|
38182
|
-
} catch (err) {
|
|
38183
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38184
|
-
errors.push(`Failed to compile subscription ${sub.name}: ${msg}`);
|
|
38185
|
-
steps.push({
|
|
38186
|
-
step: `add-sub-${sub.name}`,
|
|
38187
|
-
status: "error",
|
|
38188
|
-
message: msg
|
|
38189
|
-
});
|
|
38190
|
-
continue;
|
|
38191
|
-
}
|
|
38192
|
-
try {
|
|
38193
|
-
await client.subscription.create({
|
|
38194
|
-
orgName: org,
|
|
38195
|
-
repoName: repo,
|
|
38196
|
-
name: compiled.name,
|
|
38197
|
-
kind: compiled.kind,
|
|
38198
|
-
shapeName: compiled.shapeName,
|
|
38199
|
-
filterJson: compiled.filterJson,
|
|
38200
|
-
webhookUrl: compiled.webhookUrl,
|
|
38201
|
-
fallbackWebhookUrl: compiled.fallbackWebhookUrl,
|
|
38202
|
-
componentRef
|
|
38203
|
-
});
|
|
38204
|
-
steps.push({ step: `add-sub-${sub.name}`, status: "ok" });
|
|
38205
|
-
} catch (err) {
|
|
38206
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38207
|
-
if (isAlreadyExistsError(err)) {
|
|
38208
|
-
steps.push({ step: `add-sub-${sub.name}`, status: "skipped" });
|
|
38209
|
-
} else {
|
|
38210
|
-
errors.push(`Failed to add subscription ${sub.name}: ${msg}`);
|
|
38211
|
-
steps.push({
|
|
38212
|
-
step: `add-sub-${sub.name}`,
|
|
38213
|
-
status: "error",
|
|
38214
|
-
message: msg
|
|
38215
|
-
});
|
|
38216
|
-
}
|
|
38217
|
-
}
|
|
38218
|
-
for (const credName of resolveManifestCredentialNames(compiled.credentials, {
|
|
38219
|
-
orgName: org,
|
|
38220
|
-
repoName: repo
|
|
38221
|
-
})) {
|
|
38222
|
-
try {
|
|
38223
|
-
await client.subscription.bindCredentials(org, repo, compiled.name, credName);
|
|
38224
|
-
} catch {}
|
|
38225
|
-
}
|
|
38226
|
-
}
|
|
38227
|
-
const existingSubs = reconcileSubs.filter((s) => oldSubNames.has(s.name) && liveSubNames.has(s.name));
|
|
38228
|
-
for (const sub of existingSubs) {
|
|
38229
|
-
const stepName = `update-sub-${sub.name}`;
|
|
38230
|
-
let compiled;
|
|
38231
|
-
try {
|
|
38232
|
-
compiled = compileSubscription(sub);
|
|
38233
|
-
} catch (err) {
|
|
38234
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38235
|
-
errors.push(`Failed to compile subscription ${sub.name}: ${msg}`);
|
|
38236
|
-
steps.push({ step: stepName, status: "error", message: msg });
|
|
38237
|
-
continue;
|
|
38238
|
-
}
|
|
38239
|
-
try {
|
|
38240
|
-
const liveSub = await client.subscription.get(org, repo, sub.name);
|
|
38241
|
-
if (liveSub.componentRef && liveSub.componentRef !== componentRef) {
|
|
38242
|
-
const msg = `Subscription "${sub.name}" is owned by component "${liveSub.componentRef}"`;
|
|
38243
|
-
errors.push(msg);
|
|
38244
|
-
steps.push({ step: stepName, status: "error", message: msg });
|
|
38245
|
-
continue;
|
|
38246
|
-
}
|
|
38247
|
-
const replacedLegacyCron = liveSub.kind === "cron";
|
|
38248
|
-
if (replacedLegacyCron) {
|
|
38249
|
-
await client.subscription.remove(org, repo, sub.name);
|
|
38250
|
-
try {
|
|
38251
|
-
await client.subscription.create({
|
|
38252
|
-
orgName: org,
|
|
38253
|
-
repoName: repo,
|
|
38254
|
-
name: compiled.name,
|
|
38255
|
-
kind: compiled.kind,
|
|
38256
|
-
shapeName: compiled.shapeName,
|
|
38257
|
-
filterJson: compiled.filterJson,
|
|
38258
|
-
webhookUrl: compiled.webhookUrl,
|
|
38259
|
-
fallbackWebhookUrl: compiled.fallbackWebhookUrl,
|
|
38260
|
-
componentRef
|
|
38261
|
-
});
|
|
38262
|
-
} catch (createErr) {
|
|
38263
|
-
const createMsg = createErr instanceof Error ? createErr.message : String(createErr);
|
|
38264
|
-
throw new Error(`Failed to create replacement webhook subscription: ${createMsg}; the deactivated legacy cron subscription was deleted — re-run reconcile to create the webhook subscription`);
|
|
38265
|
-
}
|
|
38266
|
-
if (liveSub.active === false) {
|
|
38267
|
-
await client.subscription.pause(org, repo, sub.name);
|
|
38268
|
-
}
|
|
38269
|
-
} else {
|
|
38270
|
-
await client.subscription.update({
|
|
38271
|
-
orgName: org,
|
|
38272
|
-
repoName: repo,
|
|
38273
|
-
name: compiled.name,
|
|
38274
|
-
shapeName: compiled.shapeName,
|
|
38275
|
-
filterJson: compiled.filterJson,
|
|
38276
|
-
webhookUrl: compiled.webhookUrl,
|
|
38277
|
-
fallbackWebhookUrl: compiled.fallbackWebhookUrl
|
|
38278
|
-
});
|
|
38279
|
-
}
|
|
38280
|
-
const desiredCredentials = normalizeCredentialBindings(resolveManifestCredentialNames(compiled.credentials, {
|
|
38281
|
-
orgName: org,
|
|
38282
|
-
repoName: repo
|
|
38283
|
-
}));
|
|
38284
|
-
const liveCredentials = replacedLegacyCron ? [] : normalizeCredentialBindings(liveSub.credentialSetNames);
|
|
38285
|
-
const credentialsChanged = desiredCredentials.length !== liveCredentials.length || desiredCredentials.some((name, index) => name !== liveCredentials[index]);
|
|
38286
|
-
if (credentialsChanged && liveCredentials.length > 0) {
|
|
38287
|
-
await client.subscription.unbindCredentials(org, repo, compiled.name);
|
|
38288
|
-
}
|
|
38289
|
-
if (credentialsChanged) {
|
|
38290
|
-
for (const credentialSetName of desiredCredentials) {
|
|
38291
|
-
await client.subscription.bindCredentials(org, repo, compiled.name, credentialSetName);
|
|
38292
|
-
}
|
|
38293
|
-
}
|
|
38294
|
-
steps.push({
|
|
38295
|
-
step: stepName,
|
|
38296
|
-
status: "ok",
|
|
38297
|
-
...replacedLegacyCron ? {
|
|
38298
|
-
message: liveSub.active === false ? "replaced legacy cron subscription (kept paused — resume after verifying the webhook)" : "replaced legacy cron subscription"
|
|
38299
|
-
} : {}
|
|
38300
|
-
});
|
|
38301
|
-
} catch (err) {
|
|
38302
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38303
|
-
errors.push(`Failed to update subscription ${sub.name}: ${msg}`);
|
|
38304
|
-
steps.push({ step: stepName, status: "error", message: msg });
|
|
38305
|
-
}
|
|
38306
|
-
}
|
|
38307
|
-
if (manifest.seeds.length > 0) {
|
|
38308
|
-
for (const seed of manifest.seeds) {
|
|
38309
|
-
try {
|
|
38310
|
-
await client.commit.apply(org, repo, `Seed ${seed.shape}/${seed.name} for ${meta.name}`, [
|
|
38311
|
-
{
|
|
38312
|
-
operation: "revise",
|
|
38313
|
-
kind: "thing",
|
|
38314
|
-
name: `${seed.shape}/${seed.name}`,
|
|
38315
|
-
data: seed.data
|
|
38316
|
-
}
|
|
38317
|
-
], { componentRef });
|
|
38318
|
-
} catch (reviseErr) {
|
|
38319
|
-
const reviseMsg = reviseErr instanceof Error ? reviseErr.message : String(reviseErr);
|
|
38320
|
-
const reviseLooksMissing = reviseMsg.includes("not found") || reviseMsg.includes("NOT_FOUND");
|
|
38321
|
-
if (!reviseLooksMissing) {
|
|
38322
|
-
errors.push(`Failed to seed ${seed.shape}/${seed.name}: ${reviseMsg}`);
|
|
38323
|
-
continue;
|
|
38324
|
-
}
|
|
38325
|
-
try {
|
|
38326
|
-
await client.commit.apply(org, repo, `Seed ${seed.shape}/${seed.name} for ${meta.name}`, [
|
|
38327
|
-
{
|
|
38328
|
-
operation: "add",
|
|
38329
|
-
kind: "thing",
|
|
38330
|
-
name: `${seed.shape}/${seed.name}`,
|
|
38331
|
-
data: seed.data
|
|
38332
|
-
}
|
|
38333
|
-
], { componentRef });
|
|
38334
|
-
} catch (addErr) {
|
|
38335
|
-
const msg = addErr instanceof Error ? addErr.message : String(addErr);
|
|
38336
|
-
if (!isAlreadyExistsError(addErr)) {
|
|
38337
|
-
errors.push(`Failed to seed ${seed.shape}/${seed.name}: ${msg}`);
|
|
38338
|
-
}
|
|
38339
|
-
}
|
|
38340
|
-
}
|
|
38341
|
-
}
|
|
38342
|
-
steps.push({
|
|
38343
|
-
step: "reconcile-seeds",
|
|
38344
|
-
status: errors.length === 0 ? "ok" : "error"
|
|
38345
|
-
});
|
|
38346
|
-
}
|
|
38347
|
-
const state = errors.length > 0 ? "degraded" : "ready";
|
|
38348
|
-
try {
|
|
38349
|
-
await client.commit.apply(org, repo, `Reconcile ${meta.name}`, [
|
|
38350
|
-
{
|
|
38351
|
-
operation: "revise",
|
|
38352
|
-
kind: "thing",
|
|
38353
|
-
name: `ComponentInstall/${componentId}`,
|
|
38354
|
-
data: {
|
|
38355
|
-
componentId,
|
|
38356
|
-
name: meta.name,
|
|
38357
|
-
version: meta.version,
|
|
38358
|
-
source: "registry",
|
|
38359
|
-
sourceKind: "registered",
|
|
38360
|
-
sourceRef: source.ref ?? "",
|
|
38361
|
-
resolvedSha: source.resolvedSha ?? "",
|
|
38362
|
-
...source.registeredComponentRef ? { registeredComponentRef: source.registeredComponentRef } : {},
|
|
38363
|
-
manifestHash: await computeComponentManifestHash(manifest),
|
|
38364
|
-
state,
|
|
38365
|
-
manifest: JSON.stringify(manifest),
|
|
38366
|
-
installedAt: typeof existingData?.installedAt === "string" ? existingData.installedAt : new Date().toISOString(),
|
|
38367
|
-
updatedAt: new Date().toISOString(),
|
|
38368
|
-
...source.installId ?? persistedInstallId ? { installId: source.installId ?? persistedInstallId } : {}
|
|
38369
|
-
}
|
|
38370
|
-
}
|
|
38371
|
-
], { componentRef: SYSTEM_REGISTERED_COMPONENT_REF });
|
|
38372
|
-
steps.push({ step: "update-install-record", status: "ok" });
|
|
38373
|
-
} catch (err) {
|
|
38374
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38375
|
-
errors.push(`Failed to update install record: ${msg}`);
|
|
38376
|
-
steps.push({ step: "update-install-record", status: "error", message: msg });
|
|
38377
|
-
}
|
|
38378
|
-
return {
|
|
38379
|
-
ok: errors.length === 0,
|
|
38380
|
-
componentId,
|
|
38381
|
-
componentName: meta.name,
|
|
38382
|
-
version: meta.version,
|
|
38383
|
-
state,
|
|
38384
|
-
steps,
|
|
38385
|
-
errors,
|
|
38386
|
-
setupCreates
|
|
38387
|
-
};
|
|
38388
|
-
}
|
|
38389
|
-
|
|
38390
|
-
// ../../packages/warmhub-cli/src/manifest/installer.ts
|
|
38391
|
-
async function installComponent(client, org, repo, pkg, source) {
|
|
38392
|
-
const steps = [];
|
|
38393
|
-
const errors = [];
|
|
38394
|
-
const setupCreates = [];
|
|
38395
|
-
const { meta, manifest } = pkg;
|
|
38396
|
-
const componentId = meta.id;
|
|
38397
|
-
assertCliMethodsAllowedForSource(pkg, source);
|
|
38398
|
-
const partitionedShapes = partitionByProvisioning(manifest.shapes, "Shape");
|
|
38399
|
-
const partitionedCreds = partitionByProvisioning(manifest.credentials, "CredentialSet");
|
|
38400
|
-
const partitionedSubs = partitionByProvisioning(manifest.subscriptions, "Subscription");
|
|
38401
|
-
setupCreates.push(...partitionedShapes.setupRefs, ...partitionedCreds.setupRefs, ...partitionedSubs.setupRefs);
|
|
38402
|
-
const validation = validateComponentPackage(pkg);
|
|
38403
|
-
if (!validation.valid) {
|
|
38404
|
-
const validationErrors = validation.findings.filter((f) => f.level === "error").map((f) => f.message);
|
|
38405
|
-
return {
|
|
38406
|
-
ok: false,
|
|
38407
|
-
componentId,
|
|
38408
|
-
componentName: meta.name,
|
|
38409
|
-
version: meta.version,
|
|
38410
|
-
state: "error",
|
|
38411
|
-
steps: [
|
|
38412
|
-
{
|
|
38413
|
-
step: "validate",
|
|
38414
|
-
status: "error",
|
|
38415
|
-
message: validationErrors.join("; ")
|
|
38416
|
-
}
|
|
38417
|
-
],
|
|
38418
|
-
errors: validationErrors,
|
|
38419
|
-
setupCreates
|
|
38420
|
-
};
|
|
38421
|
-
}
|
|
38422
|
-
steps.push({ step: "validate", status: "ok" });
|
|
38423
|
-
try {
|
|
38424
|
-
const existing = await client.thing.get(org, repo, `ComponentInstall/${componentId}`, undefined, { includeRetracted: true });
|
|
38425
|
-
if (existing) {
|
|
38426
|
-
const collision2 = await checkInstallNameCollision({
|
|
38427
|
-
client,
|
|
38428
|
-
org,
|
|
38429
|
-
repo,
|
|
38430
|
-
componentId,
|
|
38431
|
-
componentName: meta.name
|
|
38432
|
-
});
|
|
38433
|
-
if (!collision2.ok) {
|
|
38434
|
-
errors.push(collision2.message);
|
|
38435
|
-
steps.push({
|
|
38436
|
-
step: "check-name-collision",
|
|
38437
|
-
status: "error",
|
|
38438
|
-
message: collision2.message
|
|
38439
|
-
});
|
|
38440
|
-
return makeResult(componentId, meta, "error", steps, errors, setupCreates);
|
|
38441
|
-
}
|
|
38442
|
-
return reconcileComponent(client, org, repo, pkg, source, existing);
|
|
38443
|
-
}
|
|
38444
|
-
} catch (err) {
|
|
38445
|
-
if (!isComponentInstallNotFound(err)) {
|
|
38446
|
-
throw err;
|
|
38447
|
-
}
|
|
38448
|
-
}
|
|
38449
|
-
const collision = await checkInstallNameCollision({
|
|
38450
|
-
client,
|
|
38451
|
-
org,
|
|
38452
|
-
repo,
|
|
38453
|
-
componentId,
|
|
38454
|
-
componentName: meta.name
|
|
38455
|
-
});
|
|
38456
|
-
if (collision.ok) {
|
|
38457
|
-
steps.push({ step: "check-name-collision", status: "ok" });
|
|
38458
|
-
} else {
|
|
38459
|
-
errors.push(collision.message);
|
|
38460
|
-
steps.push({
|
|
38461
|
-
step: "check-name-collision",
|
|
38462
|
-
status: "error",
|
|
38463
|
-
message: collision.message
|
|
38464
|
-
});
|
|
38465
|
-
return makeResult(componentId, meta, "error", steps, errors, setupCreates);
|
|
38466
|
-
}
|
|
38467
|
-
try {
|
|
38468
|
-
await ensureSharedInfra(client, org, repo);
|
|
38469
|
-
steps.push({ step: "ensure-shared-infra", status: "ok" });
|
|
38470
|
-
} catch (err) {
|
|
38471
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38472
|
-
errors.push(`Failed to ensure shared infra: ${msg}`);
|
|
38473
|
-
steps.push({ step: "ensure-shared-infra", status: "error", message: msg });
|
|
38474
|
-
return makeResult(componentId, meta, "error", steps, errors, setupCreates);
|
|
38475
|
-
}
|
|
38476
|
-
try {
|
|
38477
|
-
await client.commit.apply(org, repo, `Install ${meta.name}`, [
|
|
38478
|
-
{
|
|
38479
|
-
operation: "add",
|
|
38480
|
-
kind: "thing",
|
|
38481
|
-
name: `ComponentInstall/${componentId}`,
|
|
38482
|
-
data: {
|
|
38483
|
-
componentId,
|
|
38484
|
-
name: meta.name,
|
|
38485
|
-
version: meta.version,
|
|
38486
|
-
source: "registry",
|
|
38487
|
-
sourceKind: "registered",
|
|
38488
|
-
sourceRef: source.ref ?? "",
|
|
38489
|
-
resolvedSha: source.resolvedSha ?? "",
|
|
38490
|
-
...source.registeredComponentRef ? { registeredComponentRef: source.registeredComponentRef } : {},
|
|
38491
|
-
manifestHash: await computeComponentManifestHash(manifest),
|
|
38492
|
-
state: "installing",
|
|
38493
|
-
manifest: JSON.stringify(manifest),
|
|
38494
|
-
installedAt: new Date().toISOString(),
|
|
38495
|
-
...source.installId ? { installId: source.installId } : {}
|
|
38496
|
-
}
|
|
38497
|
-
}
|
|
38498
|
-
], { componentRef: SYSTEM_REGISTERED_COMPONENT_REF });
|
|
38499
|
-
steps.push({ step: "create-install-record", status: "ok" });
|
|
38500
|
-
} catch (err) {
|
|
38501
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38502
|
-
errors.push(`Failed to create install record: ${msg}`);
|
|
38503
|
-
steps.push({ step: "create-install-record", status: "error", message: msg });
|
|
38504
|
-
return makeResult(componentId, meta, "error", steps, errors, setupCreates);
|
|
38505
|
-
}
|
|
38506
|
-
if (partitionedShapes.manifestEntries.length > 0) {
|
|
38507
|
-
const shapeOps = partitionedShapes.manifestEntries.map((shape) => ({
|
|
38508
|
-
operation: "add",
|
|
38509
|
-
kind: "shape",
|
|
38510
|
-
name: shape.name,
|
|
38511
|
-
data: manifestShapeData(shape)
|
|
38512
|
-
}));
|
|
38513
|
-
try {
|
|
38514
|
-
await client.commit.apply(org, repo, `Add shapes for ${meta.name}`, shapeOps, { componentRef: source.registeredComponentRef });
|
|
38515
|
-
steps.push({ step: "create-shapes", status: "ok" });
|
|
38516
|
-
} catch (err) {
|
|
38517
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38518
|
-
if (isAlreadyExistsError(err)) {
|
|
38519
|
-
try {
|
|
38520
|
-
await reconcileShapesAfterCreateConflict(client, org, repo, pkg, source);
|
|
38521
|
-
steps.push({
|
|
38522
|
-
step: "create-shapes",
|
|
38523
|
-
status: "ok",
|
|
38524
|
-
message: "reconciled existing shapes"
|
|
38525
|
-
});
|
|
38526
|
-
} catch (fallbackErr) {
|
|
38527
|
-
const fallbackMsg = fallbackErr instanceof Error ? fallbackErr.message : String(fallbackErr);
|
|
38528
|
-
errors.push(`Failed to reconcile existing shapes: ${fallbackMsg}`);
|
|
38529
|
-
steps.push({
|
|
38530
|
-
step: "create-shapes",
|
|
38531
|
-
status: "error",
|
|
38532
|
-
message: fallbackMsg
|
|
38533
|
-
});
|
|
38534
|
-
}
|
|
38535
|
-
} else {
|
|
38536
|
-
errors.push(`Failed to create shapes: ${msg}`);
|
|
38537
|
-
steps.push({ step: "create-shapes", status: "error", message: msg });
|
|
38538
|
-
}
|
|
38539
|
-
}
|
|
38540
|
-
}
|
|
38541
|
-
for (const cred of partitionedCreds.manifestEntries) {
|
|
38542
|
-
const credentialSetName = resolveManifestCredentialName(cred.name, {
|
|
38543
|
-
orgName: org,
|
|
38544
|
-
repoName: repo
|
|
38545
|
-
});
|
|
38546
|
-
try {
|
|
38547
|
-
await client.credential.createSet(org, repo, credentialSetName, {
|
|
38548
|
-
scope: "repo",
|
|
38549
|
-
description: cred.description
|
|
38550
|
-
});
|
|
38551
|
-
steps.push({
|
|
38552
|
-
step: `create-credential-${credentialSetName}`,
|
|
38553
|
-
status: "ok"
|
|
38554
|
-
});
|
|
38555
|
-
} catch (err) {
|
|
38556
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38557
|
-
if (isAlreadyExistsError(err)) {
|
|
38558
|
-
steps.push({
|
|
38559
|
-
step: `create-credential-${credentialSetName}`,
|
|
38560
|
-
status: "skipped",
|
|
38561
|
-
message: "already exists"
|
|
38562
|
-
});
|
|
38563
|
-
} else {
|
|
38564
|
-
errors.push(`Failed to create credential set ${credentialSetName}: ${msg}`);
|
|
38565
|
-
steps.push({
|
|
38566
|
-
step: `create-credential-${credentialSetName}`,
|
|
38567
|
-
status: "error",
|
|
38568
|
-
message: msg
|
|
38569
|
-
});
|
|
38570
|
-
}
|
|
38571
|
-
}
|
|
38572
|
-
}
|
|
38573
|
-
for (const sub of partitionedSubs.manifestEntries) {
|
|
38574
|
-
let compiled;
|
|
38575
|
-
try {
|
|
38576
|
-
compiled = compileSubscription(sub);
|
|
38577
|
-
} catch (err) {
|
|
38578
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38579
|
-
errors.push(`Failed to compile subscription ${sub.name}: ${msg}`);
|
|
38580
|
-
steps.push({
|
|
38581
|
-
step: `create-sub-${sub.name}`,
|
|
38582
|
-
status: "error",
|
|
38583
|
-
message: msg
|
|
38584
|
-
});
|
|
38585
|
-
continue;
|
|
38586
|
-
}
|
|
38587
|
-
try {
|
|
38588
|
-
await client.subscription.create({
|
|
38589
|
-
orgName: org,
|
|
38590
|
-
repoName: repo,
|
|
38591
|
-
name: compiled.name,
|
|
38592
|
-
kind: compiled.kind,
|
|
38593
|
-
shapeName: compiled.shapeName,
|
|
38594
|
-
filterJson: compiled.filterJson,
|
|
38595
|
-
webhookUrl: compiled.webhookUrl,
|
|
38596
|
-
fallbackWebhookUrl: compiled.fallbackWebhookUrl,
|
|
38597
|
-
componentRef: source.registeredComponentRef
|
|
38598
|
-
});
|
|
38599
|
-
steps.push({ step: `create-sub-${sub.name}`, status: "ok" });
|
|
38600
|
-
} catch (err) {
|
|
38601
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38602
|
-
if (isAlreadyExistsError(err)) {
|
|
38603
|
-
steps.push({
|
|
38604
|
-
step: `create-sub-${sub.name}`,
|
|
38605
|
-
status: "skipped",
|
|
38606
|
-
message: "already exists"
|
|
38607
|
-
});
|
|
38608
|
-
} else {
|
|
38609
|
-
errors.push(`Failed to create subscription ${sub.name}: ${msg}`);
|
|
38610
|
-
steps.push({
|
|
38611
|
-
step: `create-sub-${sub.name}`,
|
|
38612
|
-
status: "error",
|
|
38613
|
-
message: msg
|
|
38614
|
-
});
|
|
38615
|
-
}
|
|
38616
|
-
}
|
|
38617
|
-
for (const credName of resolveManifestCredentialNames(compiled.credentials, {
|
|
38618
|
-
orgName: org,
|
|
38619
|
-
repoName: repo
|
|
38620
|
-
})) {
|
|
38621
|
-
try {
|
|
38622
|
-
await client.subscription.bindCredentials(org, repo, compiled.name, credName);
|
|
38623
|
-
} catch {}
|
|
38624
|
-
}
|
|
38625
|
-
}
|
|
38626
|
-
for (const seed of manifest.seeds) {
|
|
38627
|
-
const seedName = `${seed.shape}/${seed.name}`;
|
|
38628
|
-
try {
|
|
38629
|
-
await client.commit.apply(org, repo, `Seed ${seedName} for ${meta.name}`, [
|
|
38630
|
-
{
|
|
38631
|
-
operation: "add",
|
|
38632
|
-
kind: "thing",
|
|
38633
|
-
name: seedName,
|
|
38634
|
-
data: seed.data
|
|
38635
|
-
}
|
|
38636
|
-
], { componentRef: source.registeredComponentRef });
|
|
38637
|
-
steps.push({ step: `seed-${seedName}`, status: "ok" });
|
|
38638
|
-
} catch (err) {
|
|
38639
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38640
|
-
if (isAlreadyExistsError(err)) {
|
|
38641
|
-
steps.push({
|
|
38642
|
-
step: `seed-${seedName}`,
|
|
38643
|
-
status: "skipped",
|
|
38644
|
-
message: "already exists"
|
|
38645
|
-
});
|
|
38646
|
-
} else {
|
|
38647
|
-
errors.push(`Failed to seed ${seedName}: ${msg}`);
|
|
38648
|
-
steps.push({ step: `seed-${seedName}`, status: "error", message: msg });
|
|
38649
|
-
}
|
|
38650
|
-
}
|
|
38651
|
-
}
|
|
38652
|
-
const state = computeState(errors);
|
|
38653
|
-
try {
|
|
38654
|
-
await client.commit.apply(org, repo, `Finalize ${meta.name} install`, [
|
|
38655
|
-
{
|
|
38656
|
-
operation: "revise",
|
|
38657
|
-
kind: "thing",
|
|
38658
|
-
name: `ComponentInstall/${componentId}`,
|
|
38659
|
-
data: {
|
|
38660
|
-
componentId,
|
|
38661
|
-
name: meta.name,
|
|
38662
|
-
version: meta.version,
|
|
38663
|
-
source: "registry",
|
|
38664
|
-
sourceKind: "registered",
|
|
38665
|
-
sourceRef: source.ref ?? "",
|
|
38666
|
-
resolvedSha: source.resolvedSha ?? "",
|
|
38667
|
-
...source.registeredComponentRef ? { registeredComponentRef: source.registeredComponentRef } : {},
|
|
38668
|
-
manifestHash: await computeComponentManifestHash(manifest),
|
|
38669
|
-
state,
|
|
38670
|
-
manifest: JSON.stringify(manifest),
|
|
38671
|
-
installedAt: new Date().toISOString(),
|
|
38672
|
-
updatedAt: new Date().toISOString(),
|
|
38673
|
-
...source.installId ? { installId: source.installId } : {}
|
|
38674
|
-
}
|
|
38675
|
-
}
|
|
38676
|
-
], { componentRef: SYSTEM_REGISTERED_COMPONENT_REF });
|
|
38677
|
-
steps.push({ step: "finalize", status: "ok" });
|
|
38678
|
-
} catch (err) {
|
|
38679
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38680
|
-
errors.push(`Failed to finalize install: ${msg}`);
|
|
38681
|
-
steps.push({ step: "finalize", status: "error", message: msg });
|
|
38682
|
-
}
|
|
38683
|
-
return makeResult(componentId, meta, state, steps, errors, setupCreates);
|
|
38684
|
-
}
|
|
38685
|
-
function computeState(errors) {
|
|
38686
|
-
if (errors.length > 0)
|
|
38687
|
-
return "degraded";
|
|
38688
|
-
return "ready";
|
|
38689
|
-
}
|
|
38690
|
-
function assertCliMethodsAllowedForSource(pkg, source) {
|
|
38691
|
-
const hasCliMethods = (pkg.manifest.cli?.methods?.length ?? 0) > 0;
|
|
38692
|
-
if (!hasCliMethods)
|
|
38693
|
-
return;
|
|
38694
|
-
if (typeof source.registeredComponentRef === "string" && source.registeredComponentRef.length > 0) {
|
|
38695
|
-
return;
|
|
38696
|
-
}
|
|
38697
|
-
throw new CliError(2 /* UserInput */, "USER_INPUT", "Components that declare manifest.cli.methods must be installed from the registry.", undefined, "Register the component, then install it as <org>/<name>. Local path and GitHub URL installs cannot expose CLI methods.");
|
|
38698
|
-
}
|
|
38699
|
-
async function reconcileShapesAfterCreateConflict(client, org, repo, pkg, source) {
|
|
38700
|
-
const { meta, manifest } = pkg;
|
|
38701
|
-
const existingShapes = new Map;
|
|
38702
|
-
for (const shape of manifest.shapes) {
|
|
38703
|
-
try {
|
|
38704
|
-
const existingShape = await client.shape.get(org, repo, shape.name, {
|
|
38705
|
-
includeRetracted: true
|
|
38706
|
-
});
|
|
38707
|
-
if (existingShape.componentRef !== source.registeredComponentRef) {
|
|
38708
|
-
const owner = existingShape.componentRef ? `owned by component "${existingShape.componentRef}"` : "not owned by this component";
|
|
38709
|
-
throw new Error(`Shape "${shape.name}" already exists and is ${owner}; cannot reconcile during fresh install`);
|
|
38710
|
-
}
|
|
38711
|
-
existingShapes.set(shape.name, existingShape);
|
|
38712
|
-
} catch (err) {
|
|
38713
|
-
if (!isNotFoundError(err)) {
|
|
38714
|
-
throw err;
|
|
38715
|
-
}
|
|
38716
|
-
existingShapes.set(shape.name, undefined);
|
|
38717
|
-
}
|
|
38718
|
-
}
|
|
38719
|
-
for (const shape of manifest.shapes) {
|
|
38720
|
-
const data = manifestShapeData(shape);
|
|
38721
|
-
const existingShape = existingShapes.get(shape.name);
|
|
38722
|
-
if (existingShape && existingShape.active !== false) {
|
|
38723
|
-
await client.commit.apply(org, repo, `Reconcile shape ${shape.name} for ${meta.name}`, [
|
|
38724
|
-
{
|
|
38725
|
-
operation: "revise",
|
|
38726
|
-
kind: "shape",
|
|
38727
|
-
name: shape.name,
|
|
38728
|
-
data
|
|
38729
|
-
}
|
|
38730
|
-
], { componentRef: source.registeredComponentRef });
|
|
38731
|
-
continue;
|
|
38732
|
-
}
|
|
38733
|
-
try {
|
|
38734
|
-
await client.commit.apply(org, repo, `Add shape ${shape.name} for ${meta.name}`, [
|
|
38735
|
-
{
|
|
38736
|
-
operation: "add",
|
|
38737
|
-
kind: "shape",
|
|
38738
|
-
name: shape.name,
|
|
38739
|
-
data
|
|
38740
|
-
}
|
|
38741
|
-
], { componentRef: source.registeredComponentRef });
|
|
38742
|
-
} catch (err) {
|
|
38743
|
-
if (isAlreadyExistsError(err)) {
|
|
38744
|
-
throw new Error(`Shape "${shape.name}" already exists but ownership could not be verified; cannot reconcile during fresh install`);
|
|
38745
|
-
}
|
|
38746
|
-
throw err;
|
|
38747
|
-
}
|
|
38748
|
-
}
|
|
38749
|
-
}
|
|
38750
|
-
function makeResult(componentId, meta, state, steps, errors, setupCreates = []) {
|
|
38751
|
-
return {
|
|
38752
|
-
ok: errors.length === 0,
|
|
38753
|
-
componentId,
|
|
38754
|
-
componentName: meta.name,
|
|
38755
|
-
version: meta.version,
|
|
38756
|
-
state,
|
|
38757
|
-
steps,
|
|
38758
|
-
errors,
|
|
38759
|
-
setupCreates
|
|
38760
|
-
};
|
|
38761
|
-
}
|
|
38762
|
-
function partitionByProvisioning(entries, kind) {
|
|
38763
|
-
const manifestEntries = [];
|
|
38764
|
-
const setupRefs = [];
|
|
38765
|
-
for (const entry of entries) {
|
|
38766
|
-
if (entry.provisioning === "setup") {
|
|
38767
|
-
setupRefs.push(`${kind}/${entry.name}`);
|
|
38768
|
-
} else {
|
|
38769
|
-
manifestEntries.push(entry);
|
|
38770
|
-
}
|
|
38771
|
-
}
|
|
38772
|
-
return { manifestEntries, setupRefs };
|
|
38773
|
-
}
|
|
38774
|
-
function isComponentInstallNotFound(err) {
|
|
38775
|
-
if (err instanceof WarmHubError) {
|
|
38776
|
-
return err.kind === "NOT_FOUND";
|
|
38777
|
-
}
|
|
38778
|
-
const message = err instanceof Error ? err.message : typeof err === "string" ? err : "";
|
|
38779
|
-
return message.includes("NOT_FOUND") || message.toLowerCase().includes("not found");
|
|
38780
|
-
}
|
|
38781
|
-
async function checkInstallNameCollision(args) {
|
|
38782
|
-
try {
|
|
38783
|
-
let cursor;
|
|
38784
|
-
do {
|
|
38785
|
-
const installs = await args.client.thing.query(args.org, args.repo, {
|
|
38786
|
-
shape: "ComponentInstall",
|
|
38787
|
-
kind: "thing",
|
|
38788
|
-
limit: 500,
|
|
38789
|
-
cursor
|
|
38790
|
-
});
|
|
38791
|
-
const colliding = installs.items.find((item) => {
|
|
38792
|
-
const data = item.data ?? {};
|
|
38793
|
-
return typeof data.name === "string" && data.name === args.componentName && typeof data.componentId === "string" && data.componentId !== args.componentId;
|
|
38794
|
-
});
|
|
38795
|
-
if (colliding) {
|
|
38796
|
-
const otherData = colliding.data ?? {};
|
|
38797
|
-
const otherId = typeof otherData.componentId === "string" ? otherData.componentId : "<unknown>";
|
|
38798
|
-
return {
|
|
38799
|
-
ok: false,
|
|
38800
|
-
message: `Cannot install "${args.componentName}" (componentId ${args.componentId}) into ${args.org}/${args.repo}: ` + `another component with the same name is already installed there (componentId ${otherId}). ` + "Two components sharing a name collide on `wh <name>` resolution and on the " + "`ComponentConfig/<name>` dispatch-config thing. Remove the existing install record or pick a different name."
|
|
38801
|
-
};
|
|
38802
|
-
}
|
|
38803
|
-
cursor = installs.nextCursor;
|
|
38804
|
-
} while (cursor);
|
|
38805
|
-
return { ok: true };
|
|
38806
|
-
} catch (err) {
|
|
38807
|
-
if (isComponentInstallNotFound(err)) {
|
|
38808
|
-
return { ok: true };
|
|
38809
|
-
}
|
|
38810
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38811
|
-
return { ok: false, message: `Failed to check name collision: ${msg}` };
|
|
38812
|
-
}
|
|
38813
|
-
}
|
|
38814
|
-
function isNotFoundError(err) {
|
|
38815
|
-
return isComponentInstallNotFound(err);
|
|
38816
|
-
}
|
|
38817
|
-
async function installFromManifest(client, org, repo, manifest, source) {
|
|
38818
|
-
const pkg = {
|
|
38819
|
-
meta: {
|
|
38820
|
-
id: manifest.component.id,
|
|
38821
|
-
name: manifest.component.name,
|
|
38822
|
-
version: manifest.component.version
|
|
38823
|
-
},
|
|
38824
|
-
manifest,
|
|
38825
|
-
rootDir: ""
|
|
38826
|
-
};
|
|
38827
|
-
return installComponent(client, org, repo, pkg, source);
|
|
38828
|
-
}
|
|
38829
38141
|
// ../../packages/warmhub-cli/package.json
|
|
38830
38142
|
var package_default2 = {
|
|
38831
38143
|
name: "@warmhub/warmhub-cli",
|
|
@@ -38960,14 +38272,16 @@ async function runCli(argv, opts) {
|
|
|
38960
38272
|
teeStderr: debugMode,
|
|
38961
38273
|
whVersion: version
|
|
38962
38274
|
});
|
|
38963
|
-
|
|
38275
|
+
const handleUncaughtException = (e) => {
|
|
38964
38276
|
logger.crash(e, "uncaughtException");
|
|
38965
38277
|
process.exit(1);
|
|
38966
|
-
}
|
|
38967
|
-
|
|
38278
|
+
};
|
|
38279
|
+
const handleUnhandledRejection = (reason) => {
|
|
38968
38280
|
logger.crash(reason, "unhandledRejection");
|
|
38969
38281
|
process.exit(1);
|
|
38970
|
-
}
|
|
38282
|
+
};
|
|
38283
|
+
process.once("uncaughtException", handleUncaughtException);
|
|
38284
|
+
process.once("unhandledRejection", handleUnhandledRejection);
|
|
38971
38285
|
logger.info("cli.start", {
|
|
38972
38286
|
argv: redactArgv(argv),
|
|
38973
38287
|
version,
|
|
@@ -38977,6 +38291,7 @@ async function runCli(argv, opts) {
|
|
|
38977
38291
|
profile: getStringFlag(invocation.flags, "profile", "P") ?? undefined
|
|
38978
38292
|
});
|
|
38979
38293
|
let exitCode = 0 /* Ok */;
|
|
38294
|
+
let removeSignalListeners;
|
|
38980
38295
|
try {
|
|
38981
38296
|
canonicalizeGlobalFlags({ invocation });
|
|
38982
38297
|
const retirementHint = lookupInvocationRenameHint(invocation);
|
|
@@ -39029,17 +38344,23 @@ async function runCli(argv, opts) {
|
|
|
39029
38344
|
const chars = makeChars();
|
|
39030
38345
|
const ac = new AbortController;
|
|
39031
38346
|
const liveMode = getBoolFlag(invocation.flags, "live");
|
|
39032
|
-
|
|
38347
|
+
const handleSigint = () => {
|
|
39033
38348
|
ac.abort();
|
|
39034
38349
|
logger.info("cli.cancelled", { signal: "SIGINT" });
|
|
39035
38350
|
if (!liveMode)
|
|
39036
38351
|
process.exitCode = 130 /* Cancelled */;
|
|
39037
|
-
}
|
|
39038
|
-
|
|
38352
|
+
};
|
|
38353
|
+
const handleSigterm = () => {
|
|
39039
38354
|
ac.abort();
|
|
39040
38355
|
logger.info("cli.cancelled", { signal: "SIGTERM" });
|
|
39041
38356
|
process.exitCode = 143;
|
|
39042
|
-
}
|
|
38357
|
+
};
|
|
38358
|
+
process.on("SIGINT", handleSigint);
|
|
38359
|
+
process.on("SIGTERM", handleSigterm);
|
|
38360
|
+
removeSignalListeners = () => {
|
|
38361
|
+
process.removeListener("SIGINT", handleSigint);
|
|
38362
|
+
process.removeListener("SIGTERM", handleSigterm);
|
|
38363
|
+
};
|
|
39043
38364
|
await dispatch({
|
|
39044
38365
|
client,
|
|
39045
38366
|
config,
|
|
@@ -39098,6 +38419,9 @@ async function runCli(argv, opts) {
|
|
|
39098
38419
|
});
|
|
39099
38420
|
return exitCode;
|
|
39100
38421
|
} finally {
|
|
38422
|
+
process.removeListener("uncaughtException", handleUncaughtException);
|
|
38423
|
+
process.removeListener("unhandledRejection", handleUnhandledRejection);
|
|
38424
|
+
removeSignalListeners?.();
|
|
39101
38425
|
logger.info("cli.end", {
|
|
39102
38426
|
exit_code: exitCode,
|
|
39103
38427
|
duration_ms: Date.now() - startedAt
|
|
@@ -39153,7 +38477,7 @@ function resolveLogLevel(flags, env) {
|
|
|
39153
38477
|
// package.json
|
|
39154
38478
|
var package_default3 = {
|
|
39155
38479
|
name: "@warmhub/cli",
|
|
39156
|
-
version: "0.
|
|
38480
|
+
version: "0.55.0",
|
|
39157
38481
|
private: false,
|
|
39158
38482
|
type: "module",
|
|
39159
38483
|
description: "The wh CLI for WarmHub — create repos, commit and query data, and compound knowledge with your AI agents.",
|
|
@@ -39207,43 +38531,12 @@ var package_default3 = {
|
|
|
39207
38531
|
devDependencies: {
|
|
39208
38532
|
"@warmhub/warmhub-cli": "workspace:*",
|
|
39209
38533
|
typescript: "5.9.3",
|
|
39210
|
-
undici: "6.
|
|
38534
|
+
undici: "6.27.0",
|
|
39211
38535
|
vitest: "4.1.5"
|
|
39212
38536
|
}
|
|
39213
38537
|
};
|
|
39214
38538
|
|
|
39215
|
-
// ../../packages/warmhub-cli/src/component-update-source.ts
|
|
39216
|
-
function resolveComponentUpdateSource(data) {
|
|
39217
|
-
const sourceKind = typeof data.sourceKind === "string" ? data.sourceKind : "";
|
|
39218
|
-
const registeredComponentRef = typeof data.registeredComponentRef === "string" ? data.registeredComponentRef : "";
|
|
39219
|
-
const source = typeof data.source === "string" ? data.source : "";
|
|
39220
|
-
const repoUrl = typeof data.repoUrl === "string" ? data.repoUrl : "";
|
|
39221
|
-
const effectiveSource = source || repoUrl;
|
|
39222
|
-
if (sourceKind === "system" || effectiveSource === "system") {
|
|
39223
|
-
const componentId = typeof data.sourceRef === "string" && data.sourceRef ? data.sourceRef : typeof data.componentId === "string" && data.componentId ? data.componentId : "";
|
|
39224
|
-
if (componentId) {
|
|
39225
|
-
return { kind: "system", componentId };
|
|
39226
|
-
}
|
|
39227
|
-
return { kind: "invalid", source: effectiveSource || "system" };
|
|
39228
|
-
}
|
|
39229
|
-
if (sourceKind === "registered" && registeredComponentRef !== "") {
|
|
39230
|
-
return {
|
|
39231
|
-
kind: "registered",
|
|
39232
|
-
componentRef: registeredComponentRef
|
|
39233
|
-
};
|
|
39234
|
-
}
|
|
39235
|
-
if (effectiveSource === "" || effectiveSource === "local") {
|
|
39236
|
-
return { kind: "local" };
|
|
39237
|
-
}
|
|
39238
|
-
return { kind: "invalid", source: effectiveSource };
|
|
39239
|
-
}
|
|
39240
|
-
|
|
39241
38539
|
// ../../packages/warmhub-cli/src/component-shell.ts
|
|
39242
|
-
function rejectRefForRegistered(componentRef, refOverride) {
|
|
39243
|
-
if (refOverride !== undefined) {
|
|
39244
|
-
throw new CliError(2 /* UserInput */, "USER_INPUT", `'${componentRef}' is a registered component; --ref is not supported (manifest version pinning is unavailable).`, undefined, "Registered components always install the latest published manifest. Re-run without --ref.");
|
|
39245
|
-
}
|
|
39246
|
-
}
|
|
39247
38540
|
async function maybeHandleComponentShellBoundary(argv, deps = {}) {
|
|
39248
38541
|
const parsed = parseArgs(argv);
|
|
39249
38542
|
const invocation = resolveInvocation(parsed);
|
|
@@ -39259,9 +38552,6 @@ async function maybeHandleComponentShellBoundary(argv, deps = {}) {
|
|
|
39259
38552
|
const writeErr = deps.err ?? err;
|
|
39260
38553
|
const debug = getBoolFlag(invocation.flags, "debug") || process.env.WARMHUB_DEBUG === "1";
|
|
39261
38554
|
let format = "pretty";
|
|
39262
|
-
const installFromManifestImpl = deps.installFromManifest ?? installFromManifest;
|
|
39263
|
-
const resolveRegisteredInstallImpl = deps.resolveRegisteredInstall ?? resolveRegisteredInstall;
|
|
39264
|
-
const callRegisteredSetupImpl = deps.callRegisteredSetup ?? callRegisteredSetup;
|
|
39265
38555
|
try {
|
|
39266
38556
|
canonicalizeGlobalFlags({ invocation });
|
|
39267
38557
|
const formatFlag = getStringFlag(invocation.flags, "format");
|
|
@@ -39277,50 +38567,27 @@ async function maybeHandleComponentShellBoundary(argv, deps = {}) {
|
|
|
39277
38567
|
config: deps.config,
|
|
39278
38568
|
client: deps.client
|
|
39279
38569
|
});
|
|
38570
|
+
const source = invocation.positional[1];
|
|
38571
|
+
if (!source) {
|
|
38572
|
+
return;
|
|
38573
|
+
}
|
|
39280
38574
|
if (componentShellVerb === "install") {
|
|
39281
|
-
const source = invocation.positional[1];
|
|
39282
|
-
if (!source) {
|
|
39283
|
-
return;
|
|
39284
|
-
}
|
|
39285
38575
|
if (!isRegisteredComponentSource(source)) {
|
|
39286
38576
|
return;
|
|
39287
38577
|
}
|
|
39288
|
-
|
|
39289
|
-
|
|
39290
|
-
return await handleRegisteredInstall({
|
|
39291
|
-
componentRef: source,
|
|
39292
|
-
repoFlag: repoFlag2,
|
|
39293
|
-
client,
|
|
39294
|
-
config,
|
|
39295
|
-
format,
|
|
39296
|
-
writeOut,
|
|
39297
|
-
writeErr,
|
|
39298
|
-
installFromManifest: installFromManifestImpl,
|
|
39299
|
-
resolveRegisteredInstall: resolveRegisteredInstallImpl,
|
|
39300
|
-
callRegisteredSetup: callRegisteredSetupImpl
|
|
39301
|
-
});
|
|
39302
|
-
}
|
|
39303
|
-
const componentRef = invocation.positional[1];
|
|
39304
|
-
if (!componentRef) {
|
|
39305
|
-
return;
|
|
39306
|
-
}
|
|
39307
|
-
if (!isRegisteredComponentSource(componentRef)) {
|
|
39308
|
-
throw new CliError(2 /* UserInput */, "USER_INPUT", `Invalid component reference '${componentRef}'. Expected '<org>/<name>' with no extra slashes and no empty parts.`, undefined, "Usage: wh component update <org/name> --repo org/repo");
|
|
38578
|
+
} else if (!isRegisteredComponentSource(source)) {
|
|
38579
|
+
throw new CliError(2 /* UserInput */, "USER_INPUT", `Invalid component reference '${source}'. Expected '<org>/<name>' with no extra slashes and no empty parts.`, undefined, "Usage: wh component update <org/name> --repo org/repo");
|
|
39309
38580
|
}
|
|
39310
38581
|
const repoFlag = getStringFlag(invocation.flags, "repo") ?? config.defaultRepo;
|
|
39311
|
-
const
|
|
39312
|
-
return await
|
|
39313
|
-
componentRef,
|
|
39314
|
-
|
|
39315
|
-
refOverride,
|
|
38582
|
+
const parsedRepo = parseOrgRepo(repoFlag, config);
|
|
38583
|
+
return await performRegisteredInstall({
|
|
38584
|
+
componentRef: source,
|
|
38585
|
+
verb: componentShellVerb === "install" ? "Installed" : "Updated",
|
|
39316
38586
|
client,
|
|
39317
|
-
|
|
38587
|
+
parsedRepo,
|
|
39318
38588
|
format,
|
|
39319
38589
|
writeOut,
|
|
39320
|
-
writeErr
|
|
39321
|
-
installFromManifest: installFromManifestImpl,
|
|
39322
|
-
resolveRegisteredInstall: resolveRegisteredInstallImpl,
|
|
39323
|
-
callRegisteredSetup: callRegisteredSetupImpl
|
|
38590
|
+
writeErr
|
|
39324
38591
|
});
|
|
39325
38592
|
} catch (error) {
|
|
39326
38593
|
return printCliError(toCliError2(error), writeErr, {
|
|
@@ -39329,91 +38596,40 @@ async function maybeHandleComponentShellBoundary(argv, deps = {}) {
|
|
|
39329
38596
|
});
|
|
39330
38597
|
}
|
|
39331
38598
|
}
|
|
39332
|
-
async function
|
|
39333
|
-
const
|
|
38599
|
+
async function performRegisteredInstall(args) {
|
|
38600
|
+
const installRepo = `${args.parsedRepo.org}/${args.parsedRepo.repo}`;
|
|
38601
|
+
let result;
|
|
39334
38602
|
try {
|
|
39335
|
-
|
|
38603
|
+
result = await args.client.component.install(args.parsedRepo.org, args.parsedRepo.repo, args.componentRef);
|
|
39336
38604
|
} catch (error) {
|
|
39337
|
-
|
|
39338
|
-
|
|
39339
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
39340
|
-
if (backendCode === "NOT_FOUND" || warmHubErrorKind(error) === "NOT_FOUND" && message === "Registered component not found") {
|
|
39341
|
-
throw new CliError(2 /* UserInput */, "USER_INPUT", `No component registered as ${args.componentRef}`, undefined, `Register it first with 'wh component register ${args.componentRef.split("/")[1] ?? args.componentRef} --org ${args.componentRef.split("/")[0] ?? "<org>"} --manifest <path>'.`, undefined, backendCode ?? "NOT_FOUND");
|
|
38605
|
+
if (!isMissingRegistrationError(error)) {
|
|
38606
|
+
invalidateInstallSnapshotCache(installRepo);
|
|
39342
38607
|
}
|
|
39343
|
-
|
|
39344
|
-
throw new CliError(4 /* Backend */, "BACKEND", message, error, "The backend may not expose the component-registry routes. Confirm the API URL points at a deployment that supports `wh component install`, or check for a proxy/path mismatch.");
|
|
39345
|
-
}
|
|
39346
|
-
throw toCliError2(error);
|
|
38608
|
+
throw mapInstallError(error, args.componentRef, args.verb);
|
|
39347
38609
|
}
|
|
39348
|
-
}
|
|
39349
|
-
async function callRegisteredSetup(args) {
|
|
39350
|
-
const [ownerOrg, componentName] = args.componentRef.split("/");
|
|
39351
|
-
return await args.client.component.registry.setupCall(ownerOrg, componentName, {
|
|
39352
|
-
installId: args.installId,
|
|
39353
|
-
installRepo: args.installRepo,
|
|
39354
|
-
expectedManifestHash: args.expectedManifestHash
|
|
39355
|
-
});
|
|
39356
|
-
}
|
|
39357
|
-
async function handleRegisteredInstall(args) {
|
|
39358
|
-
const parsedRepo = parseOrgRepo(args.repoFlag, args.config);
|
|
39359
|
-
return performRegisteredInstall({
|
|
39360
|
-
componentRef: args.componentRef,
|
|
39361
|
-
verb: "Installed",
|
|
39362
|
-
client: args.client,
|
|
39363
|
-
parsedRepo,
|
|
39364
|
-
format: args.format,
|
|
39365
|
-
writeOut: args.writeOut,
|
|
39366
|
-
writeErr: args.writeErr,
|
|
39367
|
-
installFromManifest: args.installFromManifest,
|
|
39368
|
-
resolveRegisteredInstall: args.resolveRegisteredInstall,
|
|
39369
|
-
callRegisteredSetup: args.callRegisteredSetup
|
|
39370
|
-
});
|
|
39371
|
-
}
|
|
39372
|
-
async function performRegisteredInstall(args) {
|
|
39373
|
-
const installRepo = `${args.parsedRepo.org}/${args.parsedRepo.repo}`;
|
|
39374
|
-
const resolved = await args.resolveRegisteredInstall({
|
|
39375
|
-
componentRef: args.componentRef,
|
|
39376
|
-
installRepo,
|
|
39377
|
-
client: args.client
|
|
39378
|
-
});
|
|
39379
|
-
const persistedInstallId = readPersistedString(args.persistedInstallData, "installId");
|
|
39380
|
-
const installId = persistedInstallId ?? resolved.installId;
|
|
39381
38610
|
invalidateInstallSnapshotCache(installRepo);
|
|
39382
|
-
|
|
39383
|
-
|
|
39384
|
-
|
|
39385
|
-
|
|
39386
|
-
if (
|
|
39387
|
-
|
|
39388
|
-
|
|
38611
|
+
await writeInstallResult(args.writeOut, args.writeErr, args.format, args.verb, result, installRepo, args.client);
|
|
38612
|
+
return 0 /* Ok */;
|
|
38613
|
+
}
|
|
38614
|
+
function mapInstallError(error, componentRef, verb) {
|
|
38615
|
+
if (isMissingRegistrationError(error)) {
|
|
38616
|
+
const [ownerOrg, name] = componentRef.split("/");
|
|
38617
|
+
const backendCode = warmHubErrorBackendCode(error);
|
|
38618
|
+
return new CliError(2 /* UserInput */, "USER_INPUT", `No component registered as ${componentRef}`, undefined, `Register it first with 'wh component register ${name ?? componentRef} --org ${ownerOrg ?? "<org>"} --manifest <path>'.`, undefined, backendCode ?? "NOT_FOUND");
|
|
39389
38619
|
}
|
|
39390
|
-
if (
|
|
39391
|
-
|
|
39392
|
-
|
|
39393
|
-
setupResult = await args.callRegisteredSetup({
|
|
39394
|
-
componentRef: args.componentRef,
|
|
39395
|
-
installRepo,
|
|
39396
|
-
installId,
|
|
39397
|
-
expectedManifestHash: resolved.manifestHash,
|
|
39398
|
-
client: args.client
|
|
39399
|
-
});
|
|
39400
|
-
} catch (error) {
|
|
39401
|
-
if (isMissingManifestPermissionError(error)) {
|
|
39402
|
-
const backendCode = warmHubErrorBackendCode(error) ?? warmHubErrorKind(error);
|
|
39403
|
-
throw new CliError(2 /* UserInput */, "USER_INPUT", error.message, undefined, `Ask an org owner/admin to grant the missing permissions on the install repo, then re-run ${args.verb === "Installed" ? "install" : "update"}.`, undefined, backendCode);
|
|
39404
|
-
}
|
|
39405
|
-
throw error;
|
|
39406
|
-
}
|
|
39407
|
-
if (!setupResult.ok) {
|
|
39408
|
-
throw new CliError(1 /* Runtime */, "BACKEND", `Component setup failed with status ${setupResult.status}${setupResult.body ? `: ${setupResult.body}` : ""}`);
|
|
39409
|
-
}
|
|
38620
|
+
if (isMissingManifestPermissionError(error)) {
|
|
38621
|
+
const backendCode = warmHubErrorBackendCode(error) ?? warmHubErrorKind(error);
|
|
38622
|
+
return new CliError(2 /* UserInput */, "USER_INPUT", error.message, undefined, `Ask an org owner/admin to grant the missing permissions on the install repo, then re-run ${verb === "Installed" ? "install" : "update"}.`, undefined, backendCode);
|
|
39410
38623
|
}
|
|
39411
|
-
|
|
39412
|
-
return result.ok ? 0 /* Ok */ : 1 /* Runtime */;
|
|
38624
|
+
return error;
|
|
39413
38625
|
}
|
|
39414
|
-
|
|
39415
|
-
|
|
39416
|
-
|
|
38626
|
+
var REGISTRATION_NOT_FOUND_MESSAGE = "Registered component not found";
|
|
38627
|
+
function isMissingRegistrationError(error) {
|
|
38628
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
38629
|
+
if (message !== REGISTRATION_NOT_FOUND_MESSAGE) {
|
|
38630
|
+
return false;
|
|
38631
|
+
}
|
|
38632
|
+
return warmHubErrorBackendCode(error) === "NOT_FOUND" || warmHubErrorKind(error) === "NOT_FOUND";
|
|
39417
38633
|
}
|
|
39418
38634
|
function isMissingManifestPermissionError(error) {
|
|
39419
38635
|
return warmHubErrorKind(error) === "FORBIDDEN" && error instanceof Error && error.message.startsWith("Cannot install: caller is missing repo permissions required by the manifest:");
|
|
@@ -39426,14 +38642,6 @@ function warmHubErrorKind(error) {
|
|
|
39426
38642
|
const record = error;
|
|
39427
38643
|
return typeof record.kind === "string" ? record.kind : typeof record.code === "string" ? record.code : undefined;
|
|
39428
38644
|
}
|
|
39429
|
-
function warmHubErrorStatus(error) {
|
|
39430
|
-
if (error instanceof WarmHubError)
|
|
39431
|
-
return error.status;
|
|
39432
|
-
if (!error || typeof error !== "object")
|
|
39433
|
-
return;
|
|
39434
|
-
const status = error.status;
|
|
39435
|
-
return typeof status === "number" ? status : undefined;
|
|
39436
|
-
}
|
|
39437
38645
|
function warmHubErrorBackendCode(error) {
|
|
39438
38646
|
if (error instanceof WarmHubError)
|
|
39439
38647
|
return error.backendCode;
|
|
@@ -39442,56 +38650,22 @@ function warmHubErrorBackendCode(error) {
|
|
|
39442
38650
|
const backendCode = error.backendCode;
|
|
39443
38651
|
return typeof backendCode === "string" ? backendCode : undefined;
|
|
39444
38652
|
}
|
|
39445
|
-
async function handleComponentUpdate(args) {
|
|
39446
|
-
const parsedRepo = parseOrgRepo(args.repoFlag, args.config);
|
|
39447
|
-
const installRepo = `${parsedRepo.org}/${parsedRepo.repo}`;
|
|
39448
|
-
const componentId = await resolveInstalledComponentRefId(args.client, parsedRepo.org, parsedRepo.repo, args.componentRef);
|
|
39449
|
-
const installThing = await args.client.thing.get(parsedRepo.org, parsedRepo.repo, `ComponentInstall/${componentId}`);
|
|
39450
|
-
const installData = installThing.data && typeof installThing.data === "object" ? installThing.data : {};
|
|
39451
|
-
const source = resolveComponentUpdateSource(installData);
|
|
39452
|
-
if (source.kind === "registered") {
|
|
39453
|
-
rejectRefForRegistered(source.componentRef, args.refOverride);
|
|
39454
|
-
if (source.componentRef !== args.componentRef) {
|
|
39455
|
-
throw new CliError(2 /* UserInput */, "USER_INPUT", `Component '${args.componentRef}' resolved to an install for '${source.componentRef}', which is inconsistent with the install record.`);
|
|
39456
|
-
}
|
|
39457
|
-
return performRegisteredInstall({
|
|
39458
|
-
componentRef: source.componentRef,
|
|
39459
|
-
persistedInstallData: installData,
|
|
39460
|
-
verb: "Updated",
|
|
39461
|
-
client: args.client,
|
|
39462
|
-
parsedRepo,
|
|
39463
|
-
format: args.format,
|
|
39464
|
-
writeOut: args.writeOut,
|
|
39465
|
-
writeErr: args.writeErr,
|
|
39466
|
-
installFromManifest: args.installFromManifest,
|
|
39467
|
-
resolveRegisteredInstall: args.resolveRegisteredInstall,
|
|
39468
|
-
callRegisteredSetup: args.callRegisteredSetup
|
|
39469
|
-
});
|
|
39470
|
-
}
|
|
39471
|
-
if (source.kind === "system") {
|
|
39472
|
-
throw new CliError(2 /* UserInput */, "USER_INPUT", `Component '${args.componentRef}' is a platform-managed system install and cannot be updated via the CLI; it is reconciled automatically by the WarmHub backend.`);
|
|
39473
|
-
}
|
|
39474
|
-
throw new CliError(2 /* UserInput */, "USER_INPUT", `Component '${args.componentRef}' was not installed from a registered component and can no longer be updated in place.`, undefined, "Register the component (`wh component register <name> --org <org> --manifest <path>`) and reinstall it with `wh component install <org>/<name>`.");
|
|
39475
|
-
}
|
|
39476
38653
|
async function writeInstallResult(writeOut, writeErr, format, verb, result, installRepo, client) {
|
|
39477
|
-
|
|
39478
|
-
|
|
39479
|
-
|
|
39480
|
-
|
|
39481
|
-
writeErr(reservedWarning);
|
|
39482
|
-
}
|
|
38654
|
+
await rebuildInstallSnapshotCache(installRepo, client);
|
|
38655
|
+
const reservedWarning = formatReservedNameWarning(result.componentName);
|
|
38656
|
+
if (reservedWarning) {
|
|
38657
|
+
writeErr(reservedWarning);
|
|
39483
38658
|
}
|
|
39484
38659
|
if (format === "json" || format === "jsonl") {
|
|
39485
38660
|
writeOut(JSON.stringify(result));
|
|
39486
38661
|
return;
|
|
39487
38662
|
}
|
|
39488
|
-
|
|
39489
|
-
|
|
39490
|
-
|
|
38663
|
+
writeOut(`${verb} ${result.componentName} v${result.version} [${result.state}]`);
|
|
38664
|
+
if (result.errors.length > 0) {
|
|
38665
|
+
writeErr(`Completed with warnings: ${result.errors.join("; ")}`);
|
|
39491
38666
|
}
|
|
39492
|
-
writeOut(`${verb === "Installed" ? "Install" : "Update"} failed: ${result.errors.join("; ")}`);
|
|
39493
38667
|
}
|
|
39494
|
-
// ../../node_modules/.bun/undici@6.
|
|
38668
|
+
// ../../node_modules/.bun/undici@6.27.0/node_modules/undici/index.js
|
|
39495
38669
|
var Client = require_client();
|
|
39496
38670
|
var Dispatcher = require_dispatcher();
|
|
39497
38671
|
var Pool = require_pool();
|
|
@@ -39944,4 +39118,4 @@ if (!updateCheckSuppressedByArgv && shouldRunUpdateCheck(updateEligibility)) {
|
|
|
39944
39118
|
var interceptedExitCode = await maybeHandleComponentShellBoundary(dispatchArgv);
|
|
39945
39119
|
process.exitCode = interceptedExitCode === undefined ? await runCli(dispatchArgv, { version: package_default3.version }) : interceptedExitCode;
|
|
39946
39120
|
|
|
39947
|
-
//# debugId=
|
|
39121
|
+
//# debugId=DD2E54A9CAE4693764756E2164756E21
|