@lakphy/local-router 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/entry.js CHANGED
@@ -4934,7 +4934,7 @@ var require_compile = __commonJS((exports) => {
4934
4934
  const schOrFunc = root2.refs[ref];
4935
4935
  if (schOrFunc)
4936
4936
  return schOrFunc;
4937
- let _sch = resolve6.call(this, root2, ref);
4937
+ let _sch = resolve4.call(this, root2, ref);
4938
4938
  if (_sch === undefined) {
4939
4939
  const schema = (_a21 = root2.localRefs) === null || _a21 === undefined ? undefined : _a21[ref];
4940
4940
  const { schemaId } = this.opts;
@@ -4961,7 +4961,7 @@ var require_compile = __commonJS((exports) => {
4961
4961
  function sameSchemaEnv(s1, s2) {
4962
4962
  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
4963
4963
  }
4964
- function resolve6(root2, ref) {
4964
+ function resolve4(root2, ref) {
4965
4965
  let sch;
4966
4966
  while (typeof (sch = this.refs[ref]) == "string")
4967
4967
  ref = sch;
@@ -5491,7 +5491,7 @@ var require_fast_uri = __commonJS((exports, module) => {
5491
5491
  }
5492
5492
  return uri;
5493
5493
  }
5494
- function resolve6(baseURI, relativeURI, options) {
5494
+ function resolve4(baseURI, relativeURI, options) {
5495
5495
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
5496
5496
  const resolved = resolveComponent(parse7(baseURI, schemelessOptions), parse7(relativeURI, schemelessOptions), schemelessOptions, true);
5497
5497
  schemelessOptions.skipEscape = true;
@@ -5719,7 +5719,7 @@ var require_fast_uri = __commonJS((exports, module) => {
5719
5719
  var fastUri = {
5720
5720
  SCHEMES,
5721
5721
  normalize,
5722
- resolve: resolve6,
5722
+ resolve: resolve4,
5723
5723
  resolveComponent,
5724
5724
  equal,
5725
5725
  serialize,
@@ -5856,7 +5856,7 @@ var require_core = __commonJS((exports) => {
5856
5856
  opts = this.opts = { ...opts, ...requiredOptions(opts) };
5857
5857
  const { es5, lines } = this.opts.code;
5858
5858
  this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });
5859
- this.logger = getLogger2(opts.logger);
5859
+ this.logger = getLogger(opts.logger);
5860
5860
  const formatOpt = opts.validateFormats;
5861
5861
  opts.validateFormats = false;
5862
5862
  this.RULES = (0, rules_1.getRules)();
@@ -6253,7 +6253,7 @@ var require_core = __commonJS((exports) => {
6253
6253
  return metaOpts;
6254
6254
  }
6255
6255
  var noLogs = { log() {}, warn() {}, error() {} };
6256
- function getLogger2(logger) {
6256
+ function getLogger(logger) {
6257
6257
  if (logger === false)
6258
6258
  return noLogs;
6259
6259
  if (logger === undefined)
@@ -40602,6 +40602,267 @@ function createOpenAICompatible(options) {
40602
40602
  provider.imageModel = createImageModel;
40603
40603
  return provider;
40604
40604
  }
40605
+
40606
+ // node_modules/.bun/hono@4.12.5/node_modules/hono/dist/utils/html.js
40607
+ var HtmlEscapedCallbackPhase = {
40608
+ Stringify: 1,
40609
+ BeforeStream: 2,
40610
+ Stream: 3
40611
+ };
40612
+ var raw = (value, callbacks) => {
40613
+ const escapedString = new String(value);
40614
+ escapedString.isEscaped = true;
40615
+ escapedString.callbacks = callbacks;
40616
+ return escapedString;
40617
+ };
40618
+ var escapeRe = /[&<>'"]/;
40619
+ var stringBufferToString = async (buffer, callbacks) => {
40620
+ let str = "";
40621
+ callbacks ||= [];
40622
+ const resolvedBuffer = await Promise.all(buffer);
40623
+ for (let i = resolvedBuffer.length - 1;; i--) {
40624
+ str += resolvedBuffer[i];
40625
+ i--;
40626
+ if (i < 0) {
40627
+ break;
40628
+ }
40629
+ let r = resolvedBuffer[i];
40630
+ if (typeof r === "object") {
40631
+ callbacks.push(...r.callbacks || []);
40632
+ }
40633
+ const isEscaped = r.isEscaped;
40634
+ r = await (typeof r === "object" ? r.toString() : r);
40635
+ if (typeof r === "object") {
40636
+ callbacks.push(...r.callbacks || []);
40637
+ }
40638
+ if (r.isEscaped ?? isEscaped) {
40639
+ str += r;
40640
+ } else {
40641
+ const buf = [str];
40642
+ escapeToBuffer(r, buf);
40643
+ str = buf[0];
40644
+ }
40645
+ }
40646
+ return raw(str, callbacks);
40647
+ };
40648
+ var escapeToBuffer = (str, buffer) => {
40649
+ const match = str.search(escapeRe);
40650
+ if (match === -1) {
40651
+ buffer[0] += str;
40652
+ return;
40653
+ }
40654
+ let escape2;
40655
+ let index;
40656
+ let lastIndex = 0;
40657
+ for (index = match;index < str.length; index++) {
40658
+ switch (str.charCodeAt(index)) {
40659
+ case 34:
40660
+ escape2 = "&quot;";
40661
+ break;
40662
+ case 39:
40663
+ escape2 = "&#39;";
40664
+ break;
40665
+ case 38:
40666
+ escape2 = "&amp;";
40667
+ break;
40668
+ case 60:
40669
+ escape2 = "&lt;";
40670
+ break;
40671
+ case 62:
40672
+ escape2 = "&gt;";
40673
+ break;
40674
+ default:
40675
+ continue;
40676
+ }
40677
+ buffer[0] += str.substring(lastIndex, index) + escape2;
40678
+ lastIndex = index + 1;
40679
+ }
40680
+ buffer[0] += str.substring(lastIndex, index);
40681
+ };
40682
+ var resolveCallbackSync = (str) => {
40683
+ const callbacks = str.callbacks;
40684
+ if (!callbacks?.length) {
40685
+ return str;
40686
+ }
40687
+ const buffer = [str];
40688
+ const context = {};
40689
+ callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));
40690
+ return buffer[0];
40691
+ };
40692
+ var resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {
40693
+ if (typeof str === "object" && !(str instanceof String)) {
40694
+ if (!(str instanceof Promise)) {
40695
+ str = str.toString();
40696
+ }
40697
+ if (str instanceof Promise) {
40698
+ str = await str;
40699
+ }
40700
+ }
40701
+ const callbacks = str.callbacks;
40702
+ if (!callbacks?.length) {
40703
+ return Promise.resolve(str);
40704
+ }
40705
+ if (buffer) {
40706
+ buffer[0] += str;
40707
+ } else {
40708
+ buffer = [str];
40709
+ }
40710
+ const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then((res) => Promise.all(res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))).then(() => buffer[0]));
40711
+ if (preserveCallbacks) {
40712
+ return raw(await resStr, callbacks);
40713
+ } else {
40714
+ return resStr;
40715
+ }
40716
+ };
40717
+
40718
+ // node_modules/.bun/hono@4.12.5/node_modules/hono/dist/helper/html/index.js
40719
+ var html = (strings, ...values) => {
40720
+ const buffer = [""];
40721
+ for (let i = 0, len = strings.length - 1;i < len; i++) {
40722
+ buffer[0] += strings[i];
40723
+ const children = Array.isArray(values[i]) ? values[i].flat(Infinity) : [values[i]];
40724
+ for (let i2 = 0, len2 = children.length;i2 < len2; i2++) {
40725
+ const child = children[i2];
40726
+ if (typeof child === "string") {
40727
+ escapeToBuffer(child, buffer);
40728
+ } else if (typeof child === "number") {
40729
+ buffer[0] += child;
40730
+ } else if (typeof child === "boolean" || child === null || child === undefined) {
40731
+ continue;
40732
+ } else if (typeof child === "object" && child.isEscaped) {
40733
+ if (child.callbacks) {
40734
+ buffer.unshift("", child);
40735
+ } else {
40736
+ const tmp = child.toString();
40737
+ if (tmp instanceof Promise) {
40738
+ buffer.unshift("", tmp);
40739
+ } else {
40740
+ buffer[0] += tmp;
40741
+ }
40742
+ }
40743
+ } else if (child instanceof Promise) {
40744
+ buffer.unshift("", child);
40745
+ } else {
40746
+ escapeToBuffer(child.toString(), buffer);
40747
+ }
40748
+ }
40749
+ }
40750
+ buffer[0] += strings.at(-1);
40751
+ return buffer.length === 1 ? "callbacks" in buffer ? raw(resolveCallbackSync(raw(buffer[0], buffer.callbacks))) : raw(buffer[0]) : stringBufferToString(buffer, buffer.callbacks);
40752
+ };
40753
+
40754
+ // node_modules/.bun/@hono+swagger-ui@0.5.3+bac6debbfb5ded19/node_modules/@hono/swagger-ui/dist/index.js
40755
+ var RENDER_TYPE = {
40756
+ STRING_ARRAY: "string_array",
40757
+ STRING: "string",
40758
+ JSON_STRING: "json_string",
40759
+ RAW: "raw"
40760
+ };
40761
+ var RENDER_TYPE_MAP = {
40762
+ configUrl: RENDER_TYPE.STRING,
40763
+ deepLinking: RENDER_TYPE.RAW,
40764
+ presets: RENDER_TYPE.STRING_ARRAY,
40765
+ plugins: RENDER_TYPE.STRING_ARRAY,
40766
+ spec: RENDER_TYPE.JSON_STRING,
40767
+ url: RENDER_TYPE.STRING,
40768
+ urls: RENDER_TYPE.JSON_STRING,
40769
+ layout: RENDER_TYPE.STRING,
40770
+ docExpansion: RENDER_TYPE.STRING,
40771
+ maxDisplayedTags: RENDER_TYPE.RAW,
40772
+ operationsSorter: RENDER_TYPE.RAW,
40773
+ requestInterceptor: RENDER_TYPE.RAW,
40774
+ responseInterceptor: RENDER_TYPE.RAW,
40775
+ persistAuthorization: RENDER_TYPE.RAW,
40776
+ defaultModelsExpandDepth: RENDER_TYPE.RAW,
40777
+ defaultModelExpandDepth: RENDER_TYPE.RAW,
40778
+ defaultModelRendering: RENDER_TYPE.STRING,
40779
+ displayRequestDuration: RENDER_TYPE.RAW,
40780
+ filter: RENDER_TYPE.RAW,
40781
+ showExtensions: RENDER_TYPE.RAW,
40782
+ showCommonExtensions: RENDER_TYPE.RAW,
40783
+ queryConfigEnabled: RENDER_TYPE.RAW,
40784
+ displayOperationId: RENDER_TYPE.RAW,
40785
+ tagsSorter: RENDER_TYPE.RAW,
40786
+ onComplete: RENDER_TYPE.RAW,
40787
+ syntaxHighlight: RENDER_TYPE.JSON_STRING,
40788
+ tryItOutEnabled: RENDER_TYPE.RAW,
40789
+ requestSnippetsEnabled: RENDER_TYPE.RAW,
40790
+ requestSnippets: RENDER_TYPE.JSON_STRING,
40791
+ oauth2RedirectUrl: RENDER_TYPE.STRING,
40792
+ showMutabledRequest: RENDER_TYPE.RAW,
40793
+ request: RENDER_TYPE.JSON_STRING,
40794
+ supportedSubmitMethods: RENDER_TYPE.JSON_STRING,
40795
+ validatorUrl: RENDER_TYPE.STRING,
40796
+ withCredentials: RENDER_TYPE.RAW,
40797
+ modelPropertyMacro: RENDER_TYPE.RAW,
40798
+ parameterMacro: RENDER_TYPE.RAW
40799
+ };
40800
+ var renderSwaggerUIOptions = (options) => {
40801
+ return Object.entries(options).map(([k, v]) => {
40802
+ const key = k;
40803
+ if (!RENDER_TYPE_MAP[key] || v === undefined)
40804
+ return "";
40805
+ switch (RENDER_TYPE_MAP[key]) {
40806
+ case RENDER_TYPE.STRING:
40807
+ return `${key}: '${v}'`;
40808
+ case RENDER_TYPE.STRING_ARRAY:
40809
+ if (!Array.isArray(v))
40810
+ return "";
40811
+ return `${key}: [${v.map((ve) => `${ve}`).join(",")}]`;
40812
+ case RENDER_TYPE.JSON_STRING:
40813
+ return `${key}: ${JSON.stringify(v)}`;
40814
+ case RENDER_TYPE.RAW:
40815
+ return `${key}: ${v}`;
40816
+ default:
40817
+ return "";
40818
+ }
40819
+ }).filter((item) => item !== "").join(",");
40820
+ };
40821
+ var remoteAssets = ({ version: version2 }) => {
40822
+ const url2 = `https://cdn.jsdelivr.net/npm/swagger-ui-dist${version2 !== undefined ? `@${version2}` : ""}`;
40823
+ return {
40824
+ css: [`${url2}/swagger-ui.css`],
40825
+ js: [`${url2}/swagger-ui-bundle.js`]
40826
+ };
40827
+ };
40828
+ var SwaggerUI = (options) => {
40829
+ const asset = remoteAssets({ version: options?.version });
40830
+ delete options.version;
40831
+ if (options.manuallySwaggerUIHtml)
40832
+ return options.manuallySwaggerUIHtml(asset);
40833
+ const optionsStrings = renderSwaggerUIOptions(options);
40834
+ return `
40835
+ <div>
40836
+ <div id="swagger-ui"></div>
40837
+ ${asset.css.map((url2) => html`<link rel="stylesheet" href="${url2}" />`)}
40838
+ ${asset.js.map((url2) => html`<script src="${url2}" crossorigin="anonymous"><\/script>`)}
40839
+ <script>
40840
+ window.onload = () => {
40841
+ window.ui = SwaggerUIBundle({
40842
+ dom_id: '#swagger-ui',${optionsStrings},
40843
+ })
40844
+ }
40845
+ </script>
40846
+ </div>
40847
+ `;
40848
+ };
40849
+ var middleware = (options) => async (c) => {
40850
+ const title = options?.title ?? "SwaggerUI";
40851
+ return c.html(`
40852
+ <!doctype html>
40853
+ <html lang="en">
40854
+ <head>
40855
+ <meta charset="utf-8" />
40856
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
40857
+ <meta name="description" content="SwaggerUI" />
40858
+ <title>${title}</title>
40859
+ </head>
40860
+ <body>
40861
+ ${SwaggerUI(options)}
40862
+ </body>
40863
+ </html>
40864
+ `);
40865
+ };
40605
40866
  // node_modules/.bun/@ai-sdk+gateway@3.0.66+3c5d820c62823f0b/node_modules/@ai-sdk/gateway/dist/index.mjs
40606
40867
  var import_oidc = __toESM(require_dist(), 1);
40607
40868
  var import_oidc2 = __toESM(require_dist(), 1);
@@ -48100,267 +48361,6 @@ var _a20;
48100
48361
  _a20 = symbol20;
48101
48362
  var defaultDownload2 = createDownload();
48102
48363
 
48103
- // node_modules/.bun/hono@4.12.5/node_modules/hono/dist/utils/html.js
48104
- var HtmlEscapedCallbackPhase = {
48105
- Stringify: 1,
48106
- BeforeStream: 2,
48107
- Stream: 3
48108
- };
48109
- var raw = (value, callbacks) => {
48110
- const escapedString = new String(value);
48111
- escapedString.isEscaped = true;
48112
- escapedString.callbacks = callbacks;
48113
- return escapedString;
48114
- };
48115
- var escapeRe = /[&<>'"]/;
48116
- var stringBufferToString = async (buffer, callbacks) => {
48117
- let str = "";
48118
- callbacks ||= [];
48119
- const resolvedBuffer = await Promise.all(buffer);
48120
- for (let i = resolvedBuffer.length - 1;; i--) {
48121
- str += resolvedBuffer[i];
48122
- i--;
48123
- if (i < 0) {
48124
- break;
48125
- }
48126
- let r = resolvedBuffer[i];
48127
- if (typeof r === "object") {
48128
- callbacks.push(...r.callbacks || []);
48129
- }
48130
- const isEscaped = r.isEscaped;
48131
- r = await (typeof r === "object" ? r.toString() : r);
48132
- if (typeof r === "object") {
48133
- callbacks.push(...r.callbacks || []);
48134
- }
48135
- if (r.isEscaped ?? isEscaped) {
48136
- str += r;
48137
- } else {
48138
- const buf = [str];
48139
- escapeToBuffer(r, buf);
48140
- str = buf[0];
48141
- }
48142
- }
48143
- return raw(str, callbacks);
48144
- };
48145
- var escapeToBuffer = (str, buffer) => {
48146
- const match = str.search(escapeRe);
48147
- if (match === -1) {
48148
- buffer[0] += str;
48149
- return;
48150
- }
48151
- let escape2;
48152
- let index;
48153
- let lastIndex = 0;
48154
- for (index = match;index < str.length; index++) {
48155
- switch (str.charCodeAt(index)) {
48156
- case 34:
48157
- escape2 = "&quot;";
48158
- break;
48159
- case 39:
48160
- escape2 = "&#39;";
48161
- break;
48162
- case 38:
48163
- escape2 = "&amp;";
48164
- break;
48165
- case 60:
48166
- escape2 = "&lt;";
48167
- break;
48168
- case 62:
48169
- escape2 = "&gt;";
48170
- break;
48171
- default:
48172
- continue;
48173
- }
48174
- buffer[0] += str.substring(lastIndex, index) + escape2;
48175
- lastIndex = index + 1;
48176
- }
48177
- buffer[0] += str.substring(lastIndex, index);
48178
- };
48179
- var resolveCallbackSync = (str) => {
48180
- const callbacks = str.callbacks;
48181
- if (!callbacks?.length) {
48182
- return str;
48183
- }
48184
- const buffer = [str];
48185
- const context2 = {};
48186
- callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context: context2 }));
48187
- return buffer[0];
48188
- };
48189
- var resolveCallback = async (str, phase, preserveCallbacks, context2, buffer) => {
48190
- if (typeof str === "object" && !(str instanceof String)) {
48191
- if (!(str instanceof Promise)) {
48192
- str = str.toString();
48193
- }
48194
- if (str instanceof Promise) {
48195
- str = await str;
48196
- }
48197
- }
48198
- const callbacks = str.callbacks;
48199
- if (!callbacks?.length) {
48200
- return Promise.resolve(str);
48201
- }
48202
- if (buffer) {
48203
- buffer[0] += str;
48204
- } else {
48205
- buffer = [str];
48206
- }
48207
- const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context: context2 }))).then((res) => Promise.all(res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context2, buffer))).then(() => buffer[0]));
48208
- if (preserveCallbacks) {
48209
- return raw(await resStr, callbacks);
48210
- } else {
48211
- return resStr;
48212
- }
48213
- };
48214
-
48215
- // node_modules/.bun/hono@4.12.5/node_modules/hono/dist/helper/html/index.js
48216
- var html = (strings, ...values) => {
48217
- const buffer = [""];
48218
- for (let i = 0, len = strings.length - 1;i < len; i++) {
48219
- buffer[0] += strings[i];
48220
- const children = Array.isArray(values[i]) ? values[i].flat(Infinity) : [values[i]];
48221
- for (let i2 = 0, len2 = children.length;i2 < len2; i2++) {
48222
- const child = children[i2];
48223
- if (typeof child === "string") {
48224
- escapeToBuffer(child, buffer);
48225
- } else if (typeof child === "number") {
48226
- buffer[0] += child;
48227
- } else if (typeof child === "boolean" || child === null || child === undefined) {
48228
- continue;
48229
- } else if (typeof child === "object" && child.isEscaped) {
48230
- if (child.callbacks) {
48231
- buffer.unshift("", child);
48232
- } else {
48233
- const tmp = child.toString();
48234
- if (tmp instanceof Promise) {
48235
- buffer.unshift("", tmp);
48236
- } else {
48237
- buffer[0] += tmp;
48238
- }
48239
- }
48240
- } else if (child instanceof Promise) {
48241
- buffer.unshift("", child);
48242
- } else {
48243
- escapeToBuffer(child.toString(), buffer);
48244
- }
48245
- }
48246
- }
48247
- buffer[0] += strings.at(-1);
48248
- return buffer.length === 1 ? "callbacks" in buffer ? raw(resolveCallbackSync(raw(buffer[0], buffer.callbacks))) : raw(buffer[0]) : stringBufferToString(buffer, buffer.callbacks);
48249
- };
48250
-
48251
- // node_modules/.bun/@hono+swagger-ui@0.5.3+bac6debbfb5ded19/node_modules/@hono/swagger-ui/dist/index.js
48252
- var RENDER_TYPE = {
48253
- STRING_ARRAY: "string_array",
48254
- STRING: "string",
48255
- JSON_STRING: "json_string",
48256
- RAW: "raw"
48257
- };
48258
- var RENDER_TYPE_MAP = {
48259
- configUrl: RENDER_TYPE.STRING,
48260
- deepLinking: RENDER_TYPE.RAW,
48261
- presets: RENDER_TYPE.STRING_ARRAY,
48262
- plugins: RENDER_TYPE.STRING_ARRAY,
48263
- spec: RENDER_TYPE.JSON_STRING,
48264
- url: RENDER_TYPE.STRING,
48265
- urls: RENDER_TYPE.JSON_STRING,
48266
- layout: RENDER_TYPE.STRING,
48267
- docExpansion: RENDER_TYPE.STRING,
48268
- maxDisplayedTags: RENDER_TYPE.RAW,
48269
- operationsSorter: RENDER_TYPE.RAW,
48270
- requestInterceptor: RENDER_TYPE.RAW,
48271
- responseInterceptor: RENDER_TYPE.RAW,
48272
- persistAuthorization: RENDER_TYPE.RAW,
48273
- defaultModelsExpandDepth: RENDER_TYPE.RAW,
48274
- defaultModelExpandDepth: RENDER_TYPE.RAW,
48275
- defaultModelRendering: RENDER_TYPE.STRING,
48276
- displayRequestDuration: RENDER_TYPE.RAW,
48277
- filter: RENDER_TYPE.RAW,
48278
- showExtensions: RENDER_TYPE.RAW,
48279
- showCommonExtensions: RENDER_TYPE.RAW,
48280
- queryConfigEnabled: RENDER_TYPE.RAW,
48281
- displayOperationId: RENDER_TYPE.RAW,
48282
- tagsSorter: RENDER_TYPE.RAW,
48283
- onComplete: RENDER_TYPE.RAW,
48284
- syntaxHighlight: RENDER_TYPE.JSON_STRING,
48285
- tryItOutEnabled: RENDER_TYPE.RAW,
48286
- requestSnippetsEnabled: RENDER_TYPE.RAW,
48287
- requestSnippets: RENDER_TYPE.JSON_STRING,
48288
- oauth2RedirectUrl: RENDER_TYPE.STRING,
48289
- showMutabledRequest: RENDER_TYPE.RAW,
48290
- request: RENDER_TYPE.JSON_STRING,
48291
- supportedSubmitMethods: RENDER_TYPE.JSON_STRING,
48292
- validatorUrl: RENDER_TYPE.STRING,
48293
- withCredentials: RENDER_TYPE.RAW,
48294
- modelPropertyMacro: RENDER_TYPE.RAW,
48295
- parameterMacro: RENDER_TYPE.RAW
48296
- };
48297
- var renderSwaggerUIOptions = (options) => {
48298
- return Object.entries(options).map(([k, v]) => {
48299
- const key = k;
48300
- if (!RENDER_TYPE_MAP[key] || v === undefined)
48301
- return "";
48302
- switch (RENDER_TYPE_MAP[key]) {
48303
- case RENDER_TYPE.STRING:
48304
- return `${key}: '${v}'`;
48305
- case RENDER_TYPE.STRING_ARRAY:
48306
- if (!Array.isArray(v))
48307
- return "";
48308
- return `${key}: [${v.map((ve) => `${ve}`).join(",")}]`;
48309
- case RENDER_TYPE.JSON_STRING:
48310
- return `${key}: ${JSON.stringify(v)}`;
48311
- case RENDER_TYPE.RAW:
48312
- return `${key}: ${v}`;
48313
- default:
48314
- return "";
48315
- }
48316
- }).filter((item) => item !== "").join(",");
48317
- };
48318
- var remoteAssets = ({ version: version2 }) => {
48319
- const url2 = `https://cdn.jsdelivr.net/npm/swagger-ui-dist${version2 !== undefined ? `@${version2}` : ""}`;
48320
- return {
48321
- css: [`${url2}/swagger-ui.css`],
48322
- js: [`${url2}/swagger-ui-bundle.js`]
48323
- };
48324
- };
48325
- var SwaggerUI = (options) => {
48326
- const asset = remoteAssets({ version: options?.version });
48327
- delete options.version;
48328
- if (options.manuallySwaggerUIHtml)
48329
- return options.manuallySwaggerUIHtml(asset);
48330
- const optionsStrings = renderSwaggerUIOptions(options);
48331
- return `
48332
- <div>
48333
- <div id="swagger-ui"></div>
48334
- ${asset.css.map((url2) => html`<link rel="stylesheet" href="${url2}" />`)}
48335
- ${asset.js.map((url2) => html`<script src="${url2}" crossorigin="anonymous"><\/script>`)}
48336
- <script>
48337
- window.onload = () => {
48338
- window.ui = SwaggerUIBundle({
48339
- dom_id: '#swagger-ui',${optionsStrings},
48340
- })
48341
- }
48342
- </script>
48343
- </div>
48344
- `;
48345
- };
48346
- var middleware = (options) => async (c) => {
48347
- const title = options?.title ?? "SwaggerUI";
48348
- return c.html(`
48349
- <!doctype html>
48350
- <html lang="en">
48351
- <head>
48352
- <meta charset="utf-8" />
48353
- <meta name="viewport" content="width=device-width, initial-scale=1" />
48354
- <meta name="description" content="SwaggerUI" />
48355
- <title>${title}</title>
48356
- </head>
48357
- <body>
48358
- ${SwaggerUI(options)}
48359
- </body>
48360
- </html>
48361
- `);
48362
- };
48363
-
48364
48364
  // node_modules/.bun/hono@4.12.5/node_modules/hono/dist/compose.js
48365
48365
  var compose = (middleware2, onError, onNotFound) => {
48366
48366
  return (context2, next) => {
@@ -51277,6 +51277,14 @@ var DEFAULT_CONFIG = `{
51277
51277
  // },
51278
51278
  },
51279
51279
 
51280
+ // \u901A\u7528\u670D\u52A1\u8BBE\u7F6E
51281
+ server: {
51282
+ // \u9ED8\u8BA4\u5173\u95ED\u5C40\u57DF\u7F51\u8BBF\u95EE\u3002\u5F00\u542F\u540E\uFF0C\u5C40\u57DF\u7F51\u5185\u5176\u4ED6\u8BBE\u5907\u53EF\u8BBF\u95EE\u672C\u670D\u52A1\u3002
51283
+ lanAccess: {
51284
+ enabled: false,
51285
+ },
51286
+ },
51287
+
51280
51288
  // \u65E5\u5FD7\u914D\u7F6E\uFF08\u53EF\u9009\uFF0C\u4E0D\u914D\u7F6E\u5219\u4E0D\u542F\u7528\u65E5\u5FD7\u8BB0\u5F55\uFF09
51281
51289
  // log: {
51282
51290
  // enabled: true,
@@ -51347,8 +51355,8 @@ function resolveLogBaseDir(logConfig) {
51347
51355
  }
51348
51356
 
51349
51357
  // src/config-store.ts
51350
- import { resolve as resolve3 } from "path";
51351
51358
  import { writeFileSync as writeFileSync2 } from "fs";
51359
+ import { resolve as resolve3 } from "path";
51352
51360
  class ConfigStore {
51353
51361
  config;
51354
51362
  absolutePath;
@@ -51384,6 +51392,51 @@ class ConfigStore {
51384
51392
  }
51385
51393
  }
51386
51394
 
51395
+ // src/config-validate.ts
51396
+ var import__2020 = __toESM(require_2020(), 1);
51397
+ var import_ajv_formats = __toESM(require_dist2(), 1);
51398
+ import { readFileSync as readFileSync2 } from "fs";
51399
+
51400
+ // src/runtime-assets.ts
51401
+ import { fileURLToPath } from "url";
51402
+ function resolveBundledAssetPath(relativePath) {
51403
+ return fileURLToPath(new URL(relativePath, import.meta.url));
51404
+ }
51405
+ function getBundledSchemaPath() {
51406
+ return resolveBundledAssetPath("../config.schema.json");
51407
+ }
51408
+ function getBundledWebRoot() {
51409
+ return resolveBundledAssetPath("../dist/web/");
51410
+ }
51411
+
51412
+ // src/config-validate.ts
51413
+ function validateBusinessRules(config2) {
51414
+ for (const [routeType, modelMap] of Object.entries(config2.routes)) {
51415
+ if (!modelMap["*"]) {
51416
+ throw new Error(`\u8DEF\u7531 "${routeType}" \u7F3A\u5C11 "*" \u515C\u5E95\u89C4\u5219`);
51417
+ }
51418
+ for (const target of Object.values(modelMap)) {
51419
+ if (!config2.providers[target.provider]) {
51420
+ throw new Error(`\u8DEF\u7531 "${routeType}" \u5F15\u7528\u4E86\u4E0D\u5B58\u5728\u7684 provider "${target.provider}"`);
51421
+ }
51422
+ }
51423
+ }
51424
+ }
51425
+ function validateConfigOrThrow(config2) {
51426
+ validateBusinessRules(config2);
51427
+ const ajv = new import__2020.default({ allErrors: true, strict: false });
51428
+ import_ajv_formats.default(ajv);
51429
+ const schemaJson = JSON.parse(readFileSync2(getBundledSchemaPath(), "utf-8"));
51430
+ const validateBySchema = ajv.compile(schemaJson);
51431
+ const valid = validateBySchema(config2);
51432
+ if (!valid) {
51433
+ const firstError = validateBySchema.errors?.[0];
51434
+ const path = firstError?.instancePath || "(root)";
51435
+ const message = firstError?.message ?? "unknown schema validation error";
51436
+ throw new Error(`Schema \u6821\u9A8C\u5931\u8D25: ${path} ${message}`);
51437
+ }
51438
+ }
51439
+
51387
51440
  // src/crypto.ts
51388
51441
  var ECDH_PARAMS = { name: "ECDH", namedCurve: "P-256" };
51389
51442
  function base64Encode(buf) {
@@ -51736,7 +51789,7 @@ async function getLogMetrics(options) {
51736
51789
  }
51737
51790
 
51738
51791
  // src/log-query.ts
51739
- import { createReadStream as createReadStream2, existsSync as existsSync3, readFileSync as readFileSync2 } from "fs";
51792
+ import { createReadStream as createReadStream2, existsSync as existsSync3, readFileSync as readFileSync3 } from "fs";
51740
51793
  import { join as join4, resolve as resolve4 } from "path";
51741
51794
  import { createInterface as createInterface2 } from "readline";
51742
51795
 
@@ -51768,7 +51821,26 @@ function extractUserIdRawFromRequestBody(requestBody) {
51768
51821
  userIdRaw: userId
51769
51822
  };
51770
51823
  }
51824
+ function parseUserSessionFromJsonFormat(userIdRaw) {
51825
+ let parsed;
51826
+ try {
51827
+ parsed = JSON.parse(userIdRaw);
51828
+ } catch {
51829
+ return null;
51830
+ }
51831
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
51832
+ return null;
51833
+ const obj = parsed;
51834
+ const sessionId = typeof obj.session_id === "string" ? obj.session_id.trim() : "";
51835
+ if (!sessionId)
51836
+ return null;
51837
+ const userKey = (typeof obj.account_uuid === "string" ? obj.account_uuid.trim() : "") || (typeof obj.device_id === "string" ? obj.device_id.trim() : "");
51838
+ return { userKey: userKey || sessionId, sessionId };
51839
+ }
51771
51840
  function parseUserSessionFromUserIdRaw(userIdRaw) {
51841
+ if (userIdRaw.trimStart().startsWith("{")) {
51842
+ return parseUserSessionFromJsonFormat(userIdRaw);
51843
+ }
51772
51844
  const index = userIdRaw.indexOf(USER_SESSION_DELIMITER);
51773
51845
  if (index <= 0)
51774
51846
  return null;
@@ -52077,7 +52149,7 @@ function readStreamContent(baseDir, streamFile) {
52077
52149
  return { content: null, warning: "stream_file \u4E0D\u662F .sse.raw \u6587\u4EF6\uFF0C\u5DF2\u8DF3\u8FC7\u8BFB\u53D6\u3002" };
52078
52150
  }
52079
52151
  if (existsSync3(resolvedFromFile)) {
52080
- return { content: readFileSync2(resolvedFromFile, "utf-8"), warning: null };
52152
+ return { content: readFileSync3(resolvedFromFile, "utf-8"), warning: null };
52081
52153
  }
52082
52154
  const fallbackPath = resolve4(resolvedBase, streamFile);
52083
52155
  if (!fallbackPath.startsWith(`${resolvedBase}/`) && fallbackPath !== resolvedBase) {
@@ -52086,7 +52158,7 @@ function readStreamContent(baseDir, streamFile) {
52086
52158
  if (!existsSync3(fallbackPath)) {
52087
52159
  return { content: null, warning: "stream_file \u4E0D\u5B58\u5728\uFF0C\u53EF\u80FD\u5DF2\u88AB\u6E05\u7406\u3002" };
52088
52160
  }
52089
- return { content: readFileSync2(fallbackPath, "utf-8"), warning: null };
52161
+ return { content: readFileSync3(fallbackPath, "utf-8"), warning: null };
52090
52162
  } catch (err) {
52091
52163
  return {
52092
52164
  content: null,
@@ -52975,6 +53047,85 @@ function normalizeUrl(rawUrl) {
52975
53047
  return rawUrl;
52976
53048
  }
52977
53049
 
53050
+ // src/network-access.ts
53051
+ var REMOTE_ADDRESS_ENV_KEY = "LOCAL_ROUTER_REMOTE_ADDRESS";
53052
+ function parseIpv4(address) {
53053
+ const parts = address.split(".");
53054
+ if (parts.length !== 4)
53055
+ return null;
53056
+ const octets = parts.map((part) => {
53057
+ if (!/^\d{1,3}$/.test(part))
53058
+ return Number.NaN;
53059
+ const value = Number.parseInt(part, 10);
53060
+ return value >= 0 && value <= 255 ? value : Number.NaN;
53061
+ });
53062
+ return octets.every(Number.isFinite) ? octets : null;
53063
+ }
53064
+ function normalizeIpAddress(raw2) {
53065
+ let address = raw2.trim().toLowerCase();
53066
+ if (address.startsWith("[")) {
53067
+ const end = address.indexOf("]");
53068
+ if (end !== -1)
53069
+ address = address.slice(1, end);
53070
+ }
53071
+ const mappedIpv4 = address.match(/^::ffff:(\d{1,3}(?:\.\d{1,3}){3})$/);
53072
+ if (mappedIpv4) {
53073
+ return mappedIpv4[1];
53074
+ }
53075
+ return address;
53076
+ }
53077
+ function isLoopbackAddress(raw2) {
53078
+ if (!raw2)
53079
+ return false;
53080
+ const address = normalizeIpAddress(raw2);
53081
+ const ipv43 = parseIpv4(address);
53082
+ if (ipv43)
53083
+ return ipv43[0] === 127;
53084
+ return address === "::1";
53085
+ }
53086
+ function isLanAddress(raw2) {
53087
+ if (!raw2)
53088
+ return false;
53089
+ const address = normalizeIpAddress(raw2);
53090
+ const ipv43 = parseIpv4(address);
53091
+ if (ipv43) {
53092
+ const [a, b] = ipv43;
53093
+ return a === 10 || a === 172 && b >= 16 && b <= 31 || a === 192 && b === 168 || a === 169 && b === 254;
53094
+ }
53095
+ return address.startsWith("fc") || address.startsWith("fd") || /^fe[89ab]/.test(address);
53096
+ }
53097
+ function decideNetworkAccess(serverConfig, rawRemoteAddress) {
53098
+ const remoteAddress = rawRemoteAddress ? normalizeIpAddress(rawRemoteAddress) : null;
53099
+ if (!remoteAddress || isLoopbackAddress(remoteAddress)) {
53100
+ return { allowed: true, remoteAddress };
53101
+ }
53102
+ const lanEnabled = serverConfig?.lanAccess?.enabled === true;
53103
+ if (!lanEnabled) {
53104
+ return { allowed: false, remoteAddress, reason: "lan-disabled" };
53105
+ }
53106
+ if (!isLanAddress(remoteAddress)) {
53107
+ return { allowed: false, remoteAddress, reason: "non-lan-address" };
53108
+ }
53109
+ return { allowed: true, remoteAddress };
53110
+ }
53111
+ function getRemoteAddressFromContext(c2) {
53112
+ const env = c2.env;
53113
+ const value = env?.[REMOTE_ADDRESS_ENV_KEY];
53114
+ return typeof value === "string" && value.trim() ? value : null;
53115
+ }
53116
+ function createNetworkAccessMiddleware(store) {
53117
+ return async (c2, next) => {
53118
+ const decision = decideNetworkAccess(store.get().server, getRemoteAddressFromContext(c2));
53119
+ if (!decision.allowed) {
53120
+ return c2.json({
53121
+ error: decision.reason === "lan-disabled" ? "\u5C40\u57DF\u7F51\u670D\u52A1\u672A\u5F00\u542F\uFF0C\u5DF2\u62D2\u7EDD\u975E\u672C\u673A\u8BF7\u6C42" : "\u4EC5\u5141\u8BB8\u672C\u673A\u6216\u5C40\u57DF\u7F51\u6765\u6E90\u8BBF\u95EE",
53122
+ remoteAddress: decision.remoteAddress
53123
+ }, 403);
53124
+ }
53125
+ await next();
53126
+ };
53127
+ }
53128
+
52978
53129
  // src/openapi.ts
52979
53130
  var openAPISpec = {
52980
53131
  openapi: "3.0.0",
@@ -53423,7 +53574,9 @@ var openAPISpec = {
53423
53574
  type: "object",
53424
53575
  additionalProperties: { type: "string" }
53425
53576
  },
53426
- requestBody: { type: ["object", "array", "string", "number", "boolean", "null"] }
53577
+ requestBody: {
53578
+ type: ["object", "array", "string", "number", "boolean", "null"]
53579
+ }
53427
53580
  }
53428
53581
  },
53429
53582
  response: {
@@ -54077,9 +54230,9 @@ var openAPISpec = {
54077
54230
  };
54078
54231
 
54079
54232
  // src/plugin-loader.ts
54080
- import { resolve as resolve5, join as join8 } from "path";
54233
+ import { mkdtemp, rm, writeFile } from "fs/promises";
54081
54234
  import { tmpdir } from "os";
54082
- import { mkdtemp, writeFile, rm } from "fs/promises";
54235
+ import { join as join8, resolve as resolve5 } from "path";
54083
54236
  function isLocalPath(pkg) {
54084
54237
  return pkg.startsWith("./") || pkg.startsWith("../") || pkg.startsWith("/") || /^[A-Za-z]:[\\/]/.test(pkg);
54085
54238
  }
@@ -54154,13 +54307,17 @@ class PluginManager {
54154
54307
  constructor(configDir) {
54155
54308
  this.configDir = configDir;
54156
54309
  }
54157
- async loadPluginsForProvider(providerName, pluginConfigs) {
54310
+ async loadPluginsForProvider(providerName, providerConfig, pluginConfigs) {
54158
54311
  const loaded = [];
54159
54312
  const failures = [];
54160
54313
  for (const config2 of pluginConfigs) {
54161
54314
  try {
54162
54315
  const definition = await importPlugin(config2.package, this.configDir);
54163
- const instance2 = await definition.create(config2.params ?? {});
54316
+ const params = { ...config2.params ?? {} };
54317
+ if (definition.name === "protocol-adapter" && params.targetFormat === undefined) {
54318
+ params.targetFormat = providerConfig.type;
54319
+ }
54320
+ const instance2 = await definition.create(params);
54164
54321
  loaded.push({ config: config2, definition, instance: instance2 });
54165
54322
  } catch (err) {
54166
54323
  const errorMsg = err instanceof Error ? err.message : String(err);
@@ -54176,7 +54333,7 @@ class PluginManager {
54176
54333
  const oldPluginsToDispose = [];
54177
54334
  for (const [providerName, providerConfig] of Object.entries(providers)) {
54178
54335
  if (providerConfig.plugins && providerConfig.plugins.length > 0) {
54179
- const { loaded, failures } = await this.loadPluginsForProvider(providerName, providerConfig.plugins);
54336
+ const { loaded, failures } = await this.loadPluginsForProvider(providerName, providerConfig, providerConfig.plugins);
54180
54337
  allFailures.push(...failures);
54181
54338
  if (failures.length > 0) {
54182
54339
  console.warn(`[plugin] provider "${providerName}" \u6709\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25\uFF0C\u4FDD\u7559\u65E7\u63D2\u4EF6\u94FE`);
@@ -54245,19 +54402,12 @@ class PluginManager {
54245
54402
  }
54246
54403
  }
54247
54404
  }
54248
- async disposePluginMap(pluginMap) {
54249
- const allPlugins = [];
54250
- for (const [, loadedPlugins] of pluginMap) {
54251
- allPlugins.push(...loadedPlugins);
54252
- }
54253
- await this.disposePluginList(allPlugins);
54254
- }
54255
54405
  }
54256
54406
 
54257
54407
  // src/proxy.ts
54258
54408
  import { appendFile, readFile, unlink } from "fs/promises";
54259
- import { join as join9 } from "path";
54260
54409
  import { tmpdir as tmpdir2 } from "os";
54410
+ import { join as join9 } from "path";
54261
54411
 
54262
54412
  // src/plugin-engine.ts
54263
54413
  async function executeRequestPlugins(plugins, ctx, url2, headers, body) {
@@ -54768,47 +54918,34 @@ function createOpenaiResponsesRoutes(routeType, store, pluginManager) {
54768
54918
  return routes;
54769
54919
  }
54770
54920
 
54771
- // src/runtime-assets.ts
54772
- import { fileURLToPath } from "url";
54773
- function resolveBundledAssetPath(relativePath) {
54774
- return fileURLToPath(new URL(relativePath, import.meta.url));
54775
- }
54776
- function getBundledSchemaPath() {
54777
- return resolveBundledAssetPath("../config.schema.json");
54778
- }
54779
- function getBundledWebRoot() {
54780
- return resolveBundledAssetPath("../dist/web/");
54781
- }
54782
-
54783
- // src/config-validate.ts
54784
- var import__2020 = __toESM(require_2020(), 1);
54785
- var import_ajv_formats = __toESM(require_dist2(), 1);
54786
- import { readFileSync as readFileSync3 } from "fs";
54787
- function validateBusinessRules(config2) {
54788
- for (const [routeType, modelMap] of Object.entries(config2.routes)) {
54789
- if (!modelMap["*"]) {
54790
- throw new Error(`\u8DEF\u7531 "${routeType}" \u7F3A\u5C11 "*" \u515C\u5E95\u89C4\u5219`);
54791
- }
54792
- for (const target of Object.values(modelMap)) {
54793
- if (!config2.providers[target.provider]) {
54794
- throw new Error(`\u8DEF\u7531 "${routeType}" \u5F15\u7528\u4E86\u4E0D\u5B58\u5728\u7684 provider "${target.provider}"`);
54795
- }
54796
- }
54921
+ // src/server-address.ts
54922
+ function formatUrlHost(host) {
54923
+ const trimmed = host.trim();
54924
+ if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
54925
+ return trimmed;
54797
54926
  }
54927
+ return trimmed.includes(":") ? `[${trimmed}]` : trimmed;
54798
54928
  }
54799
- function validateConfigOrThrow(config2) {
54800
- validateBusinessRules(config2);
54801
- const ajv = new import__2020.default({ allErrors: true, strict: false });
54802
- import_ajv_formats.default(ajv);
54803
- const schemaJson = JSON.parse(readFileSync3(getBundledSchemaPath(), "utf-8"));
54804
- const validateBySchema = ajv.compile(schemaJson);
54805
- const valid = validateBySchema(config2);
54806
- if (!valid) {
54807
- const firstError = validateBySchema.errors?.[0];
54808
- const path = firstError?.instancePath || "(root)";
54809
- const message = firstError?.message ?? "unknown schema validation error";
54810
- throw new Error(`Schema \u6821\u9A8C\u5931\u8D25: ${path} ${message}`);
54929
+ function resolveLocalAccessHost(listenHost) {
54930
+ const host = listenHost.trim().toLowerCase();
54931
+ if (host === "0.0.0.0" || host === "") {
54932
+ return "127.0.0.1";
54933
+ }
54934
+ if (host === "::" || host === "[::]") {
54935
+ return "::1";
54811
54936
  }
54937
+ return listenHost.trim();
54938
+ }
54939
+ function createServerAddressInfo(listenHost, port) {
54940
+ const normalizedListenHost = listenHost.trim() || "0.0.0.0";
54941
+ const localHost = resolveLocalAccessHost(normalizedListenHost);
54942
+ return {
54943
+ listenHost: normalizedListenHost,
54944
+ localHost,
54945
+ port,
54946
+ listenUrl: `http://${formatUrlHost(normalizedListenHost)}:${port}`,
54947
+ localUrl: `http://${formatUrlHost(localHost)}:${port}`
54948
+ };
54812
54949
  }
54813
54950
 
54814
54951
  // src/index.ts
@@ -54850,13 +54987,18 @@ var ROUTE_REGISTRY = {
54850
54987
  create: createAnthropicMessagesRoutes
54851
54988
  }
54852
54989
  };
54853
- function printIntegrationGuide(config2) {
54854
- const host = process.env.HOST ?? "127.0.0.1";
54855
- const port = process.env.PORT ?? "4099";
54856
- const baseUrl = `http://${host}:${port}`;
54990
+ function printIntegrationGuide(config2, listen = {}) {
54991
+ const host = listen.host ?? process.env.HOST ?? "0.0.0.0";
54992
+ const parsedPort = listen.port ?? Number.parseInt(process.env.PORT ?? "4099", 10);
54993
+ const address = createServerAddressInfo(host, Number.isFinite(parsedPort) ? parsedPort : 4099);
54994
+ const baseUrl = address.localUrl;
54857
54995
  console.log(`
54858
54996
  ================ local-router \u63A5\u5165\u6307\u5357 ================`);
54859
- console.log(`\u672C\u5730\u670D\u52A1\u5730\u5740: ${baseUrl}`);
54997
+ console.log(`\u670D\u52A1\u76D1\u542C\u5730\u5740: ${address.listenUrl}`);
54998
+ console.log(`\u672C\u673A\u8BBF\u95EE\u5730\u5740: ${address.localUrl}`);
54999
+ if (address.listenHost === "0.0.0.0" || address.listenHost === "::" || address.listenHost === "[::]") {
55000
+ console.log("\u5C40\u57DF\u7F51\u8BBF\u95EE: \u5F00\u542F\u5C40\u57DF\u7F51\u670D\u52A1\u540E\uFF0C\u4F7F\u7528\u672C\u673A\u5C40\u57DF\u7F51 IP \u66FF\u6362\u4E0A\u9762\u7684\u672C\u673A\u5730\u5740\u3002");
55001
+ }
54860
55002
  console.log("\u5065\u5EB7\u68C0\u67E5: GET /");
54861
55003
  console.log(`API \u6587\u6863: ${baseUrl}/api/docs`);
54862
55004
  console.log(`\u7BA1\u7406\u9762\u677F: ${baseUrl}/admin`);
@@ -55495,8 +55637,9 @@ async function createApp(store, options) {
55495
55637
  options?.registerCleanup?.(() => {
55496
55638
  pluginManager.disposeAll().catch(() => {});
55497
55639
  });
55498
- printIntegrationGuide(config2);
55640
+ printIntegrationGuide(config2, options?.listen);
55499
55641
  const app = new Hono2;
55642
+ app.use("*", createNetworkAccessMiddleware(store));
55500
55643
  app.get("/", (c2) => c2.text("local-router is running"));
55501
55644
  for (const [routeType, entry] of Object.entries(ROUTE_REGISTRY)) {
55502
55645
  const subApp = entry.create(routeType, store, pluginManager);
@@ -55535,12 +55678,26 @@ async function createApp(store, options) {
55535
55678
  async function createDefaultAppFromProcessArgs() {
55536
55679
  const configPath = parseConfigPath();
55537
55680
  const store = new ConfigStore(configPath);
55538
- return createApp(store);
55681
+ return createApp(store, {
55682
+ listen: {
55683
+ host: process.env.HOST ?? "0.0.0.0",
55684
+ port: Number.parseInt(process.env.PORT ?? "4099", 10)
55685
+ }
55686
+ });
55539
55687
  }
55540
55688
 
55541
55689
  // src/entry.ts
55542
55690
  var app = await createDefaultAppFromProcessArgs();
55543
- var entry_default = app;
55691
+ var entry_default = {
55692
+ hostname: process.env.HOST ?? "0.0.0.0",
55693
+ port: Number.parseInt(process.env.PORT ?? "4099", 10),
55694
+ fetch(request, server) {
55695
+ const remoteAddress = server.requestIP(request)?.address ?? null;
55696
+ return app.fetch(request, {
55697
+ [REMOTE_ADDRESS_ENV_KEY]: remoteAddress
55698
+ });
55699
+ }
55700
+ };
55544
55701
  export {
55545
55702
  entry_default as default
55546
55703
  };