@betterportal/tunnels 1.0.25 → 1.0.27

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 (96) hide show
  1. package/lib/.bsb/clients/service-tunnels-client.d.ts +1 -1
  2. package/lib/.bsb/clients/service-tunnels-client.js +1 -1
  3. package/lib/.bsb/clients/service-tunnels-proxy.d.ts +1 -1
  4. package/lib/.bsb/clients/service-tunnels-proxy.js +1 -1
  5. package/lib/cli.js +2 -0
  6. package/lib/cli.js.map +1 -1
  7. package/lib/plugins/service-tunnels-admin/.bp-generated/registry.d.ts.map +1 -1
  8. package/lib/plugins/service-tunnels-admin/.bp-generated/registry.js +6 -2
  9. package/lib/plugins/service-tunnels-admin/.bp-generated/registry.js.map +1 -1
  10. package/lib/plugins/service-tunnels-admin/.bp-generated/route-runtime.d.ts +9 -0
  11. package/lib/plugins/service-tunnels-admin/.bp-generated/route-runtime.d.ts.map +1 -0
  12. package/lib/plugins/service-tunnels-admin/.bp-generated/route-runtime.js +6 -0
  13. package/lib/plugins/service-tunnels-admin/.bp-generated/route-runtime.js.map +1 -0
  14. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/GET.d.ts.map +1 -1
  15. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/GET.js +2 -2
  16. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/GET.js.map +1 -1
  17. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/index.d.ts +1 -1
  18. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/index.d.ts.map +1 -1
  19. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/index.js +1 -1
  20. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/index.js.map +1 -1
  21. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.d.ts +38 -16
  22. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.d.ts.map +1 -1
  23. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.js +36 -30
  24. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.js.map +1 -1
  25. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.sse.d.ts +20 -0
  26. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.sse.d.ts.map +1 -0
  27. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.sse.js +10 -0
  28. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.sse.js.map +1 -0
  29. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/GET.d.ts +3 -2
  30. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/GET.d.ts.map +1 -1
  31. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/GET.js +8 -7
  32. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/GET.js.map +1 -1
  33. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.d.ts +5 -0
  34. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.d.ts.map +1 -0
  35. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.js +5 -0
  36. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.js.map +1 -0
  37. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.sse.d.ts +5 -0
  38. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.sse.d.ts.map +1 -0
  39. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.sse.js +5 -0
  40. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.sse.js.map +1 -0
  41. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/index.d.ts +2 -2
  42. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/index.d.ts.map +1 -1
  43. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/index.js +3 -3
  44. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/index.js.map +1 -1
  45. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/GET.d.ts.map +1 -1
  46. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/GET.js +2 -2
  47. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/GET.js.map +1 -1
  48. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/_theme.bootstrap1/GET.js +1 -1
  49. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/_theme.bootstrap1/GET.js.map +1 -1
  50. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/index.d.ts +1 -1
  51. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/index.d.ts.map +1 -1
  52. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/index.js +1 -1
  53. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/index.js.map +1 -1
  54. package/lib/plugins/service-tunnels-admin/bp-routes/landing/GET.d.ts.map +1 -1
  55. package/lib/plugins/service-tunnels-admin/bp-routes/landing/GET.js +2 -2
  56. package/lib/plugins/service-tunnels-admin/bp-routes/landing/GET.js.map +1 -1
  57. package/lib/plugins/service-tunnels-admin/bp-routes/landing/index.d.ts +1 -1
  58. package/lib/plugins/service-tunnels-admin/bp-routes/landing/index.d.ts.map +1 -1
  59. package/lib/plugins/service-tunnels-admin/bp-routes/landing/index.js +1 -1
  60. package/lib/plugins/service-tunnels-admin/bp-routes/landing/index.js.map +1 -1
  61. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/GET.d.ts.map +1 -1
  62. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/GET.js +2 -2
  63. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/GET.js.map +1 -1
  64. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/_theme.bootstrap1/GET.js +1 -1
  65. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/_theme.bootstrap1/GET.js.map +1 -1
  66. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/index.d.ts +1 -1
  67. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/index.d.ts.map +1 -1
  68. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/index.js +1 -1
  69. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/index.js.map +1 -1
  70. package/lib/plugins/service-tunnels-admin/index.js +2 -2
  71. package/lib/plugins/service-tunnels-admin/index.js.map +1 -1
  72. package/lib/plugins/service-tunnels-client/index.d.ts.map +1 -1
  73. package/lib/plugins/service-tunnels-client/index.js +40 -4
  74. package/lib/plugins/service-tunnels-client/index.js.map +1 -1
  75. package/lib/plugins/service-tunnels-client/registry.d.ts +3 -0
  76. package/lib/plugins/service-tunnels-client/registry.d.ts.map +1 -1
  77. package/lib/plugins/service-tunnels-client/registry.js +6 -0
  78. package/lib/plugins/service-tunnels-client/registry.js.map +1 -1
  79. package/lib/plugins/service-tunnels-client/schemas.d.ts +1 -0
  80. package/lib/plugins/service-tunnels-client/schemas.d.ts.map +1 -1
  81. package/lib/plugins/service-tunnels-client/schemas.js +9 -8
  82. package/lib/plugins/service-tunnels-client/schemas.js.map +1 -1
  83. package/lib/plugins/service-tunnels-proxy/index.d.ts.map +1 -1
  84. package/lib/plugins/service-tunnels-proxy/index.js +26 -13
  85. package/lib/plugins/service-tunnels-proxy/index.js.map +1 -1
  86. package/lib/plugins/service-tunnels-proxy/verification.d.ts +3 -5
  87. package/lib/plugins/service-tunnels-proxy/verification.d.ts.map +1 -1
  88. package/lib/plugins/service-tunnels-proxy/verification.js +32 -7
  89. package/lib/plugins/service-tunnels-proxy/verification.js.map +1 -1
  90. package/lib/schemas/service-tunnels-admin.json +1 -1
  91. package/lib/schemas/service-tunnels-admin.plugin.json +1 -1
  92. package/lib/schemas/service-tunnels-client.json +2 -2
  93. package/lib/schemas/service-tunnels-client.plugin.json +2 -2
  94. package/lib/schemas/service-tunnels-proxy.json +2 -2
  95. package/lib/schemas/service-tunnels-proxy.plugin.json +2 -2
  96. package/package.json +1 -1
@@ -0,0 +1,5 @@
1
+ /** @jsxImportSource jsx-htmx */
2
+ import type { HtmlRenderable } from "@betterportal/framework";
3
+ import type { DashboardData } from "../GET.js";
4
+ export declare function render(data: DashboardData): HtmlRenderable;
5
+ //# sourceMappingURL=_body.live.GET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_body.live.GET.d.ts","sourceRoot":"","sources":["../../../../../../src/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG/C,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,cAAc,CAE1D"}
@@ -0,0 +1,5 @@
1
+ import { renderDashboard } from "./GET.js";
2
+ export function render(data) {
3
+ return renderDashboard(data);
4
+ }
5
+ //# sourceMappingURL=_body.live.GET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_body.live.GET.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,UAAU,MAAM,CAAC,IAAmB;IACxC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** @jsxImportSource jsx-htmx */
2
+ import type { HtmlRenderable } from "@betterportal/framework";
3
+ import type { DashboardData } from "../GET.js";
4
+ export declare function renderTick(data: DashboardData): HtmlRenderable;
5
+ //# sourceMappingURL=_body.live.GET.sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_body.live.GET.sse.d.ts","sourceRoot":"","sources":["../../../../../../src/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.sse.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG/C,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,cAAc,CAE9D"}
@@ -0,0 +1,5 @@
1
+ import { renderDashboard } from "./GET.js";
2
+ export function renderTick(data) {
3
+ return renderDashboard(data);
4
+ }
5
+ //# sourceMappingURL=_body.live.GET.sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_body.live.GET.sse.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/_body.live.GET.sse.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC5C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type ApiAuthRequirement, type CacheHints } from "@betterportal/framework";
2
2
  export declare const viewId = "better-tunnels.dashboard";
3
- export declare const title = "BetterTunnels Dashboard";
4
- export declare const description = "Operational summary for BetterTunnels.";
3
+ export declare const title = "Tunnel Dashboard";
4
+ export declare const description = "Live BetterTunnels activity.";
5
5
  export declare const auth: ApiAuthRequirement;
6
6
  export declare const cacheHints: CacheHints;
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/dashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,eAAO,MAAM,KAAK,4BAA4B,CAAC;AAC/C,eAAO,MAAM,WAAW,2CAA2C,CAAC;AAEpE,eAAO,MAAM,IAAI,EAAE,kBAKlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/dashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,eAAO,MAAM,KAAK,qBAAqB,CAAC;AACxC,eAAO,MAAM,WAAW,iCAAiC,CAAC;AAE1D,eAAO,MAAM,IAAI,EAAE,kBAKlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export const viewId = "better-tunnels.dashboard";
2
- export const title = "BetterTunnels Dashboard";
3
- export const description = "Operational summary for BetterTunnels.";
2
+ export const title = "Tunnel Dashboard";
3
+ export const description = "Live BetterTunnels activity.";
4
4
  export const auth = {
5
5
  required: true,
6
6
  permissions: [
@@ -8,7 +8,7 @@ export const auth = {
8
8
  ]
9
9
  };
10
10
  export const cacheHints = {
11
- ttlSeconds: 5,
11
+ ttlSeconds: 0,
12
12
  varyBy: ["accept", "authorization", "x-bp-tenant-id", "x-bp-app-id"]
13
13
  };
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/dashboard/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,MAAM,GAAG,0BAA0B,CAAC;AACjD,MAAM,CAAC,MAAM,KAAK,GAAG,yBAAyB,CAAC;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,wCAAwC,CAAC;AAEpE,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE;QACX,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE;KAC7E;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,CAAC;CACrE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/dashboard/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,MAAM,GAAG,0BAA0B,CAAC;AACjD,MAAM,CAAC,MAAM,KAAK,GAAG,kBAAkB,CAAC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAE1D,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE;QACX,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE;KAC7E;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,CAAC;CACrE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAUrC,eAAO,MAAM,cAAc;;;;;;;;;EAKC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;;;;;;;;;;;AAExD,wBAsBE"}
1
+ {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAUrC,eAAO,MAAM,cAAc;;;;;;;;;EAKzB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;;;;;;;;;;;AAExD,wBAsBE"}
@@ -5,13 +5,13 @@ const DownloadSchema = av.object({
5
5
  os: av.string(),
6
6
  arch: av.string(),
7
7
  artifact: av.string()
8
- }, { unknownKeys: "strip" });
8
+ });
9
9
  export const ResponseSchema = av.object({
10
10
  latestTag: av.string(),
11
11
  logoUrl: av.string(),
12
12
  examples: av.array(av.string()),
13
13
  downloads: av.array(DownloadSchema)
14
- }, { unknownKeys: "strip" });
14
+ });
15
15
  export default createHandler({ response: ResponseSchema }, async () => {
16
16
  const brand = await loadBrandAssets();
17
17
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE;IACf,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE;CACtB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IAC/B,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC;CACpC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,eAAe,aAAa,CAC1B,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,KAAK,IAAI,EAAE;IACT,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IAEtC,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE;YACR,mCAAmC;YACnC,oDAAoD;YACpD,8CAA8C;SAC/C;QACD,SAAS,EAAE;YACT,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,kCAAkC,EAAE;YAC9E,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,4BAA4B,EAAE;YACtE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,4BAA4B,EAAE;YACtE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE;YACvE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE;SACxE;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE;IACf,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IAC/B,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC;CACpC,CAAC,CAAC;AAGH,eAAe,aAAa,CAC1B,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,KAAK,IAAI,EAAE;IACT,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IAEtC,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE;YACR,mCAAmC;YACnC,oDAAoD;YACpD,8CAA8C;SAC/C;QACD,SAAS,EAAE;YACT,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,kCAAkC,EAAE;YAC9E,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,4BAA4B,EAAE;YACtE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,4BAA4B,EAAE;YACtE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE;YACvE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE;SACxE;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "jsx-htmx/jsx-runtime";
2
2
  export function render(data) {
3
- return (_jsxs("section", { class: "container-fluid px-0", children: [_jsxs("div", { class: "mb-4", children: [_jsx("img", { src: data.logoUrl, alt: "BetterTunnels", class: "img-fluid mb-3", style: "max-width: 280px; height: auto;" }), _jsx("h1", { class: "h3 mb-1", children: "BetterTunnels CLI" }), _jsx("p", { class: "text-body-secondary mb-0", children: "Download the CLI and start a public development tunnel." })] }), _jsxs("div", { class: "row g-4", children: [_jsx("div", { class: "col-lg-5", children: _jsxs("div", { class: "border rounded-3 p-4 bg-body h-100", children: [_jsx("h2", { class: "h5 mb-3", children: "Quick start" }), data.examples.map((example) => (_jsx("pre", { class: "small bg-body-tertiary border rounded-2 p-3 mb-2", children: _jsx("code", { children: example }) })))] }) }), _jsx("div", { class: "col-lg-7", children: _jsxs("div", { class: "border rounded-3 bg-body h-100", children: [_jsxs("div", { class: "px-3 py-2 border-bottom d-flex justify-content-between", children: [_jsx("span", { class: "fw-semibold", children: "Release assets" }), _jsx("span", { class: "text-body-secondary", children: data.latestTag })] }), _jsx("div", { class: "table-responsive", children: _jsxs("table", { class: "table table-sm align-middle mb-0", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "OS" }), _jsx("th", { children: "Arch" }), _jsx("th", { children: "Artifact" })] }) }), _jsx("tbody", { children: data.downloads.map((download) => (_jsxs("tr", { children: [_jsx("td", { children: download.os }), _jsx("td", { children: download.arch }), _jsx("td", { children: _jsx("code", { children: download.artifact }) })] }))) })] }) })] }) })] })] }));
3
+ return (_jsxs("section", { class: "container-fluid px-0", children: [_jsxs("div", { class: "mb-4", children: [_jsx("img", { src: data.logoUrl, alt: "BetterTunnels", class: "img-fluid mb-3", style: "max-width: 280px; height: auto;" }), _jsx("h1", { class: "h3 mb-1", children: "CLI Downloads" }), _jsx("p", { class: "text-body-secondary mb-0", children: "Download the CLI and start a public development tunnel." })] }), _jsxs("div", { class: "row g-4", children: [_jsx("div", { class: "col-lg-5", children: _jsxs("div", { class: "border rounded-3 p-4 bg-body h-100", children: [_jsx("h2", { class: "h5 mb-3", children: "Quick start" }), data.examples.map((example) => (_jsx("pre", { class: "small bg-body-tertiary border rounded-2 p-3 mb-2", children: _jsx("code", { children: example }) })))] }) }), _jsx("div", { class: "col-lg-7", children: _jsxs("div", { class: "border rounded-3 bg-body h-100", children: [_jsxs("div", { class: "px-3 py-2 border-bottom d-flex justify-content-between", children: [_jsx("span", { class: "fw-semibold", children: "Release assets" }), _jsx("span", { class: "text-body-secondary", children: data.latestTag })] }), _jsx("div", { class: "table-responsive", children: _jsxs("table", { class: "table table-sm align-middle mb-0", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "OS" }), _jsx("th", { children: "Arch" }), _jsx("th", { children: "Artifact" })] }) }), _jsx("tbody", { children: data.downloads.map((download) => (_jsxs("tr", { children: [_jsx("td", { children: download.os }), _jsx("td", { children: download.arch }), _jsx("td", { children: _jsx("code", { children: download.artifact }) })] }))) })] }) })] }) })] })] }));
4
4
  }
5
5
  //# sourceMappingURL=GET.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/_theme.bootstrap1/GET.tsx"],"names":[],"mappings":";AAIA,MAAM,UAAU,MAAM,CAAC,IAAkB;IACvC,OAAO,CACL,mBAAS,KAAK,EAAC,sBAAsB,aACnC,eAAK,KAAK,EAAC,MAAM,aACf,cACE,GAAG,EAAE,IAAI,CAAC,OAAO,EACjB,GAAG,EAAC,eAAe,EACnB,KAAK,EAAC,gBAAgB,EACtB,KAAK,EAAC,iCAAiC,GACvC,EACF,aAAI,KAAK,EAAC,SAAS,kCAAuB,EAC1C,YAAG,KAAK,EAAC,0BAA0B,wEAA4D,IAC3F,EAEN,eAAK,KAAK,EAAC,SAAS,aAClB,cAAK,KAAK,EAAC,UAAU,YACnB,eAAK,KAAK,EAAC,oCAAoC,aAC7C,aAAI,KAAK,EAAC,SAAS,4BAAiB,EACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAC9B,cAAK,KAAK,EAAC,kDAAkD,YAAC,yBAAO,OAAO,GAAQ,GAAM,CAC3F,CAAC,IACE,GACF,EACN,cAAK,KAAK,EAAC,UAAU,YACnB,eAAK,KAAK,EAAC,gCAAgC,aACzC,eAAK,KAAK,EAAC,wDAAwD,aACjE,eAAM,KAAK,EAAC,aAAa,+BAAsB,EAC/C,eAAM,KAAK,EAAC,qBAAqB,YAAE,IAAI,CAAC,SAAS,GAAQ,IACrD,EACN,cAAK,KAAK,EAAC,kBAAkB,YAC3B,iBAAO,KAAK,EAAC,kCAAkC,aAC7C,0BACE,yBACE,8BAAW,EACX,gCAAa,EACb,oCAAiB,IACd,GACC,EACR,0BACG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAChC,yBACE,uBAAK,QAAQ,CAAC,EAAE,GAAM,EACtB,uBAAK,QAAQ,CAAC,IAAI,GAAM,EACxB,uBAAI,yBAAO,QAAQ,CAAC,QAAQ,GAAQ,GAAK,IACtC,CACN,CAAC,GACI,IACF,GACJ,IACF,GACF,IACF,IACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/_theme.bootstrap1/GET.tsx"],"names":[],"mappings":";AAIA,MAAM,UAAU,MAAM,CAAC,IAAkB;IACvC,OAAO,CACL,mBAAS,KAAK,EAAC,sBAAsB,aACnC,eAAK,KAAK,EAAC,MAAM,aACf,cACE,GAAG,EAAE,IAAI,CAAC,OAAO,EACjB,GAAG,EAAC,eAAe,EACnB,KAAK,EAAC,gBAAgB,EACtB,KAAK,EAAC,iCAAiC,GACvC,EACF,aAAI,KAAK,EAAC,SAAS,8BAAmB,EACtC,YAAG,KAAK,EAAC,0BAA0B,wEAA4D,IAC3F,EAEN,eAAK,KAAK,EAAC,SAAS,aAClB,cAAK,KAAK,EAAC,UAAU,YACnB,eAAK,KAAK,EAAC,oCAAoC,aAC7C,aAAI,KAAK,EAAC,SAAS,4BAAiB,EACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAC9B,cAAK,KAAK,EAAC,kDAAkD,YAAC,yBAAO,OAAO,GAAQ,GAAM,CAC3F,CAAC,IACE,GACF,EACN,cAAK,KAAK,EAAC,UAAU,YACnB,eAAK,KAAK,EAAC,gCAAgC,aACzC,eAAK,KAAK,EAAC,wDAAwD,aACjE,eAAM,KAAK,EAAC,aAAa,+BAAsB,EAC/C,eAAM,KAAK,EAAC,qBAAqB,YAAE,IAAI,CAAC,SAAS,GAAQ,IACrD,EACN,cAAK,KAAK,EAAC,kBAAkB,YAC3B,iBAAO,KAAK,EAAC,kCAAkC,aAC7C,0BACE,yBACE,8BAAW,EACX,gCAAa,EACb,oCAAiB,IACd,GACC,EACR,0BACG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAChC,yBACE,uBAAK,QAAQ,CAAC,EAAE,GAAM,EACtB,uBAAK,QAAQ,CAAC,IAAI,GAAM,EACxB,uBAAI,yBAAO,QAAQ,CAAC,QAAQ,GAAQ,GAAK,IACtC,CACN,CAAC,GACI,IACF,GACJ,IACF,GACF,IACF,IACE,CACX,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type ApiAuthRequirement, type CacheHints } from "@betterportal/framework";
2
2
  export declare const viewId = "better-tunnels.downloads";
3
- export declare const title = "BetterTunnels CLI";
3
+ export declare const title = "CLI Downloads";
4
4
  export declare const description = "CLI download and setup commands.";
5
5
  export declare const auth: ApiAuthRequirement;
6
6
  export declare const cacheHints: CacheHints;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC,eAAO,MAAM,WAAW,qCAAqC,CAAC;AAE9D,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,eAAO,MAAM,KAAK,kBAAkB,CAAC;AACrC,eAAO,MAAM,WAAW,qCAAqC,CAAC;AAE9D,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export const viewId = "better-tunnels.downloads";
2
- export const title = "BetterTunnels CLI";
2
+ export const title = "CLI Downloads";
3
3
  export const description = "CLI download and setup commands.";
4
4
  export const auth = {
5
5
  required: false,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,MAAM,GAAG,0BAA0B,CAAC;AACjD,MAAM,CAAC,MAAM,KAAK,GAAG,mBAAmB,CAAC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,kCAAkC,CAAC;AAE9D,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,CAAC;CACpD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/downloads/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,MAAM,GAAG,0BAA0B,CAAC;AACjD,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,kCAAkC,CAAC;AAE9D,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,CAAC;CACpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/landing/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIrC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;EAcC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;;;;;;;;;;;;;;;;AAExD,wBAoCE"}
1
+ {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/landing/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIrC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;EAczB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;;;;;;;;;;;;;;;;AAExD,wBAoCE"}
@@ -13,9 +13,9 @@ export const ResponseSchema = av.object({
13
13
  highlights: av.array(av.object({
14
14
  title: av.string(),
15
15
  body: av.string()
16
- }, { unknownKeys: "strip" })),
16
+ })),
17
17
  limits: av.array(av.string())
18
- }, { unknownKeys: "strip" });
18
+ });
19
19
  export default createHandler({ response: ResponseSchema }, async () => {
20
20
  const brand = await loadBrandAssets();
21
21
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/landing/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;IACnB,WAAW,EAAE,EAAE,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,EAAE,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IACjC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;QAC7B,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE;KAClB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7B,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;CAC9B,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,eAAe,aAAa,CAC1B,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,KAAK,IAAI,EAAE;IACT,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IAEtC,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,MAAM,EAAE,0BAA0B;QAClC,WAAW,EAAE,kCAAkC;QAC/C,OAAO,EAAE,uCAAuC;QAChD,GAAG,KAAK;QACR,UAAU,EAAE;YACV,mCAAmC;YACnC,8CAA8C;SAC/C;QACD,UAAU,EAAE;YACV;gBACE,KAAK,EAAE,wBAAwB;gBAC/B,IAAI,EAAE,8EAA8E;aACrF;YACD;gBACE,KAAK,EAAE,2BAA2B;gBAClC,IAAI,EAAE,oFAAoF;aAC3F;YACD;gBACE,KAAK,EAAE,sBAAsB;gBAC7B,IAAI,EAAE,0FAA0F;aACjG;SACF;QACD,MAAM,EAAE;YACN,mCAAmC;YACnC,kDAAkD;YAClD,+EAA+E;SAChF;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/landing/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;IACnB,WAAW,EAAE,EAAE,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,EAAE,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IACjC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;QAC7B,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE;KAClB,CAAC,CAAC;IACH,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;CAC9B,CAAC,CAAC;AAGH,eAAe,aAAa,CAC1B,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,KAAK,IAAI,EAAE;IACT,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IAEtC,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,MAAM,EAAE,0BAA0B;QAClC,WAAW,EAAE,kCAAkC;QAC/C,OAAO,EAAE,uCAAuC;QAChD,GAAG,KAAK;QACR,UAAU,EAAE;YACV,mCAAmC;YACnC,8CAA8C;SAC/C;QACD,UAAU,EAAE;YACV;gBACE,KAAK,EAAE,wBAAwB;gBAC/B,IAAI,EAAE,8EAA8E;aACrF;YACD;gBACE,KAAK,EAAE,2BAA2B;gBAClC,IAAI,EAAE,oFAAoF;aAC3F;YACD;gBACE,KAAK,EAAE,sBAAsB;gBAC7B,IAAI,EAAE,0FAA0F;aACjG;SACF;QACD,MAAM,EAAE;YACN,mCAAmC;YACnC,kDAAkD;YAClD,+EAA+E;SAChF;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type ApiAuthRequirement, type CacheHints } from "@betterportal/framework";
2
2
  export declare const viewId = "better-tunnels.landing";
3
- export declare const title = "BetterTunnels";
3
+ export declare const title = "Development Tunnels";
4
4
  export declare const description = "Public landing page for BetterTunnels.";
5
5
  export declare const auth: ApiAuthRequirement;
6
6
  export declare const cacheHints: CacheHints;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/landing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,eAAO,MAAM,KAAK,kBAAkB,CAAC;AACrC,eAAO,MAAM,WAAW,2CAA2C,CAAC;AAEpE,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/landing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,eAAO,MAAM,KAAK,wBAAwB,CAAC;AAC3C,eAAO,MAAM,WAAW,2CAA2C,CAAC;AAEpE,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export const viewId = "better-tunnels.landing";
2
- export const title = "BetterTunnels";
2
+ export const title = "Development Tunnels";
3
3
  export const description = "Public landing page for BetterTunnels.";
4
4
  export const auth = {
5
5
  required: false,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/landing/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,MAAM,GAAG,wBAAwB,CAAC;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,wCAAwC,CAAC;AAEpE,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,CAAC;CACpD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/landing/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,MAAM,GAAG,wBAAwB,CAAC;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG,qBAAqB,CAAC;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,wCAAwC,CAAC;AAEpE,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,CAAC;CACpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAkBrC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;EAIC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;;;;;;;;;;;;;;;;;;AAExD,wBA2BE"}
1
+ {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAkBrC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;EAIzB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;;;;;;;;;;;;;;;;;;AAExD,wBA2BE"}
@@ -13,12 +13,12 @@ const TunnelRowSchema = av.object({
13
13
  requests: av.number(),
14
14
  bytesIn: av.number(),
15
15
  bytesOut: av.number()
16
- }, { unknownKeys: "strip" });
16
+ });
17
17
  export const ResponseSchema = av.object({
18
18
  active: av.number(),
19
19
  total: av.number(),
20
20
  tunnels: av.array(TunnelRowSchema)
21
- }, { unknownKeys: "strip" });
21
+ });
22
22
  export default createHandler({ response: ResponseSchema }, async () => {
23
23
  const rows = await prisma.tunnel.findMany({
24
24
  orderBy: { createdAt: "desc" },
@@ -1 +1 @@
1
- {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC;IAChC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE;IACf,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;IACnB,aAAa,EAAE,EAAE,CAAC,IAAI,EAAE;IACxB,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;IACnB,aAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IACvC,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE;CACtB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC;CACnC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,eAAe,aAAa,CAC1B,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,KAAK,IAAI,EAAE;IACT,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;QAC9B,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;KACzB,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;QAC5D,KAAK,EAAE,IAAI,CAAC,MAAM;QAClB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,EAAE;YAC7C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;YAC7C,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;YACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;YACtC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC;YAClC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;YACzC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;SAC5C,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC;IAChC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE;IACf,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;IACnB,aAAa,EAAE,EAAE,CAAC,IAAI,EAAE;IACxB,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;IACnB,aAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IACvC,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC;CACnC,CAAC,CAAC;AAGH,eAAe,aAAa,CAC1B,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,KAAK,IAAI,EAAE;IACT,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;QAC9B,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;KACzB,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;QAC5D,KAAK,EAAE,IAAI,CAAC,MAAM;QAClB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,EAAE;YAC7C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;YAC7C,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;YACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;YACtC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC;YAClC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;YACzC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;SAC5C,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "jsx-htmx/jsx-runtime";
2
2
  export function render(data) {
3
- return (_jsxs("section", { class: "container-fluid px-0", children: [_jsxs("div", { class: "d-flex justify-content-between align-items-start mb-4", children: [_jsxs("div", { children: [_jsx("h1", { class: "h3 mb-1", children: "BetterTunnels" }), _jsx("p", { class: "text-body-secondary mb-0", children: "Live tunnel sessions and recent usage." })] }), _jsxs("div", { class: "text-end", children: [_jsx("div", { class: "h4 mb-0", children: String(data.active) }), _jsxs("div", { class: "small text-body-secondary", children: ["active / ", String(data.total), " shown"] })] })] }), _jsx("div", { class: "card border-0 shadow-sm", children: _jsx("div", { class: "table-responsive", children: _jsxs("table", { class: "table table-sm table-hover align-middle mb-0", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Subdomain" }), _jsx("th", { children: "Target" }), _jsx("th", { children: "Status" }), _jsx("th", { children: "Mode" }), _jsx("th", { class: "text-end", children: "Requests" }), _jsx("th", { children: "Expires" })] }) }), _jsx("tbody", { children: data.tunnels.length === 0 ? (_jsx("tr", { children: _jsx("td", { colspan: "6", class: "text-center text-body-secondary py-4", children: "No tunnels yet." }) })) : data.tunnels.map((tunnel) => (_jsxs("tr", { children: [_jsxs("td", { children: [_jsx("code", { children: tunnel.subdomain }), _jsx("div", { class: "small text-body-secondary", children: tunnel.ownerServerId ?? "no owner" })] }), _jsx("td", { children: tunnel.target }), _jsx("td", { children: _jsx("span", { class: `badge ${tunnel.status === "active" ? "text-bg-success" : "text-bg-secondary"}`, children: tunnel.status }) }), _jsx("td", { children: tunnel.authenticated ? "authenticated" : "anonymous" }), _jsx("td", { class: "text-end", children: String(tunnel.requests) }), _jsx("td", { class: "small text-body-secondary", children: new Date(tunnel.expiresAt).toLocaleString() })] }))) })] }) }) })] }));
3
+ return (_jsxs("section", { class: "container-fluid px-0", children: [_jsxs("div", { class: "d-flex justify-content-between align-items-start mb-4", children: [_jsxs("div", { children: [_jsx("h1", { class: "h3 mb-1", children: "Tunnel Sessions" }), _jsx("p", { class: "text-body-secondary mb-0", children: "Live tunnel sessions and recent usage." })] }), _jsxs("div", { class: "text-end", children: [_jsx("div", { class: "h4 mb-0", children: String(data.active) }), _jsxs("div", { class: "small text-body-secondary", children: ["active / ", String(data.total), " shown"] })] })] }), _jsx("div", { class: "card border-0 shadow-sm", children: _jsx("div", { class: "table-responsive", children: _jsxs("table", { class: "table table-sm table-hover align-middle mb-0", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Subdomain" }), _jsx("th", { children: "Target" }), _jsx("th", { children: "Status" }), _jsx("th", { children: "Mode" }), _jsx("th", { class: "text-end", children: "Requests" }), _jsx("th", { children: "Expires" })] }) }), _jsx("tbody", { children: data.tunnels.length === 0 ? (_jsx("tr", { children: _jsx("td", { colspan: "6", class: "text-center text-body-secondary py-4", children: "No tunnels yet." }) })) : data.tunnels.map((tunnel) => (_jsxs("tr", { children: [_jsxs("td", { children: [_jsx("code", { children: tunnel.subdomain }), _jsx("div", { class: "small text-body-secondary", children: tunnel.ownerServerId ?? "no owner" })] }), _jsx("td", { children: tunnel.target }), _jsx("td", { children: _jsx("span", { class: `badge ${tunnel.status === "active" ? "text-bg-success" : "text-bg-secondary"}`, children: tunnel.status }) }), _jsx("td", { children: tunnel.authenticated ? "authenticated" : "anonymous" }), _jsx("td", { class: "text-end", children: String(tunnel.requests) }), _jsx("td", { class: "small text-body-secondary", children: new Date(tunnel.expiresAt).toLocaleString() })] }))) })] }) }) })] }));
4
4
  }
5
5
  //# sourceMappingURL=GET.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/_theme.bootstrap1/GET.tsx"],"names":[],"mappings":";AAIA,MAAM,UAAU,MAAM,CAAC,IAAkB;IACvC,OAAO,CACL,mBAAS,KAAK,EAAC,sBAAsB,aACnC,eAAK,KAAK,EAAC,uDAAuD,aAChE,0BACE,aAAI,KAAK,EAAC,SAAS,8BAAmB,EACtC,YAAG,KAAK,EAAC,0BAA0B,uDAA2C,IAC1E,EACN,eAAK,KAAK,EAAC,UAAU,aACnB,cAAK,KAAK,EAAC,SAAS,YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAO,EAChD,eAAK,KAAK,EAAC,2BAA2B,0BAAW,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAa,IAC5E,IACF,EAEN,cAAK,KAAK,EAAC,yBAAyB,YAClC,cAAK,KAAK,EAAC,kBAAkB,YAC3B,iBAAO,KAAK,EAAC,8CAA8C,aACzD,0BACE,yBACE,qCAAkB,EAClB,kCAAe,EACf,kCAAe,EACf,gCAAa,EACb,aAAI,KAAK,EAAC,UAAU,yBAAc,EAClC,mCAAgB,IACb,GACC,EACR,0BACG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC3B,uBACE,aAAI,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,sCAAsC,gCAAqB,GAC9E,CACN,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC/B,yBACE,yBACE,yBAAO,MAAM,CAAC,SAAS,GAAQ,EAC/B,cAAK,KAAK,EAAC,2BAA2B,YAAE,MAAM,CAAC,aAAa,IAAI,UAAU,GAAO,IAC9E,EACL,uBAAK,MAAM,CAAC,MAAM,GAAM,EACxB,uBAAI,eAAM,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,EAAE,YAAG,MAAM,CAAC,MAAM,GAAQ,GAAK,EAC7H,uBAAK,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,GAAM,EAC/D,aAAI,KAAK,EAAC,UAAU,YAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAM,EACnD,aAAI,KAAK,EAAC,2BAA2B,YAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,GAAM,IACrF,CACN,CAAC,GACI,IACF,GACJ,GACF,IACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/_theme.bootstrap1/GET.tsx"],"names":[],"mappings":";AAIA,MAAM,UAAU,MAAM,CAAC,IAAkB;IACvC,OAAO,CACL,mBAAS,KAAK,EAAC,sBAAsB,aACnC,eAAK,KAAK,EAAC,uDAAuD,aAChE,0BACE,aAAI,KAAK,EAAC,SAAS,gCAAqB,EACxC,YAAG,KAAK,EAAC,0BAA0B,uDAA2C,IAC1E,EACN,eAAK,KAAK,EAAC,UAAU,aACnB,cAAK,KAAK,EAAC,SAAS,YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAO,EAChD,eAAK,KAAK,EAAC,2BAA2B,0BAAW,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAa,IAC5E,IACF,EAEN,cAAK,KAAK,EAAC,yBAAyB,YAClC,cAAK,KAAK,EAAC,kBAAkB,YAC3B,iBAAO,KAAK,EAAC,8CAA8C,aACzD,0BACE,yBACE,qCAAkB,EAClB,kCAAe,EACf,kCAAe,EACf,gCAAa,EACb,aAAI,KAAK,EAAC,UAAU,yBAAc,EAClC,mCAAgB,IACb,GACC,EACR,0BACG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC3B,uBACE,aAAI,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,sCAAsC,gCAAqB,GAC9E,CACN,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC/B,yBACE,yBACE,yBAAO,MAAM,CAAC,SAAS,GAAQ,EAC/B,cAAK,KAAK,EAAC,2BAA2B,YAAE,MAAM,CAAC,aAAa,IAAI,UAAU,GAAO,IAC9E,EACL,uBAAK,MAAM,CAAC,MAAM,GAAM,EACxB,uBAAI,eAAM,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,EAAE,YAAG,MAAM,CAAC,MAAM,GAAQ,GAAK,EAC7H,uBAAK,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,GAAM,EAC/D,aAAI,KAAK,EAAC,UAAU,YAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAM,EACnD,aAAI,KAAK,EAAC,2BAA2B,YAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,GAAM,IACrF,CACN,CAAC,GACI,IACF,GACJ,GACF,IACE,CACX,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type ApiAuthRequirement, type CacheHints } from "@betterportal/framework";
2
2
  export declare const viewId = "better-tunnels.tunnels";
3
- export declare const title = "BetterTunnels";
3
+ export declare const title = "Tunnel Sessions";
4
4
  export declare const description = "Tunnel sessions, status, and recent activity.";
5
5
  export declare const auth: ApiAuthRequirement;
6
6
  export declare const cacheHints: CacheHints;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,eAAO,MAAM,KAAK,kBAAkB,CAAC;AACrC,eAAO,MAAM,WAAW,kDAAkD,CAAC;AAE3E,eAAO,MAAM,IAAI,EAAE,kBAKlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,eAAO,MAAM,KAAK,oBAAoB,CAAC;AACvC,eAAO,MAAM,WAAW,kDAAkD,CAAC;AAE3E,eAAO,MAAM,IAAI,EAAE,kBAKlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export const viewId = "better-tunnels.tunnels";
2
- export const title = "BetterTunnels";
2
+ export const title = "Tunnel Sessions";
3
3
  export const description = "Tunnel sessions, status, and recent activity.";
4
4
  export const auth = {
5
5
  required: true,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,MAAM,GAAG,wBAAwB,CAAC;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,+CAA+C,CAAC;AAE3E,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE;QACX,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE;KAC7E;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,CAAC;CACrE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-tunnels-admin/bp-routes/tunnels/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,MAAM,GAAG,wBAAwB,CAAC;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG,iBAAiB,CAAC;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,+CAA+C,CAAC;AAE3E,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE;QACX,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE;KAC7E;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,CAAC;CACrE,CAAC"}
@@ -8,9 +8,9 @@ const PluginConfigSchema = av.object({
8
8
  port: av.int().min(1).default(8083),
9
9
  database: av.object({
10
10
  connectionString: av.string().minLength(1).describe("PostgreSQL connection string")
11
- }, { unknownKeys: "strip" }).describe("Database configuration"),
11
+ }).describe("Database configuration"),
12
12
  betterportal: BetterPortalConfigSchema
13
- }, { unknownKeys: "strip" });
13
+ });
14
14
  const Config = createConfigSchema({
15
15
  name: "service-tunnels-admin",
16
16
  description: "BetterPortal public and management UI for BetterTunnels",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/service-tunnels-admin/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/service-tunnels-admin/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-tunnels-client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EAOhB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAuB9B,eAAO,MAAM,MAAM;;;;;;;;;GAgBlB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDvB,CAAC;AAEH,qBAAa,MAAO,SAAQ,UAAU,CAAC,YAAY,CAAC,OAAO,MAAM,CAAC,EAAE,OAAO,YAAY,CAAC;IACtF,MAAM,CAAC,MAAM;;;;;;;;;QAAU;IACvB,MAAM,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAgB;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAM;IACzC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAM;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,oBAAoB,CAAW;gBAE3B,GAAG,EAAE,qBAAqB,CAAC,YAAY,CAAC,OAAO,MAAM,CAAC,EAAE,OAAO,YAAY,CAAC;IAQlF,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA+LpC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAOhB,kBAAkB;YA2JlB,YAAY;IA0E1B,OAAO,CAAC,iBAAiB;IA0DzB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,kBAAkB;CAK3B;AAwCD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,QAAQ,CAG/F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-tunnels-client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EAOhB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAuB9B,eAAO,MAAM,MAAM;;;;;;;;;GAgBlB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDvB,CAAC;AAEH,qBAAa,MAAO,SAAQ,UAAU,CAAC,YAAY,CAAC,OAAO,MAAM,CAAC,EAAE,OAAO,YAAY,CAAC;IACtF,MAAM,CAAC,MAAM;;;;;;;;;QAAU;IACvB,MAAM,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAgB;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAM;IACzC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAM;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,oBAAoB,CAAW;gBAE3B,GAAG,EAAE,qBAAqB,CAAC,YAAY,CAAC,OAAO,MAAM,CAAC,EAAE,OAAO,YAAY,CAAC;IAQlF,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA+MpC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAehB,kBAAkB;YAwKlB,YAAY;IA0E1B,OAAO,CAAC,iBAAiB;IA0DzB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,kBAAkB;CAK3B;AAwCD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,QAAQ,CAG/F"}
@@ -10,7 +10,7 @@ import { buildTunnelSubdomain, hashValue, randomPrefix } from "./ids.js";
10
10
  import { prisma } from "../../prisma.js";
11
11
  import { initializePrisma } from "../../prisma.js";
12
12
  import { AUTH_SESSION_TTL_MS, DEVICE_TOKEN_TTL_MS, bearerToken, hashSecret, normalizeIpRange, randomToken, shortBrowserKey, verifySecret } from "../../auth.js";
13
- import { TunnelRegistry } from "./registry.js";
13
+ import { TunnelRegistry, tunnelStatusAfterDisconnect } from "./registry.js";
14
14
  import TunnelWebClient from "../../.bsb/clients/service-tunnels-proxy.js";
15
15
  export const Config = createConfigSchema({
16
16
  name: "service-tunnels-client",
@@ -19,7 +19,7 @@ export const Config = createConfigSchema({
19
19
  }, av.object({
20
20
  database: av.object({
21
21
  connectionString: av.string().minLength(1).describe("PostgreSQL connection string")
22
- }, { unknownKeys: "strip" }).describe("Database configuration"),
22
+ }).describe("Database configuration"),
23
23
  port: av.number().default(8081).describe("Client API listener port"),
24
24
  domain: av.string().default("tunnels.betterportal.dev").describe("Default public tunnel domain"),
25
25
  publicUrl: av.string().default("https://tunnels.betterportal.dev").describe("Public base URL"),
@@ -95,6 +95,22 @@ export class Plugin extends BSBService {
95
95
  async init(obs) {
96
96
  await initializePrisma(this.config.database.connectionString, obs);
97
97
  this.pluginPackageVersion = await loadPluginPackageVersion(this.packageCwd);
98
+ const now = new Date();
99
+ const [expired, disconnected] = await prisma.$transaction([
100
+ prisma.tunnel.updateMany({
101
+ where: { status: "active", expiresAt: { lte: now } },
102
+ data: { status: "expired" }
103
+ }),
104
+ // ponytail: single client-api replica; add owner heartbeats before horizontal scaling.
105
+ prisma.tunnel.updateMany({
106
+ where: { status: "active" },
107
+ data: { status: "disconnected" }
108
+ })
109
+ ]);
110
+ obs.log.info("CLIENT SESSION reconciled expired={expired} disconnected={disconnected}", {
111
+ expired: expired.count,
112
+ disconnected: disconnected.count
113
+ });
98
114
  obs.log.info("init {plugin}", { plugin: this.pluginName });
99
115
  await this.events.onReturnableEvent("proxy.request", obs, async (_handlerObs, input) => {
100
116
  _handlerObs.log.info("CLIENT API proxy.request {method} {hostname}{path}", {
@@ -281,6 +297,14 @@ export class Plugin extends BSBService {
281
297
  obs.log.info(`client-api listening on port ${port}`);
282
298
  }
283
299
  async dispose() {
300
+ for (const tunnel of this.registry.values()) {
301
+ clearTimeout(tunnel.expiryTimer);
302
+ tunnel.ws.close(1001, "server shutting down");
303
+ }
304
+ await prisma.tunnel.updateMany({
305
+ where: { status: "active", ownerServerId: this.appId },
306
+ data: { status: "disconnected" }
307
+ });
284
308
  this.wss.close();
285
309
  await new Promise((resolve, reject) => {
286
310
  this.server.close((error) => error ? reject(error) : resolve());
@@ -383,6 +407,12 @@ export class Plugin extends BSBService {
383
407
  expiresAt
384
408
  }
385
409
  });
410
+ const expiryTimer = setTimeout(() => {
411
+ if (this.registry.get(subdomain)?.ws === ws) {
412
+ ws.close(1008, "tunnel expired");
413
+ }
414
+ }, Math.max(0, expiresAt.getTime() - Date.now()));
415
+ expiryTimer.unref();
386
416
  const tunnel = {
387
417
  id: tunnelRow.id,
388
418
  subdomain,
@@ -391,6 +421,7 @@ export class Plugin extends BSBService {
391
421
  authenticated,
392
422
  expiresAt,
393
423
  ws,
424
+ expiryTimer,
394
425
  pending: new Map(),
395
426
  sessionObs
396
427
  };
@@ -405,10 +436,12 @@ export class Plugin extends BSBService {
405
436
  publicUrl: publicUrl.replace(/\/$/, "").replace(`://${domain}`, `://${subdomain}.${domain}`),
406
437
  subdomain,
407
438
  expiresAt: expiresAt.toISOString(),
408
- serverVersion: this.pluginPackageVersion
439
+ serverVersion: this.pluginPackageVersion,
440
+ validation
409
441
  }));
410
442
  ws.on("message", (raw) => this.handleClientFrame(tunnel, raw.toString()));
411
443
  ws.on("close", (code, reason) => {
444
+ clearTimeout(tunnel.expiryTimer);
412
445
  sessionObs.log.warn("CLIENT TUNNEL disconnected {subdomain}", { subdomain });
413
446
  for (const [requestId, pending] of tunnel.pending.entries()) {
414
447
  this.failPending(tunnel, requestId, pending, new Error("Tunnel client disconnected."));
@@ -416,7 +449,10 @@ export class Plugin extends BSBService {
416
449
  // A reconnect may already own this subdomain; only tear down if this socket is still the registered one.
417
450
  if (this.registry.get(subdomain)?.ws === ws) {
418
451
  this.registry.delete(subdomain);
419
- void prisma.tunnel.update({ where: { id: tunnel.id }, data: { status: "disconnected" } }).catch(() => undefined);
452
+ void prisma.tunnel.update({
453
+ where: { id: tunnel.id },
454
+ data: { status: tunnelStatusAfterDisconnect(tunnel.expiresAt) }
455
+ }).catch(() => undefined);
420
456
  }
421
457
  sessionObs.end({ "bt.client.disconnect": true });
422
458
  sessionObs.log.warn("CLIENT TUNNEL socket closed {subdomain} code={code} reason={reason}", {