@project-ajax/cli 0.0.14 → 0.0.16
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/api/client.d.ts +0 -2
- package/dist/api/client.d.ts.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.impl.d.ts +2 -3
- package/dist/commands/auth.impl.d.ts.map +1 -1
- package/dist/commands/auth.impl.js +65 -101
- package/dist/commands/auth.js +0 -27
- package/dist/commands/deploy.impl.d.ts.map +1 -1
- package/dist/commands/deploy.impl.js +6 -7
- package/dist/commands/exec.impl.js +1 -1
- package/dist/commands/utils/testing.d.ts +20 -5
- package/dist/commands/utils/testing.d.ts.map +1 -1
- package/dist/commands/utils/testing.js +66 -25
- package/dist/config.d.ts +144 -42
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +322 -140
- package/dist/deploy.d.ts +2 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/flags.d.ts +2 -3
- package/dist/flags.d.ts.map +1 -1
- package/dist/flags.js +4 -10
- package/dist/handler.d.ts.map +1 -1
- package/dist/handler.js +13 -9
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +2 -3
- package/dist/token.d.ts +35 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +58 -0
- package/package.json +5 -2
package/dist/api/client.d.ts
CHANGED
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { IO } from "../io.js";
|
|
5
5
|
import { Result } from "./result.js";
|
|
6
|
-
export type Environment = "local" | "staging" | "dev" | "prod";
|
|
7
6
|
interface ApiClientConfig {
|
|
8
7
|
token: string;
|
|
9
|
-
environment: Environment;
|
|
10
8
|
baseUrl?: string | undefined;
|
|
11
9
|
cellId: string;
|
|
12
10
|
writer: IO;
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,UAAU,eAAe;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,EAAE,CAAC;CACX;AAID,MAAM,WAAW,QAAQ;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KAChB,CAAC;CACF;AAED;;GAEG;AACH,qBAAa,SAAS;;gBAMT,MAAM,EAAE,eAAe;IAWnC;;OAEG;YACW,KAAK;IAoEnB;;OAEG;IACG,YAAY,CACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,GAC5C,OAAO,CACT,MAAM,CACL;QACC,MAAM,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,OAAO,CAAC;SACf,CAAC;QACF,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,EACD,QAAQ,CACR,CACD;IAUD;;OAEG;IACG,kBAAkB,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,GAC5C,OAAO,CACT,MAAM,CACL;QACC,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,EACD,QAAQ,CACR,CACD;IAUD;;OAEG;IACG,WAAW,CAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,GACV,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnE,WAAW,CAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,GACxB,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,EAAE;YAAE,EAAE,EAAE,IAAI,CAAA;SAAE,CAAA;KAAE,EAAE,QAAQ,CAAC,CAAC;IAiCtD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CACzC,MAAM,CACL;QACC,MAAM,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,OAAO,CAAC;YACf,KAAK,EAAE,OAAO,EAAE,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;SAClB,CAAC;KACF,EACD,QAAQ,CACR,CACD;IASD;;OAEG;IACG,WAAW,IAAI,OAAO,CAC3B,MAAM,CACL;QACC,OAAO,EAAE,KAAK,CAAC;YACd,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,OAAO,CAAC;YACf,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;SAClB,CAAC,CAAC;KACH,EACD,QAAQ,CACR,CACD;IAOD;;OAEG;IACG,YAAY,CACjB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IASnD;;OAEG;IACG,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CACxD,MAAM,CACL;QACC,YAAY,EAAE,aAAa,CAAC;YAC3B,IAAI,EACD,MAAM,GACN,MAAM,GACN,OAAO,GACP,YAAY,GACZ,cAAc,GACd,cAAc,GACd,cAAc,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC;YACZ,MAAM,EAAE,OAAO,CAAC;SAChB,CAAC,CAAC;KACH,EACD,QAAQ,CACR,CACD;IASD;;OAEG;IACG,aAAa,CAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAC5C,OAAO,CACT,MAAM,CACL;QACC,OAAO,EAAE,KAAK,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC;YACZ,SAAS,EAAE,MAAM,CAAC;SAClB,CAAC,CAAC;KACH,EACD,QAAQ,CACR,CACD;IAUD;;OAEG;IACG,WAAW,CAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,CAAA;KAAE,GACrD,OAAO,CACT,MAAM,CACL;QACC,OAAO,EAAE,KAAK,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC;YACZ,SAAS,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;SAC3B,CAAC,CAAC;KACH,EACD,QAAQ,CACR,CACD;IAUD;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CACvC,MAAM,CACL;QACC,GAAG,EAAE,KAAK,CAAC;YACV,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;SACd,CAAC,CAAC;KACH,EACD,QAAQ,CACR,CACD;IASD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAC3E,MAAM,CACL;QACC,gBAAgB,EAAE,MAAM,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;KACd,EACD,QAAQ,CACR,CACD;IAUD;;OAEG;IACG,YAAY,CACjB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAUnD;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAChD,MAAM,CACL;QACC,YAAY,EAAE,KAAK,CAAC;YACnB,IAAI,EACD,MAAM,GACN,MAAM,GACN,OAAO,GACP,YAAY,GACZ,cAAc,GACd,cAAc,GACd,cAAc,CAAC;YAClB,GAAG,EAAE,MAAM,CAAC;SACZ,CAAC,CAAC;KACH,EACD,QAAQ,CACR,CACD;IASD;;OAEG;IACG,4BAA4B,CACjC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,OAAO,GACf,OAAO,CACT,MAAM,CACL;QACC,UAAU,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;SACnB,CAAC;KACF,EACD,QAAQ,CACR,CACD;IAWD;;OAEG;IACG,aAAa,CAClB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5C,MAAM,EAAE,IAAI,GACV,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnE,aAAa,CAClB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5C,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,GACxB,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,QAAQ,CAAC,CAAC;IA0CjD;;OAEG;IACG,oBAAoB,CACzB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAazE;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CACjD,MAAM,CACL;QACC,IAAI,EAAE,KAAK,CAAC;YACX,QAAQ,EAAE,MAAM,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YACxB,SAAS,EAAE,MAAM,CAAC;YAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;SACvB,CAAC,CAAC;KACH,EACD,QAAQ,CACR,CACD;IASD;;OAEG;IACG,UAAU,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACX,OAAO,CACT,MAAM,CACL;QACC,IAAI,EAAE,MAAM,CAAC;KACb,EACD,QAAQ,CACR,CACD;CASD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,wEAmCvB,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { GlobalFlags } from "../flags.js";
|
|
2
2
|
import { type HandlerContext } from "../handler.js";
|
|
3
|
-
export declare function runLogin(context: HandlerContext
|
|
4
|
-
export declare const login: (this: import("../context.js").LocalContext, flags: GlobalFlags
|
|
3
|
+
export declare function runLogin(context: HandlerContext): Promise<void>;
|
|
4
|
+
export declare const login: (this: import("../context.js").LocalContext, flags: GlobalFlags) => Promise<void>;
|
|
5
5
|
export declare const show: (this: import("../context.js").LocalContext, flags: GlobalFlags) => Promise<void>;
|
|
6
|
-
export declare const logout: (this: import("../context.js").LocalContext, flags: GlobalFlags) => Promise<void>;
|
|
7
6
|
//# sourceMappingURL=auth.impl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.impl.d.ts","sourceRoot":"","sources":["../../src/commands/auth.impl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.impl.d.ts","sourceRoot":"","sources":["../../src/commands/auth.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AA2ElE,wBAAsB,QAAQ,CAAC,OAAO,EAAE,cAAc,iBA2CrD;AA0ED,eAAO,MAAM,KAAK,mFAKhB,CAAC;AAEH,eAAO,MAAM,IAAI,mFAGf,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { buildHandler } from "../handler.js";
|
|
2
|
+
import { fetchToken, parseToken } from "../token.js";
|
|
2
3
|
import { openNotionUrl } from "../utils/openUrl.js";
|
|
4
|
+
const NEW_SPACE_VALUE = "__new_space__";
|
|
3
5
|
async function loginFetch(baseUrl, endpoint, body) {
|
|
4
6
|
const url = `${baseUrl}/api/v3${endpoint}`;
|
|
5
7
|
const response = await fetch(url, {
|
|
@@ -30,64 +32,48 @@ async function pollLoginRedeem(baseUrl, sessionId, timeoutMs = 3e5, intervalMs =
|
|
|
30
32
|
}
|
|
31
33
|
return { status: "expired" };
|
|
32
34
|
}
|
|
33
|
-
async function
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return new Promise((resolve) => {
|
|
45
|
-
let settled = false;
|
|
46
|
-
const cleanup = () => {
|
|
47
|
-
process.stdin.off("data", onData);
|
|
48
|
-
process.stdin.pause();
|
|
49
|
-
};
|
|
50
|
-
const settle = (value) => {
|
|
51
|
-
if (settled) {
|
|
52
|
-
return;
|
|
35
|
+
async function runLogin(context) {
|
|
36
|
+
const cachedSpaces = context.config.getCachedSpaces();
|
|
37
|
+
if (process.stdin.isTTY && cachedSpaces.length > 0) {
|
|
38
|
+
const choices = [
|
|
39
|
+
...cachedSpaces.map((space) => ({
|
|
40
|
+
name: space.name,
|
|
41
|
+
value: space.id
|
|
42
|
+
})),
|
|
43
|
+
{
|
|
44
|
+
name: "Authenticate with new space",
|
|
45
|
+
value: NEW_SPACE_VALUE
|
|
53
46
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const hasNewline = typeof data === "string" ? data.includes("\n") || data.includes("\r") : data.includes(10) || data.includes(13);
|
|
60
|
-
if (hasNewline) {
|
|
61
|
-
settle("enter");
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
process.stdin.resume();
|
|
65
|
-
process.stdin.on("data", onData);
|
|
66
|
-
void redeemOutcomePromise.then(() => {
|
|
67
|
-
settle("redeem");
|
|
47
|
+
];
|
|
48
|
+
const selectedValue = await context.io.select({
|
|
49
|
+
message: "Select a space",
|
|
50
|
+
choices,
|
|
51
|
+
noTTY: "Run 'workers auth login' to authenticate, or set WORKERS_TOKEN."
|
|
68
52
|
});
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
53
|
+
if (selectedValue !== NEW_SPACE_VALUE) {
|
|
54
|
+
const spaceId = selectedValue;
|
|
55
|
+
const token = await fetchToken(spaceId);
|
|
56
|
+
if (token) {
|
|
57
|
+
context.config.switchToSpace(spaceId);
|
|
58
|
+
const space = cachedSpaces.find((s) => s.id === spaceId);
|
|
59
|
+
context.io.writeErr(`Switched to space: ${space?.name ?? spaceId}`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
context.io.writeErr(
|
|
63
|
+
"Token not found for this space. Starting browser login..."
|
|
64
|
+
);
|
|
81
65
|
}
|
|
82
|
-
await context.config.update(update2);
|
|
83
|
-
context.io.writeErr("Successfully logged in!");
|
|
84
|
-
return;
|
|
85
66
|
}
|
|
67
|
+
await runBrowserLogin(context);
|
|
68
|
+
}
|
|
69
|
+
async function runBrowserLogin(context) {
|
|
70
|
+
const environment = context.config.environment;
|
|
71
|
+
const baseURL = context.config.baseURL;
|
|
86
72
|
context.io.writeErr("Starting browser login...\n");
|
|
87
73
|
let initResponse;
|
|
88
74
|
try {
|
|
89
75
|
initResponse = await loginFetch(
|
|
90
|
-
|
|
76
|
+
baseURL,
|
|
91
77
|
"/workersCliLoginInit",
|
|
92
78
|
{}
|
|
93
79
|
);
|
|
@@ -97,45 +83,28 @@ async function runLogin(context, token) {
|
|
|
97
83
|
);
|
|
98
84
|
process.exit(1);
|
|
99
85
|
}
|
|
100
|
-
const { sessionId,
|
|
101
|
-
context.io.writeErr(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const redeemOutcomePromise = redeemPromise.then(
|
|
108
|
-
(value) => ({ ok: true, value }),
|
|
109
|
-
(error) => ({ ok: false, error })
|
|
110
|
-
);
|
|
111
|
-
const nextStep = await waitForEnterOrRedeem(
|
|
112
|
-
context,
|
|
113
|
-
browserUrl,
|
|
114
|
-
redeemOutcomePromise
|
|
115
|
-
);
|
|
116
|
-
if (nextStep === "enter") {
|
|
117
|
-
try {
|
|
118
|
-
await openNotionUrl(environment, browserUrl);
|
|
119
|
-
} catch (_error) {
|
|
120
|
-
context.io.writeErr(
|
|
121
|
-
`Could not open browser automatically. Please visit:
|
|
86
|
+
const { sessionId, browserUrl } = initResponse;
|
|
87
|
+
context.io.writeErr(`Opening ${browserUrl} ...`);
|
|
88
|
+
try {
|
|
89
|
+
await openNotionUrl(environment, browserUrl);
|
|
90
|
+
} catch (_error) {
|
|
91
|
+
context.io.writeErr(
|
|
92
|
+
`Could not open browser automatically. Please visit:
|
|
122
93
|
${browserUrl}`
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
if (nextStep !== "redeem") {
|
|
127
|
-
context.io.writeErr("");
|
|
128
|
-
context.io.writeErr("Waiting for browser confirmation...");
|
|
129
|
-
context.io.writeErr("(Press Ctrl+C to cancel)\n");
|
|
94
|
+
);
|
|
130
95
|
}
|
|
131
|
-
|
|
132
|
-
|
|
96
|
+
context.io.writeErr("");
|
|
97
|
+
context.io.writeErr("Waiting for browser confirmation...");
|
|
98
|
+
context.io.writeErr("(Press Ctrl+C to cancel)\n");
|
|
99
|
+
let redeemResponse;
|
|
100
|
+
try {
|
|
101
|
+
redeemResponse = await pollLoginRedeem(baseURL, sessionId);
|
|
102
|
+
} catch (error) {
|
|
133
103
|
context.io.writeErr(
|
|
134
|
-
`Login failed: ${
|
|
104
|
+
`Login failed: ${error instanceof Error ? error.message : String(error)}`
|
|
135
105
|
);
|
|
136
106
|
process.exit(1);
|
|
137
107
|
}
|
|
138
|
-
const redeemResponse = redeemOutcome.value;
|
|
139
108
|
if (redeemResponse.status === "expired") {
|
|
140
109
|
context.io.writeErr("Login session expired. Please try again.");
|
|
141
110
|
process.exit(1);
|
|
@@ -144,30 +113,25 @@ async function runLogin(context, token) {
|
|
|
144
113
|
context.io.writeErr("Login failed. Please try again.");
|
|
145
114
|
process.exit(1);
|
|
146
115
|
}
|
|
147
|
-
const
|
|
116
|
+
const tokenInfo = parseToken(redeemResponse.token);
|
|
117
|
+
await context.config.login({
|
|
118
|
+
environment,
|
|
148
119
|
token: redeemResponse.token,
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
await context.config.update(update);
|
|
155
|
-
context.io.writeErr("\u2713 Successfully logged in!");
|
|
120
|
+
spaceId: tokenInfo.spaceId,
|
|
121
|
+
spaceName: redeemResponse.spaceName,
|
|
122
|
+
cellId: tokenInfo.cellId
|
|
123
|
+
});
|
|
124
|
+
context.io.writeErr("Logged in.");
|
|
156
125
|
}
|
|
157
|
-
const login = buildHandler(async function(_
|
|
158
|
-
await runLogin(this
|
|
159
|
-
});
|
|
160
|
-
const show = buildHandler(function() {
|
|
161
|
-
this.io.writeOut(`${this.config.token ?? ""}`);
|
|
126
|
+
const login = buildHandler(async function(_) {
|
|
127
|
+
await runLogin(this);
|
|
162
128
|
});
|
|
163
|
-
const
|
|
164
|
-
await this.config.
|
|
165
|
-
|
|
166
|
-
});
|
|
129
|
+
const show = buildHandler(async function() {
|
|
130
|
+
const tokenAndInfo = await this.config.getToken();
|
|
131
|
+
this.io.writeOut(`${tokenAndInfo?.[0] ?? ""}`);
|
|
167
132
|
});
|
|
168
133
|
export {
|
|
169
134
|
login,
|
|
170
|
-
logout,
|
|
171
135
|
runLogin,
|
|
172
136
|
show
|
|
173
137
|
};
|
package/dist/commands/auth.js
CHANGED
|
@@ -10,25 +10,9 @@ const authCommands = buildRouteMap({
|
|
|
10
10
|
brief: "Login to the Project Ajax platform via browser authentication",
|
|
11
11
|
fullDescription: `
|
|
12
12
|
Opens a browser window for you to authenticate and select a workspace.
|
|
13
|
-
A verification code will be displayed in the terminal - make sure it matches
|
|
14
|
-
what you see in your browser before confirming.
|
|
15
|
-
|
|
16
|
-
Alternatively, you can pass a token directly (for automation or CI environments):
|
|
17
|
-
workers auth login <token>
|
|
18
13
|
`.trim()
|
|
19
14
|
},
|
|
20
15
|
parameters: {
|
|
21
|
-
positional: {
|
|
22
|
-
kind: "tuple",
|
|
23
|
-
parameters: [
|
|
24
|
-
{
|
|
25
|
-
brief: "A Workers API token (optional, for CI/automation)",
|
|
26
|
-
parse: String,
|
|
27
|
-
placeholder: "api-token",
|
|
28
|
-
optional: true
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
},
|
|
32
16
|
flags: {
|
|
33
17
|
...globalFlags
|
|
34
18
|
}
|
|
@@ -45,17 +29,6 @@ Alternatively, you can pass a token directly (for automation or CI environments)
|
|
|
45
29
|
}
|
|
46
30
|
},
|
|
47
31
|
loader: () => import("./auth.impl.js").then((m) => m.show)
|
|
48
|
-
}),
|
|
49
|
-
logout: buildCommand({
|
|
50
|
-
docs: {
|
|
51
|
-
brief: "Unset the token for the CLI"
|
|
52
|
-
},
|
|
53
|
-
parameters: {
|
|
54
|
-
flags: {
|
|
55
|
-
...globalFlags
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
loader: () => import("./auth.impl.js").then((m) => m.logout)
|
|
59
32
|
})
|
|
60
33
|
}
|
|
61
34
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.impl.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.impl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,UAAU,WAAW;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"deploy.impl.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.impl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,UAAU,WAAW;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,MAAM,iGAmFjB,CAAC"}
|
|
@@ -4,10 +4,10 @@ import { deployWorker } from "../deploy.js";
|
|
|
4
4
|
import { buildHandler } from "../handler.js";
|
|
5
5
|
import { runLogin } from "./auth.impl.js";
|
|
6
6
|
const deploy = buildHandler(async function(flags) {
|
|
7
|
-
if (!this.config.
|
|
7
|
+
if (!await this.config.getToken()) {
|
|
8
8
|
await runLogin(this);
|
|
9
9
|
}
|
|
10
|
-
const
|
|
10
|
+
const [token, tokenInfo] = await this.config.mustGetToken();
|
|
11
11
|
const workerId = this.config.workerId;
|
|
12
12
|
const environment = this.config.environment;
|
|
13
13
|
if (!environment) {
|
|
@@ -16,9 +16,8 @@ const deploy = buildHandler(async function(flags) {
|
|
|
16
16
|
const workerPath = this.process.cwd();
|
|
17
17
|
const apiClient = new ApiClient({
|
|
18
18
|
token,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
cellId,
|
|
19
|
+
baseUrl: this.config.baseURL,
|
|
20
|
+
cellId: tokenInfo.cellId,
|
|
22
21
|
writer: this.io
|
|
23
22
|
});
|
|
24
23
|
const authedContext = { ...this, apiClient };
|
|
@@ -60,9 +59,9 @@ const deploy = buildHandler(async function(flags) {
|
|
|
60
59
|
}
|
|
61
60
|
if (Result.isSuccess(result)) {
|
|
62
61
|
const { workerId: workerId2 } = Result.unwrap(result);
|
|
63
|
-
|
|
62
|
+
this.config.setWorker(workerId2);
|
|
64
63
|
this.io.writeErr("\u2713 Successfully deployed worker");
|
|
65
|
-
const workerUrl = `${this.config.
|
|
64
|
+
const workerUrl = `${this.config.baseURL}/__workers__/${workerId2}`;
|
|
66
65
|
this.io.writeErr("");
|
|
67
66
|
this.io.writeErr(`Worker Dashboard: ${workerUrl}`);
|
|
68
67
|
} else {
|
|
@@ -129,7 +129,7 @@ ${usageHint}`);
|
|
|
129
129
|
}
|
|
130
130
|
});
|
|
131
131
|
function showUrls(context, workerId, collectionId) {
|
|
132
|
-
const baseUrl = context.config.
|
|
132
|
+
const baseUrl = context.config.baseURL;
|
|
133
133
|
context.io.writeErr("");
|
|
134
134
|
const workerUrl = `${baseUrl}/__workers__/${workerId}`;
|
|
135
135
|
context.io.writeErr(`Worker Dashboard: ${workerUrl}`);
|
|
@@ -1,13 +1,28 @@
|
|
|
1
|
-
import { Config, type
|
|
1
|
+
import { Config, type LocalConfig, type SpaceCache } from "../../config.js";
|
|
2
2
|
import type { LocalContext } from "../../context.js";
|
|
3
3
|
import type { GlobalFlags } from "../../flags.js";
|
|
4
|
-
|
|
4
|
+
import type { TokenInfo } from "../../token.js";
|
|
5
5
|
export declare const baseFlags: GlobalFlags;
|
|
6
|
-
export declare function
|
|
7
|
-
|
|
6
|
+
export declare function preventConfigResolution(): void;
|
|
7
|
+
export declare function createAndLoadConfig(args?: {
|
|
8
|
+
globalConfig?: SpaceCache;
|
|
9
|
+
localConfig?: LocalConfig;
|
|
8
10
|
env?: Partial<NodeJS.ProcessEnv>;
|
|
9
11
|
flags?: Partial<GlobalFlags>;
|
|
10
|
-
}): Promise<
|
|
12
|
+
}): Promise<Config>;
|
|
11
13
|
export declare function createBaseContext(): LocalContext;
|
|
12
14
|
export declare function cleanupTmpDirectories(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Generates a v1 token string with the given token info. The token is not valid
|
|
17
|
+
* due to an invalid signature.
|
|
18
|
+
*
|
|
19
|
+
* @param args Optional token info to use for the token
|
|
20
|
+
* @returns A v1 token string
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateV1Token(args?: {
|
|
23
|
+
spaceId?: string;
|
|
24
|
+
cellId?: string;
|
|
25
|
+
}, opts?: {
|
|
26
|
+
mock?: boolean;
|
|
27
|
+
}): [string, TokenInfo];
|
|
13
28
|
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/commands/utils/testing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/commands/utils/testing.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,eAAO,MAAM,SAAS,EAAE,WAEvB,CAAC;AAEF,wBAAgB,uBAAuB,SAGtC;AAED,wBAAsB,mBAAmB,CACxC,IAAI,GAAE;IACL,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CACxB,GACJ,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,wBAAgB,iBAAiB,IAAI,YAAY,CAQhD;AAID,wBAAsB,qBAAqB,kBAU1C;AA2BD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC9B,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,EAChD,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAoB,GACxC,CAAC,MAAM,EAAE,SAAS,CAAC,CAuBrB"}
|
|
@@ -1,29 +1,36 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
|
-
import
|
|
2
|
+
import * as fsp from "node:fs/promises";
|
|
3
3
|
import * as os from "node:os";
|
|
4
4
|
import { tmpdir } from "node:os";
|
|
5
5
|
import * as path from "node:path";
|
|
6
|
+
import { getPassword } from "cross-keychain";
|
|
7
|
+
import { vi } from "vitest";
|
|
6
8
|
import { Config } from "../../config.js";
|
|
7
9
|
import { IO } from "../../io.js";
|
|
8
|
-
const tmpDirectories = [];
|
|
9
10
|
const baseFlags = {
|
|
10
11
|
debug: false
|
|
11
12
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}) {
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
function preventConfigResolution() {
|
|
14
|
+
vi.spyOn(Config, "resolveSpaceCachePath").mockImplementation(() => "");
|
|
15
|
+
vi.spyOn(Config, "resolveLocalConfigPath").mockImplementation(() => "");
|
|
16
|
+
}
|
|
17
|
+
async function createAndLoadConfig(args = {}) {
|
|
18
|
+
const globalConfig = args.globalConfig ?? Config.emptySpaceCache;
|
|
19
|
+
const localConfig = args.localConfig ?? Config.emptyLocalConfig;
|
|
20
|
+
const { globalPath, localPath } = await createConfigFiles({
|
|
21
|
+
globalConfig,
|
|
22
|
+
localConfig
|
|
23
|
+
});
|
|
24
|
+
const config = Config.load({
|
|
25
|
+
spaceCachePath: globalPath,
|
|
26
|
+
localPath,
|
|
27
|
+
env: args.env ?? {},
|
|
21
28
|
flags: {
|
|
22
29
|
...baseFlags,
|
|
23
|
-
...flags ?? {}
|
|
30
|
+
...args.flags ?? {}
|
|
24
31
|
}
|
|
25
32
|
});
|
|
26
|
-
return
|
|
33
|
+
return config;
|
|
27
34
|
}
|
|
28
35
|
function createBaseContext() {
|
|
29
36
|
return {
|
|
@@ -34,25 +41,59 @@ function createBaseContext() {
|
|
|
34
41
|
process
|
|
35
42
|
};
|
|
36
43
|
}
|
|
44
|
+
let tmpDirectories = [];
|
|
37
45
|
async function cleanupTmpDirectories() {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
await Promise.all(
|
|
47
|
+
tmpDirectories.map(
|
|
48
|
+
(dir) => fsp.rm(dir, { recursive: true, force: true }).catch((error) => {
|
|
49
|
+
console.error(`Error removing temporary directory ${dir}:`, error);
|
|
50
|
+
})
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
tmpDirectories = [];
|
|
44
54
|
}
|
|
45
|
-
async function
|
|
46
|
-
const dir = await mkdtemp(path.join(tmpdir(), "cmd-test-"));
|
|
55
|
+
async function createConfigFiles(args) {
|
|
56
|
+
const dir = await fsp.mkdtemp(path.join(tmpdir(), "cmd-test-"));
|
|
47
57
|
tmpDirectories.push(dir);
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
58
|
+
const globalPath = path.join(dir, "global.json");
|
|
59
|
+
const localPath = path.join(dir, "local.json");
|
|
60
|
+
await fsp.writeFile(
|
|
61
|
+
globalPath,
|
|
62
|
+
JSON.stringify(args.globalConfig, null, 2),
|
|
63
|
+
"utf-8"
|
|
64
|
+
);
|
|
65
|
+
await fsp.writeFile(
|
|
66
|
+
localPath,
|
|
67
|
+
JSON.stringify(args.localConfig, null, 2),
|
|
68
|
+
"utf-8"
|
|
69
|
+
);
|
|
70
|
+
return { globalPath, localPath };
|
|
71
|
+
}
|
|
72
|
+
function generateV1Token(args = {}, opts = { mock: false }) {
|
|
73
|
+
const payload = {
|
|
74
|
+
spaceId: args.spaceId ?? "space-1",
|
|
75
|
+
cellId: args.cellId ?? "cell-1"
|
|
76
|
+
};
|
|
77
|
+
const encodedPayload = Buffer.from(JSON.stringify(payload)).toString(
|
|
78
|
+
"base64url"
|
|
79
|
+
);
|
|
80
|
+
const token = `v1.user.${encodedPayload}.signature`;
|
|
81
|
+
if (opts.mock) {
|
|
82
|
+
vi.mocked(getPassword).mockResolvedValue(token);
|
|
83
|
+
}
|
|
84
|
+
return [
|
|
85
|
+
token,
|
|
86
|
+
{
|
|
87
|
+
spaceId: payload.spaceId,
|
|
88
|
+
cellId: payload.cellId
|
|
89
|
+
}
|
|
90
|
+
];
|
|
51
91
|
}
|
|
52
92
|
export {
|
|
53
93
|
baseFlags,
|
|
54
94
|
cleanupTmpDirectories,
|
|
55
95
|
createAndLoadConfig,
|
|
56
96
|
createBaseContext,
|
|
57
|
-
|
|
97
|
+
generateV1Token,
|
|
98
|
+
preventConfigResolution
|
|
58
99
|
};
|