@polargrid/cli 0.1.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 +129 -0
- package/dist/bin/polargrid.d.ts +3 -0
- package/dist/bin/polargrid.d.ts.map +1 -0
- package/dist/bin/polargrid.js +48 -0
- package/dist/bin/polargrid.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +88 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/keys.d.ts +3 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +134 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/login.d.ts +5 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +87 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/orgs.d.ts +3 -0
- package/dist/commands/orgs.d.ts.map +1 -0
- package/dist/commands/orgs.js +119 -0
- package/dist/commands/orgs.js.map +1 -0
- package/dist/commands/regions.d.ts +3 -0
- package/dist/commands/regions.d.ts.map +1 -0
- package/dist/commands/regions.js +108 -0
- package/dist/commands/regions.js.map +1 -0
- package/dist/commands/test.d.ts +3 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +186 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +40 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +237 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/auth.d.ts +19 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +308 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/config.d.ts +27 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +114 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/output.d.ts +34 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +214 -0
- package/dist/lib/output.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { homedir } from 'os';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync } from 'fs';
|
|
4
|
+
const CONFIG_DIR = join(homedir(), '.polargrid');
|
|
5
|
+
const CREDENTIALS_FILE = join(CONFIG_DIR, 'credentials.json');
|
|
6
|
+
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
7
|
+
// Default Supabase config - these should match the portal's env vars
|
|
8
|
+
const DEFAULT_CONFIG = {
|
|
9
|
+
output_format: 'table',
|
|
10
|
+
supabase_url: process.env.POLARGRID_SUPABASE_URL || 'https://your-project.supabase.co',
|
|
11
|
+
supabase_anon_key: process.env.POLARGRID_SUPABASE_ANON_KEY || '',
|
|
12
|
+
};
|
|
13
|
+
function ensureConfigDir() {
|
|
14
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
15
|
+
mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// CREDENTIALS
|
|
20
|
+
// ============================================================================
|
|
21
|
+
export function getCredentials() {
|
|
22
|
+
try {
|
|
23
|
+
if (!existsSync(CREDENTIALS_FILE)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const data = readFileSync(CREDENTIALS_FILE, 'utf-8');
|
|
27
|
+
return JSON.parse(data);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function saveCredentials(credentials) {
|
|
34
|
+
ensureConfigDir();
|
|
35
|
+
writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2), { mode: 0o600 });
|
|
36
|
+
// Ensure file is only readable by owner
|
|
37
|
+
chmodSync(CREDENTIALS_FILE, 0o600);
|
|
38
|
+
}
|
|
39
|
+
export function clearCredentials() {
|
|
40
|
+
try {
|
|
41
|
+
if (existsSync(CREDENTIALS_FILE)) {
|
|
42
|
+
writeFileSync(CREDENTIALS_FILE, '{}', { mode: 0o600 });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Ignore errors
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function isLoggedIn() {
|
|
50
|
+
const creds = getCredentials();
|
|
51
|
+
if (!creds || !creds.access_token) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
// Check if token is expired
|
|
55
|
+
if (creds.expires_at) {
|
|
56
|
+
const expiresAt = new Date(creds.expires_at);
|
|
57
|
+
if (expiresAt < new Date()) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
export function updateCurrentOrg(orgId) {
|
|
64
|
+
const creds = getCredentials();
|
|
65
|
+
if (creds) {
|
|
66
|
+
creds.current_org_id = orgId;
|
|
67
|
+
saveCredentials(creds);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// CONFIG
|
|
72
|
+
// ============================================================================
|
|
73
|
+
export function getConfig() {
|
|
74
|
+
try {
|
|
75
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
76
|
+
return { ...DEFAULT_CONFIG };
|
|
77
|
+
}
|
|
78
|
+
const data = readFileSync(CONFIG_FILE, 'utf-8');
|
|
79
|
+
const config = JSON.parse(data);
|
|
80
|
+
return { ...DEFAULT_CONFIG, ...config };
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return { ...DEFAULT_CONFIG };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function saveConfig(config) {
|
|
87
|
+
ensureConfigDir();
|
|
88
|
+
const existingConfig = getConfig();
|
|
89
|
+
const newConfig = { ...existingConfig, ...config };
|
|
90
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(newConfig, null, 2));
|
|
91
|
+
}
|
|
92
|
+
export function getConfigValue(key) {
|
|
93
|
+
const config = getConfig();
|
|
94
|
+
return config[key];
|
|
95
|
+
}
|
|
96
|
+
export function setConfigValue(key, value) {
|
|
97
|
+
const config = getConfig();
|
|
98
|
+
config[key] = value;
|
|
99
|
+
saveConfig(config);
|
|
100
|
+
}
|
|
101
|
+
export function deleteConfigValue(key) {
|
|
102
|
+
const config = getConfig();
|
|
103
|
+
delete config[key];
|
|
104
|
+
saveConfig(config);
|
|
105
|
+
}
|
|
106
|
+
export function listConfig() {
|
|
107
|
+
const config = getConfig();
|
|
108
|
+
return {
|
|
109
|
+
default_region: config.default_region,
|
|
110
|
+
output_format: config.output_format,
|
|
111
|
+
api_base_url: config.api_base_url,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type OutputFormat = 'json' | 'table' | 'plain';
|
|
2
|
+
export declare function getOutputFormat(): OutputFormat;
|
|
3
|
+
export declare function formatOutput(data: unknown, format?: OutputFormat): string;
|
|
4
|
+
export interface OrgRow {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
role: string;
|
|
9
|
+
plan: string;
|
|
10
|
+
current: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function formatOrgsTable(orgs: OrgRow[]): string;
|
|
13
|
+
export interface KeyRow {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
preview: string;
|
|
17
|
+
permissions: string;
|
|
18
|
+
created: string;
|
|
19
|
+
lastUsed: string | null;
|
|
20
|
+
}
|
|
21
|
+
export declare function formatKeysTable(keys: KeyRow[]): string;
|
|
22
|
+
export interface RegionRow {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
location: string;
|
|
26
|
+
latency: number | null;
|
|
27
|
+
status: 'online' | 'offline' | 'degraded';
|
|
28
|
+
}
|
|
29
|
+
export declare function formatRegionsTable(regions: RegionRow[]): string;
|
|
30
|
+
export declare function success(message: string): void;
|
|
31
|
+
export declare function error(message: string): void;
|
|
32
|
+
export declare function warn(message: string): void;
|
|
33
|
+
export declare function info(message: string): void;
|
|
34
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtD,wBAAgB,eAAe,IAAI,YAAY,CAG9C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAYzE;AA2ED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CA4BtD;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAsCtD;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CAC3C;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAkC/D;AAkCD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getBorderCharacters, table } from 'table';
|
|
3
|
+
import { getConfig } from './config.js';
|
|
4
|
+
export function getOutputFormat() {
|
|
5
|
+
const config = getConfig();
|
|
6
|
+
return config.output_format || 'table';
|
|
7
|
+
}
|
|
8
|
+
export function formatOutput(data, format) {
|
|
9
|
+
const outputFormat = format || getOutputFormat();
|
|
10
|
+
switch (outputFormat) {
|
|
11
|
+
case 'json':
|
|
12
|
+
return JSON.stringify(data, null, 2);
|
|
13
|
+
case 'plain':
|
|
14
|
+
return formatPlain(data);
|
|
15
|
+
case 'table':
|
|
16
|
+
default:
|
|
17
|
+
return formatTable(data);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function formatPlain(data) {
|
|
21
|
+
if (Array.isArray(data)) {
|
|
22
|
+
return data.map(item => formatPlainItem(item)).join('\n');
|
|
23
|
+
}
|
|
24
|
+
return formatPlainItem(data);
|
|
25
|
+
}
|
|
26
|
+
function formatPlainItem(item) {
|
|
27
|
+
if (typeof item === 'string') {
|
|
28
|
+
return item;
|
|
29
|
+
}
|
|
30
|
+
if (typeof item === 'object' && item !== null) {
|
|
31
|
+
return Object.entries(item)
|
|
32
|
+
.map(([key, value]) => `${key}: ${value}`)
|
|
33
|
+
.join('\n');
|
|
34
|
+
}
|
|
35
|
+
return String(item);
|
|
36
|
+
}
|
|
37
|
+
function formatTable(data) {
|
|
38
|
+
if (!Array.isArray(data) || data.length === 0) {
|
|
39
|
+
if (typeof data === 'object' && data !== null) {
|
|
40
|
+
// Single object - format as key-value table
|
|
41
|
+
const rows = Object.entries(data).map(([key, value]) => [
|
|
42
|
+
chalk.cyan(key),
|
|
43
|
+
String(value ?? ''),
|
|
44
|
+
]);
|
|
45
|
+
return table(rows, {
|
|
46
|
+
border: getBorderCharacters('norc'),
|
|
47
|
+
columnDefault: { paddingLeft: 1, paddingRight: 1 },
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return String(data);
|
|
51
|
+
}
|
|
52
|
+
// Array of objects - format as table with headers
|
|
53
|
+
const headers = Object.keys(data[0]);
|
|
54
|
+
const rows = [
|
|
55
|
+
headers.map(h => chalk.bold.cyan(h)),
|
|
56
|
+
...data.map(item => headers.map(h => {
|
|
57
|
+
const value = item[h];
|
|
58
|
+
return formatValue(value);
|
|
59
|
+
})),
|
|
60
|
+
];
|
|
61
|
+
return table(rows, {
|
|
62
|
+
border: getBorderCharacters('norc'),
|
|
63
|
+
columnDefault: { paddingLeft: 1, paddingRight: 1 },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function formatValue(value) {
|
|
67
|
+
if (value === null || value === undefined) {
|
|
68
|
+
return chalk.dim('-');
|
|
69
|
+
}
|
|
70
|
+
if (typeof value === 'boolean') {
|
|
71
|
+
return value ? chalk.green('✓') : chalk.red('✗');
|
|
72
|
+
}
|
|
73
|
+
if (value instanceof Date) {
|
|
74
|
+
return value.toISOString();
|
|
75
|
+
}
|
|
76
|
+
if (typeof value === 'object') {
|
|
77
|
+
return JSON.stringify(value);
|
|
78
|
+
}
|
|
79
|
+
return String(value);
|
|
80
|
+
}
|
|
81
|
+
export function formatOrgsTable(orgs) {
|
|
82
|
+
const format = getOutputFormat();
|
|
83
|
+
if (format === 'json') {
|
|
84
|
+
return JSON.stringify(orgs, null, 2);
|
|
85
|
+
}
|
|
86
|
+
if (format === 'plain') {
|
|
87
|
+
return orgs
|
|
88
|
+
.map(o => `${o.current ? '* ' : ' '}${o.name} (${o.id}) - ${o.role}`)
|
|
89
|
+
.join('\n');
|
|
90
|
+
}
|
|
91
|
+
const rows = [
|
|
92
|
+
['', chalk.bold.cyan('Name'), chalk.bold.cyan('ID'), chalk.bold.cyan('Role'), chalk.bold.cyan('Plan')],
|
|
93
|
+
...orgs.map(o => [
|
|
94
|
+
o.current ? chalk.green('→') : ' ',
|
|
95
|
+
o.name,
|
|
96
|
+
o.id,
|
|
97
|
+
o.role,
|
|
98
|
+
o.plan,
|
|
99
|
+
]),
|
|
100
|
+
];
|
|
101
|
+
return table(rows, {
|
|
102
|
+
border: getBorderCharacters('norc'),
|
|
103
|
+
columnDefault: { paddingLeft: 1, paddingRight: 1 },
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
export function formatKeysTable(keys) {
|
|
107
|
+
const format = getOutputFormat();
|
|
108
|
+
if (format === 'json') {
|
|
109
|
+
return JSON.stringify(keys, null, 2);
|
|
110
|
+
}
|
|
111
|
+
if (format === 'plain') {
|
|
112
|
+
return keys
|
|
113
|
+
.map(k => `${k.id}: ${k.name} (${k.preview}...)`)
|
|
114
|
+
.join('\n');
|
|
115
|
+
}
|
|
116
|
+
if (keys.length === 0) {
|
|
117
|
+
return chalk.dim('No API keys found.');
|
|
118
|
+
}
|
|
119
|
+
const rows = [
|
|
120
|
+
[
|
|
121
|
+
chalk.bold.cyan('ID'),
|
|
122
|
+
chalk.bold.cyan('Name'),
|
|
123
|
+
chalk.bold.cyan('Key Preview'),
|
|
124
|
+
chalk.bold.cyan('Permissions'),
|
|
125
|
+
chalk.bold.cyan('Created'),
|
|
126
|
+
],
|
|
127
|
+
...keys.map(k => [
|
|
128
|
+
k.id,
|
|
129
|
+
k.name,
|
|
130
|
+
k.preview + '...',
|
|
131
|
+
k.permissions,
|
|
132
|
+
formatDate(k.created),
|
|
133
|
+
]),
|
|
134
|
+
];
|
|
135
|
+
return table(rows, {
|
|
136
|
+
border: getBorderCharacters('norc'),
|
|
137
|
+
columnDefault: { paddingLeft: 1, paddingRight: 1 },
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
export function formatRegionsTable(regions) {
|
|
141
|
+
const format = getOutputFormat();
|
|
142
|
+
if (format === 'json') {
|
|
143
|
+
return JSON.stringify(regions, null, 2);
|
|
144
|
+
}
|
|
145
|
+
if (format === 'plain') {
|
|
146
|
+
return regions
|
|
147
|
+
.map(r => `${r.id}: ${r.name} (${r.location}) - ${r.latency ? r.latency + 'ms' : 'N/A'}`)
|
|
148
|
+
.join('\n');
|
|
149
|
+
}
|
|
150
|
+
const rows = [
|
|
151
|
+
[
|
|
152
|
+
chalk.bold.cyan('ID'),
|
|
153
|
+
chalk.bold.cyan('Name'),
|
|
154
|
+
chalk.bold.cyan('Location'),
|
|
155
|
+
chalk.bold.cyan('Latency'),
|
|
156
|
+
chalk.bold.cyan('Status'),
|
|
157
|
+
],
|
|
158
|
+
...regions.map(r => [
|
|
159
|
+
r.id,
|
|
160
|
+
r.name,
|
|
161
|
+
r.location,
|
|
162
|
+
r.latency ? `${r.latency}ms` : chalk.dim('N/A'),
|
|
163
|
+
formatStatus(r.status),
|
|
164
|
+
]),
|
|
165
|
+
];
|
|
166
|
+
return table(rows, {
|
|
167
|
+
border: getBorderCharacters('norc'),
|
|
168
|
+
columnDefault: { paddingLeft: 1, paddingRight: 1 },
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// HELPERS
|
|
173
|
+
// ============================================================================
|
|
174
|
+
function formatDate(dateStr) {
|
|
175
|
+
const date = new Date(dateStr);
|
|
176
|
+
const now = new Date();
|
|
177
|
+
const diffMs = now.getTime() - date.getTime();
|
|
178
|
+
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
179
|
+
if (diffDays === 0) {
|
|
180
|
+
return 'Today';
|
|
181
|
+
}
|
|
182
|
+
else if (diffDays === 1) {
|
|
183
|
+
return 'Yesterday';
|
|
184
|
+
}
|
|
185
|
+
else if (diffDays < 7) {
|
|
186
|
+
return `${diffDays} days ago`;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
return date.toLocaleDateString();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function formatStatus(status) {
|
|
193
|
+
switch (status) {
|
|
194
|
+
case 'online':
|
|
195
|
+
return chalk.green('● Online');
|
|
196
|
+
case 'offline':
|
|
197
|
+
return chalk.red('● Offline');
|
|
198
|
+
case 'degraded':
|
|
199
|
+
return chalk.yellow('● Degraded');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export function success(message) {
|
|
203
|
+
console.log(chalk.green('✓'), message);
|
|
204
|
+
}
|
|
205
|
+
export function error(message) {
|
|
206
|
+
console.error(chalk.red('✗'), message);
|
|
207
|
+
}
|
|
208
|
+
export function warn(message) {
|
|
209
|
+
console.log(chalk.yellow('⚠'), message);
|
|
210
|
+
}
|
|
211
|
+
export function info(message) {
|
|
212
|
+
console.log(chalk.blue('ℹ'), message);
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@polargrid/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "PolarGrid CLI - Command-line interface for PolarGrid Edge AI Infrastructure",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"polargrid": "./dist/bin/polargrid.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"start": "node dist/bin/polargrid.js",
|
|
15
|
+
"test": "vitest",
|
|
16
|
+
"lint": "eslint src/",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"polargrid",
|
|
21
|
+
"cli",
|
|
22
|
+
"ai",
|
|
23
|
+
"inference",
|
|
24
|
+
"edge",
|
|
25
|
+
"gpu"
|
|
26
|
+
],
|
|
27
|
+
"author": "PolarGrid",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@supabase/supabase-js": "^2.47.0",
|
|
31
|
+
"chalk": "^5.3.0",
|
|
32
|
+
"commander": "^12.1.0",
|
|
33
|
+
"open": "^10.1.0",
|
|
34
|
+
"ora": "^8.1.0",
|
|
35
|
+
"table": "^6.8.2"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^22.10.0",
|
|
39
|
+
"typescript": "^5.7.0",
|
|
40
|
+
"vitest": "^2.1.0"
|
|
41
|
+
},
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=18.0.0"
|
|
44
|
+
},
|
|
45
|
+
"files": [
|
|
46
|
+
"dist"
|
|
47
|
+
],
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "https://github.com/polargrid/polargrid-ui.git",
|
|
51
|
+
"directory": "cli"
|
|
52
|
+
}
|
|
53
|
+
}
|