promptbridge 1.0.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 (57) hide show
  1. package/dist/cli.d.ts +2 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +4 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/functions/app.d.ts +2 -0
  6. package/dist/functions/app.d.ts.map +1 -0
  7. package/dist/functions/app.js +80 -0
  8. package/dist/functions/app.js.map +1 -0
  9. package/dist/functions/browser.d.ts +6 -0
  10. package/dist/functions/browser.d.ts.map +1 -0
  11. package/dist/functions/browser.js +116 -0
  12. package/dist/functions/browser.js.map +1 -0
  13. package/dist/functions/chatbot.d.ts +2 -0
  14. package/dist/functions/chatbot.d.ts.map +1 -0
  15. package/dist/functions/chatbot.js +178 -0
  16. package/dist/functions/chatbot.js.map +1 -0
  17. package/dist/functions/config.d.ts +17 -0
  18. package/dist/functions/config.d.ts.map +1 -0
  19. package/dist/functions/config.js +20 -0
  20. package/dist/functions/config.js.map +1 -0
  21. package/dist/functions/db.d.ts +3 -0
  22. package/dist/functions/db.d.ts.map +1 -0
  23. package/dist/functions/db.js +6 -0
  24. package/dist/functions/db.js.map +1 -0
  25. package/dist/functions/queue.d.ts +2 -0
  26. package/dist/functions/queue.d.ts.map +1 -0
  27. package/dist/functions/queue.js +92 -0
  28. package/dist/functions/queue.js.map +1 -0
  29. package/dist/functions/routes.d.ts +2 -0
  30. package/dist/functions/routes.d.ts.map +1 -0
  31. package/dist/functions/routes.js +182 -0
  32. package/dist/functions/routes.js.map +1 -0
  33. package/dist/functions/session.d.ts +3 -0
  34. package/dist/functions/session.d.ts.map +1 -0
  35. package/dist/functions/session.js +69 -0
  36. package/dist/functions/session.js.map +1 -0
  37. package/dist/functions/state.d.ts +3 -0
  38. package/dist/functions/state.d.ts.map +1 -0
  39. package/dist/functions/state.js +17 -0
  40. package/dist/functions/state.js.map +1 -0
  41. package/dist/functions/types.d.ts +30 -0
  42. package/dist/functions/types.d.ts.map +1 -0
  43. package/dist/functions/types.js +3 -0
  44. package/dist/functions/types.js.map +1 -0
  45. package/dist/functions/utils.d.ts +2 -0
  46. package/dist/functions/utils.d.ts.map +1 -0
  47. package/dist/functions/utils.js +21 -0
  48. package/dist/functions/utils.js.map +1 -0
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +27 -0
  52. package/dist/index.js.map +1 -0
  53. package/package.json +59 -0
  54. package/public/assets/index-Bydik9KB.js +175 -0
  55. package/public/assets/index-DphI_DG8.css +1 -0
  56. package/public/index.html +14 -0
  57. package/public/vite.svg +1 -0
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.setupRoutes = void 0;
7
+ const state_1 = require("./state");
8
+ const session_1 = require("./session");
9
+ const browser_1 = require("./browser");
10
+ const queue_1 = require("./queue");
11
+ const db_1 = require("./db");
12
+ const crypto_1 = __importDefault(require("crypto"));
13
+ const setupRoutes = () => {
14
+ // Health check endpoint
15
+ state_1.state.app.get('/health', (req, res) => {
16
+ res.json({
17
+ status: 'ok',
18
+ initialized: state_1.state.isInitialized,
19
+ queueLength: state_1.state.requestQueue.length
20
+ });
21
+ });
22
+ // Chat endpoint
23
+ state_1.state.app.post('/chat', async (req, res) => {
24
+ const { prompt } = req.body;
25
+ if (!prompt || typeof prompt !== 'string') {
26
+ res.status(400).json({ error: 'Missing or invalid prompt' });
27
+ return;
28
+ }
29
+ if (!state_1.state.isInitialized) {
30
+ res.status(503).json({ error: 'Service not ready', details: 'Browser not initialized' });
31
+ return;
32
+ }
33
+ // Log request to DB
34
+ let dbRequestId = '';
35
+ try {
36
+ const apiReq = await db_1.db.apiRequest.create({
37
+ data: {
38
+ prompt,
39
+ status: 'Queued',
40
+ apiKeyId: req.apiKeyId || null
41
+ }
42
+ });
43
+ dbRequestId = apiReq.id;
44
+ }
45
+ catch (err) {
46
+ console.error('Failed to log request to DB:', err);
47
+ }
48
+ // Add to queue
49
+ const queuePosition = state_1.state.requestQueue.length + 1;
50
+ state_1.state.requestQueue.push({ req, res, dbRequestId });
51
+ console.log(`[API] Request received. Queue position: ${queuePosition}`);
52
+ if (!state_1.state.isProcessing) {
53
+ (0, queue_1.processQueue)();
54
+ }
55
+ else {
56
+ console.log(`[API] Processing another request. Request queued at position ${queuePosition}.`);
57
+ }
58
+ });
59
+ // Admin: save session
60
+ state_1.state.app.post('/admin/save-session', async (req, res) => {
61
+ try {
62
+ await (0, session_1.saveSession)();
63
+ res.json({ message: 'Session saved successfully' });
64
+ }
65
+ catch (error) {
66
+ console.error('Failed to save session:', error);
67
+ res.status(500).json({ error: 'Failed to save session' });
68
+ }
69
+ });
70
+ // Admin: start browser logic
71
+ state_1.state.app.post('/admin/start', async (req, res) => {
72
+ try {
73
+ await (0, browser_1.startBrowser)();
74
+ res.json({ message: 'API Logic started successfully' });
75
+ }
76
+ catch (error) {
77
+ console.error('Failed to start browser:', error);
78
+ res.status(500).json({ error: 'Failed to start API Logic' });
79
+ }
80
+ });
81
+ // Admin: stop browser logic
82
+ state_1.state.app.post('/admin/stop', async (req, res) => {
83
+ try {
84
+ await (0, browser_1.stopBrowser)();
85
+ res.json({ message: 'API Logic stopped successfully' });
86
+ // Kill the backend process completely as requested by user
87
+ setTimeout(() => {
88
+ console.log('Terminating backend process...');
89
+ process.exit(0);
90
+ }, 500);
91
+ }
92
+ catch (error) {
93
+ console.error('Failed to stop browser:', error);
94
+ res.status(500).json({ error: 'Failed to stop API Logic' });
95
+ }
96
+ });
97
+ // Admin: get status
98
+ state_1.state.app.get('/admin/status', async (req, res) => {
99
+ try {
100
+ const twentyFourHoursAgo = new Date(Date.now() - 24 * 60 * 60 * 1000);
101
+ const totalRequests24h = await db_1.db.apiRequest.count({
102
+ where: { createdAt: { gte: twentyFourHoursAgo } }
103
+ });
104
+ res.json({
105
+ isActive: state_1.state.isActive,
106
+ initialized: state_1.state.isInitialized,
107
+ queueLength: state_1.state.requestQueue.length,
108
+ browserActive: !!state_1.state.browser,
109
+ pageActive: !!state_1.state.page,
110
+ totalRequests24h
111
+ });
112
+ }
113
+ catch (error) {
114
+ // Fallback if DB fails
115
+ res.json({
116
+ isActive: state_1.state.isActive,
117
+ initialized: state_1.state.isInitialized,
118
+ queueLength: state_1.state.requestQueue.length,
119
+ browserActive: !!state_1.state.browser,
120
+ pageActive: !!state_1.state.page,
121
+ totalRequests24h: 0
122
+ });
123
+ }
124
+ });
125
+ // Admin: get recent analytics
126
+ state_1.state.app.get('/admin/analytics', async (req, res) => {
127
+ try {
128
+ const logs = await db_1.db.apiRequest.findMany({
129
+ orderBy: { createdAt: 'desc' },
130
+ take: 10
131
+ });
132
+ res.json({ logs });
133
+ }
134
+ catch (error) {
135
+ res.status(500).json({ error: 'Failed to fetch analytics' });
136
+ }
137
+ });
138
+ // Admin: list api keys
139
+ state_1.state.app.get('/admin/api-keys', async (req, res) => {
140
+ try {
141
+ const keys = await db_1.db.apiKey.findMany({
142
+ orderBy: { createdAt: 'desc' }
143
+ });
144
+ res.json(keys);
145
+ }
146
+ catch (error) {
147
+ res.status(500).json({ error: 'Failed to fetch API keys' });
148
+ }
149
+ });
150
+ // Admin: generate api key
151
+ state_1.state.app.post('/admin/api-keys', async (req, res) => {
152
+ try {
153
+ const { owner } = req.body;
154
+ const newKey = `pb_${crypto_1.default.randomBytes(16).toString('hex')}`;
155
+ const apiKey = await db_1.db.apiKey.create({
156
+ data: {
157
+ key: newKey,
158
+ owner: owner || 'Admin'
159
+ }
160
+ });
161
+ res.json(apiKey);
162
+ }
163
+ catch (error) {
164
+ res.status(500).json({ error: 'Failed to generate API key' });
165
+ }
166
+ });
167
+ // Admin: delete api key
168
+ state_1.state.app.delete('/admin/api-keys/:id', async (req, res) => {
169
+ try {
170
+ const { id } = req.params;
171
+ await db_1.db.apiKey.delete({
172
+ where: { id: id }
173
+ });
174
+ res.json({ message: 'API key deleted successfully' });
175
+ }
176
+ catch (error) {
177
+ res.status(500).json({ error: 'Failed to delete API key' });
178
+ }
179
+ });
180
+ };
181
+ exports.setupRoutes = setupRoutes;
182
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/functions/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const saveSession: () => Promise<void>;
2
+ export declare const loadSession: () => Promise<boolean>;
3
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/functions/session.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAyBhD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,OAAO,CAwCnD,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadSession = exports.saveSession = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const state_1 = require("./state");
9
+ const config_1 = require("./config");
10
+ const saveSession = async () => {
11
+ if (!state_1.state.page) {
12
+ throw new Error('Browser page not initialized');
13
+ }
14
+ const cookies = await state_1.state.page.cookies();
15
+ const localStorageData = await state_1.state.page.evaluate(() => {
16
+ const data = {};
17
+ for (let i = 0; i < window.localStorage.length; i++) {
18
+ const key = window.localStorage.key(i);
19
+ if (key) {
20
+ data[key] = window.localStorage.getItem(key) || '';
21
+ }
22
+ }
23
+ return data;
24
+ });
25
+ const sessionData = {
26
+ cookies,
27
+ localStorage: localStorageData
28
+ };
29
+ await fs_extra_1.default.writeJSON(config_1.CONFIG.sessionFile, sessionData, { spaces: 2 });
30
+ console.log('Session saved successfully');
31
+ };
32
+ exports.saveSession = saveSession;
33
+ const loadSession = async () => {
34
+ try {
35
+ if (!state_1.state.page) {
36
+ throw new Error('Browser page not initialized');
37
+ }
38
+ const exists = await fs_extra_1.default.pathExists(config_1.CONFIG.sessionFile);
39
+ if (!exists) {
40
+ console.log('No saved session found, navigating without session...');
41
+ await state_1.state.page.goto(config_1.CONFIG.chatbotUrl, {
42
+ waitUntil: 'networkidle2',
43
+ timeout: config_1.CONFIG.timeouts.navigation
44
+ });
45
+ return false;
46
+ }
47
+ const sessionData = await fs_extra_1.default.readJSON(config_1.CONFIG.sessionFile);
48
+ // Navigate to the site before setting cookies
49
+ await state_1.state.page.goto(config_1.CONFIG.chatbotUrl, {
50
+ waitUntil: 'networkidle2',
51
+ timeout: config_1.CONFIG.timeouts.navigation
52
+ });
53
+ await state_1.state.page.setCookie(...sessionData.cookies);
54
+ await state_1.state.page.evaluate((storageData) => {
55
+ for (const [key, value] of Object.entries(storageData)) {
56
+ window.localStorage.setItem(key, value);
57
+ }
58
+ }, sessionData.localStorage);
59
+ await state_1.state.page.reload({ waitUntil: 'networkidle2' });
60
+ console.log('Session restored successfully');
61
+ return true;
62
+ }
63
+ catch (error) {
64
+ console.error('Failed to load session:', error);
65
+ return false;
66
+ }
67
+ };
68
+ exports.loadSession = loadSession;
69
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/functions/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AppState } from './types';
2
+ export declare const state: AppState;
3
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/functions/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,eAAO,MAAM,KAAK,EAAE,QAQnB,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.state = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ exports.state = {
9
+ app: (0, express_1.default)(),
10
+ browser: null,
11
+ page: null,
12
+ isInitialized: false,
13
+ isActive: true,
14
+ requestQueue: [],
15
+ isProcessing: false,
16
+ };
17
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/functions/state.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAGjB,QAAA,KAAK,GAAa;IAC3B,GAAG,EAAE,IAAA,iBAAO,GAAE;IACd,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,aAAa,EAAE,KAAK;IACpB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,KAAK;CACtB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { Cookie, Page, Browser } from 'puppeteer';
2
+ import { Request, Response, Application } from 'express';
3
+ export interface SessionData {
4
+ cookies: Cookie[];
5
+ localStorage: Record<string, string>;
6
+ }
7
+ export interface ChatRequest {
8
+ prompt: string;
9
+ }
10
+ export interface ChatResponse {
11
+ answer: string;
12
+ }
13
+ export interface ErrorResponse {
14
+ error: string;
15
+ details?: string;
16
+ }
17
+ export interface AppState {
18
+ app: Application;
19
+ browser: Browser | null;
20
+ page: Page | null;
21
+ isInitialized: boolean;
22
+ isActive: boolean;
23
+ requestQueue: Array<{
24
+ req: Request;
25
+ res: Response;
26
+ dbRequestId: string;
27
+ }>;
28
+ isProcessing: boolean;
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/functions/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEzD,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACrB,GAAG,EAAE,WAAW,CAAC;IACjB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,YAAY,EAAE,OAAO,CAAC;CACzB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/functions/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const formatResponseCode: (text: string) => string;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/functions/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,MAmBjD,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatResponseCode = void 0;
4
+ const formatResponseCode = (text) => {
5
+ // Some frontends or specific APIs (like compiling to python engines)
6
+ // want the literal \n sequence explicitly preserved as text rather than an actual invisible newline character.
7
+ // If we receive "Line 1\nLine 2", we convert it to "Line 1\\nLine 2".
8
+ let formatted = text;
9
+ // Aggressively strip ChatGPT UI labels that leak through DOM extraction
10
+ let changed = true;
11
+ while (changed) {
12
+ const before = formatted;
13
+ formatted = formatted.replace(/^[\s\r\n]*(Run|Python|Copy code|Copy)[\s\r\n]*/i, '');
14
+ changed = formatted !== before;
15
+ }
16
+ // Convert carriage returns too in case Windows encoding crept in
17
+ formatted = formatted.replace(/\r/g, '\\r');
18
+ return formatted;
19
+ };
20
+ exports.formatResponseCode = formatResponseCode;
21
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/functions/utils.ts"],"names":[],"mappings":";;;AAAO,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAU,EAAE;IACvD,sEAAsE;IACtE,+GAA+G;IAC/G,sEAAsE;IAEtE,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,wEAAwE;IACxE,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,SAAS,CAAC;QACzB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,iDAAiD,EAAE,EAAE,CAAC,CAAC;QACrF,OAAO,GAAG,SAAS,KAAK,MAAM,CAAC;IACnC,CAAC;IAED,iEAAiE;IACjE,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE5C,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAnBW,QAAA,kBAAkB,sBAmB7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const state_1 = require("./functions/state");
4
+ const app_1 = require("./functions/app");
5
+ const browser_1 = require("./functions/browser");
6
+ const config_1 = require("./functions/config");
7
+ const child_process_1 = require("child_process");
8
+ const start = async () => {
9
+ (0, app_1.setupApp)();
10
+ await (0, browser_1.initializeBrowser)();
11
+ state_1.state.app.listen(config_1.CONFIG.port, () => {
12
+ console.log(`🚀 Server running on port ${config_1.CONFIG.port}`);
13
+ console.log(`📝 Chatbot URL: ${config_1.CONFIG.chatbotUrl}`);
14
+ console.log(`🤖 Headless mode: ${config_1.CONFIG.headless}`);
15
+ // Automatically open the user's browser to the dashboard
16
+ const url = `http://localhost:${config_1.CONFIG.port}`;
17
+ const startCmd = process.platform === 'win32' ? 'start' : process.platform === 'darwin' ? 'open' : 'xdg-open';
18
+ (0, child_process_1.exec)(`${startCmd} ${url}`);
19
+ });
20
+ };
21
+ process.on('SIGTERM', () => (0, browser_1.shutdownBrowser)());
22
+ process.on('SIGINT', () => (0, browser_1.shutdownBrowser)());
23
+ start().catch(error => {
24
+ console.error('Failed to start service:', error);
25
+ process.exit(1);
26
+ });
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,6CAA0C;AAC1C,yCAA2C;AAC3C,iDAAyE;AACzE,+CAA4C;AAE5C,iDAAqC;AAErC,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;IACtC,IAAA,cAAQ,GAAE,CAAC;IAEX,MAAM,IAAA,2BAAiB,GAAE,CAAC;IAE1B,aAAK,CAAC,GAAG,CAAC,MAAM,CAAC,eAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,6BAA6B,eAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,mBAAmB,eAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,qBAAqB,eAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEpD,yDAAyD;QACzD,MAAM,GAAG,GAAG,oBAAoB,eAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9G,IAAA,oBAAI,EAAC,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAA,yBAAe,GAAE,CAAC,CAAC;AAC/C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,yBAAe,GAAE,CAAC,CAAC;AAE9C,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "promptbridge",
3
+ "version": "1.0.0",
4
+ "description": "no limit llm api?",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "promptbridge": "./dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist/",
11
+ "public/"
12
+ ],
13
+ "scripts": {
14
+ "test": "echo \"Error: no test specified\" && exit 1",
15
+ "build": "tsc && node -e \"require('fs-extra').copySync('../dist', 'public')\"",
16
+ "build:backend-only": "tsc",
17
+ "start": "node dist/index.js",
18
+ "dev": "nodemon --watch src src/index.ts",
19
+ "clean": "rm -rf dist",
20
+ "prebuild": "npm run clean"
21
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/Pranav-Kunjir/PromptBridge.git"
25
+ },
26
+ "keywords": [
27
+ "promptbridge",
28
+ "llm",
29
+ "proxy",
30
+ "cli"
31
+ ],
32
+ "author": "Pranav Kunjir",
33
+ "license": "MIT",
34
+ "type": "commonjs",
35
+ "bugs": {
36
+ "url": "https://github.com/Pranav-Kunjir/PromptBridge/issues"
37
+ },
38
+ "homepage": "https://github.com/Pranav-Kunjir/PromptBridge#readme",
39
+ "dependencies": {
40
+ "@prisma/client": "^6.19.2",
41
+ "cors": "^2.8.6",
42
+ "express": "^5.2.1",
43
+ "fs-extra": "^11.3.3",
44
+ "puppeteer": "^24.37.5",
45
+ "puppeteer-extra": "^3.3.6",
46
+ "puppeteer-extra-plugin-stealth": "^2.11.2"
47
+ },
48
+ "devDependencies": {
49
+ "@types/cors": "^2.8.19",
50
+ "@types/express": "^5.0.6",
51
+ "@types/fs-extra": "^11.0.4",
52
+ "@types/node": "^25.3.2",
53
+ "@types/puppeteer": "^5.4.7",
54
+ "nodemon": "^3.1.14",
55
+ "prisma": "^6.19.2",
56
+ "ts-node": "^10.9.2",
57
+ "typescript": "^5.9.3"
58
+ }
59
+ }