@push.rocks/smartproxy 15.0.2 → 16.0.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.
Files changed (80) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/certificate/index.d.ts +10 -4
  3. package/dist_ts/certificate/index.js +5 -7
  4. package/dist_ts/certificate/models/certificate-types.d.ts +35 -15
  5. package/dist_ts/certificate/providers/cert-provisioner.d.ts +41 -15
  6. package/dist_ts/certificate/providers/cert-provisioner.js +201 -41
  7. package/dist_ts/forwarding/config/forwarding-types.d.ts +40 -76
  8. package/dist_ts/forwarding/config/forwarding-types.js +19 -18
  9. package/dist_ts/forwarding/config/index.d.ts +4 -2
  10. package/dist_ts/forwarding/config/index.js +5 -3
  11. package/dist_ts/forwarding/handlers/base-handler.js +3 -1
  12. package/dist_ts/forwarding/index.d.ts +5 -6
  13. package/dist_ts/forwarding/index.js +3 -3
  14. package/dist_ts/http/models/http-types.js +1 -1
  15. package/dist_ts/http/port80/acme-interfaces.d.ts +30 -0
  16. package/dist_ts/http/port80/acme-interfaces.js +46 -1
  17. package/dist_ts/http/port80/port80-handler.d.ts +17 -2
  18. package/dist_ts/http/port80/port80-handler.js +49 -11
  19. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +2 -61
  20. package/dist_ts/proxies/smart-proxy/models/interfaces.js +5 -4
  21. package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +118 -4
  22. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +70 -4
  23. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +193 -43
  24. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +2 -5
  25. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +25 -146
  26. package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +7 -0
  27. package/dist_ts/proxies/smart-proxy/route-helpers/index.js +9 -0
  28. package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +54 -1
  29. package/dist_ts/proxies/smart-proxy/route-helpers.js +102 -1
  30. package/dist_ts/proxies/smart-proxy/route-manager.d.ts +3 -9
  31. package/dist_ts/proxies/smart-proxy/route-manager.js +3 -115
  32. package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +72 -10
  33. package/dist_ts/proxies/smart-proxy/smart-proxy.js +135 -268
  34. package/dist_ts/proxies/smart-proxy/timeout-manager.js +3 -3
  35. package/dist_ts/proxies/smart-proxy/utils/index.d.ts +12 -0
  36. package/dist_ts/proxies/smart-proxy/utils/index.js +19 -0
  37. package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +174 -0
  38. package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +332 -0
  39. package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.d.ts +51 -0
  40. package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.js +124 -0
  41. package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +131 -0
  42. package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +217 -0
  43. package/dist_ts/proxies/smart-proxy/utils/route-utils.d.ts +79 -0
  44. package/dist_ts/proxies/smart-proxy/utils/route-utils.js +266 -0
  45. package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +73 -0
  46. package/dist_ts/proxies/smart-proxy/utils/route-validators.js +242 -0
  47. package/package.json +1 -1
  48. package/readme.md +139 -111
  49. package/readme.plan.md +164 -312
  50. package/ts/00_commitinfo_data.ts +1 -1
  51. package/ts/certificate/index.ts +17 -9
  52. package/ts/certificate/models/certificate-types.ts +37 -16
  53. package/ts/certificate/providers/cert-provisioner.ts +247 -54
  54. package/ts/forwarding/config/forwarding-types.ts +79 -107
  55. package/ts/forwarding/config/index.ts +4 -2
  56. package/ts/forwarding/handlers/base-handler.ts +4 -2
  57. package/ts/forwarding/index.ts +3 -2
  58. package/ts/http/models/http-types.ts +0 -1
  59. package/ts/http/port80/acme-interfaces.ts +84 -0
  60. package/ts/http/port80/port80-handler.ts +61 -15
  61. package/ts/proxies/smart-proxy/models/interfaces.ts +7 -64
  62. package/ts/proxies/smart-proxy/models/route-types.ts +152 -22
  63. package/ts/proxies/smart-proxy/network-proxy-bridge.ts +226 -55
  64. package/ts/proxies/smart-proxy/route-connection-handler.ts +36 -205
  65. package/ts/proxies/smart-proxy/route-helpers/index.ts +9 -0
  66. package/ts/proxies/smart-proxy/route-helpers.ts +165 -11
  67. package/ts/proxies/smart-proxy/route-manager.ts +3 -130
  68. package/ts/proxies/smart-proxy/smart-proxy.ts +157 -329
  69. package/ts/proxies/smart-proxy/timeout-manager.ts +2 -2
  70. package/ts/proxies/smart-proxy/utils/index.ts +40 -0
  71. package/ts/proxies/smart-proxy/utils/route-helpers.ts +455 -0
  72. package/ts/proxies/smart-proxy/utils/route-migration-utils.ts +165 -0
  73. package/ts/proxies/smart-proxy/utils/route-patterns.ts +309 -0
  74. package/ts/proxies/smart-proxy/utils/route-utils.ts +330 -0
  75. package/ts/proxies/smart-proxy/utils/route-validators.ts +269 -0
  76. package/ts/forwarding/config/domain-config.ts +0 -28
  77. package/ts/forwarding/config/domain-manager.ts +0 -283
  78. package/ts/proxies/smart-proxy/connection-handler.ts +0 -1240
  79. package/ts/proxies/smart-proxy/port-range-manager.ts +0 -211
  80. /package/ts/proxies/smart-proxy/{domain-config-manager.ts → domain-config-manager.ts.bak} +0 -0
@@ -50,8 +50,8 @@ export class TimeoutManager {
50
50
  * Calculate effective max lifetime based on connection type
51
51
  */
52
52
  getEffectiveMaxLifetime(record) {
53
- // Use domain-specific timeout from forwarding.advanced if available
54
- const baseTimeout = record.domainConfig?.forwarding?.advanced?.timeout ||
53
+ // Use route-specific timeout if available from the routeConfig
54
+ const baseTimeout = record.routeConfig?.action.advanced?.timeout ||
55
55
  this.settings.maxConnectionLifetime ||
56
56
  86400000; // 24 hours default
57
57
  // For immortal keep-alive connections, use an extremely long lifetime
@@ -151,4 +151,4 @@ export class TimeoutManager {
151
151
  }
152
152
  }
153
153
  }
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS90aW1lb3V0LW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUFvQixRQUE0QjtRQUE1QixhQUFRLEdBQVIsUUFBUSxDQUFvQjtJQUFHLENBQUM7SUFFcEQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxPQUFlO1FBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLENBQUMsZ0NBQWdDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsV0FBbUIsRUFBRSxtQkFBMkIsQ0FBQztRQUN2RSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUcsZUFBZSxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQzNCLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUN4RSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLE1BQXlCO1FBQzdDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWpDLCtCQUErQjtRQUMvQixJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ25DLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDekMsQ0FBQztJ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
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS90aW1lb3V0LW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUFvQixRQUE0QjtRQUE1QixhQUFRLEdBQVIsUUFBUSxDQUFvQjtJQUFHLENBQUM7SUFFcEQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxPQUFlO1FBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLENBQUMsZ0NBQWdDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsV0FBbUIsRUFBRSxtQkFBMkIsQ0FBQztRQUN2RSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUcsZUFBZSxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQzNCLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUN4RSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLE1BQXlCO1FBQzdDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWpDLCtCQUErQjtRQUMvQixJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ25DLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLDZCQUE2QixDQUFDLE1BQXlCO1FBQzVELElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxRQUFRLENBQUMsQ0FBQyxrQkFBa0I7UUFFdEYscUVBQXFFO1FBQ3JFLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzNFLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDM0UsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLENBQUM7WUFDcEUsZ0JBQWdCLEdBQUcsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO1FBQ25ELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNJLHVCQUF1QixDQUFDLE1BQXlCO1FBQ3RELCtEQUErRDtRQUMvRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQjtZQUNuQyxRQUFRLENBQUMsQ0FBQyxtQkFBbUI7UUFFakQsc0VBQXNFO1FBQ3RFLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzNFLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLENBQUM7UUFFRCx5RUFBeUU7UUFDekUsSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDM0UsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUI7YUFDckYsQ0FBQztRQUNKLENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDM0MsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxzQkFBc0IsQ0FDM0IsTUFBeUIsRUFDekIsU0FBOEQ7UUFFOUQsMkJBQTJCO1FBQzNCLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvRCxxQkFBcUI7UUFDckIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUM1Qiw2QkFBNkI7WUFDN0IsU0FBUyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXRCLG1EQUFtRDtRQUNuRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxNQUF5QjtRQU05QyxzREFBc0Q7UUFDdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDekMsT0FBTztnQkFDTCxVQUFVLEVBQUUsS0FBSztnQkFDakIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixnQkFBZ0IsRUFBRSxDQUFDO2FBQ3BCLENBQUM7UUFDSixDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzNFLE9BQU87Z0JBQ0wsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixjQUFjLEVBQUUsQ0FBQztnQkFDakIsZ0JBQWdCLEVBQUUsQ0FBQzthQUNwQixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLGNBQWMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUNqRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwRSxvQkFBb0I7UUFDcEIsTUFBTSxVQUFVLEdBQUcsY0FBYyxHQUFHLGdCQUFnQixDQUFDO1FBRXJELG1EQUFtRDtRQUNuRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWTtZQUNuQixVQUFVO1lBQ1YsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUM7UUFFbkQsT0FBTztZQUNMLFVBQVU7WUFDVixVQUFVO1lBQ1YsY0FBYztZQUNkLGdCQUFnQjtTQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUJBQW1CLENBQUMsTUFBeUI7UUFDbEQsMkNBQTJDO1FBQzNDLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzNFLHVEQUF1RDtZQUN2RCxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLGlCQUFpQjtRQUNqRyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SmartProxy Route Utilities
3
+ *
4
+ * This file exports all route-related utilities for the SmartProxy module,
5
+ * including helpers, validators, utilities, and patterns for working with routes.
6
+ */
7
+ export * from './route-helpers.js';
8
+ export * from './route-validators.js';
9
+ export * from './route-utils.js';
10
+ import { createWebSocketRoute as createWebSocketPatternRoute, createLoadBalancerRoute as createLoadBalancerPatternRoute, createApiGatewayRoute, createStaticFileServerRoute, addRateLimiting, addBasicAuth, addJwtAuth } from './route-patterns.js';
11
+ export { createWebSocketPatternRoute, createLoadBalancerPatternRoute, createApiGatewayRoute, createStaticFileServerRoute, addRateLimiting, addBasicAuth, addJwtAuth };
12
+ export * from './route-migration-utils.js';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * SmartProxy Route Utilities
3
+ *
4
+ * This file exports all route-related utilities for the SmartProxy module,
5
+ * including helpers, validators, utilities, and patterns for working with routes.
6
+ */
7
+ // Export route helpers for creating routes
8
+ export * from './route-helpers.js';
9
+ // Export route validators for validating route configurations
10
+ export * from './route-validators.js';
11
+ // Export route utilities for route operations
12
+ export * from './route-utils.js';
13
+ // Export route patterns with renamed exports to avoid conflicts
14
+ import { createWebSocketRoute as createWebSocketPatternRoute, createLoadBalancerRoute as createLoadBalancerPatternRoute, createApiGatewayRoute, createStaticFileServerRoute, addRateLimiting, addBasicAuth, addJwtAuth } from './route-patterns.js';
15
+ export { createWebSocketPatternRoute, createLoadBalancerPatternRoute, createApiGatewayRoute, createStaticFileServerRoute, addRateLimiting, addBasicAuth, addJwtAuth };
16
+ // Export migration utilities for transitioning from domain-based to route-based configs
17
+ // Note: These will be removed in a future version once migration is complete
18
+ export * from './route-migration-utils.js';
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsMkNBQTJDO0FBQzNDLGNBQWMsb0JBQW9CLENBQUM7QUFFbkMsOERBQThEO0FBQzlELGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsOENBQThDO0FBQzlDLGNBQWMsa0JBQWtCLENBQUM7QUFFakMsZ0VBQWdFO0FBQ2hFLE9BQU8sRUFDTCxvQkFBb0IsSUFBSSwyQkFBMkIsRUFDbkQsdUJBQXVCLElBQUksOEJBQThCLEVBQ3pELHFCQUFxQixFQUNyQiwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLGVBQWUsRUFDZixZQUFZLEVBQ1osVUFBVSxFQUNYLENBQUM7QUFFRix3RkFBd0Y7QUFDeEYsNkVBQTZFO0FBQzdFLGNBQWMsNEJBQTRCLENBQUMifQ==
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Route Helper Functions
3
+ *
4
+ * This file provides utility functions for creating route configurations for common scenarios.
5
+ * These functions aim to simplify the creation of route configurations for typical use cases.
6
+ *
7
+ * This module includes helper functions for creating:
8
+ * - HTTP routes (createHttpRoute)
9
+ * - HTTPS routes with TLS termination (createHttpsTerminateRoute)
10
+ * - HTTP to HTTPS redirects (createHttpToHttpsRedirect)
11
+ * - HTTPS passthrough routes (createHttpsPassthroughRoute)
12
+ * - Complete HTTPS servers with redirects (createCompleteHttpsServer)
13
+ * - Load balancer routes (createLoadBalancerRoute)
14
+ * - Static file server routes (createStaticFileRoute)
15
+ * - API routes (createApiRoute)
16
+ * - WebSocket routes (createWebSocketRoute)
17
+ */
18
+ import type { IRouteConfig } from '../models/route-types.js';
19
+ /**
20
+ * Create an HTTP-only route configuration
21
+ * @param domains Domain(s) to match
22
+ * @param target Target host and port
23
+ * @param options Additional route options
24
+ * @returns Route configuration object
25
+ */
26
+ export declare function createHttpRoute(domains: string | string[], target: {
27
+ host: string | string[];
28
+ port: number;
29
+ }, options?: Partial<IRouteConfig>): IRouteConfig;
30
+ /**
31
+ * Create an HTTPS route with TLS termination (including HTTP redirect to HTTPS)
32
+ * @param domains Domain(s) to match
33
+ * @param target Target host and port
34
+ * @param options Additional route options
35
+ * @returns Route configuration object
36
+ */
37
+ export declare function createHttpsTerminateRoute(domains: string | string[], target: {
38
+ host: string | string[];
39
+ port: number;
40
+ }, options?: {
41
+ certificate?: 'auto' | {
42
+ key: string;
43
+ cert: string;
44
+ };
45
+ httpPort?: number | number[];
46
+ httpsPort?: number | number[];
47
+ reencrypt?: boolean;
48
+ name?: string;
49
+ [key: string]: any;
50
+ }): IRouteConfig;
51
+ /**
52
+ * Create an HTTP to HTTPS redirect route
53
+ * @param domains Domain(s) to match
54
+ * @param httpsPort HTTPS port to redirect to (default: 443)
55
+ * @param options Additional route options
56
+ * @returns Route configuration object
57
+ */
58
+ export declare function createHttpToHttpsRedirect(domains: string | string[], httpsPort?: number, options?: Partial<IRouteConfig>): IRouteConfig;
59
+ /**
60
+ * Create an HTTPS passthrough route (SNI-based forwarding without TLS termination)
61
+ * @param domains Domain(s) to match
62
+ * @param target Target host and port
63
+ * @param options Additional route options
64
+ * @returns Route configuration object
65
+ */
66
+ export declare function createHttpsPassthroughRoute(domains: string | string[], target: {
67
+ host: string | string[];
68
+ port: number;
69
+ }, options?: Partial<IRouteConfig>): IRouteConfig;
70
+ /**
71
+ * Create a complete HTTPS server with HTTP to HTTPS redirects
72
+ * @param domains Domain(s) to match
73
+ * @param target Target host and port
74
+ * @param options Additional configuration options
75
+ * @returns Array of two route configurations (HTTPS and HTTP redirect)
76
+ */
77
+ export declare function createCompleteHttpsServer(domains: string | string[], target: {
78
+ host: string | string[];
79
+ port: number;
80
+ }, options?: {
81
+ certificate?: 'auto' | {
82
+ key: string;
83
+ cert: string;
84
+ };
85
+ httpPort?: number | number[];
86
+ httpsPort?: number | number[];
87
+ reencrypt?: boolean;
88
+ name?: string;
89
+ [key: string]: any;
90
+ }): IRouteConfig[];
91
+ /**
92
+ * Create a load balancer route (round-robin between multiple backend hosts)
93
+ * @param domains Domain(s) to match
94
+ * @param hosts Array of backend hosts to load balance between
95
+ * @param port Backend port
96
+ * @param options Additional route options
97
+ * @returns Route configuration object
98
+ */
99
+ export declare function createLoadBalancerRoute(domains: string | string[], hosts: string[], port: number, options?: {
100
+ tls?: {
101
+ mode: 'passthrough' | 'terminate' | 'terminate-and-reencrypt';
102
+ certificate?: 'auto' | {
103
+ key: string;
104
+ cert: string;
105
+ };
106
+ };
107
+ [key: string]: any;
108
+ }): IRouteConfig;
109
+ /**
110
+ * Create a static file server route
111
+ * @param domains Domain(s) to match
112
+ * @param rootDir Root directory path for static files
113
+ * @param options Additional route options
114
+ * @returns Route configuration object
115
+ */
116
+ export declare function createStaticFileRoute(domains: string | string[], rootDir: string, options?: {
117
+ indexFiles?: string[];
118
+ serveOnHttps?: boolean;
119
+ certificate?: 'auto' | {
120
+ key: string;
121
+ cert: string;
122
+ };
123
+ httpPort?: number | number[];
124
+ httpsPort?: number | number[];
125
+ name?: string;
126
+ [key: string]: any;
127
+ }): IRouteConfig;
128
+ /**
129
+ * Create an API route configuration
130
+ * @param domains Domain(s) to match
131
+ * @param apiPath API base path (e.g., "/api")
132
+ * @param target Target host and port
133
+ * @param options Additional route options
134
+ * @returns Route configuration object
135
+ */
136
+ export declare function createApiRoute(domains: string | string[], apiPath: string, target: {
137
+ host: string | string[];
138
+ port: number;
139
+ }, options?: {
140
+ useTls?: boolean;
141
+ certificate?: 'auto' | {
142
+ key: string;
143
+ cert: string;
144
+ };
145
+ addCorsHeaders?: boolean;
146
+ httpPort?: number | number[];
147
+ httpsPort?: number | number[];
148
+ name?: string;
149
+ [key: string]: any;
150
+ }): IRouteConfig;
151
+ /**
152
+ * Create a WebSocket route configuration
153
+ * @param domains Domain(s) to match
154
+ * @param wsPath WebSocket path (e.g., "/ws")
155
+ * @param target Target WebSocket server host and port
156
+ * @param options Additional route options
157
+ * @returns Route configuration object
158
+ */
159
+ export declare function createWebSocketRoute(domains: string | string[], wsPath: string, target: {
160
+ host: string | string[];
161
+ port: number;
162
+ }, options?: {
163
+ useTls?: boolean;
164
+ certificate?: 'auto' | {
165
+ key: string;
166
+ cert: string;
167
+ };
168
+ httpPort?: number | number[];
169
+ httpsPort?: number | number[];
170
+ pingInterval?: number;
171
+ pingTimeout?: number;
172
+ name?: string;
173
+ [key: string]: any;
174
+ }): IRouteConfig;
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Route Helper Functions
3
+ *
4
+ * This file provides utility functions for creating route configurations for common scenarios.
5
+ * These functions aim to simplify the creation of route configurations for typical use cases.
6
+ *
7
+ * This module includes helper functions for creating:
8
+ * - HTTP routes (createHttpRoute)
9
+ * - HTTPS routes with TLS termination (createHttpsTerminateRoute)
10
+ * - HTTP to HTTPS redirects (createHttpToHttpsRedirect)
11
+ * - HTTPS passthrough routes (createHttpsPassthroughRoute)
12
+ * - Complete HTTPS servers with redirects (createCompleteHttpsServer)
13
+ * - Load balancer routes (createLoadBalancerRoute)
14
+ * - Static file server routes (createStaticFileRoute)
15
+ * - API routes (createApiRoute)
16
+ * - WebSocket routes (createWebSocketRoute)
17
+ */
18
+ /**
19
+ * Create an HTTP-only route configuration
20
+ * @param domains Domain(s) to match
21
+ * @param target Target host and port
22
+ * @param options Additional route options
23
+ * @returns Route configuration object
24
+ */
25
+ export function createHttpRoute(domains, target, options = {}) {
26
+ // Create route match
27
+ const match = {
28
+ ports: options.match?.ports || 80,
29
+ domains
30
+ };
31
+ // Create route action
32
+ const action = {
33
+ type: 'forward',
34
+ target
35
+ };
36
+ // Create the route config
37
+ return {
38
+ match,
39
+ action,
40
+ name: options.name || `HTTP Route for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
41
+ ...options
42
+ };
43
+ }
44
+ /**
45
+ * Create an HTTPS route with TLS termination (including HTTP redirect to HTTPS)
46
+ * @param domains Domain(s) to match
47
+ * @param target Target host and port
48
+ * @param options Additional route options
49
+ * @returns Route configuration object
50
+ */
51
+ export function createHttpsTerminateRoute(domains, target, options = {}) {
52
+ // Create route match
53
+ const match = {
54
+ ports: options.httpsPort || 443,
55
+ domains
56
+ };
57
+ // Create route action
58
+ const action = {
59
+ type: 'forward',
60
+ target,
61
+ tls: {
62
+ mode: options.reencrypt ? 'terminate-and-reencrypt' : 'terminate',
63
+ certificate: options.certificate || 'auto'
64
+ }
65
+ };
66
+ // Create the route config
67
+ return {
68
+ match,
69
+ action,
70
+ name: options.name || `HTTPS Route for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
71
+ ...options
72
+ };
73
+ }
74
+ /**
75
+ * Create an HTTP to HTTPS redirect route
76
+ * @param domains Domain(s) to match
77
+ * @param httpsPort HTTPS port to redirect to (default: 443)
78
+ * @param options Additional route options
79
+ * @returns Route configuration object
80
+ */
81
+ export function createHttpToHttpsRedirect(domains, httpsPort = 443, options = {}) {
82
+ // Create route match
83
+ const match = {
84
+ ports: options.match?.ports || 80,
85
+ domains
86
+ };
87
+ // Create route action
88
+ const action = {
89
+ type: 'redirect',
90
+ redirect: {
91
+ to: `https://{domain}:${httpsPort}{path}`,
92
+ status: 301
93
+ }
94
+ };
95
+ // Create the route config
96
+ return {
97
+ match,
98
+ action,
99
+ name: options.name || `HTTP to HTTPS Redirect for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
100
+ ...options
101
+ };
102
+ }
103
+ /**
104
+ * Create an HTTPS passthrough route (SNI-based forwarding without TLS termination)
105
+ * @param domains Domain(s) to match
106
+ * @param target Target host and port
107
+ * @param options Additional route options
108
+ * @returns Route configuration object
109
+ */
110
+ export function createHttpsPassthroughRoute(domains, target, options = {}) {
111
+ // Create route match
112
+ const match = {
113
+ ports: options.match?.ports || 443,
114
+ domains
115
+ };
116
+ // Create route action
117
+ const action = {
118
+ type: 'forward',
119
+ target,
120
+ tls: {
121
+ mode: 'passthrough'
122
+ }
123
+ };
124
+ // Create the route config
125
+ return {
126
+ match,
127
+ action,
128
+ name: options.name || `HTTPS Passthrough for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
129
+ ...options
130
+ };
131
+ }
132
+ /**
133
+ * Create a complete HTTPS server with HTTP to HTTPS redirects
134
+ * @param domains Domain(s) to match
135
+ * @param target Target host and port
136
+ * @param options Additional configuration options
137
+ * @returns Array of two route configurations (HTTPS and HTTP redirect)
138
+ */
139
+ export function createCompleteHttpsServer(domains, target, options = {}) {
140
+ // Create the HTTPS route
141
+ const httpsRoute = createHttpsTerminateRoute(domains, target, options);
142
+ // Create the HTTP redirect route
143
+ const httpRedirectRoute = createHttpToHttpsRedirect(domains,
144
+ // Extract the HTTPS port from the HTTPS route - ensure it's a number
145
+ typeof options.httpsPort === 'number' ? options.httpsPort :
146
+ Array.isArray(options.httpsPort) ? options.httpsPort[0] : 443, {
147
+ // Set the HTTP port
148
+ match: {
149
+ ports: options.httpPort || 80,
150
+ domains
151
+ },
152
+ name: `HTTP to HTTPS Redirect for ${Array.isArray(domains) ? domains.join(', ') : domains}`
153
+ });
154
+ return [httpsRoute, httpRedirectRoute];
155
+ }
156
+ /**
157
+ * Create a load balancer route (round-robin between multiple backend hosts)
158
+ * @param domains Domain(s) to match
159
+ * @param hosts Array of backend hosts to load balance between
160
+ * @param port Backend port
161
+ * @param options Additional route options
162
+ * @returns Route configuration object
163
+ */
164
+ export function createLoadBalancerRoute(domains, hosts, port, options = {}) {
165
+ // Create route match
166
+ const match = {
167
+ ports: options.match?.ports || (options.tls ? 443 : 80),
168
+ domains
169
+ };
170
+ // Create route target
171
+ const target = {
172
+ host: hosts,
173
+ port
174
+ };
175
+ // Create route action
176
+ const action = {
177
+ type: 'forward',
178
+ target
179
+ };
180
+ // Add TLS configuration if provided
181
+ if (options.tls) {
182
+ action.tls = {
183
+ mode: options.tls.mode,
184
+ certificate: options.tls.certificate || 'auto'
185
+ };
186
+ }
187
+ // Create the route config
188
+ return {
189
+ match,
190
+ action,
191
+ name: options.name || `Load Balancer for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
192
+ ...options
193
+ };
194
+ }
195
+ /**
196
+ * Create a static file server route
197
+ * @param domains Domain(s) to match
198
+ * @param rootDir Root directory path for static files
199
+ * @param options Additional route options
200
+ * @returns Route configuration object
201
+ */
202
+ export function createStaticFileRoute(domains, rootDir, options = {}) {
203
+ // Create route match
204
+ const match = {
205
+ ports: options.serveOnHttps
206
+ ? (options.httpsPort || 443)
207
+ : (options.httpPort || 80),
208
+ domains
209
+ };
210
+ // Create route action
211
+ const action = {
212
+ type: 'static',
213
+ static: {
214
+ root: rootDir,
215
+ index: options.indexFiles || ['index.html', 'index.htm']
216
+ }
217
+ };
218
+ // Add TLS configuration if serving on HTTPS
219
+ if (options.serveOnHttps) {
220
+ action.tls = {
221
+ mode: 'terminate',
222
+ certificate: options.certificate || 'auto'
223
+ };
224
+ }
225
+ // Create the route config
226
+ return {
227
+ match,
228
+ action,
229
+ name: options.name || `Static Files for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
230
+ ...options
231
+ };
232
+ }
233
+ /**
234
+ * Create an API route configuration
235
+ * @param domains Domain(s) to match
236
+ * @param apiPath API base path (e.g., "/api")
237
+ * @param target Target host and port
238
+ * @param options Additional route options
239
+ * @returns Route configuration object
240
+ */
241
+ export function createApiRoute(domains, apiPath, target, options = {}) {
242
+ // Normalize API path
243
+ const normalizedPath = apiPath.startsWith('/') ? apiPath : `/${apiPath}`;
244
+ const pathWithWildcard = normalizedPath.endsWith('/')
245
+ ? `${normalizedPath}*`
246
+ : `${normalizedPath}/*`;
247
+ // Create route match
248
+ const match = {
249
+ ports: options.useTls
250
+ ? (options.httpsPort || 443)
251
+ : (options.httpPort || 80),
252
+ domains,
253
+ path: pathWithWildcard
254
+ };
255
+ // Create route action
256
+ const action = {
257
+ type: 'forward',
258
+ target
259
+ };
260
+ // Add TLS configuration if using HTTPS
261
+ if (options.useTls) {
262
+ action.tls = {
263
+ mode: 'terminate',
264
+ certificate: options.certificate || 'auto'
265
+ };
266
+ }
267
+ // Add CORS headers if requested
268
+ const headers = {};
269
+ if (options.addCorsHeaders) {
270
+ headers.response = {
271
+ 'Access-Control-Allow-Origin': '*',
272
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
273
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
274
+ 'Access-Control-Max-Age': '86400'
275
+ };
276
+ }
277
+ // Create the route config
278
+ return {
279
+ match,
280
+ action,
281
+ headers: Object.keys(headers).length > 0 ? headers : undefined,
282
+ name: options.name || `API Route ${normalizedPath} for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
283
+ priority: options.priority || 100, // Higher priority for specific path matches
284
+ ...options
285
+ };
286
+ }
287
+ /**
288
+ * Create a WebSocket route configuration
289
+ * @param domains Domain(s) to match
290
+ * @param wsPath WebSocket path (e.g., "/ws")
291
+ * @param target Target WebSocket server host and port
292
+ * @param options Additional route options
293
+ * @returns Route configuration object
294
+ */
295
+ export function createWebSocketRoute(domains, wsPath, target, options = {}) {
296
+ // Normalize WebSocket path
297
+ const normalizedPath = wsPath.startsWith('/') ? wsPath : `/${wsPath}`;
298
+ // Create route match
299
+ const match = {
300
+ ports: options.useTls
301
+ ? (options.httpsPort || 443)
302
+ : (options.httpPort || 80),
303
+ domains,
304
+ path: normalizedPath
305
+ };
306
+ // Create route action
307
+ const action = {
308
+ type: 'forward',
309
+ target,
310
+ websocket: {
311
+ enabled: true,
312
+ pingInterval: options.pingInterval || 30000, // 30 seconds
313
+ pingTimeout: options.pingTimeout || 5000 // 5 seconds
314
+ }
315
+ };
316
+ // Add TLS configuration if using HTTPS
317
+ if (options.useTls) {
318
+ action.tls = {
319
+ mode: 'terminate',
320
+ certificate: options.certificate || 'auto'
321
+ };
322
+ }
323
+ // Create the route config
324
+ return {
325
+ match,
326
+ action,
327
+ name: options.name || `WebSocket Route ${normalizedPath} for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
328
+ priority: options.priority || 100, // Higher priority for WebSocket routes
329
+ ...options
330
+ };
331
+ }
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvdXRpbHMvcm91dGUtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUlIOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLE9BQTBCLEVBQzFCLE1BQWlELEVBQ2pELFVBQWlDLEVBQUU7SUFFbkMscUJBQXFCO0lBQ3JCLE1BQU0sS0FBSyxHQUFnQjtRQUN6QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqQyxPQUFPO0tBQ1IsQ0FBQztJQUVGLHNCQUFzQjtJQUN0QixNQUFNLE1BQU0sR0FBaUI7UUFDM0IsSUFBSSxFQUFFLFNBQVM7UUFDZixNQUFNO0tBQ1AsQ0FBQztJQUVGLDBCQUEwQjtJQUMxQixPQUFPO1FBQ0wsS0FBSztRQUNMLE1BQU07UUFDTixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxrQkFBa0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1FBQy9GLEdBQUcsT0FBTztLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxPQUEwQixFQUMxQixNQUFpRCxFQUNqRCxVQU9JLEVBQUU7SUFFTixxQkFBcUI7SUFDckIsTUFBTSxLQUFLLEdBQWdCO1FBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLEdBQUc7UUFDL0IsT0FBTztLQUNSLENBQUM7SUFFRixzQkFBc0I7SUFDdEIsTUFBTSxNQUFNLEdBQWlCO1FBQzNCLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTTtRQUNOLEdB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
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Route Migration Utilities
3
+ *
4
+ * This file provides utility functions for migrating from legacy domain-based
5
+ * configuration to the new route-based configuration system. These functions
6
+ * are temporary and will be removed after the migration is complete.
7
+ */
8
+ import type { TForwardingType } from '../../../forwarding/config/forwarding-types.js';
9
+ import type { IRouteConfig } from '../models/route-types.js';
10
+ /**
11
+ * Legacy domain config interface (for migration only)
12
+ * @deprecated This interface will be removed in a future version
13
+ */
14
+ export interface ILegacyDomainConfig {
15
+ domains: string[];
16
+ forwarding: {
17
+ type: TForwardingType;
18
+ target: {
19
+ host: string | string[];
20
+ port: number;
21
+ };
22
+ [key: string]: any;
23
+ };
24
+ }
25
+ /**
26
+ * Convert a legacy domain config to a route-based config
27
+ * @param domainConfig Legacy domain configuration
28
+ * @param additionalOptions Additional options to add to the route
29
+ * @returns Route configuration
30
+ * @deprecated This function will be removed in a future version
31
+ */
32
+ export declare function domainConfigToRouteConfig(domainConfig: ILegacyDomainConfig, additionalOptions?: Partial<IRouteConfig>): IRouteConfig;
33
+ /**
34
+ * Convert an array of legacy domain configs to route configurations
35
+ * @param domainConfigs Array of legacy domain configurations
36
+ * @returns Array of route configurations
37
+ * @deprecated This function will be removed in a future version
38
+ */
39
+ export declare function domainConfigsToRouteConfigs(domainConfigs: ILegacyDomainConfig[]): IRouteConfig[];
40
+ /**
41
+ * Extract domains from a route configuration
42
+ * @param route Route configuration
43
+ * @returns Array of domains
44
+ */
45
+ export declare function extractDomainsFromRoute(route: IRouteConfig): string[];
46
+ /**
47
+ * Extract domains from an array of route configurations
48
+ * @param routes Array of route configurations
49
+ * @returns Array of unique domains
50
+ */
51
+ export declare function extractDomainsFromRoutes(routes: IRouteConfig[]): string[];