cxgrd 0.1.2 → 0.1.4
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-session.d.ts","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"auth-session.d.ts","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA4B1E;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiF5E;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzD"}
|
|
@@ -17,7 +17,6 @@ function normalizeRole(role) {
|
|
|
17
17
|
const POLL_INTERVAL_MS = 2000;
|
|
18
18
|
const POLL_TIMEOUT_MS = 5 * 60 * 1000;
|
|
19
19
|
async function resolveActiveSession() {
|
|
20
|
-
// Dev override — lets you test pro/team locally without real auth
|
|
21
20
|
const devPlan = (0, env_1.envString)('CXGRD_DEV_PLAN');
|
|
22
21
|
if (devPlan) {
|
|
23
22
|
const plan = (0, plans_1.normalizePlan)(devPlan);
|
|
@@ -40,7 +39,6 @@ async function resolveActiveSession() {
|
|
|
40
39
|
plan: stored.plan,
|
|
41
40
|
source: 'auth_file',
|
|
42
41
|
email: stored.email,
|
|
43
|
-
// orgId/orgName/role only populated for team/enterprise — undefined for free+pro
|
|
44
42
|
orgId: stored.orgId,
|
|
45
43
|
orgName: stored.orgName,
|
|
46
44
|
role: normalizeRole(stored.role),
|
|
@@ -51,18 +49,36 @@ async function pollAuthSession(sessionId) {
|
|
|
51
49
|
const url = `${baseUrl}/api/auth/cli/session/${sessionId}`;
|
|
52
50
|
const started = Date.now();
|
|
53
51
|
while (Date.now() - started < POLL_TIMEOUT_MS) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
let response;
|
|
53
|
+
try {
|
|
54
|
+
response = await fetch(url, {
|
|
55
|
+
method: 'GET',
|
|
56
|
+
headers: { Accept: 'application/json' },
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Network error — wait and retry
|
|
61
|
+
await sleep(POLL_INTERVAL_MS);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// 501 = server not configured — hard stop
|
|
65
|
+
if (response.status === 501) {
|
|
59
66
|
throw new Error('Auth API is not available yet. For local dev set CXGRD_DEV_PLAN=pro in .env');
|
|
60
67
|
}
|
|
68
|
+
// 404 = session not found yet — retry (brief race condition on first poll)
|
|
69
|
+
if (response.status === 404) {
|
|
70
|
+
await sleep(POLL_INTERVAL_MS);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
61
73
|
// 202 = still pending, user hasn't completed GitHub login yet
|
|
62
74
|
if (response.status === 202) {
|
|
63
75
|
await sleep(POLL_INTERVAL_MS);
|
|
64
76
|
continue;
|
|
65
77
|
}
|
|
78
|
+
// 410 = session expired
|
|
79
|
+
if (response.status === 410) {
|
|
80
|
+
throw new Error('Session expired. Run cxgrd auth login again.');
|
|
81
|
+
}
|
|
66
82
|
if (!response.ok) {
|
|
67
83
|
const body = await response.text().catch(() => '');
|
|
68
84
|
throw new Error(`Auth poll failed (${response.status}): ${body || response.statusText}`);
|
|
@@ -73,19 +89,16 @@ async function pollAuthSession(sessionId) {
|
|
|
73
89
|
await sleep(POLL_INTERVAL_MS);
|
|
74
90
|
continue;
|
|
75
91
|
}
|
|
76
|
-
|
|
92
|
+
return {
|
|
77
93
|
token,
|
|
78
94
|
plan: (0, plans_1.normalizePlan)(data.plan),
|
|
79
95
|
email: data.email,
|
|
80
|
-
// these are only set for team/enterprise accounts
|
|
81
96
|
orgId: data.org_id ?? data.orgId,
|
|
82
97
|
orgName: data.org_name ?? data.orgName,
|
|
83
98
|
role: normalizeRole(data.role),
|
|
84
99
|
expiresAt: normalizeExpiry(data.expires_at ?? data.expiresAt),
|
|
85
100
|
obtainedAt: Date.now(),
|
|
86
101
|
};
|
|
87
|
-
// Free and pro users both get a token — feature gates are enforced per-command
|
|
88
|
-
return auth;
|
|
89
102
|
}
|
|
90
103
|
throw new Error('Timed out waiting for browser login. Try again.');
|
|
91
104
|
}
|
|
@@ -102,7 +115,6 @@ function sleep(ms) {
|
|
|
102
115
|
function normalizeExpiry(expiresAt) {
|
|
103
116
|
if (!expiresAt || Number.isNaN(expiresAt))
|
|
104
117
|
return undefined;
|
|
105
|
-
// accept either epoch seconds or milliseconds
|
|
106
118
|
return expiresAt < 1_000_000_000_000 ? expiresAt * 1000 : expiresAt;
|
|
107
119
|
}
|
|
108
120
|
//# sourceMappingURL=auth-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":";;AAyBA,
|
|
1
|
+
{"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AA4BA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCtD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGvD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAevD"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -12,7 +12,19 @@ const auth_store_1 = require("../auth/auth-store");
|
|
|
12
12
|
const auth_session_1 = require("../auth/auth-session");
|
|
13
13
|
const open_browser_1 = require("../auth/open-browser");
|
|
14
14
|
const entitlements_1 = require("../auth/entitlements");
|
|
15
|
-
|
|
15
|
+
async function initiateSession(sessionId) {
|
|
16
|
+
const baseUrl = (0, env_1.envString)('CXGRD_AUTH_BASE_URL', 'https://cxgrd.com').replace(/\/$/, '');
|
|
17
|
+
const url = `${baseUrl}/api/auth/cli/initiate`;
|
|
18
|
+
const response = await fetch(url, {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: { 'Content-Type': 'application/json' },
|
|
21
|
+
body: JSON.stringify({ sessionId }),
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
const body = await response.text().catch(() => '');
|
|
25
|
+
throw new Error(`Failed to initiate session (${response.status}): ${body || response.statusText}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
16
28
|
async function authLoginCommand() {
|
|
17
29
|
await (0, env_1.loadCxgrdEnv)();
|
|
18
30
|
const sessionId = (0, auth_session_1.createCliSessionId)();
|
|
@@ -20,11 +32,21 @@ async function authLoginCommand() {
|
|
|
20
32
|
console.log(chalk_1.default.blue('✓ Opening browser for GitHub sign-in...'));
|
|
21
33
|
console.log(chalk_1.default.gray(` Session: ${sessionId.slice(0, 8)}...`));
|
|
22
34
|
console.log(chalk_1.default.gray(` If the browser does not open: ${url}\n`));
|
|
35
|
+
// Register the session on the server BEFORE opening browser and polling
|
|
36
|
+
try {
|
|
37
|
+
await initiateSession(sessionId);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
41
|
+
console.error(chalk_1.default.red(`\n✗ Could not reach auth server: ${message}`));
|
|
42
|
+
console.error(chalk_1.default.gray(' For local dev: set CXGRD_DEV_PLAN=pro in .env'));
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
23
45
|
(0, open_browser_1.openBrowser)(url);
|
|
24
46
|
console.log(chalk_1.default.gray(' Waiting for authorization...'));
|
|
25
47
|
try {
|
|
26
48
|
const auth = await (0, auth_session_1.pollAuthSession)(sessionId);
|
|
27
|
-
await (0,
|
|
49
|
+
await (0, auth_store_1.writeAuth)(auth);
|
|
28
50
|
console.log(chalk_1.default.green('\n✓ Signed in successfully'));
|
|
29
51
|
console.log(chalk_1.default.gray(` Token saved to ${(0, auth_store_1.getAuthPath)()}`));
|
|
30
52
|
console.log(chalk_1.default.gray(` Plan: ${auth.plan}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":";;;;;AA4BA,4CAsCC;AAED,8CAGC;AAED,8CAeC;AAxFD,kDAA0B;AAC1B,uCAAwD;AACxD,mDAAiF;AACjF,uDAK8B;AAC9B,uDAAmD;AACnD,uDAA0D;AAE1D,KAAK,UAAU,eAAe,CAAC,SAAiB;IAC9C,MAAM,OAAO,GAAG,IAAA,eAAS,EAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzF,MAAM,GAAG,GAAG,GAAG,OAAO,wBAAwB,CAAC;IAE/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;KACpC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACrG,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,gBAAgB;IACpC,MAAM,IAAA,kBAAY,GAAE,CAAC;IAErB,MAAM,SAAS,GAAG,IAAA,iCAAkB,GAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAA,8BAAe,EAAC,SAAS,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC,CAAC,CAAC;IAErE,wEAAwE;IACxE,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAA,0BAAW,EAAC,GAAG,CAAC,CAAC;IAEjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAA,8BAAe,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAA,sBAAS,EAAC,IAAI,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,IAAA,wBAAW,GAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,iBAAiB;IACrC,MAAM,IAAA,sBAAS,GAAE,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC,CAAC;AAC1F,CAAC;AAEM,KAAK,UAAU,iBAAiB;IACrC,MAAM,IAAA,kBAAY,GAAE,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAQ,GAAE,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,IAAA,mCAAoB,GAAE,CAAC;IAE7C,IAAA,iCAAkB,EAAC,OAAO,CAAC,CAAC;IAE5B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,IAAA,wBAAW,GAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC"}
|