sub-bridge 1.0.0 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/npm-publish.yml +3 -2
- package/.release-please-manifest.json +1 -1
- package/CHANGELOG.md +16 -0
- package/dist/auth/provider.d.ts +1 -0
- package/dist/auth/provider.d.ts.map +1 -1
- package/dist/auth/provider.js +22 -0
- package/dist/auth/provider.js.map +1 -1
- package/dist/cli.js +0 -14
- package/dist/cli.js.map +1 -1
- package/dist/oauth/authorize.d.ts +73 -0
- package/dist/oauth/authorize.d.ts.map +1 -0
- package/dist/oauth/authorize.js +197 -0
- package/dist/oauth/authorize.js.map +1 -0
- package/dist/oauth/crypto.d.ts +58 -0
- package/dist/oauth/crypto.d.ts.map +1 -0
- package/dist/oauth/crypto.js +170 -0
- package/dist/oauth/crypto.js.map +1 -0
- package/dist/oauth/dcr.d.ts +44 -0
- package/dist/oauth/dcr.d.ts.map +1 -0
- package/dist/oauth/dcr.js +84 -0
- package/dist/oauth/dcr.js.map +1 -0
- package/dist/oauth/metadata.d.ts +23 -0
- package/dist/oauth/metadata.d.ts.map +1 -0
- package/dist/oauth/metadata.js +29 -0
- package/dist/oauth/metadata.js.map +1 -0
- package/dist/oauth/token.d.ts +29 -0
- package/dist/oauth/token.d.ts.map +1 -0
- package/dist/oauth/token.js +117 -0
- package/dist/oauth/token.js.map +1 -0
- package/dist/routes/chat.d.ts.map +1 -1
- package/dist/routes/chat.js +128 -15
- package/dist/routes/chat.js.map +1 -1
- package/dist/routes/oauth.d.ts +13 -0
- package/dist/routes/oauth.d.ts.map +1 -0
- package/dist/routes/oauth.js +174 -0
- package/dist/routes/oauth.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +14 -6
- package/dist/server.js.map +1 -1
- package/dist/tunnel/providers/cloudflare.d.ts.map +1 -1
- package/dist/tunnel/providers/cloudflare.js +19 -5
- package/dist/tunnel/providers/cloudflare.js.map +1 -1
- package/dist/tunnel/registry.d.ts.map +1 -1
- package/dist/tunnel/registry.js +75 -9
- package/dist/tunnel/registry.js.map +1 -1
- package/dist/utils/cloudflared-config.d.ts +2 -0
- package/dist/utils/cloudflared-config.d.ts.map +1 -0
- package/dist/utils/cloudflared-config.js +116 -0
- package/dist/utils/cloudflared-config.js.map +1 -0
- package/dist/utils/setup-instructions.d.ts.map +1 -1
- package/dist/utils/setup-instructions.js +6 -9
- package/dist/utils/setup-instructions.js.map +1 -1
- package/index.html +268 -281
- package/package.json +6 -2
- package/src/cli.ts +0 -14
- package/src/routes/chat.ts +3 -0
- package/src/server.ts +10 -6
- package/src/tunnel/providers/cloudflare.ts +18 -5
- package/src/tunnel/registry.ts +79 -8
- package/src/utils/cloudflared-config.ts +121 -0
- package/src/utils/setup-instructions.ts +6 -9
- package/dist/auth/oauth-flow.d.ts +0 -24
- package/dist/auth/oauth-flow.d.ts.map +0 -1
- package/dist/auth/oauth-flow.js +0 -184
- package/dist/auth/oauth-flow.js.map +0 -1
- package/dist/auth/oauth-manager.d.ts +0 -13
- package/dist/auth/oauth-manager.d.ts.map +0 -1
- package/dist/auth/oauth-manager.js +0 -25
- package/dist/auth/oauth-manager.js.map +0 -1
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/tunnel/providers/cloudflare.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/tunnel/providers/cloudflare.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9D,qBAAa,wBAAyB,YAAW,cAAc;IAC7D,EAAE,SAAe;IACjB,IAAI,SAAe;IACnB,oBAAoB,UAAO;IAErB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CA0C3E"}
|
|
@@ -2,9 +2,15 @@
|
|
|
2
2
|
// ============================================================================
|
|
3
3
|
// Cloudflare Tunnel Provider
|
|
4
4
|
// ============================================================================
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
5
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
9
|
exports.CloudflareTunnelProvider = void 0;
|
|
7
10
|
const cloudflared_1 = require("cloudflared");
|
|
11
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
12
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
13
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
14
|
class CloudflareTunnelProvider {
|
|
9
15
|
id = 'cloudflare';
|
|
10
16
|
name = 'Cloudflare';
|
|
@@ -24,12 +30,17 @@ class CloudflareTunnelProvider {
|
|
|
24
30
|
};
|
|
25
31
|
}
|
|
26
32
|
// Anonymous tunnel using cloudflared npm package
|
|
27
|
-
const
|
|
33
|
+
const tmpDir = await promises_1.default.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'sub-bridge-cloudflared-'));
|
|
34
|
+
const configPath = node_path_1.default.join(tmpDir, 'config.yml');
|
|
35
|
+
await promises_1.default.writeFile(configPath, 'no-autoupdate: true\n');
|
|
36
|
+
// Use HTTP/2 protocol for more reliable connections
|
|
37
|
+
const tunnel = cloudflared_1.Tunnel.quick(`http://localhost:${localPort}`, { '--config': configPath, '--protocol': 'http2' });
|
|
38
|
+
// Wait for URL event - the tunnel is usable once we have the URL
|
|
28
39
|
const url = await new Promise((resolve, reject) => {
|
|
29
|
-
const timeout = setTimeout(() => reject(new Error('Tunnel timeout (
|
|
30
|
-
tunnel.once('url', (
|
|
40
|
+
const timeout = setTimeout(() => reject(new Error('Tunnel timeout (60s)')), 60000);
|
|
41
|
+
tunnel.once('url', (url) => {
|
|
31
42
|
clearTimeout(timeout);
|
|
32
|
-
resolve(
|
|
43
|
+
resolve(url);
|
|
33
44
|
});
|
|
34
45
|
tunnel.once('error', (err) => {
|
|
35
46
|
clearTimeout(timeout);
|
|
@@ -39,7 +50,10 @@ class CloudflareTunnelProvider {
|
|
|
39
50
|
return {
|
|
40
51
|
providerId: this.id,
|
|
41
52
|
publicUrl: url,
|
|
42
|
-
stop: () =>
|
|
53
|
+
stop: () => {
|
|
54
|
+
tunnel.stop();
|
|
55
|
+
void promises_1.default.rm(tmpDir, { recursive: true, force: true });
|
|
56
|
+
}
|
|
43
57
|
};
|
|
44
58
|
}
|
|
45
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../../src/tunnel/providers/cloudflare.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../../src/tunnel/providers/cloudflare.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;;;;;;AAE/E,6CAAoC;AACpC,gEAAiC;AACjC,sDAAwB;AACxB,0DAA4B;AAG5B,MAAa,wBAAwB;IACnC,EAAE,GAAG,YAAY,CAAA;IACjB,IAAI,GAAG,YAAY,CAAA;IACnB,oBAAoB,GAAG,IAAI,CAAA;IAE3B,KAAK,CAAC,WAAW;QACf,uDAAuD;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,QAAiB;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,wDAAwD;YACxD,qFAAqF;YACrF,OAAO;gBACL,UAAU,EAAE,IAAI,CAAC,EAAE;gBACnB,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,QAAQ,EAAE;gBAC7E,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;aACf,CAAA;QACH,CAAC;QAED,iDAAiD;QACjD,MAAM,MAAM,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAA;QAClF,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QAClD,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAA;QACvD,oDAAoD;QACpD,MAAM,MAAM,GAAG,oBAAM,CAAC,KAAK,CAAC,oBAAoB,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAA;QAE/G,iEAAiE;QACjE,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAElF,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE;gBACjC,YAAY,CAAC,OAAO,CAAC,CAAA;gBACrB,OAAO,CAAC,GAAG,CAAC,CAAA;YACd,CAAC,CAAC,CAAA;YAEF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBAClC,YAAY,CAAC,OAAO,CAAC,CAAA;gBACrB,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,EAAE;YACnB,SAAS,EAAE,GAAG;YACd,IAAI,EAAE,GAAG,EAAE;gBACT,MAAM,CAAC,IAAI,EAAE,CAAA;gBACb,KAAK,kBAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACtD,CAAC;SACF,CAAA;IACH,CAAC;CACF;AApDD,4DAoDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tunnel/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkC,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tunnel/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkC,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAuDzF,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,SAAS,CAAsB;;IAajC,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAa7C,SAAS,IAAI,YAAY;IAenB,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAkD5F,IAAI,IAAI,YAAY;IASpB,YAAY,IAAI,MAAM,GAAG,IAAI;CAG9B"}
|
package/dist/tunnel/registry.js
CHANGED
|
@@ -4,6 +4,53 @@
|
|
|
4
4
|
// ============================================================================
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TunnelRegistry = void 0;
|
|
7
|
+
const port_1 = require("../utils/port");
|
|
8
|
+
function sleep(ms) {
|
|
9
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
10
|
+
}
|
|
11
|
+
async function verifyTunnelHealth(publicUrl, expectedPort) {
|
|
12
|
+
const baseUrl = publicUrl.replace(/\/$/, '');
|
|
13
|
+
const healthUrl = `${baseUrl}/health`;
|
|
14
|
+
const maxAttempts = 12;
|
|
15
|
+
let lastError = null;
|
|
16
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
17
|
+
const controller = new AbortController();
|
|
18
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetch(healthUrl, { signal: controller.signal });
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
throw new Error(`Tunnel check failed (HTTP ${response.status})`);
|
|
23
|
+
}
|
|
24
|
+
const data = await response.json();
|
|
25
|
+
if (data.service !== port_1.SERVICE_IDENTIFIER) {
|
|
26
|
+
throw new Error('Tunnel check failed (unexpected service)');
|
|
27
|
+
}
|
|
28
|
+
if (typeof data.port === 'number' && data.port !== expectedPort) {
|
|
29
|
+
throw new Error(`Tunnel check failed (unexpected port ${data.port})`);
|
|
30
|
+
}
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
35
|
+
lastError = new Error('Tunnel check timed out');
|
|
36
|
+
}
|
|
37
|
+
else if (error instanceof Error) {
|
|
38
|
+
lastError = error;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
lastError = new Error(String(error));
|
|
42
|
+
}
|
|
43
|
+
if (attempt < maxAttempts) {
|
|
44
|
+
await sleep(400);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
throw new Error(`Tunnel check failed: ${lastError.message} (${healthUrl})`);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
clearTimeout(timeout);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
7
54
|
const providers_1 = require("./providers");
|
|
8
55
|
class TunnelRegistry {
|
|
9
56
|
providers = new Map();
|
|
@@ -59,16 +106,35 @@ class TunnelRegistry {
|
|
|
59
106
|
if (!await provider.isAvailable()) {
|
|
60
107
|
throw new Error(`Tunnel provider ${provider.name} is not available`);
|
|
61
108
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
109
|
+
const isQuickCloudflare = providerId === 'cloudflare' && !namedUrl;
|
|
110
|
+
const maxAttempts = isQuickCloudflare ? 4 : 1;
|
|
111
|
+
let lastError = null;
|
|
112
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
113
|
+
try {
|
|
114
|
+
this.lastError = null;
|
|
115
|
+
this.activeTunnel = await provider.start(localPort, namedUrl);
|
|
116
|
+
this.startedAt = new Date().toISOString();
|
|
117
|
+
await verifyTunnelHealth(this.activeTunnel.publicUrl, localPort);
|
|
118
|
+
return this.getStatus();
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
122
|
+
this.lastError = lastError.message;
|
|
123
|
+
if (this.activeTunnel) {
|
|
124
|
+
this.activeTunnel.stop();
|
|
125
|
+
this.activeTunnel = null;
|
|
126
|
+
this.startedAt = null;
|
|
127
|
+
}
|
|
128
|
+
if (attempt < maxAttempts) {
|
|
129
|
+
await sleep(600);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
71
133
|
}
|
|
134
|
+
const message = lastError?.message || 'Unknown error';
|
|
135
|
+
throw new Error(maxAttempts > 1
|
|
136
|
+
? `Failed to start tunnel after ${maxAttempts} attempts: ${message}`
|
|
137
|
+
: message);
|
|
72
138
|
}
|
|
73
139
|
stop() {
|
|
74
140
|
if (this.activeTunnel) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tunnel/registry.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,wDAAwD;AACxD,+EAA+E;;;AAG/E,2CAIoB;AAEpB,MAAa,cAAc;IACjB,SAAS,GAAgC,IAAI,GAAG,EAAE,CAAA;IAClD,YAAY,GAA0B,IAAI,CAAA;IAC1C,SAAS,GAAkB,IAAI,CAAA;IAC/B,SAAS,GAAkB,IAAI,CAAA;IAEvC;QACE,MAAM,YAAY,GAAqB;YACrC,IAAI,oCAAwB,EAAE;YAC9B,IAAI,+BAAmB,EAAE;YACzB,IAAI,mCAAuB,EAAE;SAC9B,CAAA;QACD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,OAAO,GAAmB,EAAE,CAAA;QAClC,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE;gBACF,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,SAAS,EAAE,MAAM,QAAQ,CAAC,WAAW,EAAE;gBACvC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;aACpD,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;gBACxC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;gBACtC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;aACvC,CAAA;QACH,CAAC;QACD,OAAO;YACL,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;SACnC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,SAAiB,EAAE,QAAiB;QAClE,8BAA8B;QAC9B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,IAAI,mBAAmB,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tunnel/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflared-config.d.ts","sourceRoot":"","sources":["../../src/utils/cloudflared-config.ts"],"names":[],"mappings":"AA+FA,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyB7E"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getCloudflaredHostnames = getCloudflaredHostnames;
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
function stripQuotes(value) {
|
|
11
|
+
const trimmed = value.trim();
|
|
12
|
+
if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
13
|
+
(trimmed.startsWith("'") && trimmed.endsWith("'"))) {
|
|
14
|
+
return trimmed.slice(1, -1);
|
|
15
|
+
}
|
|
16
|
+
return trimmed;
|
|
17
|
+
}
|
|
18
|
+
function normalizeHostname(hostname) {
|
|
19
|
+
return hostname.replace(/^https?:\/\//, '').split('/')[0]?.trim() || '';
|
|
20
|
+
}
|
|
21
|
+
function parseIngressRules(content) {
|
|
22
|
+
const entries = [];
|
|
23
|
+
const lines = content.split(/\r?\n/);
|
|
24
|
+
let inIngress = false;
|
|
25
|
+
let current = null;
|
|
26
|
+
for (const rawLine of lines) {
|
|
27
|
+
const line = rawLine.replace(/\t/g, ' ');
|
|
28
|
+
const trimmed = line.trim();
|
|
29
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
30
|
+
continue;
|
|
31
|
+
if (!inIngress) {
|
|
32
|
+
if (trimmed === 'ingress:' || trimmed.startsWith('ingress:')) {
|
|
33
|
+
inIngress = true;
|
|
34
|
+
}
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const indent = line.match(/^\s*/)?.[0].length ?? 0;
|
|
38
|
+
if (indent === 0 && !trimmed.startsWith('-')) {
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
if (trimmed.startsWith('-')) {
|
|
42
|
+
if (current && (current.hostname || current.service))
|
|
43
|
+
entries.push(current);
|
|
44
|
+
current = {};
|
|
45
|
+
const afterDash = trimmed.slice(1).trim();
|
|
46
|
+
if (afterDash.startsWith('hostname:')) {
|
|
47
|
+
current.hostname = stripQuotes(afterDash.slice('hostname:'.length));
|
|
48
|
+
}
|
|
49
|
+
else if (afterDash.startsWith('service:')) {
|
|
50
|
+
current.service = stripQuotes(afterDash.slice('service:'.length));
|
|
51
|
+
}
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (!current)
|
|
55
|
+
continue;
|
|
56
|
+
if (trimmed.startsWith('hostname:')) {
|
|
57
|
+
current.hostname = stripQuotes(trimmed.slice('hostname:'.length));
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (trimmed.startsWith('service:')) {
|
|
61
|
+
current.service = stripQuotes(trimmed.slice('service:'.length));
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (current && (current.hostname || current.service))
|
|
66
|
+
entries.push(current);
|
|
67
|
+
return entries;
|
|
68
|
+
}
|
|
69
|
+
function serviceMatchesPort(service, port) {
|
|
70
|
+
if (!service || service.startsWith('http_status:'))
|
|
71
|
+
return false;
|
|
72
|
+
try {
|
|
73
|
+
const url = new URL(service);
|
|
74
|
+
const protocol = url.protocol;
|
|
75
|
+
if (protocol !== 'http:' && protocol !== 'https:')
|
|
76
|
+
return false;
|
|
77
|
+
const resolvedPort = url.port
|
|
78
|
+
? Number(url.port)
|
|
79
|
+
: (protocol === 'https:' ? 443 : 80);
|
|
80
|
+
if (resolvedPort !== port)
|
|
81
|
+
return false;
|
|
82
|
+
const host = url.hostname;
|
|
83
|
+
return host === 'localhost' || host === '127.0.0.1' || host === '0.0.0.0' || host === '::1';
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async function getCloudflaredHostnames(port) {
|
|
90
|
+
const home = node_os_1.default.homedir();
|
|
91
|
+
const configPaths = [
|
|
92
|
+
node_path_1.default.join(home, '.cloudflared', 'config.yml'),
|
|
93
|
+
node_path_1.default.join(home, '.cloudflared', 'config.yaml'),
|
|
94
|
+
];
|
|
95
|
+
const hostnames = new Set();
|
|
96
|
+
for (const configPath of configPaths) {
|
|
97
|
+
try {
|
|
98
|
+
const content = await promises_1.default.readFile(configPath, 'utf8');
|
|
99
|
+
const rules = parseIngressRules(content);
|
|
100
|
+
for (const rule of rules) {
|
|
101
|
+
if (!rule.hostname || !rule.service)
|
|
102
|
+
continue;
|
|
103
|
+
if (!serviceMatchesPort(rule.service, port))
|
|
104
|
+
continue;
|
|
105
|
+
const normalized = normalizeHostname(rule.hostname);
|
|
106
|
+
if (normalized)
|
|
107
|
+
hostnames.add(normalized);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return Array.from(hostnames);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=cloudflared-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflared-config.js","sourceRoot":"","sources":["../../src/utils/cloudflared-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-instructions.d.ts","sourceRoot":"","sources":["../../src/utils/setup-instructions.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAA;AAExC,UAAU,iBAAiB;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAQD,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"setup-instructions.d.ts","sourceRoot":"","sources":["../../src/utils/setup-instructions.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAA;AAExC,UAAU,iBAAiB;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAQD,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAwClE"}
|
|
@@ -13,15 +13,15 @@ function buildStatusText(options) {
|
|
|
13
13
|
const lines = [
|
|
14
14
|
'Sub Bridge is running.',
|
|
15
15
|
'',
|
|
16
|
-
`Setup URL: ${baseUrl}`,
|
|
16
|
+
`Setup URL: ${baseUrl}?to=cursor`,
|
|
17
17
|
"Open this URL in your browser where you're logged into ChatGPT or Claude.",
|
|
18
18
|
'',
|
|
19
19
|
'To configure Cursor:',
|
|
20
20
|
'1. Authenticate with ChatGPT or Claude in the web UI',
|
|
21
21
|
'2. Copy the generated API key',
|
|
22
|
-
'3. In Cursor
|
|
23
|
-
' - Paste the API key',
|
|
24
|
-
` - Set Base URL
|
|
22
|
+
'3. In Cursor Settings → Models → API Keys',
|
|
23
|
+
' - Paste the API key from the web UI',
|
|
24
|
+
` - Set Base URL from the web UI`,
|
|
25
25
|
'',
|
|
26
26
|
...MODEL_MAPPING_LINES,
|
|
27
27
|
];
|
|
@@ -35,14 +35,11 @@ function buildStatusText(options) {
|
|
|
35
35
|
'Sub Bridge server not reachable.',
|
|
36
36
|
'',
|
|
37
37
|
'To set up:',
|
|
38
|
-
`1. Open ${baseUrl} in your browser where you're logged into ChatGPT or Claude`,
|
|
38
|
+
`1. Open ${baseUrl}?to=cursor in your browser where you're logged into ChatGPT or Claude`,
|
|
39
39
|
'2. Authenticate and copy the generated API key',
|
|
40
|
-
`3. In Cursor: Settings → Models → API Keys, paste the key and set Base URL
|
|
40
|
+
`3. In Cursor: Settings → Models → API Keys, paste the key and set Base URL from the web UI`,
|
|
41
41
|
'',
|
|
42
42
|
...MODEL_MAPPING_LINES,
|
|
43
|
-
'',
|
|
44
|
-
'If you need a public URL, enable a tunnel in the web UI.',
|
|
45
|
-
'',
|
|
46
43
|
`Setup screenshot: ${baseUrl}/assets/setup.png`,
|
|
47
44
|
].join('\n');
|
|
48
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-instructions.js","sourceRoot":"","sources":["../../src/utils/setup-instructions.ts"],"names":[],"mappings":";;AAeA,
|
|
1
|
+
{"version":3,"file":"setup-instructions.js","sourceRoot":"","sources":["../../src/utils/setup-instructions.ts"],"names":[],"mappings":";;AAeA,0CAwCC;AA9CD,MAAM,mBAAmB,GAAG;IAC1B,8EAA8E;IAC9E,+DAA+D;IAC/D,sEAAsE;CACvE,CAAA;AAED,SAAgB,eAAe,CAAC,OAA0B;IACxD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IACjC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAE/C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG;YACZ,wBAAwB;YACxB,EAAE;YACF,cAAc,OAAO,YAAY;YACjC,2EAA2E;YAC3E,EAAE;YACF,sBAAsB;YACtB,sDAAsD;YACtD,+BAA+B;YAC/B,2CAA2C;YAC3C,wCAAwC;YACxC,mCAAmC;YACnC,EAAE;YACF,GAAG,mBAAmB;SACvB,CAAA;QAED,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,qFAAqF,CAAC,CAAA;QACvG,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,OAAO,mBAAmB,CAAC,CAAA;QAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,OAAO;QACL,kCAAkC;QAClC,EAAE;QACF,YAAY;QACZ,WAAW,OAAO,uEAAuE;QACzF,gDAAgD;QAChD,4FAA4F;QAC5F,EAAE;QACF,GAAG,mBAAmB;QACtB,qBAAqB,OAAO,mBAAmB;KAChD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
|