cxgrd 0.1.0 → 0.1.2
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/auth/audit-usage.js +34 -21
- package/dist/auth/audit-usage.js.map +1 -1
- package/dist/auth/auth-session.js +26 -20
- package/dist/auth/auth-session.js.map +1 -1
- package/dist/auth/auth-store.js +22 -16
- package/dist/auth/auth-store.js.map +1 -1
- package/dist/auth/entitlements.js +35 -22
- package/dist/auth/entitlements.js.map +1 -1
- package/dist/auth/open-browser.js +6 -3
- package/dist/auth/open-browser.js.map +1 -1
- package/dist/auth/plans.js +13 -6
- package/dist/auth/plans.js.map +1 -1
- package/dist/auth/plans.test.js +23 -18
- package/dist/auth/plans.test.js.map +1 -1
- package/dist/cg-directory.js +40 -35
- package/dist/cg-directory.js.map +1 -1
- package/dist/check/check-runner.js +16 -13
- package/dist/check/check-runner.js.map +1 -1
- package/dist/check/compiler-service.js +22 -19
- package/dist/check/compiler-service.js.map +1 -1
- package/dist/check/parsers/cargo.js +4 -1
- package/dist/check/parsers/cargo.js.map +1 -1
- package/dist/check/parsers/parsers.test.js +30 -25
- package/dist/check/parsers/parsers.test.js.map +1 -1
- package/dist/check/parsers/pyright.js +4 -1
- package/dist/check/parsers/pyright.js.map +1 -1
- package/dist/check/parsers/tsc-cli.js +4 -1
- package/dist/check/parsers/tsc-cli.js.map +1 -1
- package/dist/check/project-tooling.js +23 -16
- package/dist/check/project-tooling.js.map +1 -1
- package/dist/check/run-command.js +9 -5
- package/dist/check/run-command.js.map +1 -1
- package/dist/check/scope.js +14 -8
- package/dist/check/scope.js.map +1 -1
- package/dist/check/scope.test.js +15 -10
- package/dist/check/scope.test.js.map +1 -1
- package/dist/check/strict-mode.js +6 -2
- package/dist/check/strict-mode.js.map +1 -1
- package/dist/check/strict-mode.test.js +19 -14
- package/dist/check/strict-mode.test.js.map +1 -1
- package/dist/check/structural-checks.js +4 -1
- package/dist/check/structural-checks.js.map +1 -1
- package/dist/check/types.js +2 -1
- package/dist/check/verifiers/python.js +11 -8
- package/dist/check/verifiers/python.js.map +1 -1
- package/dist/check/verifiers/rust.js +11 -8
- package/dist/check/verifiers/rust.js.map +1 -1
- package/dist/check/verifiers/typescript.js +24 -18
- package/dist/check/verifiers/typescript.js.map +1 -1
- package/dist/commands/auth.js +42 -34
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/check.js +49 -43
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/doctor.js +33 -27
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init-hooks.js +34 -31
- package/dist/commands/init-hooks.js.map +1 -1
- package/dist/commands/input.js +46 -43
- package/dist/commands/input.js.map +1 -1
- package/dist/commands/prompt.js +40 -34
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/scan.js +49 -43
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/watch.js +20 -17
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/env.js +21 -16
- package/dist/config/env.js.map +1 -1
- package/dist/graph.js +38 -36
- package/dist/graph.js.map +1 -1
- package/dist/index.js +32 -27
- package/dist/index.js.map +1 -1
- package/dist/memory/pattern-analyzer.js +6 -2
- package/dist/memory/pattern-analyzer.js.map +1 -1
- package/dist/memory/repo-memory.js +10 -4
- package/dist/memory/repo-memory.js.map +1 -1
- package/dist/memory/types.js +2 -1
- package/dist/prompt/llm-client.js +10 -7
- package/dist/prompt/llm-client.js.map +1 -1
- package/dist/prompt/subgraph.js +10 -6
- package/dist/prompt/subgraph.js.map +1 -1
- package/dist/scanner.js +51 -49
- package/dist/scanner.js.map +1 -1
- package/dist/team/audit.js +10 -7
- package/dist/team/audit.js.map +1 -1
- package/dist/team/cloud-client.js +23 -17
- package/dist/team/cloud-client.js.map +1 -1
- package/dist/team/dev-store.js +34 -25
- package/dist/team/dev-store.js.map +1 -1
- package/dist/team/graph-sync.js +28 -20
- package/dist/team/graph-sync.js.map +1 -1
- package/dist/team/policy-cache.js +19 -14
- package/dist/team/policy-cache.js.map +1 -1
- package/dist/team/policy-engine.js +4 -1
- package/dist/team/policy-engine.js.map +1 -1
- package/dist/team/policy-engine.test.js +18 -13
- package/dist/team/policy-engine.test.js.map +1 -1
- package/dist/team/repo-identity.js +9 -6
- package/dist/team/repo-identity.js.map +1 -1
- package/dist/team/types.js +2 -1
- package/dist/toolchain/probe.js +23 -14
- package/dist/toolchain/probe.js.map +1 -1
- package/dist/toolchain/project-languages.js +20 -16
- package/dist/toolchain/project-languages.js.map +1 -1
- package/dist/toolchain/types.js +2 -1
- package/dist/utils/blast-radius-analyzer.js +7 -2
- package/dist/utils/blast-radius-analyzer.js.map +1 -1
- package/dist/utils/change-detector.js +8 -3
- package/dist/utils/change-detector.js.map +1 -1
- package/dist/utils/cli-formatter.js +34 -26
- package/dist/utils/cli-formatter.js.map +1 -1
- package/dist/utils/git-hook-manager.js +42 -34
- package/dist/utils/git-hook-manager.js.map +1 -1
- package/dist/utils/project-watcher.js +17 -12
- package/dist/utils/project-watcher.js.map +1 -1
- package/package.json +1 -2
package/dist/auth/audit-usage.js
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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.FREE_MONTHLY_AUDIT_LIMIT = exports.AuditUsageExceededError = void 0;
|
|
7
|
+
exports.getCurrentMonthAuditCount = getCurrentMonthAuditCount;
|
|
8
|
+
exports.incrementAuditCount = incrementAuditCount;
|
|
9
|
+
exports.checkFreeAuditLimit = checkFreeAuditLimit;
|
|
10
|
+
exports.printAuditUsageStatus = printAuditUsageStatus;
|
|
11
|
+
const promises_1 = require("fs/promises");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
const os_1 = require("os");
|
|
14
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
15
|
+
class AuditUsageExceededError extends Error {
|
|
16
|
+
used;
|
|
17
|
+
limit;
|
|
6
18
|
constructor(used, limit) {
|
|
7
19
|
super(`Monthly audit limit exceeded. Used: ${used}/${limit}\n` +
|
|
8
20
|
` Upgrade to Pro for unlimited audits at https://cxgrd.com/pricing`);
|
|
@@ -11,13 +23,14 @@ export class AuditUsageExceededError extends Error {
|
|
|
11
23
|
this.name = 'AuditUsageExceededError';
|
|
12
24
|
}
|
|
13
25
|
}
|
|
14
|
-
|
|
26
|
+
exports.AuditUsageExceededError = AuditUsageExceededError;
|
|
27
|
+
exports.FREE_MONTHLY_AUDIT_LIMIT = 50;
|
|
15
28
|
function getUsagePath() {
|
|
16
|
-
return join(homedir(), '.cg', 'usage.json');
|
|
29
|
+
return (0, path_1.join)((0, os_1.homedir)(), '.cg', 'usage.json');
|
|
17
30
|
}
|
|
18
31
|
async function readUsageFile() {
|
|
19
32
|
try {
|
|
20
|
-
const content = await readFile(getUsagePath(), 'utf-8');
|
|
33
|
+
const content = await (0, promises_1.readFile)(getUsagePath(), 'utf-8');
|
|
21
34
|
return JSON.parse(content);
|
|
22
35
|
}
|
|
23
36
|
catch {
|
|
@@ -26,10 +39,10 @@ async function readUsageFile() {
|
|
|
26
39
|
}
|
|
27
40
|
async function writeUsageFile(records) {
|
|
28
41
|
const path = getUsagePath();
|
|
29
|
-
const dir = join(homedir(), '.cg');
|
|
42
|
+
const dir = (0, path_1.join)((0, os_1.homedir)(), '.cg');
|
|
30
43
|
try {
|
|
31
|
-
await mkdir(dir, { recursive: true });
|
|
32
|
-
await writeFile(path, JSON.stringify(records, null, 2), 'utf-8');
|
|
44
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
45
|
+
await (0, promises_1.writeFile)(path, JSON.stringify(records, null, 2), 'utf-8');
|
|
33
46
|
}
|
|
34
47
|
catch {
|
|
35
48
|
// Silently fail if we can't write usage (e.g., permission issues)
|
|
@@ -46,7 +59,7 @@ function getCurrentMonth() {
|
|
|
46
59
|
/**
|
|
47
60
|
* Get current month's audit count for free tier tracking
|
|
48
61
|
*/
|
|
49
|
-
|
|
62
|
+
async function getCurrentMonthAuditCount() {
|
|
50
63
|
const records = await readUsageFile();
|
|
51
64
|
const current = getCurrentMonth();
|
|
52
65
|
const record = records.find((r) => r.year === current.year && r.month === current.month);
|
|
@@ -55,7 +68,7 @@ export async function getCurrentMonthAuditCount() {
|
|
|
55
68
|
/**
|
|
56
69
|
* Increment audit count (called after successful scan/check)
|
|
57
70
|
*/
|
|
58
|
-
|
|
71
|
+
async function incrementAuditCount() {
|
|
59
72
|
const records = await readUsageFile();
|
|
60
73
|
const current = getCurrentMonth();
|
|
61
74
|
const record = records.find((r) => r.year === current.year && r.month === current.month);
|
|
@@ -84,21 +97,21 @@ export async function incrementAuditCount() {
|
|
|
84
97
|
* Check if free tier audit limit exceeded
|
|
85
98
|
* Returns true if limit OK, throws if exceeded
|
|
86
99
|
*/
|
|
87
|
-
|
|
100
|
+
async function checkFreeAuditLimit() {
|
|
88
101
|
const count = await getCurrentMonthAuditCount();
|
|
89
|
-
if (count >= FREE_MONTHLY_AUDIT_LIMIT) {
|
|
90
|
-
throw new AuditUsageExceededError(count, FREE_MONTHLY_AUDIT_LIMIT);
|
|
102
|
+
if (count >= exports.FREE_MONTHLY_AUDIT_LIMIT) {
|
|
103
|
+
throw new AuditUsageExceededError(count, exports.FREE_MONTHLY_AUDIT_LIMIT);
|
|
91
104
|
}
|
|
92
105
|
}
|
|
93
106
|
/**
|
|
94
107
|
* Print current usage status to console
|
|
95
108
|
*/
|
|
96
|
-
|
|
109
|
+
async function printAuditUsageStatus() {
|
|
97
110
|
const count = await getCurrentMonthAuditCount();
|
|
98
|
-
const percent = Math.round((count / FREE_MONTHLY_AUDIT_LIMIT) * 100);
|
|
99
|
-
console.log(
|
|
100
|
-
if (count >= FREE_MONTHLY_AUDIT_LIMIT - 5) {
|
|
101
|
-
console.log(
|
|
111
|
+
const percent = Math.round((count / exports.FREE_MONTHLY_AUDIT_LIMIT) * 100);
|
|
112
|
+
console.log(chalk_1.default.gray(` Audits this month: ${count}/${exports.FREE_MONTHLY_AUDIT_LIMIT} (${percent}%)`));
|
|
113
|
+
if (count >= exports.FREE_MONTHLY_AUDIT_LIMIT - 5) {
|
|
114
|
+
console.log(chalk_1.default.yellow(` ⚠ Approaching monthly limit — upgrade to Pro for unlimited audits`));
|
|
102
115
|
}
|
|
103
116
|
}
|
|
104
117
|
//# sourceMappingURL=audit-usage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-usage.js","sourceRoot":"","sources":["../../src/auth/audit-usage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit-usage.js","sourceRoot":"","sources":["../../src/auth/audit-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveActiveSession = resolveActiveSession;
|
|
4
|
+
exports.pollAuthSession = pollAuthSession;
|
|
5
|
+
exports.createCliSessionId = createCliSessionId;
|
|
6
|
+
exports.buildCliAuthUrl = buildCliAuthUrl;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const env_1 = require("../config/env");
|
|
9
|
+
const auth_store_1 = require("./auth-store");
|
|
10
|
+
const plans_1 = require("./plans");
|
|
5
11
|
function normalizeRole(role) {
|
|
6
12
|
const r = (role || 'member').toLowerCase();
|
|
7
13
|
if (r === 'lead' || r === 'admin')
|
|
@@ -10,23 +16,23 @@ function normalizeRole(role) {
|
|
|
10
16
|
}
|
|
11
17
|
const POLL_INTERVAL_MS = 2000;
|
|
12
18
|
const POLL_TIMEOUT_MS = 5 * 60 * 1000;
|
|
13
|
-
|
|
19
|
+
async function resolveActiveSession() {
|
|
14
20
|
// Dev override — lets you test pro/team locally without real auth
|
|
15
|
-
const devPlan = envString('CXGRD_DEV_PLAN');
|
|
21
|
+
const devPlan = (0, env_1.envString)('CXGRD_DEV_PLAN');
|
|
16
22
|
if (devPlan) {
|
|
17
|
-
const plan = normalizePlan(devPlan);
|
|
23
|
+
const plan = (0, plans_1.normalizePlan)(devPlan);
|
|
18
24
|
if (plan !== 'free') {
|
|
19
25
|
return {
|
|
20
|
-
token: envString('CXGRD_DEV_TOKEN', 'dev-local'),
|
|
26
|
+
token: (0, env_1.envString)('CXGRD_DEV_TOKEN', 'dev-local'),
|
|
21
27
|
plan,
|
|
22
28
|
source: 'dev_override',
|
|
23
|
-
orgId: envString('CXGRD_DEV_ORG_ID', 'org_dev'),
|
|
24
|
-
orgName: envString('CXGRD_DEV_ORG_NAME', 'Dev Org'),
|
|
25
|
-
role: normalizeRole(envString('CXGRD_DEV_ROLE', 'member')),
|
|
29
|
+
orgId: (0, env_1.envString)('CXGRD_DEV_ORG_ID', 'org_dev'),
|
|
30
|
+
orgName: (0, env_1.envString)('CXGRD_DEV_ORG_NAME', 'Dev Org'),
|
|
31
|
+
role: normalizeRole((0, env_1.envString)('CXGRD_DEV_ROLE', 'member')),
|
|
26
32
|
};
|
|
27
33
|
}
|
|
28
34
|
}
|
|
29
|
-
const stored = await readAuth();
|
|
35
|
+
const stored = await (0, auth_store_1.readAuth)();
|
|
30
36
|
if (!stored)
|
|
31
37
|
return null;
|
|
32
38
|
return {
|
|
@@ -40,8 +46,8 @@ export async function resolveActiveSession() {
|
|
|
40
46
|
role: normalizeRole(stored.role),
|
|
41
47
|
};
|
|
42
48
|
}
|
|
43
|
-
|
|
44
|
-
const baseUrl = envString('CXGRD_AUTH_BASE_URL', 'https://cxgrd.com').replace(/\/$/, '');
|
|
49
|
+
async function pollAuthSession(sessionId) {
|
|
50
|
+
const baseUrl = (0, env_1.envString)('CXGRD_AUTH_BASE_URL', 'https://cxgrd.com').replace(/\/$/, '');
|
|
45
51
|
const url = `${baseUrl}/api/auth/cli/session/${sessionId}`;
|
|
46
52
|
const started = Date.now();
|
|
47
53
|
while (Date.now() - started < POLL_TIMEOUT_MS) {
|
|
@@ -69,7 +75,7 @@ export async function pollAuthSession(sessionId) {
|
|
|
69
75
|
}
|
|
70
76
|
const auth = {
|
|
71
77
|
token,
|
|
72
|
-
plan: normalizePlan(data.plan),
|
|
78
|
+
plan: (0, plans_1.normalizePlan)(data.plan),
|
|
73
79
|
email: data.email,
|
|
74
80
|
// these are only set for team/enterprise accounts
|
|
75
81
|
orgId: data.org_id ?? data.orgId,
|
|
@@ -83,11 +89,11 @@ export async function pollAuthSession(sessionId) {
|
|
|
83
89
|
}
|
|
84
90
|
throw new Error('Timed out waiting for browser login. Try again.');
|
|
85
91
|
}
|
|
86
|
-
|
|
87
|
-
return randomUUID();
|
|
92
|
+
function createCliSessionId() {
|
|
93
|
+
return (0, crypto_1.randomUUID)();
|
|
88
94
|
}
|
|
89
|
-
|
|
90
|
-
const baseUrl = envString('CXGRD_AUTH_BASE_URL', 'https://cxgrd.com').replace(/\/$/, '');
|
|
95
|
+
function buildCliAuthUrl(sessionId) {
|
|
96
|
+
const baseUrl = (0, env_1.envString)('CXGRD_AUTH_BASE_URL', 'https://cxgrd.com').replace(/\/$/, '');
|
|
91
97
|
return `${baseUrl}/auth/cli?session=${encodeURIComponent(sessionId)}`;
|
|
92
98
|
}
|
|
93
99
|
function sleep(ms) {
|
|
@@ -97,6 +103,6 @@ function normalizeExpiry(expiresAt) {
|
|
|
97
103
|
if (!expiresAt || Number.isNaN(expiresAt))
|
|
98
104
|
return undefined;
|
|
99
105
|
// accept either epoch seconds or milliseconds
|
|
100
|
-
return expiresAt <
|
|
106
|
+
return expiresAt < 1_000_000_000_000 ? expiresAt * 1000 : expiresAt;
|
|
101
107
|
}
|
|
102
108
|
//# sourceMappingURL=auth-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/auth-store.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readAuth = readAuth;
|
|
4
|
+
exports.writeAuth = writeAuth;
|
|
5
|
+
exports.clearAuth = clearAuth;
|
|
6
|
+
exports.getAuthPath = getAuthPath;
|
|
7
|
+
const promises_1 = require("fs/promises");
|
|
8
|
+
const os_1 = require("os");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const plans_1 = require("./plans");
|
|
11
|
+
const AUTH_DIR = (0, path_1.join)((0, os_1.homedir)(), '.cg');
|
|
12
|
+
const AUTH_PATH = (0, path_1.join)(AUTH_DIR, 'auth.json');
|
|
13
|
+
async function readAuth() {
|
|
8
14
|
try {
|
|
9
|
-
const raw = await readFile(AUTH_PATH, 'utf-8');
|
|
15
|
+
const raw = await (0, promises_1.readFile)(AUTH_PATH, 'utf-8');
|
|
10
16
|
const data = JSON.parse(raw);
|
|
11
17
|
if (!data.token)
|
|
12
18
|
return null;
|
|
@@ -14,31 +20,31 @@ export async function readAuth() {
|
|
|
14
20
|
if (expiresAt && Date.now() > expiresAt) {
|
|
15
21
|
return null;
|
|
16
22
|
}
|
|
17
|
-
return { ...data, plan: normalizePlan(data.plan), expiresAt };
|
|
23
|
+
return { ...data, plan: (0, plans_1.normalizePlan)(data.plan), expiresAt };
|
|
18
24
|
}
|
|
19
25
|
catch {
|
|
20
26
|
return null;
|
|
21
27
|
}
|
|
22
28
|
}
|
|
23
|
-
|
|
24
|
-
await mkdir(AUTH_DIR, { recursive: true });
|
|
25
|
-
await writeFile(AUTH_PATH, JSON.stringify(auth, null, 2), 'utf-8');
|
|
29
|
+
async function writeAuth(auth) {
|
|
30
|
+
await (0, promises_1.mkdir)(AUTH_DIR, { recursive: true });
|
|
31
|
+
await (0, promises_1.writeFile)(AUTH_PATH, JSON.stringify(auth, null, 2), 'utf-8');
|
|
26
32
|
}
|
|
27
|
-
|
|
33
|
+
async function clearAuth() {
|
|
28
34
|
try {
|
|
29
|
-
await unlink(AUTH_PATH);
|
|
35
|
+
await (0, promises_1.unlink)(AUTH_PATH);
|
|
30
36
|
}
|
|
31
37
|
catch {
|
|
32
38
|
// already cleared
|
|
33
39
|
}
|
|
34
40
|
}
|
|
35
|
-
|
|
41
|
+
function getAuthPath() {
|
|
36
42
|
return AUTH_PATH;
|
|
37
43
|
}
|
|
38
44
|
function normalizeExpiry(expiresAt) {
|
|
39
45
|
if (!expiresAt || Number.isNaN(expiresAt)) {
|
|
40
46
|
return undefined;
|
|
41
47
|
}
|
|
42
|
-
return expiresAt <
|
|
48
|
+
return expiresAt < 1_000_000_000_000 ? expiresAt * 1000 : expiresAt;
|
|
43
49
|
}
|
|
44
50
|
//# sourceMappingURL=auth-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../src/auth/auth-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../src/auth/auth-store.ts"],"names":[],"mappings":";;AAqBA,4BAaC;AAED,8BAGC;AAED,8BAMC;AAED,kCAEC;AAnDD,0CAAiE;AACjE,2BAA6B;AAC7B,+BAA4B;AAE5B,mCAAwC;AAcxC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,KAAK,CAAC,CAAC;AACxC,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAEvC,KAAK,UAAU,QAAQ;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAA,qBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,IAAgB;IAC9C,MAAM,IAAA,gBAAK,EAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,IAAA,oBAAS,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAEM,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC;QACH,MAAM,IAAA,iBAAM,EAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;AACH,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,SAA6B;IACpD,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC"}
|
|
@@ -1,42 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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.TeamRequiredError = exports.ProRequiredError = void 0;
|
|
7
|
+
exports.requireProFeature = requireProFeature;
|
|
8
|
+
exports.requireTeamFeature = requireTeamFeature;
|
|
9
|
+
exports.printSessionStatus = printSessionStatus;
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const plans_1 = require("./plans");
|
|
12
|
+
const auth_session_1 = require("./auth-session");
|
|
13
|
+
class ProRequiredError extends Error {
|
|
14
|
+
feature;
|
|
5
15
|
constructor(message, feature) {
|
|
6
16
|
super(message);
|
|
7
17
|
this.feature = feature;
|
|
8
18
|
this.name = 'ProRequiredError';
|
|
9
19
|
}
|
|
10
20
|
}
|
|
11
|
-
|
|
21
|
+
exports.ProRequiredError = ProRequiredError;
|
|
22
|
+
class TeamRequiredError extends Error {
|
|
23
|
+
feature;
|
|
12
24
|
constructor(message, feature) {
|
|
13
25
|
super(message);
|
|
14
26
|
this.feature = feature;
|
|
15
27
|
this.name = 'TeamRequiredError';
|
|
16
28
|
}
|
|
17
29
|
}
|
|
18
|
-
|
|
19
|
-
|
|
30
|
+
exports.TeamRequiredError = TeamRequiredError;
|
|
31
|
+
async function requireProFeature(feature) {
|
|
32
|
+
const session = await (0, auth_session_1.resolveActiveSession)();
|
|
20
33
|
if (!session) {
|
|
21
34
|
throw new ProRequiredError(`This feature requires a Pro, Team, or Enterprise plan.\n` +
|
|
22
|
-
` Run ${
|
|
35
|
+
` Run ${chalk_1.default.cyan('cxgrd auth login')} or visit https://cxgrd.com/pricing\n` +
|
|
23
36
|
` Local dev: set CXGRD_DEV_PLAN=pro in .env (see .env.example)`, feature);
|
|
24
37
|
}
|
|
25
|
-
if (!planIncludesFeature(session.plan, feature)) {
|
|
26
|
-
throw new ProRequiredError(`Your plan (${planDisplayName(session.plan)}) does not include this feature.\n` +
|
|
38
|
+
if (!(0, plans_1.planIncludesFeature)(session.plan, feature)) {
|
|
39
|
+
throw new ProRequiredError(`Your plan (${(0, plans_1.planDisplayName)(session.plan)}) does not include this feature.\n` +
|
|
27
40
|
` Upgrade at https://cxgrd.com/pricing`, feature);
|
|
28
41
|
}
|
|
29
42
|
return session;
|
|
30
43
|
}
|
|
31
|
-
|
|
32
|
-
const session = await resolveActiveSession();
|
|
44
|
+
async function requireTeamFeature(feature) {
|
|
45
|
+
const session = await (0, auth_session_1.resolveActiveSession)();
|
|
33
46
|
if (!session) {
|
|
34
47
|
throw new TeamRequiredError(`This feature requires Team or Enterprise.\n` +
|
|
35
|
-
` Run ${
|
|
48
|
+
` Run ${chalk_1.default.cyan('cxgrd auth login')} after upgrading\n` +
|
|
36
49
|
` Local dev: CXGRD_DEV_PLAN=team CXGRD_DEV_ORG_ID=org_dev CXGRD_DEV_CLOUD=1`, feature);
|
|
37
50
|
}
|
|
38
|
-
if (!planIncludesFeature(session.plan, feature)) {
|
|
39
|
-
throw new TeamRequiredError(`Your plan (${planDisplayName(session.plan)}) does not include team features.\n` +
|
|
51
|
+
if (!(0, plans_1.planIncludesFeature)(session.plan, feature)) {
|
|
52
|
+
throw new TeamRequiredError(`Your plan (${(0, plans_1.planDisplayName)(session.plan)}) does not include team features.\n` +
|
|
40
53
|
` Upgrade at https://cxgrd.com/pricing`, feature);
|
|
41
54
|
}
|
|
42
55
|
if (!session.orgId) {
|
|
@@ -44,19 +57,19 @@ export async function requireTeamFeature(feature) {
|
|
|
44
57
|
}
|
|
45
58
|
return session;
|
|
46
59
|
}
|
|
47
|
-
|
|
60
|
+
function printSessionStatus(session) {
|
|
48
61
|
if (!session) {
|
|
49
|
-
console.log(
|
|
62
|
+
console.log(chalk_1.default.gray(' Not signed in (Free tier — scan, input, check available locally)'));
|
|
50
63
|
return;
|
|
51
64
|
}
|
|
52
65
|
const src = session.source === 'dev_override'
|
|
53
|
-
?
|
|
66
|
+
? chalk_1.default.yellow(' (dev override via CXGRD_DEV_PLAN)')
|
|
54
67
|
: '';
|
|
55
|
-
console.log(
|
|
68
|
+
console.log(chalk_1.default.green(` Signed in as ${session.email || 'user'} — ${(0, plans_1.planDisplayName)(session.plan)} plan`) +
|
|
56
69
|
src);
|
|
57
|
-
console.log(
|
|
58
|
-
if (isTeamOrEnterprise(session.plan)) {
|
|
59
|
-
console.log(
|
|
70
|
+
console.log(chalk_1.default.gray(` Prompt: ${(0, plans_1.planIncludesFeature)(session.plan, 'prompt') ? 'yes' : 'no'}`));
|
|
71
|
+
if ((0, plans_1.isTeamOrEnterprise)(session.plan)) {
|
|
72
|
+
console.log(chalk_1.default.gray(` Org: ${session.orgName || session.orgId || '—'} · role: ${session.role} · sync: enabled`));
|
|
60
73
|
}
|
|
61
74
|
}
|
|
62
75
|
//# sourceMappingURL=entitlements.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entitlements.js","sourceRoot":"","sources":["../../src/auth/entitlements.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entitlements.js","sourceRoot":"","sources":["../../src/auth/entitlements.ts"],"names":[],"mappings":";;;;;;AA8BA,8CAqBC;AAED,gDA4BC;AAED,gDAwBC;AA3GD,kDAA0B;AAC1B,mCAMiB;AACjB,iDAA0E;AAE1E,MAAa,gBAAiB,SAAQ,KAAK;IAGvB;IAFlB,YACE,OAAe,EACC,OAAmB;QAEnC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,YAAO,GAAP,OAAO,CAAY;QAGnC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AARD,4CAQC;AAED,MAAa,iBAAkB,SAAQ,KAAK;IAGxB;IAFlB,YACE,OAAe,EACC,OAAoB;QAEpC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,YAAO,GAAP,OAAO,CAAa;QAGpC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AARD,8CAQC;AAEM,KAAK,UAAU,iBAAiB,CAAC,OAAmB;IACzD,MAAM,OAAO,GAAG,MAAM,IAAA,mCAAoB,GAAE,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,gBAAgB,CACxB,0DAA0D;YACxD,SAAS,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,uCAAuC;YAC9E,gEAAgE,EAClE,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAA,2BAAmB,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,gBAAgB,CACxB,cAAc,IAAA,uBAAe,EAAC,OAAO,CAAC,IAAI,CAAC,oCAAoC;YAC7E,wCAAwC,EAC1C,OAAO,CACR,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,OAAoB;IAC3D,MAAM,OAAO,GAAG,MAAM,IAAA,mCAAoB,GAAE,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CACzB,6CAA6C;YAC3C,SAAS,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,oBAAoB;YAC3D,6EAA6E,EAC/E,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAA,2BAAmB,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,iBAAiB,CACzB,cAAc,IAAA,uBAAe,EAAC,OAAO,CAAC,IAAI,CAAC,qCAAqC;YAC9E,wCAAwC,EAC1C,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,iBAAiB,CACzB,2FAA2F,EAC3F,OAAO,CACR,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAA6B;IAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GACP,OAAO,CAAC,MAAM,KAAK,cAAc;QAC/B,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC;QACpD,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,kBAAkB,OAAO,CAAC,KAAK,IAAI,MAAM,MAAM,IAAA,uBAAe,EAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9F,GAAG,CACN,CAAC;IACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,aAAa,IAAA,2BAAmB,EAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACtF,CAAC;IACF,IAAI,IAAA,0BAAkB,EAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,UAAU,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,YAAY,OAAO,CAAC,IAAI,kBAAkB,CAC5F,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openBrowser = openBrowser;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
function openBrowser(url) {
|
|
3
6
|
const platform = process.platform;
|
|
4
7
|
let command;
|
|
5
8
|
if (platform === 'win32') {
|
|
@@ -11,7 +14,7 @@ export function openBrowser(url) {
|
|
|
11
14
|
else {
|
|
12
15
|
command = `xdg-open "${url}"`;
|
|
13
16
|
}
|
|
14
|
-
exec(command, (err) => {
|
|
17
|
+
(0, child_process_1.exec)(command, (err) => {
|
|
15
18
|
if (err) {
|
|
16
19
|
console.log(` Open this URL in your browser:\n ${url}`);
|
|
17
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/auth/open-browser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/auth/open-browser.ts"],"names":[],"mappings":";;AAEA,kCAiBC;AAnBD,iDAAqC;AAErC,SAAgB,WAAW,CAAC,GAAW;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,OAAe,CAAC;IAEpB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,aAAa,GAAG,GAAG,CAAC;IAChC,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,aAAa,GAAG,GAAG,CAAC;IAChC,CAAC;IAED,IAAA,oBAAI,EAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACpB,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/auth/plans.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TEAM_FEATURES = exports.PRO_FEATURES = void 0;
|
|
4
|
+
exports.normalizePlan = normalizePlan;
|
|
5
|
+
exports.planIncludesFeature = planIncludesFeature;
|
|
6
|
+
exports.isTeamOrEnterprise = isTeamOrEnterprise;
|
|
7
|
+
exports.planDisplayName = planDisplayName;
|
|
8
|
+
exports.PRO_FEATURES = [
|
|
2
9
|
'prompt',
|
|
3
10
|
'repo_memory',
|
|
4
11
|
'cloud_sync',
|
|
@@ -6,15 +13,15 @@ export const PRO_FEATURES = [
|
|
|
6
13
|
'api_access',
|
|
7
14
|
'priority_support',
|
|
8
15
|
];
|
|
9
|
-
|
|
10
|
-
|
|
16
|
+
exports.TEAM_FEATURES = ['team_cloud', 'org_policies', 'audit_events'];
|
|
17
|
+
function normalizePlan(plan) {
|
|
11
18
|
const p = (plan || 'free').toLowerCase();
|
|
12
19
|
if (p === 'pro' || p === 'team' || p === 'enterprise') {
|
|
13
20
|
return p;
|
|
14
21
|
}
|
|
15
22
|
return 'free';
|
|
16
23
|
}
|
|
17
|
-
|
|
24
|
+
function planIncludesFeature(plan, feature) {
|
|
18
25
|
if (feature === 'prompt' ||
|
|
19
26
|
feature === 'repo_memory' ||
|
|
20
27
|
feature === 'cloud_sync' ||
|
|
@@ -28,10 +35,10 @@ export function planIncludesFeature(plan, feature) {
|
|
|
28
35
|
}
|
|
29
36
|
return false;
|
|
30
37
|
}
|
|
31
|
-
|
|
38
|
+
function isTeamOrEnterprise(plan) {
|
|
32
39
|
return plan === 'team' || plan === 'enterprise';
|
|
33
40
|
}
|
|
34
|
-
|
|
41
|
+
function planDisplayName(plan) {
|
|
35
42
|
return plan.charAt(0).toUpperCase() + plan.slice(1);
|
|
36
43
|
}
|
|
37
44
|
//# sourceMappingURL=plans.js.map
|
package/dist/auth/plans.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../src/auth/plans.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../src/auth/plans.ts"],"names":[],"mappings":";;;AAeA,sCAMC;AAED,kDAkBC;AAED,gDAEC;AAED,0CAEC;AA/CY,QAAA,YAAY,GAAG;IAC1B,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,kBAAkB;CACV,CAAC;AAGE,QAAA,aAAa,GAAG,CAAC,YAAY,EAAE,cAAc,EAAE,cAAc,CAAU,CAAC;AAGrF,SAAgB,aAAa,CAAC,IAAwB;IACpD,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC;QACtD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,mBAAmB,CACjC,IAAsB,EACtB,OAAiC;IAEjC,IACE,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,aAAa;QACzB,OAAO,KAAK,YAAY;QACxB,OAAO,KAAK,mBAAmB;QAC/B,OAAO,KAAK,YAAY;QACxB,OAAO,KAAK,kBAAkB,EAC9B,CAAC;QACD,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,YAAY,CAAC;IACpE,CAAC;IACD,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,cAAc,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;QACzF,OAAO,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,YAAY,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAsB;IACvD,OAAO,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,YAAY,CAAC;AAClD,CAAC;AAED,SAAgB,eAAe,CAAC,IAAsB;IACpD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/auth/plans.test.js
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
|
+
const plans_1 = require("./plans");
|
|
9
|
+
(0, node_test_1.describe)('plans', () => {
|
|
10
|
+
(0, node_test_1.it)('enables prompt for pro and above', () => {
|
|
11
|
+
strict_1.default.equal((0, plans_1.planIncludesFeature)('pro', 'prompt'), true);
|
|
12
|
+
strict_1.default.equal((0, plans_1.planIncludesFeature)('pro', 'api_access'), true);
|
|
13
|
+
strict_1.default.equal((0, plans_1.planIncludesFeature)('pro', 'advanced_analysis'), true);
|
|
14
|
+
strict_1.default.equal((0, plans_1.planIncludesFeature)('team', 'prompt'), true);
|
|
15
|
+
strict_1.default.equal((0, plans_1.planIncludesFeature)('free', 'prompt'), false);
|
|
11
16
|
});
|
|
12
|
-
it('enables team cloud only for team and enterprise', () => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
(0, node_test_1.it)('enables team cloud only for team and enterprise', () => {
|
|
18
|
+
strict_1.default.equal((0, plans_1.planIncludesFeature)('team', 'team_cloud'), true);
|
|
19
|
+
strict_1.default.equal((0, plans_1.planIncludesFeature)('pro', 'team_cloud'), false);
|
|
20
|
+
strict_1.default.equal((0, plans_1.planIncludesFeature)('enterprise', 'audit_events'), true);
|
|
16
21
|
});
|
|
17
|
-
it('normalizes plan names case-insensitively', () => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
(0, node_test_1.it)('normalizes plan names case-insensitively', () => {
|
|
23
|
+
strict_1.default.equal((0, plans_1.normalizePlan)('invalid'), 'free');
|
|
24
|
+
strict_1.default.equal((0, plans_1.normalizePlan)('PRO'), 'pro');
|
|
25
|
+
strict_1.default.equal((0, plans_1.normalizePlan)('Team'), 'team');
|
|
21
26
|
});
|
|
22
27
|
});
|
|
23
28
|
//# sourceMappingURL=plans.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.test.js","sourceRoot":"","sources":["../../src/auth/plans.test.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"plans.test.js","sourceRoot":"","sources":["../../src/auth/plans.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAyC;AACzC,gEAAwC;AACxC,mCAA6D;AAE7D,IAAA,oBAAQ,EAAC,OAAO,EAAE,GAAG,EAAE;IACrB,IAAA,cAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,gBAAM,CAAC,KAAK,CAAC,IAAA,2BAAmB,EAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QACzD,gBAAM,CAAC,KAAK,CAAC,IAAA,2BAAmB,EAAC,KAAK,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,gBAAM,CAAC,KAAK,CAAC,IAAA,2BAAmB,EAAC,KAAK,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;QACpE,gBAAM,CAAC,KAAK,CAAC,IAAA,2BAAmB,EAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1D,gBAAM,CAAC,KAAK,CAAC,IAAA,2BAAmB,EAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,gBAAM,CAAC,KAAK,CAAC,IAAA,2BAAmB,EAAC,MAAM,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9D,gBAAM,CAAC,KAAK,CAAC,IAAA,2BAAmB,EAAC,KAAK,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9D,gBAAM,CAAC,KAAK,CAAC,IAAA,2BAAmB,EAAC,YAAY,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,gBAAM,CAAC,KAAK,CAAC,IAAA,qBAAa,EAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/C,gBAAM,CAAC,KAAK,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1C,gBAAM,CAAC,KAAK,CAAC,IAAA,qBAAa,EAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|