@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.
Files changed (50) hide show
  1. package/README.md +129 -0
  2. package/dist/bin/polargrid.d.ts +3 -0
  3. package/dist/bin/polargrid.d.ts.map +1 -0
  4. package/dist/bin/polargrid.js +48 -0
  5. package/dist/bin/polargrid.js.map +1 -0
  6. package/dist/commands/config.d.ts +3 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +88 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/keys.d.ts +3 -0
  11. package/dist/commands/keys.d.ts.map +1 -0
  12. package/dist/commands/keys.js +134 -0
  13. package/dist/commands/keys.js.map +1 -0
  14. package/dist/commands/login.d.ts +5 -0
  15. package/dist/commands/login.d.ts.map +1 -0
  16. package/dist/commands/login.js +87 -0
  17. package/dist/commands/login.js.map +1 -0
  18. package/dist/commands/orgs.d.ts +3 -0
  19. package/dist/commands/orgs.d.ts.map +1 -0
  20. package/dist/commands/orgs.js +119 -0
  21. package/dist/commands/orgs.js.map +1 -0
  22. package/dist/commands/regions.d.ts +3 -0
  23. package/dist/commands/regions.d.ts.map +1 -0
  24. package/dist/commands/regions.js +108 -0
  25. package/dist/commands/regions.js.map +1 -0
  26. package/dist/commands/test.d.ts +3 -0
  27. package/dist/commands/test.d.ts.map +1 -0
  28. package/dist/commands/test.js +186 -0
  29. package/dist/commands/test.js.map +1 -0
  30. package/dist/index.d.ts +5 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +6 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/lib/api.d.ts +40 -0
  35. package/dist/lib/api.d.ts.map +1 -0
  36. package/dist/lib/api.js +237 -0
  37. package/dist/lib/api.js.map +1 -0
  38. package/dist/lib/auth.d.ts +19 -0
  39. package/dist/lib/auth.d.ts.map +1 -0
  40. package/dist/lib/auth.js +308 -0
  41. package/dist/lib/auth.js.map +1 -0
  42. package/dist/lib/config.d.ts +27 -0
  43. package/dist/lib/config.d.ts.map +1 -0
  44. package/dist/lib/config.js +114 -0
  45. package/dist/lib/config.js.map +1 -0
  46. package/dist/lib/output.d.ts +34 -0
  47. package/dist/lib/output.d.ts.map +1 -0
  48. package/dist/lib/output.js +214 -0
  49. package/dist/lib/output.js.map +1 -0
  50. package/package.json +53 -0
@@ -0,0 +1,119 @@
1
+ import { Command } from 'commander';
2
+ import ora from 'ora';
3
+ import chalk from 'chalk';
4
+ import { isLoggedIn, updateCurrentOrg } from '../lib/config.js';
5
+ import { getCurrentUser, getUserOrganizations, getCurrentOrganization, switchOrganization } from '../lib/api.js';
6
+ import { formatOrgsTable, error } from '../lib/output.js';
7
+ export const orgsCommand = new Command('orgs')
8
+ .description('Manage organizations');
9
+ orgsCommand
10
+ .command('list')
11
+ .description('List organizations you belong to')
12
+ .action(async () => {
13
+ if (!isLoggedIn()) {
14
+ error('Not logged in. Run `polargrid login` first.');
15
+ process.exit(1);
16
+ }
17
+ const spinner = ora('Fetching organizations...').start();
18
+ try {
19
+ const user = await getCurrentUser();
20
+ if (!user) {
21
+ spinner.fail('Failed to get user info');
22
+ process.exit(1);
23
+ }
24
+ const orgs = await getUserOrganizations(user.id);
25
+ const currentOrg = await getCurrentOrganization(user.id);
26
+ spinner.stop();
27
+ if (orgs.length === 0) {
28
+ console.log(chalk.dim('\nNo organizations found.\n'));
29
+ return;
30
+ }
31
+ const rows = orgs.map(o => ({
32
+ id: o.organization.id,
33
+ name: o.organization.name,
34
+ slug: o.organization.slug,
35
+ role: o.role,
36
+ plan: o.organization.plan,
37
+ current: currentOrg?.id === o.organization.id,
38
+ }));
39
+ console.log();
40
+ console.log(formatOrgsTable(rows));
41
+ }
42
+ catch (err) {
43
+ spinner.fail(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);
44
+ process.exit(1);
45
+ }
46
+ });
47
+ orgsCommand
48
+ .command('switch <org_id>')
49
+ .description('Switch to a different organization')
50
+ .action(async (orgId) => {
51
+ if (!isLoggedIn()) {
52
+ error('Not logged in. Run `polargrid login` first.');
53
+ process.exit(1);
54
+ }
55
+ const spinner = ora('Switching organization...').start();
56
+ try {
57
+ const user = await getCurrentUser();
58
+ if (!user) {
59
+ spinner.fail('Failed to get user info');
60
+ process.exit(1);
61
+ }
62
+ // Support partial ID matching
63
+ const orgs = await getUserOrganizations(user.id);
64
+ const matchingOrg = orgs.find(o => o.organization.id === orgId ||
65
+ o.organization.id.startsWith(orgId) ||
66
+ o.organization.slug === orgId ||
67
+ o.organization.name.toLowerCase() === orgId.toLowerCase());
68
+ if (!matchingOrg) {
69
+ spinner.fail(`Organization not found: ${orgId}`);
70
+ console.log('\nRun `polargrid orgs list` to see available organizations.\n');
71
+ process.exit(1);
72
+ }
73
+ await switchOrganization(user.id, matchingOrg.organization.id);
74
+ // Also update local config
75
+ updateCurrentOrg(matchingOrg.organization.id);
76
+ spinner.succeed(`Switched to ${chalk.bold(matchingOrg.organization.name)}`);
77
+ }
78
+ catch (err) {
79
+ spinner.fail(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);
80
+ process.exit(1);
81
+ }
82
+ });
83
+ orgsCommand
84
+ .command('current')
85
+ .description('Show current organization')
86
+ .action(async () => {
87
+ if (!isLoggedIn()) {
88
+ error('Not logged in. Run `polargrid login` first.');
89
+ process.exit(1);
90
+ }
91
+ const spinner = ora('Fetching current organization...').start();
92
+ try {
93
+ const user = await getCurrentUser();
94
+ if (!user) {
95
+ spinner.fail('Failed to get user info');
96
+ process.exit(1);
97
+ }
98
+ const org = await getCurrentOrganization(user.id);
99
+ spinner.stop();
100
+ if (!org) {
101
+ console.log(chalk.yellow('\nNo organization selected.'));
102
+ console.log('Run `polargrid orgs list` to see your organizations.');
103
+ console.log('Run `polargrid orgs switch <org_id>` to select one.\n');
104
+ return;
105
+ }
106
+ console.log();
107
+ console.log(chalk.bold('Current Organization'));
108
+ console.log(` Name: ${chalk.cyan(org.name)}`);
109
+ console.log(` ID: ${org.id}`);
110
+ console.log(` Slug: ${org.slug}`);
111
+ console.log(` Plan: ${org.plan}`);
112
+ console.log();
113
+ }
114
+ catch (err) {
115
+ spinner.fail(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);
116
+ process.exit(1);
117
+ }
118
+ });
119
+ //# sourceMappingURL=orgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/commands/orgs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const regionsCommand: Command;
3
+ //# sourceMappingURL=regions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regions.d.ts","sourceRoot":"","sources":["../../src/commands/regions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,cAAc,SACU,CAAC"}
@@ -0,0 +1,108 @@
1
+ import chalk from 'chalk';
2
+ import { Command } from 'commander';
3
+ import ora from 'ora';
4
+ import { getConfig } from '../lib/config.js';
5
+ import { formatRegionsTable, info } from '../lib/output.js';
6
+ // Edge regions - matches backend/inference-api/cdk-app/lambda/route/route.py
7
+ const REGIONS = [
8
+ { id: 'ymq-01', name: 'Montreal', location: 'Montreal, QC', endpoint: 'https://api.ymq-01.edge.polargrid.ai:55111' },
9
+ { id: 'was-01', name: 'Washington', location: 'Washington, USA', endpoint: 'https://api.was-01.edge.polargrid.ai:55111' },
10
+ { id: 'yvr-01', name: 'Vancouver', location: 'Vancouver, BC', endpoint: 'https://api.yvr-01.edge.polargrid.ai:55111' },
11
+ ];
12
+ export const regionsCommand = new Command('regions')
13
+ .description('Manage edge regions');
14
+ regionsCommand
15
+ .command('list')
16
+ .description('List available regions with latency')
17
+ .action(async () => {
18
+ const spinner = ora('Checking regions...').start();
19
+ try {
20
+ const config = getConfig();
21
+ const defaultRegion = config.default_region;
22
+ // Ping each region to get latency
23
+ const results = await Promise.all(REGIONS.map(async (region) => {
24
+ const latency = await pingRegion(region.endpoint);
25
+ return {
26
+ id: region.id,
27
+ name: region.name,
28
+ location: region.location,
29
+ latency,
30
+ status: latency !== null ? 'online' : 'offline',
31
+ };
32
+ }));
33
+ spinner.stop();
34
+ console.log();
35
+ if (defaultRegion) {
36
+ info(`Default region: ${chalk.cyan(defaultRegion)}`);
37
+ console.log();
38
+ }
39
+ console.log(formatRegionsTable(results));
40
+ // Sort by latency and suggest fastest
41
+ const online = results.filter(r => r.latency !== null).sort((a, b) => (a.latency || 0) - (b.latency || 0));
42
+ if (online.length > 0 && !defaultRegion) {
43
+ console.log(chalk.dim(`Tip: Set default region with: polargrid config set default_region ${online[0].id}`));
44
+ console.log();
45
+ }
46
+ }
47
+ catch (err) {
48
+ spinner.fail(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);
49
+ process.exit(1);
50
+ }
51
+ });
52
+ regionsCommand
53
+ .command('ping')
54
+ .description('Ping all regions and show round-trip time')
55
+ .option('-n, --count <n>', 'Number of pings per region', '3')
56
+ .action(async (options) => {
57
+ const count = parseInt(options.count) || 3;
58
+ const spinner = ora('Pinging regions...').start();
59
+ try {
60
+ console.log();
61
+ for (const region of REGIONS) {
62
+ spinner.text = `Pinging ${region.name}...`;
63
+ const latencies = [];
64
+ for (let i = 0; i < count; i++) {
65
+ const latency = await pingRegion(region.endpoint);
66
+ if (latency !== null) {
67
+ latencies.push(latency);
68
+ }
69
+ }
70
+ if (latencies.length === 0) {
71
+ console.log(` ${chalk.red('✗')} ${region.name} (${region.location}): ${chalk.red('unreachable')}`);
72
+ }
73
+ else {
74
+ const avg = Math.round(latencies.reduce((a, b) => a + b, 0) / latencies.length);
75
+ const min = Math.min(...latencies);
76
+ const max = Math.max(...latencies);
77
+ const color = avg < 50 ? chalk.green : avg < 150 ? chalk.yellow : chalk.red;
78
+ console.log(` ${chalk.green('✓')} ${region.name} (${region.location}): ${color(`${avg}ms`)} ${chalk.dim(`(min: ${min}ms, max: ${max}ms)`)}`);
79
+ }
80
+ }
81
+ spinner.stop();
82
+ console.log();
83
+ }
84
+ catch (err) {
85
+ spinner.fail(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);
86
+ process.exit(1);
87
+ }
88
+ });
89
+ async function pingRegion(endpoint) {
90
+ try {
91
+ const start = Date.now();
92
+ const controller = new AbortController();
93
+ const timeout = setTimeout(() => controller.abort(), 5000);
94
+ const response = await fetch(`${endpoint}/health`, {
95
+ method: 'GET',
96
+ signal: controller.signal,
97
+ });
98
+ clearTimeout(timeout);
99
+ if (!response.ok) {
100
+ return null;
101
+ }
102
+ return Date.now() - start;
103
+ }
104
+ catch {
105
+ return null;
106
+ }
107
+ }
108
+ //# sourceMappingURL=regions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regions.js","sourceRoot":"","sources":["../../src/commands/regions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const testCommand: Command;
3
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,WAAW,SACyB,CAAC"}
@@ -0,0 +1,186 @@
1
+ import chalk from 'chalk';
2
+ import { Command } from 'commander';
3
+ import ora from 'ora';
4
+ import { getConfig, getCredentials, isLoggedIn } from '../lib/config.js';
5
+ import { error, success } from '../lib/output.js';
6
+ // Edge regions - same as in regions command
7
+ const REGIONS = {
8
+ 'ymq-01': 'https://api.ymq-01.edge.polargrid.ai:55111',
9
+ 'was-01': 'https://api.was-01.edge.polargrid.ai:55111',
10
+ 'yvr-01': 'https://api.yvr-01.edge.polargrid.ai:55111',
11
+ };
12
+ export const testCommand = new Command('test')
13
+ .description('Test connectivity and inference');
14
+ testCommand
15
+ .command('health')
16
+ .description('Check edge infrastructure health')
17
+ .option('-r, --region <region>', 'Region to test (default: all or default_region)')
18
+ .action(async (options) => {
19
+ const config = getConfig();
20
+ const region = options.region || config.default_region;
21
+ const spinner = ora('Checking health...').start();
22
+ try {
23
+ if (region) {
24
+ // Test specific region
25
+ const endpoint = REGIONS[region];
26
+ if (!endpoint) {
27
+ spinner.fail(`Unknown region: ${region}`);
28
+ console.log(`\nAvailable regions: ${Object.keys(REGIONS).join(', ')}\n`);
29
+ process.exit(1);
30
+ }
31
+ const result = await checkHealth(endpoint);
32
+ spinner.stop();
33
+ console.log();
34
+ if (result.healthy) {
35
+ success(`${region}: ${chalk.green('Healthy')}`);
36
+ console.log(` Service: ${result.service}`);
37
+ console.log(` Runtime: ${result.runtime}`);
38
+ console.log(` Latency: ${result.latency}ms`);
39
+ if (result.features) {
40
+ console.log(` Features: ${Object.entries(result.features).filter(([_, v]) => v).map(([k]) => k).join(', ')}`);
41
+ }
42
+ }
43
+ else {
44
+ error(`${region}: ${chalk.red('Unhealthy')}`);
45
+ if (result.error) {
46
+ console.log(` Error: ${result.error}`);
47
+ }
48
+ }
49
+ console.log();
50
+ }
51
+ else {
52
+ // Test all regions
53
+ console.log();
54
+ for (const [regionId, endpoint] of Object.entries(REGIONS)) {
55
+ spinner.text = `Checking ${regionId}...`;
56
+ const result = await checkHealth(endpoint);
57
+ if (result.healthy) {
58
+ console.log(` ${chalk.green('✓')} ${regionId}: ${chalk.green('Healthy')} ${chalk.dim(`(${result.latency}ms)`)}`);
59
+ }
60
+ else {
61
+ console.log(` ${chalk.red('✗')} ${regionId}: ${chalk.red('Unhealthy')} ${chalk.dim(result.error || '')}`);
62
+ }
63
+ }
64
+ spinner.stop();
65
+ console.log();
66
+ }
67
+ }
68
+ catch (err) {
69
+ spinner.fail(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);
70
+ process.exit(1);
71
+ }
72
+ });
73
+ testCommand
74
+ .command('inference')
75
+ .description('Run a quick inference test')
76
+ .option('-r, --region <region>', 'Region to test')
77
+ .option('-m, --model <model>', 'Model to use', 'gpt2')
78
+ .option('-p, --prompt <prompt>', 'Prompt to send', 'Hello, how are you?')
79
+ .action(async (options) => {
80
+ // Check for API key in env var first, then fall back to login
81
+ const apiKey = process.env.POLARGRID_API_KEY;
82
+ const creds = getCredentials();
83
+ if (!apiKey && !isLoggedIn()) {
84
+ error('Not logged in and POLARGRID_API_KEY not set.');
85
+ console.log('\nEither run `polargrid login` or set POLARGRID_API_KEY env var.\n');
86
+ process.exit(1);
87
+ }
88
+ const config = getConfig();
89
+ const region = options.region || config.default_region;
90
+ if (!region) {
91
+ error('No region specified. Use --region or set default_region in config.');
92
+ console.log(`\nAvailable regions: ${Object.keys(REGIONS).join(', ')}`);
93
+ console.log('Set default: polargrid config set default_region us-east\n');
94
+ process.exit(1);
95
+ }
96
+ const endpoint = REGIONS[region];
97
+ if (!endpoint) {
98
+ error(`Unknown region: ${region}`);
99
+ console.log(`\nAvailable regions: ${Object.keys(REGIONS).join(', ')}\n`);
100
+ process.exit(1);
101
+ }
102
+ const spinner = ora(`Running inference on ${region}...`).start();
103
+ try {
104
+ // Use API key if available, otherwise use session token
105
+ const authToken = apiKey || creds?.access_token;
106
+ if (!authToken) {
107
+ spinner.fail('No authentication token available.');
108
+ process.exit(1);
109
+ }
110
+ const start = Date.now();
111
+ const response = await fetch(`${endpoint}/v1/chat/completions`, {
112
+ method: 'POST',
113
+ headers: {
114
+ 'Content-Type': 'application/json',
115
+ 'Authorization': `Bearer ${authToken}`,
116
+ },
117
+ body: JSON.stringify({
118
+ model: options.model,
119
+ messages: [{ role: 'user', content: options.prompt }],
120
+ max_tokens: 50,
121
+ }),
122
+ });
123
+ const latency = Date.now() - start;
124
+ if (!response.ok) {
125
+ const text = await response.text();
126
+ spinner.fail(`Inference failed: ${response.status}`);
127
+ console.log(chalk.dim(text));
128
+ process.exit(1);
129
+ }
130
+ const data = await response.json();
131
+ spinner.succeed(`Inference completed in ${latency}ms`);
132
+ console.log();
133
+ console.log(chalk.bold('Request'));
134
+ console.log(` Region: ${region}`);
135
+ console.log(` Model: ${options.model}`);
136
+ console.log(` Prompt: "${options.prompt}"`);
137
+ console.log();
138
+ console.log(chalk.bold('Response'));
139
+ console.log(` ${data.choices?.[0]?.message?.content || '(no content)'}`);
140
+ console.log();
141
+ console.log(chalk.bold('Stats'));
142
+ console.log(` Latency: ${latency}ms`);
143
+ console.log(` Prompt tokens: ${data.usage?.prompt_tokens ?? 'N/A'}`);
144
+ console.log(` Completion tokens: ${data.usage?.completion_tokens ?? 'N/A'}`);
145
+ console.log();
146
+ }
147
+ catch (err) {
148
+ spinner.fail(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);
149
+ process.exit(1);
150
+ }
151
+ });
152
+ // Make 'health' the default subcommand
153
+ testCommand.action(async () => {
154
+ await testCommand.commands.find(c => c.name() === 'health')?.parseAsync([], { from: 'user' });
155
+ });
156
+ async function checkHealth(endpoint) {
157
+ try {
158
+ const start = Date.now();
159
+ const controller = new AbortController();
160
+ const timeout = setTimeout(() => controller.abort(), 10000);
161
+ const response = await fetch(`${endpoint}/health`, {
162
+ method: 'GET',
163
+ signal: controller.signal,
164
+ });
165
+ clearTimeout(timeout);
166
+ const latency = Date.now() - start;
167
+ if (!response.ok) {
168
+ return { healthy: false, error: `HTTP ${response.status}`, latency };
169
+ }
170
+ const data = await response.json();
171
+ return {
172
+ healthy: data.status === 'healthy',
173
+ latency,
174
+ service: data.service,
175
+ runtime: data.runtime,
176
+ features: data.features,
177
+ };
178
+ }
179
+ catch (err) {
180
+ return {
181
+ healthy: false,
182
+ error: err instanceof Error ? err.message : 'Unknown error',
183
+ };
184
+ }
185
+ }
186
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './lib/config.js';
2
+ export * from './lib/api.js';
3
+ export * from './lib/auth.js';
4
+ export * from './lib/output.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ // Export library functions for programmatic use
2
+ export * from './lib/config.js';
3
+ export * from './lib/api.js';
4
+ export * from './lib/auth.js';
5
+ export * from './lib/output.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { SupabaseClient, Session } from '@supabase/supabase-js';
2
+ export declare function getSupabaseClient(): SupabaseClient;
3
+ export declare function setSession(session: Session): Promise<void>;
4
+ export declare function restoreSession(): Promise<boolean>;
5
+ export declare function getCurrentUser(): Promise<{
6
+ id: string;
7
+ email: string;
8
+ } | null>;
9
+ export interface Organization {
10
+ id: string;
11
+ name: string;
12
+ slug: string;
13
+ plan: string;
14
+ created_at: string;
15
+ created_by?: string;
16
+ avatar_url?: string | null;
17
+ }
18
+ export interface UserOrganization {
19
+ role: string;
20
+ organization: Organization;
21
+ }
22
+ export declare function getUserOrganizations(userId: string): Promise<UserOrganization[]>;
23
+ export declare function getCurrentOrganization(userId: string): Promise<Organization | null>;
24
+ export declare function switchOrganization(userId: string, orgId: string): Promise<void>;
25
+ export interface ApiKey {
26
+ id: string;
27
+ name: string;
28
+ key_preview: string;
29
+ permissions: string;
30
+ created_at: string;
31
+ last_used_at?: string;
32
+ project_id?: string;
33
+ }
34
+ export declare function getApiKeys(userId: string): Promise<ApiKey[]>;
35
+ export declare function createApiKey(userId: string, name: string, permissions?: 'read-only' | 'read-write' | 'admin', projectId?: string): Promise<{
36
+ key: ApiKey;
37
+ fullKey: string;
38
+ }>;
39
+ export declare function revokeApiKey(userId: string, keyId: string): Promise<void>;
40
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAK9E,wBAAgB,iBAAiB,IAAI,cAAc,CAqBlD;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAsCvD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAqBpF;AAMD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoCtF;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAwBzF;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBrF;AAMD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBlE;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,WAAW,GAAG,YAAY,GAAG,OAAsB,EAChE,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgC3C;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B/E"}