Upload server.js
Browse files
server.js
CHANGED
|
@@ -130,7 +130,6 @@ app.use((req, res, next) => {
|
|
| 130 |
});
|
| 131 |
|
| 132 |
// ββ In-RAM key pool βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 133 |
-
// Populated by Cloudflare via POST /gss-internal/sync-keys OR cold-start pull
|
| 134 |
let keyPool = [];
|
| 135 |
let rrCursor = 0;
|
| 136 |
|
|
@@ -140,10 +139,20 @@ function loadKeys(keys) {
|
|
| 140 |
console.log(`[GSS] ${keyPool.length} keys loaded into RAM`);
|
| 141 |
}
|
| 142 |
|
| 143 |
-
// ββ
|
| 144 |
-
//
|
| 145 |
-
|
| 146 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
|
| 148 |
/** Round-robin pick β skips keys in cooldown (60s after 429) */
|
| 149 |
function pickKey() {
|
|
|
|
| 130 |
});
|
| 131 |
|
| 132 |
// ββ In-RAM key pool βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
|
|
| 133 |
let keyPool = [];
|
| 134 |
let rrCursor = 0;
|
| 135 |
|
|
|
|
| 139 |
console.log(`[GSS] ${keyPool.length} keys loaded into RAM`);
|
| 140 |
}
|
| 141 |
|
| 142 |
+
// ββ Load keys from HF env var (no network, instant) ββββββββββββββββββββββββββ
|
| 143 |
+
// Set GROQ_KEYS in HF Space secrets as comma-separated: gsk_key1,gsk_key2,...
|
| 144 |
+
function loadKeysFromEnv() {
|
| 145 |
+
const raw = process.env.GROQ_KEYS || '';
|
| 146 |
+
const keys = raw.split(',').map(k => k.trim()).filter(Boolean);
|
| 147 |
+
if (keys.length && keys.length !== keyPool.length) {
|
| 148 |
+
loadKeys(keys);
|
| 149 |
+
console.log(`[GSS] Loaded ${keys.length} keys from GROQ_KEYS env var`);
|
| 150 |
+
}
|
| 151 |
+
}
|
| 152 |
+
|
| 153 |
+
// Load immediately, then re-check every 5s (picks up env var changes without restart)
|
| 154 |
+
loadKeysFromEnv();
|
| 155 |
+
setInterval(loadKeysFromEnv, 5000);
|
| 156 |
|
| 157 |
/** Round-robin pick β skips keys in cooldown (60s after 429) */
|
| 158 |
function pickKey() {
|