alpic 1.99.0 → 1.100.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/dist/__tests__/tunnel.e2e.test.js +11 -14
- package/dist/__tests__/tunnel.e2e.test.js.map +1 -1
- package/dist/api.js +9 -2
- package/dist/api.js.map +1 -1
- package/dist/commands/login.js +2 -15
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/tunnel.js +20 -2
- package/dist/commands/tunnel.js.map +1 -1
- package/dist/lib/auth/auth.d.ts +1 -0
- package/dist/lib/auth/auth.js +18 -0
- package/dist/lib/auth/auth.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { rmSync } from "node:fs";
|
|
2
2
|
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
3
3
|
import { MockApiServer } from "./mock-server.js";
|
|
4
|
-
import { cliSession, setupTestDirectory } from "./utils.js";
|
|
4
|
+
import { cliSession, createOAuthEnv, setupTestDirectory } from "./utils.js";
|
|
5
5
|
describe("alpic tunnel (E2E)", () => {
|
|
6
6
|
let mockServer;
|
|
7
7
|
let serverUrl;
|
|
@@ -20,25 +20,24 @@ describe("alpic tunnel (E2E)", () => {
|
|
|
20
20
|
rmSync(cwd, { recursive: true, force: true });
|
|
21
21
|
}
|
|
22
22
|
});
|
|
23
|
-
it("
|
|
24
|
-
const {
|
|
23
|
+
it("triggers login when not authenticated", async () => {
|
|
24
|
+
const { output } = await cliSession(process.execPath, [binPath, "tunnel", "--port", "3000"], {
|
|
25
25
|
cwd,
|
|
26
26
|
env: {
|
|
27
27
|
ALPIC_API_BASE_URL: serverUrl,
|
|
28
28
|
},
|
|
29
29
|
}, async (cli) => {
|
|
30
|
-
await cli.expect("
|
|
30
|
+
await cli.expect("You need to be logged in to use the Alpic tunnel");
|
|
31
|
+
await cli.expect("Opening browser to log in");
|
|
32
|
+
cli.stop();
|
|
31
33
|
});
|
|
32
|
-
expect(
|
|
33
|
-
expect(output).toContain("Not authenticated");
|
|
34
|
+
expect(output).toContain("You need to be logged in to use the Alpic tunnel");
|
|
34
35
|
});
|
|
35
36
|
it("requires --port flag", async () => {
|
|
37
|
+
const oauthEnv = createOAuthEnv(cwd, serverUrl);
|
|
36
38
|
const { exitCode, output } = await cliSession(process.execPath, [binPath, "tunnel"], {
|
|
37
39
|
cwd,
|
|
38
|
-
env:
|
|
39
|
-
ALPIC_API_BASE_URL: serverUrl,
|
|
40
|
-
ALPIC_API_KEY: "test-api-key",
|
|
41
|
-
},
|
|
40
|
+
env: oauthEnv,
|
|
42
41
|
}, async (cli) => {
|
|
43
42
|
await cli.expect("Missing required flag port");
|
|
44
43
|
});
|
|
@@ -46,12 +45,10 @@ describe("alpic tunnel (E2E)", () => {
|
|
|
46
45
|
expect(output).toContain("Missing required flag port");
|
|
47
46
|
});
|
|
48
47
|
it("requests a tunnel ticket from the API", async () => {
|
|
48
|
+
const oauthEnv = createOAuthEnv(cwd, serverUrl);
|
|
49
49
|
await cliSession(process.execPath, [binPath, "tunnel", "--port", "3000"], {
|
|
50
50
|
cwd,
|
|
51
|
-
env:
|
|
52
|
-
ALPIC_API_BASE_URL: serverUrl,
|
|
53
|
-
ALPIC_API_KEY: "test-api-key",
|
|
54
|
-
},
|
|
51
|
+
env: oauthEnv,
|
|
55
52
|
timeoutMs: 12000,
|
|
56
53
|
}, async (cli) => {
|
|
57
54
|
await cli.expect("Opening tunnel");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/tunnel.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"tunnel.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/tunnel.e2e.test.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -6,8 +6,15 @@ import { env } from "./env.js";
|
|
|
6
6
|
import { getApiToken } from "./lib/auth/auth.js";
|
|
7
7
|
const link = new OpenAPILink(contract, {
|
|
8
8
|
url: env.ALPIC_API_BASE_URL,
|
|
9
|
-
headers: async () => {
|
|
10
|
-
|
|
9
|
+
headers: async ({ context }) => {
|
|
10
|
+
const headers = context.request?.headers || {};
|
|
11
|
+
if (!headers.Authorization) {
|
|
12
|
+
const token = await getApiToken();
|
|
13
|
+
if (token) {
|
|
14
|
+
headers.Authorization = `Bearer ${token}`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return headers;
|
|
11
18
|
},
|
|
12
19
|
plugins: [new ResponseValidationPlugin(contract)],
|
|
13
20
|
});
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE;IACrC,GAAG,EAAE,GAAG,CAAC,kBAAkB;IAC3B,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE;IACrC,GAAG,EAAE,GAAG,CAAC,kBAAkB;IAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,WAAW,EAAE,CAAC;YAClC,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,GAAG,GAA0C,gBAAgB,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import * as p from "@clack/prompts";
|
|
2
|
-
import chalk from "chalk";
|
|
3
|
-
import open from "open";
|
|
4
2
|
import { AlpicCommand } from "../lib/alpic-command.js";
|
|
3
|
+
import { oauthLogin } from "../lib/auth/auth.js";
|
|
5
4
|
import { oAuthClient } from "../lib/auth/oauth/client.js";
|
|
6
|
-
import { getLoginPageUrl, listenToOAuthCallback } from "../lib/auth/oauth/server/index.js";
|
|
7
5
|
import { getWhoamiInfoMessage } from "../lib/auth/whoami.js";
|
|
8
|
-
import { globalStore } from "../lib/global-store.js";
|
|
9
6
|
export class Login extends AlpicCommand {
|
|
10
7
|
static description = "Log in to Alpic (opens browser, stores tokens)";
|
|
11
8
|
static examples = ["<%= config.bin %> login"];
|
|
@@ -17,17 +14,7 @@ export class Login extends AlpicCommand {
|
|
|
17
14
|
p.outro("Already logged in.");
|
|
18
15
|
return;
|
|
19
16
|
}
|
|
20
|
-
|
|
21
|
-
const loginUrl = getLoginPageUrl();
|
|
22
|
-
p.log.message(`Opening browser to log in…\n\nIf the browser does not open, copy this URL: ${chalk.cyan(loginUrl)}`);
|
|
23
|
-
await open(loginUrl);
|
|
24
|
-
const storedToken = await listenToOAuthCallback({
|
|
25
|
-
state,
|
|
26
|
-
nonce,
|
|
27
|
-
codeVerifier,
|
|
28
|
-
authorizeUrl: authorizeUrl.toString(),
|
|
29
|
-
});
|
|
30
|
-
globalStore.saveCredentials(storedToken);
|
|
17
|
+
await oauthLogin();
|
|
31
18
|
p.outro(await getWhoamiInfoMessage());
|
|
32
19
|
}
|
|
33
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,OAAO,KAAM,SAAQ,YAAY;IACrC,MAAM,CAAU,WAAW,GAAG,gDAAgD,CAAC;IAE/E,MAAM,CAAU,QAAQ,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExB,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;QACtD,IAAI,KAAK,EAAE,CAAC;YACV,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,UAAU,EAAE,CAAC;QAEnB,CAAC,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACxC,CAAC"}
|
package/dist/commands/tunnel.js
CHANGED
|
@@ -3,6 +3,8 @@ import { Flags } from "@oclif/core";
|
|
|
3
3
|
import { pipenet } from "pipenet";
|
|
4
4
|
import { api } from "../api.js";
|
|
5
5
|
import { AlpicCommand } from "../lib/alpic-command.js";
|
|
6
|
+
import { oauthLogin } from "../lib/auth/auth.js";
|
|
7
|
+
import { oAuthClient } from "../lib/auth/oauth/client.js";
|
|
6
8
|
export class Tunnel extends AlpicCommand {
|
|
7
9
|
static description = "Expose a local server to the internet through an Alpic tunnel";
|
|
8
10
|
static examples = ["<%= config.bin %> tunnel --port 3000"];
|
|
@@ -14,10 +16,26 @@ export class Tunnel extends AlpicCommand {
|
|
|
14
16
|
};
|
|
15
17
|
async run() {
|
|
16
18
|
const { flags } = await this.parse(Tunnel);
|
|
17
|
-
await
|
|
19
|
+
let token = await oAuthClient.getValidAccessToken();
|
|
20
|
+
if (!token) {
|
|
21
|
+
p.log.step("You need to be logged in to use the Alpic tunnel");
|
|
22
|
+
await oauthLogin();
|
|
23
|
+
token = await oAuthClient.getValidAccessToken();
|
|
24
|
+
}
|
|
25
|
+
if (!token) {
|
|
26
|
+
throw new Error("Cannot get valid access token");
|
|
27
|
+
}
|
|
18
28
|
const spinner = p.spinner();
|
|
19
29
|
spinner.start("Opening tunnel...");
|
|
20
|
-
const { ticket, tunnelHost, subdomain } = await api.tunnels.getTicket.v1(
|
|
30
|
+
const { ticket, tunnelHost, subdomain } = await api.tunnels.getTicket.v1(undefined, {
|
|
31
|
+
context: {
|
|
32
|
+
request: {
|
|
33
|
+
headers: {
|
|
34
|
+
Authorization: `Bearer ${token?.access_token}`,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
});
|
|
21
39
|
// terrible ux but pipenet client retries forever on error
|
|
22
40
|
// I'll probably open an issue/pr on their repo once I'm sure about the fix
|
|
23
41
|
const tunnel = await Promise.race([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/auth/auth.d.ts
CHANGED
package/dist/lib/auth/auth.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import open from "open";
|
|
4
|
+
import { globalStore } from "../global-store.js";
|
|
1
5
|
import { oAuthClient } from "./oauth/client.js";
|
|
6
|
+
import { getLoginPageUrl, listenToOAuthCallback } from "./oauth/server/index.js";
|
|
2
7
|
export async function getApiToken() {
|
|
3
8
|
const token = process.env.ALPIC_API_KEY ?? (await oAuthClient.getValidAccessToken())?.access_token;
|
|
4
9
|
return token;
|
|
@@ -18,4 +23,17 @@ function hasApiKey() {
|
|
|
18
23
|
async function hasValidAccessToken() {
|
|
19
24
|
return (await oAuthClient.getValidAccessToken()) !== null;
|
|
20
25
|
}
|
|
26
|
+
export async function oauthLogin() {
|
|
27
|
+
const { authorizeUrl, state, nonce, codeVerifier } = await oAuthClient.prepareOAuthConfig();
|
|
28
|
+
const loginUrl = getLoginPageUrl();
|
|
29
|
+
p.log.message(`Opening browser to log in…\n\nIf the browser does not open, copy this URL: ${chalk.cyan(loginUrl)}`);
|
|
30
|
+
await open(loginUrl);
|
|
31
|
+
const storedToken = await listenToOAuthCallback({
|
|
32
|
+
state,
|
|
33
|
+
nonce,
|
|
34
|
+
codeVerifier,
|
|
35
|
+
authorizeUrl: authorizeUrl.toString(),
|
|
36
|
+
});
|
|
37
|
+
globalStore.saveCredentials(storedToken);
|
|
38
|
+
}
|
|
21
39
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC,EAAE,YAAY,CAAC;IAEnG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,wBAAwB,GAAG,SAAS,EAAE,CAAC;IAC7C,IAAI,wBAAwB;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,uBAAuB,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5D,IAAI,uBAAuB;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,OAAO,CAAC,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC,KAAK,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAAC,kBAAkB,EAAE,CAAC;IAE5F,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,8EAA8E,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC;QAC9C,KAAK;QACL,KAAK;QACL,YAAY;QACZ,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC;IAEH,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "alpic",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.100.0",
|
|
4
4
|
"description": "The command-line interface for Alpic",
|
|
5
5
|
"homepage": "https://alpic.ai",
|
|
6
6
|
"preferGlobal": true,
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"tar": "^7.5.11",
|
|
45
45
|
"undici": "^7.24.5",
|
|
46
46
|
"zod": "^4.3.6",
|
|
47
|
-
"@alpic-ai/api": "1.
|
|
47
|
+
"@alpic-ai/api": "1.100.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@orpc/openapi": "^1.13.9",
|