@cuijy/free-api 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/LICENSE +21 -0
- package/README.md +299 -0
- package/bin/freeapi +8 -0
- package/dist/cli/commands/chat.d.ts +3 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +39 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +289 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +114 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/list.d.ts +3 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +109 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +51 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/start.d.ts +3 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +34 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +45 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +3 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +54 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +79 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/services/base/index.d.ts +112 -0
- package/dist/services/base/index.d.ts.map +1 -0
- package/dist/services/base/index.js +51 -0
- package/dist/services/base/index.js.map +1 -0
- package/dist/services/base/types.d.ts +114 -0
- package/dist/services/base/types.d.ts.map +1 -0
- package/dist/services/base/types.js +7 -0
- package/dist/services/base/types.js.map +1 -0
- package/dist/services/chatgpt/api-client.d.ts +81 -0
- package/dist/services/chatgpt/api-client.d.ts.map +1 -0
- package/dist/services/chatgpt/api-client.js +325 -0
- package/dist/services/chatgpt/api-client.js.map +1 -0
- package/dist/services/chatgpt/cli-adapter.d.ts +108 -0
- package/dist/services/chatgpt/cli-adapter.d.ts.map +1 -0
- package/dist/services/chatgpt/cli-adapter.js +315 -0
- package/dist/services/chatgpt/cli-adapter.js.map +1 -0
- package/dist/services/chatgpt/config-manager.d.ts +87 -0
- package/dist/services/chatgpt/config-manager.d.ts.map +1 -0
- package/dist/services/chatgpt/config-manager.js +344 -0
- package/dist/services/chatgpt/config-manager.js.map +1 -0
- package/dist/services/chatgpt/config-wizard.d.ts +35 -0
- package/dist/services/chatgpt/config-wizard.d.ts.map +1 -0
- package/dist/services/chatgpt/config-wizard.js +524 -0
- package/dist/services/chatgpt/config-wizard.js.map +1 -0
- package/dist/services/chatgpt/error-handler.d.ts +94 -0
- package/dist/services/chatgpt/error-handler.d.ts.map +1 -0
- package/dist/services/chatgpt/error-handler.js +409 -0
- package/dist/services/chatgpt/error-handler.js.map +1 -0
- package/dist/services/chatgpt/exports.d.ts +71 -0
- package/dist/services/chatgpt/exports.d.ts.map +1 -0
- package/dist/services/chatgpt/exports.js +81 -0
- package/dist/services/chatgpt/exports.js.map +1 -0
- package/dist/services/chatgpt/index.d.ts +125 -0
- package/dist/services/chatgpt/index.d.ts.map +1 -0
- package/dist/services/chatgpt/index.js +394 -0
- package/dist/services/chatgpt/index.js.map +1 -0
- package/dist/services/chatgpt/service-adapter.d.ts +152 -0
- package/dist/services/chatgpt/service-adapter.d.ts.map +1 -0
- package/dist/services/chatgpt/service-adapter.js +430 -0
- package/dist/services/chatgpt/service-adapter.js.map +1 -0
- package/dist/services/chatgpt/session-manager.d.ts +113 -0
- package/dist/services/chatgpt/session-manager.d.ts.map +1 -0
- package/dist/services/chatgpt/session-manager.js +396 -0
- package/dist/services/chatgpt/session-manager.js.map +1 -0
- package/dist/services/chatgpt/types.d.ts +130 -0
- package/dist/services/chatgpt/types.d.ts.map +1 -0
- package/dist/services/chatgpt/types.js +19 -0
- package/dist/services/chatgpt/types.js.map +1 -0
- package/dist/utils/config.d.ts +61 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +215 -0
- package/dist/utils/config.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChatGPT Session Manager
|
|
3
|
+
* Handles user authentication, session management, and token refresh
|
|
4
|
+
*/
|
|
5
|
+
import { ChatGPTConfig, AuthenticationResponse, Conversation } from './types';
|
|
6
|
+
import { ChatGPTAPIClient } from './api-client';
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
export interface SessionData {
|
|
9
|
+
session_id: string;
|
|
10
|
+
user_id?: string;
|
|
11
|
+
email?: string;
|
|
12
|
+
access_token?: string;
|
|
13
|
+
refresh_token?: string;
|
|
14
|
+
session_token?: string;
|
|
15
|
+
expires_at: number;
|
|
16
|
+
created_at: number;
|
|
17
|
+
last_activity: number;
|
|
18
|
+
conversations: Map<string, Conversation>;
|
|
19
|
+
token_count: number;
|
|
20
|
+
}
|
|
21
|
+
export declare class ChatGPTSessionManager extends EventEmitter {
|
|
22
|
+
private client;
|
|
23
|
+
private config;
|
|
24
|
+
private sessions;
|
|
25
|
+
private currentSessionId?;
|
|
26
|
+
private refreshInterval?;
|
|
27
|
+
constructor(client: ChatGPTAPIClient, config: ChatGPTConfig);
|
|
28
|
+
/**
|
|
29
|
+
* Set up event listeners
|
|
30
|
+
*/
|
|
31
|
+
private setupEventListeners;
|
|
32
|
+
/**
|
|
33
|
+
* Authenticate user (for authenticated mode)
|
|
34
|
+
*/
|
|
35
|
+
authenticate(email: string, password: string): Promise<AuthenticationResponse>;
|
|
36
|
+
/**
|
|
37
|
+
* Authenticate with ChatGPT API
|
|
38
|
+
*/
|
|
39
|
+
private authenticateWithChatGPT;
|
|
40
|
+
/**
|
|
41
|
+
* Create a new session
|
|
42
|
+
*/
|
|
43
|
+
private createSession;
|
|
44
|
+
/**
|
|
45
|
+
* Refresh session token
|
|
46
|
+
*/
|
|
47
|
+
refreshSession(): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Start automatic session refresh
|
|
50
|
+
*/
|
|
51
|
+
private startSessionRefresh;
|
|
52
|
+
/**
|
|
53
|
+
* Get current session
|
|
54
|
+
*/
|
|
55
|
+
getCurrentSession(): SessionData | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Switch to a different session
|
|
58
|
+
*/
|
|
59
|
+
switchSession(sessionId: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Clear current session
|
|
62
|
+
*/
|
|
63
|
+
clearCurrentSession(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Get all sessions
|
|
66
|
+
*/
|
|
67
|
+
getAllSessions(): SessionData[];
|
|
68
|
+
/**
|
|
69
|
+
* Add conversation to current session
|
|
70
|
+
*/
|
|
71
|
+
addConversation(conversation: Conversation): void;
|
|
72
|
+
/**
|
|
73
|
+
* Get conversation by ID
|
|
74
|
+
*/
|
|
75
|
+
getConversation(conversationId: string): Conversation | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Get all conversations in current session
|
|
78
|
+
*/
|
|
79
|
+
getAllConversations(): Conversation[];
|
|
80
|
+
/**
|
|
81
|
+
* Delete conversation
|
|
82
|
+
*/
|
|
83
|
+
deleteConversation(conversationId: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Update conversation
|
|
86
|
+
*/
|
|
87
|
+
updateConversation(conversation: Conversation): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Get session statistics
|
|
90
|
+
*/
|
|
91
|
+
getSessionStats(): {
|
|
92
|
+
total_sessions: number;
|
|
93
|
+
active_session?: string;
|
|
94
|
+
total_conversations: number;
|
|
95
|
+
total_tokens: number;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Clean up expired sessions
|
|
99
|
+
*/
|
|
100
|
+
cleanupExpiredSessions(): number;
|
|
101
|
+
/**
|
|
102
|
+
* Generate unique session ID
|
|
103
|
+
*/
|
|
104
|
+
private generateSessionId;
|
|
105
|
+
/**
|
|
106
|
+
* Utility function for delays
|
|
107
|
+
*/
|
|
108
|
+
/**
|
|
109
|
+
* Clean up resources
|
|
110
|
+
*/
|
|
111
|
+
destroy(): void;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/services/chatgpt/session-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAe,sBAAsB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,eAAe,CAAC,CAAiB;gBAE7B,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa;IAc3D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAwCpF;;OAEG;YACW,uBAAuB;IA8BrC;;OAEG;YACW,aAAa;IAuB3B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IA4BxC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,iBAAiB,IAAI,WAAW,GAAG,SAAS;IAO5C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IA8BzC;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAe3B;;OAEG;IACH,cAAc,IAAI,WAAW,EAAE;IAI/B;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAUjD;;OAEG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAQjE;;OAEG;IACH,mBAAmB,IAAI,YAAY,EAAE;IAQrC;;OAEG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAenD;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO;IAgBvD;;OAEG;IACH,eAAe,IAAI;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;KACtB;IAiBD;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAkBhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IAKH;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ChatGPT Session Manager
|
|
4
|
+
* Handles user authentication, session management, and token refresh
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.ChatGPTSessionManager = void 0;
|
|
41
|
+
const types_1 = require("./types");
|
|
42
|
+
const events_1 = require("events");
|
|
43
|
+
const crypto = __importStar(require("crypto"));
|
|
44
|
+
class ChatGPTSessionManager extends events_1.EventEmitter {
|
|
45
|
+
client;
|
|
46
|
+
config;
|
|
47
|
+
sessions = new Map();
|
|
48
|
+
currentSessionId;
|
|
49
|
+
refreshInterval;
|
|
50
|
+
constructor(client, config) {
|
|
51
|
+
super();
|
|
52
|
+
this.client = client;
|
|
53
|
+
this.config = config;
|
|
54
|
+
// Set up event listeners
|
|
55
|
+
this.setupEventListeners();
|
|
56
|
+
// Start session refresh interval if in authenticated mode
|
|
57
|
+
if (config.mode === types_1.ChatGPTMode.AUTHENTICATED) {
|
|
58
|
+
this.startSessionRefresh();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Set up event listeners
|
|
63
|
+
*/
|
|
64
|
+
setupEventListeners() {
|
|
65
|
+
this.client.on('auth:invalid', () => {
|
|
66
|
+
this.emit('session:expired');
|
|
67
|
+
this.clearCurrentSession();
|
|
68
|
+
});
|
|
69
|
+
this.client.on('error', (error) => {
|
|
70
|
+
this.emit('session:error', error);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Authenticate user (for authenticated mode)
|
|
75
|
+
*/
|
|
76
|
+
async authenticate(email, password) {
|
|
77
|
+
if (this.config.mode !== types_1.ChatGPTMode.AUTHENTICATED) {
|
|
78
|
+
throw new Error('Authentication only available in authenticated mode');
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
this.emit('auth:start');
|
|
82
|
+
// Use real ChatGPT authentication
|
|
83
|
+
const authResponse = await this.authenticateWithChatGPT(email, password);
|
|
84
|
+
if (authResponse.authenticated) {
|
|
85
|
+
// Create new session
|
|
86
|
+
const session = await this.createSession(authResponse);
|
|
87
|
+
this.currentSessionId = session.session_id;
|
|
88
|
+
// Update client configuration with tokens
|
|
89
|
+
this.client.updateConfig({
|
|
90
|
+
credentials: {
|
|
91
|
+
email,
|
|
92
|
+
password,
|
|
93
|
+
access_token: authResponse.access_token,
|
|
94
|
+
refresh_token: authResponse.refresh_token,
|
|
95
|
+
session_token: authResponse.session_token
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
this.emit('auth:success', authResponse);
|
|
99
|
+
this.emit('session:created', session);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this.emit('auth:failed', { email, reason: 'Invalid credentials' });
|
|
103
|
+
}
|
|
104
|
+
return authResponse;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
this.emit('auth:error', error);
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Authenticate with ChatGPT API
|
|
113
|
+
*/
|
|
114
|
+
async authenticateWithChatGPT(email, _password) {
|
|
115
|
+
try {
|
|
116
|
+
// Note: ChatGPT web interface uses a different authentication flow than the API
|
|
117
|
+
// For API access, users typically use API keys, not email/password
|
|
118
|
+
// For web access, we would need to simulate browser login
|
|
119
|
+
// For now, we'll support two modes:
|
|
120
|
+
// 1. API Key mode (recommended) - uses OpenAI API key
|
|
121
|
+
// 2. Web login mode (experimental) - would require browser automation
|
|
122
|
+
if (this.config.api_key) {
|
|
123
|
+
// API Key authentication
|
|
124
|
+
return {
|
|
125
|
+
authenticated: true,
|
|
126
|
+
user_id: 'api_user',
|
|
127
|
+
email,
|
|
128
|
+
access_token: this.config.api_key,
|
|
129
|
+
expires_in: 0 // API keys don't expire
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Web login would require browser automation (puppeteer/playwright)
|
|
134
|
+
// For now, we'll return an error
|
|
135
|
+
throw new Error('Web login not yet implemented. Please use API key authentication.');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
this.emit('auth:error', error);
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Create a new session
|
|
145
|
+
*/
|
|
146
|
+
async createSession(authResponse) {
|
|
147
|
+
const sessionId = this.generateSessionId();
|
|
148
|
+
const now = Date.now();
|
|
149
|
+
const expiresAt = now + (authResponse.expires_in || 3600) * 1000;
|
|
150
|
+
const session = {
|
|
151
|
+
session_id: sessionId,
|
|
152
|
+
user_id: authResponse.user_id,
|
|
153
|
+
email: authResponse.email,
|
|
154
|
+
access_token: authResponse.access_token,
|
|
155
|
+
refresh_token: authResponse.refresh_token,
|
|
156
|
+
session_token: authResponse.session_token,
|
|
157
|
+
expires_at: expiresAt,
|
|
158
|
+
created_at: now,
|
|
159
|
+
last_activity: now,
|
|
160
|
+
conversations: new Map(),
|
|
161
|
+
token_count: 0
|
|
162
|
+
};
|
|
163
|
+
this.sessions.set(sessionId, session);
|
|
164
|
+
return session;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Refresh session token
|
|
168
|
+
*/
|
|
169
|
+
async refreshSession() {
|
|
170
|
+
const session = this.getCurrentSession();
|
|
171
|
+
if (!session) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
this.emit('session:refresh:start');
|
|
176
|
+
// For API key authentication, there's no refresh needed
|
|
177
|
+
// API keys don't expire, just update last activity
|
|
178
|
+
if (session.access_token && session.access_token.startsWith('sk-')) {
|
|
179
|
+
session.last_activity = Date.now();
|
|
180
|
+
this.sessions.set(session.session_id, session);
|
|
181
|
+
this.emit('session:refreshed', session);
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
// For web login, we would need to refresh the session
|
|
185
|
+
// This is not implemented yet
|
|
186
|
+
this.emit('session:refresh:error', new Error('Session refresh not supported for web login'));
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
this.emit('session:refresh:error', error);
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Start automatic session refresh
|
|
196
|
+
*/
|
|
197
|
+
startSessionRefresh() {
|
|
198
|
+
if (this.refreshInterval) {
|
|
199
|
+
clearInterval(this.refreshInterval);
|
|
200
|
+
}
|
|
201
|
+
// Refresh 5 minutes before expiration
|
|
202
|
+
this.refreshInterval = setInterval(async () => {
|
|
203
|
+
const session = this.getCurrentSession();
|
|
204
|
+
if (session && session.expires_at) {
|
|
205
|
+
const timeUntilExpiry = session.expires_at - Date.now();
|
|
206
|
+
if (timeUntilExpiry < 5 * 60 * 1000) { // 5 minutes
|
|
207
|
+
await this.refreshSession();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}, 60 * 1000); // Check every minute
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get current session
|
|
214
|
+
*/
|
|
215
|
+
getCurrentSession() {
|
|
216
|
+
if (!this.currentSessionId) {
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
return this.sessions.get(this.currentSessionId);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Switch to a different session
|
|
223
|
+
*/
|
|
224
|
+
switchSession(sessionId) {
|
|
225
|
+
if (!this.sessions.has(sessionId)) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
const oldSessionId = this.currentSessionId;
|
|
229
|
+
this.currentSessionId = sessionId;
|
|
230
|
+
const session = this.sessions.get(sessionId);
|
|
231
|
+
// Update client with session tokens
|
|
232
|
+
this.client.updateConfig({
|
|
233
|
+
credentials: {
|
|
234
|
+
email: session.email || '',
|
|
235
|
+
password: '', // Password is not stored for security
|
|
236
|
+
access_token: session.access_token,
|
|
237
|
+
refresh_token: session.refresh_token,
|
|
238
|
+
session_token: session.session_token || ''
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
this.emit('session:switched', {
|
|
242
|
+
from: oldSessionId,
|
|
243
|
+
to: sessionId,
|
|
244
|
+
session
|
|
245
|
+
});
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Clear current session
|
|
250
|
+
*/
|
|
251
|
+
clearCurrentSession() {
|
|
252
|
+
if (this.currentSessionId) {
|
|
253
|
+
const session = this.sessions.get(this.currentSessionId);
|
|
254
|
+
this.sessions.delete(this.currentSessionId);
|
|
255
|
+
this.currentSessionId = undefined;
|
|
256
|
+
// Clear client credentials
|
|
257
|
+
this.client.updateConfig({
|
|
258
|
+
credentials: undefined
|
|
259
|
+
});
|
|
260
|
+
this.emit('session:cleared', session);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get all sessions
|
|
265
|
+
*/
|
|
266
|
+
getAllSessions() {
|
|
267
|
+
return Array.from(this.sessions.values());
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Add conversation to current session
|
|
271
|
+
*/
|
|
272
|
+
addConversation(conversation) {
|
|
273
|
+
const session = this.getCurrentSession();
|
|
274
|
+
if (session) {
|
|
275
|
+
session.conversations.set(conversation.id, conversation);
|
|
276
|
+
session.last_activity = Date.now();
|
|
277
|
+
session.token_count += conversation.token_count;
|
|
278
|
+
this.emit('conversation:added', { sessionId: session.session_id, conversation });
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Get conversation by ID
|
|
283
|
+
*/
|
|
284
|
+
getConversation(conversationId) {
|
|
285
|
+
const session = this.getCurrentSession();
|
|
286
|
+
if (session) {
|
|
287
|
+
return session.conversations.get(conversationId);
|
|
288
|
+
}
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Get all conversations in current session
|
|
293
|
+
*/
|
|
294
|
+
getAllConversations() {
|
|
295
|
+
const session = this.getCurrentSession();
|
|
296
|
+
if (session) {
|
|
297
|
+
return Array.from(session.conversations.values());
|
|
298
|
+
}
|
|
299
|
+
return [];
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Delete conversation
|
|
303
|
+
*/
|
|
304
|
+
deleteConversation(conversationId) {
|
|
305
|
+
const session = this.getCurrentSession();
|
|
306
|
+
if (session) {
|
|
307
|
+
const conversation = session.conversations.get(conversationId);
|
|
308
|
+
if (conversation) {
|
|
309
|
+
session.conversations.delete(conversationId);
|
|
310
|
+
session.token_count -= conversation.token_count;
|
|
311
|
+
session.last_activity = Date.now();
|
|
312
|
+
this.emit('conversation:deleted', { sessionId: session.session_id, conversationId });
|
|
313
|
+
return true;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Update conversation
|
|
320
|
+
*/
|
|
321
|
+
updateConversation(conversation) {
|
|
322
|
+
const session = this.getCurrentSession();
|
|
323
|
+
if (session) {
|
|
324
|
+
const oldConversation = session.conversations.get(conversation.id);
|
|
325
|
+
if (oldConversation) {
|
|
326
|
+
session.token_count -= oldConversation.token_count;
|
|
327
|
+
session.token_count += conversation.token_count;
|
|
328
|
+
}
|
|
329
|
+
session.conversations.set(conversation.id, conversation);
|
|
330
|
+
session.last_activity = Date.now();
|
|
331
|
+
this.emit('conversation:updated', { sessionId: session.session_id, conversation });
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Get session statistics
|
|
338
|
+
*/
|
|
339
|
+
getSessionStats() {
|
|
340
|
+
let totalConversations = 0;
|
|
341
|
+
let totalTokens = 0;
|
|
342
|
+
this.sessions.forEach(session => {
|
|
343
|
+
totalConversations += session.conversations.size;
|
|
344
|
+
totalTokens += session.token_count;
|
|
345
|
+
});
|
|
346
|
+
return {
|
|
347
|
+
total_sessions: this.sessions.size,
|
|
348
|
+
active_session: this.currentSessionId,
|
|
349
|
+
total_conversations: totalConversations,
|
|
350
|
+
total_tokens: totalTokens
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Clean up expired sessions
|
|
355
|
+
*/
|
|
356
|
+
cleanupExpiredSessions() {
|
|
357
|
+
const now = Date.now();
|
|
358
|
+
let cleanedCount = 0;
|
|
359
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
360
|
+
if (session.expires_at < now) {
|
|
361
|
+
this.sessions.delete(sessionId);
|
|
362
|
+
if (this.currentSessionId === sessionId) {
|
|
363
|
+
this.currentSessionId = undefined;
|
|
364
|
+
}
|
|
365
|
+
cleanedCount++;
|
|
366
|
+
this.emit('session:expired:cleanup', session);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return cleanedCount;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Generate unique session ID
|
|
373
|
+
*/
|
|
374
|
+
generateSessionId() {
|
|
375
|
+
return `sess_${crypto.randomBytes(12).toString('hex')}`;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Utility function for delays
|
|
379
|
+
*/
|
|
380
|
+
// private delay(ms: number): Promise<void> {
|
|
381
|
+
// return new Promise(resolve => setTimeout(resolve, ms));
|
|
382
|
+
// }
|
|
383
|
+
/**
|
|
384
|
+
* Clean up resources
|
|
385
|
+
*/
|
|
386
|
+
destroy() {
|
|
387
|
+
if (this.refreshInterval) {
|
|
388
|
+
clearInterval(this.refreshInterval);
|
|
389
|
+
}
|
|
390
|
+
this.sessions.clear();
|
|
391
|
+
this.removeAllListeners();
|
|
392
|
+
this.emit('manager:destroyed');
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
exports.ChatGPTSessionManager = ChatGPTSessionManager;
|
|
396
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/services/chatgpt/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChatGPT API Types and Interfaces
|
|
3
|
+
*/
|
|
4
|
+
export declare enum ChatGPTMode {
|
|
5
|
+
PUBLIC = "public",
|
|
6
|
+
AUTHENTICATED = "authenticated"
|
|
7
|
+
}
|
|
8
|
+
export declare enum ChatGPTModel {
|
|
9
|
+
GPT4 = "gpt-4",
|
|
10
|
+
GPT4_TURBO = "gpt-4-turbo-preview",
|
|
11
|
+
GPT35_TURBO = "gpt-3.5-turbo",
|
|
12
|
+
GPT35_TURBO_16K = "gpt-3.5-turbo-16k"
|
|
13
|
+
}
|
|
14
|
+
export interface ChatGPTConfig {
|
|
15
|
+
mode: ChatGPTMode;
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
base_url: string;
|
|
18
|
+
api_key?: string;
|
|
19
|
+
organization_id?: string;
|
|
20
|
+
model: ChatGPTModel;
|
|
21
|
+
max_tokens: number;
|
|
22
|
+
temperature: number;
|
|
23
|
+
top_p: number;
|
|
24
|
+
frequency_penalty: number;
|
|
25
|
+
presence_penalty: number;
|
|
26
|
+
timeout: number;
|
|
27
|
+
max_retries: number;
|
|
28
|
+
retry_delay: number;
|
|
29
|
+
credentials?: {
|
|
30
|
+
email: string;
|
|
31
|
+
password: string;
|
|
32
|
+
session_token?: string;
|
|
33
|
+
access_token?: string;
|
|
34
|
+
refresh_token?: string;
|
|
35
|
+
};
|
|
36
|
+
requests_per_minute: number;
|
|
37
|
+
tokens_per_minute: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ChatMessage {
|
|
40
|
+
role: 'system' | 'user' | 'assistant';
|
|
41
|
+
content: string;
|
|
42
|
+
name?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface ChatCompletionRequest {
|
|
45
|
+
model: ChatGPTModel;
|
|
46
|
+
messages: ChatMessage[];
|
|
47
|
+
max_tokens?: number;
|
|
48
|
+
temperature?: number;
|
|
49
|
+
top_p?: number;
|
|
50
|
+
frequency_penalty?: number;
|
|
51
|
+
presence_penalty?: number;
|
|
52
|
+
stream?: boolean;
|
|
53
|
+
stop?: string | string[];
|
|
54
|
+
user?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface ChatCompletionResponse {
|
|
57
|
+
id: string;
|
|
58
|
+
object: string;
|
|
59
|
+
created: number;
|
|
60
|
+
model: string;
|
|
61
|
+
choices: Array<{
|
|
62
|
+
index: number;
|
|
63
|
+
message: ChatMessage;
|
|
64
|
+
finish_reason: string;
|
|
65
|
+
}>;
|
|
66
|
+
usage: {
|
|
67
|
+
prompt_tokens: number;
|
|
68
|
+
completion_tokens: number;
|
|
69
|
+
total_tokens: number;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export interface Conversation {
|
|
73
|
+
id: string;
|
|
74
|
+
title: string;
|
|
75
|
+
created_at: number;
|
|
76
|
+
updated_at: number;
|
|
77
|
+
messages: ChatMessage[];
|
|
78
|
+
model: ChatGPTModel;
|
|
79
|
+
token_count: number;
|
|
80
|
+
}
|
|
81
|
+
export interface AuthenticationResponse {
|
|
82
|
+
authenticated: boolean;
|
|
83
|
+
user_id?: string;
|
|
84
|
+
email?: string;
|
|
85
|
+
access_token?: string;
|
|
86
|
+
refresh_token?: string;
|
|
87
|
+
expires_in?: number;
|
|
88
|
+
session_token?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface UsageStats {
|
|
91
|
+
total_tokens: number;
|
|
92
|
+
prompt_tokens: number;
|
|
93
|
+
completion_tokens: number;
|
|
94
|
+
requests: number;
|
|
95
|
+
rate_limited: boolean;
|
|
96
|
+
last_reset: number;
|
|
97
|
+
}
|
|
98
|
+
export interface ErrorResponse {
|
|
99
|
+
error: {
|
|
100
|
+
message: string;
|
|
101
|
+
type: string;
|
|
102
|
+
param: string | null;
|
|
103
|
+
code: string;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export interface RateLimitInfo {
|
|
107
|
+
limit: number;
|
|
108
|
+
remaining: number;
|
|
109
|
+
reset: number;
|
|
110
|
+
used: number;
|
|
111
|
+
}
|
|
112
|
+
export interface APIConfig {
|
|
113
|
+
baseURL: string;
|
|
114
|
+
timeout: number;
|
|
115
|
+
headers: Record<string, string>;
|
|
116
|
+
maxRedirects: number;
|
|
117
|
+
maxContentLength: number;
|
|
118
|
+
maxBodyLength: number;
|
|
119
|
+
}
|
|
120
|
+
export interface RequestOptions {
|
|
121
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
122
|
+
url: string;
|
|
123
|
+
data?: any;
|
|
124
|
+
params?: Record<string, any>;
|
|
125
|
+
headers?: Record<string, string>;
|
|
126
|
+
timeout?: number;
|
|
127
|
+
retry?: boolean;
|
|
128
|
+
maxRetries?: number;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/chatgpt/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ChatGPT API Types and Interfaces
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ChatGPTModel = exports.ChatGPTMode = void 0;
|
|
7
|
+
var ChatGPTMode;
|
|
8
|
+
(function (ChatGPTMode) {
|
|
9
|
+
ChatGPTMode["PUBLIC"] = "public";
|
|
10
|
+
ChatGPTMode["AUTHENTICATED"] = "authenticated";
|
|
11
|
+
})(ChatGPTMode || (exports.ChatGPTMode = ChatGPTMode = {}));
|
|
12
|
+
var ChatGPTModel;
|
|
13
|
+
(function (ChatGPTModel) {
|
|
14
|
+
ChatGPTModel["GPT4"] = "gpt-4";
|
|
15
|
+
ChatGPTModel["GPT4_TURBO"] = "gpt-4-turbo-preview";
|
|
16
|
+
ChatGPTModel["GPT35_TURBO"] = "gpt-3.5-turbo";
|
|
17
|
+
ChatGPTModel["GPT35_TURBO_16K"] = "gpt-3.5-turbo-16k";
|
|
18
|
+
})(ChatGPTModel || (exports.ChatGPTModel = ChatGPTModel = {}));
|
|
19
|
+
//# sourceMappingURL=types.js.map
|