@hongymagic/q 0.3.1 → 0.3.2
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/README.md +1 -1
- package/dist/q.js +58 -11
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -105,7 +105,7 @@ provider_api_key_env = "PROVIDER_API_KEY"
|
|
|
105
105
|
| `provider_slug` | Provider identifier (maps to `x-portkey-provider` header) |
|
|
106
106
|
| `api_key_env` | Environment variable for Portkey API key (maps to `x-portkey-api-key` header) |
|
|
107
107
|
| `provider_api_key_env` | Environment variable for underlying provider's API key (maps to `Authorization` header) |
|
|
108
|
-
| `headers` | Additional custom headers (supports
|
|
108
|
+
| `headers` | Additional custom headers (supports env var interpolation for allowlisted vars) |
|
|
109
109
|
|
|
110
110
|
**Environment variables:**
|
|
111
111
|
|
package/dist/q.js
CHANGED
|
@@ -27262,14 +27262,37 @@ ${formatZodErrors(result.error)}`);
|
|
|
27262
27262
|
return result;
|
|
27263
27263
|
}
|
|
27264
27264
|
static interpolate(value) {
|
|
27265
|
-
return value
|
|
27266
|
-
|
|
27267
|
-
|
|
27268
|
-
|
|
27269
|
-
|
|
27270
|
-
|
|
27271
|
-
|
|
27272
|
-
|
|
27265
|
+
return interpolateValue(value);
|
|
27266
|
+
}
|
|
27267
|
+
}
|
|
27268
|
+
var ALLOWED_INTERPOLATION_VARS = new Set([
|
|
27269
|
+
"ANTHROPIC_API_KEY",
|
|
27270
|
+
"OPENAI_API_KEY",
|
|
27271
|
+
"PORTKEY_API_KEY",
|
|
27272
|
+
"ANTHROPIC_BASE_URL",
|
|
27273
|
+
"OPENAI_BASE_URL",
|
|
27274
|
+
"PORTKEY_BASE_URL",
|
|
27275
|
+
"PORTKEY_PROVIDER",
|
|
27276
|
+
"HTTP_PROXY",
|
|
27277
|
+
"HTTPS_PROXY",
|
|
27278
|
+
"NO_PROXY",
|
|
27279
|
+
"HOME",
|
|
27280
|
+
"USER",
|
|
27281
|
+
"HOSTNAME"
|
|
27282
|
+
]);
|
|
27283
|
+
function interpolateValue(value) {
|
|
27284
|
+
return value.replace(/\$\{([^}]+)\}/g, (_, varName) => {
|
|
27285
|
+
if (!ALLOWED_INTERPOLATION_VARS.has(varName)) {
|
|
27286
|
+
const allowedList = Array.from(ALLOWED_INTERPOLATION_VARS).join(", ");
|
|
27287
|
+
throw new ConfigValidationError(`Environment variable '${varName}' is not allowed for interpolation.
|
|
27288
|
+
` + `Allowed variables: ${allowedList}`);
|
|
27289
|
+
}
|
|
27290
|
+
const envValue = process.env[varName];
|
|
27291
|
+
if (envValue === undefined) {
|
|
27292
|
+
throw new ConfigValidationError(`Environment variable '${varName}' referenced in config but not set`);
|
|
27293
|
+
}
|
|
27294
|
+
return envValue;
|
|
27295
|
+
});
|
|
27273
27296
|
}
|
|
27274
27297
|
async function loadConfig() {
|
|
27275
27298
|
return Config.load();
|
|
@@ -27314,7 +27337,7 @@ api_key_env = "OPENAI_API_KEY"
|
|
|
27314
27337
|
# provider_slug = "@your-org/bedrock-provider"
|
|
27315
27338
|
# api_key_env = "PORTKEY_API_KEY"
|
|
27316
27339
|
# provider_api_key_env = "PROVIDER_API_KEY"
|
|
27317
|
-
# headers = { "x-
|
|
27340
|
+
# headers = { "x-portkey-trace-id" = "\${HOSTNAME}" } # Only allowlisted env vars
|
|
27318
27341
|
|
|
27319
27342
|
# Example: Ollama (local models)
|
|
27320
27343
|
# [providers.ollama]
|
|
@@ -27424,6 +27447,12 @@ class QError2 extends Error {
|
|
|
27424
27447
|
this.name = "QError";
|
|
27425
27448
|
}
|
|
27426
27449
|
}
|
|
27450
|
+
class UsageError2 extends QError2 {
|
|
27451
|
+
constructor(message) {
|
|
27452
|
+
super(message, 2);
|
|
27453
|
+
this.name = "UsageError";
|
|
27454
|
+
}
|
|
27455
|
+
}
|
|
27427
27456
|
function logError2(message) {
|
|
27428
27457
|
console.error(message);
|
|
27429
27458
|
}
|
|
@@ -46196,6 +46225,20 @@ function createPortkeyProvider(config2, providerName, debug = false) {
|
|
|
46196
46225
|
}
|
|
46197
46226
|
|
|
46198
46227
|
// src/providers/index.ts
|
|
46228
|
+
var SENSITIVE_FIELD_PATTERNS = [
|
|
46229
|
+
"key",
|
|
46230
|
+
"secret",
|
|
46231
|
+
"token",
|
|
46232
|
+
"password",
|
|
46233
|
+
"auth",
|
|
46234
|
+
"credential"
|
|
46235
|
+
];
|
|
46236
|
+
function filterSensitiveFields(config2) {
|
|
46237
|
+
return Object.fromEntries(Object.entries(config2).filter(([key]) => {
|
|
46238
|
+
const lowerKey = key.toLowerCase();
|
|
46239
|
+
return !SENSITIVE_FIELD_PATTERNS.some((pattern) => lowerKey.includes(pattern));
|
|
46240
|
+
}));
|
|
46241
|
+
}
|
|
46199
46242
|
function resolveProvider(config2, providerOverride, modelOverride, debug = false) {
|
|
46200
46243
|
const providerName = providerOverride ?? config2.default.provider;
|
|
46201
46244
|
const providerConfig = config2.providers[providerName];
|
|
@@ -46203,7 +46246,7 @@ function resolveProvider(config2, providerOverride, modelOverride, debug = false
|
|
|
46203
46246
|
throw new ProviderNotFoundError(providerName);
|
|
46204
46247
|
}
|
|
46205
46248
|
const modelId = modelOverride ?? config2.default.model;
|
|
46206
|
-
logDebug(`Provider config: ${JSON.stringify(providerConfig, null, 2)}`, debug);
|
|
46249
|
+
logDebug(`Provider config: ${JSON.stringify(filterSensitiveFields(providerConfig), null, 2)}`, debug);
|
|
46207
46250
|
const model = createModel(providerConfig, providerName, modelId, debug);
|
|
46208
46251
|
return {
|
|
46209
46252
|
model,
|
|
@@ -54509,11 +54552,15 @@ async function main() {
|
|
|
54509
54552
|
console.log(listProviders(config3));
|
|
54510
54553
|
process.exit(0);
|
|
54511
54554
|
}
|
|
54555
|
+
const query = args.query.join(" ");
|
|
54556
|
+
const MAX_QUERY_LENGTH = 5000;
|
|
54557
|
+
if (query.length > MAX_QUERY_LENGTH) {
|
|
54558
|
+
throw new UsageError2(`Query too long (${query.length} characters). Maximum is ${MAX_QUERY_LENGTH}.`);
|
|
54559
|
+
}
|
|
54512
54560
|
logDebug2("Loading config...", debug);
|
|
54513
54561
|
const config2 = await loadConfig();
|
|
54514
54562
|
logDebug2(`Resolving provider: ${args.options.provider ?? config2.default.provider}`, debug);
|
|
54515
54563
|
const { model, providerName, modelId } = resolveProvider(config2, args.options.provider, args.options.model, debug);
|
|
54516
|
-
const query = args.query.join(" ");
|
|
54517
54564
|
const envInfo = getEnvironmentInfo();
|
|
54518
54565
|
logDebug2(`Query: ${query}`, debug);
|
|
54519
54566
|
logDebug2(`Provider: ${providerName}, Model: ${modelId}`, debug);
|