@betterportal/tunnels 1.0.24 → 1.0.26

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 (160) hide show
  1. package/lib/.bsb/clients/service-tunnels-client.d.ts +133 -0
  2. package/lib/.bsb/clients/service-tunnels-client.d.ts.map +1 -0
  3. package/lib/.bsb/clients/service-tunnels-client.js +102 -0
  4. package/lib/.bsb/clients/service-tunnels-client.js.map +1 -0
  5. package/lib/.bsb/clients/service-tunnels-proxy.d.ts +43 -0
  6. package/lib/.bsb/clients/service-tunnels-proxy.d.ts.map +1 -0
  7. package/lib/.bsb/clients/service-tunnels-proxy.js +47 -0
  8. package/lib/.bsb/clients/service-tunnels-proxy.js.map +1 -0
  9. package/lib/auth.d.ts +12 -0
  10. package/lib/auth.d.ts.map +1 -0
  11. package/lib/auth.js +59 -0
  12. package/lib/auth.js.map +1 -0
  13. package/lib/cli.d.ts +2 -0
  14. package/lib/cli.d.ts.map +1 -0
  15. package/lib/cli.js +406 -0
  16. package/lib/cli.js.map +1 -0
  17. package/lib/generated/prisma/client.d.ts +1 -0
  18. package/lib/generated/prisma/client.js +5 -0
  19. package/lib/generated/prisma/default.d.ts +1 -0
  20. package/lib/generated/prisma/default.js +5 -0
  21. package/lib/generated/prisma/edge.d.ts +1 -0
  22. package/lib/generated/prisma/edge.js +278 -0
  23. package/lib/generated/prisma/index-browser.js +304 -0
  24. package/lib/generated/prisma/index.d.ts +13885 -0
  25. package/lib/generated/prisma/index.js +278 -0
  26. package/lib/generated/prisma/package.json +144 -0
  27. package/lib/generated/prisma/query_compiler_fast_bg.js +2 -0
  28. package/lib/generated/prisma/query_compiler_fast_bg.wasm +0 -0
  29. package/lib/generated/prisma/query_compiler_fast_bg.wasm-base64.js +2 -0
  30. package/lib/generated/prisma/runtime/client.d.ts +3386 -0
  31. package/lib/generated/prisma/runtime/client.js +86 -0
  32. package/lib/generated/prisma/runtime/index-browser.d.ts +90 -0
  33. package/lib/generated/prisma/runtime/index-browser.js +6 -0
  34. package/lib/generated/prisma/runtime/wasm-compiler-edge.js +76 -0
  35. package/lib/generated/prisma/schema.prisma +142 -0
  36. package/lib/generated/prisma/wasm-edge-light-loader.mjs +5 -0
  37. package/lib/generated/prisma/wasm-worker-loader.mjs +5 -0
  38. package/lib/plugins/service-tunnels-admin/.bp-generated/registry.d.ts +3 -0
  39. package/lib/plugins/service-tunnels-admin/.bp-generated/registry.d.ts.map +1 -0
  40. package/lib/plugins/service-tunnels-admin/.bp-generated/registry.js +152 -0
  41. package/lib/plugins/service-tunnels-admin/.bp-generated/registry.js.map +1 -0
  42. package/lib/plugins/service-tunnels-admin/.bp-generated/route-runtime.d.ts +9 -0
  43. package/lib/plugins/service-tunnels-admin/.bp-generated/route-runtime.d.ts.map +1 -0
  44. package/lib/plugins/service-tunnels-admin/.bp-generated/route-runtime.js +6 -0
  45. package/lib/plugins/service-tunnels-admin/.bp-generated/route-runtime.js.map +1 -0
  46. package/lib/plugins/service-tunnels-admin/assets/brand/bettertunnels-horizontal-light.svg +18 -0
  47. package/lib/plugins/service-tunnels-admin/assets/brand/bettertunnels-square-dark-1024x1024.png +0 -0
  48. package/lib/plugins/service-tunnels-admin/assets/brand/favicon.svg +12 -0
  49. package/lib/plugins/service-tunnels-admin/betterportal-logo.png +0 -0
  50. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/GET.d.ts +20 -0
  51. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/GET.d.ts.map +1 -0
  52. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/GET.js +51 -0
  53. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/GET.js.map +1 -0
  54. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/_theme.bootstrap1/GET.d.ts +5 -0
  55. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/_theme.bootstrap1/GET.d.ts.map +1 -0
  56. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/_theme.bootstrap1/GET.js +6 -0
  57. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/_theme.bootstrap1/GET.js.map +1 -0
  58. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/index.d.ts +7 -0
  59. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/index.d.ts.map +1 -0
  60. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/index.js +12 -0
  61. package/lib/plugins/service-tunnels-admin/bp-routes/cli-auth/verify/index.js.map +1 -0
  62. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.d.ts +40 -0
  63. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.d.ts.map +1 -0
  64. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.js +57 -0
  65. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/GET.js.map +1 -0
  66. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/GET.d.ts +6 -0
  67. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/GET.d.ts.map +1 -0
  68. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/GET.js +30 -0
  69. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/GET.js.map +1 -0
  70. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/index.stream.d.ts +6 -0
  71. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/index.stream.d.ts.map +1 -0
  72. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/index.stream.js +9 -0
  73. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/_theme.bootstrap1/index.stream.js.map +1 -0
  74. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/index.d.ts +7 -0
  75. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/index.d.ts.map +1 -0
  76. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/index.js +14 -0
  77. package/lib/plugins/service-tunnels-admin/bp-routes/dashboard/index.js.map +1 -0
  78. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/GET.d.ts +25 -0
  79. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/GET.d.ts.map +1 -0
  80. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/GET.js +34 -0
  81. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/GET.js.map +1 -0
  82. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/_theme.bootstrap1/GET.d.ts +5 -0
  83. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/_theme.bootstrap1/GET.d.ts.map +1 -0
  84. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/_theme.bootstrap1/GET.js +5 -0
  85. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/_theme.bootstrap1/GET.js.map +1 -0
  86. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/index.d.ts +7 -0
  87. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/index.d.ts.map +1 -0
  88. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/index.js +12 -0
  89. package/lib/plugins/service-tunnels-admin/bp-routes/downloads/index.js.map +1 -0
  90. package/lib/plugins/service-tunnels-admin/bp-routes/landing/GET.d.ts +35 -0
  91. package/lib/plugins/service-tunnels-admin/bp-routes/landing/GET.d.ts.map +1 -0
  92. package/lib/plugins/service-tunnels-admin/bp-routes/landing/GET.js +52 -0
  93. package/lib/plugins/service-tunnels-admin/bp-routes/landing/GET.js.map +1 -0
  94. package/lib/plugins/service-tunnels-admin/bp-routes/landing/_theme.bootstrap1/GET.d.ts +5 -0
  95. package/lib/plugins/service-tunnels-admin/bp-routes/landing/_theme.bootstrap1/GET.d.ts.map +1 -0
  96. package/lib/plugins/service-tunnels-admin/bp-routes/landing/_theme.bootstrap1/GET.js +5 -0
  97. package/lib/plugins/service-tunnels-admin/bp-routes/landing/_theme.bootstrap1/GET.js.map +1 -0
  98. package/lib/plugins/service-tunnels-admin/bp-routes/landing/index.d.ts +7 -0
  99. package/lib/plugins/service-tunnels-admin/bp-routes/landing/index.d.ts.map +1 -0
  100. package/lib/plugins/service-tunnels-admin/bp-routes/landing/index.js +12 -0
  101. package/lib/plugins/service-tunnels-admin/bp-routes/landing/index.js.map +1 -0
  102. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/GET.d.ts +39 -0
  103. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/GET.d.ts.map +1 -0
  104. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/GET.js +46 -0
  105. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/GET.js.map +1 -0
  106. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/_theme.bootstrap1/GET.d.ts +5 -0
  107. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/_theme.bootstrap1/GET.d.ts.map +1 -0
  108. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/_theme.bootstrap1/GET.js +5 -0
  109. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/_theme.bootstrap1/GET.js.map +1 -0
  110. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/index.d.ts +7 -0
  111. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/index.d.ts.map +1 -0
  112. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/index.js +14 -0
  113. package/lib/plugins/service-tunnels-admin/bp-routes/tunnels/index.js.map +1 -0
  114. package/lib/plugins/service-tunnels-admin/brand-assets.d.ts +7 -0
  115. package/lib/plugins/service-tunnels-admin/brand-assets.d.ts.map +1 -0
  116. package/lib/plugins/service-tunnels-admin/brand-assets.js +24 -0
  117. package/lib/plugins/service-tunnels-admin/brand-assets.js.map +1 -0
  118. package/lib/plugins/service-tunnels-admin/index.d.ts +64 -0
  119. package/lib/plugins/service-tunnels-admin/index.d.ts.map +1 -0
  120. package/lib/plugins/service-tunnels-admin/index.js +116 -0
  121. package/lib/plugins/service-tunnels-admin/index.js.map +1 -0
  122. package/lib/plugins/service-tunnels-client/ids.d.ts +6 -0
  123. package/lib/plugins/service-tunnels-client/ids.d.ts.map +1 -0
  124. package/lib/plugins/service-tunnels-client/ids.js +17 -0
  125. package/lib/plugins/service-tunnels-client/ids.js.map +1 -0
  126. package/lib/plugins/service-tunnels-client/index.d.ts +166 -0
  127. package/lib/plugins/service-tunnels-client/index.d.ts.map +1 -0
  128. package/lib/plugins/service-tunnels-client/index.js +733 -0
  129. package/lib/plugins/service-tunnels-client/index.js.map +1 -0
  130. package/lib/plugins/service-tunnels-client/registry.d.ts +39 -0
  131. package/lib/plugins/service-tunnels-client/registry.d.ts.map +1 -0
  132. package/lib/plugins/service-tunnels-client/registry.js +20 -0
  133. package/lib/plugins/service-tunnels-client/registry.js.map +1 -0
  134. package/lib/plugins/service-tunnels-client/schemas.d.ts +91 -0
  135. package/lib/plugins/service-tunnels-client/schemas.d.ts.map +1 -0
  136. package/lib/plugins/service-tunnels-client/schemas.js +73 -0
  137. package/lib/plugins/service-tunnels-client/schemas.js.map +1 -0
  138. package/lib/plugins/service-tunnels-proxy/http.d.ts +5 -0
  139. package/lib/plugins/service-tunnels-proxy/http.d.ts.map +1 -0
  140. package/lib/plugins/service-tunnels-proxy/http.js +125 -0
  141. package/lib/plugins/service-tunnels-proxy/http.js.map +1 -0
  142. package/lib/plugins/service-tunnels-proxy/index.d.ts +85 -0
  143. package/lib/plugins/service-tunnels-proxy/index.d.ts.map +1 -0
  144. package/lib/plugins/service-tunnels-proxy/index.js +288 -0
  145. package/lib/plugins/service-tunnels-proxy/index.js.map +1 -0
  146. package/lib/plugins/service-tunnels-proxy/verification.d.ts +31 -0
  147. package/lib/plugins/service-tunnels-proxy/verification.d.ts.map +1 -0
  148. package/lib/plugins/service-tunnels-proxy/verification.js +211 -0
  149. package/lib/plugins/service-tunnels-proxy/verification.js.map +1 -0
  150. package/lib/prisma.d.ts +7 -0
  151. package/lib/prisma.d.ts.map +1 -0
  152. package/lib/prisma.js +149 -0
  153. package/lib/prisma.js.map +1 -0
  154. package/lib/schemas/service-tunnels-admin.json +129 -0
  155. package/lib/schemas/service-tunnels-admin.plugin.json +140 -0
  156. package/lib/schemas/service-tunnels-client.json +320 -0
  157. package/lib/schemas/service-tunnels-client.plugin.json +97 -0
  158. package/lib/schemas/service-tunnels-proxy.json +160 -0
  159. package/lib/schemas/service-tunnels-proxy.plugin.json +123 -0
  160. package/package.json +1 -1
package/lib/prisma.js ADDED
@@ -0,0 +1,149 @@
1
+ import { PrismaPg } from "@prisma/adapter-pg";
2
+ import { PrismaClient } from "./generated/prisma/index.js";
3
+ import { createHash, randomUUID } from "node:crypto";
4
+ import { existsSync } from "node:fs";
5
+ import { readdir, readFile } from "node:fs/promises";
6
+ import { dirname, join } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { Client } from "pg";
9
+ let prismaClient;
10
+ let configuredConnectionString;
11
+ let migrationConnectionString;
12
+ let migrationPromise;
13
+ const MIGRATION_LOCK_ID = 836466020763084328n;
14
+ export async function initializePrisma(connectionString, obs) {
15
+ await runPrismaMigrations(connectionString, obs);
16
+ return configurePrisma(connectionString);
17
+ }
18
+ export function configurePrisma(connectionString) {
19
+ if (!connectionString) {
20
+ throw new Error("Prisma connection string is required");
21
+ }
22
+ if (prismaClient) {
23
+ if (configuredConnectionString !== connectionString) {
24
+ throw new Error("Prisma has already been configured with a different connection string");
25
+ }
26
+ return prismaClient;
27
+ }
28
+ configuredConnectionString = connectionString;
29
+ prismaClient = new PrismaClient({
30
+ adapter: new PrismaPg({ connectionString })
31
+ });
32
+ return prismaClient;
33
+ }
34
+ async function runPrismaMigrations(connectionString, obs) {
35
+ if (!connectionString) {
36
+ throw new Error("Prisma connection string is required");
37
+ }
38
+ if (migrationPromise) {
39
+ if (migrationConnectionString !== connectionString) {
40
+ throw new Error("Prisma migrations have already been configured with a different connection string");
41
+ }
42
+ return migrationPromise;
43
+ }
44
+ migrationConnectionString = connectionString;
45
+ migrationPromise = applyPrismaMigrations(connectionString, obs);
46
+ return migrationPromise;
47
+ }
48
+ async function applyPrismaMigrations(connectionString, obs) {
49
+ const migrationsDir = findMigrationsDir();
50
+ const migrationNames = (await readdir(migrationsDir, { withFileTypes: true }))
51
+ .filter((entry) => entry.isDirectory())
52
+ .map((entry) => entry.name)
53
+ .sort();
54
+ const client = new Client({ connectionString });
55
+ await client.connect();
56
+ try {
57
+ await client.query("SELECT pg_advisory_lock($1)", [MIGRATION_LOCK_ID.toString()]);
58
+ await ensurePrismaMigrationsTable(client);
59
+ const applied = await loadAppliedMigrations(client);
60
+ for (const migrationName of migrationNames) {
61
+ const sql = await readFile(join(migrationsDir, migrationName, "migration.sql"), "utf8");
62
+ const checksum = createHash("sha256").update(sql).digest("hex");
63
+ const existing = applied.get(migrationName);
64
+ if (existing) {
65
+ if (!existing.finishedAt && !existing.rolledBackAt) {
66
+ throw new Error(`Prisma migration ${migrationName} was started but not completed`);
67
+ }
68
+ if (existing.checksum !== checksum) {
69
+ throw new Error(`Prisma migration ${migrationName} checksum does not match the applied migration`);
70
+ }
71
+ continue;
72
+ }
73
+ obs?.log?.info?.("Applying Prisma migration {migration}", { migration: migrationName });
74
+ await client.query("BEGIN");
75
+ try {
76
+ const id = randomUUID();
77
+ await client.query(`INSERT INTO "_prisma_migrations"
78
+ (id, checksum, migration_name, started_at, applied_steps_count)
79
+ VALUES ($1, $2, $3, now(), 0)`, [id, checksum, migrationName]);
80
+ if (sql.trim()) {
81
+ await client.query(sql);
82
+ }
83
+ await client.query(`UPDATE "_prisma_migrations"
84
+ SET finished_at = now(), applied_steps_count = 1
85
+ WHERE migration_name = $1`, [migrationName]);
86
+ await client.query("COMMIT");
87
+ }
88
+ catch (error) {
89
+ await client.query("ROLLBACK");
90
+ throw error;
91
+ }
92
+ }
93
+ }
94
+ finally {
95
+ await client.query("SELECT pg_advisory_unlock($1)", [MIGRATION_LOCK_ID.toString()]).catch(() => undefined);
96
+ await client.end();
97
+ }
98
+ }
99
+ function findMigrationsDir() {
100
+ const start = dirname(fileURLToPath(import.meta.url));
101
+ const candidates = [
102
+ join(start, "..", "prisma", "migrations"),
103
+ join(start, "..", "..", "prisma", "migrations")
104
+ ];
105
+ const migrationsDir = candidates.find((candidate) => existsSync(candidate));
106
+ if (!migrationsDir) {
107
+ throw new Error(`Prisma migrations directory was not found from ${start}`);
108
+ }
109
+ return migrationsDir;
110
+ }
111
+ async function ensurePrismaMigrationsTable(client) {
112
+ await client.query(`
113
+ CREATE TABLE IF NOT EXISTS "_prisma_migrations" (
114
+ id VARCHAR(36) PRIMARY KEY NOT NULL,
115
+ checksum VARCHAR(64) NOT NULL,
116
+ finished_at TIMESTAMPTZ,
117
+ migration_name VARCHAR(255) NOT NULL,
118
+ logs TEXT,
119
+ rolled_back_at TIMESTAMPTZ,
120
+ started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
121
+ applied_steps_count INTEGER NOT NULL DEFAULT 0
122
+ )
123
+ `);
124
+ }
125
+ async function loadAppliedMigrations(client) {
126
+ const result = await client.query(`SELECT migration_name, checksum, finished_at, rolled_back_at FROM "_prisma_migrations"`);
127
+ return new Map(result.rows.map((row) => [
128
+ row.migration_name,
129
+ {
130
+ checksum: row.checksum,
131
+ finishedAt: row.finished_at,
132
+ rolledBackAt: row.rolled_back_at
133
+ }
134
+ ]));
135
+ }
136
+ export function getPrisma() {
137
+ if (!prismaClient) {
138
+ throw new Error("Prisma is not configured. Configure it from BSB service config before use.");
139
+ }
140
+ return prismaClient;
141
+ }
142
+ export const prisma = new Proxy({}, {
143
+ get(_target, property) {
144
+ const client = getPrisma();
145
+ const value = client[property];
146
+ return typeof value === "function" ? value.bind(client) : value;
147
+ }
148
+ });
149
+ //# sourceMappingURL=prisma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../src/prisma.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ {
2
+ "pluginName": "service-tunnels-admin",
3
+ "events": {},
4
+ "version": "1.0.26",
5
+ "configSchema": {
6
+ "anyvaliVersion": "1.0",
7
+ "schemaVersion": "1.1",
8
+ "root": {
9
+ "kind": "object",
10
+ "properties": {
11
+ "host": {
12
+ "kind": "string",
13
+ "minLength": 1,
14
+ "default": "0.0.0.0"
15
+ },
16
+ "port": {
17
+ "kind": "int",
18
+ "min": 1,
19
+ "default": 8083
20
+ },
21
+ "database": {
22
+ "kind": "object",
23
+ "properties": {
24
+ "connectionString": {
25
+ "kind": "string",
26
+ "minLength": 1,
27
+ "metadata": {
28
+ "description": "PostgreSQL connection string"
29
+ }
30
+ }
31
+ },
32
+ "required": [
33
+ "connectionString"
34
+ ],
35
+ "unknownKeys": "strip",
36
+ "metadata": {
37
+ "description": "Database configuration"
38
+ }
39
+ },
40
+ "betterportal": {
41
+ "kind": "optional",
42
+ "inner": {
43
+ "kind": "object",
44
+ "properties": {
45
+ "bpConfigPath": {
46
+ "kind": "optional",
47
+ "inner": {
48
+ "kind": "string",
49
+ "minLength": 1
50
+ }
51
+ },
52
+ "configApiToken": {
53
+ "kind": "optional",
54
+ "inner": {
55
+ "kind": "string",
56
+ "minLength": 1
57
+ }
58
+ },
59
+ "configEncryptionKey": {
60
+ "kind": "optional",
61
+ "inner": {
62
+ "kind": "string",
63
+ "minLength": 16
64
+ }
65
+ },
66
+ "controlPlaneUrl": {
67
+ "kind": "optional",
68
+ "inner": {
69
+ "kind": "string",
70
+ "minLength": 1
71
+ }
72
+ },
73
+ "serviceApiKey": {
74
+ "kind": "optional",
75
+ "inner": {
76
+ "kind": "string",
77
+ "minLength": 1
78
+ }
79
+ },
80
+ "bootstrapStatePath": {
81
+ "kind": "string",
82
+ "minLength": 1,
83
+ "default": "./.bp-bootstrap/state.enc"
84
+ },
85
+ "scopedConfigCachePath": {
86
+ "kind": "string",
87
+ "minLength": 1,
88
+ "default": "./.bp-sync-cache/scoped.json"
89
+ },
90
+ "trustedProxyHeaders": {
91
+ "kind": "bool",
92
+ "default": false
93
+ },
94
+ "cfProxy": {
95
+ "kind": "bool",
96
+ "default": false
97
+ },
98
+ "trustedProxyIps": {
99
+ "kind": "array",
100
+ "items": {
101
+ "kind": "string",
102
+ "minLength": 1
103
+ },
104
+ "default": []
105
+ }
106
+ },
107
+ "required": [
108
+ "bootstrapStatePath",
109
+ "scopedConfigCachePath",
110
+ "trustedProxyHeaders",
111
+ "cfProxy",
112
+ "trustedProxyIps"
113
+ ],
114
+ "unknownKeys": "strip"
115
+ }
116
+ }
117
+ },
118
+ "required": [
119
+ "host",
120
+ "port",
121
+ "database"
122
+ ],
123
+ "unknownKeys": "strip"
124
+ },
125
+ "definitions": {},
126
+ "extensions": {}
127
+ },
128
+ "pluginType": "service"
129
+ }
@@ -0,0 +1,140 @@
1
+ {
2
+ "id": "service-tunnels-admin",
3
+ "name": "service-tunnels-admin",
4
+ "version": "1.0.26",
5
+ "description": "BetterPortal public and management UI for BetterTunnels",
6
+ "category": "service",
7
+ "tags": [
8
+ "betterportal",
9
+ "web",
10
+ "management",
11
+ "tunnels"
12
+ ],
13
+ "documentation": [],
14
+ "dependencies": [],
15
+ "license": "(AGPL-3.0-only OR Commercial)",
16
+ "image": "./betterportal-logo.png",
17
+ "configSchema": {
18
+ "anyvaliVersion": "1.0",
19
+ "schemaVersion": "1.1",
20
+ "root": {
21
+ "kind": "object",
22
+ "properties": {
23
+ "host": {
24
+ "kind": "string",
25
+ "minLength": 1,
26
+ "default": "0.0.0.0"
27
+ },
28
+ "port": {
29
+ "kind": "int",
30
+ "min": 1,
31
+ "default": 8083
32
+ },
33
+ "database": {
34
+ "kind": "object",
35
+ "properties": {
36
+ "connectionString": {
37
+ "kind": "string",
38
+ "minLength": 1,
39
+ "metadata": {
40
+ "description": "PostgreSQL connection string"
41
+ }
42
+ }
43
+ },
44
+ "required": [
45
+ "connectionString"
46
+ ],
47
+ "unknownKeys": "strip",
48
+ "metadata": {
49
+ "description": "Database configuration"
50
+ }
51
+ },
52
+ "betterportal": {
53
+ "kind": "optional",
54
+ "inner": {
55
+ "kind": "object",
56
+ "properties": {
57
+ "bpConfigPath": {
58
+ "kind": "optional",
59
+ "inner": {
60
+ "kind": "string",
61
+ "minLength": 1
62
+ }
63
+ },
64
+ "configApiToken": {
65
+ "kind": "optional",
66
+ "inner": {
67
+ "kind": "string",
68
+ "minLength": 1
69
+ }
70
+ },
71
+ "configEncryptionKey": {
72
+ "kind": "optional",
73
+ "inner": {
74
+ "kind": "string",
75
+ "minLength": 16
76
+ }
77
+ },
78
+ "controlPlaneUrl": {
79
+ "kind": "optional",
80
+ "inner": {
81
+ "kind": "string",
82
+ "minLength": 1
83
+ }
84
+ },
85
+ "serviceApiKey": {
86
+ "kind": "optional",
87
+ "inner": {
88
+ "kind": "string",
89
+ "minLength": 1
90
+ }
91
+ },
92
+ "bootstrapStatePath": {
93
+ "kind": "string",
94
+ "minLength": 1,
95
+ "default": "./.bp-bootstrap/state.enc"
96
+ },
97
+ "scopedConfigCachePath": {
98
+ "kind": "string",
99
+ "minLength": 1,
100
+ "default": "./.bp-sync-cache/scoped.json"
101
+ },
102
+ "trustedProxyHeaders": {
103
+ "kind": "bool",
104
+ "default": false
105
+ },
106
+ "cfProxy": {
107
+ "kind": "bool",
108
+ "default": false
109
+ },
110
+ "trustedProxyIps": {
111
+ "kind": "array",
112
+ "items": {
113
+ "kind": "string",
114
+ "minLength": 1
115
+ },
116
+ "default": []
117
+ }
118
+ },
119
+ "required": [
120
+ "bootstrapStatePath",
121
+ "scopedConfigCachePath",
122
+ "trustedProxyHeaders",
123
+ "cfProxy",
124
+ "trustedProxyIps"
125
+ ],
126
+ "unknownKeys": "strip"
127
+ }
128
+ }
129
+ },
130
+ "required": [
131
+ "host",
132
+ "port",
133
+ "database"
134
+ ],
135
+ "unknownKeys": "strip"
136
+ },
137
+ "definitions": {},
138
+ "extensions": {}
139
+ }
140
+ }