openwork-server 0.18.60 → 0.18.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -2
- package/bin/openwork-server.mjs +1 -1
- package/bin/platform.mjs +7 -7
- package/dist/{opencode-plugin-deps-1.18.30.tgz → opencode-plugin-deps-1.18.33.tgz} +0 -0
- package/dist/opencode-plugins/drive-file-tools.js +10 -8
- package/dist/opencode-plugins/openwork-cloud-skills-v2.js +87 -41
- package/dist/opencode-plugins/openwork-context-v2.js +67 -35
- package/dist/opencode-plugins/openwork-extensions-preview.js +9 -7
- package/dist/opencode-plugins/openwork-gateway-quota-v2.js +187 -0
- package/dist/opencode-plugins/openwork-gateway-quota.js +232 -23
- package/dist/opencode-plugins/openwork-provider-sync-v2.js +85 -2
- package/dist/openwork-server.mjs +1234 -371
- package/package.json +2 -2
- package/web/assets/{abnfDiagram-VCTEODGH-D0_4pXEx.js → abnfDiagram-VCTEODGH-DJzrT8Ql.js} +1 -1
- package/web/assets/app-CkmqBm_1.css +32 -0
- package/web/assets/{app-BCXQnJUH.js → app-_2KkkZIM.js} +435 -425
- package/web/assets/{arc-BSTwaImw.js → arc-KehB1xN5.js} +1 -1
- package/web/assets/{architectureDiagram-5GKGNRK7-cXwF0iP0.js → architectureDiagram-5GKGNRK7-C_GL2639.js} +1 -1
- package/web/assets/{artifact-code-view-CUXv3CYK.js → artifact-code-view-CYn_58gV.js} +1 -1
- package/web/assets/{artifact-spreadsheet-editor-CxhNYmjP.js → artifact-spreadsheet-editor-f6V-tYvi.js} +1 -1
- package/web/assets/{artifact-text-editor-k2TGQI-i.js → artifact-text-editor-CiSlW3kl.js} +1 -1
- package/web/assets/{blockDiagram-OSKFZWR5-Cl9p_z8u.js → blockDiagram-OSKFZWR5-DErH-7gY.js} +1 -1
- package/web/assets/{c4Diagram-7LVT6UL2-YQjnoUQ0.js → c4Diagram-7LVT6UL2-aML4z_n9.js} +1 -1
- package/web/assets/channel-7oM0ncHI.js +1 -0
- package/web/assets/{chunk-2Q5K7J3B-YZaSwlzj.js → chunk-2Q5K7J3B-Dw_IH9rW.js} +1 -1
- package/web/assets/{chunk-5VM5RSS4-BICC_wIw.js → chunk-5VM5RSS4-aeJEQ945.js} +1 -1
- package/web/assets/{chunk-F27PBJKO-CBxmcmxs.js → chunk-F27PBJKO-hZwti-Oc.js} +1 -1
- package/web/assets/{chunk-HLEWEB6X-2h2z7zt8.js → chunk-HLEWEB6X-JFNzm3Ge.js} +1 -1
- package/web/assets/{chunk-JWPE2WC7-BnAMOpXl.js → chunk-JWPE2WC7-B34hvYk7.js} +1 -1
- package/web/assets/{chunk-POPQ4Y6H-pvDYQBBM.js → chunk-POPQ4Y6H-CDqgEp-q.js} +1 -1
- package/web/assets/{chunk-SVP7TREG-QuKLl3v0.js → chunk-SVP7TREG-B65ta9aQ.js} +1 -1
- package/web/assets/{chunk-XXDRQBXY-4Bt9wCBO.js → chunk-XXDRQBXY-DjTi6c9m.js} +1 -1
- package/web/assets/{chunk-ZLD2IHE6-C_RSrkqU.js → chunk-ZLD2IHE6-CbviXFvb.js} +1 -1
- package/web/assets/classDiagram-CYGNFDIV-BkidFauP.js +1 -0
- package/web/assets/classDiagram-v2-TLXNO2FR-BkidFauP.js +1 -0
- package/web/assets/{cose-bilkent-JH36ORCC-CciOYQb4.js → cose-bilkent-JH36ORCC-Cl9SO5zd.js} +1 -1
- package/web/assets/{cynefin-OW5HDTMX-k8-mUlq4.js → cynefin-OW5HDTMX-CAcz2tHt.js} +1 -1
- package/web/assets/{cynefinDiagram-5FMLGOSQ-D1qAHzq3.js → cynefinDiagram-5FMLGOSQ-BJHft4FO.js} +1 -1
- package/web/assets/{dagre-OS7QT2EB-BP1VuF_z.js → dagre-OS7QT2EB-DbdnY1uS.js} +1 -1
- package/web/assets/{diagram-S7CK7UJ4-crXkWleC.js → diagram-S7CK7UJ4-C07WD5Lc.js} +1 -1
- package/web/assets/{diagram-UQ7AKVKN-CtHAmCY-.js → diagram-UQ7AKVKN-D8VCjq9x.js} +1 -1
- package/web/assets/{diagram-VSXAHHWV-C-Fhuwy8.js → diagram-VSXAHHWV-D1XSfMnK.js} +1 -1
- package/web/assets/{diagram-VX7I27RA-DkRkNPuj.js → diagram-VX7I27RA-3GZe-yrf.js} +1 -1
- package/web/assets/{diagram-Z3DM3KII-DVERPCFS.js → diagram-Z3DM3KII-CI43WcIB.js} +1 -1
- package/web/assets/{ebnfDiagram-PWID7BFC-PrSifYGF.js → ebnfDiagram-PWID7BFC-CTzouade.js} +1 -1
- package/web/assets/{erDiagram-2YWLMYGG-D8-wfUYq.js → erDiagram-2YWLMYGG-CNcqsnqx.js} +1 -1
- package/web/assets/{flowDiagram-T62WH6J4-BS-_wkGe.js → flowDiagram-T62WH6J4-pomAqjgF.js} +1 -1
- package/web/assets/{ganttDiagram-EL5Y4UJY-D9PWmuWE.js → ganttDiagram-EL5Y4UJY-C1dNaxxj.js} +1 -1
- package/web/assets/{gitGraphDiagram-WWUBYQGX-DIP9p63c.js → gitGraphDiagram-WWUBYQGX-Ni8GECg1.js} +1 -1
- package/web/assets/{infoDiagram-FKFFQAWI-BzU6-acC.js → infoDiagram-FKFFQAWI-C0kvE7Zu.js} +1 -1
- package/web/assets/{ishikawaDiagram-5VMMS53U-CvYS2ayc.js → ishikawaDiagram-5VMMS53U-CxmP_irp.js} +1 -1
- package/web/assets/{journeyDiagram-EYS64GPL-Cr0qdK-D.js → journeyDiagram-EYS64GPL-60GkPgH5.js} +1 -1
- package/web/assets/{kanban-definition-UXKFOSKX-DhffGp7U.js → kanban-definition-UXKFOSKX-ByxcB0T_.js} +1 -1
- package/web/assets/{layout-b5jqOIam.js → layout-BD9ef90s.js} +1 -1
- package/web/assets/{linear-zLNMwGhI.js → linear-Dp9l0lBr.js} +1 -1
- package/web/assets/{mermaid.core-DB_TNiSG.js → mermaid.core-FKm3Akes.js} +6 -6
- package/web/assets/{mindmap-definition-THT77NOG-DkQz2hbh.js → mindmap-definition-THT77NOG-i7WJlWHV.js} +1 -1
- package/web/assets/{pegDiagram-XKGWAZYB-CB313CDF.js → pegDiagram-XKGWAZYB-DfI-LsJq.js} +1 -1
- package/web/assets/{pieDiagram-E7YTZNPT-yaDJVY4d.js → pieDiagram-E7YTZNPT-kcgWYBSb.js} +1 -1
- package/web/assets/{quadrantDiagram-AXDQQJYC-BkV8iwHS.js → quadrantDiagram-AXDQQJYC-DVyziZnc.js} +1 -1
- package/web/assets/{railroadDiagram-O6MQD6OU-T_JVDRpV.js → railroadDiagram-O6MQD6OU-CWgHq9nv.js} +1 -1
- package/web/assets/{requirementDiagram-IS5BZ75X-B68yTCqr.js → requirementDiagram-IS5BZ75X-B7fgi4lz.js} +1 -1
- package/web/assets/{sankeyDiagram-P5KCCOFB-Bx31O26O.js → sankeyDiagram-P5KCCOFB-D1-pD_qh.js} +1 -1
- package/web/assets/{sequenceDiagram-WJ2MYXX4-CsCoFTAg.js → sequenceDiagram-WJ2MYXX4-B6oeRmVj.js} +1 -1
- package/web/assets/{sizeCapture-INFHLROL-B3a49hkJ.js → sizeCapture-INFHLROL-BTpKGFt5.js} +1 -1
- package/web/assets/{stateDiagram-XQSTLZYL-DjCdHmx5.js → stateDiagram-XQSTLZYL-zXJRxE6h.js} +1 -1
- package/web/assets/stateDiagram-v2-IH3M54BS-CmwZ6tXj.js +1 -0
- package/web/assets/{swimlanes-V6O3JKXN-4u8S1I3e.js → swimlanes-V6O3JKXN-Dc7MXPb3.js} +1 -1
- package/web/assets/swimlanesDiagram-JKAHXJPX-BXoJEx2b.js +8 -0
- package/web/assets/{timeline-definition-24CTP7MA-r3GnOjJo.js → timeline-definition-24CTP7MA-DYhgbnjW.js} +1 -1
- package/web/assets/{vennDiagram-4TSXK5OY-59IlTU54.js → vennDiagram-4TSXK5OY-DRnme7za.js} +1 -1
- package/web/assets/{wardleyDiagram-VM6X3IG4-C3ALfLHE.js → wardleyDiagram-VM6X3IG4-wAoo4GsZ.js} +1 -1
- package/web/assets/{workspace-file-tree-C6GhNx3L.js → workspace-file-tree-DmAwvqtx.js} +1 -1
- package/web/assets/{xychartDiagram-S5SC5T6Z-CoYtWlkb.js → xychartDiagram-S5SC5T6Z-_Z_TOWBn.js} +1 -1
- package/web/index.html +2 -2
- package/web/assets/app-DVblmMbF.css +0 -32
- package/web/assets/channel-DwV664-P.js +0 -1
- package/web/assets/classDiagram-CYGNFDIV-BKhd9faI.js +0 -1
- package/web/assets/classDiagram-v2-TLXNO2FR-BKhd9faI.js +0 -1
- package/web/assets/stateDiagram-v2-IH3M54BS-Cf0tqY7x.js +0 -1
- package/web/assets/swimlanesDiagram-JKAHXJPX-COK5qx0u.js +0 -8
package/dist/openwork-server.mjs
CHANGED
|
@@ -225924,9 +225924,11 @@ function normalizeRuntimeOpencodeConfig(value3) {
|
|
|
225924
225924
|
const permission = isRecord7(value3.permission) ? value3.permission : undefined;
|
|
225925
225925
|
const externalDirectory = permission && isRecord7(permission.external_directory) ? permission.external_directory : undefined;
|
|
225926
225926
|
const provider = isRecord7(value3.provider) ? value3.provider : undefined;
|
|
225927
|
+
const managedPrompt = typeof value3.managedPrompt === "string" && value3.managedPrompt.trim() ? value3.managedPrompt : undefined;
|
|
225927
225928
|
return {
|
|
225928
225929
|
...defaultAgent ? { default_agent: defaultAgent } : {},
|
|
225929
225930
|
...value3.managedPolicy !== undefined ? { managedPolicy: desktopConfigSchema.parse(value3.managedPolicy) } : {},
|
|
225931
|
+
...managedPrompt ? { managedPrompt } : {},
|
|
225930
225932
|
...plugin ? { plugin } : {},
|
|
225931
225933
|
...disabledProviders ? { disabled_providers: disabledProviders } : {},
|
|
225932
225934
|
...mcp ? { mcp } : {},
|
|
@@ -226082,6 +226084,7 @@ function mergeRuntimeOpencodeConfigLayers(base2, overlay) {
|
|
|
226082
226084
|
};
|
|
226083
226085
|
return normalizeRuntimeOpencodeConfig({
|
|
226084
226086
|
...base2.managedPolicy ? { managedPolicy: base2.managedPolicy } : {},
|
|
226087
|
+
...base2.managedPrompt ? { managedPrompt: base2.managedPrompt } : {},
|
|
226085
226088
|
...base2.default_agent || overlay.default_agent ? { default_agent: overlay.default_agent ?? base2.default_agent } : {},
|
|
226086
226089
|
...plugin.length ? { plugin } : {},
|
|
226087
226090
|
...disabledProviders.length ? { disabled_providers: disabledProviders } : {},
|
|
@@ -226299,8 +226302,14 @@ function updateRuntimeConfig(config2, workspaceId, updater) {
|
|
|
226299
226302
|
}
|
|
226300
226303
|
function writeRuntimeOpencodeConfig(config2, workspaceId, updater) {
|
|
226301
226304
|
return updateRuntimeConfig(config2, workspaceId, (current2) => {
|
|
226302
|
-
const { managedPolicy, ...editable } = current2;
|
|
226303
|
-
return { ...updater(editable), managedPolicy };
|
|
226305
|
+
const { managedPolicy, managedPrompt, ...editable } = current2;
|
|
226306
|
+
return { ...updater(editable), managedPolicy, managedPrompt };
|
|
226307
|
+
});
|
|
226308
|
+
}
|
|
226309
|
+
function writeManagedPrompt(config2, prompt) {
|
|
226310
|
+
return updateRuntimeConfig(config2, ENGINE_GLOBAL_RUNTIME_CONFIG_ID, (current2) => {
|
|
226311
|
+
const { managedPrompt: _previous, ...rest } = current2;
|
|
226312
|
+
return prompt.trim() ? { ...rest, managedPrompt: prompt } : rest;
|
|
226304
226313
|
});
|
|
226305
226314
|
}
|
|
226306
226315
|
function clearManagedDesktopPolicy(config2) {
|
|
@@ -235963,21 +235972,35 @@ async function openMcpResourceReader(input) {
|
|
|
235963
235972
|
if (notification.response.status !== 202 || notification.payload !== null)
|
|
235964
235973
|
return null;
|
|
235965
235974
|
let nextId = 2;
|
|
235975
|
+
let broken = false;
|
|
235976
|
+
const readContents = async (uri, meta3) => {
|
|
235977
|
+
const resource = await mcpPost(input.fetcher, url2, sessionHeaders, {
|
|
235978
|
+
id: nextId++,
|
|
235979
|
+
jsonrpc: "2.0",
|
|
235980
|
+
method: "resources/read",
|
|
235981
|
+
params: { uri, ...meta3 ? { _meta: meta3 } : {} }
|
|
235982
|
+
}).catch(() => null);
|
|
235983
|
+
if (!resource?.response.ok || resource.payload === null) {
|
|
235984
|
+
broken = true;
|
|
235985
|
+
return null;
|
|
235986
|
+
}
|
|
235987
|
+
const result3 = jsonRpcResult(resource.payload);
|
|
235988
|
+
if (!result3 || !Array.isArray(result3.contents))
|
|
235989
|
+
return null;
|
|
235990
|
+
const texts = new Map;
|
|
235991
|
+
for (const item of result3.contents) {
|
|
235992
|
+
if (isRecord12(item) && typeof item.uri === "string" && typeof item.text === "string" && !texts.has(item.uri))
|
|
235993
|
+
texts.set(item.uri, item.text);
|
|
235994
|
+
}
|
|
235995
|
+
return { texts, meta: isRecord12(result3._meta) ? result3._meta : {} };
|
|
235996
|
+
};
|
|
235966
235997
|
return {
|
|
235967
|
-
|
|
235968
|
-
|
|
235969
|
-
|
|
235970
|
-
|
|
235971
|
-
|
|
235972
|
-
|
|
235973
|
-
});
|
|
235974
|
-
if (!resource.response.ok)
|
|
235975
|
-
return null;
|
|
235976
|
-
const contents = jsonRpcResult(resource.payload)?.contents;
|
|
235977
|
-
if (!Array.isArray(contents))
|
|
235978
|
-
return null;
|
|
235979
|
-
const text4 = contents.find((item) => isRecord12(item) && item.uri === uri && typeof item.text === "string")?.text;
|
|
235980
|
-
return typeof text4 === "string" ? text4 : null;
|
|
235998
|
+
readContents,
|
|
235999
|
+
async read(uri, meta3) {
|
|
236000
|
+
return (await readContents(uri, meta3))?.texts.get(uri) ?? null;
|
|
236001
|
+
},
|
|
236002
|
+
get broken() {
|
|
236003
|
+
return broken;
|
|
235981
236004
|
}
|
|
235982
236005
|
};
|
|
235983
236006
|
}
|
|
@@ -236390,7 +236413,7 @@ var init_connect_mcp_server_catalog = __esm(() => {
|
|
|
236390
236413
|
pendingCatalogReads = new WeakMap;
|
|
236391
236414
|
});
|
|
236392
236415
|
|
|
236393
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
236416
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/core/symbols.js
|
|
236394
236417
|
var require_symbols = __commonJS((exports, module) => {
|
|
236395
236418
|
module.exports = {
|
|
236396
236419
|
kClose: Symbol("close"),
|
|
@@ -236461,7 +236484,7 @@ var require_symbols = __commonJS((exports, module) => {
|
|
|
236461
236484
|
};
|
|
236462
236485
|
});
|
|
236463
236486
|
|
|
236464
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
236487
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/core/errors.js
|
|
236465
236488
|
var require_errors2 = __commonJS((exports, module) => {
|
|
236466
236489
|
var kUndiciError = Symbol.for("undici.error.UND_ERR");
|
|
236467
236490
|
|
|
@@ -236840,7 +236863,7 @@ var require_errors2 = __commonJS((exports, module) => {
|
|
|
236840
236863
|
};
|
|
236841
236864
|
});
|
|
236842
236865
|
|
|
236843
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
236866
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/core/constants.js
|
|
236844
236867
|
var require_constants = __commonJS((exports, module) => {
|
|
236845
236868
|
var headerNameLowerCasedRecord = {};
|
|
236846
236869
|
var wellknownHeaderNames = [
|
|
@@ -236952,7 +236975,7 @@ var require_constants = __commonJS((exports, module) => {
|
|
|
236952
236975
|
};
|
|
236953
236976
|
});
|
|
236954
236977
|
|
|
236955
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
236978
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/core/tree.js
|
|
236956
236979
|
var require_tree = __commonJS((exports, module) => {
|
|
236957
236980
|
var {
|
|
236958
236981
|
wellknownHeaderNames,
|
|
@@ -237064,7 +237087,7 @@ var require_tree = __commonJS((exports, module) => {
|
|
|
237064
237087
|
};
|
|
237065
237088
|
});
|
|
237066
237089
|
|
|
237067
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
237090
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/core/util.js
|
|
237068
237091
|
var require_util3 = __commonJS((exports, module) => {
|
|
237069
237092
|
var assert3 = __require("node:assert");
|
|
237070
237093
|
var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols();
|
|
@@ -237568,7 +237591,7 @@ var require_util3 = __commonJS((exports, module) => {
|
|
|
237568
237591
|
};
|
|
237569
237592
|
});
|
|
237570
237593
|
|
|
237571
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
237594
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/core/diagnostics.js
|
|
237572
237595
|
var require_diagnostics = __commonJS((exports, module) => {
|
|
237573
237596
|
var diagnosticsChannel = __require("node:diagnostics_channel");
|
|
237574
237597
|
var util = __require("node:util");
|
|
@@ -237695,7 +237718,7 @@ var require_diagnostics = __commonJS((exports, module) => {
|
|
|
237695
237718
|
};
|
|
237696
237719
|
});
|
|
237697
237720
|
|
|
237698
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
237721
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/core/request.js
|
|
237699
237722
|
var require_request = __commonJS((exports, module) => {
|
|
237700
237723
|
var {
|
|
237701
237724
|
InvalidArgumentError,
|
|
@@ -237905,10 +237928,46 @@ var require_request = __commonJS((exports, module) => {
|
|
|
237905
237928
|
return false;
|
|
237906
237929
|
}
|
|
237907
237930
|
}
|
|
237908
|
-
onUpgrade(statusCode, headers, socket) {
|
|
237931
|
+
onUpgrade(statusCode, headers, socket, statusText = "") {
|
|
237932
|
+
this.onFinally();
|
|
237909
237933
|
assert3(!this.aborted);
|
|
237910
237934
|
assert3(!this.completed);
|
|
237911
|
-
|
|
237935
|
+
if (statusCode !== null) {
|
|
237936
|
+
this.#publishUpgradeHeaders(statusCode, headers, statusText);
|
|
237937
|
+
}
|
|
237938
|
+
const result3 = this[kHandler].onUpgrade(statusCode, headers, socket);
|
|
237939
|
+
if (!this.aborted) {
|
|
237940
|
+
this.completed = true;
|
|
237941
|
+
if (statusCode !== null) {
|
|
237942
|
+
this.#publishUpgradeTrailers();
|
|
237943
|
+
}
|
|
237944
|
+
}
|
|
237945
|
+
return result3;
|
|
237946
|
+
}
|
|
237947
|
+
onUpgradeResponse(statusCode, headers, parseHeaders, statusText = "") {
|
|
237948
|
+
assert3(!this.aborted);
|
|
237949
|
+
assert3(this.completed);
|
|
237950
|
+
if (channels.headers.hasSubscribers) {
|
|
237951
|
+
this.#publishUpgradeHeaders(statusCode, parseHeaders(headers), statusText);
|
|
237952
|
+
}
|
|
237953
|
+
this.#publishUpgradeTrailers();
|
|
237954
|
+
}
|
|
237955
|
+
onUpgradeError(error48) {
|
|
237956
|
+
assert3(!this.aborted);
|
|
237957
|
+
assert3(this.completed);
|
|
237958
|
+
if (channels.error.hasSubscribers) {
|
|
237959
|
+
channels.error.publish({ request: this, error: error48 });
|
|
237960
|
+
}
|
|
237961
|
+
}
|
|
237962
|
+
#publishUpgradeHeaders(statusCode, headers, statusText) {
|
|
237963
|
+
if (channels.headers.hasSubscribers) {
|
|
237964
|
+
channels.headers.publish({ request: this, response: { statusCode, headers, statusText } });
|
|
237965
|
+
}
|
|
237966
|
+
}
|
|
237967
|
+
#publishUpgradeTrailers() {
|
|
237968
|
+
if (channels.trailers.hasSubscribers) {
|
|
237969
|
+
channels.trailers.publish({ request: this, trailers: [] });
|
|
237970
|
+
}
|
|
237912
237971
|
}
|
|
237913
237972
|
onComplete(trailers) {
|
|
237914
237973
|
this.onFinally();
|
|
@@ -238033,7 +238092,7 @@ var require_request = __commonJS((exports, module) => {
|
|
|
238033
238092
|
module.exports = Request4;
|
|
238034
238093
|
});
|
|
238035
238094
|
|
|
238036
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
238095
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/dispatcher.js
|
|
238037
238096
|
var require_dispatcher = __commonJS((exports, module) => {
|
|
238038
238097
|
var EventEmitter = __require("node:events");
|
|
238039
238098
|
|
|
@@ -238087,8 +238146,9 @@ var require_dispatcher = __commonJS((exports, module) => {
|
|
|
238087
238146
|
module.exports = Dispatcher;
|
|
238088
238147
|
});
|
|
238089
238148
|
|
|
238090
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
238149
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/dispatcher-base.js
|
|
238091
238150
|
var require_dispatcher_base = __commonJS((exports, module) => {
|
|
238151
|
+
var buffer = __require("node:buffer");
|
|
238092
238152
|
var Dispatcher = require_dispatcher();
|
|
238093
238153
|
var {
|
|
238094
238154
|
ClientDestroyedError,
|
|
@@ -238100,6 +238160,7 @@ var require_dispatcher_base = __commonJS((exports, module) => {
|
|
|
238100
238160
|
var kOnClosed = Symbol("onClosed");
|
|
238101
238161
|
var kInterceptedDispatch = Symbol("Intercepted Dispatch");
|
|
238102
238162
|
var kWebSocketOptions = Symbol("webSocketOptions");
|
|
238163
|
+
var kEventSourceOptions = Symbol("eventSourceOptions");
|
|
238103
238164
|
|
|
238104
238165
|
class DispatcherBase extends Dispatcher {
|
|
238105
238166
|
constructor(opts) {
|
|
@@ -238109,6 +238170,7 @@ var require_dispatcher_base = __commonJS((exports, module) => {
|
|
|
238109
238170
|
this[kClosed] = false;
|
|
238110
238171
|
this[kOnClosed] = [];
|
|
238111
238172
|
this[kWebSocketOptions] = opts?.webSocket ?? {};
|
|
238173
|
+
this[kEventSourceOptions] = opts?.eventSource ?? {};
|
|
238112
238174
|
}
|
|
238113
238175
|
get webSocketOptions() {
|
|
238114
238176
|
return {
|
|
@@ -238116,6 +238178,11 @@ var require_dispatcher_base = __commonJS((exports, module) => {
|
|
|
238116
238178
|
maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024
|
|
238117
238179
|
};
|
|
238118
238180
|
}
|
|
238181
|
+
get eventSourceOptions() {
|
|
238182
|
+
return {
|
|
238183
|
+
maxEventSize: this[kEventSourceOptions].maxEventSize ?? buffer.kStringMaxLength
|
|
238184
|
+
};
|
|
238185
|
+
}
|
|
238119
238186
|
get destroyed() {
|
|
238120
238187
|
return this[kDestroyed];
|
|
238121
238188
|
}
|
|
@@ -238251,7 +238318,7 @@ var require_dispatcher_base = __commonJS((exports, module) => {
|
|
|
238251
238318
|
module.exports = DispatcherBase;
|
|
238252
238319
|
});
|
|
238253
238320
|
|
|
238254
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
238321
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/util/timers.js
|
|
238255
238322
|
var require_timers = __commonJS((exports, module) => {
|
|
238256
238323
|
var fastNow = 0;
|
|
238257
238324
|
var RESOLUTION_MS = 1000;
|
|
@@ -238365,7 +238432,7 @@ var require_timers = __commonJS((exports, module) => {
|
|
|
238365
238432
|
};
|
|
238366
238433
|
});
|
|
238367
238434
|
|
|
238368
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
238435
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/core/connect.js
|
|
238369
238436
|
var require_connect = __commonJS((exports, module) => {
|
|
238370
238437
|
var net3 = __require("node:net");
|
|
238371
238438
|
var assert3 = __require("node:assert");
|
|
@@ -238537,7 +238604,7 @@ var require_connect = __commonJS((exports, module) => {
|
|
|
238537
238604
|
module.exports = buildConnector;
|
|
238538
238605
|
});
|
|
238539
238606
|
|
|
238540
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
238607
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/llhttp/utils.js
|
|
238541
238608
|
var require_utils2 = __commonJS((exports) => {
|
|
238542
238609
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
238543
238610
|
exports.enumToMap = undefined;
|
|
@@ -238554,7 +238621,7 @@ var require_utils2 = __commonJS((exports) => {
|
|
|
238554
238621
|
exports.enumToMap = enumToMap;
|
|
238555
238622
|
});
|
|
238556
238623
|
|
|
238557
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
238624
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/llhttp/constants.js
|
|
238558
238625
|
var require_constants2 = __commonJS((exports) => {
|
|
238559
238626
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
238560
238627
|
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;
|
|
@@ -238870,19 +238937,19 @@ var require_constants2 = __commonJS((exports) => {
|
|
|
238870
238937
|
};
|
|
238871
238938
|
});
|
|
238872
238939
|
|
|
238873
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
238940
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/llhttp/llhttp-wasm.js
|
|
238874
238941
|
var require_llhttp_wasm = __commonJS((exports, module) => {
|
|
238875
238942
|
var { Buffer: Buffer2 } = __require("node:buffer");
|
|
238876
238943
|
module.exports = Buffer2.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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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB9ysPC0GQMQ8LQdcxDwtBoi0PC0HUJw8LQeArDwtBnywPC0HrMQ8LQdUfDwtByjEPC0HeJQ8LQdQeDwtB9BwPC0GnMg8LQbEdDwtBoB0PC0G5MQ8LQbwwDwtBkiEPC0GzJg8LQeksDwtBrB4PC0HUKw8LQfcmDwtBgCYPC0GwIQ8LQf4eDwtBjSMPC0GJLQ8LQfciDwtBoDEPC0GuHw8LQcYlDwtB6B4PC0GTIg8LQcIvDwtBwx0PC0GLLA8LQeEdDwtBjS8PC0HqIQ8LQbQtDwtB0i8PC0HfMg8LQdIyDwtB8DAPC0GpIg8LQfkjDwtBmR4PC0G1LA8LQZswDwtBkjIPC0G2Kw8LQcIiDwtB+DIPC0GeJQ8LQdAiDwtBuh4PC0GBHg8LAAtB1iEhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCz4BAn8CQCAAKAI4IgNFDQAgAygCBCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBxhE2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCCCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9go2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCDCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7Ro2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCECIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlRA2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCFCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBqhs2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCGCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7RM2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCKCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9gg2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCHCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBwhk2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCICIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlBQ2AhBBGCEECyAEC1kBAn8CQCAALQAoQQFGDQAgAC8BMiIBQeQAa0HkAEkNACABQcwBRg0AIAFBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhAiAAQYgEcUGABEYNACAAQShxRSECCyACC4wBAQJ/AkACQAJAIAAtACpFDQAgAC0AK0UNACAALwEwIgFBAnFFDQEMAgsgAC8BMCIBQQFxRQ0BC0EBIQIgAC0AKEEBRg0AIAAvATIiAEHkAGtB5ABJDQAgAEHMAUYNACAAQbACRg0AIAFBwABxDQBBACECIAFBiARxQYAERg0AIAFBKHFBAEchAgsgAgtXACAAQRhqQgA3AwAgAEIANwMAIABBOGpCADcDACAAQTBqQgA3AwAgAEEoakIANwMAIABBIGpCADcDACAAQRBqQgA3AwAgAEEIakIANwMAIABB3QE2AhwLBgAgABAyC5otAQt/IwBBEGsiCiQAQaTQACgCACIJRQRAQeTTACgCACIFRQRAQfDTAEJ/NwIAQejTAEKAgISAgIDAADcCAEHk0wAgCkEIakFwcUHYqtWqBXMiBTYCAEH40wBBADYCAEHI0wBBADYCAAtBzNMAQYDUBDYCAEGc0ABBgNQENgIAQbDQACAFNgIAQazQAEF/NgIAQdDTAEGArAM2AgADQCABQcjQAGogAUG80ABqIgI2AgAgAiABQbTQAGoiAzYCACABQcDQAGogAzYCACABQdDQAGogAUHE0ABqIgM2AgAgAyACNgIAIAFB2NAAaiABQczQAGoiAjYCACACIAM2AgAgAUHU0ABqIAI2AgAgAUEgaiIBQYACRw0AC0GM1ARBwasDNgIAQajQAEH00wAoAgA2AgBBmNAAQcCrAzYCAEGk0ABBiNQENgIAQcz/B0E4NgIAQYjUBCEJCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB7AFNBEBBjNAAKAIAIgZBECAAQRNqQXBxIABBC0kbIgRBA3YiAHYiAUEDcQRAAkAgAUEBcSAAckEBcyICQQN0IgBBtNAAaiIBIABBvNAAaigCACIAKAIIIgNGBEBBjNAAIAZBfiACd3E2AgAMAQsgASADNgIIIAMgATYCDAsgAEEIaiEBIAAgAkEDdCICQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDBELQZTQACgCACIIIARPDQEgAQRAAkBBAiAAdCICQQAgAmtyIAEgAHRxaCIAQQN0IgJBtNAAaiIBIAJBvNAAaigCACICKAIIIgNGBEBBjNAAIAZBfiAAd3EiBjYCAAwBCyABIAM2AgggAyABNgIMCyACIARBA3I2AgQgAEEDdCIAIARrIQUgACACaiAFNgIAIAIgBGoiBCAFQQFyNgIEIAgEQCAIQXhxQbTQAGohAEGg0AAoAgAhAwJ/QQEgCEEDdnQiASAGcUUEQEGM0AAgASAGcjYCACAADAELIAAoAggLIgEgAzYCDCAAIAM2AgggAyAANgIMIAMgATYCCAsgAkEIaiEBQaDQACAENgIAQZTQACAFNgIADBELQZDQACgCACILRQ0BIAtoQQJ0QbzSAGooAgAiACgCBEF4cSAEayEFIAAhAgNAAkAgAigCECIBRQRAIAJBFGooAgAiAUUNAQsgASgCBEF4cSAEayIDIAVJIQIgAyAFIAIbIQUgASAAIAIbIQAgASECDAELCyAAKAIYIQkgACgCDCIDIABHBEBBnNAAKAIAGiADIAAoAggiATYCCCABIAM2AgwMEAsgAEEUaiICKAIAIgFFBEAgACgCECIBRQ0DIABBEGohAgsDQCACIQcgASIDQRRqIgIoAgAiAQ0AIANBEGohAiADKAIQIgENAAsgB0EANgIADA8LQX8hBCAAQb9/Sw0AIABBE2oiAUFwcSEEQZDQACgCACIIRQ0AQQAgBGshBQJAAkACQAJ/QQAgBEGAAkkNABpBHyAEQf///wdLDQAaIARBJiABQQh2ZyIAa3ZBAXEgAEEBdGtBPmoLIgZBAnRBvNIAaigCACICRQRAQQAhAUEAIQMMAQtBACEBIARBGSAGQQF2a0EAIAZBH0cbdCEAQQAhAwNAAkAgAigCBEF4cSAEayIHIAVPDQAgAiEDIAciBQ0AQQAhBSACIQEMAwsgASACQRRqKAIAIgcgByACIABBHXZBBHFqQRBqKAIAIgJGGyABIAcbIQEgAEEBdCEAIAINAAsLIAEgA3JFBEBBACEDQQIgBnQiAEEAIABrciAIcSIARQ0DIABoQQJ0QbzSAGooAgAhAQsgAUUNAQsDQCABKAIEQXhxIARrIgIgBUkhACACIAUgABshBSABIAMgABshAyABKAIQIgAEfyAABSABQRRqKAIACyIBDQALCyADRQ0AIAVBlNAAKAIAIARrTw0AIAMoAhghByADIAMoAgwiAEcEQEGc0AAoAgAaIAAgAygCCCIBNgIIIAEgADYCDAwOCyADQRRqIgIoAgAiAUUEQCADKAIQIgFFDQMgA0EQaiECCwNAIAIhBiABIgBBFGoiAigCACIBDQAgAEEQaiECIAAoAhAiAQ0ACyAGQQA2AgAMDQtBlNAAKAIAIgMgBE8EQEGg0AAoAgAhAQJAIAMgBGsiAkEQTwRAIAEgBGoiACACQQFyNgIEIAEgA2ogAjYCACABIARBA3I2AgQMAQsgASADQQNyNgIEIAEgA2oiACAAKAIEQQFyNgIEQQAhAEEAIQILQZTQACACNgIAQaDQACAANgIAIAFBCGohAQwPC0GY0AAoAgAiAyAESwRAIAQgCWoiACADIARrIgFBAXI2AgRBpNAAIAA2AgBBmNAAIAE2AgAgCSAEQQNyNgIEIAlBCGohAQwPC0EAIQEgBAJ/QeTTACgCAARAQezTACgCAAwBC0Hw0wBCfzcCAEHo0wBCgICEgICAwAA3AgBB5NMAIApBDGpBcHFB2KrVqgVzNgIAQfjTAEEANgIAQcjTAEEANgIAQYCABAsiACAEQccAaiIFaiIGQQAgAGsiB3EiAk8EQEH80wBBMDYCAAwPCwJAQcTTACgCACIBRQ0AQbzTACgCACIIIAJqIQAgACABTSAAIAhLcQ0AQQAhAUH80wBBMDYCAAwPC0HI0wAtAABBBHENBAJAAkAgCQRAQczTACEBA0AgASgCACIAIAlNBEAgACABKAIEaiAJSw0DCyABKAIIIgENAAsLQQAQMyIAQX9GDQUgAiEGQejTACgCACIBQQFrIgMgAHEEQCACIABrIAAgA2pBACABa3FqIQYLIAQgBk8NBSAGQf7///8HSw0FQcTTACgCACIDBEBBvNMAKAIAIgcgBmohASABIAdNDQYgASADSw0GCyAGEDMiASAARw0BDAcLIAYgA2sgB3EiBkH+////B0sNBCAGEDMhACAAIAEoAgAgASgCBGpGDQMgACEBCwJAIAYgBEHIAGpPDQAgAUF/Rg0AQezTACgCACIAIAUgBmtqQQAgAGtxIgBB/v///wdLBEAgASEADAcLIAAQM0F/RwRAIAAgBmohBiABIQAMBwtBACAGaxAzGgwECyABIgBBf0cNBQwDC0EAIQMMDAtBACEADAoLIABBf0cNAgtByNMAQcjTACgCAEEEcjYCAAsgAkH+////B0sNASACEDMhAEEAEDMhASAAQX9GDQEgAUF/Rg0BIAAgAU8NASABIABrIgYgBEE4ak0NAQtBvNMAQbzTACgCACAGaiIBNgIAQcDTACgCACABSQRAQcDTACABNgIACwJAAkACQEGk0AAoAgAiAgRAQczTACEBA0AgACABKAIAIgMgASgCBCIFakYNAiABKAIIIgENAAsMAgtBnNAAKAIAIgFBAEcgACABT3FFBEBBnNAAIAA2AgALQQAhAUHQ0wAgBjYCAEHM0wAgADYCAEGs0ABBfzYCAEGw0ABB5NMAKAIANgIAQdjTAEEANgIAA0AgAUHI0ABqIAFBvNAAaiICNgIAIAIgAUG00ABqIgM2AgAgAUHA0ABqIAM2AgAgAUHQ0ABqIAFBxNAAaiIDNgIAIAMgAjYCACABQdjQAGogAUHM0ABqIgI2AgAgAiADNgIAIAFB1NAAaiACNgIAIAFBIGoiAUGAAkcNAAtBeCAAa0EPcSIBIABqIgIgBkE4ayIDIAFrIgFBAXI2AgRBqNAAQfTTACgCADYCAEGY0AAgATYCAEGk0AAgAjYCACAAIANqQTg2AgQMAgsgACACTQ0AIAIgA0kNACABKAIMQQhxDQBBeCACa0EPcSIAIAJqIgNBmNAAKAIAIAZqIgcgAGsiAEEBcjYCBCABIAUgBmo2AgRBqNAAQfTTACgCADYCAEGY0AAgADYCAEGk0AAgAzYCACACIAdqQTg2AgQMAQsgAEGc0AAoAgBJBEBBnNAAIAA2AgALIAAgBmohA0HM0wAhAQJAAkACQANAIAMgASgCAEcEQCABKAIIIgENAQwCCwsgAS0ADEEIcUUNAQtBzNMAIQEDQCABKAIAIgMgAk0EQCADIAEoAgRqIgUgAksNAwsgASgCCCEBDAALAAsgASAANgIAIAEgASgCBCAGajYCBCAAQXggAGtBD3FqIgkgBEEDcjYCBCADQXggA2tBD3FqIgYgBCAJaiIEayEBIAIgBkYEQEGk0AAgBDYCAEGY0ABBmNAAKAIAIAFqIgA2AgAgBCAAQQFyNgIEDAgLQaDQACgCACAGRgRAQaDQACAENgIAQZTQAEGU0AAoAgAgAWoiADYCACAEIABBAXI2AgQgACAEaiAANgIADAgLIAYoAgQiBUEDcUEBRw0GIAVBeHEhCCAFQf8BTQRAIAVBA3YhAyAGKAIIIgAgBigCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBwsgAiAANgIIIAAgAjYCDAwGCyAGKAIYIQcgBiAGKAIMIgBHBEAgACAGKAIIIgI2AgggAiAANgIMDAULIAZBFGoiAigCACIFRQRAIAYoAhAiBUUNBCAGQRBqIQILA0AgAiEDIAUiAEEUaiICKAIAIgUNACAAQRBqIQIgACgCECIFDQALIANBADYCAAwEC0F4IABrQQ9xIgEgAGoiByAGQThrIgMgAWsiAUEBcjYCBCAAIANqQTg2AgQgAiAFQTcgBWtBD3FqQT9rIgMgAyACQRBqSRsiA0EjNgIEQajQAEH00wAoAgA2AgBBmNAAIAE2AgBBpNAAIAc2AgAgA0EQakHU0wApAgA3AgAgA0HM0wApAgA3AghB1NMAIANBCGo2AgBB0NMAIAY2AgBBzNMAIAA2AgBB2NMAQQA2AgAgA0EkaiEBA0AgAUEHNgIAIAUgAUEEaiIBSw0ACyACIANGDQAgAyADKAIEQX5xNgIEIAMgAyACayIFNgIAIAIgBUEBcjYCBCAFQf8BTQRAIAVBeHFBtNAAaiEAAn9BjNAAKAIAIgFBASAFQQN2dCIDcUUEQEGM0AAgASADcjYCACAADAELIAAoAggLIgEgAjYCDCAAIAI2AgggAiAANgIMIAIgATYCCAwBC0EfIQEgBUH///8HTQRAIAVBJiAFQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAQsgAiABNgIcIAJCADcCECABQQJ0QbzSAGohAEGQ0AAoAgAiA0EBIAF0IgZxRQRAIAAgAjYCAEGQ0AAgAyAGcjYCACACIAA2AhggAiACNgIIIAIgAjYCDAwBCyAFQRkgAUEBdmtBACABQR9HG3QhASAAKAIAIQMCQANAIAMiACgCBEF4cSAFRg0BIAFBHXYhAyABQQF0IQEgACADQQRxakEQaiIGKAIAIgMNAAsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAELIAAoAggiASACNgIMIAAgAjYCCCACQQA2AhggAiAANgIMIAIgATYCCAtBmNAAKAIAIgEgBE0NAEGk0AAoAgAiACAEaiICIAEgBGsiAUEBcjYCBEGY0AAgATYCAEGk0AAgAjYCACAAIARBA3I2AgQgAEEIaiEBDAgLQQAhAUH80wBBMDYCAAwHC0EAIQALIAdFDQACQCAGKAIcIgJBAnRBvNIAaiIDKAIAIAZGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAdBEEEUIAcoAhAgBkYbaiAANgIAIABFDQELIAAgBzYCGCAGKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAGQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAIaiEBIAYgCGoiBigCBCEFCyAGIAVBfnE2AgQgASAEaiABNgIAIAQgAUEBcjYCBCABQf8BTQRAIAFBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASABQQN2dCIBcUUEQEGM0AAgASACcjYCACAADAELIAAoAggLIgEgBDYCDCAAIAQ2AgggBCAANgIMIAQgATYCCAwBC0EfIQUgAUH///8HTQRAIAFBJiABQQh2ZyIAa3ZBAXEgAEEBdGtBPmohBQsgBCAFNgIcIARCADcCECAFQQJ0QbzSAGohAEGQ0AAoAgAiAkEBIAV0IgNxRQRAIAAgBDYCAEGQ0AAgAiADcjYCACAEIAA2AhggBCAENgIIIAQgBDYCDAwBCyABQRkgBUEBdmtBACAFQR9HG3QhBSAAKAIAIQACQANAIAAiAigCBEF4cSABRg0BIAVBHXYhACAFQQF0IQUgAiAAQQRxakEQaiIDKAIAIgANAAsgAyAENgIAIAQgAjYCGCAEIAQ2AgwgBCAENgIIDAELIAIoAggiACAENgIMIAIgBDYCCCAEQQA2AhggBCACNgIMIAQgADYCCAsgCUEIaiEBDAILAkAgB0UNAAJAIAMoAhwiAUECdEG80gBqIgIoAgAgA0YEQCACIAA2AgAgAA0BQZDQACAIQX4gAXdxIgg2AgAMAgsgB0EQQRQgBygCECADRhtqIAA2AgAgAEUNAQsgACAHNgIYIAMoAhAiAQRAIAAgATYCECABIAA2AhgLIANBFGooAgAiAUUNACAAQRRqIAE2AgAgASAANgIYCwJAIAVBD00EQCADIAQgBWoiAEEDcjYCBCAAIANqIgAgACgCBEEBcjYCBAwBCyADIARqIgIgBUEBcjYCBCADIARBA3I2AgQgAiAFaiAFNgIAIAVB/wFNBEAgBUF4cUG00ABqIQACf0GM0AAoAgAiAUEBIAVBA3Z0IgVxRQRAQYzQACABIAVyNgIAIAAMAQsgACgCCAsiASACNgIMIAAgAjYCCCACIAA2AgwgAiABNgIIDAELQR8hASAFQf///wdNBEAgBUEmIAVBCHZnIgBrdkEBcSAAQQF0a0E+aiEBCyACIAE2AhwgAkIANwIQIAFBAnRBvNIAaiEAQQEgAXQiBCAIcUUEQCAAIAI2AgBBkNAAIAQgCHI2AgAgAiAANgIYIAIgAjYCCCACIAI2AgwMAQsgBUEZIAFBAXZrQQAgAUEfRxt0IQEgACgCACEEAkADQCAEIgAoAgRBeHEgBUYNASABQR12IQQgAUEBdCEBIAAgBEEEcWpBEGoiBigCACIEDQALIAYgAjYCACACIAA2AhggAiACNgIMIAIgAjYCCAwBCyAAKAIIIgEgAjYCDCAAIAI2AgggAkEANgIYIAIgADYCDCACIAE2AggLIANBCGohAQwBCwJAIAlFDQACQCAAKAIcIgFBAnRBvNIAaiICKAIAIABGBEAgAiADNgIAIAMNAUGQ0AAgC0F+IAF3cTYCAAwCCyAJQRBBFCAJKAIQIABGG2ogAzYCACADRQ0BCyADIAk2AhggACgCECIBBEAgAyABNgIQIAEgAzYCGAsgAEEUaigCACIBRQ0AIANBFGogATYCACABIAM2AhgLAkAgBUEPTQRAIAAgBCAFaiIBQQNyNgIEIAAgAWoiASABKAIEQQFyNgIEDAELIAAgBGoiByAFQQFyNgIEIAAgBEEDcjYCBCAFIAdqIAU2AgAgCARAIAhBeHFBtNAAaiEBQaDQACgCACEDAn9BASAIQQN2dCICIAZxRQRAQYzQACACIAZyNgIAIAEMAQsgASgCCAsiAiADNgIMIAEgAzYCCCADIAE2AgwgAyACNgIIC0Gg0AAgBzYCAEGU0AAgBTYCAAsgAEEIaiEBCyAKQRBqJAAgAQtDACAARQRAPwBBEHQPCwJAIABB//8DcQ0AIABBAEgNACAAQRB2QAAiAEF/RgRAQfzTAEEwNgIAQX8PCyAAQRB0DwsACwvcPyIAQYAICwkBAAAAAgAAAAMAQZQICwUEAAAABQBBpAgLCQYAAAAHAAAACABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64");
|
|
238877
238944
|
});
|
|
238878
238945
|
|
|
238879
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
238946
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
|
|
238880
238947
|
var require_llhttp_simd_wasm = __commonJS((exports, module) => {
|
|
238881
238948
|
var { Buffer: Buffer2 } = __require("node:buffer");
|
|
238882
238949
|
module.exports = Buffer2.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+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB9ysPC0GQMQ8LQdcxDwtBoi0PC0HUJw8LQeArDwtBnywPC0HrMQ8LQdUfDwtByjEPC0HeJQ8LQdQeDwtB9BwPC0GnMg8LQbEdDwtBoB0PC0G5MQ8LQbwwDwtBkiEPC0GzJg8LQeksDwtBrB4PC0HUKw8LQfcmDwtBgCYPC0GwIQ8LQf4eDwtBjSMPC0GJLQ8LQfciDwtBoDEPC0GuHw8LQcYlDwtB6B4PC0GTIg8LQcIvDwtBwx0PC0GLLA8LQeEdDwtBjS8PC0HqIQ8LQbQtDwtB0i8PC0HfMg8LQdIyDwtB8DAPC0GpIg8LQfkjDwtBmR4PC0G1LA8LQZswDwtBkjIPC0G2Kw8LQcIiDwtB+DIPC0GeJQ8LQdAiDwtBuh4PC0GBHg8LAAtB1iEhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCz4BAn8CQCAAKAI4IgNFDQAgAygCBCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBxhE2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCCCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9go2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCDCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7Ro2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCECIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlRA2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCFCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBqhs2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCGCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7RM2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCKCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9gg2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCHCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBwhk2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCICIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlBQ2AhBBGCEECyAEC1kBAn8CQCAALQAoQQFGDQAgAC8BMiIBQeQAa0HkAEkNACABQcwBRg0AIAFBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhAiAAQYgEcUGABEYNACAAQShxRSECCyACC4wBAQJ/AkACQAJAIAAtACpFDQAgAC0AK0UNACAALwEwIgFBAnFFDQEMAgsgAC8BMCIBQQFxRQ0BC0EBIQIgAC0AKEEBRg0AIAAvATIiAEHkAGtB5ABJDQAgAEHMAUYNACAAQbACRg0AIAFBwABxDQBBACECIAFBiARxQYAERg0AIAFBKHFBAEchAgsgAgtzACAAQRBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAA/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQTBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQSBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQd0BNgIcCwYAIAAQMguaLQELfyMAQRBrIgokAEGk0AAoAgAiCUUEQEHk0wAoAgAiBUUEQEHw0wBCfzcCAEHo0wBCgICEgICAwAA3AgBB5NMAIApBCGpBcHFB2KrVqgVzIgU2AgBB+NMAQQA2AgBByNMAQQA2AgALQczTAEGA1AQ2AgBBnNAAQYDUBDYCAEGw0AAgBTYCAEGs0ABBfzYCAEHQ0wBBgKwDNgIAA0AgAUHI0ABqIAFBvNAAaiICNgIAIAIgAUG00ABqIgM2AgAgAUHA0ABqIAM2AgAgAUHQ0ABqIAFBxNAAaiIDNgIAIAMgAjYCACABQdjQAGogAUHM0ABqIgI2AgAgAiADNgIAIAFB1NAAaiACNgIAIAFBIGoiAUGAAkcNAAtBjNQEQcGrAzYCAEGo0ABB9NMAKAIANgIAQZjQAEHAqwM2AgBBpNAAQYjUBDYCAEHM/wdBODYCAEGI1AQhCQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQewBTQRAQYzQACgCACIGQRAgAEETakFwcSAAQQtJGyIEQQN2IgB2IgFBA3EEQAJAIAFBAXEgAHJBAXMiAkEDdCIAQbTQAGoiASAAQbzQAGooAgAiACgCCCIDRgRAQYzQACAGQX4gAndxNgIADAELIAEgAzYCCCADIAE2AgwLIABBCGohASAAIAJBA3QiAkEDcjYCBCAAIAJqIgAgACgCBEEBcjYCBAwRC0GU0AAoAgAiCCAETw0BIAEEQAJAQQIgAHQiAkEAIAJrciABIAB0cWgiAEEDdCICQbTQAGoiASACQbzQAGooAgAiAigCCCIDRgRAQYzQACAGQX4gAHdxIgY2AgAMAQsgASADNgIIIAMgATYCDAsgAiAEQQNyNgIEIABBA3QiACAEayEFIAAgAmogBTYCACACIARqIgQgBUEBcjYCBCAIBEAgCEF4cUG00ABqIQBBoNAAKAIAIQMCf0EBIAhBA3Z0IgEgBnFFBEBBjNAAIAEgBnI2AgAgAAwBCyAAKAIICyIBIAM2AgwgACADNgIIIAMgADYCDCADIAE2AggLIAJBCGohAUGg0AAgBDYCAEGU0AAgBTYCAAwRC0GQ0AAoAgAiC0UNASALaEECdEG80gBqKAIAIgAoAgRBeHEgBGshBSAAIQIDQAJAIAIoAhAiAUUEQCACQRRqKAIAIgFFDQELIAEoAgRBeHEgBGsiAyAFSSECIAMgBSACGyEFIAEgACACGyEAIAEhAgwBCwsgACgCGCEJIAAoAgwiAyAARwRAQZzQACgCABogAyAAKAIIIgE2AgggASADNgIMDBALIABBFGoiAigCACIBRQRAIAAoAhAiAUUNAyAAQRBqIQILA0AgAiEHIAEiA0EUaiICKAIAIgENACADQRBqIQIgAygCECIBDQALIAdBADYCAAwPC0F/IQQgAEG/f0sNACAAQRNqIgFBcHEhBEGQ0AAoAgAiCEUNAEEAIARrIQUCQAJAAkACf0EAIARBgAJJDQAaQR8gBEH///8HSw0AGiAEQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qCyIGQQJ0QbzSAGooAgAiAkUEQEEAIQFBACEDDAELQQAhASAEQRkgBkEBdmtBACAGQR9HG3QhAEEAIQMDQAJAIAIoAgRBeHEgBGsiByAFTw0AIAIhAyAHIgUNAEEAIQUgAiEBDAMLIAEgAkEUaigCACIHIAcgAiAAQR12QQRxakEQaigCACICRhsgASAHGyEBIABBAXQhACACDQALCyABIANyRQRAQQAhA0ECIAZ0IgBBACAAa3IgCHEiAEUNAyAAaEECdEG80gBqKAIAIQELIAFFDQELA0AgASgCBEF4cSAEayICIAVJIQAgAiAFIAAbIQUgASADIAAbIQMgASgCECIABH8gAAUgAUEUaigCAAsiAQ0ACwsgA0UNACAFQZTQACgCACAEa08NACADKAIYIQcgAyADKAIMIgBHBEBBnNAAKAIAGiAAIAMoAggiATYCCCABIAA2AgwMDgsgA0EUaiICKAIAIgFFBEAgAygCECIBRQ0DIANBEGohAgsDQCACIQYgASIAQRRqIgIoAgAiAQ0AIABBEGohAiAAKAIQIgENAAsgBkEANgIADA0LQZTQACgCACIDIARPBEBBoNAAKAIAIQECQCADIARrIgJBEE8EQCABIARqIgAgAkEBcjYCBCABIANqIAI2AgAgASAEQQNyNgIEDAELIAEgA0EDcjYCBCABIANqIgAgACgCBEEBcjYCBEEAIQBBACECC0GU0AAgAjYCAEGg0AAgADYCACABQQhqIQEMDwtBmNAAKAIAIgMgBEsEQCAEIAlqIgAgAyAEayIBQQFyNgIEQaTQACAANgIAQZjQACABNgIAIAkgBEEDcjYCBCAJQQhqIQEMDwtBACEBIAQCf0Hk0wAoAgAEQEHs0wAoAgAMAQtB8NMAQn83AgBB6NMAQoCAhICAgMAANwIAQeTTACAKQQxqQXBxQdiq1aoFczYCAEH40wBBADYCAEHI0wBBADYCAEGAgAQLIgAgBEHHAGoiBWoiBkEAIABrIgdxIgJPBEBB/NMAQTA2AgAMDwsCQEHE0wAoAgAiAUUNAEG80wAoAgAiCCACaiEAIAAgAU0gACAIS3ENAEEAIQFB/NMAQTA2AgAMDwtByNMALQAAQQRxDQQCQAJAIAkEQEHM0wAhAQNAIAEoAgAiACAJTQRAIAAgASgCBGogCUsNAwsgASgCCCIBDQALC0EAEDMiAEF/Rg0FIAIhBkHo0wAoAgAiAUEBayIDIABxBEAgAiAAayAAIANqQQAgAWtxaiEGCyAEIAZPDQUgBkH+////B0sNBUHE0wAoAgAiAwRAQbzTACgCACIHIAZqIQEgASAHTQ0GIAEgA0sNBgsgBhAzIgEgAEcNAQwHCyAGIANrIAdxIgZB/v///wdLDQQgBhAzIQAgACABKAIAIAEoAgRqRg0DIAAhAQsCQCAGIARByABqTw0AIAFBf0YNAEHs0wAoAgAiACAFIAZrakEAIABrcSIAQf7///8HSwRAIAEhAAwHCyAAEDNBf0cEQCAAIAZqIQYgASEADAcLQQAgBmsQMxoMBAsgASIAQX9HDQUMAwtBACEDDAwLQQAhAAwKCyAAQX9HDQILQcjTAEHI0wAoAgBBBHI2AgALIAJB/v///wdLDQEgAhAzIQBBABAzIQEgAEF/Rg0BIAFBf0YNASAAIAFPDQEgASAAayIGIARBOGpNDQELQbzTAEG80wAoAgAgBmoiATYCAEHA0wAoAgAgAUkEQEHA0wAgATYCAAsCQAJAAkBBpNAAKAIAIgIEQEHM0wAhAQNAIAAgASgCACIDIAEoAgQiBWpGDQIgASgCCCIBDQALDAILQZzQACgCACIBQQBHIAAgAU9xRQRAQZzQACAANgIAC0EAIQFB0NMAIAY2AgBBzNMAIAA2AgBBrNAAQX82AgBBsNAAQeTTACgCADYCAEHY0wBBADYCAANAIAFByNAAaiABQbzQAGoiAjYCACACIAFBtNAAaiIDNgIAIAFBwNAAaiADNgIAIAFB0NAAaiABQcTQAGoiAzYCACADIAI2AgAgAUHY0ABqIAFBzNAAaiICNgIAIAIgAzYCACABQdTQAGogAjYCACABQSBqIgFBgAJHDQALQXggAGtBD3EiASAAaiICIAZBOGsiAyABayIBQQFyNgIEQajQAEH00wAoAgA2AgBBmNAAIAE2AgBBpNAAIAI2AgAgACADakE4NgIEDAILIAAgAk0NACACIANJDQAgASgCDEEIcQ0AQXggAmtBD3EiACACaiIDQZjQACgCACAGaiIHIABrIgBBAXI2AgQgASAFIAZqNgIEQajQAEH00wAoAgA2AgBBmNAAIAA2AgBBpNAAIAM2AgAgAiAHakE4NgIEDAELIABBnNAAKAIASQRAQZzQACAANgIACyAAIAZqIQNBzNMAIQECQAJAAkADQCADIAEoAgBHBEAgASgCCCIBDQEMAgsLIAEtAAxBCHFFDQELQczTACEBA0AgASgCACIDIAJNBEAgAyABKAIEaiIFIAJLDQMLIAEoAgghAQwACwALIAEgADYCACABIAEoAgQgBmo2AgQgAEF4IABrQQ9xaiIJIARBA3I2AgQgA0F4IANrQQ9xaiIGIAQgCWoiBGshASACIAZGBEBBpNAAIAQ2AgBBmNAAQZjQACgCACABaiIANgIAIAQgAEEBcjYCBAwIC0Gg0AAoAgAgBkYEQEGg0AAgBDYCAEGU0ABBlNAAKAIAIAFqIgA2AgAgBCAAQQFyNgIEIAAgBGogADYCAAwICyAGKAIEIgVBA3FBAUcNBiAFQXhxIQggBUH/AU0EQCAFQQN2IQMgBigCCCIAIAYoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAcLIAIgADYCCCAAIAI2AgwMBgsgBigCGCEHIAYgBigCDCIARwRAIAAgBigCCCICNgIIIAIgADYCDAwFCyAGQRRqIgIoAgAiBUUEQCAGKAIQIgVFDQQgBkEQaiECCwNAIAIhAyAFIgBBFGoiAigCACIFDQAgAEEQaiECIAAoAhAiBQ0ACyADQQA2AgAMBAtBeCAAa0EPcSIBIABqIgcgBkE4ayIDIAFrIgFBAXI2AgQgACADakE4NgIEIAIgBUE3IAVrQQ9xakE/ayIDIAMgAkEQakkbIgNBIzYCBEGo0ABB9NMAKAIANgIAQZjQACABNgIAQaTQACAHNgIAIANBEGpB1NMAKQIANwIAIANBzNMAKQIANwIIQdTTACADQQhqNgIAQdDTACAGNgIAQczTACAANgIAQdjTAEEANgIAIANBJGohAQNAIAFBBzYCACAFIAFBBGoiAUsNAAsgAiADRg0AIAMgAygCBEF+cTYCBCADIAMgAmsiBTYCACACIAVBAXI2AgQgBUH/AU0EQCAFQXhxQbTQAGohAAJ/QYzQACgCACIBQQEgBUEDdnQiA3FFBEBBjNAAIAEgA3I2AgAgAAwBCyAAKAIICyIBIAI2AgwgACACNgIIIAIgADYCDCACIAE2AggMAQtBHyEBIAVB////B00EQCAFQSYgBUEIdmciAGt2QQFxIABBAXRrQT5qIQELIAIgATYCHCACQgA3AhAgAUECdEG80gBqIQBBkNAAKAIAIgNBASABdCIGcUUEQCAAIAI2AgBBkNAAIAMgBnI2AgAgAiAANgIYIAIgAjYCCCACIAI2AgwMAQsgBUEZIAFBAXZrQQAgAUEfRxt0IQEgACgCACEDAkADQCADIgAoAgRBeHEgBUYNASABQR12IQMgAUEBdCEBIAAgA0EEcWpBEGoiBigCACIDDQALIAYgAjYCACACIAA2AhggAiACNgIMIAIgAjYCCAwBCyAAKAIIIgEgAjYCDCAAIAI2AgggAkEANgIYIAIgADYCDCACIAE2AggLQZjQACgCACIBIARNDQBBpNAAKAIAIgAgBGoiAiABIARrIgFBAXI2AgRBmNAAIAE2AgBBpNAAIAI2AgAgACAEQQNyNgIEIABBCGohAQwIC0EAIQFB/NMAQTA2AgAMBwtBACEACyAHRQ0AAkAgBigCHCICQQJ0QbzSAGoiAygCACAGRgRAIAMgADYCACAADQFBkNAAQZDQACgCAEF+IAJ3cTYCAAwCCyAHQRBBFCAHKAIQIAZGG2ogADYCACAARQ0BCyAAIAc2AhggBigCECICBEAgACACNgIQIAIgADYCGAsgBkEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgCGohASAGIAhqIgYoAgQhBQsgBiAFQX5xNgIEIAEgBGogATYCACAEIAFBAXI2AgQgAUH/AU0EQCABQXhxQbTQAGohAAJ/QYzQACgCACICQQEgAUEDdnQiAXFFBEBBjNAAIAEgAnI2AgAgAAwBCyAAKAIICyIBIAQ2AgwgACAENgIIIAQgADYCDCAEIAE2AggMAQtBHyEFIAFB////B00EQCABQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qIQULIAQgBTYCHCAEQgA3AhAgBUECdEG80gBqIQBBkNAAKAIAIgJBASAFdCIDcUUEQCAAIAQ2AgBBkNAAIAIgA3I2AgAgBCAANgIYIAQgBDYCCCAEIAQ2AgwMAQsgAUEZIAVBAXZrQQAgBUEfRxt0IQUgACgCACEAAkADQCAAIgIoAgRBeHEgAUYNASAFQR12IQAgBUEBdCEFIAIgAEEEcWpBEGoiAygCACIADQALIAMgBDYCACAEIAI2AhggBCAENgIMIAQgBDYCCAwBCyACKAIIIgAgBDYCDCACIAQ2AgggBEEANgIYIAQgAjYCDCAEIAA2AggLIAlBCGohAQwCCwJAIAdFDQACQCADKAIcIgFBAnRBvNIAaiICKAIAIANGBEAgAiAANgIAIAANAUGQ0AAgCEF+IAF3cSIINgIADAILIAdBEEEUIAcoAhAgA0YbaiAANgIAIABFDQELIAAgBzYCGCADKAIQIgEEQCAAIAE2AhAgASAANgIYCyADQRRqKAIAIgFFDQAgAEEUaiABNgIAIAEgADYCGAsCQCAFQQ9NBEAgAyAEIAVqIgBBA3I2AgQgACADaiIAIAAoAgRBAXI2AgQMAQsgAyAEaiICIAVBAXI2AgQgAyAEQQNyNgIEIAIgBWogBTYCACAFQf8BTQRAIAVBeHFBtNAAaiEAAn9BjNAAKAIAIgFBASAFQQN2dCIFcUUEQEGM0AAgASAFcjYCACAADAELIAAoAggLIgEgAjYCDCAAIAI2AgggAiAANgIMIAIgATYCCAwBC0EfIQEgBUH///8HTQRAIAVBJiAFQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAQsgAiABNgIcIAJCADcCECABQQJ0QbzSAGohAEEBIAF0IgQgCHFFBEAgACACNgIAQZDQACAEIAhyNgIAIAIgADYCGCACIAI2AgggAiACNgIMDAELIAVBGSABQQF2a0EAIAFBH0cbdCEBIAAoAgAhBAJAA0AgBCIAKAIEQXhxIAVGDQEgAUEddiEEIAFBAXQhASAAIARBBHFqQRBqIgYoAgAiBA0ACyAGIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggMAQsgACgCCCIBIAI2AgwgACACNgIIIAJBADYCGCACIAA2AgwgAiABNgIICyADQQhqIQEMAQsCQCAJRQ0AAkAgACgCHCIBQQJ0QbzSAGoiAigCACAARgRAIAIgAzYCACADDQFBkNAAIAtBfiABd3E2AgAMAgsgCUEQQRQgCSgCECAARhtqIAM2AgAgA0UNAQsgAyAJNgIYIAAoAhAiAQRAIAMgATYCECABIAM2AhgLIABBFGooAgAiAUUNACADQRRqIAE2AgAgASADNgIYCwJAIAVBD00EQCAAIAQgBWoiAUEDcjYCBCAAIAFqIgEgASgCBEEBcjYCBAwBCyAAIARqIgcgBUEBcjYCBCAAIARBA3I2AgQgBSAHaiAFNgIAIAgEQCAIQXhxQbTQAGohAUGg0AAoAgAhAwJ/QQEgCEEDdnQiAiAGcUUEQEGM0AAgAiAGcjYCACABDAELIAEoAggLIgIgAzYCDCABIAM2AgggAyABNgIMIAMgAjYCCAtBoNAAIAc2AgBBlNAAIAU2AgALIABBCGohAQsgCkEQaiQAIAELQwAgAEUEQD8AQRB0DwsCQCAAQf//A3ENACAAQQBIDQAgAEEQdkAAIgBBf0YEQEH80wBBMDYCAEF/DwsgAEEQdA8LAAsL3D8iAEGACAsJAQAAAAIAAAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64");
|
|
238883
238950
|
});
|
|
238884
238951
|
|
|
238885
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
238952
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/constants.js
|
|
238886
238953
|
var require_constants3 = __commonJS((exports, module) => {
|
|
238887
238954
|
var corsSafeListedMethods = ["GET", "HEAD", "POST"];
|
|
238888
238955
|
var corsSafeListedMethodsSet = new Set(corsSafeListedMethods);
|
|
@@ -239051,7 +239118,7 @@ var require_constants3 = __commonJS((exports, module) => {
|
|
|
239051
239118
|
};
|
|
239052
239119
|
});
|
|
239053
239120
|
|
|
239054
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
239121
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/global.js
|
|
239055
239122
|
var require_global = __commonJS((exports, module) => {
|
|
239056
239123
|
var globalOrigin = Symbol.for("undici.globalOrigin.1");
|
|
239057
239124
|
function getGlobalOrigin() {
|
|
@@ -239084,7 +239151,7 @@ var require_global = __commonJS((exports, module) => {
|
|
|
239084
239151
|
};
|
|
239085
239152
|
});
|
|
239086
239153
|
|
|
239087
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
239154
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/data-url.js
|
|
239088
239155
|
var require_data_url = __commonJS((exports, module) => {
|
|
239089
239156
|
var assert3 = __require("node:assert");
|
|
239090
239157
|
var encoder2 = new TextEncoder;
|
|
@@ -239397,7 +239464,7 @@ var require_data_url = __commonJS((exports, module) => {
|
|
|
239397
239464
|
};
|
|
239398
239465
|
});
|
|
239399
239466
|
|
|
239400
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
239467
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/webidl.js
|
|
239401
239468
|
var require_webidl = __commonJS((exports, module) => {
|
|
239402
239469
|
var { types: types3, inspect } = __require("node:util");
|
|
239403
239470
|
var { markAsUncloneable } = __require("node:worker_threads");
|
|
@@ -239803,7 +239870,7 @@ var require_webidl = __commonJS((exports, module) => {
|
|
|
239803
239870
|
};
|
|
239804
239871
|
});
|
|
239805
239872
|
|
|
239806
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
239873
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/util.js
|
|
239807
239874
|
var require_util4 = __commonJS((exports, module) => {
|
|
239808
239875
|
var { Transform } = __require("node:stream");
|
|
239809
239876
|
var zlib = __require("node:zlib");
|
|
@@ -240615,7 +240682,7 @@ var require_util4 = __commonJS((exports, module) => {
|
|
|
240615
240682
|
};
|
|
240616
240683
|
});
|
|
240617
240684
|
|
|
240618
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
240685
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/symbols.js
|
|
240619
240686
|
var require_symbols2 = __commonJS((exports, module) => {
|
|
240620
240687
|
module.exports = {
|
|
240621
240688
|
kUrl: Symbol("url"),
|
|
@@ -240626,7 +240693,7 @@ var require_symbols2 = __commonJS((exports, module) => {
|
|
|
240626
240693
|
};
|
|
240627
240694
|
});
|
|
240628
240695
|
|
|
240629
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
240696
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/file.js
|
|
240630
240697
|
var require_file = __commonJS((exports, module) => {
|
|
240631
240698
|
var { Blob: Blob2, File: File4 } = __require("node:buffer");
|
|
240632
240699
|
var { kState } = require_symbols2();
|
|
@@ -240687,7 +240754,7 @@ var require_file = __commonJS((exports, module) => {
|
|
|
240687
240754
|
module.exports = { FileLike, isFileLike };
|
|
240688
240755
|
});
|
|
240689
240756
|
|
|
240690
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
240757
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/formdata.js
|
|
240691
240758
|
var require_formdata = __commonJS((exports, module) => {
|
|
240692
240759
|
var { isBlobLike, iteratorMixin } = require_util4();
|
|
240693
240760
|
var { kState } = require_symbols2();
|
|
@@ -240827,7 +240894,7 @@ var require_formdata = __commonJS((exports, module) => {
|
|
|
240827
240894
|
module.exports = { FormData: FormData3, makeEntry: makeEntry2 };
|
|
240828
240895
|
});
|
|
240829
240896
|
|
|
240830
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
240897
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/formdata-parser.js
|
|
240831
240898
|
var require_formdata_parser = __commonJS((exports, module) => {
|
|
240832
240899
|
var { isUSVString, bufferToLowerCasedHeaderName } = require_util3();
|
|
240833
240900
|
var { utf8DecodeBytes } = require_util4();
|
|
@@ -241055,7 +241122,7 @@ var require_formdata_parser = __commonJS((exports, module) => {
|
|
|
241055
241122
|
};
|
|
241056
241123
|
});
|
|
241057
241124
|
|
|
241058
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
241125
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/body.js
|
|
241059
241126
|
var require_body = __commonJS((exports, module) => {
|
|
241060
241127
|
var util = require_util3();
|
|
241061
241128
|
var {
|
|
@@ -241362,7 +241429,7 @@ ${normalizeLinefeeds(value3)}\r
|
|
|
241362
241429
|
};
|
|
241363
241430
|
});
|
|
241364
241431
|
|
|
241365
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
241432
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/client-h1.js
|
|
241366
241433
|
var require_client_h1 = __commonJS((exports, module) => {
|
|
241367
241434
|
var assert3 = __require("node:assert");
|
|
241368
241435
|
var util = require_util3();
|
|
@@ -241698,7 +241765,7 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
241698
241765
|
}
|
|
241699
241766
|
}
|
|
241700
241767
|
onUpgrade(head) {
|
|
241701
|
-
const { upgrade, client: client2, socket, headers, statusCode } = this;
|
|
241768
|
+
const { upgrade, client: client2, socket, headers, statusCode, statusText } = this;
|
|
241702
241769
|
assert3(upgrade);
|
|
241703
241770
|
assert3(client2[kSocket] === socket);
|
|
241704
241771
|
assert3(!socket.destroyed);
|
|
@@ -241723,9 +241790,10 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
241723
241790
|
client2[kQueue][client2[kRunningIdx]++] = null;
|
|
241724
241791
|
client2.emit("disconnect", client2[kUrl], [client2], new InformationalError("upgrade"));
|
|
241725
241792
|
try {
|
|
241726
|
-
request3.onUpgrade(statusCode, headers, socket);
|
|
241727
|
-
} catch (
|
|
241728
|
-
util.
|
|
241793
|
+
request3.onUpgrade(statusCode, headers, socket, statusText);
|
|
241794
|
+
} catch (error48) {
|
|
241795
|
+
util.errorRequest(client2, request3, error48);
|
|
241796
|
+
util.destroy(socket, error48);
|
|
241729
241797
|
}
|
|
241730
241798
|
client2[kResume]();
|
|
241731
241799
|
}
|
|
@@ -241908,7 +241976,6 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
241908
241976
|
socket[kSocketUsed] = false;
|
|
241909
241977
|
socket[kParser] = new Parser3(client2, socket, llhttpInstance);
|
|
241910
241978
|
addListener(socket, "error", function(err) {
|
|
241911
|
-
assert3(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
|
241912
241979
|
const parser = this[kParser];
|
|
241913
241980
|
if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) {
|
|
241914
241981
|
const parserErr = parser.finish();
|
|
@@ -242124,11 +242191,17 @@ var require_client_h1 = __commonJS((exports, module) => {
|
|
|
242124
242191
|
}
|
|
242125
242192
|
const socket = client2[kSocket];
|
|
242126
242193
|
clearIdleSocketValidation(socket);
|
|
242127
|
-
const abort = (
|
|
242128
|
-
if (request3.aborted
|
|
242194
|
+
const abort = (error48) => {
|
|
242195
|
+
if (request3.aborted) {
|
|
242196
|
+
return;
|
|
242197
|
+
}
|
|
242198
|
+
if (request3.completed) {
|
|
242199
|
+
if (request3.upgrade || request3.method === "CONNECT") {
|
|
242200
|
+
util.destroy(socket, new InformationalError("aborted"));
|
|
242201
|
+
}
|
|
242129
242202
|
return;
|
|
242130
242203
|
}
|
|
242131
|
-
util.errorRequest(client2, request3,
|
|
242204
|
+
util.errorRequest(client2, request3, error48 || new RequestAbortedError);
|
|
242132
242205
|
util.destroy(body);
|
|
242133
242206
|
util.destroy(socket, new InformationalError("aborted"));
|
|
242134
242207
|
};
|
|
@@ -242484,9 +242557,10 @@ ${len.toString(16)}\r
|
|
|
242484
242557
|
module.exports = connectH1;
|
|
242485
242558
|
});
|
|
242486
242559
|
|
|
242487
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
242560
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/client-h2.js
|
|
242488
242561
|
var require_client_h2 = __commonJS((exports, module) => {
|
|
242489
242562
|
var assert3 = __require("node:assert");
|
|
242563
|
+
var { errorMonitor } = __require("node:events");
|
|
242490
242564
|
var { pipeline: pipeline2 } = __require("node:stream");
|
|
242491
242565
|
var util = require_util3();
|
|
242492
242566
|
var {
|
|
@@ -242547,6 +242621,10 @@ var require_client_h2 = __commonJS((exports, module) => {
|
|
|
242547
242621
|
}
|
|
242548
242622
|
return result3;
|
|
242549
242623
|
}
|
|
242624
|
+
function parseH2ResponseHeaders(headers) {
|
|
242625
|
+
const { [HTTP2_HEADER_STATUS]: _statusCode, ...realHeaders } = headers;
|
|
242626
|
+
return parseH2Headers(realHeaders);
|
|
242627
|
+
}
|
|
242550
242628
|
async function connectH2(client2, socket) {
|
|
242551
242629
|
client2[kSocket] = socket;
|
|
242552
242630
|
if (!h2ExperimentalWarned) {
|
|
@@ -242584,7 +242662,6 @@ var require_client_h2 = __commonJS((exports, module) => {
|
|
|
242584
242662
|
client2[kHTTP2Session] = session2;
|
|
242585
242663
|
socket[kHTTP2Session] = session2;
|
|
242586
242664
|
util.addListener(socket, "error", function(err) {
|
|
242587
|
-
assert3(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
|
242588
242665
|
this[kError] = err;
|
|
242589
242666
|
this[kClient][kOnError](err);
|
|
242590
242667
|
});
|
|
@@ -242643,7 +242720,6 @@ var require_client_h2 = __commonJS((exports, module) => {
|
|
|
242643
242720
|
}
|
|
242644
242721
|
}
|
|
242645
242722
|
function onHttp2SessionError(err) {
|
|
242646
|
-
assert3(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
|
242647
242723
|
this[kSocket][kError] = err;
|
|
242648
242724
|
this[kClient][kOnError](err);
|
|
242649
242725
|
}
|
|
@@ -242710,16 +242786,22 @@ var require_client_h2 = __commonJS((exports, module) => {
|
|
|
242710
242786
|
const { hostname: hostname3, port } = client2[kUrl];
|
|
242711
242787
|
headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname3}${port ? `:${port}` : ""}`;
|
|
242712
242788
|
headers[HTTP2_HEADER_METHOD] = method;
|
|
242713
|
-
const abort = (
|
|
242714
|
-
if (request3.aborted
|
|
242789
|
+
const abort = (error48) => {
|
|
242790
|
+
if (request3.aborted) {
|
|
242715
242791
|
return;
|
|
242716
242792
|
}
|
|
242717
|
-
|
|
242718
|
-
|
|
242793
|
+
if (request3.completed) {
|
|
242794
|
+
if (method === "CONNECT" && stream2 != null) {
|
|
242795
|
+
util.destroy(stream2, error48 || new RequestAbortedError);
|
|
242796
|
+
}
|
|
242797
|
+
return;
|
|
242798
|
+
}
|
|
242799
|
+
error48 = error48 || new RequestAbortedError;
|
|
242800
|
+
util.errorRequest(client2, request3, error48);
|
|
242719
242801
|
if (stream2 != null) {
|
|
242720
|
-
util.destroy(stream2,
|
|
242802
|
+
util.destroy(stream2, error48);
|
|
242721
242803
|
}
|
|
242722
|
-
util.destroy(body,
|
|
242804
|
+
util.destroy(body, error48);
|
|
242723
242805
|
client2[kQueue][client2[kRunningIdx]++] = null;
|
|
242724
242806
|
client2[kResume]();
|
|
242725
242807
|
};
|
|
@@ -242734,18 +242816,42 @@ var require_client_h2 = __commonJS((exports, module) => {
|
|
|
242734
242816
|
if (method === "CONNECT") {
|
|
242735
242817
|
session2.ref();
|
|
242736
242818
|
stream2 = session2.request(headers, { endStream: false, signal });
|
|
242737
|
-
|
|
242738
|
-
|
|
242739
|
-
|
|
242740
|
-
|
|
242741
|
-
|
|
242742
|
-
|
|
242819
|
+
let upgradeResponseFinished = false;
|
|
242820
|
+
const onResponse = (headers2) => {
|
|
242821
|
+
upgradeResponseFinished = true;
|
|
242822
|
+
stream2.off(errorMonitor, onUpgradeError);
|
|
242823
|
+
request3.onUpgradeResponse(Number(headers2[HTTP2_HEADER_STATUS]), headers2, parseH2ResponseHeaders);
|
|
242824
|
+
};
|
|
242825
|
+
const onUpgradeError = (error48) => {
|
|
242826
|
+
upgradeResponseFinished = true;
|
|
242827
|
+
stream2.off("response", onResponse);
|
|
242828
|
+
request3.onUpgradeError(error48);
|
|
242829
|
+
};
|
|
242830
|
+
const onReady = () => {
|
|
242831
|
+
try {
|
|
242743
242832
|
request3.onUpgrade(null, null, stream2);
|
|
242744
|
-
|
|
242745
|
-
|
|
242746
|
-
|
|
242747
|
-
|
|
242833
|
+
} catch (error48) {
|
|
242834
|
+
stream2.off("response", onResponse);
|
|
242835
|
+
abort(error48);
|
|
242836
|
+
return;
|
|
242837
|
+
}
|
|
242838
|
+
if (request3.aborted) {
|
|
242839
|
+
return;
|
|
242840
|
+
}
|
|
242841
|
+
stream2.off("error", abort);
|
|
242842
|
+
stream2.once(errorMonitor, onUpgradeError);
|
|
242843
|
+
client2[kQueue][client2[kRunningIdx]++] = null;
|
|
242844
|
+
};
|
|
242845
|
+
stream2.once("response", onResponse);
|
|
242846
|
+
stream2.once("error", abort);
|
|
242847
|
+
++session2[kOpenStreams];
|
|
242848
|
+
onReady();
|
|
242748
242849
|
stream2.once("close", () => {
|
|
242850
|
+
if (!upgradeResponseFinished && request3.completed) {
|
|
242851
|
+
stream2.off("response", onResponse);
|
|
242852
|
+
stream2.off(errorMonitor, onUpgradeError);
|
|
242853
|
+
request3.onUpgradeError(new InformationalError(`HTTP/2: "stream error" received - code ${stream2.rstCode}`));
|
|
242854
|
+
}
|
|
242749
242855
|
session2[kOpenStreams] -= 1;
|
|
242750
242856
|
if (session2[kOpenStreams] === 0)
|
|
242751
242857
|
session2.unref();
|
|
@@ -242965,7 +243071,7 @@ var require_client_h2 = __commonJS((exports, module) => {
|
|
|
242965
243071
|
module.exports = connectH2;
|
|
242966
243072
|
});
|
|
242967
243073
|
|
|
242968
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
243074
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/handler/redirect-handler.js
|
|
242969
243075
|
var require_redirect_handler = __commonJS((exports, module) => {
|
|
242970
243076
|
var util = require_util3();
|
|
242971
243077
|
var { kBodyUsed } = require_symbols();
|
|
@@ -243122,7 +243228,7 @@ var require_redirect_handler = __commonJS((exports, module) => {
|
|
|
243122
243228
|
module.exports = RedirectHandler;
|
|
243123
243229
|
});
|
|
243124
243230
|
|
|
243125
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
243231
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/interceptor/redirect-interceptor.js
|
|
243126
243232
|
var require_redirect_interceptor = __commonJS((exports, module) => {
|
|
243127
243233
|
var RedirectHandler = require_redirect_handler();
|
|
243128
243234
|
function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) {
|
|
@@ -243141,7 +243247,7 @@ var require_redirect_interceptor = __commonJS((exports, module) => {
|
|
|
243141
243247
|
module.exports = createRedirectInterceptor;
|
|
243142
243248
|
});
|
|
243143
243249
|
|
|
243144
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
243250
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/client.js
|
|
243145
243251
|
var require_client = __commonJS((exports, module) => {
|
|
243146
243252
|
var assert3 = __require("node:assert");
|
|
243147
243253
|
var net3 = __require("node:net");
|
|
@@ -243236,9 +243342,10 @@ var require_client = __commonJS((exports, module) => {
|
|
|
243236
243342
|
autoSelectFamilyAttemptTimeout,
|
|
243237
243343
|
maxConcurrentStreams,
|
|
243238
243344
|
allowH2,
|
|
243239
|
-
webSocket
|
|
243345
|
+
webSocket,
|
|
243346
|
+
eventSource
|
|
243240
243347
|
} = {}) {
|
|
243241
|
-
super({ webSocket });
|
|
243348
|
+
super({ webSocket, eventSource });
|
|
243242
243349
|
if (keepAlive !== undefined) {
|
|
243243
243350
|
throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead");
|
|
243244
243351
|
}
|
|
@@ -243629,7 +243736,7 @@ var require_client = __commonJS((exports, module) => {
|
|
|
243629
243736
|
module.exports = Client2;
|
|
243630
243737
|
});
|
|
243631
243738
|
|
|
243632
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
243739
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/fixed-queue.js
|
|
243633
243740
|
var require_fixed_queue = __commonJS((exports, module) => {
|
|
243634
243741
|
var kSize = 2048;
|
|
243635
243742
|
var kMask = kSize - 1;
|
|
@@ -243684,7 +243791,7 @@ var require_fixed_queue = __commonJS((exports, module) => {
|
|
|
243684
243791
|
};
|
|
243685
243792
|
});
|
|
243686
243793
|
|
|
243687
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
243794
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/pool-stats.js
|
|
243688
243795
|
var require_pool_stats = __commonJS((exports, module) => {
|
|
243689
243796
|
var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols();
|
|
243690
243797
|
var kPool = Symbol("pool");
|
|
@@ -243715,7 +243822,7 @@ var require_pool_stats = __commonJS((exports, module) => {
|
|
|
243715
243822
|
module.exports = PoolStats;
|
|
243716
243823
|
});
|
|
243717
243824
|
|
|
243718
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
243825
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/pool-base.js
|
|
243719
243826
|
var require_pool_base = __commonJS((exports, module) => {
|
|
243720
243827
|
var DispatcherBase = require_dispatcher_base();
|
|
243721
243828
|
var FixedQueue = require_fixed_queue();
|
|
@@ -243868,7 +243975,7 @@ var require_pool_base = __commonJS((exports, module) => {
|
|
|
243868
243975
|
};
|
|
243869
243976
|
});
|
|
243870
243977
|
|
|
243871
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
243978
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/pool.js
|
|
243872
243979
|
var require_pool = __commonJS((exports, module) => {
|
|
243873
243980
|
var {
|
|
243874
243981
|
PoolBase,
|
|
@@ -243957,7 +244064,7 @@ var require_pool = __commonJS((exports, module) => {
|
|
|
243957
244064
|
module.exports = Pool2;
|
|
243958
244065
|
});
|
|
243959
244066
|
|
|
243960
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
244067
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/balanced-pool.js
|
|
243961
244068
|
var require_balanced_pool = __commonJS((exports, module) => {
|
|
243962
244069
|
var {
|
|
243963
244070
|
BalancedPoolMissingUpstreamError,
|
|
@@ -244100,7 +244207,7 @@ var require_balanced_pool = __commonJS((exports, module) => {
|
|
|
244100
244207
|
module.exports = BalancedPool;
|
|
244101
244208
|
});
|
|
244102
244209
|
|
|
244103
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
244210
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/agent.js
|
|
244104
244211
|
var require_agent = __commonJS((exports, module) => {
|
|
244105
244212
|
var { InvalidArgumentError } = require_errors2();
|
|
244106
244213
|
var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
|
|
@@ -244121,7 +244228,7 @@ var require_agent = __commonJS((exports, module) => {
|
|
|
244121
244228
|
}
|
|
244122
244229
|
|
|
244123
244230
|
class Agent2 extends DispatcherBase {
|
|
244124
|
-
constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) {
|
|
244231
|
+
constructor({ factory = defaultFactory, maxRedirections = 0, connect, tls, ...options } = {}) {
|
|
244125
244232
|
if (typeof factory !== "function") {
|
|
244126
244233
|
throw new InvalidArgumentError("factory must be a function.");
|
|
244127
244234
|
}
|
|
@@ -244135,8 +244242,11 @@ var require_agent = __commonJS((exports, module) => {
|
|
|
244135
244242
|
if (connect && typeof connect !== "function") {
|
|
244136
244243
|
connect = { ...connect };
|
|
244137
244244
|
}
|
|
244245
|
+
if (tls && typeof tls !== "function") {
|
|
244246
|
+
tls = { ...tls };
|
|
244247
|
+
}
|
|
244138
244248
|
this[kInterceptors] = options.interceptors?.Agent && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })];
|
|
244139
|
-
this[kOptions] = { ...util.deepClone(options), connect };
|
|
244249
|
+
this[kOptions] = { ...util.deepClone(options), connect, tls };
|
|
244140
244250
|
this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : undefined;
|
|
244141
244251
|
this[kMaxRedirections] = maxRedirections;
|
|
244142
244252
|
this[kFactory] = factory;
|
|
@@ -244195,7 +244305,7 @@ var require_agent = __commonJS((exports, module) => {
|
|
|
244195
244305
|
module.exports = Agent2;
|
|
244196
244306
|
});
|
|
244197
244307
|
|
|
244198
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
244308
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/proxy-agent.js
|
|
244199
244309
|
var require_proxy_agent = __commonJS((exports, module) => {
|
|
244200
244310
|
var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
|
|
244201
244311
|
var { URL: URL3 } = __require("node:url");
|
|
@@ -244410,7 +244520,7 @@ var require_proxy_agent = __commonJS((exports, module) => {
|
|
|
244410
244520
|
module.exports = ProxyAgent;
|
|
244411
244521
|
});
|
|
244412
244522
|
|
|
244413
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
244523
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js
|
|
244414
244524
|
var require_env_http_proxy_agent = __commonJS((exports, module) => {
|
|
244415
244525
|
var DispatcherBase = require_dispatcher_base();
|
|
244416
244526
|
var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols();
|
|
@@ -244544,7 +244654,7 @@ var require_env_http_proxy_agent = __commonJS((exports, module) => {
|
|
|
244544
244654
|
module.exports = EnvHttpProxyAgent;
|
|
244545
244655
|
});
|
|
244546
244656
|
|
|
244547
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
244657
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/handler/retry-handler.js
|
|
244548
244658
|
var require_retry_handler = __commonJS((exports, module) => {
|
|
244549
244659
|
var assert3 = __require("node:assert");
|
|
244550
244660
|
var { kRetryHandlerDefaultRetry } = require_symbols();
|
|
@@ -244704,7 +244814,7 @@ var require_retry_handler = __commonJS((exports, module) => {
|
|
|
244704
244814
|
const headers = parseHeaders(rawHeaders);
|
|
244705
244815
|
this.retryCount += 1;
|
|
244706
244816
|
if (statusCode >= 300) {
|
|
244707
|
-
if (this.retryOpts.statusCodes.includes(statusCode) === false) {
|
|
244817
|
+
if (!this.headersSent && this.retryOpts.statusCodes.includes(statusCode) === false) {
|
|
244708
244818
|
this.headersSent = true;
|
|
244709
244819
|
this.checkpointResponseEnd(headers, resume);
|
|
244710
244820
|
return this.handler.onHeaders(statusCode, rawHeaders, resume, statusMessage);
|
|
@@ -244847,7 +244957,7 @@ var require_retry_handler = __commonJS((exports, module) => {
|
|
|
244847
244957
|
module.exports = RetryHandler;
|
|
244848
244958
|
});
|
|
244849
244959
|
|
|
244850
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
244960
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/dispatcher/retry-agent.js
|
|
244851
244961
|
var require_retry_agent = __commonJS((exports, module) => {
|
|
244852
244962
|
var Dispatcher = require_dispatcher();
|
|
244853
244963
|
var RetryHandler = require_retry_handler();
|
|
@@ -244880,7 +244990,7 @@ var require_retry_agent = __commonJS((exports, module) => {
|
|
|
244880
244990
|
module.exports = RetryAgent;
|
|
244881
244991
|
});
|
|
244882
244992
|
|
|
244883
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
244993
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/api/readable.js
|
|
244884
244994
|
var require_readable = __commonJS((exports, module) => {
|
|
244885
244995
|
var assert3 = __require("node:assert");
|
|
244886
244996
|
var { Readable: Readable2 } = __require("node:stream");
|
|
@@ -245160,7 +245270,7 @@ var require_readable = __commonJS((exports, module) => {
|
|
|
245160
245270
|
module.exports = { Readable: BodyReadable, chunksDecode };
|
|
245161
245271
|
});
|
|
245162
245272
|
|
|
245163
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
245273
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/api/util.js
|
|
245164
245274
|
var require_util5 = __commonJS((exports, module) => {
|
|
245165
245275
|
var assert3 = __require("node:assert");
|
|
245166
245276
|
var {
|
|
@@ -245218,7 +245328,7 @@ var require_util5 = __commonJS((exports, module) => {
|
|
|
245218
245328
|
};
|
|
245219
245329
|
});
|
|
245220
245330
|
|
|
245221
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
245331
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/api/api-request.js
|
|
245222
245332
|
var require_api_request = __commonJS((exports, module) => {
|
|
245223
245333
|
var assert3 = __require("node:assert");
|
|
245224
245334
|
var { Readable: Readable2 } = require_readable();
|
|
@@ -245398,7 +245508,7 @@ var require_api_request = __commonJS((exports, module) => {
|
|
|
245398
245508
|
module.exports.RequestHandler = RequestHandler;
|
|
245399
245509
|
});
|
|
245400
245510
|
|
|
245401
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
245511
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/api/abort-signal.js
|
|
245402
245512
|
var require_abort_signal = __commonJS((exports, module) => {
|
|
245403
245513
|
var { addAbortListener } = require_util3();
|
|
245404
245514
|
var { RequestAbortedError } = require_errors2();
|
|
@@ -245447,7 +245557,7 @@ var require_abort_signal = __commonJS((exports, module) => {
|
|
|
245447
245557
|
};
|
|
245448
245558
|
});
|
|
245449
245559
|
|
|
245450
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
245560
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/api/api-stream.js
|
|
245451
245561
|
var require_api_stream = __commonJS((exports, module) => {
|
|
245452
245562
|
var assert3 = __require("node:assert");
|
|
245453
245563
|
var { finished, PassThrough } = __require("node:stream");
|
|
@@ -245614,7 +245724,7 @@ var require_api_stream = __commonJS((exports, module) => {
|
|
|
245614
245724
|
module.exports = stream2;
|
|
245615
245725
|
});
|
|
245616
245726
|
|
|
245617
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
245727
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/api/api-pipeline.js
|
|
245618
245728
|
var require_api_pipeline = __commonJS((exports, module) => {
|
|
245619
245729
|
var {
|
|
245620
245730
|
Readable: Readable2,
|
|
@@ -245814,7 +245924,7 @@ var require_api_pipeline = __commonJS((exports, module) => {
|
|
|
245814
245924
|
module.exports = pipeline2;
|
|
245815
245925
|
});
|
|
245816
245926
|
|
|
245817
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
245927
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/api/api-upgrade.js
|
|
245818
245928
|
var require_api_upgrade = __commonJS((exports, module) => {
|
|
245819
245929
|
var { InvalidArgumentError, SocketError } = require_errors2();
|
|
245820
245930
|
var { AsyncResource } = __require("node:async_hooks");
|
|
@@ -245904,7 +246014,7 @@ var require_api_upgrade = __commonJS((exports, module) => {
|
|
|
245904
246014
|
module.exports = upgrade;
|
|
245905
246015
|
});
|
|
245906
246016
|
|
|
245907
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246017
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/api/api-connect.js
|
|
245908
246018
|
var require_api_connect = __commonJS((exports, module) => {
|
|
245909
246019
|
var assert3 = __require("node:assert");
|
|
245910
246020
|
var { AsyncResource } = __require("node:async_hooks");
|
|
@@ -245992,7 +246102,7 @@ var require_api_connect = __commonJS((exports, module) => {
|
|
|
245992
246102
|
module.exports = connect;
|
|
245993
246103
|
});
|
|
245994
246104
|
|
|
245995
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246105
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/api/index.js
|
|
245996
246106
|
var require_api = __commonJS((exports, module) => {
|
|
245997
246107
|
exports.request = require_api_request();
|
|
245998
246108
|
exports.stream = require_api_stream();
|
|
@@ -246001,7 +246111,7 @@ var require_api = __commonJS((exports, module) => {
|
|
|
246001
246111
|
exports.connect = require_api_connect();
|
|
246002
246112
|
});
|
|
246003
246113
|
|
|
246004
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246114
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/mock/mock-errors.js
|
|
246005
246115
|
var require_mock_errors = __commonJS((exports, module) => {
|
|
246006
246116
|
var { UndiciError } = require_errors2();
|
|
246007
246117
|
var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");
|
|
@@ -246024,7 +246134,7 @@ var require_mock_errors = __commonJS((exports, module) => {
|
|
|
246024
246134
|
};
|
|
246025
246135
|
});
|
|
246026
246136
|
|
|
246027
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246137
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/mock/mock-symbols.js
|
|
246028
246138
|
var require_mock_symbols = __commonJS((exports, module) => {
|
|
246029
246139
|
module.exports = {
|
|
246030
246140
|
kAgent: Symbol("agent"),
|
|
@@ -246049,7 +246159,7 @@ var require_mock_symbols = __commonJS((exports, module) => {
|
|
|
246049
246159
|
};
|
|
246050
246160
|
});
|
|
246051
246161
|
|
|
246052
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246162
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/mock/mock-utils.js
|
|
246053
246163
|
var require_mock_utils = __commonJS((exports, module) => {
|
|
246054
246164
|
var { MockNotMatchedError } = require_mock_errors();
|
|
246055
246165
|
var {
|
|
@@ -246339,7 +246449,7 @@ var require_mock_utils = __commonJS((exports, module) => {
|
|
|
246339
246449
|
};
|
|
246340
246450
|
});
|
|
246341
246451
|
|
|
246342
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246452
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/mock/mock-interceptor.js
|
|
246343
246453
|
var require_mock_interceptor = __commonJS((exports, module) => {
|
|
246344
246454
|
var { getResponseData, buildKey, addMockDispatch } = require_mock_utils();
|
|
246345
246455
|
var {
|
|
@@ -246476,7 +246586,7 @@ var require_mock_interceptor = __commonJS((exports, module) => {
|
|
|
246476
246586
|
exports.MockScope = MockScope;
|
|
246477
246587
|
});
|
|
246478
246588
|
|
|
246479
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246589
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/mock/mock-client.js
|
|
246480
246590
|
var require_mock_client = __commonJS((exports, module) => {
|
|
246481
246591
|
var { promisify: promisify2 } = __require("node:util");
|
|
246482
246592
|
var Client2 = require_client();
|
|
@@ -246524,7 +246634,7 @@ var require_mock_client = __commonJS((exports, module) => {
|
|
|
246524
246634
|
module.exports = MockClient;
|
|
246525
246635
|
});
|
|
246526
246636
|
|
|
246527
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246637
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/mock/mock-pool.js
|
|
246528
246638
|
var require_mock_pool = __commonJS((exports, module) => {
|
|
246529
246639
|
var { promisify: promisify2 } = __require("node:util");
|
|
246530
246640
|
var Pool2 = require_pool();
|
|
@@ -246572,7 +246682,7 @@ var require_mock_pool = __commonJS((exports, module) => {
|
|
|
246572
246682
|
module.exports = MockPool;
|
|
246573
246683
|
});
|
|
246574
246684
|
|
|
246575
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246685
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/mock/pluralizer.js
|
|
246576
246686
|
var require_pluralizer = __commonJS((exports, module) => {
|
|
246577
246687
|
var singulars = {
|
|
246578
246688
|
pronoun: "it",
|
|
@@ -246600,7 +246710,7 @@ var require_pluralizer = __commonJS((exports, module) => {
|
|
|
246600
246710
|
};
|
|
246601
246711
|
});
|
|
246602
246712
|
|
|
246603
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246713
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/mock/pending-interceptors-formatter.js
|
|
246604
246714
|
var require_pending_interceptors_formatter = __commonJS((exports, module) => {
|
|
246605
246715
|
var { Transform } = __require("node:stream");
|
|
246606
246716
|
var { Console: Console3 } = __require("node:console");
|
|
@@ -246636,7 +246746,7 @@ var require_pending_interceptors_formatter = __commonJS((exports, module) => {
|
|
|
246636
246746
|
};
|
|
246637
246747
|
});
|
|
246638
246748
|
|
|
246639
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246749
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/mock/mock-agent.js
|
|
246640
246750
|
var require_mock_agent = __commonJS((exports, module) => {
|
|
246641
246751
|
var { kClients } = require_symbols();
|
|
246642
246752
|
var Agent2 = require_agent();
|
|
@@ -246762,7 +246872,7 @@ ${pendingInterceptorsFormatter.format(pending)}
|
|
|
246762
246872
|
module.exports = MockAgent;
|
|
246763
246873
|
});
|
|
246764
246874
|
|
|
246765
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246875
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/global.js
|
|
246766
246876
|
var require_global2 = __commonJS((exports, module) => {
|
|
246767
246877
|
var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
|
|
246768
246878
|
var { InvalidArgumentError } = require_errors2();
|
|
@@ -246790,7 +246900,7 @@ var require_global2 = __commonJS((exports, module) => {
|
|
|
246790
246900
|
};
|
|
246791
246901
|
});
|
|
246792
246902
|
|
|
246793
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246903
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/handler/decorator-handler.js
|
|
246794
246904
|
var require_decorator_handler = __commonJS((exports, module) => {
|
|
246795
246905
|
module.exports = class DecoratorHandler {
|
|
246796
246906
|
#handler;
|
|
@@ -246827,7 +246937,7 @@ var require_decorator_handler = __commonJS((exports, module) => {
|
|
|
246827
246937
|
};
|
|
246828
246938
|
});
|
|
246829
246939
|
|
|
246830
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246940
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/interceptor/redirect.js
|
|
246831
246941
|
var require_redirect = __commonJS((exports, module) => {
|
|
246832
246942
|
var RedirectHandler = require_redirect_handler();
|
|
246833
246943
|
module.exports = (opts) => {
|
|
@@ -246845,7 +246955,7 @@ var require_redirect = __commonJS((exports, module) => {
|
|
|
246845
246955
|
};
|
|
246846
246956
|
});
|
|
246847
246957
|
|
|
246848
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246958
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/interceptor/retry.js
|
|
246849
246959
|
var require_retry = __commonJS((exports, module) => {
|
|
246850
246960
|
var RetryHandler = require_retry_handler();
|
|
246851
246961
|
module.exports = (globalOpts) => {
|
|
@@ -246860,7 +246970,7 @@ var require_retry = __commonJS((exports, module) => {
|
|
|
246860
246970
|
};
|
|
246861
246971
|
});
|
|
246862
246972
|
|
|
246863
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
246973
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/interceptor/dump.js
|
|
246864
246974
|
var require_dump = __commonJS((exports, module) => {
|
|
246865
246975
|
var util = require_util3();
|
|
246866
246976
|
var { InvalidArgumentError, RequestAbortedError } = require_errors2();
|
|
@@ -246945,7 +247055,7 @@ var require_dump = __commonJS((exports, module) => {
|
|
|
246945
247055
|
module.exports = createDumpInterceptor;
|
|
246946
247056
|
});
|
|
246947
247057
|
|
|
246948
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
247058
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/interceptor/dns.js
|
|
246949
247059
|
var require_dns = __commonJS((exports, module) => {
|
|
246950
247060
|
var { isIP: isIP2 } = __require("node:net");
|
|
246951
247061
|
var { lookup: lookup2 } = __require("node:dns");
|
|
@@ -247207,7 +247317,7 @@ var require_dns = __commonJS((exports, module) => {
|
|
|
247207
247317
|
};
|
|
247208
247318
|
});
|
|
247209
247319
|
|
|
247210
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
247320
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/headers.js
|
|
247211
247321
|
var require_headers = __commonJS((exports, module) => {
|
|
247212
247322
|
var { kConstruct } = require_symbols();
|
|
247213
247323
|
var { kEnumerableProperty } = require_util3();
|
|
@@ -247614,7 +247724,7 @@ var require_headers = __commonJS((exports, module) => {
|
|
|
247614
247724
|
};
|
|
247615
247725
|
});
|
|
247616
247726
|
|
|
247617
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
247727
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/response.js
|
|
247618
247728
|
var require_response = __commonJS((exports, module) => {
|
|
247619
247729
|
var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers();
|
|
247620
247730
|
var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body();
|
|
@@ -247984,7 +248094,7 @@ var require_response = __commonJS((exports, module) => {
|
|
|
247984
248094
|
};
|
|
247985
248095
|
});
|
|
247986
248096
|
|
|
247987
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
248097
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/dispatcher-weakref.js
|
|
247988
248098
|
var require_dispatcher_weakref = __commonJS((exports, module) => {
|
|
247989
248099
|
var { kConnected, kSize } = require_symbols();
|
|
247990
248100
|
|
|
@@ -248024,7 +248134,7 @@ var require_dispatcher_weakref = __commonJS((exports, module) => {
|
|
|
248024
248134
|
};
|
|
248025
248135
|
});
|
|
248026
248136
|
|
|
248027
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
248137
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/request.js
|
|
248028
248138
|
var require_request2 = __commonJS((exports, module) => {
|
|
248029
248139
|
var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body();
|
|
248030
248140
|
var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers();
|
|
@@ -248614,7 +248724,7 @@ var require_request2 = __commonJS((exports, module) => {
|
|
|
248614
248724
|
module.exports = { Request: Request4, makeRequest, fromInnerRequest, cloneRequest };
|
|
248615
248725
|
});
|
|
248616
248726
|
|
|
248617
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
248727
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fetch/index.js
|
|
248618
248728
|
var require_fetch = __commonJS((exports, module) => {
|
|
248619
248729
|
var {
|
|
248620
248730
|
makeNetworkError,
|
|
@@ -249414,8 +249524,9 @@ var require_fetch = __commonJS((exports, module) => {
|
|
|
249414
249524
|
type: "bytes"
|
|
249415
249525
|
});
|
|
249416
249526
|
response.body = { stream: stream2, source: null, length: null };
|
|
249417
|
-
fetchParams.controller.
|
|
249418
|
-
|
|
249527
|
+
if (!fetchParams.controller.resume) {
|
|
249528
|
+
fetchParams.controller.on("terminated", onAborted);
|
|
249529
|
+
}
|
|
249419
249530
|
fetchParams.controller.resume = async () => {
|
|
249420
249531
|
while (true) {
|
|
249421
249532
|
let bytes;
|
|
@@ -249511,7 +249622,6 @@ var require_fetch = __commonJS((exports, module) => {
|
|
|
249511
249622
|
headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i2]), rawHeaders[i2 + 1].toString("latin1"), true);
|
|
249512
249623
|
}
|
|
249513
249624
|
location = headersList.get("location", true);
|
|
249514
|
-
this.body = new Readable2({ read: resume });
|
|
249515
249625
|
const decoders = [];
|
|
249516
249626
|
const willFollow = location && request3.redirect === "follow" && redirectStatusSet.has(status);
|
|
249517
249627
|
if (request3.method !== "HEAD" && request3.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) {
|
|
@@ -249519,7 +249629,7 @@ var require_fetch = __commonJS((exports, module) => {
|
|
|
249519
249629
|
const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : [];
|
|
249520
249630
|
const maxContentEncodings = 5;
|
|
249521
249631
|
if (codings.length > maxContentEncodings) {
|
|
249522
|
-
|
|
249632
|
+
this.abort(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`));
|
|
249523
249633
|
return true;
|
|
249524
249634
|
}
|
|
249525
249635
|
for (let i2 = codings.length - 1;i2 >= 0; --i2) {
|
|
@@ -249545,6 +249655,7 @@ var require_fetch = __commonJS((exports, module) => {
|
|
|
249545
249655
|
}
|
|
249546
249656
|
}
|
|
249547
249657
|
}
|
|
249658
|
+
this.body = new Readable2({ read: resume });
|
|
249548
249659
|
const onError3 = this.onError.bind(this);
|
|
249549
249660
|
resolve6({
|
|
249550
249661
|
status,
|
|
@@ -249570,9 +249681,6 @@ var require_fetch = __commonJS((exports, module) => {
|
|
|
249570
249681
|
if (this.abort) {
|
|
249571
249682
|
fetchParams.controller.off("terminated", this.abort);
|
|
249572
249683
|
}
|
|
249573
|
-
if (fetchParams.controller.onAborted) {
|
|
249574
|
-
fetchParams.controller.off("terminated", fetchParams.controller.onAborted);
|
|
249575
|
-
}
|
|
249576
249684
|
fetchParams.controller.ended = true;
|
|
249577
249685
|
this.body.push(null);
|
|
249578
249686
|
},
|
|
@@ -249611,7 +249719,7 @@ var require_fetch = __commonJS((exports, module) => {
|
|
|
249611
249719
|
};
|
|
249612
249720
|
});
|
|
249613
249721
|
|
|
249614
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
249722
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fileapi/symbols.js
|
|
249615
249723
|
var require_symbols3 = __commonJS((exports, module) => {
|
|
249616
249724
|
module.exports = {
|
|
249617
249725
|
kState: Symbol("FileReader state"),
|
|
@@ -249623,7 +249731,7 @@ var require_symbols3 = __commonJS((exports, module) => {
|
|
|
249623
249731
|
};
|
|
249624
249732
|
});
|
|
249625
249733
|
|
|
249626
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
249734
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fileapi/progressevent.js
|
|
249627
249735
|
var require_progressevent = __commonJS((exports, module) => {
|
|
249628
249736
|
var { webidl } = require_webidl();
|
|
249629
249737
|
var kState = Symbol("ProgressEvent state");
|
|
@@ -249689,7 +249797,7 @@ var require_progressevent = __commonJS((exports, module) => {
|
|
|
249689
249797
|
};
|
|
249690
249798
|
});
|
|
249691
249799
|
|
|
249692
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
249800
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fileapi/encoding.js
|
|
249693
249801
|
var require_encoding = __commonJS((exports, module) => {
|
|
249694
249802
|
function getEncoding(label) {
|
|
249695
249803
|
if (!label) {
|
|
@@ -249972,7 +250080,7 @@ var require_encoding = __commonJS((exports, module) => {
|
|
|
249972
250080
|
};
|
|
249973
250081
|
});
|
|
249974
250082
|
|
|
249975
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
250083
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fileapi/util.js
|
|
249976
250084
|
var require_util6 = __commonJS((exports, module) => {
|
|
249977
250085
|
var {
|
|
249978
250086
|
kState,
|
|
@@ -250154,7 +250262,7 @@ var require_util6 = __commonJS((exports, module) => {
|
|
|
250154
250262
|
};
|
|
250155
250263
|
});
|
|
250156
250264
|
|
|
250157
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
250265
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/fileapi/filereader.js
|
|
250158
250266
|
var require_filereader = __commonJS((exports, module) => {
|
|
250159
250267
|
var {
|
|
250160
250268
|
staticPropertyDescriptors,
|
|
@@ -250382,14 +250490,14 @@ var require_filereader = __commonJS((exports, module) => {
|
|
|
250382
250490
|
};
|
|
250383
250491
|
});
|
|
250384
250492
|
|
|
250385
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
250493
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/cache/symbols.js
|
|
250386
250494
|
var require_symbols4 = __commonJS((exports, module) => {
|
|
250387
250495
|
module.exports = {
|
|
250388
250496
|
kConstruct: require_symbols().kConstruct
|
|
250389
250497
|
};
|
|
250390
250498
|
});
|
|
250391
250499
|
|
|
250392
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
250500
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/cache/util.js
|
|
250393
250501
|
var require_util7 = __commonJS((exports, module) => {
|
|
250394
250502
|
var assert3 = __require("node:assert");
|
|
250395
250503
|
var { URLSerializer } = require_data_url();
|
|
@@ -250416,7 +250524,7 @@ var require_util7 = __commonJS((exports, module) => {
|
|
|
250416
250524
|
};
|
|
250417
250525
|
});
|
|
250418
250526
|
|
|
250419
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
250527
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/cache/cache.js
|
|
250420
250528
|
var require_cache = __commonJS((exports, module) => {
|
|
250421
250529
|
var { kConstruct } = require_symbols4();
|
|
250422
250530
|
var { urlEquals, getFieldValues } = require_util7();
|
|
@@ -250919,7 +251027,7 @@ var require_cache = __commonJS((exports, module) => {
|
|
|
250919
251027
|
};
|
|
250920
251028
|
});
|
|
250921
251029
|
|
|
250922
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
251030
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/cache/cachestorage.js
|
|
250923
251031
|
var require_cachestorage = __commonJS((exports, module) => {
|
|
250924
251032
|
var { kConstruct } = require_symbols4();
|
|
250925
251033
|
var { Cache: Cache2 } = require_cache();
|
|
@@ -251004,7 +251112,7 @@ var require_cachestorage = __commonJS((exports, module) => {
|
|
|
251004
251112
|
};
|
|
251005
251113
|
});
|
|
251006
251114
|
|
|
251007
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
251115
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/cookies/constants.js
|
|
251008
251116
|
var require_constants4 = __commonJS((exports, module) => {
|
|
251009
251117
|
var maxAttributeValueSize = 1024;
|
|
251010
251118
|
var maxNameValuePairSize = 4096;
|
|
@@ -251014,7 +251122,7 @@ var require_constants4 = __commonJS((exports, module) => {
|
|
|
251014
251122
|
};
|
|
251015
251123
|
});
|
|
251016
251124
|
|
|
251017
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
251125
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/cookies/util.js
|
|
251018
251126
|
var require_util8 = __commonJS((exports, module) => {
|
|
251019
251127
|
function isCTLExcludingHtab(value3) {
|
|
251020
251128
|
for (let i2 = 0;i2 < value3.length; ++i2) {
|
|
@@ -251192,7 +251300,7 @@ var require_util8 = __commonJS((exports, module) => {
|
|
|
251192
251300
|
};
|
|
251193
251301
|
});
|
|
251194
251302
|
|
|
251195
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
251303
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/cookies/parse.js
|
|
251196
251304
|
var require_parse = __commonJS((exports, module) => {
|
|
251197
251305
|
var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4();
|
|
251198
251306
|
var { isCTLExcludingHtab } = require_util8();
|
|
@@ -251313,7 +251421,7 @@ var require_parse = __commonJS((exports, module) => {
|
|
|
251313
251421
|
};
|
|
251314
251422
|
});
|
|
251315
251423
|
|
|
251316
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
251424
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/cookies/index.js
|
|
251317
251425
|
var require_cookies = __commonJS((exports, module) => {
|
|
251318
251426
|
var { parseSetCookie } = require_parse();
|
|
251319
251427
|
var { stringify: stringify2 } = require_util8();
|
|
@@ -251439,7 +251547,7 @@ var require_cookies = __commonJS((exports, module) => {
|
|
|
251439
251547
|
};
|
|
251440
251548
|
});
|
|
251441
251549
|
|
|
251442
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
251550
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/events.js
|
|
251443
251551
|
var require_events = __commonJS((exports, module) => {
|
|
251444
251552
|
var { webidl } = require_webidl();
|
|
251445
251553
|
var { kEnumerableProperty } = require_util3();
|
|
@@ -251701,7 +251809,7 @@ var require_events = __commonJS((exports, module) => {
|
|
|
251701
251809
|
};
|
|
251702
251810
|
});
|
|
251703
251811
|
|
|
251704
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
251812
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/constants.js
|
|
251705
251813
|
var require_constants5 = __commonJS((exports, module) => {
|
|
251706
251814
|
var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
251707
251815
|
var staticPropertyDescriptors = {
|
|
@@ -251755,7 +251863,7 @@ var require_constants5 = __commonJS((exports, module) => {
|
|
|
251755
251863
|
};
|
|
251756
251864
|
});
|
|
251757
251865
|
|
|
251758
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
251866
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/symbols.js
|
|
251759
251867
|
var require_symbols5 = __commonJS((exports, module) => {
|
|
251760
251868
|
module.exports = {
|
|
251761
251869
|
kWebSocketURL: Symbol("url"),
|
|
@@ -251769,7 +251877,7 @@ var require_symbols5 = __commonJS((exports, module) => {
|
|
|
251769
251877
|
};
|
|
251770
251878
|
});
|
|
251771
251879
|
|
|
251772
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
251880
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/util.js
|
|
251773
251881
|
var require_util9 = __commonJS((exports, module) => {
|
|
251774
251882
|
var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5();
|
|
251775
251883
|
var { states: states2, opcodes } = require_constants5();
|
|
@@ -251917,7 +252025,7 @@ var require_util9 = __commonJS((exports, module) => {
|
|
|
251917
252025
|
};
|
|
251918
252026
|
});
|
|
251919
252027
|
|
|
251920
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
252028
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/frame.js
|
|
251921
252029
|
var require_frame = __commonJS((exports, module) => {
|
|
251922
252030
|
var { maxUnsigned16Bit } = require_constants5();
|
|
251923
252031
|
var BUFFER_SIZE = 16386;
|
|
@@ -251989,7 +252097,7 @@ var require_frame = __commonJS((exports, module) => {
|
|
|
251989
252097
|
};
|
|
251990
252098
|
});
|
|
251991
252099
|
|
|
251992
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
252100
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/connection.js
|
|
251993
252101
|
var require_connection = __commonJS((exports, module) => {
|
|
251994
252102
|
var { uid, states: states2, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5();
|
|
251995
252103
|
var {
|
|
@@ -252169,7 +252277,7 @@ var require_connection = __commonJS((exports, module) => {
|
|
|
252169
252277
|
};
|
|
252170
252278
|
});
|
|
252171
252279
|
|
|
252172
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
252280
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/permessage-deflate.js
|
|
252173
252281
|
var require_permessage_deflate = __commonJS((exports, module) => {
|
|
252174
252282
|
var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = __require("node:zlib");
|
|
252175
252283
|
var { isValidClientWindowBits } = require_util9();
|
|
@@ -252239,7 +252347,7 @@ var require_permessage_deflate = __commonJS((exports, module) => {
|
|
|
252239
252347
|
module.exports = { PerMessageDeflate };
|
|
252240
252348
|
});
|
|
252241
252349
|
|
|
252242
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
252350
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/receiver.js
|
|
252243
252351
|
var require_receiver = __commonJS((exports, module) => {
|
|
252244
252352
|
var { Writable } = __require("node:stream");
|
|
252245
252353
|
var assert3 = __require("node:assert");
|
|
@@ -252403,6 +252511,17 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
252403
252511
|
if (isControlFrame(this.#info.opcode)) {
|
|
252404
252512
|
this.#loop = this.parseControlFrame(body);
|
|
252405
252513
|
this.#state = parserStates.INFO;
|
|
252514
|
+
const socket = this.ws[kResponse].socket;
|
|
252515
|
+
if (this.#loop && socket.writableNeedDrain) {
|
|
252516
|
+
this.#loop = false;
|
|
252517
|
+
socket.once("drain", () => {
|
|
252518
|
+
if (this.destroyed)
|
|
252519
|
+
return;
|
|
252520
|
+
this.#loop = true;
|
|
252521
|
+
this.run(callback3);
|
|
252522
|
+
});
|
|
252523
|
+
return;
|
|
252524
|
+
}
|
|
252406
252525
|
} else {
|
|
252407
252526
|
if (!this.#info.compressed) {
|
|
252408
252527
|
if (!this.writeFragments(body)) {
|
|
@@ -252576,7 +252695,7 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
252576
252695
|
};
|
|
252577
252696
|
});
|
|
252578
252697
|
|
|
252579
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
252698
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/sender.js
|
|
252580
252699
|
var require_sender = __commonJS((exports, module) => {
|
|
252581
252700
|
var { WebsocketFrameSend } = require_frame();
|
|
252582
252701
|
var { opcodes, sendHints } = require_constants5();
|
|
@@ -252649,7 +252768,7 @@ var require_sender = __commonJS((exports, module) => {
|
|
|
252649
252768
|
module.exports = { SendQueue };
|
|
252650
252769
|
});
|
|
252651
252770
|
|
|
252652
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
252771
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/websocket/websocket.js
|
|
252653
252772
|
var require_websocket = __commonJS((exports, module) => {
|
|
252654
252773
|
var { webidl } = require_webidl();
|
|
252655
252774
|
var { URLSerializer } = require_data_url();
|
|
@@ -253005,7 +253124,7 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
253005
253124
|
};
|
|
253006
253125
|
});
|
|
253007
253126
|
|
|
253008
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
253127
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/eventsource/util.js
|
|
253009
253128
|
var require_util10 = __commonJS((exports, module) => {
|
|
253010
253129
|
function isValidLastEventId(value3) {
|
|
253011
253130
|
return value3.indexOf("\x00") === -1;
|
|
@@ -253031,8 +253150,9 @@ var require_util10 = __commonJS((exports, module) => {
|
|
|
253031
253150
|
};
|
|
253032
253151
|
});
|
|
253033
253152
|
|
|
253034
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
253153
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/eventsource/eventsource-stream.js
|
|
253035
253154
|
var require_eventsource_stream = __commonJS((exports, module) => {
|
|
253155
|
+
var buffer = __require("node:buffer");
|
|
253036
253156
|
var { Transform } = __require("node:stream");
|
|
253037
253157
|
var { isASCIINumber, isValidLastEventId } = require_util10();
|
|
253038
253158
|
var BOM = [239, 187, 191];
|
|
@@ -253040,24 +253160,28 @@ var require_eventsource_stream = __commonJS((exports, module) => {
|
|
|
253040
253160
|
var CR2 = 13;
|
|
253041
253161
|
var COLON = 58;
|
|
253042
253162
|
var SPACE2 = 32;
|
|
253163
|
+
var defaultMaxEventSize = buffer.kStringMaxLength;
|
|
253043
253164
|
var DATA = Buffer.from("data");
|
|
253044
253165
|
var EVENT = Buffer.from("event");
|
|
253045
253166
|
var ID2 = Buffer.from("id");
|
|
253046
253167
|
var RETRY = Buffer.from("retry");
|
|
253047
|
-
|
|
253048
|
-
|
|
253168
|
+
var minParserItems = 1024;
|
|
253169
|
+
var maxParserItems = 131072;
|
|
253170
|
+
var bytesPerParserItem = 128;
|
|
253171
|
+
function isASCIINumberBytes(buffer2, start) {
|
|
253172
|
+
if (start >= buffer2.length) {
|
|
253049
253173
|
return false;
|
|
253050
253174
|
}
|
|
253051
|
-
for (let i2 = start;i2 <
|
|
253052
|
-
if (
|
|
253175
|
+
for (let i2 = start;i2 < buffer2.length; i2++) {
|
|
253176
|
+
if (buffer2[i2] < 48 || buffer2[i2] > 57) {
|
|
253053
253177
|
return false;
|
|
253054
253178
|
}
|
|
253055
253179
|
}
|
|
253056
253180
|
return true;
|
|
253057
253181
|
}
|
|
253058
|
-
function isValidLastEventIdBytes(
|
|
253059
|
-
for (let i2 = start;i2 <
|
|
253060
|
-
if (
|
|
253182
|
+
function isValidLastEventIdBytes(buffer2, start) {
|
|
253183
|
+
for (let i2 = start;i2 < buffer2.length; i2++) {
|
|
253184
|
+
if (buffer2[i2] === 0) {
|
|
253061
253185
|
return false;
|
|
253062
253186
|
}
|
|
253063
253187
|
}
|
|
@@ -253074,6 +253198,11 @@ var require_eventsource_stream = __commonJS((exports, module) => {
|
|
|
253074
253198
|
}
|
|
253075
253199
|
return true;
|
|
253076
253200
|
}
|
|
253201
|
+
function createMaxEventSizeExceededError() {
|
|
253202
|
+
const error48 = new Error("EventSource message size exceeded");
|
|
253203
|
+
error48.aborted = false;
|
|
253204
|
+
return error48;
|
|
253205
|
+
}
|
|
253077
253206
|
|
|
253078
253207
|
class EventSourceStream extends Transform {
|
|
253079
253208
|
state = null;
|
|
@@ -253085,6 +253214,13 @@ var require_eventsource_stream = __commonJS((exports, module) => {
|
|
|
253085
253214
|
pos = 0;
|
|
253086
253215
|
lineChunkIndex = 0;
|
|
253087
253216
|
linePos = 0;
|
|
253217
|
+
lineLength = 0;
|
|
253218
|
+
eventSize = 0;
|
|
253219
|
+
eventFieldSizes = { data: 0, event: 0, id: 0, retry: 0 };
|
|
253220
|
+
dataLineCount = 0;
|
|
253221
|
+
maxEventSize;
|
|
253222
|
+
maxDataLines;
|
|
253223
|
+
maxBufferedChunks;
|
|
253088
253224
|
event = {
|
|
253089
253225
|
data: undefined,
|
|
253090
253226
|
event: undefined,
|
|
@@ -253095,6 +253231,10 @@ var require_eventsource_stream = __commonJS((exports, module) => {
|
|
|
253095
253231
|
options.readableObjectMode = true;
|
|
253096
253232
|
super(options);
|
|
253097
253233
|
this.state = options.eventSourceSettings || {};
|
|
253234
|
+
this.maxEventSize = options.maxEventSize ?? defaultMaxEventSize;
|
|
253235
|
+
const parserItemLimit = this.maxEventSize > 0 ? Math.min(maxParserItems, Math.max(minParserItems, Math.floor(this.maxEventSize / bytesPerParserItem))) : 0;
|
|
253236
|
+
this.maxDataLines = parserItemLimit;
|
|
253237
|
+
this.maxBufferedChunks = parserItemLimit;
|
|
253098
253238
|
if (options.push) {
|
|
253099
253239
|
this.push = options.push;
|
|
253100
253240
|
}
|
|
@@ -253104,6 +253244,10 @@ var require_eventsource_stream = __commonJS((exports, module) => {
|
|
|
253104
253244
|
callback3();
|
|
253105
253245
|
return;
|
|
253106
253246
|
}
|
|
253247
|
+
if (this.maxEventSize > 0 && this.chunks.length >= this.maxBufferedChunks && chunk[0] !== LF2 && chunk[0] !== CR2) {
|
|
253248
|
+
callback3(createMaxEventSizeExceededError());
|
|
253249
|
+
return;
|
|
253250
|
+
}
|
|
253107
253251
|
this.chunks.push(chunk);
|
|
253108
253252
|
if (this.checkBOM) {
|
|
253109
253253
|
if (this.handleBOM()) {
|
|
@@ -253140,15 +253284,29 @@ var require_eventsource_stream = __commonJS((exports, module) => {
|
|
|
253140
253284
|
if (byte === CR2) {
|
|
253141
253285
|
this.crlfCheck = true;
|
|
253142
253286
|
}
|
|
253143
|
-
|
|
253287
|
+
try {
|
|
253288
|
+
this.parseLine(this.readLine(), this.event);
|
|
253289
|
+
} catch (error48) {
|
|
253290
|
+
callback3(error48);
|
|
253291
|
+
return;
|
|
253292
|
+
}
|
|
253144
253293
|
this.consumeCurrentByte();
|
|
253145
253294
|
this.eventEndCheck = true;
|
|
253146
253295
|
continue;
|
|
253147
253296
|
}
|
|
253297
|
+
if (this.maxEventSize > 0 && ++this.lineLength > this.maxEventSize + 7) {
|
|
253298
|
+
callback3(createMaxEventSizeExceededError());
|
|
253299
|
+
return;
|
|
253300
|
+
}
|
|
253148
253301
|
this.advanceCursor();
|
|
253149
253302
|
}
|
|
253150
253303
|
callback3();
|
|
253151
253304
|
}
|
|
253305
|
+
_destroy(error48, callback3) {
|
|
253306
|
+
this.chunks.length = 0;
|
|
253307
|
+
this.clearEvent();
|
|
253308
|
+
super._destroy(error48, callback3);
|
|
253309
|
+
}
|
|
253152
253310
|
parseLine(line, event) {
|
|
253153
253311
|
if (line.length === 0) {
|
|
253154
253312
|
return;
|
|
@@ -253167,6 +253325,12 @@ var require_eventsource_stream = __commonJS((exports, module) => {
|
|
|
253167
253325
|
}
|
|
253168
253326
|
}
|
|
253169
253327
|
if (isFieldName(line, fieldLength, DATA)) {
|
|
253328
|
+
if (this.maxEventSize > 0 && this.dataLineCount >= this.maxDataLines) {
|
|
253329
|
+
throw createMaxEventSizeExceededError();
|
|
253330
|
+
}
|
|
253331
|
+
const valueBytes = line.length - valueStart;
|
|
253332
|
+
const dataSize = this.eventFieldSizes.data + (event.data === undefined ? 0 : 1) + valueBytes;
|
|
253333
|
+
this.setEventFieldSize("data", dataSize);
|
|
253170
253334
|
const value3 = line.toString("utf8", valueStart);
|
|
253171
253335
|
if (event.data === undefined) {
|
|
253172
253336
|
event.data = value3;
|
|
@@ -253174,27 +253338,38 @@ var require_eventsource_stream = __commonJS((exports, module) => {
|
|
|
253174
253338
|
event.data += `
|
|
253175
253339
|
${value3}`;
|
|
253176
253340
|
}
|
|
253341
|
+
this.dataLineCount++;
|
|
253177
253342
|
return;
|
|
253178
253343
|
}
|
|
253179
253344
|
if (isFieldName(line, fieldLength, RETRY)) {
|
|
253180
253345
|
if (isASCIINumberBytes(line, valueStart)) {
|
|
253346
|
+
this.setEventFieldSize("retry", line.length - valueStart);
|
|
253181
253347
|
event.retry = line.toString("utf8", valueStart);
|
|
253182
253348
|
}
|
|
253183
253349
|
return;
|
|
253184
253350
|
}
|
|
253185
253351
|
if (isFieldName(line, fieldLength, ID2)) {
|
|
253186
253352
|
if (isValidLastEventIdBytes(line, valueStart)) {
|
|
253353
|
+
this.setEventFieldSize("id", line.length - valueStart);
|
|
253187
253354
|
event.id = line.toString("utf8", valueStart);
|
|
253188
253355
|
}
|
|
253189
253356
|
return;
|
|
253190
253357
|
}
|
|
253191
253358
|
if (isFieldName(line, fieldLength, EVENT)) {
|
|
253192
|
-
|
|
253193
|
-
|
|
253194
|
-
event.event =
|
|
253359
|
+
if (valueStart < line.length) {
|
|
253360
|
+
this.setEventFieldSize("event", line.length - valueStart);
|
|
253361
|
+
event.event = line.toString("utf8", valueStart);
|
|
253195
253362
|
}
|
|
253196
253363
|
}
|
|
253197
253364
|
}
|
|
253365
|
+
setEventFieldSize(field, size6) {
|
|
253366
|
+
const eventSize = this.eventSize - this.eventFieldSizes[field] + size6;
|
|
253367
|
+
if (this.maxEventSize > 0 && eventSize > this.maxEventSize) {
|
|
253368
|
+
throw createMaxEventSizeExceededError();
|
|
253369
|
+
}
|
|
253370
|
+
this.eventSize = eventSize;
|
|
253371
|
+
this.eventFieldSizes[field] = size6;
|
|
253372
|
+
}
|
|
253198
253373
|
processEvent(event) {
|
|
253199
253374
|
if (event.retry && isASCIINumber(event.retry)) {
|
|
253200
253375
|
this.state.reconnectionTime = parseInt(event.retry, 10);
|
|
@@ -253218,6 +253393,12 @@ ${value3}`;
|
|
|
253218
253393
|
this.event.event = undefined;
|
|
253219
253394
|
this.event.id = undefined;
|
|
253220
253395
|
this.event.retry = undefined;
|
|
253396
|
+
this.eventSize = 0;
|
|
253397
|
+
this.dataLineCount = 0;
|
|
253398
|
+
this.eventFieldSizes.data = 0;
|
|
253399
|
+
this.eventFieldSizes.event = 0;
|
|
253400
|
+
this.eventFieldSizes.id = 0;
|
|
253401
|
+
this.eventFieldSizes.retry = 0;
|
|
253221
253402
|
}
|
|
253222
253403
|
hasPendingEvent() {
|
|
253223
253404
|
return this.event.data !== undefined || this.event.event !== undefined || this.event.id !== undefined || this.event.retry !== undefined;
|
|
@@ -253242,13 +253423,15 @@ ${value3}`;
|
|
|
253242
253423
|
syncLineStartToCursor() {
|
|
253243
253424
|
this.lineChunkIndex = this.chunkIndex;
|
|
253244
253425
|
this.linePos = this.pos;
|
|
253426
|
+
this.lineLength = 0;
|
|
253245
253427
|
this.dropConsumedChunks();
|
|
253246
253428
|
}
|
|
253247
253429
|
dropConsumedChunks() {
|
|
253248
|
-
|
|
253249
|
-
this.
|
|
253250
|
-
this.
|
|
253251
|
-
this.
|
|
253430
|
+
if (this.lineChunkIndex > 0) {
|
|
253431
|
+
const consumed = this.lineChunkIndex;
|
|
253432
|
+
this.chunks.splice(0, consumed);
|
|
253433
|
+
this.lineChunkIndex = 0;
|
|
253434
|
+
this.chunkIndex -= consumed;
|
|
253252
253435
|
}
|
|
253253
253436
|
if (this.chunkIndex === this.chunks.length) {
|
|
253254
253437
|
this.chunks.length = 0;
|
|
@@ -253335,7 +253518,7 @@ ${value3}`;
|
|
|
253335
253518
|
};
|
|
253336
253519
|
});
|
|
253337
253520
|
|
|
253338
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
253521
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/lib/web/eventsource/eventsource.js
|
|
253339
253522
|
var require_eventsource = __commonJS((exports, module) => {
|
|
253340
253523
|
var { pipeline: pipeline2 } = __require("node:stream");
|
|
253341
253524
|
var { fetching } = require_fetch();
|
|
@@ -253348,6 +253531,7 @@ var require_eventsource = __commonJS((exports, module) => {
|
|
|
253348
253531
|
var { delay: delay7 } = require_util10();
|
|
253349
253532
|
var { kEnumerableProperty } = require_util3();
|
|
253350
253533
|
var { environmentSettingsObject } = require_util4();
|
|
253534
|
+
var { getGlobalDispatcher } = require_global2();
|
|
253351
253535
|
var experimentalWarned = false;
|
|
253352
253536
|
var defaultReconnectionTime = 3000;
|
|
253353
253537
|
var CONNECTING = 0;
|
|
@@ -253465,6 +253649,7 @@ var require_eventsource = __commonJS((exports, module) => {
|
|
|
253465
253649
|
this.#state.origin = response.urlList[response.urlList.length - 1].origin;
|
|
253466
253650
|
const eventSourceStream = new EventSourceStream({
|
|
253467
253651
|
eventSourceSettings: this.#state,
|
|
253652
|
+
maxEventSize: this.#dispatcher.eventSourceOptions?.maxEventSize,
|
|
253468
253653
|
push: (event) => {
|
|
253469
253654
|
this.dispatchEvent(createFastMessageEvent(event.type, event.options));
|
|
253470
253655
|
}
|
|
@@ -253584,7 +253769,8 @@ var require_eventsource = __commonJS((exports, module) => {
|
|
|
253584
253769
|
},
|
|
253585
253770
|
{
|
|
253586
253771
|
key: "dispatcher",
|
|
253587
|
-
converter: webidl.converters.any
|
|
253772
|
+
converter: webidl.converters.any,
|
|
253773
|
+
defaultValue: () => getGlobalDispatcher()
|
|
253588
253774
|
}
|
|
253589
253775
|
]);
|
|
253590
253776
|
module.exports = {
|
|
@@ -262865,6 +263051,9 @@ import { dirname, resolve as resolve2 } from "node:path";
|
|
|
262865
263051
|
// src/workspaces.ts
|
|
262866
263052
|
import { createHash } from "node:crypto";
|
|
262867
263053
|
import { basename, resolve } from "node:path";
|
|
263054
|
+
function hasExternalOpencode(config) {
|
|
263055
|
+
return config.externalOpencode ?? Boolean(config.opencodeBaseUrl || config.workspaces?.some((workspace) => workspace.baseUrl));
|
|
263056
|
+
}
|
|
262868
263057
|
function workspaceIdForKey(key) {
|
|
262869
263058
|
const hash = createHash("sha256").update(key).digest("hex");
|
|
262870
263059
|
return `ws_${hash.slice(0, 12)}`;
|
|
@@ -263052,6 +263241,11 @@ function parseCliArgs(argv) {
|
|
|
263052
263241
|
index += 1;
|
|
263053
263242
|
continue;
|
|
263054
263243
|
}
|
|
263244
|
+
if (value === "--allowed-hosts") {
|
|
263245
|
+
args.allowedHosts = parseList(argv[index + 1]);
|
|
263246
|
+
index += 1;
|
|
263247
|
+
continue;
|
|
263248
|
+
}
|
|
263055
263249
|
if (value === "--read-only") {
|
|
263056
263250
|
args.readOnly = true;
|
|
263057
263251
|
continue;
|
|
@@ -263066,7 +263260,8 @@ function printHelp() {
|
|
|
263066
263260
|
"Commands:",
|
|
263067
263261
|
" web Serve the OpenWork web UI + API on one origin with a",
|
|
263068
263262
|
" managed OpenCode engine (downloaded on first run).",
|
|
263069
|
-
" Defaults: --host 127.0.0.1, --approval auto, workspace = cwd
|
|
263263
|
+
" Defaults: --host 127.0.0.1, --approval auto, workspace = cwd,",
|
|
263264
|
+
" answering only loopback, IP and --host names.",
|
|
263070
263265
|
" --open Open the browser once listening",
|
|
263071
263266
|
" --no-bootstrap-token Require pasting the client token instead of auto sign-in",
|
|
263072
263267
|
"",
|
|
@@ -263084,6 +263279,7 @@ function printHelp() {
|
|
|
263084
263279
|
" --opencode-password <pass> OpenCode server password",
|
|
263085
263280
|
" --workspace <path> Workspace root (repeatable)",
|
|
263086
263281
|
" --cors <origins> Comma-separated origins or *",
|
|
263282
|
+
" --allowed-hosts <names> Comma-separated extra host names to answer (e.g. behind a proxy) or *",
|
|
263087
263283
|
" --read-only Disable writes",
|
|
263088
263284
|
" --log-format <format> Log output format: pretty | json",
|
|
263089
263285
|
" --log-requests Log incoming requests (default: true)",
|
|
@@ -263141,6 +263337,9 @@ async function resolveServerConfig(cli) {
|
|
|
263141
263337
|
const envCorsOrigins = process.env.OPENWORK_CORS_ORIGINS;
|
|
263142
263338
|
const parsedEnvCors = envCorsOrigins ? parseList(envCorsOrigins) : null;
|
|
263143
263339
|
const corsOrigins = cli.corsOrigins ?? parsedEnvCors ?? fileConfig.corsOrigins ?? ["*"];
|
|
263340
|
+
const envAllowedHosts = process.env.OPENWORK_ALLOWED_HOSTS;
|
|
263341
|
+
const parsedEnvAllowedHosts = envAllowedHosts ? parseList(envAllowedHosts) : null;
|
|
263342
|
+
const allowedHosts = cli.allowedHosts ?? parsedEnvAllowedHosts ?? fileConfig.allowedHosts ?? (cli.web ? [] : undefined);
|
|
263144
263343
|
const envReadOnly = process.env.OPENWORK_READONLY;
|
|
263145
263344
|
const parsedReadOnly = envReadOnly ? ["true", "1", "yes"].includes(envReadOnly.toLowerCase()) : undefined;
|
|
263146
263345
|
const readOnly = cli.readOnly ?? parsedReadOnly ?? fileConfig.readOnly ?? false;
|
|
@@ -263158,11 +263357,13 @@ async function resolveServerConfig(cli) {
|
|
|
263158
263357
|
hostToken,
|
|
263159
263358
|
configPath,
|
|
263160
263359
|
opencodeBaseUrl,
|
|
263360
|
+
externalOpencode: hasExternalOpencode({ opencodeBaseUrl, workspaces }),
|
|
263161
263361
|
opencodeDirectory,
|
|
263162
263362
|
opencodeUsername,
|
|
263163
263363
|
opencodePassword,
|
|
263164
263364
|
approval,
|
|
263165
263365
|
corsOrigins,
|
|
263366
|
+
...allowedHosts ? { allowedHosts } : {},
|
|
263166
263367
|
workspaces,
|
|
263167
263368
|
authorizedRoots,
|
|
263168
263369
|
readOnly,
|
|
@@ -263172,8 +263373,7 @@ async function resolveServerConfig(cli) {
|
|
|
263172
263373
|
logFormat,
|
|
263173
263374
|
logRequests,
|
|
263174
263375
|
...process.env.OPENWORK_FRESH_INSTALL_ENGINE === "v2" ? { freshInstallEngine: "v2" } : {},
|
|
263175
|
-
engineAutoUpgrade: process.env.OPENWORK_ENGINE_AUTO_UPGRADE
|
|
263176
|
-
engineForcePolicy: process.env.OPENWORK_ENGINE_FORCE_POLICY === "1" || process.env.OPENWORK_ENGINE_AUTO_UPGRADE !== undefined
|
|
263376
|
+
engineAutoUpgrade: process.env.OPENWORK_ENGINE_AUTO_UPGRADE !== "0"
|
|
263177
263377
|
};
|
|
263178
263378
|
}
|
|
263179
263379
|
|
|
@@ -267982,7 +268182,7 @@ function createBrowserTaskHost({
|
|
|
267982
268182
|
if (ownerOf(tab.tabId) !== sessionId || navigations.get(tab.tabId) !== scope)
|
|
267983
268183
|
fail("wrong_conversation", "The browser navigation owner changed.");
|
|
267984
268184
|
if (pausedSessions.has(sessionId))
|
|
267985
|
-
fail("paused", "The user has browser control
|
|
268185
|
+
fail("paused", "The user has browser control until they resume it or send their next message.");
|
|
267986
268186
|
if (!enabled())
|
|
267987
268187
|
fail("browser_disabled", "Browser control was disabled while navigation was pending.");
|
|
267988
268188
|
}
|
|
@@ -268066,7 +268266,7 @@ function createBrowserTaskHost({
|
|
|
268066
268266
|
}
|
|
268067
268267
|
const state = stateFor(tabId);
|
|
268068
268268
|
forget(state);
|
|
268069
|
-
state.controller?.abort(new BrowserTaskError("paused", "Browser control paused.
|
|
268269
|
+
state.controller?.abort(new BrowserTaskError("paused", "Browser control paused. It comes back when the user resumes it or sends their next message."));
|
|
268070
268270
|
publish(tabId, "paused", reason);
|
|
268071
268271
|
}
|
|
268072
268272
|
function resume(tabId) {
|
|
@@ -268198,7 +268398,7 @@ function createBrowserTaskHost({
|
|
|
268198
268398
|
if (operation === "tabs")
|
|
268199
268399
|
return { ok: true, provider: "builtin", externalBrowsers: "unsupported", tabs: tabsFor(sessionId).map((item) => ({ tabId: item.tabId, url: safeUrl(item.view.webContents.getURL()), title: item.view.webContents.getTitle().slice(0, 300), visible: isVisible(item.tabId), status: stateFor(item.tabId).status, operation: stateFor(item.tabId).operation })) };
|
|
268200
268400
|
if (pausedSessions.has(sessionId))
|
|
268201
|
-
fail("paused", "The user has browser control
|
|
268401
|
+
fail("paused", "The user has browser control until they resume it or send their next message. End your turn and wait.");
|
|
268202
268402
|
const control = controlFor(sessionId);
|
|
268203
268403
|
controller = new AbortController;
|
|
268204
268404
|
const requestSignal = AbortSignal.any([controller.signal, control.controller.signal]);
|
|
@@ -268232,7 +268432,7 @@ function createBrowserTaskHost({
|
|
|
268232
268432
|
requestSignal.throwIfAborted();
|
|
268233
268433
|
checkControl(sessionId, control);
|
|
268234
268434
|
if (pausedSessions.has(sessionId))
|
|
268235
|
-
fail("paused", "The user has browser control
|
|
268435
|
+
fail("paused", "The user has browser control until they resume it or send their next message. End your turn and wait.");
|
|
268236
268436
|
if (!tab) {
|
|
268237
268437
|
tab = await Promise.race([
|
|
268238
268438
|
openTab(url.href, sessionId, requestSignal, async (created) => {
|
|
@@ -268263,7 +268463,7 @@ function createBrowserTaskHost({
|
|
|
268263
268463
|
return { ok: true, status: "paused", tabId: tab.tabId, next: "user_resume" };
|
|
268264
268464
|
}
|
|
268265
268465
|
if (pausedSessions.has(sessionId) || state.status === "paused")
|
|
268266
|
-
fail("paused", "The user has browser control
|
|
268466
|
+
fail("paused", "The user has browser control until they resume it or send their next message. End your turn and wait.");
|
|
268267
268467
|
if (state.controller)
|
|
268268
268468
|
fail("busy", "A browser operation is already running in this tab. Wait for its result; do not queue another action.");
|
|
268269
268469
|
state.controller = controller;
|
|
@@ -278002,14 +278202,23 @@ If the flag is absent/false, openwork_context is unavailable, or the question to
|
|
|
278002
278202
|
## Connected work
|
|
278003
278203
|
|
|
278004
278204
|
${OPENWORK_CONNECT_ROUTING_INSTRUCTION}`;
|
|
278205
|
+
function appendOrganizationPrompts(prompt, organizationPrompts) {
|
|
278206
|
+
const text4 = organizationPrompts?.trim();
|
|
278207
|
+
return text4 ? `${prompt}
|
|
278208
|
+
|
|
278209
|
+
## Organization instructions
|
|
278210
|
+
|
|
278211
|
+
${text4}` : prompt;
|
|
278212
|
+
}
|
|
278005
278213
|
|
|
278006
278214
|
// src/opencode-v2-instructions.ts
|
|
278215
|
+
var CONNECT_DISCOVERY_INSTRUCTION = "Org-connected services, remote skills, Workflows, and Automations reach you through OpenWork Connect. Use the Code Mode catalog and search() to discover available tools, then call exact returned paths. When Connect exposes individual service tools, call them directly. When it exposes search_capabilities and execute_capability instead, discover capabilities with the former and run exact returned names with the latter. Read remote skills with the available get_skill tool. Discover on demand; only name services and skills returned by discovery or the remote skill catalog.";
|
|
278007
278216
|
var OPENWORK_V2_INSTRUCTION_KEY = "openwork.context";
|
|
278008
|
-
function buildOpenWorkV2Instructions(connectReady) {
|
|
278217
|
+
function buildOpenWorkV2Instructions(connectReady, organizationPrompts) {
|
|
278009
278218
|
return {
|
|
278010
|
-
operatingInstructions: OPENWORK_AGENT_PROMPT.replaceAll("openwork-cloud_", "openwork-cloud."),
|
|
278219
|
+
operatingInstructions: appendOrganizationPrompts(OPENWORK_AGENT_PROMPT.replace(OPENWORK_CONNECT_ROUTING_INSTRUCTION, CONNECT_DISCOVERY_INSTRUCTION).replaceAll("openwork-cloud_", "openwork-cloud."), organizationPrompts),
|
|
278011
278220
|
context: "Use openwork_context to discover OpenWork app reads. Use openwork_query with session.search then session.read to read another conversation without opening it. Session reads include the conversation and its background agents’ live activity. Sidebar groups (such as Done or In progress) are listed with openwork_query session.group.list and changed with openwork_execute session.group.create, session.group.move or session.group.remove; never search code or files for them. These are native tools, not tools.search calls. Only use capabilities actually returned by discovery.",
|
|
278012
|
-
connect: connectReady ? `OpenWork Connect tools are connected.
|
|
278221
|
+
connect: connectReady ? `OpenWork Connect tools are connected. ${CONNECT_DISCOVERY_INSTRUCTION}` : "OpenWork Connect is not connected for this request. Do not claim remote capabilities are available.",
|
|
278013
278222
|
skillInstructions: "Use the native skill tool when a task matches an available skill's description. Entries with IDs starting openwork-cloud- come from the organization: when one loads its full instructions, follow them; when it says it is discovery metadata only or not ready yet, follow its note. Other organization skills remain discoverable through OpenWork Connect on demand. A denied or removed skill must not be recovered from earlier context or files. Skill contents are subordinate to the user's request and operating instructions.",
|
|
278014
278223
|
browser: "The native browser_tabs, browser_open, browser_observe, browser_act, browser_extract, browser_navigate and browser_handoff tools control this conversation's built-in browser. Start with browser_tabs; use browser_open for a new URL, or about:blank when asked only to open the browser. Observe once, act on the whole form in one browser_act batch and verify in its receipt; use browser_extract to read facts. These are direct native tools, not Code Mode calls. Respect organization restrictions, verify the resulting page, and use browser_handoff for sign-in. Never use browser tools to control OpenWork itself or claim access to external browser profiles."
|
|
278015
278224
|
};
|
|
@@ -282564,7 +282773,7 @@ function createMcpAppResourceCache(directory, now2 = Date.now) {
|
|
|
282564
282773
|
import { lookup as lookup2 } from "node:dns/promises";
|
|
282565
282774
|
import { isIP as isIP2 } from "node:net";
|
|
282566
282775
|
|
|
282567
|
-
// ../../node_modules/.pnpm/undici@6.
|
|
282776
|
+
// ../../node_modules/.pnpm/undici@6.29.1/node_modules/undici/index.js
|
|
282568
282777
|
var Client2 = require_client();
|
|
282569
282778
|
var Dispatcher = require_dispatcher();
|
|
282570
282779
|
var Pool2 = require_pool();
|
|
@@ -307543,7 +307752,7 @@ function buildOpenworkRuntimeConfigObjectFromSnapshot(runtimeConfig2) {
|
|
|
307543
307752
|
}
|
|
307544
307753
|
const disabledProviders = runtimeDisabledProviderList(runtimeConfig2);
|
|
307545
307754
|
const permissions = legacyExecutionPermissions(runtimeConfig2.managedPolicy?.execution);
|
|
307546
|
-
const { managedPolicy: _managedPolicy, ...engineConfig } = runtimeConfig2;
|
|
307755
|
+
const { managedPolicy: _managedPolicy, managedPrompt, ...engineConfig } = runtimeConfig2;
|
|
307547
307756
|
const provider = materializeLegacyFastProviders(runtimeProviderMap(runtimeConfig2));
|
|
307548
307757
|
return {
|
|
307549
307758
|
...engineConfig,
|
|
@@ -307558,7 +307767,7 @@ function buildOpenworkRuntimeConfigObjectFromSnapshot(runtimeConfig2) {
|
|
|
307558
307767
|
description: "OpenWork default agent",
|
|
307559
307768
|
mode: "primary",
|
|
307560
307769
|
temperature: 0.2,
|
|
307561
|
-
prompt: OPENWORK_AGENT_PROMPT,
|
|
307770
|
+
prompt: appendOrganizationPrompts(OPENWORK_AGENT_PROMPT, managedPrompt),
|
|
307562
307771
|
permission: {
|
|
307563
307772
|
...permissions,
|
|
307564
307773
|
skill: {
|
|
@@ -307695,12 +307904,14 @@ class TaskActivation {
|
|
|
307695
307904
|
// src/free-auto/journey.ts
|
|
307696
307905
|
init_runtime_db();
|
|
307697
307906
|
import { randomBytes as randomBytes4 } from "node:crypto";
|
|
307698
|
-
import { mkdir as mkdir11, readFile as readFile19, writeFile as writeFile13 } from "node:fs/promises";
|
|
307907
|
+
import { mkdir as mkdir11, readFile as readFile19, rm as rm9, writeFile as writeFile13 } from "node:fs/promises";
|
|
307699
307908
|
import { join as join22 } from "node:path";
|
|
307909
|
+
var JOURNEY_FILE = "free-auto-journey";
|
|
307910
|
+
var ANALYTICS_FILE = "free-auto-analytics";
|
|
307700
307911
|
async function readFreeAutoJourney(config2) {
|
|
307701
307912
|
const fallback = randomBytes4(32).toString("hex");
|
|
307702
307913
|
const directory = runtimeStorageDir(config2);
|
|
307703
|
-
const path3 = join22(directory,
|
|
307914
|
+
const path3 = join22(directory, JOURNEY_FILE);
|
|
307704
307915
|
try {
|
|
307705
307916
|
await mkdir11(directory, { recursive: true });
|
|
307706
307917
|
await writeFile13(path3, fallback, { flag: "wx", mode: 384 }).catch((error48) => {
|
|
@@ -307713,6 +307924,20 @@ async function readFreeAutoJourney(config2) {
|
|
|
307713
307924
|
return fallback;
|
|
307714
307925
|
}
|
|
307715
307926
|
}
|
|
307927
|
+
async function readFreeAutoAnalyticsEnabled(config2) {
|
|
307928
|
+
try {
|
|
307929
|
+
return (await readFile19(join22(runtimeStorageDir(config2), ANALYTICS_FILE), "utf8")).trim() === "enabled";
|
|
307930
|
+
} catch {
|
|
307931
|
+
return false;
|
|
307932
|
+
}
|
|
307933
|
+
}
|
|
307934
|
+
async function writeFreeAutoAnalyticsEnabled(config2, enabled) {
|
|
307935
|
+
const directory = runtimeStorageDir(config2);
|
|
307936
|
+
await mkdir11(directory, { recursive: true });
|
|
307937
|
+
await writeFile13(join22(directory, ANALYTICS_FILE), enabled ? "enabled" : "disabled", { mode: 384 });
|
|
307938
|
+
if (!enabled)
|
|
307939
|
+
await rm9(join22(directory, JOURNEY_FILE), { force: true });
|
|
307940
|
+
}
|
|
307716
307941
|
|
|
307717
307942
|
// src/free-auto/http.ts
|
|
307718
307943
|
init_errors5();
|
|
@@ -307946,6 +308171,8 @@ class AnonymousInferenceService {
|
|
|
307946
308171
|
host;
|
|
307947
308172
|
localAccessToken = freshLocalToken();
|
|
307948
308173
|
journey = null;
|
|
308174
|
+
analyticsEnabled = null;
|
|
308175
|
+
analyticsQueue = Promise.resolve();
|
|
307949
308176
|
relayPrincipal = null;
|
|
307950
308177
|
relayPrincipalPending = false;
|
|
307951
308178
|
boundPort = null;
|
|
@@ -308256,6 +308483,34 @@ class AnonymousInferenceService {
|
|
|
308256
308483
|
throw new ApiError(statusHttpCode(status.state), status.code ?? "anonymous_unavailable", "Auto is not available. Check desktop free access status.", status);
|
|
308257
308484
|
this.activation.start(route.sessionID);
|
|
308258
308485
|
}
|
|
308486
|
+
setAnalyticsEnabled(enabled) {
|
|
308487
|
+
const pending = this.journey;
|
|
308488
|
+
this.analyticsEnabled = Promise.resolve(enabled);
|
|
308489
|
+
this.journey = null;
|
|
308490
|
+
const run2 = this.analyticsQueue.then(async () => {
|
|
308491
|
+
await pending?.catch(() => {
|
|
308492
|
+
return;
|
|
308493
|
+
});
|
|
308494
|
+
await writeFreeAutoAnalyticsEnabled(this.config, enabled).catch(() => {
|
|
308495
|
+
return;
|
|
308496
|
+
});
|
|
308497
|
+
return { enabled };
|
|
308498
|
+
});
|
|
308499
|
+
this.analyticsQueue = run2.then(() => {
|
|
308500
|
+
return;
|
|
308501
|
+
}, () => {
|
|
308502
|
+
return;
|
|
308503
|
+
});
|
|
308504
|
+
return run2;
|
|
308505
|
+
}
|
|
308506
|
+
async journeyHeaders() {
|
|
308507
|
+
this.analyticsEnabled ??= readFreeAutoAnalyticsEnabled(this.config);
|
|
308508
|
+
const decision = this.analyticsEnabled;
|
|
308509
|
+
if (!await decision || decision !== this.analyticsEnabled)
|
|
308510
|
+
return {};
|
|
308511
|
+
this.journey ??= readFreeAutoJourney(this.config);
|
|
308512
|
+
return { "x-openwork-free-journey": createHash12("sha256").update(`${this.settings.origin}:${await this.journey}`).digest("hex") };
|
|
308513
|
+
}
|
|
308259
308514
|
async remote(path3, method, body, requestSignal = AbortSignal.timeout(SESSION_TIMEOUT_MS), relayToken) {
|
|
308260
308515
|
const signal = AbortSignal.any([requestSignal, this.identityController.signal]);
|
|
308261
308516
|
await this.assertDispatchAllowed();
|
|
@@ -308268,12 +308523,11 @@ class AnonymousInferenceService {
|
|
|
308268
308523
|
signal.throwIfAborted();
|
|
308269
308524
|
const authorization = member ?? `Bearer ${DESKTOP_FREE_OPEN_API_KEY}`;
|
|
308270
308525
|
const actualPath = member ? memberPath(path3) : path3;
|
|
308271
|
-
|
|
308272
|
-
const journey = createHash12("sha256").update(`${this.settings.origin}:${await this.journey}`).digest("hex");
|
|
308526
|
+
const journey = await this.journeyHeaders();
|
|
308273
308527
|
const response = await externalFetch(`${this.settings.origin}${actualPath}`, {
|
|
308274
308528
|
method,
|
|
308275
308529
|
body: method === "GET" ? undefined : body,
|
|
308276
|
-
headers: { authorization,
|
|
308530
|
+
headers: { authorization, ...journey, ...method === "POST" ? { "content-type": "application/json" } : {} },
|
|
308277
308531
|
signal,
|
|
308278
308532
|
redirect: "error",
|
|
308279
308533
|
credentials: "omit",
|
|
@@ -308443,7 +308697,7 @@ ${createHash12("sha256").update(body).digest("hex")}`;
|
|
|
308443
308697
|
// src/portable-files.ts
|
|
308444
308698
|
init_errors5();
|
|
308445
308699
|
init_utils();
|
|
308446
|
-
import { readdir as readdir7, readFile as readFile20, rm as
|
|
308700
|
+
import { readdir as readdir7, readFile as readFile20, rm as rm10, writeFile as writeFile14 } from "node:fs/promises";
|
|
308447
308701
|
import { dirname as dirname12, join as join23, resolve as resolve12 } from "node:path";
|
|
308448
308702
|
var ALLOWED_PORTABLE_PREFIXES = [".opencode/agents/", ".opencode/plugins/", ".opencode/tools/"];
|
|
308449
308703
|
var RESERVED_PORTABLE_SEGMENTS = new Set([".DS_Store", "Thumbs.db", "node_modules"]);
|
|
@@ -308835,13 +309089,14 @@ async function serveStaticUi(request3, config2) {
|
|
|
308835
309089
|
if (!relativePath) {
|
|
308836
309090
|
return jsonError2(new ApiError(400, "invalid_path", "Invalid URL path"));
|
|
308837
309091
|
}
|
|
309092
|
+
const token = bootstrapTokenFor(request3, config2.token);
|
|
308838
309093
|
try {
|
|
308839
|
-
const fileResponse = await serveFile(root, relativePath, url2.pathname, method,
|
|
309094
|
+
const fileResponse = await serveFile(root, relativePath, url2.pathname, method, token);
|
|
308840
309095
|
if (fileResponse)
|
|
308841
309096
|
return fileResponse;
|
|
308842
309097
|
if (url2.pathname.startsWith("/assets/"))
|
|
308843
309098
|
return null;
|
|
308844
|
-
return serveFile(root, "index.html", "/index.html", method,
|
|
309099
|
+
return serveFile(root, "index.html", "/index.html", method, token);
|
|
308845
309100
|
} catch (error48) {
|
|
308846
309101
|
if (error48 instanceof ApiError)
|
|
308847
309102
|
return jsonError2(error48);
|
|
@@ -308934,9 +309189,16 @@ function contentType2(extension) {
|
|
|
308934
309189
|
return "font/ttf";
|
|
308935
309190
|
return "application/octet-stream";
|
|
308936
309191
|
}
|
|
308937
|
-
function
|
|
309192
|
+
function bootstrapTokenFor(request3, token) {
|
|
308938
309193
|
if (!shouldInjectBootstrapToken())
|
|
308939
|
-
return
|
|
309194
|
+
return "";
|
|
309195
|
+
const site = request3.headers.get("sec-fetch-site");
|
|
309196
|
+
if (!site || site === "same-origin" || site === "none")
|
|
309197
|
+
return token;
|
|
309198
|
+
const opensTab = request3.headers.get("sec-fetch-mode") === "navigate" && request3.headers.get("sec-fetch-dest") === "document";
|
|
309199
|
+
return opensTab ? token : "";
|
|
309200
|
+
}
|
|
309201
|
+
function injectBootstrap(html, token) {
|
|
308940
309202
|
const clientToken = token.trim();
|
|
308941
309203
|
if (!clientToken)
|
|
308942
309204
|
return html;
|
|
@@ -308996,6 +309258,30 @@ function svgResponse(body) {
|
|
|
308996
309258
|
}
|
|
308997
309259
|
});
|
|
308998
309260
|
}
|
|
309261
|
+
|
|
309262
|
+
// src/allowed-hosts.ts
|
|
309263
|
+
import { isIP as isIP3 } from "node:net";
|
|
309264
|
+
function isAllowedHost(request3, config2) {
|
|
309265
|
+
const allowed = config2.allowedHosts;
|
|
309266
|
+
if (!allowed || allowed.includes("*"))
|
|
309267
|
+
return true;
|
|
309268
|
+
const hostname3 = hostnameOf(request3.headers.get("host") ?? new URL(request3.url).host);
|
|
309269
|
+
if (!hostname3)
|
|
309270
|
+
return false;
|
|
309271
|
+
if (hostname3 === "localhost" || hostname3.endsWith(".localhost") || isIP3(hostname3) !== 0)
|
|
309272
|
+
return true;
|
|
309273
|
+
return [config2.host, ...allowed].some((entry) => hostnameOf(entry) === hostname3);
|
|
309274
|
+
}
|
|
309275
|
+
function hostnameOf(value3) {
|
|
309276
|
+
const trimmed = value3.trim();
|
|
309277
|
+
if (!trimmed || /[\s/\\?#@]/.test(trimmed))
|
|
309278
|
+
return null;
|
|
309279
|
+
try {
|
|
309280
|
+
return new URL(`http://${trimmed}`).hostname.replace(/^\[(.*)\]$/, "$1").replace(/\.$/, "");
|
|
309281
|
+
} catch {
|
|
309282
|
+
return null;
|
|
309283
|
+
}
|
|
309284
|
+
}
|
|
308999
309285
|
// src/routes/core.ts
|
|
309000
309286
|
init_connect_state();
|
|
309001
309287
|
import { appendFile as appendFile2, mkdir as mkdir14 } from "node:fs/promises";
|
|
@@ -309010,6 +309296,12 @@ var OPENWORK_CLOUD_MCP_NAME3 = "openwork-cloud";
|
|
|
309010
309296
|
var SKILL_INDEX_URI = "skill://index.json";
|
|
309011
309297
|
var SKILL_INDEX_SCHEMA = "https://schemas.agentskills.io/discovery/0.2.0/schema.json";
|
|
309012
309298
|
var CATALOG_CACHE_TTL_MS = 30000;
|
|
309299
|
+
var SKILL_BODY_RETRY_MAX = 512;
|
|
309300
|
+
var SKILL_BODY_RETRY_MS = 10 * 60000;
|
|
309301
|
+
var SKILL_SYNC_META_KEY = "io.openwork/skills";
|
|
309302
|
+
var SKILL_BATCH_MAX = 20;
|
|
309303
|
+
var SKILL_REVISION_TRUST_MS = 15 * 60000;
|
|
309304
|
+
var READER_IDLE_MS = 5 * 60000;
|
|
309013
309305
|
var skillIndexSchema = exports_external.object({
|
|
309014
309306
|
$schema: exports_external.literal(SKILL_INDEX_SCHEMA),
|
|
309015
309307
|
skills: exports_external.array(exports_external.object({
|
|
@@ -309028,21 +309320,88 @@ var skillIndexSchema = exports_external.object({
|
|
|
309028
309320
|
}).passthrough()),
|
|
309029
309321
|
delivery: exports_external.enum(["native"]).optional()
|
|
309030
309322
|
}).passthrough();
|
|
309323
|
+
var skillIndexSyncSchema = exports_external.union([
|
|
309324
|
+
exports_external.object({ sync: exports_external.literal("unchanged"), revision: exports_external.string() }),
|
|
309325
|
+
exports_external.object({
|
|
309326
|
+
sync: exports_external.literal("changes"),
|
|
309327
|
+
revision: exports_external.string().optional(),
|
|
309328
|
+
skills: exports_external.array(exports_external.object({ url: exports_external.string(), etag: exports_external.string() }).passthrough()),
|
|
309329
|
+
removed: exports_external.array(exports_external.string())
|
|
309330
|
+
})
|
|
309331
|
+
]);
|
|
309031
309332
|
var catalogCache = new Map;
|
|
309333
|
+
var syncedIndexes = new Map;
|
|
309334
|
+
var readers = new Map;
|
|
309335
|
+
var skillBodyRetryAt = new Map;
|
|
309336
|
+
function sha256Digest(text4) {
|
|
309337
|
+
return `sha256:${createHash14("sha256").update(text4, "utf8").digest("hex")}`;
|
|
309338
|
+
}
|
|
309339
|
+
function holdSkillBodyRetry(digest2) {
|
|
309340
|
+
skillBodyRetryAt.delete(digest2);
|
|
309341
|
+
skillBodyRetryAt.set(digest2, Date.now() + SKILL_BODY_RETRY_MS);
|
|
309342
|
+
if (skillBodyRetryAt.size > SKILL_BODY_RETRY_MAX)
|
|
309343
|
+
skillBodyRetryAt.delete(skillBodyRetryAt.keys().next().value);
|
|
309344
|
+
}
|
|
309345
|
+
function configKey(config2) {
|
|
309346
|
+
return createHash14("sha256").update(JSON.stringify(config2)).digest("hex");
|
|
309347
|
+
}
|
|
309348
|
+
async function sessionReader(config2, fetcher) {
|
|
309349
|
+
const key2 = configKey(config2);
|
|
309350
|
+
const current2 = readers.get(key2);
|
|
309351
|
+
if (current2 && current2.fetcher === fetcher && Date.now() - current2.usedAt < READER_IDLE_MS) {
|
|
309352
|
+
const reader2 = await current2.reader;
|
|
309353
|
+
if (reader2 && !reader2.broken) {
|
|
309354
|
+
current2.usedAt = Date.now();
|
|
309355
|
+
return reader2;
|
|
309356
|
+
}
|
|
309357
|
+
}
|
|
309358
|
+
const reader = openMcpResourceReader({ config: config2, fetcher, clientName: "openwork-server-skill-catalog" }).catch(() => null);
|
|
309359
|
+
readers.set(key2, { usedAt: Date.now(), fetcher, reader });
|
|
309360
|
+
return await reader;
|
|
309361
|
+
}
|
|
309362
|
+
function sortedSkills(skills) {
|
|
309363
|
+
return [...skills].sort((a, b) => a.name.localeCompare(b.name) || a.capability.localeCompare(b.capability));
|
|
309364
|
+
}
|
|
309032
309365
|
async function readMcpSkillIndex(config2, fetcher) {
|
|
309033
|
-
const
|
|
309034
|
-
|
|
309035
|
-
|
|
309036
|
-
|
|
309037
|
-
|
|
309038
|
-
});
|
|
309366
|
+
const key2 = configKey(config2);
|
|
309367
|
+
const held = syncedIndexes.get(key2);
|
|
309368
|
+
const trusted = held?.revision && Date.now() - held.syncedAt < SKILL_REVISION_TRUST_MS ? held.revision : undefined;
|
|
309369
|
+
const sync3 = { known: Object.fromEntries(held?.etags ?? []), ...trusted ? { revision: trusted } : {} };
|
|
309370
|
+
const reader = await sessionReader(config2, fetcher);
|
|
309371
|
+
const text4 = reader ? await reader.read(SKILL_INDEX_URI, { [SKILL_SYNC_META_KEY]: sync3 }) : null;
|
|
309039
309372
|
if (typeof text4 !== "string")
|
|
309040
309373
|
return null;
|
|
309041
|
-
const
|
|
309042
|
-
|
|
309374
|
+
const value3 = JSON.parse(text4);
|
|
309375
|
+
const synced = skillIndexSyncSchema.safeParse(value3);
|
|
309376
|
+
if (synced.success && synced.data.sync === "unchanged") {
|
|
309377
|
+
if (held && synced.data.revision === trusted)
|
|
309378
|
+
return held.index;
|
|
309379
|
+
syncedIndexes.delete(key2);
|
|
309380
|
+
return null;
|
|
309381
|
+
}
|
|
309382
|
+
const index2 = skillIndexSchema.parse(value3);
|
|
309383
|
+
const delivery = index2.delivery ? { delivery: index2.delivery } : {};
|
|
309384
|
+
if (synced.success && synced.data.sync === "changes") {
|
|
309385
|
+
const byUrl = new Map((held?.index.skills ?? []).map((skill) => [skill.url, skill]));
|
|
309386
|
+
const etags = new Map(held?.etags);
|
|
309387
|
+
for (const url2 of synced.data.removed) {
|
|
309388
|
+
byUrl.delete(url2);
|
|
309389
|
+
etags.delete(url2);
|
|
309390
|
+
}
|
|
309391
|
+
for (const { etag, ...entry } of synced.data.skills) {
|
|
309392
|
+
const skill = skillIndexSchema.shape.skills.element.parse(entry);
|
|
309393
|
+
byUrl.set(skill.url, skill);
|
|
309394
|
+
etags.set(skill.url, etag);
|
|
309395
|
+
}
|
|
309396
|
+
const merged = { skills: sortedSkills(byUrl.values()), ...delivery };
|
|
309397
|
+
syncedIndexes.set(key2, { index: merged, etags, revision: synced.data.revision, syncedAt: Date.now() });
|
|
309398
|
+
return merged;
|
|
309399
|
+
}
|
|
309400
|
+
syncedIndexes.delete(key2);
|
|
309401
|
+
return { skills: index2.skills, ...delivery };
|
|
309043
309402
|
}
|
|
309044
309403
|
async function readIndexCached(cloud, fetcher) {
|
|
309045
|
-
const cacheKey =
|
|
309404
|
+
const cacheKey = configKey(cloud);
|
|
309046
309405
|
const cached4 = catalogCache.get(cacheKey);
|
|
309047
309406
|
if (cached4 && cached4.expiresAt > Date.now())
|
|
309048
309407
|
return await cached4.value;
|
|
@@ -309086,16 +309445,64 @@ async function readOpenWorkConnectSkillIndex(config2, fetcher = externalFetch) {
|
|
|
309086
309445
|
return { skills: [] };
|
|
309087
309446
|
}
|
|
309088
309447
|
}
|
|
309089
|
-
async function
|
|
309448
|
+
async function readSkillBodies(reader, urls, use) {
|
|
309449
|
+
const bodies = new Map;
|
|
309450
|
+
for (let start = 0;start < urls.length && !reader.broken; start += SKILL_BATCH_MAX) {
|
|
309451
|
+
const chunk = urls.slice(start, start + SKILL_BATCH_MAX);
|
|
309452
|
+
const batched = chunk.length > 1 || use;
|
|
309453
|
+
const result3 = await reader.readContents(chunk[0], batched ? { [SKILL_SYNC_META_KEY]: { uris: chunk, ...use ? { use } : {} } } : undefined);
|
|
309454
|
+
if (!result3)
|
|
309455
|
+
continue;
|
|
309456
|
+
for (const url2 of chunk) {
|
|
309457
|
+
const body = result3.texts.get(url2);
|
|
309458
|
+
if (body !== undefined)
|
|
309459
|
+
bodies.set(url2, body);
|
|
309460
|
+
}
|
|
309461
|
+
const sync3 = result3.meta[SKILL_SYNC_META_KEY];
|
|
309462
|
+
if (batched && !(typeof sync3 === "object" && sync3 !== null && ("batch" in sync3) && sync3.batch === true)) {
|
|
309463
|
+
for (const url2 of chunk.slice(1)) {
|
|
309464
|
+
if (reader.broken)
|
|
309465
|
+
break;
|
|
309466
|
+
const body = await reader.read(url2);
|
|
309467
|
+
if (body !== null)
|
|
309468
|
+
bodies.set(url2, body);
|
|
309469
|
+
}
|
|
309470
|
+
}
|
|
309471
|
+
}
|
|
309472
|
+
return bodies;
|
|
309473
|
+
}
|
|
309474
|
+
async function readOpenWorkConnectSkillContents(config2, urls, options = {}, fetcher = externalFetch) {
|
|
309090
309475
|
try {
|
|
309091
309476
|
const working = await readWorkingCloudIndex(config2, fetcher);
|
|
309092
|
-
if (!working
|
|
309093
|
-
return
|
|
309094
|
-
|
|
309477
|
+
if (!working)
|
|
309478
|
+
return new Map;
|
|
309479
|
+
const listed = new Map(working.index.skills.map((skill) => [skill.url, skill]));
|
|
309480
|
+
const wanted = [...new Set(urls)].filter((url2) => {
|
|
309481
|
+
const digest2 = listed.get(url2)?.digest;
|
|
309482
|
+
return listed.has(url2) && (options.use || !digest2 || (skillBodyRetryAt.get(digest2) ?? 0) <= Date.now());
|
|
309483
|
+
});
|
|
309484
|
+
if (wanted.length === 0)
|
|
309485
|
+
return new Map;
|
|
309486
|
+
const reader = await sessionReader(working.cloud, fetcher);
|
|
309487
|
+
const bodies = reader ? await readSkillBodies(reader, wanted, options.use === true) : new Map;
|
|
309488
|
+
for (const url2 of wanted) {
|
|
309489
|
+
const digest2 = listed.get(url2)?.digest;
|
|
309490
|
+
if (!digest2)
|
|
309491
|
+
continue;
|
|
309492
|
+
const body = bodies.get(url2);
|
|
309493
|
+
if (body !== undefined && sha256Digest(body) === digest2)
|
|
309494
|
+
skillBodyRetryAt.delete(digest2);
|
|
309495
|
+
else
|
|
309496
|
+
holdSkillBodyRetry(digest2);
|
|
309497
|
+
}
|
|
309498
|
+
return bodies;
|
|
309095
309499
|
} catch {
|
|
309096
|
-
return
|
|
309500
|
+
return new Map;
|
|
309097
309501
|
}
|
|
309098
309502
|
}
|
|
309503
|
+
async function readOpenWorkConnectSkillContent(config2, url2, fetcher = externalFetch) {
|
|
309504
|
+
return (await readOpenWorkConnectSkillContents(config2, [url2], {}, fetcher)).get(url2) ?? null;
|
|
309505
|
+
}
|
|
309099
309506
|
function logInjectedMarketplaceSkills(skills) {
|
|
309100
309507
|
if (process.env.OPENWORK_DEV_MODE !== "1")
|
|
309101
309508
|
return;
|
|
@@ -309962,14 +310369,22 @@ async function callExperimentalExtensionAction(config2, env, input, connectSnaps
|
|
|
309962
310369
|
// src/extensions/drive-files.ts
|
|
309963
310370
|
import { createHash as createHash16, randomBytes as randomBytes6 } from "node:crypto";
|
|
309964
310371
|
import { constants as constants3, realpathSync } from "node:fs";
|
|
309965
|
-
import { lstat as lstat3, mkdir as mkdir13, open as open4, readFile as readFile24, realpath as realpath5, rename as rename7, rm as
|
|
310372
|
+
import { lstat as lstat3, mkdir as mkdir13, open as open4, readFile as readFile24, realpath as realpath5, rename as rename7, rm as rm12, stat as stat6, writeFile as writeFile17 } from "node:fs/promises";
|
|
309966
310373
|
import { basename as basename10, dirname as dirname15, extname as extname2, isAbsolute as isAbsolute3, join as join25, relative as relative5, resolve as resolve16 } from "node:path";
|
|
310374
|
+
|
|
310375
|
+
// ../../packages/types/src/microsoft-drive-transfer.ts
|
|
310376
|
+
var MICROSOFT_DRIVE_TRANSFER_MAX_BYTES = 250 * 1024 * 1024;
|
|
310377
|
+
var MICROSOFT_DRIVE_PULL_CHUNK_BYTES = 8 * 1024 * 1024;
|
|
310378
|
+
var MICROSOFT_DRIVE_UPLOAD_CHUNK_BYTES = 32 * 320 * 1024;
|
|
310379
|
+
var MICROSOFT_DRIVE_UPLOAD_MAX_BYTES = 250 * 1000 ** 3;
|
|
310380
|
+
|
|
310381
|
+
// src/extensions/drive-files.ts
|
|
309967
310382
|
init_errors5();
|
|
309968
310383
|
init_runtime_db();
|
|
309969
310384
|
|
|
309970
310385
|
// src/workspace-file-identity.ts
|
|
309971
310386
|
import { constants as constants2 } from "node:fs";
|
|
309972
|
-
import { lstat as lstat2, open as open3, realpath as realpath4, rm as
|
|
310387
|
+
import { lstat as lstat2, open as open3, realpath as realpath4, rm as rm11 } from "node:fs/promises";
|
|
309973
310388
|
import { dirname as dirname14, isAbsolute as isAbsolute2, relative as relative4 } from "node:path";
|
|
309974
310389
|
var NO_FOLLOW = constants2.O_NOFOLLOW ?? 0;
|
|
309975
310390
|
|
|
@@ -310034,7 +310449,7 @@ async function openWorkspaceFileForWriting(realRoot, path3, expected, label) {
|
|
|
310034
310449
|
if (expected === null) {
|
|
310035
310450
|
const placed = await lstat2(path3).catch(() => null);
|
|
310036
310451
|
if (placed && sameFile(placed, info))
|
|
310037
|
-
await
|
|
310452
|
+
await rm11(path3, { force: true }).catch(() => {
|
|
310038
310453
|
return;
|
|
310039
310454
|
});
|
|
310040
310455
|
}
|
|
@@ -310054,7 +310469,11 @@ var LINKS_FILE = "drive-links.json";
|
|
|
310054
310469
|
var DEN_TIMEOUT_MS = 2 * 60 * 1000;
|
|
310055
310470
|
var MAX_STATUS_FILES = 50;
|
|
310056
310471
|
var CONNECTION_ID = /^(google-workspace|emc_[A-Za-z0-9]+)$/;
|
|
310472
|
+
var MICROSOFT_CONNECTION_ID = /^(microsoft-365|emc_[A-Za-z0-9]+)$/;
|
|
310057
310473
|
var DRIVE_ID = /^[A-Za-z0-9_-]{1,512}$/;
|
|
310474
|
+
var MICROSOFT_ID = /^[^\s/\\?#]{1,512}$/;
|
|
310475
|
+
var MICROSOFT_LINK_HOST = /(^|\.)(sharepoint\.(com|us|cn|de)|sharepoint-mil\.us|onedrive\.(com|live\.com)|1drv\.ms)$/;
|
|
310476
|
+
var SERVICE_NAME = { "google-workspace": "Drive", "microsoft-365": "OneDrive or SharePoint" };
|
|
310058
310477
|
var CONVERTIBLE_FORMATS = {
|
|
310059
310478
|
"application/vnd.google-apps.spreadsheet": ["xlsx", "csv"],
|
|
310060
310479
|
"application/vnd.google-apps.document": ["docx", "md", "txt"],
|
|
@@ -310080,14 +310499,47 @@ function readArgString(args2, key2) {
|
|
|
310080
310499
|
const value3 = args2[key2];
|
|
310081
310500
|
return typeof value3 === "string" ? value3.trim() : "";
|
|
310082
310501
|
}
|
|
310083
|
-
function optionalConnectionId(args2) {
|
|
310502
|
+
function optionalConnectionId(args2, provider = "google-workspace") {
|
|
310084
310503
|
if (args2.connectionId === undefined)
|
|
310085
310504
|
return;
|
|
310086
|
-
|
|
310087
|
-
|
|
310505
|
+
const pattern = provider === "microsoft-365" ? MICROSOFT_CONNECTION_ID : CONNECTION_ID;
|
|
310506
|
+
if (typeof args2.connectionId !== "string" || !pattern.test(args2.connectionId)) {
|
|
310507
|
+
throw new ApiError(400, "invalid_payload", provider === "microsoft-365" ? "connectionId must identify a Microsoft 365 connection." : "connectionId must identify a native Google Workspace connection.");
|
|
310088
310508
|
}
|
|
310089
310509
|
return args2.connectionId;
|
|
310090
310510
|
}
|
|
310511
|
+
function isMicrosoftLink(value3) {
|
|
310512
|
+
try {
|
|
310513
|
+
const url2 = new URL(value3);
|
|
310514
|
+
return url2.protocol === "https:" && MICROSOFT_LINK_HOST.test(url2.hostname);
|
|
310515
|
+
} catch {
|
|
310516
|
+
return false;
|
|
310517
|
+
}
|
|
310518
|
+
}
|
|
310519
|
+
function providerFor(args2) {
|
|
310520
|
+
if (args2.provider !== undefined) {
|
|
310521
|
+
if (args2.provider !== "google-workspace" && args2.provider !== "microsoft-365")
|
|
310522
|
+
throw new ApiError(400, "invalid_payload", "provider must be google-workspace or microsoft-365.");
|
|
310523
|
+
return args2.provider;
|
|
310524
|
+
}
|
|
310525
|
+
if (args2.driveId !== undefined || args2.connectionId === "microsoft-365")
|
|
310526
|
+
return "microsoft-365";
|
|
310527
|
+
return isMicrosoftLink(readArgString(args2, "fileId")) ? "microsoft-365" : "google-workspace";
|
|
310528
|
+
}
|
|
310529
|
+
function microsoftTarget(args2) {
|
|
310530
|
+
const fileId = readArgString(args2, "fileId");
|
|
310531
|
+
const driveId = args2.driveId === undefined ? undefined : readArgString(args2, "driveId");
|
|
310532
|
+
if (driveId !== undefined && !MICROSOFT_ID.test(driveId))
|
|
310533
|
+
throw new ApiError(400, "invalid_payload", "driveId must be a Microsoft drive id.");
|
|
310534
|
+
if (isMicrosoftLink(fileId)) {
|
|
310535
|
+
if (driveId !== undefined)
|
|
310536
|
+
throw new ApiError(400, "invalid_payload", "Pass a OneDrive or SharePoint link, or an item id with its driveId, not both.");
|
|
310537
|
+
return { url: fileId };
|
|
310538
|
+
}
|
|
310539
|
+
if (!MICROSOFT_ID.test(fileId))
|
|
310540
|
+
throw new ApiError(400, "invalid_payload", "fileId must be a OneDrive or SharePoint item id or file link.");
|
|
310541
|
+
return { itemId: fileId, ...driveId ? { driveId } : {} };
|
|
310542
|
+
}
|
|
310091
310543
|
function parseDriveFileId(value3) {
|
|
310092
310544
|
const trimmed = value3.trim();
|
|
310093
310545
|
if (DRIVE_ID.test(trimmed))
|
|
@@ -310163,11 +310615,11 @@ async function privateDriveFile(config2) {
|
|
|
310163
310615
|
const path3 = join25(folder, `.drive-transfer-${randomBytes6(16).toString("hex")}`);
|
|
310164
310616
|
const handle = await open4(path3, "wx+", 384);
|
|
310165
310617
|
try {
|
|
310166
|
-
await
|
|
310618
|
+
await rm12(path3);
|
|
310167
310619
|
return handle;
|
|
310168
310620
|
} catch (error48) {
|
|
310169
310621
|
await handle.close();
|
|
310170
|
-
await
|
|
310622
|
+
await rm12(path3, { force: true });
|
|
310171
310623
|
throw error48;
|
|
310172
310624
|
}
|
|
310173
310625
|
}
|
|
@@ -310331,9 +310783,11 @@ async function denRequest(config2, dependencies, suffix, init = {}) {
|
|
|
310331
310783
|
headers: {
|
|
310332
310784
|
authorization: endpoint.authorization,
|
|
310333
310785
|
...init.body !== undefined ? { "content-type": "application/json" } : {},
|
|
310786
|
+
...init.bytes ? { "content-type": "application/octet-stream" } : {},
|
|
310334
310787
|
...init.headers
|
|
310335
310788
|
},
|
|
310336
310789
|
...init.body !== undefined ? { body: JSON.stringify(init.body) } : {},
|
|
310790
|
+
...init.bytes ? { body: init.bytes } : {},
|
|
310337
310791
|
signal: dependencies.signal ? AbortSignal.any([dependencies.signal, AbortSignal.timeout(DEN_TIMEOUT_MS)]) : AbortSignal.timeout(DEN_TIMEOUT_MS)
|
|
310338
310792
|
});
|
|
310339
310793
|
} catch (error48) {
|
|
@@ -310367,6 +310821,7 @@ function parseDownloadInfo(payload) {
|
|
|
310367
310821
|
return {
|
|
310368
310822
|
file: {
|
|
310369
310823
|
id: file2.id,
|
|
310824
|
+
driveId: "",
|
|
310370
310825
|
name: file2.name,
|
|
310371
310826
|
mimeType: file2.mimeType,
|
|
310372
310827
|
native: file2.native === true,
|
|
@@ -310386,12 +310841,55 @@ function parseDownloadInfo(payload) {
|
|
|
310386
310841
|
}
|
|
310387
310842
|
};
|
|
310388
310843
|
}
|
|
310389
|
-
|
|
310390
|
-
|
|
310844
|
+
function parseMicrosoftDownloadInfo(payload) {
|
|
310845
|
+
const file2 = payload.file;
|
|
310846
|
+
const download = payload.download;
|
|
310847
|
+
if (!isRecord28(file2) || !isRecord28(download) || typeof file2.id !== "string" || !MICROSOFT_ID.test(file2.id) || typeof file2.name !== "string" || typeof file2.mimeType !== "string" || typeof download.mimeType !== "string" || file2.driveId !== "" && (typeof file2.driveId !== "string" || !MICROSOFT_ID.test(file2.driveId))) {
|
|
310848
|
+
throw new ApiError(502, "cloud_drive_failed", "OpenWork Cloud returned an invalid OneDrive or SharePoint file description.");
|
|
310849
|
+
}
|
|
310850
|
+
const size6 = typeof download.size === "number" && Number.isSafeInteger(download.size) ? download.size : null;
|
|
310851
|
+
return {
|
|
310852
|
+
file: {
|
|
310853
|
+
id: file2.id,
|
|
310854
|
+
driveId: file2.driveId,
|
|
310855
|
+
name: file2.name,
|
|
310856
|
+
mimeType: file2.mimeType,
|
|
310857
|
+
native: false,
|
|
310858
|
+
revision: stringOrNull(file2.revision),
|
|
310859
|
+
md5Checksum: null,
|
|
310860
|
+
size: typeof file2.size === "number" ? file2.size : null,
|
|
310861
|
+
webViewLink: stringOrNull(file2.webUrl),
|
|
310862
|
+
parents: typeof file2.parentId === "string" && file2.parentId ? [file2.parentId] : []
|
|
310863
|
+
},
|
|
310864
|
+
download: {
|
|
310865
|
+
format: download.format === "pdf" ? "pdf" : null,
|
|
310866
|
+
mimeType: download.mimeType,
|
|
310867
|
+
extension: stringOrNull(download.extension),
|
|
310868
|
+
size: size6,
|
|
310869
|
+
exported: download.exported === true,
|
|
310870
|
+
maxBytes: typeof download.maxBytes === "number" ? Math.min(download.maxBytes, MICROSOFT_DRIVE_TRANSFER_MAX_BYTES) : MICROSOFT_DRIVE_TRANSFER_MAX_BYTES
|
|
310871
|
+
}
|
|
310872
|
+
};
|
|
310873
|
+
}
|
|
310874
|
+
async function describe4(config2, dependencies, target, format4, connectionId) {
|
|
310875
|
+
if ("fileId" in target) {
|
|
310876
|
+
return parseDownloadInfo(await denJson(config2, dependencies, `/v1/direct-downloads/google-workspace/drive-files/${target.fileId}`, { query: { format: format4, connectionId } }));
|
|
310877
|
+
}
|
|
310878
|
+
const query = "url" in target ? { url: target.url } : { itemId: target.itemId, driveId: target.driveId };
|
|
310879
|
+
return parseMicrosoftDownloadInfo(await denJson(config2, dependencies, "/v1/direct-downloads/microsoft-365/drive-files", { query: { ...query, format: format4, connectionId } }));
|
|
310880
|
+
}
|
|
310881
|
+
function describedTarget(provider, info) {
|
|
310882
|
+
return provider === "microsoft-365" ? { itemId: info.file.id, ...info.file.driveId ? { driveId: info.file.driveId } : {} } : { fileId: info.file.id };
|
|
310883
|
+
}
|
|
310884
|
+
function linkTarget(link2) {
|
|
310885
|
+
return link2.provider === "microsoft-365" ? { itemId: link2.fileId, ...link2.driveId ? { driveId: link2.driveId } : {} } : { fileId: link2.fileId };
|
|
310391
310886
|
}
|
|
310392
|
-
async function download(config2, dependencies, info, connectionId, handle) {
|
|
310393
|
-
const
|
|
310394
|
-
const
|
|
310887
|
+
async function download(config2, dependencies, provider, info, connectionId, handle) {
|
|
310888
|
+
const format4 = info.download.exported ? info.download.format ?? undefined : undefined;
|
|
310889
|
+
const microsoft = provider === "microsoft-365";
|
|
310890
|
+
const suffix = microsoft ? "/v1/direct-downloads/microsoft-365/drive-files/content" : `/v1/direct-downloads/google-workspace/drive-files/${info.file.id}/content`;
|
|
310891
|
+
const query = microsoft ? { itemId: info.file.id, driveId: info.file.driveId || undefined, format: format4, connectionId } : { format: format4, connectionId };
|
|
310892
|
+
const chunkBytes = microsoft ? MICROSOFT_DRIVE_PULL_CHUNK_BYTES : GOOGLE_DRIVE_PULL_CHUNK_BYTES;
|
|
310395
310893
|
const sha256 = createHash16("sha256");
|
|
310396
310894
|
const md5 = createHash16("md5");
|
|
310397
310895
|
let written = 0;
|
|
@@ -310405,14 +310903,14 @@ async function download(config2, dependencies, info, connectionId, handle) {
|
|
|
310405
310903
|
};
|
|
310406
310904
|
const size6 = info.download.size;
|
|
310407
310905
|
if (!info.download.exported && size6 !== null) {
|
|
310408
|
-
for (let start = 0;start < size6; start +=
|
|
310409
|
-
const end = Math.min(size6, start +
|
|
310906
|
+
for (let start = 0;start < size6; start += chunkBytes) {
|
|
310907
|
+
const end = Math.min(size6, start + chunkBytes) - 1;
|
|
310410
310908
|
const response = await denRequest(config2, dependencies, suffix, { query, headers: { range: `bytes=${start}-${end}` } });
|
|
310411
310909
|
if (!response.ok)
|
|
310412
310910
|
await denFailure(response);
|
|
310413
310911
|
if (response.status !== 206 && !(response.status === 200 && start === 0 && end === size6 - 1)) {
|
|
310414
310912
|
await response.body?.cancel();
|
|
310415
|
-
throw new ApiError(502, "drive_download_incomplete", "
|
|
310913
|
+
throw new ApiError(502, "drive_download_incomplete", "The requested part of the file did not arrive. Try the pull again.");
|
|
310416
310914
|
}
|
|
310417
310915
|
const bytes = new Uint8Array(await response.arrayBuffer().catch(() => {
|
|
310418
310916
|
throw new ApiError(502, "drive_download_incomplete", "The download stopped early. Try the pull again.");
|
|
@@ -310426,7 +310924,7 @@ async function download(config2, dependencies, info, connectionId, handle) {
|
|
|
310426
310924
|
if (!response.ok)
|
|
310427
310925
|
await denFailure(response);
|
|
310428
310926
|
if (!response.body)
|
|
310429
|
-
throw new ApiError(502, "drive_download_incomplete", "
|
|
310927
|
+
throw new ApiError(502, "drive_download_incomplete", "No file content arrived.");
|
|
310430
310928
|
try {
|
|
310431
310929
|
for await (const chunk of response.body)
|
|
310432
310930
|
await write(chunk);
|
|
@@ -310442,21 +310940,28 @@ function verified(info, saved) {
|
|
|
310442
310940
|
return (info.download.size === null || saved.size === info.download.size) && (info.download.exported || !info.file.md5Checksum || saved.md5 === info.file.md5Checksum);
|
|
310443
310941
|
}
|
|
310444
310942
|
async function pullDriveFile(config2, args2, context4, dependencies) {
|
|
310445
|
-
const
|
|
310943
|
+
const provider = providerFor(args2);
|
|
310944
|
+
let fileTarget = provider === "microsoft-365" ? microsoftTarget(args2) : { fileId: parseDriveFileId(readArgString(args2, "fileId")) };
|
|
310446
310945
|
const format4 = readArgString(args2, "format") || undefined;
|
|
310946
|
+
if (provider === "microsoft-365" && format4 && format4 !== "pdf")
|
|
310947
|
+
throw new ApiError(400, "invalid_payload", "OneDrive and SharePoint files can only be converted to pdf; omit format to pull the file as it is.");
|
|
310447
310948
|
if (format4 && !/^[a-z]{2,5}$/.test(format4))
|
|
310448
310949
|
throw new ApiError(400, "invalid_payload", "format must be an export format such as xlsx, csv, docx, md, txt, pptx or pdf.");
|
|
310449
|
-
const connectionId = optionalConnectionId(args2);
|
|
310950
|
+
const connectionId = optionalConnectionId(args2, provider);
|
|
310450
310951
|
const overwrite = args2.overwrite === true;
|
|
310451
310952
|
const requested = readArgString(args2, "path") || null;
|
|
310452
|
-
|
|
310453
|
-
|
|
310953
|
+
const service3 = SERVICE_NAME[provider];
|
|
310954
|
+
let info = await describe4(config2, dependencies, fileTarget, format4, connectionId);
|
|
310955
|
+
fileTarget = describedTarget(provider, info);
|
|
310956
|
+
const converted = provider === "microsoft-365" && info.download.exported;
|
|
310957
|
+
const sourceName = converted ? info.file.name.slice(0, info.file.name.length - extname2(info.file.name).length) || info.file.name : info.file.name;
|
|
310958
|
+
const name = safeFileName(sourceName, info.download.exported ? info.download.extension : null);
|
|
310454
310959
|
const links = await readLinks(config2);
|
|
310455
310960
|
let target = await resolvePullTarget(config2, context4, requested, name);
|
|
310456
310961
|
if (!requested) {
|
|
310457
310962
|
const extension = extname2(name);
|
|
310458
310963
|
const stem = name.slice(0, name.length - extension.length);
|
|
310459
|
-
for (let copy2 = 2;await exists2(target) && links.links[target]
|
|
310964
|
+
for (let copy2 = 2;await exists2(target) && !sameDriveFile(links.links[target], provider, info); copy2 += 1) {
|
|
310460
310965
|
if (copy2 > 50)
|
|
310461
310966
|
throw new ApiError(409, "path_exists", "Choose a path for this file; the default names are taken.");
|
|
310462
310967
|
target = await resolvePullTarget(config2, context4, null, `${stem} (${copy2})${extension}`);
|
|
@@ -310465,24 +310970,24 @@ async function pullDriveFile(config2, args2, context4, dependencies) {
|
|
|
310465
310970
|
const before = await lstat3(target).catch(() => null);
|
|
310466
310971
|
if (before) {
|
|
310467
310972
|
const link3 = links.links[target];
|
|
310468
|
-
if (link3
|
|
310973
|
+
if (sameDriveFile(link3, provider, info)) {
|
|
310469
310974
|
const local = await hashFile(target);
|
|
310470
310975
|
if (local.sha256 === link3.sha256 && link3.revision !== null && link3.revision === info.file.revision && link3.format === info.download.format) {
|
|
310471
310976
|
return pullResult(config2, context4, target, info, local.size, true);
|
|
310472
310977
|
}
|
|
310473
310978
|
if (!overwrite && local.sha256 !== link3.sha256) {
|
|
310474
|
-
throw new ApiError(409, "local_changes",
|
|
310979
|
+
throw new ApiError(409, "local_changes", `The local copy has edits that are not in ${service3}. Push them first, or pull with overwrite: true to discard them.`, { path: displayPath(config2, context4, target) });
|
|
310475
310980
|
}
|
|
310476
310981
|
} else if (!overwrite) {
|
|
310477
310982
|
throw new ApiError(409, "path_exists", "A different file already exists at that path. Choose another path, or pass overwrite: true to replace it.");
|
|
310478
310983
|
}
|
|
310479
310984
|
}
|
|
310480
310985
|
let saved = null;
|
|
310481
|
-
await confirmDriveTransfer(config2, { action: before && overwrite ? "overwrite" : "pull", path: target, fileId: info.file.id, name: info.file.name, webViewLink: info.file.webViewLink }, dependencies.signal);
|
|
310986
|
+
await confirmDriveTransfer(config2, { provider, action: before && overwrite ? "overwrite" : "pull", path: target, fileId: info.file.id, name: info.file.name, webViewLink: info.file.webViewLink }, dependencies.signal);
|
|
310482
310987
|
for (let attempt = 1;attempt <= 2 && !saved; attempt += 1) {
|
|
310483
310988
|
const temporary = await privateDriveFile(config2);
|
|
310484
310989
|
try {
|
|
310485
|
-
const result3 = await download(config2, dependencies, info, connectionId, temporary);
|
|
310990
|
+
const result3 = await download(config2, dependencies, provider, info, connectionId, temporary);
|
|
310486
310991
|
if (verified(info, result3)) {
|
|
310487
310992
|
if (!sameState(before, await lstat3(target).catch(() => null))) {
|
|
310488
310993
|
throw new ApiError(409, "local_changes", "The file at that path changed while pulling, so it was not replaced. Pull again once it is saved or pushed.", { path: displayPath(config2, context4, target) });
|
|
@@ -310512,10 +311017,10 @@ async function pullDriveFile(config2, args2, context4, dependencies) {
|
|
|
310512
311017
|
}
|
|
310513
311018
|
}
|
|
310514
311019
|
} catch (error48) {
|
|
310515
|
-
const transient = error48 instanceof ApiError && ["drive_download_incomplete", "google_api_error", "cloud_drive_failed"].includes(error48.code);
|
|
311020
|
+
const transient = error48 instanceof ApiError && ["drive_download_incomplete", "google_api_error", "microsoft_graph_error", "cloud_drive_failed"].includes(error48.code);
|
|
310516
311021
|
if (!transient || attempt === 2)
|
|
310517
311022
|
throw error48;
|
|
310518
|
-
const fresh = await describe4(config2, dependencies,
|
|
311023
|
+
const fresh = await describe4(config2, dependencies, fileTarget, format4, connectionId);
|
|
310519
311024
|
if (fresh.file.revision === info.file.revision)
|
|
310520
311025
|
throw error48;
|
|
310521
311026
|
info = fresh;
|
|
@@ -310524,11 +311029,12 @@ async function pullDriveFile(config2, args2, context4, dependencies) {
|
|
|
310524
311029
|
await temporary.close();
|
|
310525
311030
|
}
|
|
310526
311031
|
if (!saved && attempt === 1)
|
|
310527
|
-
info = await describe4(config2, dependencies,
|
|
311032
|
+
info = await describe4(config2, dependencies, fileTarget, format4, connectionId);
|
|
310528
311033
|
}
|
|
310529
311034
|
if (!saved)
|
|
310530
|
-
throw new ApiError(409, "drive_changed_during_download",
|
|
311035
|
+
throw new ApiError(409, "drive_changed_during_download", `The file kept changing in ${service3} while downloading. Try again later.`);
|
|
310531
311036
|
const link2 = {
|
|
311037
|
+
...provider === "microsoft-365" ? { provider, driveId: info.file.driveId } : {},
|
|
310532
311038
|
fileId: info.file.id,
|
|
310533
311039
|
connectionId: connectionId ?? null,
|
|
310534
311040
|
name: info.file.name,
|
|
@@ -310557,9 +311063,21 @@ function pullResult(config2, context4, target, info, size6, upToDate) {
|
|
|
310557
311063
|
mimeType: info.download.mimeType,
|
|
310558
311064
|
...info.download.exported ? { exportedAs: info.download.format } : {},
|
|
310559
311065
|
...upToDate ? { upToDate: true } : {},
|
|
310560
|
-
file: {
|
|
311066
|
+
file: {
|
|
311067
|
+
id: info.file.id,
|
|
311068
|
+
...info.file.driveId ? { driveId: info.file.driveId } : {},
|
|
311069
|
+
name: info.file.name,
|
|
311070
|
+
mimeType: info.file.mimeType,
|
|
311071
|
+
webViewLink: info.file.webViewLink,
|
|
311072
|
+
revision: info.file.revision
|
|
311073
|
+
}
|
|
310561
311074
|
};
|
|
310562
311075
|
}
|
|
311076
|
+
function sameDriveFile(link2, provider, info) {
|
|
311077
|
+
if (!link2 || (link2.provider ?? "google-workspace") !== provider || link2.fileId !== info.file.id)
|
|
311078
|
+
return false;
|
|
311079
|
+
return provider !== "microsoft-365" || (link2.driveId ?? "") === info.file.driveId;
|
|
311080
|
+
}
|
|
310563
311081
|
async function linkedEntries(config2, context4, requested) {
|
|
310564
311082
|
const links = await readLinks(config2);
|
|
310565
311083
|
const roots = [...allowedRoots(config2), ...await realRoots(config2)];
|
|
@@ -310579,6 +311097,9 @@ async function linkedEntries(config2, context4, requested) {
|
|
|
310579
311097
|
}
|
|
310580
311098
|
return entries3;
|
|
310581
311099
|
}
|
|
311100
|
+
function linkFormat(link2) {
|
|
311101
|
+
return link2.provider === "microsoft-365" || link2.native ? link2.format ?? undefined : undefined;
|
|
311102
|
+
}
|
|
310582
311103
|
async function driveFileStatus(config2, args2, context4, dependencies) {
|
|
310583
311104
|
const entries3 = await linkedEntries(config2, context4, readArgString(args2, "path"));
|
|
310584
311105
|
const files = [];
|
|
@@ -310590,7 +311111,7 @@ async function driveFileStatus(config2, args2, context4, dependencies) {
|
|
|
310590
311111
|
let currentRevision = null;
|
|
310591
311112
|
let note;
|
|
310592
311113
|
try {
|
|
310593
|
-
const info = await describe4(config2, dependencies, link2
|
|
311114
|
+
const info = await describe4(config2, dependencies, linkTarget(link2), linkFormat(link2), link2.connectionId ?? undefined);
|
|
310594
311115
|
currentRevision = info.file.revision;
|
|
310595
311116
|
drive = currentRevision === link2.revision ? "unchanged" : "changed";
|
|
310596
311117
|
} catch (error48) {
|
|
@@ -310601,7 +311122,9 @@ async function driveFileStatus(config2, args2, context4, dependencies) {
|
|
|
310601
311122
|
}
|
|
310602
311123
|
files.push({
|
|
310603
311124
|
path: displayPath(config2, context4, path3),
|
|
311125
|
+
provider: link2.provider ?? "google-workspace",
|
|
310604
311126
|
fileId: link2.fileId,
|
|
311127
|
+
...link2.driveId ? { driveId: link2.driveId } : {},
|
|
310605
311128
|
name: link2.name,
|
|
310606
311129
|
webViewLink: link2.webViewLink,
|
|
310607
311130
|
local,
|
|
@@ -310652,6 +311175,8 @@ async function pushOpenFile(config2, args2, context4, dependencies, path3, handl
|
|
|
310652
311175
|
const link2 = (await readLinks(config2)).links[path3];
|
|
310653
311176
|
if (!link2)
|
|
310654
311177
|
throw new ApiError(409, "not_linked", "That file was not pulled from Drive. Upload it as a new file with drive_upload_file instead.");
|
|
311178
|
+
if (link2.provider === "microsoft-365")
|
|
311179
|
+
return pushMicrosoftFile(config2, args2, context4, dependencies, path3, handle, link2);
|
|
310655
311180
|
if (!DRIVE_ID.test(link2.fileId) || link2.connectionId !== null && !CONNECTION_ID.test(link2.connectionId)) {
|
|
310656
311181
|
throw new ApiError(409, "invalid_link", "The saved Drive link is invalid. Pull the file again before saving.");
|
|
310657
311182
|
}
|
|
@@ -310671,14 +311196,14 @@ async function pushOpenFile(config2, args2, context4, dependencies, path3, handl
|
|
|
310671
311196
|
}
|
|
310672
311197
|
const snapshot = await snapshotForPush(config2, handle, local, dependencies.signal);
|
|
310673
311198
|
try {
|
|
310674
|
-
const remote = await describe4(config2, dependencies, link2
|
|
311199
|
+
const remote = await describe4(config2, dependencies, linkTarget(link2), linkFormat(link2), link2.connectionId ?? undefined);
|
|
310675
311200
|
if (remote.file.id !== link2.fileId)
|
|
310676
311201
|
throw new ApiError(409, "drive_conflict", "The Drive target changed. Pull it again before saving.");
|
|
310677
311202
|
if (mode === "replace" && remote.file.native)
|
|
310678
311203
|
throw new ApiError(400, "native_file_replace_unsupported", "Save this Google file as a copy instead.");
|
|
310679
311204
|
const target = { ...link2, name: remote.file.name, driveMimeType: remote.file.mimeType, native: remote.file.native, parents: remote.file.parents };
|
|
310680
311205
|
const convert = mode === "copy" && target.native && (CONVERTIBLE_FORMATS[target.driveMimeType] ?? []).includes(link2.format ?? "");
|
|
310681
|
-
await confirmDriveTransfer(config2, { action: "push", path: path3, fileId: remote.file.id, name: remote.file.name, webViewLink: remote.file.webViewLink, mode: mode === "copy" ? "copy" : "replace" }, dependencies.signal);
|
|
311206
|
+
await confirmDriveTransfer(config2, { provider: "google-workspace", action: "push", path: path3, fileId: remote.file.id, name: remote.file.name, webViewLink: remote.file.webViewLink, mode: mode === "copy" ? "copy" : "replace" }, dependencies.signal);
|
|
310682
311207
|
await assertStableFolder(config2, dirname15(path3));
|
|
310683
311208
|
await assertSameFile(path3, await handle.stat());
|
|
310684
311209
|
if ((await hashHandle(handle)).sha256 !== local.sha256) {
|
|
@@ -310734,6 +311259,163 @@ async function pushOpenFile(config2, args2, context4, dependencies, path3, handl
|
|
|
310734
311259
|
await snapshot.close();
|
|
310735
311260
|
}
|
|
310736
311261
|
}
|
|
311262
|
+
async function relayProgress(response) {
|
|
311263
|
+
const payload = await response.json().catch(() => null);
|
|
311264
|
+
if (!response.ok) {
|
|
311265
|
+
const code = isRecord28(payload) && typeof payload.error === "string" ? payload.error : "";
|
|
311266
|
+
if (response.status >= 500 || code === "upload_out_of_order")
|
|
311267
|
+
return "uncertain";
|
|
311268
|
+
const message = isRecord28(payload) && typeof payload.message === "string" ? payload.message : `OpenWork Cloud returned HTTP ${response.status}.`;
|
|
311269
|
+
const details = isRecord28(payload) ? Object.fromEntries(Object.entries(payload).filter(([key2]) => key2 === "currentRevision" || key2 === "modifiedTime")) : {};
|
|
311270
|
+
throw new ApiError(response.status, code || "cloud_drive_failed", message, Object.keys(details).length ? details : undefined);
|
|
311271
|
+
}
|
|
311272
|
+
if (isRecord28(payload) && payload.status === "partial" && typeof payload.nextOffset === "number" && Number.isSafeInteger(payload.nextOffset)) {
|
|
311273
|
+
return { status: "partial", nextOffset: payload.nextOffset };
|
|
311274
|
+
}
|
|
311275
|
+
if (isRecord28(payload) && payload.status === "complete" && isRecord28(payload.file) && typeof payload.file.id === "string" && MICROSOFT_ID.test(payload.file.id)) {
|
|
311276
|
+
return { status: "complete", file: payload.file };
|
|
311277
|
+
}
|
|
311278
|
+
return "uncertain";
|
|
311279
|
+
}
|
|
311280
|
+
async function uploadMicrosoftRelayFile(config2, dependencies, input) {
|
|
311281
|
+
const suffix = "/v1/direct-uploads/microsoft-365/drive-upload-sessions/content";
|
|
311282
|
+
const query = { token: input.token };
|
|
311283
|
+
const unconfirmed = () => new ApiError(502, "drive_upload_unconfirmed", "Microsoft did not confirm the upload. Check the file before retrying; no new upload was started.");
|
|
311284
|
+
let offset2 = 0;
|
|
311285
|
+
let recoveries = 0;
|
|
311286
|
+
while (true) {
|
|
311287
|
+
dependencies.signal?.throwIfAborted();
|
|
311288
|
+
const length = Math.min(input.chunkBytes, input.size - offset2);
|
|
311289
|
+
const bytes = new Uint8Array(length);
|
|
311290
|
+
for (let read2 = 0;read2 < length; ) {
|
|
311291
|
+
const part = await input.file.read(bytes, read2, length - read2, offset2 + read2);
|
|
311292
|
+
if (!part.bytesRead)
|
|
311293
|
+
throw new ApiError(409, "file_changed", "The file was truncated during upload.");
|
|
311294
|
+
read2 += part.bytesRead;
|
|
311295
|
+
}
|
|
311296
|
+
let result3;
|
|
311297
|
+
try {
|
|
311298
|
+
result3 = await relayProgress(await denRequest(config2, dependencies, suffix, {
|
|
311299
|
+
method: "PUT",
|
|
311300
|
+
query,
|
|
311301
|
+
headers: { "content-range": `bytes ${offset2}-${offset2 + length - 1}/${input.size}` },
|
|
311302
|
+
bytes
|
|
311303
|
+
}));
|
|
311304
|
+
} catch (error48) {
|
|
311305
|
+
if (!(error48 instanceof ApiError) || error48.code !== "cloud_unreachable")
|
|
311306
|
+
throw error48;
|
|
311307
|
+
result3 = "uncertain";
|
|
311308
|
+
}
|
|
311309
|
+
if (result3 === "uncertain") {
|
|
311310
|
+
if (++recoveries > 2)
|
|
311311
|
+
throw unconfirmed();
|
|
311312
|
+
try {
|
|
311313
|
+
result3 = await relayProgress(await denRequest(config2, dependencies, suffix, { query }));
|
|
311314
|
+
} catch (error48) {
|
|
311315
|
+
if (error48 instanceof ApiError && error48.code === "cloud_unreachable")
|
|
311316
|
+
throw unconfirmed();
|
|
311317
|
+
throw error48;
|
|
311318
|
+
}
|
|
311319
|
+
if (result3 === "uncertain")
|
|
311320
|
+
throw unconfirmed();
|
|
311321
|
+
}
|
|
311322
|
+
if (result3.status === "complete")
|
|
311323
|
+
return result3.file;
|
|
311324
|
+
if (result3.nextOffset < 0 || result3.nextOffset >= input.size)
|
|
311325
|
+
throw unconfirmed();
|
|
311326
|
+
if (result3.nextOffset <= offset2 && ++recoveries > 2)
|
|
311327
|
+
throw new ApiError(502, "drive_upload_unconfirmed", "Microsoft's upload made no progress. Completion is not confirmed; check the file before retrying.");
|
|
311328
|
+
offset2 = result3.nextOffset;
|
|
311329
|
+
}
|
|
311330
|
+
}
|
|
311331
|
+
async function pushMicrosoftFile(config2, args2, context4, dependencies, path3, handle, link2) {
|
|
311332
|
+
if (!MICROSOFT_ID.test(link2.fileId) || link2.driveId && !MICROSOFT_ID.test(link2.driveId) || link2.connectionId !== null && !MICROSOFT_CONNECTION_ID.test(link2.connectionId)) {
|
|
311333
|
+
throw new ApiError(409, "invalid_link", "The saved OneDrive or SharePoint link is invalid. Pull the file again before saving.");
|
|
311334
|
+
}
|
|
311335
|
+
const modeArg = readArgString(args2, "mode");
|
|
311336
|
+
if (modeArg && modeArg !== "replace" && modeArg !== "copy")
|
|
311337
|
+
throw new ApiError(400, "invalid_payload", "mode must be replace or copy.");
|
|
311338
|
+
const converted = link2.format !== null;
|
|
311339
|
+
const mode = modeArg || (converted ? "copy" : "replace");
|
|
311340
|
+
if (mode === "replace" && converted) {
|
|
311341
|
+
throw new ApiError(400, "converted_file_replace_unsupported", "A PDF made from this file cannot replace the original. Push with mode copy to save the PDF next to it.");
|
|
311342
|
+
}
|
|
311343
|
+
if (mode === "replace" && !link2.revision) {
|
|
311344
|
+
throw new ApiError(409, "revision_unknown", "Microsoft reported no revision when this file was pulled, so newer changes could not be detected. Pull it again, or save the edits as a copy.");
|
|
311345
|
+
}
|
|
311346
|
+
const local = await hashHandle(handle);
|
|
311347
|
+
if (local.size > MICROSOFT_DRIVE_TRANSFER_MAX_BYTES) {
|
|
311348
|
+
throw new ApiError(413, "file_too_large", `Saving to OneDrive or SharePoint supports files up to ${MICROSOFT_DRIVE_TRANSFER_MAX_BYTES} bytes.`);
|
|
311349
|
+
}
|
|
311350
|
+
if (mode === "replace" && local.sha256 === link2.sha256) {
|
|
311351
|
+
return { ok: true, unchanged: true, path: displayPath(config2, context4, path3), file: { id: link2.fileId, driveId: link2.driveId ?? "", name: link2.name, webViewLink: link2.webViewLink, revision: link2.revision } };
|
|
311352
|
+
}
|
|
311353
|
+
const snapshot = await snapshotForPush(config2, handle, local, dependencies.signal);
|
|
311354
|
+
try {
|
|
311355
|
+
const remote = await describe4(config2, dependencies, linkTarget(link2), undefined, link2.connectionId ?? undefined);
|
|
311356
|
+
if (remote.file.id !== link2.fileId)
|
|
311357
|
+
throw new ApiError(409, "drive_conflict", "The OneDrive or SharePoint target changed. Pull it again before saving.");
|
|
311358
|
+
await confirmDriveTransfer(config2, { provider: "microsoft-365", action: "push", path: path3, fileId: remote.file.id, name: remote.file.name, webViewLink: remote.file.webViewLink, mode: mode === "copy" ? "copy" : "replace" }, dependencies.signal);
|
|
311359
|
+
await assertStableFolder(config2, dirname15(path3));
|
|
311360
|
+
await assertSameFile(path3, await handle.stat());
|
|
311361
|
+
if ((await hashHandle(handle)).sha256 !== local.sha256) {
|
|
311362
|
+
throw new ApiError(409, "local_changes", "The local file changed while confirmation was open. Nothing was uploaded; review the edits and save again.");
|
|
311363
|
+
}
|
|
311364
|
+
const extension = converted ? ".pdf" : extname2(remote.file.name);
|
|
311365
|
+
const stem = remote.file.name.slice(0, remote.file.name.length - extname2(remote.file.name).length);
|
|
311366
|
+
const requestedName = readArgString(args2, "name").replace(/[/\\\x00-\x1f\x7f]/g, "_").slice(0, 255);
|
|
311367
|
+
const name = requestedName || `${stem} (edited)${extension}`;
|
|
311368
|
+
const driveId = remote.file.driveId || link2.driveId;
|
|
311369
|
+
const session2 = await denJson(config2, dependencies, "/v1/direct-uploads/microsoft-365/drive-upload-sessions", {
|
|
311370
|
+
method: "POST",
|
|
311371
|
+
body: {
|
|
311372
|
+
size: local.size,
|
|
311373
|
+
...link2.connectionId ? { connectionId: link2.connectionId } : {},
|
|
311374
|
+
...driveId ? { driveId } : {},
|
|
311375
|
+
...mode === "replace" ? { itemId: link2.fileId, baseRevision: link2.revision } : { name, conflictBehavior: "rename", ...remote.file.parents[0] ? { folderId: remote.file.parents[0] } : {} }
|
|
311376
|
+
}
|
|
311377
|
+
});
|
|
311378
|
+
const chunkBytes = session2.chunkSize;
|
|
311379
|
+
if (typeof session2.uploadToken !== "string" || session2.size !== local.size || typeof chunkBytes !== "number" || !Number.isSafeInteger(chunkBytes) || chunkBytes < 1 || chunkBytes > MICROSOFT_DRIVE_UPLOAD_CHUNK_BYTES || chunkBytes % (320 * 1024) !== 0) {
|
|
311380
|
+
throw new ApiError(502, "invalid_upload_session", "OpenWork Cloud returned an invalid upload session.");
|
|
311381
|
+
}
|
|
311382
|
+
const file2 = await uploadMicrosoftRelayFile(config2, dependencies, { token: session2.uploadToken, file: snapshot, size: local.size, chunkBytes });
|
|
311383
|
+
const revision = stringOrNull(file2.eTag);
|
|
311384
|
+
const savedName = typeof file2.name === "string" && file2.name ? file2.name : name;
|
|
311385
|
+
const savedDriveId = typeof file2.driveId === "string" && MICROSOFT_ID.test(file2.driveId) ? file2.driveId : driveId ?? "";
|
|
311386
|
+
const webViewLink = typeof file2.webUrl === "string" && file2.webUrl ? file2.webUrl : mode === "replace" ? link2.webViewLink : null;
|
|
311387
|
+
const driveMimeType = typeof file2.mimeType === "string" && file2.mimeType ? file2.mimeType : link2.driveMimeType;
|
|
311388
|
+
await withLinks(config2, (current2) => {
|
|
311389
|
+
current2.links[path3] = {
|
|
311390
|
+
...link2,
|
|
311391
|
+
provider: "microsoft-365",
|
|
311392
|
+
fileId: file2.id,
|
|
311393
|
+
driveId: savedDriveId,
|
|
311394
|
+
name: savedName,
|
|
311395
|
+
driveMimeType,
|
|
311396
|
+
native: false,
|
|
311397
|
+
format: null,
|
|
311398
|
+
revision,
|
|
311399
|
+
md5Checksum: null,
|
|
311400
|
+
sha256: local.sha256,
|
|
311401
|
+
size: local.size,
|
|
311402
|
+
webViewLink,
|
|
311403
|
+
pushedAt: new Date().toISOString()
|
|
311404
|
+
};
|
|
311405
|
+
});
|
|
311406
|
+
const replaces = isRecord28(session2.replaces) ? session2.replaces : null;
|
|
311407
|
+
return {
|
|
311408
|
+
ok: true,
|
|
311409
|
+
mode,
|
|
311410
|
+
path: displayPath(config2, context4, path3),
|
|
311411
|
+
size: local.size,
|
|
311412
|
+
file: { id: file2.id, driveId: savedDriveId, name: savedName, mimeType: driveMimeType, webViewLink, revision },
|
|
311413
|
+
...mode === "replace" ? { previousRevision: stringOrNull(replaces?.previousRevision) } : { copiedFrom: link2.fileId }
|
|
311414
|
+
};
|
|
311415
|
+
} finally {
|
|
311416
|
+
await snapshot.close();
|
|
311417
|
+
}
|
|
311418
|
+
}
|
|
310737
311419
|
async function callDriveFileAction(config2, action, args2, context4, dependencies = {}) {
|
|
310738
311420
|
if (action === "drive_pull_file")
|
|
310739
311421
|
return pullDriveFile(config2, args2, context4, dependencies);
|
|
@@ -310986,7 +311668,15 @@ function registerCoreRoutes(options) {
|
|
|
310986
311668
|
});
|
|
310987
311669
|
addRoute(routes, "POST", "/experimental/connect/skills/read", "client", async (ctx) => {
|
|
310988
311670
|
const body = await readJsonBody(ctx.request);
|
|
310989
|
-
|
|
311671
|
+
const validUrl = (url2) => typeof url2 === "string" && url2.startsWith("skill://") && url2.length <= 2048;
|
|
311672
|
+
if (Array.isArray(body.urls)) {
|
|
311673
|
+
if (body.urls.length === 0 || body.urls.length > 150 || !body.urls.every(validUrl)) {
|
|
311674
|
+
return jsonResponse2({ ok: false, reason: "invalid_url" }, 400);
|
|
311675
|
+
}
|
|
311676
|
+
const contents = await readOpenWorkConnectSkillContents(config2, body.urls, { use: body.use === true });
|
|
311677
|
+
return jsonResponse2({ ok: true, contents: Object.fromEntries(contents) });
|
|
311678
|
+
}
|
|
311679
|
+
if (!validUrl(body.url)) {
|
|
310990
311680
|
return jsonResponse2({ ok: false, reason: "invalid_url" }, 400);
|
|
310991
311681
|
}
|
|
310992
311682
|
const content2 = await readOpenWorkConnectSkillContent(config2, body.url);
|
|
@@ -311185,7 +311875,7 @@ function registerCoreRoutes(options) {
|
|
|
311185
311875
|
|
|
311186
311876
|
// src/routes/files.ts
|
|
311187
311877
|
import { createReadStream } from "node:fs";
|
|
311188
|
-
import { readFile as readFile25, readdir as readdir8, rename as rename8, rm as
|
|
311878
|
+
import { readFile as readFile25, readdir as readdir8, rename as rename8, rm as rm13, stat as stat7, writeFile as writeFile18 } from "node:fs/promises";
|
|
311189
311879
|
import { basename as basename11, dirname as dirname17, isAbsolute as isAbsolute4, join as join26, relative as relative6, resolve as resolve17, sep as sep4 } from "node:path";
|
|
311190
311880
|
import { Readable as Readable2 } from "node:stream";
|
|
311191
311881
|
init_errors5();
|
|
@@ -312058,7 +312748,7 @@ function registerFileRoutes(options) {
|
|
|
312058
312748
|
items2.push({ ok: false, type, path: path3, code: "file_not_found", message: "Path not found" });
|
|
312059
312749
|
continue;
|
|
312060
312750
|
}
|
|
312061
|
-
await
|
|
312751
|
+
await rm13(absPath, { recursive: op.recursive === true, force: false });
|
|
312062
312752
|
recordWorkspaceFileEvent(workspace.id, { type: "delete", path: path3 });
|
|
312063
312753
|
items2.push({ ok: true, type, path: path3 });
|
|
312064
312754
|
continue;
|
|
@@ -312701,7 +313391,7 @@ function registerUiControlRoutes(options) {
|
|
|
312701
313391
|
}
|
|
312702
313392
|
|
|
312703
313393
|
// src/routes/workspaces.ts
|
|
312704
|
-
import { readFile as readFile26, rename as rename9, rm as
|
|
313394
|
+
import { readFile as readFile26, rename as rename9, rm as rm14, writeFile as writeFile19 } from "node:fs/promises";
|
|
312705
313395
|
import { basename as basename12, dirname as dirname18, resolve as resolve18 } from "node:path";
|
|
312706
313396
|
init_errors5();
|
|
312707
313397
|
init_utils();
|
|
@@ -312759,7 +313449,7 @@ async function persistServerWorkspaceState(config2) {
|
|
|
312759
313449
|
return true;
|
|
312760
313450
|
} finally {
|
|
312761
313451
|
try {
|
|
312762
|
-
await
|
|
313452
|
+
await rm14(tmpPath);
|
|
312763
313453
|
} catch {}
|
|
312764
313454
|
}
|
|
312765
313455
|
}
|
|
@@ -314119,7 +314809,7 @@ init_enterprise_den_origin();
|
|
|
314119
314809
|
// src/agent-context-transport-probe.ts
|
|
314120
314810
|
init_diagnostic_sanitizer();
|
|
314121
314811
|
import { readFile as readFile27 } from "node:fs/promises";
|
|
314122
|
-
import { isIP as
|
|
314812
|
+
import { isIP as isIP4 } from "node:net";
|
|
314123
314813
|
import tls from "node:tls";
|
|
314124
314814
|
var DEFAULT_TIMEOUT_MS2 = 6000;
|
|
314125
314815
|
var MAX_ENDPOINT_LENGTH2 = 2 * 1024;
|
|
@@ -314237,7 +314927,7 @@ function tlsOptions(url2, rejectUnauthorized, version6) {
|
|
|
314237
314927
|
options.minVersion = version6;
|
|
314238
314928
|
options.maxVersion = version6;
|
|
314239
314929
|
}
|
|
314240
|
-
if (
|
|
314930
|
+
if (isIP4(host) === 0)
|
|
314241
314931
|
options.servername = host;
|
|
314242
314932
|
return options;
|
|
314243
314933
|
}
|
|
@@ -316330,6 +317020,52 @@ function startThreadApprovalReplayer(options) {
|
|
|
316330
317020
|
// src/cloud-provider-sync.ts
|
|
316331
317021
|
import { createHash as createHash18 } from "node:crypto";
|
|
316332
317022
|
import { readFile as readFile28 } from "node:fs/promises";
|
|
317023
|
+
|
|
317024
|
+
// ../../packages/types/src/den/prompts.ts
|
|
317025
|
+
init_zod();
|
|
317026
|
+
var ORG_PROMPT_MAX_LENGTH = 20000;
|
|
317027
|
+
var orgPromptAssignmentSchema = exports_external.object({
|
|
317028
|
+
everyone: exports_external.boolean(),
|
|
317029
|
+
teamIds: exports_external.array(exports_external.string()),
|
|
317030
|
+
memberIds: exports_external.array(exports_external.string())
|
|
317031
|
+
}).meta({ ref: "OrgPromptAssignment" });
|
|
317032
|
+
var orgPromptSchema = exports_external.object({
|
|
317033
|
+
id: exports_external.string(),
|
|
317034
|
+
name: exports_external.string(),
|
|
317035
|
+
content: exports_external.string(),
|
|
317036
|
+
assignment: orgPromptAssignmentSchema,
|
|
317037
|
+
updatedAt: exports_external.string().datetime()
|
|
317038
|
+
}).meta({ ref: "OrgPrompt" });
|
|
317039
|
+
var orgPromptTeamSchema = exports_external.object({
|
|
317040
|
+
teamId: exports_external.string(),
|
|
317041
|
+
name: exports_external.string(),
|
|
317042
|
+
prompt: orgPromptSchema.nullable()
|
|
317043
|
+
}).meta({ ref: "OrgPromptTeam" });
|
|
317044
|
+
var orgPromptSettingsSchema = exports_external.object({
|
|
317045
|
+
everyone: orgPromptSchema.nullable(),
|
|
317046
|
+
teams: exports_external.array(orgPromptTeamSchema),
|
|
317047
|
+
canEdit: exports_external.boolean()
|
|
317048
|
+
}).meta({ ref: "OrgPromptSettings" });
|
|
317049
|
+
var orgPromptWriteSchema = exports_external.object({
|
|
317050
|
+
content: exports_external.string().max(ORG_PROMPT_MAX_LENGTH).refine((value3) => value3.trim().length > 0, { message: "Write a prompt before saving." })
|
|
317051
|
+
}).strict().meta({ ref: "OrgPromptWrite" });
|
|
317052
|
+
var ORG_PROMPT_SOURCES = ["organization", "team", "member"];
|
|
317053
|
+
var memberPromptSchema = exports_external.object({
|
|
317054
|
+
id: exports_external.string(),
|
|
317055
|
+
source: exports_external.enum(ORG_PROMPT_SOURCES),
|
|
317056
|
+
teamName: exports_external.string().optional(),
|
|
317057
|
+
content: exports_external.string()
|
|
317058
|
+
}).meta({ ref: "MemberPrompt" });
|
|
317059
|
+
var memberPromptsSchema = exports_external.object({
|
|
317060
|
+
prompts: exports_external.array(memberPromptSchema)
|
|
317061
|
+
}).meta({ ref: "MemberPrompts" });
|
|
317062
|
+
function composeMemberPromptText(prompts) {
|
|
317063
|
+
return prompts.map((prompt) => prompt.content.trim()).filter(Boolean).join(`
|
|
317064
|
+
|
|
317065
|
+
`);
|
|
317066
|
+
}
|
|
317067
|
+
|
|
317068
|
+
// src/cloud-provider-sync.ts
|
|
316333
317069
|
init_errors5();
|
|
316334
317070
|
init_runtime_opencode_config_store();
|
|
316335
317071
|
init_workspace_files();
|
|
@@ -316633,6 +317369,24 @@ async function fetchProviders(fetchImpl2, session2, signal, liveProviderSync = f
|
|
|
316633
317369
|
]);
|
|
316634
317370
|
return { llmProviders, inferenceProviders };
|
|
316635
317371
|
}
|
|
317372
|
+
async function fetchOrganizationPrompts(fetchImpl2, session2, signal, logger2) {
|
|
317373
|
+
try {
|
|
317374
|
+
const payload = await requestJson(fetchImpl2, session2, "/v1/me/prompts", signal, { allowUnavailableResource: true });
|
|
317375
|
+
if (payload === undefined)
|
|
317376
|
+
return "";
|
|
317377
|
+
const parsed = memberPromptsSchema.safeParse(payload);
|
|
317378
|
+
if (!parsed.success)
|
|
317379
|
+
throw new Error("den_prompts_invalid_response");
|
|
317380
|
+
return composeMemberPromptText(parsed.data.prompts);
|
|
317381
|
+
} catch (error48) {
|
|
317382
|
+
if (signal.aborted)
|
|
317383
|
+
throw error48;
|
|
317384
|
+
logger2?.warn("organization prompts could not be read; keeping the last known prompts", {
|
|
317385
|
+
message: error48 instanceof Error ? error48.message : "den_prompts_failed"
|
|
317386
|
+
});
|
|
317387
|
+
return null;
|
|
317388
|
+
}
|
|
317389
|
+
}
|
|
316636
317390
|
function stableValue(value3) {
|
|
316637
317391
|
if (Array.isArray(value3))
|
|
316638
317392
|
return value3.map(stableValue);
|
|
@@ -317195,9 +317949,10 @@ class CloudProviderSync {
|
|
|
317195
317949
|
const liveProviderSync = await this.liveProviderSync?.() ?? false;
|
|
317196
317950
|
if (request3.generation !== this.contextGeneration)
|
|
317197
317951
|
return { status: "no_session" };
|
|
317198
|
-
const [{ llmProviders, inferenceProviders }, storedEnv] = await Promise.all([
|
|
317952
|
+
const [{ llmProviders, inferenceProviders }, storedEnv, organizationPrompts] = await Promise.all([
|
|
317199
317953
|
fetchProviders(this.fetchImpl, session2, this.providerFetchController.signal, liveProviderSync),
|
|
317200
|
-
this.env.list()
|
|
317954
|
+
this.env.list(),
|
|
317955
|
+
fetchOrganizationPrompts(this.fetchImpl, session2, this.providerFetchController.signal, this.logger)
|
|
317201
317956
|
]);
|
|
317202
317957
|
if (request3.generation !== this.contextGeneration)
|
|
317203
317958
|
return { status: "no_session" };
|
|
@@ -317207,7 +317962,7 @@ class CloudProviderSync {
|
|
|
317207
317962
|
const localEnvNames = storedEnv.filter((entry) => entry.value.trim().length > 0 && this.ownedEnvKeys.get(entry.key) !== hashString2(entry.value)).map((entry) => entry.key);
|
|
317208
317963
|
const prepared = prepareMaterialization([...llmProviders, ...inferenceProviders ?? []], localEnvNames);
|
|
317209
317964
|
this.materializationContextKey = request3.contextKey;
|
|
317210
|
-
const { changed, detail, reloadError } = await this.apply(prepared, liveProviderSync);
|
|
317965
|
+
const { changed, detail, reloadError } = await this.apply(prepared, liveProviderSync, organizationPrompts);
|
|
317211
317966
|
if (request3.generation !== this.contextGeneration)
|
|
317212
317967
|
return { status: "no_session" };
|
|
317213
317968
|
this.updateProviderStatus(prepared);
|
|
@@ -317231,7 +317986,7 @@ class CloudProviderSync {
|
|
|
317231
317986
|
return { status: "failed", message };
|
|
317232
317987
|
}
|
|
317233
317988
|
}
|
|
317234
|
-
async apply(prepared, liveProviderSync = false) {
|
|
317989
|
+
async apply(prepared, liveProviderSync = false, organizationPrompts = null) {
|
|
317235
317990
|
const contextHash = this.materializationContextKey === null ? null : hashString2(this.materializationContextKey);
|
|
317236
317991
|
const desiredProviders = desiredProviderMap(prepared);
|
|
317237
317992
|
const globalRuntime = await readGlobalRuntimeOpencodeConfig(this.config);
|
|
@@ -317300,6 +318055,7 @@ class CloudProviderSync {
|
|
|
317300
318055
|
await this.env.delete(key2);
|
|
317301
318056
|
this.ownedEnvKeys.delete(key2);
|
|
317302
318057
|
}
|
|
318058
|
+
const promptChanged = organizationPrompts === null ? false : (await writeManagedPrompt(this.config, organizationPrompts)).changed;
|
|
317303
318059
|
const workspaceCleanup = await this.cleanupWorkspaceTakeovers();
|
|
317304
318060
|
const engineAvailable = this.engineAvailable();
|
|
317305
318061
|
const runtimeFileChanged = engineAvailable ? (await writeOpenworkRuntimeConfigFile(this.config)).changed : false;
|
|
@@ -317311,7 +318067,7 @@ class CloudProviderSync {
|
|
|
317311
318067
|
retiredProviderIds
|
|
317312
318068
|
});
|
|
317313
318069
|
const authChanged = authResult.rotated.length > 0 || authResult.removed.length > 0;
|
|
317314
|
-
this.reloadPending = this.reloadPending || templateBindingsChanged || providerStateChanged || workspaceCleanup.runtimeChanged || runtimeFileChanged || authChanged;
|
|
318070
|
+
this.reloadPending = this.reloadPending || templateBindingsChanged || providerStateChanged || promptChanged || workspaceCleanup.runtimeChanged || runtimeFileChanged || authChanged;
|
|
317315
318071
|
let reloadError;
|
|
317316
318072
|
let reloadDeferred = false;
|
|
317317
318073
|
if (engineAvailable && this.reloadPending) {
|
|
@@ -317341,6 +318097,7 @@ class CloudProviderSync {
|
|
|
317341
318097
|
await this.persistOwnership();
|
|
317342
318098
|
const detail = {
|
|
317343
318099
|
fingerprintChanged: this.fingerprint !== prepared.fingerprint,
|
|
318100
|
+
promptChanged,
|
|
317344
318101
|
providerStateChanged,
|
|
317345
318102
|
envUpserts: envUpserts.length,
|
|
317346
318103
|
envDeletes: envDeletes.length,
|
|
@@ -317349,7 +318106,7 @@ class CloudProviderSync {
|
|
|
317349
318106
|
fileChanged: runtimeFileChanged,
|
|
317350
318107
|
reloadDeferred
|
|
317351
318108
|
};
|
|
317352
|
-
const changed = detail.fingerprintChanged || templateBindingsChanged || providerStateChanged || envUpserts.length > 0 || envDeletes.length > 0 || workspaceCleanup.changed || runtimeFileChanged;
|
|
318109
|
+
const changed = detail.fingerprintChanged || promptChanged || templateBindingsChanged || providerStateChanged || envUpserts.length > 0 || envDeletes.length > 0 || workspaceCleanup.changed || runtimeFileChanged;
|
|
317353
318110
|
return { changed, detail, reloadError };
|
|
317354
318111
|
}
|
|
317355
318112
|
async cleanupWorkspaceTakeovers() {
|
|
@@ -317417,6 +318174,8 @@ class CloudProviderSync {
|
|
|
317417
318174
|
}));
|
|
317418
318175
|
providerChanged = result3.changed;
|
|
317419
318176
|
}
|
|
318177
|
+
const promptCleared = (await writeManagedPrompt(this.config, "")).changed;
|
|
318178
|
+
providerChanged = providerChanged || promptCleared;
|
|
317420
318179
|
const storedEnv = new Map((await this.env.list()).map((entry) => [entry.key, entry.value]));
|
|
317421
318180
|
for (const [key2, hash4] of this.ownedEnvKeys) {
|
|
317422
318181
|
const value3 = storedEnv.get(key2);
|
|
@@ -317506,7 +318265,7 @@ class CloudProviderSync {
|
|
|
317506
318265
|
|
|
317507
318266
|
// src/opencode-v2-history-lock.ts
|
|
317508
318267
|
import { randomBytes as randomBytes8 } from "node:crypto";
|
|
317509
|
-
import { access, mkdir as mkdir15, readFile as readFile29, readdir as readdir9, rm as
|
|
318268
|
+
import { access, mkdir as mkdir15, readFile as readFile29, readdir as readdir9, rm as rm15, writeFile as writeFile21 } from "node:fs/promises";
|
|
317510
318269
|
import { dirname as dirname19, join as join28 } from "node:path";
|
|
317511
318270
|
|
|
317512
318271
|
// src/opencode-v2-history-store.ts
|
|
@@ -317851,7 +318610,7 @@ async function acquireHistoryCopyLock(database2) {
|
|
|
317851
318610
|
}
|
|
317852
318611
|
if (alive(previous.pid) || alive(previous.child))
|
|
317853
318612
|
throw new Error("Another OpenCode v2 engine is using this history. Close it before retrying migration.");
|
|
317854
|
-
await
|
|
318613
|
+
await rm15(leasePath);
|
|
317855
318614
|
}
|
|
317856
318615
|
} catch (error48) {
|
|
317857
318616
|
mutex.close();
|
|
@@ -317859,7 +318618,7 @@ async function acquireHistoryCopyLock(database2) {
|
|
|
317859
318618
|
}
|
|
317860
318619
|
return {
|
|
317861
318620
|
async complete() {
|
|
317862
|
-
await
|
|
318621
|
+
await rm15(join28(root, PENDING), { force: true });
|
|
317863
318622
|
},
|
|
317864
318623
|
async release() {
|
|
317865
318624
|
mutex.close();
|
|
@@ -317885,7 +318644,7 @@ async function acquireEngineHistoryLease(root) {
|
|
|
317885
318644
|
await writeFile21(path3, JSON.stringify({ pid: process.pid, child: pid }), { mode: 384 });
|
|
317886
318645
|
},
|
|
317887
318646
|
async release() {
|
|
317888
|
-
await
|
|
318647
|
+
await rm15(path3, { force: true });
|
|
317889
318648
|
}
|
|
317890
318649
|
};
|
|
317891
318650
|
}
|
|
@@ -318268,12 +319027,14 @@ async function uiBridgeRequest(path3, options = {}) {
|
|
|
318268
319027
|
// src/opencode-plugins/drive-file-tools.ts
|
|
318269
319028
|
init_zod();
|
|
318270
319029
|
var DRIVE_FILE_ACTIONS = ["drive_pull_file", "drive_file_status", "drive_push_file"];
|
|
318271
|
-
var connectionId = exports_external.string().regex(/^(google-workspace|emc_[A-Za-z0-9]+)$/).optional().describe("Selected Google Workspace connection; omit for the default. Unavailable selections never fall back to another account.");
|
|
319030
|
+
var connectionId = exports_external.string().regex(/^(google-workspace|microsoft-365|emc_[A-Za-z0-9]+)$/).optional().describe("Selected Google Workspace or Microsoft 365 connection; omit for the default. Unavailable selections never fall back to another account.");
|
|
318272
319031
|
var workspacePath = exports_external.string().min(1).max(4096);
|
|
318273
319032
|
var drivePullFileArgs = exports_external.object({
|
|
318274
|
-
fileId: exports_external.string().min(1).max(2048).describe("Drive file ID or link."),
|
|
319033
|
+
fileId: exports_external.string().min(1).max(2048).describe("Google Drive file ID or link, or a OneDrive, SharePoint or Teams file link or item id."),
|
|
319034
|
+
driveId: exports_external.string().min(1).max(512).optional().describe("Microsoft 365 only: the driveId that came with the item id from a search or folder listing."),
|
|
319035
|
+
provider: exports_external.enum(["google-workspace", "microsoft-365"]).optional().describe("Only needed for a Microsoft item id without driveId; links and driveId identify Microsoft 365 files."),
|
|
318275
319036
|
path: workspacePath.optional().describe("Workspace path to save to. Defaults to drive/<file name>."),
|
|
318276
|
-
format: exports_external.string().regex(/^[a-z]{2,5}$/).optional().describe("Docs, Sheets, Slides and Drawings
|
|
319037
|
+
format: exports_external.string().regex(/^[a-z]{2,5}$/).optional().describe("Docs, Sheets, Slides and Drawings: xlsx, csv (first tab only), docx, md, txt, pptx, pdf, png or svg. OneDrive and SharePoint: pdf converts an Office file."),
|
|
318277
319038
|
connectionId,
|
|
318278
319039
|
overwrite: exports_external.boolean().optional().describe("Replace a local copy even if it has edits not in Drive. Asks the person first.")
|
|
318279
319040
|
}).strict();
|
|
@@ -318282,7 +319043,7 @@ var driveFileStatusArgs = exports_external.object({
|
|
|
318282
319043
|
}).strict();
|
|
318283
319044
|
var drivePushFileArgs = exports_external.object({
|
|
318284
319045
|
path: workspacePath.describe("Workspace path of a pulled file."),
|
|
318285
|
-
mode: exports_external.enum(["replace", "copy"]).optional().describe("replace (default for stored files) updates the same
|
|
319046
|
+
mode: exports_external.enum(["replace", "copy"]).optional().describe("replace (default for stored files) updates the same file; copy saves a new file next to it."),
|
|
318286
319047
|
name: exports_external.string().min(1).max(255).optional().describe("Name for a copy.")
|
|
318287
319048
|
}).strict();
|
|
318288
319049
|
function isRecord41(value3) {
|
|
@@ -318297,7 +319058,7 @@ async function askPermission(context4, permission, patterns, metadata) {
|
|
|
318297
319058
|
function createDriveFileTools(call) {
|
|
318298
319059
|
return {
|
|
318299
319060
|
drive_pull_file: {
|
|
318300
|
-
description: "Save a Google Drive file into the workspace and return its path and revision, never its content. Use it to analyze or edit Office, PDF, CSV or any large file with shell tools. Docs, Sheets and Slides arrive as docx, xlsx and pptx unless format says otherwise.",
|
|
319061
|
+
description: "Save a Google Drive, OneDrive or SharePoint file into the workspace and return its path and revision, never its content. Use it to analyze or edit Office, PDF, CSV or any large file with shell tools. Docs, Sheets and Slides arrive as docx, xlsx and pptx unless format says otherwise.",
|
|
318301
319062
|
args: drivePullFileArgs.shape,
|
|
318302
319063
|
async execute(rawArgs, context4) {
|
|
318303
319064
|
const args2 = drivePullFileArgs.parse(rawArgs ?? {});
|
|
@@ -318307,14 +319068,14 @@ function createDriveFileTools(call) {
|
|
|
318307
319068
|
}
|
|
318308
319069
|
},
|
|
318309
319070
|
drive_file_status: {
|
|
318310
|
-
description: "For files pulled with drive_pull_file, report whether the local copy has edits not saved
|
|
319071
|
+
description: "For files pulled with drive_pull_file, report whether the local copy has edits not saved back and whether the file changed in Drive, OneDrive or SharePoint since the pull.",
|
|
318311
319072
|
args: driveFileStatusArgs.shape,
|
|
318312
319073
|
async execute(rawArgs, context4) {
|
|
318313
319074
|
return JSON.stringify(await call("drive_file_status", driveFileStatusArgs.parse(rawArgs ?? {}), context4), null, 2);
|
|
318314
319075
|
}
|
|
318315
319076
|
},
|
|
318316
319077
|
drive_push_file: {
|
|
318317
|
-
description: "Save a pulled file back to
|
|
319078
|
+
description: "Save a pulled file back to where it came from when the person asks. Asks the person first. Stored files, including Office files in OneDrive and SharePoint, are replaced in place as a new version; Google Docs, Sheets and Slides and PDF conversions are saved as a new file next to the original. Returns drive_conflict, and changes nothing, when someone changed the file since the pull: pull it again and reapply the edits, or save a copy.",
|
|
318318
319079
|
args: drivePushFileArgs.shape,
|
|
318319
319080
|
async execute(rawArgs, context4) {
|
|
318320
319081
|
const args2 = drivePushFileArgs.parse(rawArgs ?? {});
|
|
@@ -320686,16 +321447,16 @@ async function searchOpenWorkSessions(rawArgs) {
|
|
|
320686
321447
|
}
|
|
320687
321448
|
const sessions = [];
|
|
320688
321449
|
const workspaceErrors = [];
|
|
320689
|
-
const
|
|
321450
|
+
const readers2 = engineReaders();
|
|
320690
321451
|
await Promise.all(workspaces.map(async (workspace) => {
|
|
320691
|
-
const listed = await Promise.all(
|
|
321452
|
+
const listed = await Promise.all(readers2.map((reader, index2) => listWorkspaceSessions(reader, workspace, SESSION_SEARCH_TITLE_LIST_LIMIT).catch((error48) => {
|
|
320692
321453
|
if (index2 === 0)
|
|
320693
321454
|
workspaceErrors.push({ workspaceId: workspace.id, workspace: workspaceLabel(workspace), error: unknownErrorMessage(error48) });
|
|
320694
321455
|
return [];
|
|
320695
321456
|
})));
|
|
320696
321457
|
const seen = new Set;
|
|
320697
321458
|
listed.forEach((items3, index2) => {
|
|
320698
|
-
const reader =
|
|
321459
|
+
const reader = readers2[index2];
|
|
320699
321460
|
if (!reader)
|
|
320700
321461
|
return;
|
|
320701
321462
|
for (const session3 of items3) {
|
|
@@ -320782,8 +321543,8 @@ function readableMessages(messages) {
|
|
|
320782
321543
|
async function readWorkspaceModels(reader, workspace) {
|
|
320783
321544
|
return openworkCatalogModels(openworkEngineProviderCatalogSchema.parse(await reader.get(`/workspace/${encodeURIComponent(workspace.id)}/opencode/provider`)));
|
|
320784
321545
|
}
|
|
320785
|
-
async function readSessionOnEitherEngine(workspace, sessionId,
|
|
320786
|
-
for (const reader of
|
|
321546
|
+
async function readSessionOnEitherEngine(workspace, sessionId, readers2) {
|
|
321547
|
+
for (const reader of readers2) {
|
|
320787
321548
|
try {
|
|
320788
321549
|
return { session: await readWorkspaceSession(workspace, sessionId, reader), reader };
|
|
320789
321550
|
} catch {}
|
|
@@ -320802,10 +321563,10 @@ async function readOpenWorkSession(rawArgs) {
|
|
|
320802
321563
|
if (!workspaces.length) {
|
|
320803
321564
|
return { ok: false, error: args2.workspaceId ? `No workspace matched ${args2.workspaceId}` : "No OpenWork workspaces are available" };
|
|
320804
321565
|
}
|
|
320805
|
-
const
|
|
321566
|
+
const readers2 = engineReaders();
|
|
320806
321567
|
for (const workspace of workspaces) {
|
|
320807
321568
|
try {
|
|
320808
|
-
const located = await readSessionOnEitherEngine(workspace, args2.sessionId,
|
|
321569
|
+
const located = await readSessionOnEitherEngine(workspace, args2.sessionId, readers2);
|
|
320809
321570
|
if (!located) {
|
|
320810
321571
|
if (args2.workspaceId)
|
|
320811
321572
|
break;
|
|
@@ -321526,7 +322287,11 @@ async function createV2ContextBridge(hostRequest) {
|
|
|
321526
322287
|
return Response.json(await read2("/experimental/connect/skills"));
|
|
321527
322288
|
}
|
|
321528
322289
|
if (call.name === "openwork_skill_read") {
|
|
321529
|
-
const
|
|
322290
|
+
const url2 = exports_external.string().startsWith("skill://").max(2048);
|
|
322291
|
+
const input = exports_external.union([
|
|
322292
|
+
exports_external.object({ url: url2 }).strict(),
|
|
322293
|
+
exports_external.object({ urls: exports_external.array(url2).min(1).max(150), use: exports_external.boolean().optional() }).strict()
|
|
322294
|
+
]).parse(call.input);
|
|
321530
322295
|
return Response.json(await read2("/experimental/connect/skills/read", { method: "POST", body: JSON.stringify(input) }));
|
|
321531
322296
|
}
|
|
321532
322297
|
const transport = {
|
|
@@ -321750,6 +322515,122 @@ var gatewayUsageResetPageSchema = exports_external.object({
|
|
|
321750
322515
|
nextCursor: exports_external.string().nullable()
|
|
321751
322516
|
});
|
|
321752
322517
|
|
|
322518
|
+
// ../../packages/types/src/den/inference.ts
|
|
322519
|
+
init_zod();
|
|
322520
|
+
var INFERENCE_WINDOW_DURATIONS_MS = {
|
|
322521
|
+
five_hour: 5 * 60 * 60 * 1000,
|
|
322522
|
+
weekly: 7 * 24 * 60 * 60 * 1000,
|
|
322523
|
+
monthly: 30 * 24 * 60 * 60 * 1000
|
|
322524
|
+
};
|
|
322525
|
+
var INFERENCE_ACCESS_REASONS = [
|
|
322526
|
+
"admin_disabled",
|
|
322527
|
+
"not_eligible",
|
|
322528
|
+
"free_disabled",
|
|
322529
|
+
"accounting_unavailable",
|
|
322530
|
+
"free_allowance_exhausted",
|
|
322531
|
+
"upstream_unavailable"
|
|
322532
|
+
];
|
|
322533
|
+
var freeInferenceProviderSummarySchema = exports_external.object({
|
|
322534
|
+
state: exports_external.enum(["available", "disabled", "unavailable"]),
|
|
322535
|
+
reason: exports_external.union([exports_external.enum(INFERENCE_ACCESS_REASONS), exports_external.null()]),
|
|
322536
|
+
defaultPinned: exports_external.boolean(),
|
|
322537
|
+
modelGroup: exports_external.object({ id: exports_external.literal("free"), name: exports_external.literal("Free") }),
|
|
322538
|
+
catalog: exports_external.array(exports_external.object({ modelID: exports_external.string(), displayName: exports_external.string(), providerName: exports_external.string(), summary: exports_external.string(), recommended: exports_external.boolean(), rank: exports_external.number(), capabilities: exports_external.array(exports_external.string()) })),
|
|
322539
|
+
allowance: exports_external.object({
|
|
322540
|
+
usageScope: exports_external.literal("organization"),
|
|
322541
|
+
allowanceScope: exports_external.literal("person"),
|
|
322542
|
+
windowStartAt: exports_external.string().datetime(),
|
|
322543
|
+
resetsAt: exports_external.string().datetime(),
|
|
322544
|
+
weeklyLimitUsd: exports_external.number().finite().nonnegative(),
|
|
322545
|
+
joinedMembers: exports_external.number().int().nonnegative(),
|
|
322546
|
+
eligibleMembers: exports_external.number().int().nonnegative(),
|
|
322547
|
+
exhaustedMembers: exports_external.number().int().nonnegative().nullable().describe("Current eligible members whose recorded weekly usage has reached their person-wide limit; not a probe of Gateway request headroom. Null when accounting cannot be verified."),
|
|
322548
|
+
usedUsd: exports_external.number().finite().nonnegative().nullable(),
|
|
322549
|
+
requestCount: exports_external.number().int().nonnegative().nullable()
|
|
322550
|
+
})
|
|
322551
|
+
});
|
|
322552
|
+
var inferenceApiKeyMapSecretSchema = exports_external.record(exports_external.string(), exports_external.string()).refine((value3) => Object.keys(value3).length > 0, {
|
|
322553
|
+
message: "api_key_map must contain at least one entry"
|
|
322554
|
+
});
|
|
322555
|
+
var inferenceAwsKeysSecretSchema = exports_external.object({
|
|
322556
|
+
accessKeyId: exports_external.string().min(1),
|
|
322557
|
+
secretAccessKey: exports_external.string().min(1),
|
|
322558
|
+
sessionToken: exports_external.string().min(1).optional(),
|
|
322559
|
+
region: exports_external.string().min(1).optional()
|
|
322560
|
+
});
|
|
322561
|
+
var inferenceGcpServiceAccountSecretSchema = exports_external.looseObject({
|
|
322562
|
+
client_email: exports_external.string().min(1),
|
|
322563
|
+
private_key: exports_external.string().min(1),
|
|
322564
|
+
token_uri: exports_external.string().min(1)
|
|
322565
|
+
});
|
|
322566
|
+
var authorizationRevisionSchema = exports_external.string().regex(/^[A-Za-z0-9_-]{43}$/);
|
|
322567
|
+
var microsoftTenantIdSchema = exports_external.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i);
|
|
322568
|
+
var inferenceOauthTokenSecretSchema = exports_external.object({
|
|
322569
|
+
accessToken: exports_external.string().min(1),
|
|
322570
|
+
refreshToken: exports_external.string().min(1).optional(),
|
|
322571
|
+
tokenType: exports_external.string().min(1).optional(),
|
|
322572
|
+
googleIdentity: exports_external.object({
|
|
322573
|
+
subject: exports_external.string().min(1).max(255),
|
|
322574
|
+
email: exports_external.email(),
|
|
322575
|
+
emailVerified: exports_external.literal(true),
|
|
322576
|
+
clientId: exports_external.string().min(1),
|
|
322577
|
+
authorizationRevision: authorizationRevisionSchema.optional()
|
|
322578
|
+
}).optional(),
|
|
322579
|
+
microsoftIdentity: exports_external.object({
|
|
322580
|
+
tenantId: microsoftTenantIdSchema,
|
|
322581
|
+
objectId: exports_external.string().min(1).max(255),
|
|
322582
|
+
userName: exports_external.string().min(1).max(320).nullable(),
|
|
322583
|
+
clientId: exports_external.string().min(1),
|
|
322584
|
+
authorizationRevision: authorizationRevisionSchema
|
|
322585
|
+
}).optional()
|
|
322586
|
+
});
|
|
322587
|
+
var awsAccountIdSchema = exports_external.string().regex(/^\d{12}$/);
|
|
322588
|
+
var awsPermissionSetNameSchema = exports_external.string().regex(/^[\w+=,.@-]{1,32}$/);
|
|
322589
|
+
var awsSsoStartUrlSchema = exports_external.string().max(2048).refine((value3) => {
|
|
322590
|
+
try {
|
|
322591
|
+
const url2 = new URL(value3);
|
|
322592
|
+
return url2.protocol === "https:" && !url2.username && !url2.password && !url2.search && !url2.hash && !url2.port && /^[a-z0-9-]+(?:\.[a-z0-9-]+)*\.(?:awsapps\.com|app\.aws)$/i.test(url2.hostname);
|
|
322593
|
+
} catch {
|
|
322594
|
+
return false;
|
|
322595
|
+
}
|
|
322596
|
+
}, { message: "Use the AWS access portal URL, for example https://d-xxxxxxxxxx.awsapps.com/start." });
|
|
322597
|
+
var awsRegionSchema = exports_external.string().max(32).regex(/^[a-z]{2}(?:-[a-z]+)+-\d{1,2}$/);
|
|
322598
|
+
var gatewayAwsSsoSettingsSchema = exports_external.object({
|
|
322599
|
+
startUrl: awsSsoStartUrlSchema,
|
|
322600
|
+
region: awsRegionSchema,
|
|
322601
|
+
accountId: awsAccountIdSchema,
|
|
322602
|
+
roleName: awsPermissionSetNameSchema
|
|
322603
|
+
}).strict();
|
|
322604
|
+
var inferenceAwsSsoSecretSchema = exports_external.object({
|
|
322605
|
+
accessToken: exports_external.string().min(1).max(16384),
|
|
322606
|
+
refreshToken: exports_external.string().min(1).max(16384),
|
|
322607
|
+
clientId: exports_external.string().min(1).max(4096),
|
|
322608
|
+
clientSecret: exports_external.string().min(1).max(16384),
|
|
322609
|
+
clientSecretExpiresAt: exports_external.number().int().positive(),
|
|
322610
|
+
sso: gatewayAwsSsoSettingsSchema,
|
|
322611
|
+
identity: exports_external.object({
|
|
322612
|
+
arn: exports_external.string().min(1).max(2048),
|
|
322613
|
+
userName: exports_external.string().min(1).max(320).nullable(),
|
|
322614
|
+
authorizationRevision: authorizationRevisionSchema
|
|
322615
|
+
})
|
|
322616
|
+
});
|
|
322617
|
+
var GATEWAY_MEMBER_SIGN_IN_METHODS = ["google", "aws_sso", "microsoft"];
|
|
322618
|
+
var gatewayMemberConnectionsResponseSchema = exports_external.object({
|
|
322619
|
+
connections: exports_external.array(exports_external.object({
|
|
322620
|
+
providerId: exports_external.string(),
|
|
322621
|
+
signInMethod: exports_external.enum(GATEWAY_MEMBER_SIGN_IN_METHODS).default("google"),
|
|
322622
|
+
credentialSetId: exports_external.string(),
|
|
322623
|
+
providerName: exports_external.string(),
|
|
322624
|
+
name: exports_external.string(),
|
|
322625
|
+
ready: exports_external.boolean(),
|
|
322626
|
+
hasAccess: exports_external.boolean(),
|
|
322627
|
+
hasCredential: exports_external.boolean(),
|
|
322628
|
+
configurationRequired: exports_external.boolean().default(false),
|
|
322629
|
+
authorizationRevision: exports_external.string().nullable(),
|
|
322630
|
+
accountEmail: exports_external.string().nullable()
|
|
322631
|
+
}))
|
|
322632
|
+
});
|
|
322633
|
+
|
|
321753
322634
|
// src/gateway-quota.ts
|
|
321754
322635
|
function record6(value3) {
|
|
321755
322636
|
return typeof value3 === "object" && value3 !== null && !Array.isArray(value3);
|
|
@@ -322198,7 +323079,7 @@ init_runtime_db();
|
|
|
322198
323079
|
import { spawn as spawn4 } from "node:child_process";
|
|
322199
323080
|
import { createHash as createHash22 } from "node:crypto";
|
|
322200
323081
|
import { createReadStream as createReadStream2 } from "node:fs";
|
|
322201
|
-
import { access as access3, chmod as chmod5, mkdir as mkdir18, readdir as readdir10, readFile as readFile32, rename as rename12, rm as
|
|
323082
|
+
import { access as access3, chmod as chmod5, mkdir as mkdir18, readdir as readdir10, readFile as readFile32, rename as rename12, rm as rm17, stat as stat8, statfs, writeFile as writeFile24 } from "node:fs/promises";
|
|
322202
323083
|
import { homedir as homedir7 } from "node:os";
|
|
322203
323084
|
import { dirname as dirname20, isAbsolute as isAbsolute6, join as join32, resolve as resolve19 } from "node:path";
|
|
322204
323085
|
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
@@ -322264,7 +323145,7 @@ module.exports = Object.freeze({
|
|
|
322264
323145
|
// src/opencode-v2-binary.ts
|
|
322265
323146
|
import { execFile as execFile3 } from "node:child_process";
|
|
322266
323147
|
import { createHash as createHash21 } from "node:crypto";
|
|
322267
|
-
import { access as access2, chmod as chmod3, mkdir as mkdir16, mkdtemp, rename as rename10, rm as
|
|
323148
|
+
import { access as access2, chmod as chmod3, mkdir as mkdir16, mkdtemp, rename as rename10, rm as rm16, writeFile as writeFile22 } from "node:fs/promises";
|
|
322268
323149
|
import { join as join30 } from "node:path";
|
|
322269
323150
|
import { promisify as promisify2 } from "node:util";
|
|
322270
323151
|
var exec = promisify2(execFile3);
|
|
@@ -322307,7 +323188,7 @@ async function installOpencodeV2Binary(cacheRoot, version6) {
|
|
|
322307
323188
|
await rename10(extracted, binary);
|
|
322308
323189
|
return binary;
|
|
322309
323190
|
} finally {
|
|
322310
|
-
await
|
|
323191
|
+
await rm16(staging, { recursive: true, force: true });
|
|
322311
323192
|
}
|
|
322312
323193
|
}
|
|
322313
323194
|
|
|
@@ -322836,7 +323717,7 @@ async function backupV2Database(options) {
|
|
|
322836
323717
|
await snapshotV1Database(options.database, destination);
|
|
322837
323718
|
const backups = (await readdir10(options.directory)).filter((name) => /^opencode-v2-.+\.db$/.test(name)).sort().reverse();
|
|
322838
323719
|
for (const old of backups.slice(KEPT_V2_BACKUPS)) {
|
|
322839
|
-
await
|
|
323720
|
+
await rm17(join32(options.directory, old), { force: true });
|
|
322840
323721
|
}
|
|
322841
323722
|
return destination;
|
|
322842
323723
|
}
|
|
@@ -322980,7 +323861,7 @@ async function migrateOpencodeV1History(options) {
|
|
|
322980
323861
|
throw new Error("The saved history copy belongs to another profile. Its files were preserved.");
|
|
322981
323862
|
}
|
|
322982
323863
|
if (saved?.phase === "completed") {
|
|
322983
|
-
await
|
|
323864
|
+
await rm17(directory, { recursive: true });
|
|
322984
323865
|
await mkdir18(directory, { mode: 448 });
|
|
322985
323866
|
saved = undefined;
|
|
322986
323867
|
}
|
|
@@ -322998,12 +323879,12 @@ async function migrateOpencodeV1History(options) {
|
|
|
322998
323879
|
neededBytes: await databaseSize(options.source) * 5 + await databaseSize(options.targetDatabase)
|
|
322999
323880
|
});
|
|
323000
323881
|
await commitStage("snapshot");
|
|
323001
|
-
await
|
|
323882
|
+
await rm17(`${original}.tmp`, { force: true });
|
|
323002
323883
|
await snapshotV1Database(options.source, `${original}.tmp`);
|
|
323003
323884
|
await rename12(`${original}.tmp`, original);
|
|
323004
323885
|
checkpoint.sourceKey = await sourceDigest(original);
|
|
323005
323886
|
await mkdir18(convertedDirectory, { recursive: true, mode: 448 });
|
|
323006
|
-
await
|
|
323887
|
+
await rm17(converted, { force: true });
|
|
323007
323888
|
await snapshotV1Database(original, converted);
|
|
323008
323889
|
await clearStaleConversionMarker(converted);
|
|
323009
323890
|
await commitStage("externalizing");
|
|
@@ -323096,7 +323977,7 @@ async function migrateOpencodeV1History(options) {
|
|
|
323096
323977
|
}
|
|
323097
323978
|
await commitStage("completed");
|
|
323098
323979
|
await ownership.complete();
|
|
323099
|
-
await
|
|
323980
|
+
await rm17(directory, { recursive: true });
|
|
323100
323981
|
status.state = "completed";
|
|
323101
323982
|
status.phase = undefined;
|
|
323102
323983
|
report();
|
|
@@ -323269,11 +324150,11 @@ var MCP_READINESS_RPC_ID = "openwork.mcp-readiness";
|
|
|
323269
324150
|
import { execFile as execFile4 } from "node:child_process";
|
|
323270
324151
|
import { createHash as createHash24 } from "node:crypto";
|
|
323271
324152
|
import { existsSync as existsSync5, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "node:fs";
|
|
323272
|
-
import { mkdir as mkdir19, rename as rename13, rm as
|
|
324153
|
+
import { mkdir as mkdir19, rename as rename13, rm as rm18, writeFile as writeFile25 } from "node:fs/promises";
|
|
323273
324154
|
import { join as join36 } from "node:path";
|
|
323274
324155
|
// ../../constants.json
|
|
323275
324156
|
var constants_default = {
|
|
323276
|
-
opencodeVersion: "v1.18.
|
|
324157
|
+
opencodeVersion: "v1.18.33",
|
|
323277
324158
|
opencodeV2Version: "2.0.26"
|
|
323278
324159
|
};
|
|
323279
324160
|
|
|
@@ -323536,6 +324417,8 @@ function v1HistoryExists(env) {
|
|
|
323536
324417
|
}
|
|
323537
324418
|
}
|
|
323538
324419
|
function seedFreshInstallEngineState(config2, env = process.env) {
|
|
324420
|
+
if (hasExternalOpencode(config2))
|
|
324421
|
+
return false;
|
|
323539
324422
|
const state = freshInstallEngineState({
|
|
323540
324423
|
requested: config2.freshInstallEngine,
|
|
323541
324424
|
env,
|
|
@@ -323546,7 +324429,7 @@ function seedFreshInstallEngineState(config2, env = process.env) {
|
|
|
323546
324429
|
return false;
|
|
323547
324430
|
try {
|
|
323548
324431
|
mkdirSync2(runtimeStorageDir(config2), { recursive: true });
|
|
323549
|
-
writeFileSync(statePath(config2), `${JSON.stringify({ ...state, engineOrigin: "fresh", engineChangedAt: new Date().toISOString(), ...config2.engineAutoUpgrade ? { engineForced: true } : {} }, null, 2)}
|
|
324432
|
+
writeFileSync(statePath(config2), `${JSON.stringify({ ...state, engineOrigin: "fresh", engineChangedAt: new Date().toISOString(), ...config2.engineAutoUpgrade !== false ? { engineForced: true } : {} }, null, 2)}
|
|
323550
324433
|
`, { encoding: "utf8", flag: "wx" });
|
|
323551
324434
|
return true;
|
|
323552
324435
|
} catch {
|
|
@@ -323742,7 +324625,7 @@ async function waitForEngineV2Catalog(active, directory, specs, timeoutMs = CATA
|
|
|
323742
324625
|
lastError: `OpenCode v2 has not listed ${labels.length} ${labels.length === 1 ? "model" : "models"} ${after}: ${shown}.`
|
|
323743
324626
|
};
|
|
323744
324627
|
}
|
|
323745
|
-
function mapRuntimeMcpToV2(value3) {
|
|
324628
|
+
function mapRuntimeMcpToV2(value3, name) {
|
|
323746
324629
|
if (!isRecord47(value3))
|
|
323747
324630
|
return;
|
|
323748
324631
|
if (value3.enabled === false || value3.disabled === true)
|
|
@@ -323772,6 +324655,7 @@ function mapRuntimeMcpToV2(value3) {
|
|
|
323772
324655
|
type: "remote",
|
|
323773
324656
|
url: value3.url,
|
|
323774
324657
|
headers: strings(value3.headers),
|
|
324658
|
+
...name === "openwork-cloud" ? { protocol: "auto" } : {},
|
|
323775
324659
|
...oauth === undefined ? {} : { oauth },
|
|
323776
324660
|
...shared
|
|
323777
324661
|
};
|
|
@@ -323811,13 +324695,10 @@ function createEngineV2Preview(options) {
|
|
|
323811
324695
|
let engineOrigin = initialState.engineOrigin ?? "manual";
|
|
323812
324696
|
let engineChangedAt = initialState.engineChangedAt;
|
|
323813
324697
|
let engineForced = initialState.engineForced === true;
|
|
323814
|
-
|
|
323815
|
-
let forceRevert = (config2.engineForcePolicy === true || config2.engineAutoUpgrade === true) && !forceUpgrade;
|
|
324698
|
+
const autoUpgradeEnabled = !hasExternalOpencode(config2) && config2.engineAutoUpgrade !== false && !process.env.OPENWORK_ENGINE_V2_PREVIEW?.trim();
|
|
323816
324699
|
let autoUpgradeRetry = initialState.autoUpgradeRetry;
|
|
323817
324700
|
const autoUpgradeAbort = new AbortController;
|
|
323818
|
-
const autoRevertAbort = new AbortController;
|
|
323819
324701
|
let autoUpgradeJob;
|
|
323820
|
-
let autoRevertJob;
|
|
323821
324702
|
let migration = resumeMigration ? { state: "running", phase: "starting", imported: 0, skipped: 0, total: 0, resumed: true } : initialState.historyCopyResult ?? { state: "idle", imported: 0, skipped: 0, total: 0 };
|
|
323822
324703
|
let migrationJob;
|
|
323823
324704
|
let migrationAbort;
|
|
@@ -323919,7 +324800,7 @@ function createEngineV2Preview(options) {
|
|
|
323919
324800
|
const desired = new Map(Object.entries(runtime).flatMap(([name, value3]) => {
|
|
323920
324801
|
if (agentPermissionEngineMcpDenial(agentPermissionRules, name, value3, organizationMcp))
|
|
323921
324802
|
return [];
|
|
323922
|
-
const mapped = mapRuntimeMcpToV2(value3);
|
|
324803
|
+
const mapped = mapRuntimeMcpToV2(value3, name);
|
|
323923
324804
|
return mapped ? [[name, { config: mapped, fingerprint: JSON.stringify(mapped) }]] : [];
|
|
323924
324805
|
}));
|
|
323925
324806
|
const { applied, attempts } = location;
|
|
@@ -324029,7 +324910,7 @@ function createEngineV2Preview(options) {
|
|
|
324029
324910
|
engineOrigin,
|
|
324030
324911
|
engineForced,
|
|
324031
324912
|
...engineChangedAt === undefined ? {} : { engineChangedAt },
|
|
324032
|
-
forceUpgradePending: automaticHistoryCopy ||
|
|
324913
|
+
forceUpgradePending: automaticHistoryCopy || autoUpgradeEnabled && !chatRouting && autoUpgradeJob !== undefined,
|
|
324033
324914
|
enabled,
|
|
324034
324915
|
migration: { ...migration },
|
|
324035
324916
|
v1HistoryAvailable: hasV1History(),
|
|
@@ -324199,7 +325080,7 @@ function createEngineV2Preview(options) {
|
|
|
324199
325080
|
if (!enabled || !allowRunning)
|
|
324200
325081
|
return;
|
|
324201
325082
|
await mkdir19(workspaceDir, { recursive: true });
|
|
324202
|
-
await
|
|
325083
|
+
await rm18(join36(rootDir, "cloud-skills"), { recursive: true, force: true });
|
|
324203
325084
|
const opencodeModelsUrl = await resolveOpencodeModelsUrl();
|
|
324204
325085
|
contextBridge = options.hostReadRequest ? await createV2ContextBridge(options.hostReadRequest) : undefined;
|
|
324205
325086
|
providerSessionBridge = options.providerSession ? await createV2ProviderSessionBridge(() => ownsGateway() ? options.providerSession?.() ?? null : null) : undefined;
|
|
@@ -324519,16 +325400,18 @@ function createEngineV2Preview(options) {
|
|
|
324519
325400
|
const source = opencodeV1DatabasePath();
|
|
324520
325401
|
if (!existsSync5(source) || (await readMigrationSessions(source)).length === 0) {
|
|
324521
325402
|
await waitForEngineIdle({ signal: autoUpgradeAbort.signal, idle: options.autoUpgradeIdle ?? (async () => false) });
|
|
325403
|
+
if (chosenV1Manually())
|
|
325404
|
+
return true;
|
|
324522
325405
|
enabled = true;
|
|
324523
325406
|
allowRunning = true;
|
|
324524
325407
|
await start();
|
|
324525
325408
|
if (!running)
|
|
324526
325409
|
throw new Error("OpenCode v2 did not become healthy. Keeping v1.");
|
|
324527
325410
|
autoUpgradeAbort.signal.throwIfAborted();
|
|
324528
|
-
if (!
|
|
325411
|
+
if (!autoUpgradeEnabled || chosenV1Manually())
|
|
324529
325412
|
return true;
|
|
324530
325413
|
await withEngineSwitchFence(config2, { from: "v1", to: "v2", operation: async () => {
|
|
324531
|
-
if (!
|
|
325414
|
+
if (!autoUpgradeEnabled || chosenV1Manually() || !await options.autoUpgradeIdle?.() || existsSync5(source) && (await readMigrationSessions(source)).length > 0) {
|
|
324532
325415
|
throw new Error("OpenCode v1 gained history or running work while v2 started. Keeping v1 until a later boot.");
|
|
324533
325416
|
}
|
|
324534
325417
|
migration = { state: "idle", imported: 0, skipped: 0, total: 0 };
|
|
@@ -324541,6 +325424,8 @@ function createEngineV2Preview(options) {
|
|
|
324541
325424
|
idle: options.autoUpgradeIdle ?? (async () => false),
|
|
324542
325425
|
revision: () => historyRevision(source),
|
|
324543
325426
|
copy: async () => {
|
|
325427
|
+
if (chosenV1Manually())
|
|
325428
|
+
throw new Error("OpenCode v1 was selected locally. Keeping v1.");
|
|
324544
325429
|
const revision = await historyRevision(source);
|
|
324545
325430
|
if (automaticHistoryCopy && automaticHistoryRevision !== undefined && automaticHistoryRevision !== revision && v1HistoryCopyStartedAt === undefined && migration.backupPath) {
|
|
324546
325431
|
await stopRuntime();
|
|
@@ -324548,10 +325433,10 @@ function createEngineV2Preview(options) {
|
|
|
324548
325433
|
const temporary = `${target}.auto-restore`;
|
|
324549
325434
|
const ownership = await acquireHistoryCopyLock(target);
|
|
324550
325435
|
try {
|
|
324551
|
-
await
|
|
325436
|
+
await rm18(temporary, { force: true });
|
|
324552
325437
|
await snapshotV1Database(migration.backupPath, temporary);
|
|
324553
|
-
await
|
|
324554
|
-
await
|
|
325438
|
+
await rm18(`${target}-wal`, { force: true });
|
|
325439
|
+
await rm18(`${target}-shm`, { force: true });
|
|
324555
325440
|
await rename13(temporary, target);
|
|
324556
325441
|
v1HistoryCopiedAt = undefined;
|
|
324557
325442
|
automaticHistoryRevision = undefined;
|
|
@@ -324574,7 +325459,7 @@ function createEngineV2Preview(options) {
|
|
|
324574
325459
|
}
|
|
324575
325460
|
},
|
|
324576
325461
|
switchEngine: async () => {
|
|
324577
|
-
if (!
|
|
325462
|
+
if (!autoUpgradeEnabled || chosenV1Manually())
|
|
324578
325463
|
throw new Error("Automatic upgrade is no longer enabled. Keeping v1.");
|
|
324579
325464
|
allowRunning = true;
|
|
324580
325465
|
await start();
|
|
@@ -324582,7 +325467,7 @@ function createEngineV2Preview(options) {
|
|
|
324582
325467
|
throw new Error("OpenCode v2 did not become healthy. Keeping v1.");
|
|
324583
325468
|
autoUpgradeAbort.signal.throwIfAborted();
|
|
324584
325469
|
await withEngineSwitchFence(config2, { from: "v1", to: "v2", operation: async () => {
|
|
324585
|
-
if (!
|
|
325470
|
+
if (!autoUpgradeEnabled || chosenV1Manually() || !await options.autoUpgradeIdle?.() || automaticHistoryRevision !== await historyRevision(source)) {
|
|
324586
325471
|
throw new Error("OpenCode v1 changed while v2 started. Keeping v1 until a later boot.");
|
|
324587
325472
|
}
|
|
324588
325473
|
await setChatRouting(true, "forced");
|
|
@@ -324606,49 +325491,14 @@ function createEngineV2Preview(options) {
|
|
|
324606
325491
|
return false;
|
|
324607
325492
|
}
|
|
324608
325493
|
}
|
|
324609
|
-
|
|
324610
|
-
try {
|
|
324611
|
-
await autoUpgradeJob;
|
|
324612
|
-
if (!forceRevert || !engineForced || !chatRouting)
|
|
324613
|
-
return true;
|
|
324614
|
-
await waitForEngineIdle({
|
|
324615
|
-
signal: autoRevertAbort.signal,
|
|
324616
|
-
idle: options.autoRevertIdle ?? (async () => !running)
|
|
324617
|
-
});
|
|
324618
|
-
autoRevertAbort.signal.throwIfAborted();
|
|
324619
|
-
if (!forceRevert || !engineForced || !chatRouting)
|
|
324620
|
-
return true;
|
|
324621
|
-
await withEngineSwitchFence(config2, { from: "v2", to: "v1", operation: async () => {
|
|
324622
|
-
if (!forceRevert || !engineForced || !await (options.autoRevertIdle?.() ?? Promise.resolve(!running))) {
|
|
324623
|
-
throw new Error("OpenCode v2 gained running work before the switch. Keeping v2.");
|
|
324624
|
-
}
|
|
324625
|
-
await setChatRouting(false, "reverted");
|
|
324626
|
-
await stopRuntime().catch((error48) => {
|
|
324627
|
-
lastError = errorMessage4(error48);
|
|
324628
|
-
options.autoUpgradeError?.(lastError);
|
|
324629
|
-
});
|
|
324630
|
-
} });
|
|
324631
|
-
return true;
|
|
324632
|
-
} catch (error48) {
|
|
324633
|
-
lastError = errorMessage4(error48);
|
|
324634
|
-
options.autoUpgradeError?.(lastError);
|
|
324635
|
-
await persistState().catch((error49) => warn(`Automatic revert state: ${errorMessage4(error49)}`));
|
|
324636
|
-
return false;
|
|
324637
|
-
}
|
|
324638
|
-
}
|
|
324639
|
-
function setForcePolicy(policy) {
|
|
324640
|
-
forceUpgrade = policy.upgrade;
|
|
324641
|
-
forceRevert = !policy.upgrade;
|
|
324642
|
-
startWhenReady();
|
|
325494
|
+
function setForcePolicy(_policy) {
|
|
324643
325495
|
return status();
|
|
324644
325496
|
}
|
|
324645
325497
|
async function stop() {
|
|
324646
325498
|
stopping = true;
|
|
324647
325499
|
autoUpgradeAbort.abort(new Error("Automatic upgrade paused while OpenWork closes."));
|
|
324648
325500
|
migrationAbort?.abort(new Error("History copy paused while OpenWork closes. Restart to resume."));
|
|
324649
|
-
autoRevertAbort.abort(new Error("Automatic revert paused while OpenWork closes."));
|
|
324650
325501
|
await autoUpgradeJob;
|
|
324651
|
-
await autoRevertJob;
|
|
324652
325502
|
await migrationJob;
|
|
324653
325503
|
await startFailureJob;
|
|
324654
325504
|
await stopRuntime();
|
|
@@ -324666,17 +325516,12 @@ function createEngineV2Preview(options) {
|
|
|
324666
325516
|
}
|
|
324667
325517
|
if (migration.state === "running")
|
|
324668
325518
|
return;
|
|
324669
|
-
if (
|
|
324670
|
-
autoRevertJob = autoRevert().then((success2) => {
|
|
324671
|
-
if (success2)
|
|
324672
|
-
autoRevertJob = undefined;
|
|
324673
|
-
});
|
|
324674
|
-
} else if (forceUpgrade && !forceRevert && !config2.readOnly && !chatRouting && !autoUpgradeJob && !chosenV1Manually()) {
|
|
325519
|
+
if (autoUpgradeEnabled && !config2.readOnly && !chatRouting && !autoUpgradeJob && !chosenV1Manually()) {
|
|
324675
325520
|
autoUpgradeJob = autoUpgrade().then((success2) => {
|
|
324676
325521
|
if (success2)
|
|
324677
325522
|
autoUpgradeJob = undefined;
|
|
324678
325523
|
});
|
|
324679
|
-
} else if (enabled && !automaticHistoryCopy && engineOrigin !== "reverted" && !(
|
|
325524
|
+
} else if (enabled && !automaticHistoryCopy && engineOrigin !== "reverted" && !(autoUpgradeEnabled && !chatRouting && !chosenV1Manually()))
|
|
324680
325525
|
start().catch(recordStartError);
|
|
324681
325526
|
}
|
|
324682
325527
|
if (!options.deferStart)
|
|
@@ -324686,7 +325531,7 @@ function createEngineV2Preview(options) {
|
|
|
324686
325531
|
// package.json
|
|
324687
325532
|
var package_default = {
|
|
324688
325533
|
name: "openwork-server",
|
|
324689
|
-
version: "0.18.
|
|
325534
|
+
version: "0.18.62",
|
|
324690
325535
|
description: "Filesystem-backed API for OpenWork remote clients",
|
|
324691
325536
|
type: "module",
|
|
324692
325537
|
bin: {
|
|
@@ -324704,7 +325549,7 @@ var package_default = {
|
|
|
324704
325549
|
"publish:npm": "pnpm build && pnpm build:npm-bundle && pnpm build:web-ui && node scripts/build-opencode-plugin-deps.mjs && node scripts/publish-npm.mjs",
|
|
324705
325550
|
start: "bun dist/cli.js",
|
|
324706
325551
|
typecheck: "tsc -p tsconfig.json --noEmit",
|
|
324707
|
-
"test:readiness": "bun test test/opencode-stop-fence.test.ts test/opencode-v2-mcp-readiness.test.ts test/openwork-mcp-results-v2.test.ts test/openwork-session-groups.test.ts",
|
|
325552
|
+
"test:readiness": "bun test test/opencode-stop-fence.test.ts test/opencode-v2-mcp-readiness.test.ts test/openwork-mcp-results-v2.test.ts test/openwork-session-groups.test.ts test/opencode-v2-instructions.test.ts test/cloud-provider-sync-prompts.test.ts test/engine-v2-mcp-mapping.test.ts test/engine-v2-mcp-reconciliation.test.ts",
|
|
324708
325553
|
"test:fresh-install-engine": "bun test test/engine-fresh-install-default.test.ts",
|
|
324709
325554
|
"test:live-provider-sync": "bun test test/live-provider-sync.test.ts",
|
|
324710
325555
|
"test:history-migration": "bun test test/opencode-v2-staged-history.test.ts",
|
|
@@ -324753,7 +325598,7 @@ var package_default = {
|
|
|
324753
325598
|
htmlparser2: "8.0.2",
|
|
324754
325599
|
"jsonc-parser": "^3.2.1",
|
|
324755
325600
|
minimatch: "^10.2.5",
|
|
324756
|
-
undici: "6.
|
|
325601
|
+
undici: "6.29.1",
|
|
324757
325602
|
yaml: "^2.9.0",
|
|
324758
325603
|
zod: "^4.3.6",
|
|
324759
325604
|
"@openwork/computer-use": "workspace:*"
|
|
@@ -324770,6 +325615,9 @@ var package_default = {
|
|
|
324770
325615
|
"jpeg-js": "0.4.4",
|
|
324771
325616
|
typescript: "^5.6.3"
|
|
324772
325617
|
},
|
|
325618
|
+
engines: {
|
|
325619
|
+
node: ">=24.22.1 <25"
|
|
325620
|
+
},
|
|
324773
325621
|
packageManager: "pnpm@10.27.0"
|
|
324774
325622
|
};
|
|
324775
325623
|
|
|
@@ -325324,11 +326172,6 @@ async function startServer(config2, options = {}) {
|
|
|
325324
326172
|
deferStart: true,
|
|
325325
326173
|
resolveLiveProviderSync,
|
|
325326
326174
|
autoUpgradeIdle: async () => (await describeV1EngineActivity(config2)).verdict === "idle",
|
|
325327
|
-
autoRevertIdle: async () => {
|
|
325328
|
-
if (!engineV2Preview.status().running)
|
|
325329
|
-
return true;
|
|
325330
|
-
return (await describeV2EngineActivity(config2, engineV2Preview.connection()))?.verdict === "idle";
|
|
325331
|
-
},
|
|
325332
326175
|
autoUpgradeError: (error48) => logger2.log("warn", "Automatic engine upgrade failed; keeping v1", { error: error48 }),
|
|
325333
326176
|
providerSession: () => cloudProviderSync.currentSession(),
|
|
325334
326177
|
hostReadRequest: async (path3, init) => {
|
|
@@ -325409,8 +326252,8 @@ async function startServer(config2, options = {}) {
|
|
|
325409
326252
|
const recordUnhandledErrorCause = (error48) => {
|
|
325410
326253
|
errorCause = error48 instanceof Error ? error48.message : String(error48);
|
|
325411
326254
|
};
|
|
325412
|
-
const finalize2 = (response) => {
|
|
325413
|
-
const wrapped = withCors(response, request3, config2);
|
|
326255
|
+
const finalize2 = (response, options2 = {}) => {
|
|
326256
|
+
const wrapped = options2.cors === false ? response : withCors(response, request3, config2);
|
|
325414
326257
|
if (config2.logRequests) {
|
|
325415
326258
|
logRequest({
|
|
325416
326259
|
logger: logger2,
|
|
@@ -325518,6 +326361,11 @@ async function startServer(config2, options = {}) {
|
|
|
325518
326361
|
return finalize2(jsonResponse2(formatError2(apiError), apiError.status));
|
|
325519
326362
|
}
|
|
325520
326363
|
};
|
|
326364
|
+
if (!isAllowedHost(request3, config2)) {
|
|
326365
|
+
const apiError = new ApiError(403, "host_not_allowed", "This server does not answer to this host name. Add it with --allowed-hosts or OPENWORK_ALLOWED_HOSTS.");
|
|
326366
|
+
recordApiError(apiError);
|
|
326367
|
+
return finalize2(jsonResponse2(formatError2(apiError), apiError.status));
|
|
326368
|
+
}
|
|
325521
326369
|
if (request3.method === "OPTIONS") {
|
|
325522
326370
|
return finalize2(new Response(null, { status: 204 }));
|
|
325523
326371
|
}
|
|
@@ -325572,7 +326420,7 @@ async function startServer(config2, options = {}) {
|
|
|
325572
326420
|
if (!route) {
|
|
325573
326421
|
const staticUiResponse = await serveStaticUi(request3, config2);
|
|
325574
326422
|
if (staticUiResponse)
|
|
325575
|
-
return finalize2(staticUiResponse);
|
|
326423
|
+
return finalize2(staticUiResponse, { cors: false });
|
|
325576
326424
|
errorMessage5 = "not_found";
|
|
325577
326425
|
return finalize2(jsonResponse2({ code: "not_found", message: "Not found" }, 404));
|
|
325578
326426
|
}
|
|
@@ -325880,7 +326728,8 @@ async function forwardOpencodeV2Request(input) {
|
|
|
325880
326728
|
const mcpResponse = await engineFetch(mcpUrl.toString(), { headers: internalHeaders, signal: AbortSignal.timeout(1e4) });
|
|
325881
326729
|
const mcpPayload = mcpResponse.ok ? await mcpResponse.json() : null;
|
|
325882
326730
|
const connectReady = isRecord48(mcpPayload) && Array.isArray(mcpPayload.data) && mcpPayload.data.some((entry) => isRecord48(entry) && entry.name === "openwork-cloud" && isRecord48(entry.status) && entry.status.status === "connected");
|
|
325883
|
-
const
|
|
326731
|
+
const organizationPrompts = (await readGlobalRuntimeOpencodeConfig(input.config)).managedPrompt;
|
|
326732
|
+
const value3 = buildOpenWorkV2Instructions(connectReady, organizationPrompts);
|
|
325884
326733
|
const instructionUrl = new URL(target);
|
|
325885
326734
|
instructionUrl.pathname = `/api/experimental/session/${encodeURIComponent(sessionId)}/instructions/entries/${OPENWORK_V2_INSTRUCTION_KEY}`;
|
|
325886
326735
|
const synced = await engineFetch(instructionUrl.toString(), {
|
|
@@ -326486,12 +327335,12 @@ function parseSsePayload2(frame) {
|
|
|
326486
327335
|
}
|
|
326487
327336
|
function mergedEventBody(input) {
|
|
326488
327337
|
const encoder2 = new TextEncoder;
|
|
326489
|
-
const
|
|
327338
|
+
const readers2 = input.streams.map((entry) => ({ connection: entry.connection, reader: entry.body.getReader() }));
|
|
326490
327339
|
let cancelled = false;
|
|
326491
327340
|
let pingTimer = null;
|
|
326492
327341
|
return new ReadableStream({
|
|
326493
327342
|
start(controller) {
|
|
326494
|
-
let active =
|
|
327343
|
+
let active = readers2.length;
|
|
326495
327344
|
let closed = false;
|
|
326496
327345
|
const close2 = () => {
|
|
326497
327346
|
if (closed)
|
|
@@ -326507,7 +327356,7 @@ function mergedEventBody(input) {
|
|
|
326507
327356
|
if (closed || cancelled)
|
|
326508
327357
|
return;
|
|
326509
327358
|
cancelled = true;
|
|
326510
|
-
for (const entry of
|
|
327359
|
+
for (const entry of readers2)
|
|
326511
327360
|
entry.reader.cancel(input.lease.signal.reason).catch(() => {
|
|
326512
327361
|
return;
|
|
326513
327362
|
});
|
|
@@ -326549,7 +327398,7 @@ function mergedEventBody(input) {
|
|
|
326549
327398
|
finish();
|
|
326550
327399
|
}
|
|
326551
327400
|
};
|
|
326552
|
-
for (const entry of
|
|
327401
|
+
for (const entry of readers2)
|
|
326553
327402
|
pump(entry);
|
|
326554
327403
|
pingTimer = setInterval(() => {
|
|
326555
327404
|
if (!closed && !cancelled)
|
|
@@ -326567,7 +327416,7 @@ function mergedEventBody(input) {
|
|
|
326567
327416
|
if (pingTimer)
|
|
326568
327417
|
clearInterval(pingTimer);
|
|
326569
327418
|
input.lease.release();
|
|
326570
|
-
await Promise.all(
|
|
327419
|
+
await Promise.all(readers2.map((entry) => entry.reader.cancel(reason).catch(() => {
|
|
326571
327420
|
return;
|
|
326572
327421
|
})));
|
|
326573
327422
|
}
|
|
@@ -326961,6 +327810,13 @@ function createRoutes(config2, approvals, tokens, env, onWorkspacesChanged, engi
|
|
|
326961
327810
|
const refresh = await applyManagedProviderReload(resolveEngineRuntimeWorkspace(config2));
|
|
326962
327811
|
return jsonResponse2({ ...preferences, refresh });
|
|
326963
327812
|
});
|
|
327813
|
+
addRoute(routes, "PUT", "/anonymous-inference/analytics", "host-token", async (ctx) => {
|
|
327814
|
+
const body = await readJsonBody(ctx.request);
|
|
327815
|
+
if (typeof body.enabled !== "boolean" || Object.keys(body).some((key2) => key2 !== "enabled")) {
|
|
327816
|
+
throw new ApiError(400, "invalid_payload", "Only enabled is accepted.");
|
|
327817
|
+
}
|
|
327818
|
+
return privateProviderResponse(await anonymousInference.setAnalyticsEnabled(body.enabled));
|
|
327819
|
+
});
|
|
326964
327820
|
const nativeEngineForWorkspace = createNativeCloudMcpResolver(engineV2Preview);
|
|
326965
327821
|
registerCoreRoutes({
|
|
326966
327822
|
nativeEngineForWorkspace,
|
|
@@ -330155,7 +331011,7 @@ function buildOpenworkRuntimeConfigObjectFromSnapshot2(runtimeConfig2) {
|
|
|
330155
331011
|
}
|
|
330156
331012
|
const disabledProviders = runtimeDisabledProviderList(runtimeConfig2);
|
|
330157
331013
|
const permissions = legacyExecutionPermissions(runtimeConfig2.managedPolicy?.execution);
|
|
330158
|
-
const { managedPolicy: _managedPolicy, ...engineConfig } = runtimeConfig2;
|
|
331014
|
+
const { managedPolicy: _managedPolicy, managedPrompt, ...engineConfig } = runtimeConfig2;
|
|
330159
331015
|
const provider = materializeLegacyFastProviders(runtimeProviderMap(runtimeConfig2));
|
|
330160
331016
|
return {
|
|
330161
331017
|
...engineConfig,
|
|
@@ -330170,7 +331026,7 @@ function buildOpenworkRuntimeConfigObjectFromSnapshot2(runtimeConfig2) {
|
|
|
330170
331026
|
description: "OpenWork default agent",
|
|
330171
331027
|
mode: "primary",
|
|
330172
331028
|
temperature: 0.2,
|
|
330173
|
-
prompt: OPENWORK_AGENT_PROMPT,
|
|
331029
|
+
prompt: appendOrganizationPrompts(OPENWORK_AGENT_PROMPT, managedPrompt),
|
|
330174
331030
|
permission: {
|
|
330175
331031
|
...permissions,
|
|
330176
331032
|
skill: {
|
|
@@ -330621,9 +331477,11 @@ function normalizeRuntimeOpencodeConfig2(value3) {
|
|
|
330621
331477
|
const permission = isRecord7(value3.permission) ? value3.permission : undefined;
|
|
330622
331478
|
const externalDirectory = permission && isRecord7(permission.external_directory) ? permission.external_directory : undefined;
|
|
330623
331479
|
const provider = isRecord7(value3.provider) ? value3.provider : undefined;
|
|
331480
|
+
const managedPrompt = typeof value3.managedPrompt === "string" && value3.managedPrompt.trim() ? value3.managedPrompt : undefined;
|
|
330624
331481
|
return {
|
|
330625
331482
|
...defaultAgent ? { default_agent: defaultAgent } : {},
|
|
330626
331483
|
...value3.managedPolicy !== undefined ? { managedPolicy: desktopConfigSchema.parse(value3.managedPolicy) } : {},
|
|
331484
|
+
...managedPrompt ? { managedPrompt } : {},
|
|
330627
331485
|
...plugin ? { plugin } : {},
|
|
330628
331486
|
...disabledProviders ? { disabled_providers: disabledProviders } : {},
|
|
330629
331487
|
...mcp ? { mcp } : {},
|
|
@@ -330811,8 +331669,8 @@ function updateRuntimeConfig2(config2, workspaceId, updater) {
|
|
|
330811
331669
|
}
|
|
330812
331670
|
function writeRuntimeOpencodeConfig2(config2, workspaceId, updater) {
|
|
330813
331671
|
return updateRuntimeConfig2(config2, workspaceId, (current2) => {
|
|
330814
|
-
const { managedPolicy, ...editable } = current2;
|
|
330815
|
-
return { ...updater(editable), managedPolicy };
|
|
331672
|
+
const { managedPolicy, managedPrompt, ...editable } = current2;
|
|
331673
|
+
return { ...updater(editable), managedPolicy, managedPrompt };
|
|
330816
331674
|
});
|
|
330817
331675
|
}
|
|
330818
331676
|
|
|
@@ -331892,7 +332750,7 @@ init_paths();
|
|
|
331892
332750
|
import { spawn as spawn5, spawnSync as spawnSync2 } from "node:child_process";
|
|
331893
332751
|
import { existsSync as existsSync7 } from "node:fs";
|
|
331894
332752
|
import { randomBytes as randomBytes13 } from "node:crypto";
|
|
331895
|
-
import { chmod as chmod6, mkdir as mkdir21, mkdtemp as mkdtemp2, readFile as readFile38, readdir as readdir12, rename as rename15, rm as
|
|
332753
|
+
import { chmod as chmod6, mkdir as mkdir21, mkdtemp as mkdtemp2, readFile as readFile38, readdir as readdir12, rename as rename15, rm as rm20, stat as stat10, writeFile as writeFile28 } from "node:fs/promises";
|
|
331896
332754
|
import { homedir as homedir11, tmpdir } from "node:os";
|
|
331897
332755
|
import { basename as basename15, dirname as dirname24, join as join40, relative as relative9, resolve as resolve23 } from "node:path";
|
|
331898
332756
|
var OPENCODE_GITHUB_REPO = "anomalyco/opencode";
|
|
@@ -332064,7 +332922,7 @@ async function ensureManagedEngine(input) {
|
|
|
332064
332922
|
if (installedVersion === version6)
|
|
332065
332923
|
return { bin, installedVersion, source: "installed" };
|
|
332066
332924
|
input.log(`Installed engine at ${bin} reports ${installedVersion ?? "unknown"}; expected ${version6}. Reinstalling.`);
|
|
332067
|
-
await
|
|
332925
|
+
await rm20(installDir, { recursive: true, force: true });
|
|
332068
332926
|
}
|
|
332069
332927
|
const platform3 = input.platform ?? process.platform;
|
|
332070
332928
|
const arch = input.arch ?? process.arch;
|
|
@@ -332096,14 +332954,14 @@ async function ensureManagedEngine(input) {
|
|
|
332096
332954
|
await chmod6(partial2, 493);
|
|
332097
332955
|
const downloadedVersion = readBinaryVersion(partial2);
|
|
332098
332956
|
if (downloadedVersion !== version6) {
|
|
332099
|
-
await
|
|
332957
|
+
await rm20(partial2, { force: true });
|
|
332100
332958
|
throw new Error(`Downloaded OpenCode reports ${downloadedVersion ?? "no version"}; expected ${version6}.`);
|
|
332101
332959
|
}
|
|
332102
332960
|
await renameWithRetry(partial2, bin, { platform: platform3 });
|
|
332103
332961
|
input.log(`Installed OpenCode ${version6} to ${bin}`);
|
|
332104
332962
|
return { bin, installedVersion: downloadedVersion, source: "downloaded" };
|
|
332105
332963
|
} finally {
|
|
332106
|
-
await
|
|
332964
|
+
await rm20(stagingDir, { recursive: true, force: true });
|
|
332107
332965
|
}
|
|
332108
332966
|
}
|
|
332109
332967
|
function opencodeGlobalConfigDir(env, home = homedir11()) {
|
|
@@ -332140,7 +332998,7 @@ async function seedOpencodePluginDepsInner(input) {
|
|
|
332140
332998
|
return { seeded: false, reason: "failed", error: error48 instanceof Error ? error48.message : String(error48) };
|
|
332141
332999
|
} finally {
|
|
332142
333000
|
if (staging)
|
|
332143
|
-
await
|
|
333001
|
+
await rm20(staging, { recursive: true, force: true }).catch(() => {
|
|
332144
333002
|
return;
|
|
332145
333003
|
});
|
|
332146
333004
|
}
|
|
@@ -332228,7 +333086,7 @@ function readInstalledOpencodeVersion() {
|
|
|
332228
333086
|
// package.json
|
|
332229
333087
|
var package_default2 = {
|
|
332230
333088
|
name: "openwork-server",
|
|
332231
|
-
version: "0.18.
|
|
333089
|
+
version: "0.18.62",
|
|
332232
333090
|
description: "Filesystem-backed API for OpenWork remote clients",
|
|
332233
333091
|
type: "module",
|
|
332234
333092
|
bin: {
|
|
@@ -332246,7 +333104,7 @@ var package_default2 = {
|
|
|
332246
333104
|
"publish:npm": "pnpm build && pnpm build:npm-bundle && pnpm build:web-ui && node scripts/build-opencode-plugin-deps.mjs && node scripts/publish-npm.mjs",
|
|
332247
333105
|
start: "bun dist/cli.js",
|
|
332248
333106
|
typecheck: "tsc -p tsconfig.json --noEmit",
|
|
332249
|
-
"test:readiness": "bun test test/opencode-stop-fence.test.ts test/opencode-v2-mcp-readiness.test.ts test/openwork-mcp-results-v2.test.ts test/openwork-session-groups.test.ts",
|
|
333107
|
+
"test:readiness": "bun test test/opencode-stop-fence.test.ts test/opencode-v2-mcp-readiness.test.ts test/openwork-mcp-results-v2.test.ts test/openwork-session-groups.test.ts test/opencode-v2-instructions.test.ts test/cloud-provider-sync-prompts.test.ts test/engine-v2-mcp-mapping.test.ts test/engine-v2-mcp-reconciliation.test.ts",
|
|
332250
333108
|
"test:fresh-install-engine": "bun test test/engine-fresh-install-default.test.ts",
|
|
332251
333109
|
"test:live-provider-sync": "bun test test/live-provider-sync.test.ts",
|
|
332252
333110
|
"test:history-migration": "bun test test/opencode-v2-staged-history.test.ts",
|
|
@@ -332295,7 +333153,7 @@ var package_default2 = {
|
|
|
332295
333153
|
htmlparser2: "8.0.2",
|
|
332296
333154
|
"jsonc-parser": "^3.2.1",
|
|
332297
333155
|
minimatch: "^10.2.5",
|
|
332298
|
-
undici: "6.
|
|
333156
|
+
undici: "6.29.1",
|
|
332299
333157
|
yaml: "^2.9.0",
|
|
332300
333158
|
zod: "^4.3.6",
|
|
332301
333159
|
"@openwork/computer-use": "workspace:*"
|
|
@@ -332312,11 +333170,14 @@ var package_default2 = {
|
|
|
332312
333170
|
"jpeg-js": "0.4.4",
|
|
332313
333171
|
typescript: "^5.6.3"
|
|
332314
333172
|
},
|
|
333173
|
+
engines: {
|
|
333174
|
+
node: ">=24.22.1 <25"
|
|
333175
|
+
},
|
|
332315
333176
|
packageManager: "pnpm@10.27.0"
|
|
332316
333177
|
};
|
|
332317
333178
|
// ../../constants.json
|
|
332318
333179
|
var constants_default2 = {
|
|
332319
|
-
opencodeVersion: "v1.18.
|
|
333180
|
+
opencodeVersion: "v1.18.33",
|
|
332320
333181
|
opencodeV2Version: "2.0.26"
|
|
332321
333182
|
};
|
|
332322
333183
|
|
|
@@ -332519,7 +333380,7 @@ if (args2.web) {
|
|
|
332519
333380
|
logger2.log("info", "Anyone who can reach this URL is signed in automatically. Keep it on a private network or pass --no-bootstrap-token.");
|
|
332520
333381
|
}
|
|
332521
333382
|
if (browserHost !== "localhost" && browserHost !== "127.0.0.1") {
|
|
332522
|
-
logger2.log("info", "Browsers require HTTPS for a non-localhost origin; put a TLS proxy (e.g. tailscale serve) in front.");
|
|
333383
|
+
logger2.log("info", "Browsers require HTTPS for a non-localhost origin; put a TLS proxy (e.g. tailscale serve) in front and pass its name with --allowed-hosts.");
|
|
332523
333384
|
}
|
|
332524
333385
|
if (args2.open)
|
|
332525
333386
|
openInBrowser(browserUrl);
|
|
@@ -332551,6 +333412,8 @@ if (args2.verbose) {
|
|
|
332551
333412
|
logger2.log("info", `Read-only: ${config2.readOnly ? "true" : "false"}`);
|
|
332552
333413
|
logger2.log("info", `Approval: ${config2.approval.mode} (${config2.approval.timeoutMs}ms)`);
|
|
332553
333414
|
logger2.log("info", `CORS origins: ${config2.corsOrigins.join(", ")}`);
|
|
333415
|
+
if (config2.allowedHosts)
|
|
333416
|
+
logger2.log("info", `Allowed hosts: loopback, IP addresses, ${[config2.host, ...config2.allowedHosts].join(", ")}`);
|
|
332554
333417
|
logger2.log("info", `Authorized roots: ${config2.authorizedRoots.join(", ")}`);
|
|
332555
333418
|
logger2.log("info", `Token source: ${config2.tokenSource}`);
|
|
332556
333419
|
logger2.log("info", `Host token source: ${config2.hostTokenSource}`);
|