@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.
Files changed (73) hide show
  1. package/CHANGELOG.md +6 -2
  2. package/dist/browser/neurolink.min.js +430 -421
  3. package/dist/cli/commands/proxy.js +455 -259
  4. package/dist/constants/contextWindows.d.ts +2 -0
  5. package/dist/constants/contextWindows.js +4 -0
  6. package/dist/neurolink.js +8 -3
  7. package/dist/providers/openaiChatCompletionsBase.js +60 -51
  8. package/dist/proxy/anthropicBudgetResponse.d.ts +3 -0
  9. package/dist/proxy/anthropicBudgetResponse.js +153 -0
  10. package/dist/proxy/bodyCaptureProcessing.d.ts +1 -0
  11. package/dist/proxy/bodyCaptureProcessing.js +23 -4
  12. package/dist/proxy/bodyCaptureWorker.js +20 -2
  13. package/dist/proxy/codexFallback.d.ts +10 -0
  14. package/dist/proxy/codexFallback.js +108 -24
  15. package/dist/proxy/codexUsage.js +2 -0
  16. package/dist/proxy/globalInstaller.d.ts +32 -1
  17. package/dist/proxy/globalInstaller.js +386 -3
  18. package/dist/proxy/otelLogSink.d.ts +3 -3
  19. package/dist/proxy/otelLogSink.js +137 -144
  20. package/dist/proxy/otlpLogTransport.d.ts +3 -0
  21. package/dist/proxy/otlpLogTransport.js +334 -0
  22. package/dist/proxy/proxyActivity.d.ts +22 -2
  23. package/dist/proxy/proxyActivity.js +114 -9
  24. package/dist/proxy/proxyAnalysis.js +82 -52
  25. package/dist/proxy/proxyClientCancellation.d.ts +7 -0
  26. package/dist/proxy/proxyClientCancellation.js +23 -0
  27. package/dist/proxy/proxyContextPreflight.d.ts +25 -0
  28. package/dist/proxy/proxyContextPreflight.js +337 -0
  29. package/dist/proxy/proxyFailureDetails.d.ts +19 -0
  30. package/dist/proxy/proxyFailureDetails.js +96 -0
  31. package/dist/proxy/proxyLifecycle.js +7 -0
  32. package/dist/proxy/proxyRouteBodyCapture.d.ts +13 -0
  33. package/dist/proxy/proxyRouteBodyCapture.js +112 -0
  34. package/dist/proxy/proxyTokenBudget.d.ts +40 -0
  35. package/dist/proxy/proxyTokenBudget.js +523 -0
  36. package/dist/proxy/proxyTracer.d.ts +3 -2
  37. package/dist/proxy/proxyTracer.js +46 -20
  38. package/dist/proxy/proxyTranslationEngine.d.ts +8 -10
  39. package/dist/proxy/proxyTranslationEngine.js +736 -376
  40. package/dist/proxy/requestLogger.d.ts +1 -0
  41. package/dist/proxy/requestLogger.js +107 -5
  42. package/dist/proxy/restartControl.js +9 -4
  43. package/dist/proxy/rollingWorkerProcess.js +65 -0
  44. package/dist/proxy/rollingWorkerSupervisor.js +7 -0
  45. package/dist/proxy/updateCoordinator.d.ts +14 -1
  46. package/dist/proxy/updateCoordinator.js +57 -2
  47. package/dist/server/routes/claudeProxyRoutes.d.ts +4 -5
  48. package/dist/server/routes/claudeProxyRoutes.js +809 -577
  49. package/dist/server/routes/codexProxyRoutes.js +191 -9
  50. package/dist/server/routes/openaiProxyRoutes.d.ts +1 -1
  51. package/dist/server/routes/openaiProxyRoutes.js +261 -69
  52. package/dist/types/cli.d.ts +3 -0
  53. package/dist/types/codex.d.ts +5 -1
  54. package/dist/types/index.d.ts +2 -0
  55. package/dist/types/index.js +2 -0
  56. package/dist/types/proxy.d.ts +148 -3
  57. package/dist/types/proxy.js +0 -15
  58. package/dist/types/proxyBudget.d.ts +74 -0
  59. package/dist/types/proxyBudget.js +1 -0
  60. package/dist/types/proxyContext.d.ts +35 -0
  61. package/dist/types/proxyContext.js +1 -0
  62. package/dist/utils/fileDetector.js +28 -7
  63. package/dist/utils/messageBuilder.js +51 -26
  64. package/dist/utils/pdfProcessor.js +26 -4
  65. package/docs/assets/dashboards/README.md +37 -0
  66. package/docs/assets/dashboards/neurolink-proxy-observability-dashboard.json +197 -89
  67. package/docs-site/static/search-index.json +1 -1
  68. package/package.json +7 -2
  69. package/scripts/observability/NATIVE-DURABLE.md +63 -0
  70. package/scripts/observability/otel-collector.proxy-native-durable.yaml +93 -0
  71. package/scripts/observability/proxy-telemetry-backend.mjs +32 -5
  72. package/scripts/observability/proxy-telemetry-check.mjs +396 -61
  73. package/scripts/observability/query-proxy-history.mjs +34 -5
@@ -589,10 +589,32 @@ export class PDFProcessor {
589
589
  if (largestPixels > maxCanvasPixels) {
590
590
  effectiveScale = scale * Math.sqrt(maxCanvasPixels / largestPixels);
591
591
  }
592
- const document = await pdf(pdfBuffer, {
593
- scale: effectiveScale,
594
- ...(password ? { password } : {}),
595
- });
592
+ // #258: map pdfjs's PasswordException to the same actionable typed error
593
+ // convertToImages raises — kept in sync per the class docstring above.
594
+ // Unlike the per-page loop below, a failure here happens before any page
595
+ // can be isolated, so it must reject the generator outright rather than
596
+ // being yielded as a page error.
597
+ let document;
598
+ try {
599
+ document = await pdf(pdfBuffer, {
600
+ scale: effectiveScale,
601
+ ...(password ? { password } : {}),
602
+ });
603
+ }
604
+ catch (error) {
605
+ const errorMessage = error instanceof Error ? error.message : String(error);
606
+ const pdfErr = error;
607
+ if (pdfErr?.name === "PasswordException" ||
608
+ /password/i.test(errorMessage)) {
609
+ const incorrect = pdfErr.code === 2 || /incorrect|invalid/i.test(errorMessage);
610
+ throw incorrect
611
+ ? ErrorFactory.pdfIncorrectPassword()
612
+ : ErrorFactory.pdfPasswordRequired();
613
+ }
614
+ throw new Error(`PDF to image conversion failed: ${errorMessage}`, {
615
+ cause: error,
616
+ });
617
+ }
596
618
  const totalPages = document.length;
597
619
  let converted = 0;
598
620
  for (let pageNum = 1; pageNum <= totalPages; pageNum++) {
@@ -0,0 +1,37 @@
1
+ # Proxy dashboard accounting
2
+
3
+ Import `neurolink-proxy-observability-dashboard.json` into OpenObserve after
4
+ the matching proxy release emits the indexed accounting and pricing fields.
5
+ The template is an artifact; changing it does not update an installed dashboard
6
+ or activate a proxy release. Request panels query the metadata log stream.
7
+ Bulk body captures can use a separate stream.
8
+
9
+ Client traffic, errors, and latency belong to the outer request. An internal
10
+ bridge request owns provider usage when `proxy_usage_owner_request_id` names
11
+ that child; the parent contributes no second token charge. Cached input is
12
+ included once according to `ai_input_includes_cached_tokens`.
13
+
14
+ Log queries first collapse exact producer retries, ignoring ingestion-time
15
+ changes. The stable identity combines service instance and producer event ID;
16
+ older records fall back to request ID where available. Contradictory payloads
17
+ under one identity are excluded from aggregate totals. The Traffic & Health
18
+ conflict counter reports those exclusions. A nonzero counter means totals
19
+ cover only the verified subset; use telemetry doctor for the conflicting raw
20
+ payloads. Rows without any stable identity cannot establish retry deduplication.
21
+
22
+ Cost panels sum `ai_cost_api_equivalent_usd` only when
23
+ `ai_pricing_status='exact'`. These are estimates from this release's API price
24
+ table and complete provider usage, **not subscription charges or quota usage**.
25
+ Prefix-inferred prices, missing rates, partial token usage, and a bridge parent's
26
+ delegated usage do not receive an invented dollar amount. Pricing-gap panels
27
+ show the excluded usage owners; a blank known-cost total is not zero spending.
28
+ Cache savings compare cache reads with the same table's uncached input rate.
29
+ The offline analyzer's historical estimates separately retain their existing
30
+ `requestsPricedByPrefix` and `modelsPricedByPrefix` disclosures.
31
+
32
+ The deterministic capture-pipeline suite executes the shipped request, token,
33
+ cost, and conflict SQL on an in-memory database and records exact price-table,
34
+ partial-usage, and unknown-model OTLP fixtures. SQLite validates the standard SQL
35
+ logic; verify field availability and query compatibility in the target
36
+ OpenObserve version when installing the dashboard. Metric panels retain their
37
+ scrape/window semantics and are not a substitute for reconciled request logs.