@juspay/neurolink 12.17.1 → 12.17.3
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/CHANGELOG.md +6 -2
- package/dist/browser/neurolink.min.js +430 -421
- package/dist/cli/commands/proxy.js +455 -259
- package/dist/constants/contextWindows.d.ts +2 -0
- package/dist/constants/contextWindows.js +4 -0
- package/dist/neurolink.js +8 -3
- package/dist/providers/openaiChatCompletionsBase.js +60 -51
- package/dist/proxy/anthropicBudgetResponse.d.ts +3 -0
- package/dist/proxy/anthropicBudgetResponse.js +153 -0
- package/dist/proxy/bodyCaptureProcessing.d.ts +1 -0
- package/dist/proxy/bodyCaptureProcessing.js +23 -4
- package/dist/proxy/bodyCaptureWorker.js +20 -2
- package/dist/proxy/codexFallback.d.ts +10 -0
- package/dist/proxy/codexFallback.js +108 -24
- package/dist/proxy/codexUsage.js +2 -0
- package/dist/proxy/globalInstaller.d.ts +32 -1
- package/dist/proxy/globalInstaller.js +386 -3
- package/dist/proxy/otelLogSink.d.ts +3 -3
- package/dist/proxy/otelLogSink.js +137 -144
- package/dist/proxy/otlpLogTransport.d.ts +3 -0
- package/dist/proxy/otlpLogTransport.js +334 -0
- package/dist/proxy/proxyActivity.d.ts +22 -2
- package/dist/proxy/proxyActivity.js +114 -9
- package/dist/proxy/proxyAnalysis.js +82 -52
- package/dist/proxy/proxyClientCancellation.d.ts +7 -0
- package/dist/proxy/proxyClientCancellation.js +23 -0
- package/dist/proxy/proxyContextPreflight.d.ts +25 -0
- package/dist/proxy/proxyContextPreflight.js +337 -0
- package/dist/proxy/proxyFailureDetails.d.ts +19 -0
- package/dist/proxy/proxyFailureDetails.js +96 -0
- package/dist/proxy/proxyLifecycle.js +7 -0
- package/dist/proxy/proxyRouteBodyCapture.d.ts +13 -0
- package/dist/proxy/proxyRouteBodyCapture.js +112 -0
- package/dist/proxy/proxyTokenBudget.d.ts +40 -0
- package/dist/proxy/proxyTokenBudget.js +523 -0
- package/dist/proxy/proxyTracer.d.ts +3 -2
- package/dist/proxy/proxyTracer.js +46 -20
- package/dist/proxy/proxyTranslationEngine.d.ts +8 -10
- package/dist/proxy/proxyTranslationEngine.js +736 -376
- package/dist/proxy/requestLogger.d.ts +1 -0
- package/dist/proxy/requestLogger.js +107 -5
- package/dist/proxy/restartControl.js +9 -4
- package/dist/proxy/rollingWorkerProcess.js +65 -0
- package/dist/proxy/rollingWorkerSupervisor.js +7 -0
- package/dist/proxy/updateCoordinator.d.ts +14 -1
- package/dist/proxy/updateCoordinator.js +57 -2
- package/dist/server/routes/claudeProxyRoutes.d.ts +4 -5
- package/dist/server/routes/claudeProxyRoutes.js +809 -577
- package/dist/server/routes/codexProxyRoutes.js +191 -9
- package/dist/server/routes/openaiProxyRoutes.d.ts +1 -1
- package/dist/server/routes/openaiProxyRoutes.js +261 -69
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/codex.d.ts +5 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/proxy.d.ts +148 -3
- package/dist/types/proxy.js +0 -15
- package/dist/types/proxyBudget.d.ts +74 -0
- package/dist/types/proxyBudget.js +1 -0
- package/dist/types/proxyContext.d.ts +35 -0
- package/dist/types/proxyContext.js +1 -0
- package/dist/utils/fileDetector.js +28 -7
- package/dist/utils/messageBuilder.js +51 -26
- package/dist/utils/pdfProcessor.js +26 -4
- package/docs/assets/dashboards/README.md +37 -0
- package/docs/assets/dashboards/neurolink-proxy-observability-dashboard.json +197 -89
- package/docs-site/static/search-index.json +1 -1
- package/package.json +7 -2
- package/scripts/observability/NATIVE-DURABLE.md +63 -0
- package/scripts/observability/otel-collector.proxy-native-durable.yaml +93 -0
- package/scripts/observability/proxy-telemetry-backend.mjs +32 -5
- package/scripts/observability/proxy-telemetry-check.mjs +396 -61
- package/scripts/observability/query-proxy-history.mjs +34 -5
|
@@ -19,7 +19,7 @@ const KINDS = new Set([
|
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Query metadata in small windows; body chunks require a targeted lookup.
|
|
22
|
-
* @param {{ baseUrl: string, organization?: string, stream?: string, authorization?: string, startTime: number, endTime: number, kind?: string, maxRows?: number, budget?: import("../../src/lib/types/index.js").ProxyTelemetryQueryBudget, fetchImpl?: typeof fetch }} options
|
|
22
|
+
* @param {{ baseUrl: string, organization?: string, stream?: string, authorization?: string, startTime: number, endTime: number, kind?: string, lifecycleEvents?: string[], maxRows?: number, budget?: import("../../src/lib/types/index.js").ProxyTelemetryQueryBudget, fetchImpl?: typeof fetch }} options
|
|
23
23
|
*/
|
|
24
24
|
export async function queryProxyHistory({
|
|
25
25
|
baseUrl,
|
|
@@ -29,6 +29,7 @@ export async function queryProxyHistory({
|
|
|
29
29
|
startTime,
|
|
30
30
|
endTime,
|
|
31
31
|
kind = "request_final",
|
|
32
|
+
lifecycleEvents,
|
|
32
33
|
maxRows = 10_000,
|
|
33
34
|
fetchImpl = fetch,
|
|
34
35
|
budget = { used: 0, limit: 512 },
|
|
@@ -36,7 +37,12 @@ export async function queryProxyHistory({
|
|
|
36
37
|
if (
|
|
37
38
|
!/^[a-zA-Z0-9_-]+$/.test(organization) ||
|
|
38
39
|
!/^[a-zA-Z0-9_]+$/.test(stream) ||
|
|
39
|
-
!KINDS.has(kind)
|
|
40
|
+
!KINDS.has(kind) ||
|
|
41
|
+
(lifecycleEvents !== undefined &&
|
|
42
|
+
(kind !== "lifecycle" ||
|
|
43
|
+
lifecycleEvents.some(
|
|
44
|
+
(event) => !["request_accepted", "request_terminal"].includes(event),
|
|
45
|
+
)))
|
|
40
46
|
) {
|
|
41
47
|
throw new Error("Invalid organization, stream or metadata record kind");
|
|
42
48
|
}
|
|
@@ -96,7 +102,7 @@ export async function queryProxyHistory({
|
|
|
96
102
|
query: {
|
|
97
103
|
// The body is small metadata, not arbitrary request/response chunks.
|
|
98
104
|
// Include a secondary key: timestamp-only paging loses equal-time events.
|
|
99
|
-
sql: `SELECT _timestamp, proxy_event_id, service_instance_id, request_id, body FROM "${stream}" WHERE proxy_record_kind='${kind}' ORDER BY _timestamp ASC, proxy_event_id ASC, service_instance_id ASC, request_id ASC, body ASC`,
|
|
105
|
+
sql: `SELECT _timestamp, proxy_event_id, service_instance_id, request_id, body FROM "${stream}" WHERE proxy_record_kind='${kind}'${lifecycleEvents?.length ? ` AND proxy_lifecycle_event IN (${lifecycleEvents.map((event) => `'${event}'`).join(",")})` : ""} ORDER BY _timestamp ASC, proxy_event_id ASC, service_instance_id ASC, request_id ASC, body ASC`,
|
|
100
106
|
start_time: start,
|
|
101
107
|
end_time: end - 1,
|
|
102
108
|
from: offset,
|
|
@@ -150,19 +156,42 @@ export async function queryProxyHistory({
|
|
|
150
156
|
}
|
|
151
157
|
}
|
|
152
158
|
const records = [];
|
|
159
|
+
const queriedAt = Date.now() * 1000;
|
|
153
160
|
for (let start = startTime; start < endTime; start += 600_000_000) {
|
|
154
161
|
records.push(
|
|
155
162
|
...(await readWindow(start, Math.min(start + 600_000_000, endTime))),
|
|
156
163
|
);
|
|
157
164
|
}
|
|
165
|
+
const unique = new Map();
|
|
166
|
+
let exactRetryDuplicates = 0;
|
|
167
|
+
const deduplicated = [];
|
|
168
|
+
for (const record of records) {
|
|
169
|
+
const key =
|
|
170
|
+
typeof record.proxy_event_id === "string" && record.proxy_event_id
|
|
171
|
+
? JSON.stringify([record.service_instance_id, record.proxy_event_id])
|
|
172
|
+
: undefined;
|
|
173
|
+
// Ingestion may move _timestamp; event payload is the producer identity.
|
|
174
|
+
const payload = JSON.stringify([record.request_id, record.body]);
|
|
175
|
+
if (key && unique.get(key) === payload) {
|
|
176
|
+
exactRetryDuplicates++;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (key && !unique.has(key)) {unique.set(key, payload);}
|
|
180
|
+
deduplicated.push(record); // Keep identity conflicts for the doctor to fail.
|
|
181
|
+
}
|
|
158
182
|
return {
|
|
159
183
|
startTime,
|
|
160
184
|
endTimeExclusive: endTime,
|
|
161
185
|
kind,
|
|
162
186
|
complete: true,
|
|
163
|
-
recordCount:
|
|
187
|
+
recordCount: deduplicated.length,
|
|
188
|
+
rawRecordCount: records.length,
|
|
189
|
+
exactRetryDuplicates,
|
|
190
|
+
queriedAtMicroseconds: queriedAt,
|
|
191
|
+
lateIngestionBoundary:
|
|
192
|
+
"Pagination is complete at query time; later ingestion can change this event-time interval",
|
|
164
193
|
queries,
|
|
165
|
-
records,
|
|
194
|
+
records: deduplicated,
|
|
166
195
|
};
|
|
167
196
|
}
|
|
168
197
|
|