@agentarea/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/dist/app.d.ts +7 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +32 -0
- package/dist/app.js.map +1 -0
- package/dist/cli-commands.d.ts +9 -0
- package/dist/cli-commands.d.ts.map +1 -0
- package/dist/cli-commands.js +62 -0
- package/dist/cli-commands.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +66 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agentsList.d.ts +2 -0
- package/dist/commands/agentsList.d.ts.map +1 -0
- package/dist/commands/agentsList.js +67 -0
- package/dist/commands/agentsList.js.map +1 -0
- package/dist/commands/authToken.d.ts +6 -0
- package/dist/commands/authToken.d.ts.map +1 -0
- package/dist/commands/authToken.js +67 -0
- package/dist/commands/authToken.js.map +1 -0
- package/dist/commands/connect.d.ts +10 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +204 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/interactiveTUI.d.ts +7 -0
- package/dist/commands/interactiveTUI.d.ts.map +1 -0
- package/dist/commands/interactiveTUI.js +186 -0
- package/dist/commands/interactiveTUI.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +18 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +32 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/InteractiveCLI.d.ts +7 -0
- package/dist/components/InteractiveCLI.d.ts.map +1 -0
- package/dist/components/InteractiveCLI.js +129 -0
- package/dist/components/InteractiveCLI.js.map +1 -0
- package/dist/components/REPL.d.ts +7 -0
- package/dist/components/REPL.d.ts.map +1 -0
- package/dist/components/REPL.js +153 -0
- package/dist/components/REPL.js.map +1 -0
- package/dist/context/AuthContext.d.ts +28 -0
- package/dist/context/AuthContext.d.ts.map +1 -0
- package/dist/context/AuthContext.js +14 -0
- package/dist/context/AuthContext.js.map +1 -0
- package/dist/hooks/useAgent.d.ts +39 -0
- package/dist/hooks/useAgent.d.ts.map +1 -0
- package/dist/hooks/useAgent.js +125 -0
- package/dist/hooks/useAgent.js.map +1 -0
- package/dist/hooks/useAuth.d.ts +45 -0
- package/dist/hooks/useAuth.d.ts.map +1 -0
- package/dist/hooks/useAuth.js +177 -0
- package/dist/hooks/useAuth.js.map +1 -0
- package/dist/hooks/useSSE.d.ts +32 -0
- package/dist/hooks/useSSE.d.ts.map +1 -0
- package/dist/hooks/useSSE.js +113 -0
- package/dist/hooks/useSSE.js.map +1 -0
- package/dist/services/agent.d.ts +13 -0
- package/dist/services/agent.d.ts.map +1 -0
- package/dist/services/agent.js +114 -0
- package/dist/services/agent.js.map +1 -0
- package/dist/services/apiClient.d.ts +25 -0
- package/dist/services/apiClient.d.ts.map +1 -0
- package/dist/services/apiClient.js +258 -0
- package/dist/services/apiClient.js.map +1 -0
- package/dist/services/auth.d.ts +20 -0
- package/dist/services/auth.d.ts.map +1 -0
- package/dist/services/auth.js +147 -0
- package/dist/services/auth.js.map +1 -0
- package/dist/services/sse.d.ts +18 -0
- package/dist/services/sse.d.ts.map +1 -0
- package/dist/services/sse.js +153 -0
- package/dist/services/sse.js.map +1 -0
- package/dist/services/task.d.ts +15 -0
- package/dist/services/task.d.ts.map +1 -0
- package/dist/services/task.js +110 -0
- package/dist/services/task.js.map +1 -0
- package/dist/tui.d.ts +6 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +94 -0
- package/dist/tui.js.map +1 -0
- package/dist/types/index.d.ts +119 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +14 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +146 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/error.d.ts +33 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +83 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/formatting.d.ts +18 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +62 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +49 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/signals.d.ts +10 -0
- package/dist/utils/signals.d.ts.map +1 -0
- package/dist/utils/signals.js +71 -0
- package/dist/utils/signals.js.map +1 -0
- package/dist/utils/storage.d.ts +11 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +73 -0
- package/dist/utils/storage.js.map +1 -0
- package/package.json +103 -0
- package/readme.md +229 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import process from 'process';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import Conf from 'conf';
|
|
5
|
+
import { logger } from './logger.js';
|
|
6
|
+
import { ConfigError } from './error.js';
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = path.dirname(__filename);
|
|
9
|
+
// Default configuration values
|
|
10
|
+
const defaultConfig = {
|
|
11
|
+
kratosUrl: process.env['KRATOS_URL'] || 'http://localhost:4433',
|
|
12
|
+
apiBaseUrl: process.env['API_URL'] || 'http://localhost:8000',
|
|
13
|
+
apiTimeout: Number(process.env['API_TIMEOUT']) || 30000,
|
|
14
|
+
maxRetries: Number(process.env['MAX_RETRIES']) || 3,
|
|
15
|
+
retryDelay: Number(process.env['RETRY_DELAY']) || 1000,
|
|
16
|
+
streamTimeout: Number(process.env['STREAM_TIMEOUT']) || 60000,
|
|
17
|
+
logLevel: process.env['LOG_LEVEL'] || 'info',
|
|
18
|
+
theme: process.env['THEME'] || 'auto',
|
|
19
|
+
};
|
|
20
|
+
// Create persistent config store
|
|
21
|
+
const configStore = new Conf({
|
|
22
|
+
projectName: 'agentarea-cli',
|
|
23
|
+
defaults: defaultConfig,
|
|
24
|
+
});
|
|
25
|
+
export class ConfigManager {
|
|
26
|
+
constructor() {
|
|
27
|
+
Object.defineProperty(this, "config", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: void 0
|
|
32
|
+
});
|
|
33
|
+
this.config = { ...defaultConfig };
|
|
34
|
+
this.loadConfig();
|
|
35
|
+
}
|
|
36
|
+
loadConfig() {
|
|
37
|
+
try {
|
|
38
|
+
// Load from environment variables (highest priority)
|
|
39
|
+
const envConfig = {};
|
|
40
|
+
if (process.env['KRATOS_URL']) {
|
|
41
|
+
envConfig.kratosUrl = process.env['KRATOS_URL'];
|
|
42
|
+
}
|
|
43
|
+
if (process.env['API_URL']) {
|
|
44
|
+
envConfig.apiBaseUrl = process.env['API_URL'];
|
|
45
|
+
}
|
|
46
|
+
if (process.env['API_TIMEOUT']) {
|
|
47
|
+
envConfig.apiTimeout = Number(process.env['API_TIMEOUT']);
|
|
48
|
+
}
|
|
49
|
+
if (process.env['MAX_RETRIES']) {
|
|
50
|
+
envConfig.maxRetries = Number(process.env['MAX_RETRIES']);
|
|
51
|
+
}
|
|
52
|
+
if (process.env['RETRY_DELAY']) {
|
|
53
|
+
envConfig.retryDelay = Number(process.env['RETRY_DELAY']);
|
|
54
|
+
}
|
|
55
|
+
if (process.env['STREAM_TIMEOUT']) {
|
|
56
|
+
envConfig.streamTimeout = Number(process.env['STREAM_TIMEOUT']);
|
|
57
|
+
}
|
|
58
|
+
if (process.env['LOG_LEVEL']) {
|
|
59
|
+
envConfig.logLevel = process.env['LOG_LEVEL'];
|
|
60
|
+
}
|
|
61
|
+
if (process.env['THEME']) {
|
|
62
|
+
envConfig.theme = process.env['THEME'];
|
|
63
|
+
}
|
|
64
|
+
// Merge with persistent config
|
|
65
|
+
this.config = {
|
|
66
|
+
...configStore.store,
|
|
67
|
+
...envConfig,
|
|
68
|
+
};
|
|
69
|
+
logger.debug('Configuration loaded', this.config);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
logger.error('Failed to load configuration:', error);
|
|
73
|
+
throw new ConfigError(`Failed to load configuration: ${error}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
get() {
|
|
77
|
+
return this.config;
|
|
78
|
+
}
|
|
79
|
+
set(key, value) {
|
|
80
|
+
try {
|
|
81
|
+
this.config[key] = value;
|
|
82
|
+
configStore.set(key, value);
|
|
83
|
+
logger.debug(`Config updated: ${key} = ${value}`);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
logger.error(`Failed to set config ${key}:`, error);
|
|
87
|
+
throw new ConfigError(`Failed to set configuration: ${error}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
update(partial) {
|
|
91
|
+
try {
|
|
92
|
+
this.config = { ...this.config, ...partial };
|
|
93
|
+
configStore.set(partial);
|
|
94
|
+
logger.debug('Configuration updated', partial);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
logger.error('Failed to update configuration:', error);
|
|
98
|
+
throw new ConfigError(`Failed to update configuration: ${error}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
reset() {
|
|
102
|
+
try {
|
|
103
|
+
configStore.clear();
|
|
104
|
+
this.config = { ...defaultConfig };
|
|
105
|
+
logger.info('Configuration reset to defaults');
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
logger.error('Failed to reset configuration:', error);
|
|
109
|
+
throw new ConfigError(`Failed to reset configuration: ${error}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
reinitialize() {
|
|
113
|
+
try {
|
|
114
|
+
this.loadConfig();
|
|
115
|
+
logger.info('Configuration reinitialized');
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
logger.error('Failed to reinitialize configuration:', error);
|
|
119
|
+
throw new ConfigError(`Failed to reinitialize configuration: ${error}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
validate() {
|
|
123
|
+
try {
|
|
124
|
+
if (!this.config.kratosUrl) {
|
|
125
|
+
throw new Error('KRATOS_URL is required');
|
|
126
|
+
}
|
|
127
|
+
if (!this.config.apiBaseUrl) {
|
|
128
|
+
throw new Error('API_URL is required');
|
|
129
|
+
}
|
|
130
|
+
if (this.config.apiTimeout && this.config.apiTimeout < 0) {
|
|
131
|
+
throw new Error('API_TIMEOUT must be positive');
|
|
132
|
+
}
|
|
133
|
+
if (this.config.maxRetries && this.config.maxRetries < 0) {
|
|
134
|
+
throw new Error('MAX_RETRIES must be positive');
|
|
135
|
+
}
|
|
136
|
+
logger.debug('Configuration validation passed');
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
logger.error('Configuration validation failed:', error);
|
|
140
|
+
throw new ConfigError(`Configuration validation failed: ${error}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Create and export a singleton instance
|
|
145
|
+
export const configManager = new ConfigManager();
|
|
146
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../source/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare class CliError extends Error {
|
|
2
|
+
code: string;
|
|
3
|
+
constructor(message: string, code?: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class AuthenticationError extends CliError {
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class AuthorizationError extends CliError {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class NetworkError extends CliError {
|
|
12
|
+
constructor(message: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class ValidationError extends CliError {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
17
|
+
export declare class StorageError extends CliError {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
export declare class ConfigError extends CliError {
|
|
21
|
+
constructor(message: string);
|
|
22
|
+
}
|
|
23
|
+
export declare class TaskError extends CliError {
|
|
24
|
+
constructor(message: string);
|
|
25
|
+
}
|
|
26
|
+
export declare class SSEError extends CliError {
|
|
27
|
+
constructor(message: string);
|
|
28
|
+
}
|
|
29
|
+
export declare function formatError(error: unknown): string;
|
|
30
|
+
export declare function isAuthError(error: unknown): error is AuthenticationError;
|
|
31
|
+
export declare function isNetworkError(error: unknown): error is NetworkError;
|
|
32
|
+
export declare function isValidationError(error: unknown): error is ValidationError;
|
|
33
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../source/utils/error.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAS,SAAQ,KAAK;IAC3B,IAAI,EAAE,MAAM,CAAC;gBAER,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAwB;CAK3D;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;gBACnC,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,eAAgB,SAAQ,QAAQ;gBAChC,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,WAAY,SAAQ,QAAQ;gBAC5B,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,SAAU,SAAQ,QAAQ;gBAC1B,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,QAAS,SAAQ,QAAQ;gBACzB,OAAO,EAAE,MAAM;CAI3B;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUlD;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAExE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Custom error classes for the CLI application
|
|
2
|
+
export class CliError extends Error {
|
|
3
|
+
constructor(message, code = 'UNKNOWN_ERROR') {
|
|
4
|
+
super(message);
|
|
5
|
+
Object.defineProperty(this, "code", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
configurable: true,
|
|
8
|
+
writable: true,
|
|
9
|
+
value: void 0
|
|
10
|
+
});
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.name = 'CliError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class AuthenticationError extends CliError {
|
|
16
|
+
constructor(message) {
|
|
17
|
+
super(message, 'AUTHENTICATION_ERROR');
|
|
18
|
+
this.name = 'AuthenticationError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class AuthorizationError extends CliError {
|
|
22
|
+
constructor(message) {
|
|
23
|
+
super(message, 'AUTHORIZATION_ERROR');
|
|
24
|
+
this.name = 'AuthorizationError';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class NetworkError extends CliError {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message, 'NETWORK_ERROR');
|
|
30
|
+
this.name = 'NetworkError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class ValidationError extends CliError {
|
|
34
|
+
constructor(message) {
|
|
35
|
+
super(message, 'VALIDATION_ERROR');
|
|
36
|
+
this.name = 'ValidationError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class StorageError extends CliError {
|
|
40
|
+
constructor(message) {
|
|
41
|
+
super(message, 'STORAGE_ERROR');
|
|
42
|
+
this.name = 'StorageError';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class ConfigError extends CliError {
|
|
46
|
+
constructor(message) {
|
|
47
|
+
super(message, 'CONFIG_ERROR');
|
|
48
|
+
this.name = 'ConfigError';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class TaskError extends CliError {
|
|
52
|
+
constructor(message) {
|
|
53
|
+
super(message, 'TASK_ERROR');
|
|
54
|
+
this.name = 'TaskError';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class SSEError extends CliError {
|
|
58
|
+
constructor(message) {
|
|
59
|
+
super(message, 'SSE_ERROR');
|
|
60
|
+
this.name = 'SSEError';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Helper function to format errors for display
|
|
64
|
+
export function formatError(error) {
|
|
65
|
+
if (error instanceof CliError) {
|
|
66
|
+
return error.message;
|
|
67
|
+
}
|
|
68
|
+
if (error instanceof Error) {
|
|
69
|
+
return error.message;
|
|
70
|
+
}
|
|
71
|
+
return String(error);
|
|
72
|
+
}
|
|
73
|
+
// Helper function to check if error is a specific type
|
|
74
|
+
export function isAuthError(error) {
|
|
75
|
+
return error instanceof AuthenticationError;
|
|
76
|
+
}
|
|
77
|
+
export function isNetworkError(error) {
|
|
78
|
+
return error instanceof NetworkError;
|
|
79
|
+
}
|
|
80
|
+
export function isValidationError(error) {
|
|
81
|
+
return error instanceof ValidationError;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../source/utils/error.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGlC,YAAY,OAAe,EAAE,OAAe,eAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QAHT;;;;;WAAa;QAInB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACxB,CAAC;CACD;AAED,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAChD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACnC,CAAC;CACD;AAED,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC/C,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAClC,CAAC;CACD;AAED,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACzC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5B,CAAC;CACD;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC5C,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAC/B,CAAC;CACD;AAED,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACzC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5B,CAAC;CACD;AAED,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACxC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC3B,CAAC;CACD;AAED,MAAM,OAAO,SAAU,SAAQ,QAAQ;IACtC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IACzB,CAAC;CACD;AAED,MAAM,OAAO,QAAS,SAAQ,QAAQ;IACrC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACxB,CAAC;CACD;AAED,+CAA+C;AAC/C,MAAM,UAAU,WAAW,CAAC,KAAc;IACzC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,mBAAmB,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,YAAY,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC/C,OAAO,KAAK,YAAY,eAAe,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal formatting utilities for styled output
|
|
3
|
+
*/
|
|
4
|
+
export declare function formatPrompt(text: string): string;
|
|
5
|
+
export declare function formatInput(input: string): string;
|
|
6
|
+
export declare function formatSuccess(message: string): string;
|
|
7
|
+
export declare function formatError(message: string): string;
|
|
8
|
+
export declare function formatInfo(message: string): string;
|
|
9
|
+
export declare function formatHeader(title: string): string;
|
|
10
|
+
export declare function formatCommand(command: string): string;
|
|
11
|
+
export declare function formatHighlight(text: string): string;
|
|
12
|
+
export declare function formatDim(text: string): string;
|
|
13
|
+
export declare function formatCode(code: string): string;
|
|
14
|
+
export declare function clearLine(): void;
|
|
15
|
+
export declare function moveCursorUp(lines?: number): void;
|
|
16
|
+
export declare function hideCursor(): void;
|
|
17
|
+
export declare function showCursor(): void;
|
|
18
|
+
//# sourceMappingURL=formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../source/utils/formatting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,wBAAgB,YAAY,CAAC,KAAK,SAAI,GAAG,IAAI,CAE5C;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal formatting utilities for styled output
|
|
3
|
+
*/
|
|
4
|
+
const colors = {
|
|
5
|
+
reset: '\x1b[0m',
|
|
6
|
+
bright: '\x1b[1m',
|
|
7
|
+
dim: '\x1b[2m',
|
|
8
|
+
cyan: '\x1b[36m',
|
|
9
|
+
green: '\x1b[32m',
|
|
10
|
+
yellow: '\x1b[33m',
|
|
11
|
+
red: '\x1b[31m',
|
|
12
|
+
blue: '\x1b[34m',
|
|
13
|
+
gray: '\x1b[90m',
|
|
14
|
+
};
|
|
15
|
+
export function formatPrompt(text) {
|
|
16
|
+
return `${colors.cyan}▶${colors.reset} ${colors.bright}${text}${colors.reset}`;
|
|
17
|
+
}
|
|
18
|
+
export function formatInput(input) {
|
|
19
|
+
return `${colors.blue}${input}${colors.reset}`;
|
|
20
|
+
}
|
|
21
|
+
export function formatSuccess(message) {
|
|
22
|
+
return `${colors.green}✓${colors.reset} ${message}`;
|
|
23
|
+
}
|
|
24
|
+
export function formatError(message) {
|
|
25
|
+
return `${colors.red}✗${colors.reset} ${message}`;
|
|
26
|
+
}
|
|
27
|
+
export function formatInfo(message) {
|
|
28
|
+
return `${colors.cyan}ℹ${colors.reset} ${message}`;
|
|
29
|
+
}
|
|
30
|
+
export function formatHeader(title) {
|
|
31
|
+
const line = '─'.repeat(80);
|
|
32
|
+
return `
|
|
33
|
+
${colors.bright}${colors.cyan}┌${line}┐${colors.reset}
|
|
34
|
+
${colors.bright}${colors.cyan}│${colors.reset} ${colors.bright}${title}${colors.reset}
|
|
35
|
+
${colors.bright}${colors.cyan}└${line}┘${colors.reset}
|
|
36
|
+
`;
|
|
37
|
+
}
|
|
38
|
+
export function formatCommand(command) {
|
|
39
|
+
return `${colors.gray}${command}${colors.reset}`;
|
|
40
|
+
}
|
|
41
|
+
export function formatHighlight(text) {
|
|
42
|
+
return `${colors.bright}${colors.yellow}${text}${colors.reset}`;
|
|
43
|
+
}
|
|
44
|
+
export function formatDim(text) {
|
|
45
|
+
return `${colors.dim}${colors.gray}${text}${colors.reset}`;
|
|
46
|
+
}
|
|
47
|
+
export function formatCode(code) {
|
|
48
|
+
return `${colors.blue}${code}${colors.reset}`;
|
|
49
|
+
}
|
|
50
|
+
export function clearLine() {
|
|
51
|
+
process.stdout.write('\x1b[2K\r');
|
|
52
|
+
}
|
|
53
|
+
export function moveCursorUp(lines = 1) {
|
|
54
|
+
process.stdout.write(`\x1b[${lines}A`);
|
|
55
|
+
}
|
|
56
|
+
export function hideCursor() {
|
|
57
|
+
process.stdout.write('\x1b[?25l');
|
|
58
|
+
}
|
|
59
|
+
export function showCursor() {
|
|
60
|
+
process.stdout.write('\x1b[?25h');
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../source/utils/formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
declare class Logger {
|
|
3
|
+
private currentLevel;
|
|
4
|
+
constructor(level?: LogLevel);
|
|
5
|
+
setLevel(level: LogLevel): void;
|
|
6
|
+
private shouldLog;
|
|
7
|
+
debug(...args: unknown[]): void;
|
|
8
|
+
info(...args: unknown[]): void;
|
|
9
|
+
warn(...args: unknown[]): void;
|
|
10
|
+
error(...args: unknown[]): void;
|
|
11
|
+
}
|
|
12
|
+
export declare const logger: Logger;
|
|
13
|
+
export default logger;
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../source/utils/logger.ts"],"names":[],"mappings":"AAEA,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AASpD,cAAM,MAAM;IACX,OAAO,CAAC,YAAY,CAAW;gBAEnB,KAAK,GAAE,QAAiB;IAIpC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,OAAO,CAAC,SAAS;IAIjB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAK/B;AAID,eAAO,MAAM,MAAM,QAAuB,CAAC;AAE3C,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import process from 'process';
|
|
2
|
+
const logLevels = {
|
|
3
|
+
debug: 0,
|
|
4
|
+
info: 1,
|
|
5
|
+
warn: 2,
|
|
6
|
+
error: 3,
|
|
7
|
+
};
|
|
8
|
+
class Logger {
|
|
9
|
+
constructor(level = 'info') {
|
|
10
|
+
Object.defineProperty(this, "currentLevel", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: void 0
|
|
15
|
+
});
|
|
16
|
+
this.currentLevel = level;
|
|
17
|
+
}
|
|
18
|
+
setLevel(level) {
|
|
19
|
+
this.currentLevel = level;
|
|
20
|
+
}
|
|
21
|
+
shouldLog(level) {
|
|
22
|
+
return logLevels[level] >= logLevels[this.currentLevel];
|
|
23
|
+
}
|
|
24
|
+
debug(...args) {
|
|
25
|
+
if (this.shouldLog('debug')) {
|
|
26
|
+
console.log('[DEBUG]', ...args);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
info(...args) {
|
|
30
|
+
if (this.shouldLog('info')) {
|
|
31
|
+
console.log('[INFO]', ...args);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
warn(...args) {
|
|
35
|
+
if (this.shouldLog('warn')) {
|
|
36
|
+
console.warn('[WARN]', ...args);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
error(...args) {
|
|
40
|
+
if (this.shouldLog('error')) {
|
|
41
|
+
console.error('[ERROR]', ...args);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Create a default logger instance
|
|
46
|
+
const logLevel = process.env['LOG_LEVEL'] || 'info';
|
|
47
|
+
export const logger = new Logger(logLevel);
|
|
48
|
+
export default logger;
|
|
49
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../source/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAI9B,MAAM,SAAS,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACR,CAAC;AAEF,MAAM,MAAM;IAGX,YAAY,QAAkB,MAAM;QAF5B;;;;;WAAuB;QAG9B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,QAAQ,CAAC,KAAe;QACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,CAAC;IAEO,SAAS,CAAC,KAAe;QAChC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,GAAG,IAAe;QACvB,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;IAED,IAAI,CAAC,GAAG,IAAe;QACtB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;QAChC,CAAC;IACF,CAAC;IAED,IAAI,CAAC,GAAG,IAAe;QACtB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;IAED,KAAK,CAAC,GAAG,IAAe;QACvB,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QACnC,CAAC;IACF,CAAC;CACD;AAED,mCAAmC;AACnC,MAAM,QAAQ,GAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAc,IAAI,MAAM,CAAC;AAClE,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE3C,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type CleanupFunction = () => Promise<void> | void;
|
|
2
|
+
declare class SignalHandler {
|
|
3
|
+
private cleanupFunctions;
|
|
4
|
+
private isShuttingDown;
|
|
5
|
+
registerCleanup(fn: CleanupFunction): void;
|
|
6
|
+
initialize(): void;
|
|
7
|
+
}
|
|
8
|
+
export declare const signalHandler: SignalHandler;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../source/utils/signals.ts"],"names":[],"mappings":"AAIA,KAAK,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAElD,cAAM,aAAa;IAClB,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,cAAc,CAAS;IAE/B,eAAe,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI;IAK1C,UAAU,IAAI,IAAI;CAkDlB;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import process from 'process';
|
|
2
|
+
import exitHook from 'async-exit-hook';
|
|
3
|
+
import { logger } from './logger.js';
|
|
4
|
+
class SignalHandler {
|
|
5
|
+
constructor() {
|
|
6
|
+
Object.defineProperty(this, "cleanupFunctions", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true,
|
|
10
|
+
value: []
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(this, "isShuttingDown", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true,
|
|
16
|
+
value: false
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
registerCleanup(fn) {
|
|
20
|
+
this.cleanupFunctions.push(fn);
|
|
21
|
+
logger.debug('Cleanup function registered');
|
|
22
|
+
}
|
|
23
|
+
initialize() {
|
|
24
|
+
// Register async exit hook to handle all termination signals
|
|
25
|
+
exitHook(async (callback) => {
|
|
26
|
+
if (this.isShuttingDown) {
|
|
27
|
+
callback();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.isShuttingDown = true;
|
|
31
|
+
logger.info('Shutting down gracefully...');
|
|
32
|
+
try {
|
|
33
|
+
// Execute all cleanup functions in order with timeout
|
|
34
|
+
const cleanupPromises = this.cleanupFunctions.map(async (fn) => {
|
|
35
|
+
try {
|
|
36
|
+
await Promise.resolve(fn());
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
logger.error('Cleanup function failed:', error);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
// Set a maximum cleanup time of 5 seconds
|
|
43
|
+
const cleanupTimeout = new Promise(resolve => {
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
logger.warn('Cleanup timeout reached, forcing exit');
|
|
46
|
+
resolve();
|
|
47
|
+
}, 5000);
|
|
48
|
+
});
|
|
49
|
+
await Promise.race([Promise.all(cleanupPromises), cleanupTimeout]);
|
|
50
|
+
logger.info('Cleanup completed, exiting');
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
logger.error('Error during cleanup:', error);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
callback();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
// Handle specific signals
|
|
60
|
+
process.on('SIGINT', () => {
|
|
61
|
+
logger.debug('Received SIGINT');
|
|
62
|
+
});
|
|
63
|
+
process.on('SIGTERM', () => {
|
|
64
|
+
logger.debug('Received SIGTERM');
|
|
65
|
+
});
|
|
66
|
+
logger.debug('Signal handlers initialized');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Export a singleton instance
|
|
70
|
+
export const signalHandler = new SignalHandler();
|
|
71
|
+
//# sourceMappingURL=signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../source/utils/signals.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAInC,MAAM,aAAa;IAAnB;QACS;;;;mBAAsC,EAAE;WAAC;QACzC;;;;mBAAiB,KAAK;WAAC;IAyDhC,CAAC;IAvDA,eAAe,CAAC,EAAmB;QAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU;QACT,6DAA6D;QAC7D,QAAQ,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE;YACzB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,QAAQ,EAAE,CAAC;gBACX,OAAO;YACR,CAAC;YAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAE3C,IAAI,CAAC;gBACJ,sDAAsD;gBACtD,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;oBAC5D,IAAI,CAAC;wBACJ,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;oBACjD,CAAC;gBACF,CAAC,CAAC,CAAC;gBAEH,0CAA0C;gBAC1C,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;oBAClD,UAAU,CAAC,GAAG,EAAE;wBACf,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;wBACrD,OAAO,EAAE,CAAC;oBACX,CAAC,EAAE,IAAI,CAAC,CAAC;gBACV,CAAC,CAAC,CAAC;gBAEH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;gBAEnE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;oBAAS,CAAC;gBACV,QAAQ,EAAE,CAAC;YACZ,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;CACD;AAED,8BAA8B;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type AuthToken } from '../types/index.js';
|
|
2
|
+
export declare class TokenStorage {
|
|
3
|
+
saveToken(token: AuthToken): Promise<void>;
|
|
4
|
+
getToken(): Promise<AuthToken | null>;
|
|
5
|
+
clearToken(): Promise<void>;
|
|
6
|
+
hasToken(): Promise<boolean>;
|
|
7
|
+
isTokenExpired(token: AuthToken): boolean;
|
|
8
|
+
shouldRefreshToken(token: AuthToken): boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const tokenStorage: TokenStorage;
|
|
11
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../source/utils/storage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAKjD,qBAAa,YAAY;IAClB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1C,QAAQ,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAoBrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAazC,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;CAO7C;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { keyring } from '@zowe/secrets-for-zowe-sdk';
|
|
2
|
+
import { logger } from './logger.js';
|
|
3
|
+
import { StorageError } from './error.js';
|
|
4
|
+
const SERVICE_NAME = 'agentarea-cli';
|
|
5
|
+
const TOKEN_KEY = 'auth_token';
|
|
6
|
+
export class TokenStorage {
|
|
7
|
+
async saveToken(token) {
|
|
8
|
+
try {
|
|
9
|
+
const tokenString = JSON.stringify(token);
|
|
10
|
+
await keyring.setPassword(SERVICE_NAME, TOKEN_KEY, tokenString);
|
|
11
|
+
logger.debug('Token saved to keychain');
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
logger.error('Failed to save token:', error);
|
|
15
|
+
throw new StorageError(`Failed to save authentication token: ${error}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async getToken() {
|
|
19
|
+
try {
|
|
20
|
+
const tokenString = await keyring.getPassword(SERVICE_NAME, TOKEN_KEY);
|
|
21
|
+
if (!tokenString) {
|
|
22
|
+
logger.debug('No stored token found');
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const token = JSON.parse(tokenString);
|
|
26
|
+
logger.debug('Token retrieved from keychain');
|
|
27
|
+
return token;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
logger.error('Failed to retrieve token:', error);
|
|
31
|
+
throw new StorageError(`Failed to retrieve authentication token: ${error}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async clearToken() {
|
|
35
|
+
try {
|
|
36
|
+
await keyring.deletePassword(SERVICE_NAME, TOKEN_KEY);
|
|
37
|
+
logger.debug('Token cleared from keychain');
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
logger.error('Failed to clear token:', error);
|
|
41
|
+
throw new StorageError(`Failed to clear authentication token: ${error}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async hasToken() {
|
|
45
|
+
try {
|
|
46
|
+
const token = await this.getToken();
|
|
47
|
+
return token !== null;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
logger.error('Failed to check token:', error);
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
isTokenExpired(token) {
|
|
55
|
+
if (!token.expiresAt) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const expirationTime = new Date(token.expiresAt).getTime();
|
|
59
|
+
const currentTime = new Date().getTime();
|
|
60
|
+
const timeUntilExpiration = expirationTime - currentTime;
|
|
61
|
+
// Consider token expired if less than 5 minutes remaining
|
|
62
|
+
return timeUntilExpiration < 5 * 60 * 1000;
|
|
63
|
+
}
|
|
64
|
+
shouldRefreshToken(token) {
|
|
65
|
+
if (!token.refreshToken) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
return this.isTokenExpired(token);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Export a singleton instance
|
|
72
|
+
export const tokenStorage = new TokenStorage();
|
|
73
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../source/utils/storage.ts"],"names":[],"mappings":"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"}
|