@ripeseed/rs-tunnel 0.2.0 → 0.3.0
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/README.md +3 -2
- package/dist/commands/login.d.ts +18 -1
- package/dist/commands/login.js +54 -30
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/login.test.d.ts +1 -0
- package/dist/commands/login.test.js +113 -0
- package/dist/commands/login.test.js.map +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +6 -1
- package/dist/lib/api-client.js +9 -1
- package/dist/lib/api-client.js.map +1 -1
- package/package.json +2 -2
- package/dist/lib/local-callback.d.ts +0 -9
- package/dist/lib/local-callback.js +0 -68
- package/dist/lib/local-callback.js.map +0 -1
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@ export RS_TUNNEL_API_URL=https://api.your-domain.com
|
|
|
16
16
|
|
|
17
17
|
# authenticate
|
|
18
18
|
rs-tunnel login --email you@your-company.com
|
|
19
|
+
rs-tunnel login --email you@your-company.com --skip-browser-open
|
|
19
20
|
|
|
20
21
|
# expose local app on port 3000
|
|
21
22
|
rs-tunnel up --port 3000
|
|
@@ -26,7 +27,7 @@ If no API URL is configured, the CLI prompts once and stores it in `~/.rs-tunnel
|
|
|
26
27
|
## Commands
|
|
27
28
|
|
|
28
29
|
```bash
|
|
29
|
-
rs-tunnel login --email <email> [--domain <api-url>]
|
|
30
|
+
rs-tunnel login --email <email> [--skip-browser-open] [--domain <api-url>]
|
|
30
31
|
rs-tunnel up --port <port> [--url <slug>] [--verbose] [--domain <api-url>]
|
|
31
32
|
rs-tunnel list [--domain <api-url>]
|
|
32
33
|
rs-tunnel stop <tunnel-id-or-hostname> [--domain <api-url>]
|
|
@@ -39,6 +40,7 @@ rs-tunnel doctor [--domain <api-url>]
|
|
|
39
40
|
- `RS_TUNNEL_API_URL`: preferred API base URL override.
|
|
40
41
|
- `RS_TUNNEL_API_BASE_URL`: legacy alias (still supported).
|
|
41
42
|
- `--domain`: command-level API override; also persists for future commands.
|
|
43
|
+
- `--skip-browser-open`: skips automatically launching a browser, prints the Slack authorize URL, and keeps waiting for the API-side auth flow to complete.
|
|
42
44
|
|
|
43
45
|
## Notes
|
|
44
46
|
|
|
@@ -54,4 +56,3 @@ rs-tunnel doctor [--domain <api-url>]
|
|
|
54
56
|
|
|
55
57
|
- Monorepo: https://github.com/RipeSeed/rs-tunnel
|
|
56
58
|
- Full project docs: https://github.com/RipeSeed/rs-tunnel/blob/main/README.md
|
|
57
|
-
|
package/dist/commands/login.d.ts
CHANGED
|
@@ -1 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import { getCliConfig } from '../config.js';
|
|
2
|
+
import { ApiClient } from '../lib/api-client.js';
|
|
3
|
+
import { createPkcePair } from '../lib/pkce.js';
|
|
4
|
+
import { saveSession } from '../store/credentials.js';
|
|
5
|
+
export type LoginCommandOptions = {
|
|
6
|
+
skipBrowserOpen?: boolean;
|
|
7
|
+
};
|
|
8
|
+
type LoginApiClient = Pick<ApiClient, 'startSlackAuth' | 'getSlackAuthStatus' | 'exchangeLoginCode'>;
|
|
9
|
+
type LoginCommandDependencies = {
|
|
10
|
+
getCliConfig: typeof getCliConfig;
|
|
11
|
+
createApiClient: (baseUrl: string) => LoginApiClient;
|
|
12
|
+
createPkcePair: typeof createPkcePair;
|
|
13
|
+
openUrl: (url: string) => Promise<void>;
|
|
14
|
+
saveSession: typeof saveSession;
|
|
15
|
+
sleep: (ms: number) => Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
export declare function loginCommand(email: string, options?: LoginCommandOptions, dependencies?: LoginCommandDependencies): Promise<void>;
|
|
18
|
+
export {};
|
package/dist/commands/login.js
CHANGED
|
@@ -1,45 +1,69 @@
|
|
|
1
1
|
import open from 'open';
|
|
2
2
|
import { getCliConfig } from '../config.js';
|
|
3
3
|
import { ApiClient } from '../lib/api-client.js';
|
|
4
|
-
import { startCallbackServer } from '../lib/local-callback.js';
|
|
5
4
|
import { createPkcePair } from '../lib/pkce.js';
|
|
6
5
|
import { saveSession } from '../store/credentials.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
const AUTH_POLL_INTERVAL_MS = 2_000;
|
|
7
|
+
const AUTH_POLL_TIMEOUT_MS = 120_000;
|
|
8
|
+
const defaultDependencies = {
|
|
9
|
+
getCliConfig,
|
|
10
|
+
createApiClient: (baseUrl) => new ApiClient(baseUrl),
|
|
11
|
+
createPkcePair,
|
|
12
|
+
openUrl: async (url) => {
|
|
13
|
+
await open(url);
|
|
14
|
+
},
|
|
15
|
+
saveSession,
|
|
16
|
+
sleep: async (ms) => {
|
|
17
|
+
await new Promise((resolve) => {
|
|
18
|
+
setTimeout(resolve, ms);
|
|
17
19
|
});
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export async function loginCommand(email, options = {}, dependencies = defaultDependencies) {
|
|
23
|
+
const config = dependencies.getCliConfig();
|
|
24
|
+
const apiClient = dependencies.createApiClient(config.apiBaseUrl);
|
|
25
|
+
const pkce = dependencies.createPkcePair();
|
|
26
|
+
const auth = await apiClient.startSlackAuth({
|
|
27
|
+
email,
|
|
28
|
+
codeChallenge: pkce.challenge,
|
|
29
|
+
});
|
|
30
|
+
if (options.skipBrowserOpen) {
|
|
31
|
+
console.log(`Slack Auth URL: ${auth.authorizeUrl}`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
18
34
|
try {
|
|
19
|
-
await
|
|
35
|
+
await dependencies.openUrl(auth.authorizeUrl);
|
|
20
36
|
}
|
|
21
37
|
catch {
|
|
22
38
|
console.log(`Open this URL in your browser:\n${auth.authorizeUrl}`);
|
|
23
39
|
}
|
|
24
|
-
console.log('Waiting for Slack OAuth callback...');
|
|
25
|
-
const callback = await callbackServer.waitForCode();
|
|
26
|
-
if (callback.state !== auth.state) {
|
|
27
|
-
throw new Error('OAuth state mismatch. Aborting login.');
|
|
28
|
-
}
|
|
29
|
-
const tokenPair = await apiClient.exchangeLoginCode({
|
|
30
|
-
loginCode: callback.code,
|
|
31
|
-
codeVerifier: pkce.verifier,
|
|
32
|
-
});
|
|
33
|
-
await saveSession({
|
|
34
|
-
accessToken: tokenPair.accessToken,
|
|
35
|
-
refreshToken: tokenPair.refreshToken,
|
|
36
|
-
expiresAtEpochSec: Math.floor(Date.now() / 1000) + tokenPair.expiresInSec,
|
|
37
|
-
profile: tokenPair.profile,
|
|
38
|
-
});
|
|
39
|
-
console.log(`Logged in as ${tokenPair.profile.email}`);
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
console.log('Waiting for Slack OAuth confirmation...');
|
|
42
|
+
const loginCode = await waitForLoginCode(auth.state, apiClient, dependencies.sleep);
|
|
43
|
+
const tokenPair = await apiClient.exchangeLoginCode({
|
|
44
|
+
loginCode,
|
|
45
|
+
codeVerifier: pkce.verifier,
|
|
46
|
+
});
|
|
47
|
+
await dependencies.saveSession({
|
|
48
|
+
accessToken: tokenPair.accessToken,
|
|
49
|
+
refreshToken: tokenPair.refreshToken,
|
|
50
|
+
expiresAtEpochSec: Math.floor(Date.now() / 1000) + tokenPair.expiresInSec,
|
|
51
|
+
profile: tokenPair.profile,
|
|
52
|
+
});
|
|
53
|
+
console.log(`Logged in as ${tokenPair.profile.email}`);
|
|
54
|
+
}
|
|
55
|
+
async function waitForLoginCode(state, apiClient, sleep) {
|
|
56
|
+
const startedAt = Date.now();
|
|
57
|
+
while (Date.now() - startedAt < AUTH_POLL_TIMEOUT_MS) {
|
|
58
|
+
const authStatus = await apiClient.getSlackAuthStatus({ state });
|
|
59
|
+
if (authStatus.status === 'authorized' && authStatus.loginCode) {
|
|
60
|
+
return authStatus.loginCode;
|
|
61
|
+
}
|
|
62
|
+
if (authStatus.status === 'expired') {
|
|
63
|
+
throw new Error('Slack OAuth session expired. Please run rs-tunnel login again.');
|
|
64
|
+
}
|
|
65
|
+
await sleep(AUTH_POLL_INTERVAL_MS);
|
|
43
66
|
}
|
|
67
|
+
throw new Error('Timed out waiting for Slack OAuth confirmation.');
|
|
44
68
|
}
|
|
45
69
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { loginCommand } from './login.js';
|
|
3
|
+
describe('loginCommand', () => {
|
|
4
|
+
it('prints the auth URL when browser auto-open is skipped', async () => {
|
|
5
|
+
const startSlackAuth = vi.fn(async () => ({
|
|
6
|
+
authorizeUrl: 'https://slack.example.com/auth',
|
|
7
|
+
state: 'expected-state',
|
|
8
|
+
}));
|
|
9
|
+
const getSlackAuthStatus = vi.fn(async () => ({
|
|
10
|
+
status: 'authorized',
|
|
11
|
+
loginCode: 'login-code',
|
|
12
|
+
}));
|
|
13
|
+
const exchangeLoginCode = vi.fn(async () => ({
|
|
14
|
+
accessToken: 'access-token',
|
|
15
|
+
refreshToken: 'refresh-token',
|
|
16
|
+
expiresInSec: 900,
|
|
17
|
+
profile: {
|
|
18
|
+
email: 'test@example.com',
|
|
19
|
+
slackUserId: 'U1',
|
|
20
|
+
slackTeamId: 'T1',
|
|
21
|
+
},
|
|
22
|
+
}));
|
|
23
|
+
const saveSession = vi.fn(async () => { });
|
|
24
|
+
const openUrl = vi.fn(async () => { });
|
|
25
|
+
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
26
|
+
const dependencies = {
|
|
27
|
+
getCliConfig: () => ({ apiBaseUrl: 'https://api.example.com' }),
|
|
28
|
+
createApiClient: () => ({
|
|
29
|
+
startSlackAuth,
|
|
30
|
+
getSlackAuthStatus,
|
|
31
|
+
exchangeLoginCode,
|
|
32
|
+
}),
|
|
33
|
+
createPkcePair: () => ({
|
|
34
|
+
verifier: 'verifier-value',
|
|
35
|
+
challenge: 'challenge-value',
|
|
36
|
+
}),
|
|
37
|
+
openUrl,
|
|
38
|
+
saveSession,
|
|
39
|
+
sleep: vi.fn(async () => { }),
|
|
40
|
+
};
|
|
41
|
+
try {
|
|
42
|
+
await loginCommand('test@example.com', { skipBrowserOpen: true }, dependencies);
|
|
43
|
+
expect(startSlackAuth).toHaveBeenCalledWith({
|
|
44
|
+
email: 'test@example.com',
|
|
45
|
+
codeChallenge: 'challenge-value',
|
|
46
|
+
});
|
|
47
|
+
expect(openUrl).not.toHaveBeenCalled();
|
|
48
|
+
expect(getSlackAuthStatus).toHaveBeenCalledWith({
|
|
49
|
+
state: 'expected-state',
|
|
50
|
+
});
|
|
51
|
+
expect(exchangeLoginCode).toHaveBeenCalledWith({
|
|
52
|
+
loginCode: 'login-code',
|
|
53
|
+
codeVerifier: 'verifier-value',
|
|
54
|
+
});
|
|
55
|
+
expect(saveSession).toHaveBeenCalledWith(expect.objectContaining({
|
|
56
|
+
accessToken: 'access-token',
|
|
57
|
+
refreshToken: 'refresh-token',
|
|
58
|
+
profile: expect.objectContaining({
|
|
59
|
+
email: 'test@example.com',
|
|
60
|
+
}),
|
|
61
|
+
}));
|
|
62
|
+
expect(logSpy).toHaveBeenCalledWith('Slack Auth URL: https://slack.example.com/auth');
|
|
63
|
+
expect(logSpy).toHaveBeenCalledWith('Waiting for Slack OAuth confirmation...');
|
|
64
|
+
expect(logSpy).toHaveBeenCalledWith('Logged in as test@example.com');
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
logSpy.mockRestore();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
it('opens the browser by default', async () => {
|
|
71
|
+
const openUrl = vi.fn(async () => { });
|
|
72
|
+
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
73
|
+
const dependencies = {
|
|
74
|
+
getCliConfig: () => ({ apiBaseUrl: 'https://api.example.com' }),
|
|
75
|
+
createApiClient: () => ({
|
|
76
|
+
startSlackAuth: vi.fn(async () => ({
|
|
77
|
+
authorizeUrl: 'https://slack.example.com/auth',
|
|
78
|
+
state: 'expected-state',
|
|
79
|
+
})),
|
|
80
|
+
getSlackAuthStatus: vi.fn(async () => ({
|
|
81
|
+
status: 'authorized',
|
|
82
|
+
loginCode: 'login-code',
|
|
83
|
+
})),
|
|
84
|
+
exchangeLoginCode: vi.fn(async () => ({
|
|
85
|
+
accessToken: 'access-token',
|
|
86
|
+
refreshToken: 'refresh-token',
|
|
87
|
+
expiresInSec: 900,
|
|
88
|
+
profile: {
|
|
89
|
+
email: 'test@example.com',
|
|
90
|
+
slackUserId: 'U1',
|
|
91
|
+
slackTeamId: 'T1',
|
|
92
|
+
},
|
|
93
|
+
})),
|
|
94
|
+
}),
|
|
95
|
+
createPkcePair: () => ({
|
|
96
|
+
verifier: 'verifier-value',
|
|
97
|
+
challenge: 'challenge-value',
|
|
98
|
+
}),
|
|
99
|
+
openUrl,
|
|
100
|
+
saveSession: vi.fn(async () => { }),
|
|
101
|
+
sleep: vi.fn(async () => { }),
|
|
102
|
+
};
|
|
103
|
+
try {
|
|
104
|
+
await loginCommand('test@example.com', {}, dependencies);
|
|
105
|
+
expect(openUrl).toHaveBeenCalledWith('https://slack.example.com/auth');
|
|
106
|
+
expect(logSpy).not.toHaveBeenCalledWith('Slack Auth URL: https://slack.example.com/auth');
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
logSpy.mockRestore();
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=login.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../src/commands/login.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,10 +20,13 @@ program
|
|
|
20
20
|
program
|
|
21
21
|
.command('login')
|
|
22
22
|
.requiredOption('--email <email>', 'Email for Slack OAuth')
|
|
23
|
+
.option('--skip-browser-open', 'Skip automatically opening the browser and print the Slack auth URL')
|
|
23
24
|
.option('--domain <domain-url>', domainOptionDescription)
|
|
24
25
|
.action(async (options) => {
|
|
25
26
|
await applyDomainOption(options.domain);
|
|
26
|
-
await loginCommand(options.email
|
|
27
|
+
await loginCommand(options.email, {
|
|
28
|
+
skipBrowserOpen: options.skipBrowserOpen,
|
|
29
|
+
});
|
|
27
30
|
});
|
|
28
31
|
program
|
|
29
32
|
.command('up')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,uBAAuB,GAC3B,iHAAiH,CAAC;AAEpH,KAAK,UAAU,iBAAiB,CAAC,MAAe;IAC9C,MAAM,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,qCAAqC,CAAC;KAClD,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,cAAc,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAC1D,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api-client.d.ts
CHANGED
|
@@ -12,11 +12,16 @@ export declare class ApiClient {
|
|
|
12
12
|
startSlackAuth(input: {
|
|
13
13
|
email: string;
|
|
14
14
|
codeChallenge: string;
|
|
15
|
-
cliCallbackUrl: string;
|
|
16
15
|
}): Promise<{
|
|
17
16
|
authorizeUrl: string;
|
|
18
17
|
state: string;
|
|
19
18
|
}>;
|
|
19
|
+
getSlackAuthStatus(input: {
|
|
20
|
+
state: string;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
status: 'pending' | 'authorized' | 'expired';
|
|
23
|
+
loginCode?: string;
|
|
24
|
+
}>;
|
|
20
25
|
exchangeLoginCode(input: {
|
|
21
26
|
loginCode: string;
|
|
22
27
|
codeVerifier: string;
|
package/dist/lib/api-client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { apiErrorSchema, authExchangeRequestSchema, authStartRequestSchema, authStartResponseSchema, heartbeatResponseSchema, refreshRequestSchema, tokenPairSchema, tunnelCreateRequestSchema, tunnelCreateResponseSchema, tunnelListResponseSchema, tunnelTelemetryIngestRequestSchema, tunnelTelemetryIngestResponseSchema, } from '@ripeseed/shared';
|
|
1
|
+
import { apiErrorSchema, authExchangeRequestSchema, authStatusRequestSchema, authStatusResponseSchema, authStartRequestSchema, authStartResponseSchema, heartbeatResponseSchema, refreshRequestSchema, tokenPairSchema, tunnelCreateRequestSchema, tunnelCreateResponseSchema, tunnelListResponseSchema, tunnelTelemetryIngestRequestSchema, tunnelTelemetryIngestResponseSchema, } from '@ripeseed/shared';
|
|
2
2
|
function formatNetworkFailure(error) {
|
|
3
3
|
if (!(error instanceof Error)) {
|
|
4
4
|
return 'unknown network error';
|
|
@@ -46,6 +46,14 @@ export class ApiClient {
|
|
|
46
46
|
});
|
|
47
47
|
return authStartResponseSchema.parse(response);
|
|
48
48
|
}
|
|
49
|
+
async getSlackAuthStatus(input) {
|
|
50
|
+
const body = authStatusRequestSchema.parse(input);
|
|
51
|
+
const response = await this.request('/v1/auth/slack/status', {
|
|
52
|
+
method: 'POST',
|
|
53
|
+
body,
|
|
54
|
+
});
|
|
55
|
+
return authStatusResponseSchema.parse(response);
|
|
56
|
+
}
|
|
49
57
|
async exchangeLoginCode(input) {
|
|
50
58
|
const body = authExchangeRequestSchema.parse(input);
|
|
51
59
|
const response = await this.request('/v1/auth/exchange', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACxB,kCAAkC,EAClC,mCAAmC,GACpC,MAAM,kBAAkB,CAAC;AAG1B,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,MAAM,IAAI,GAAG,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,KAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACnH,MAAM,OAAO,GACX,OAAQ,KAA+B,CAAC,OAAO,KAAK,QAAQ;QAC1D,CAAC,CAAE,KAA6B,CAAC,OAAO;QACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAEpB,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IAErB;IACA;IAEA;IAJlB,YACkB,MAAc,EACd,IAAY,EAC5B,OAAe,EACC,OAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QALC,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAQ;QAEZ,YAAO,GAAP,OAAO,CAAU;IAGnC,CAAC;CACF;AAED,MAAM,OAAO,SAAS;IACS;IAA7B,YAA6B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEhD,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC;YACxD,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ripeseed/rs-tunnel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "CLI for running secure public tunnels to localhost through Cloudflare.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"commander": "^13.1.0",
|
|
30
30
|
"open": "^10.1.0",
|
|
31
31
|
"zod": "^3.24.1",
|
|
32
|
-
"@ripeseed/shared": "0.
|
|
32
|
+
"@ripeseed/shared": "0.3.0"
|
|
33
33
|
},
|
|
34
34
|
"optionalDependencies": {
|
|
35
35
|
"keytar": "^7.9.0"
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import http from 'node:http';
|
|
2
|
-
import { URL } from 'node:url';
|
|
3
|
-
export async function startCallbackServer() {
|
|
4
|
-
let resolveHandler;
|
|
5
|
-
let rejectHandler;
|
|
6
|
-
const waitForCodePromise = new Promise((resolve, reject) => {
|
|
7
|
-
resolveHandler = resolve;
|
|
8
|
-
rejectHandler = reject;
|
|
9
|
-
});
|
|
10
|
-
const server = http.createServer((req, res) => {
|
|
11
|
-
const requestUrl = new URL(req.url ?? '/', 'http://127.0.0.1');
|
|
12
|
-
if (requestUrl.pathname !== '/callback') {
|
|
13
|
-
res.statusCode = 404;
|
|
14
|
-
res.end('Not found');
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
const code = requestUrl.searchParams.get('code');
|
|
18
|
-
const state = requestUrl.searchParams.get('state');
|
|
19
|
-
if (!code || !state) {
|
|
20
|
-
res.statusCode = 400;
|
|
21
|
-
res.end('Missing code or state');
|
|
22
|
-
rejectHandler?.(new Error('OAuth callback missing code or state'));
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
res.statusCode = 200;
|
|
26
|
-
res.setHeader('Content-Type', 'text/plain');
|
|
27
|
-
res.end('Login complete. You can close this tab.');
|
|
28
|
-
resolveHandler?.({ code, state });
|
|
29
|
-
});
|
|
30
|
-
await new Promise((resolve, reject) => {
|
|
31
|
-
server.once('error', reject);
|
|
32
|
-
server.listen(0, '127.0.0.1', () => {
|
|
33
|
-
server.off('error', reject);
|
|
34
|
-
resolve();
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
const address = server.address();
|
|
38
|
-
if (!address || typeof address === 'string') {
|
|
39
|
-
throw new Error('Unable to bind local callback server.');
|
|
40
|
-
}
|
|
41
|
-
const timeout = setTimeout(() => {
|
|
42
|
-
rejectHandler?.(new Error('Timed out waiting for Slack OAuth callback.'));
|
|
43
|
-
}, 120_000);
|
|
44
|
-
return {
|
|
45
|
-
callbackUrl: `http://127.0.0.1:${address.port}/callback`,
|
|
46
|
-
waitForCode: async () => {
|
|
47
|
-
try {
|
|
48
|
-
return await waitForCodePromise;
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
clearTimeout(timeout);
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
close: async () => {
|
|
55
|
-
await new Promise((resolve, reject) => {
|
|
56
|
-
server.close((error) => {
|
|
57
|
-
if (error) {
|
|
58
|
-
reject(error);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
resolve();
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
clearTimeout(timeout);
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=local-callback.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local-callback.js","sourceRoot":"","sources":["../../src/lib/local-callback.ts"],"names":[],"mappings":"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"}
|