rivetkit 2.3.20 → 2.3.22

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 (148) hide show
  1. package/dist/browser/client.d.ts +43 -5
  2. package/dist/browser/client.js +315 -63
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +2 -1
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/tsup/actor/errors.cjs +2 -2
  7. package/dist/tsup/actor/errors.cjs.map +1 -1
  8. package/dist/tsup/actor/errors.d.cts +1 -1
  9. package/dist/tsup/actor/errors.d.ts +1 -1
  10. package/dist/tsup/actor/errors.js +1 -1
  11. package/dist/tsup/agent-os/index.cjs +2 -1
  12. package/dist/tsup/agent-os/index.cjs.map +1 -1
  13. package/dist/tsup/agent-os/index.d.cts +32 -4
  14. package/dist/tsup/agent-os/index.d.ts +32 -4
  15. package/dist/tsup/agent-os/index.js +2 -1
  16. package/dist/tsup/agent-os/index.js.map +1 -1
  17. package/dist/tsup/{chunk-553CIQJY.js → chunk-47FSGXYN.js} +2 -2
  18. package/dist/tsup/{chunk-2NXLTFWI.js → chunk-4DTWJFIZ.js} +3 -3
  19. package/dist/tsup/chunk-4DTWJFIZ.js.map +1 -0
  20. package/dist/tsup/{chunk-2CE5UNWK.cjs → chunk-BDKVTNJF.cjs} +11 -10
  21. package/dist/tsup/chunk-BDKVTNJF.cjs.map +1 -0
  22. package/dist/tsup/{chunk-DHWZTUKA.js → chunk-DE2IFYJK.js} +4 -3
  23. package/dist/tsup/chunk-DE2IFYJK.js.map +1 -0
  24. package/dist/tsup/{chunk-DMQUERRN.js → chunk-GINS4O73.js} +2 -2
  25. package/dist/tsup/{chunk-3WS7Z64U.cjs → chunk-GZZNJGXY.cjs} +3 -3
  26. package/dist/tsup/chunk-GZZNJGXY.cjs.map +1 -0
  27. package/dist/tsup/{chunk-A36FMKOV.cjs → chunk-HEY27WZX.cjs} +479 -230
  28. package/dist/tsup/chunk-HEY27WZX.cjs.map +1 -0
  29. package/dist/tsup/{chunk-WAISW7KR.cjs → chunk-KEAUN5F5.cjs} +10 -10
  30. package/dist/tsup/chunk-KEAUN5F5.cjs.map +1 -0
  31. package/dist/tsup/chunk-KVFIONKQ.cjs.map +1 -1
  32. package/dist/tsup/{chunk-CVLNRT7O.cjs → chunk-LUMROGNM.cjs} +3 -3
  33. package/dist/tsup/chunk-LUMROGNM.cjs.map +1 -0
  34. package/dist/tsup/{chunk-JX2ITWAV.cjs → chunk-MGI2VVF6.cjs} +14 -4
  35. package/dist/tsup/chunk-MGI2VVF6.cjs.map +1 -0
  36. package/dist/tsup/chunk-MYWZCDML.cjs.map +1 -1
  37. package/dist/tsup/chunk-NWCAIWHL.cjs.map +1 -1
  38. package/dist/tsup/{chunk-RSIOGT2U.cjs → chunk-QOQA4JPN.cjs} +7 -7
  39. package/dist/tsup/chunk-QOQA4JPN.cjs.map +1 -0
  40. package/dist/tsup/{chunk-TZVAVPGJ.js → chunk-QXBNHJH5.js} +4 -4
  41. package/dist/tsup/{chunk-W2PXGWMR.js → chunk-RIPVNPR6.js} +2 -2
  42. package/dist/tsup/{chunk-5G2J26VM.js → chunk-VD47X7KQ.js} +318 -69
  43. package/dist/tsup/chunk-VD47X7KQ.js.map +1 -0
  44. package/dist/tsup/{chunk-76YTS32R.cjs → chunk-WLRGUAMW.cjs} +4 -4
  45. package/dist/tsup/chunk-WLRGUAMW.cjs.map +1 -0
  46. package/dist/tsup/{chunk-IHKDFKM4.cjs → chunk-WMNXGH25.cjs} +3 -3
  47. package/dist/tsup/chunk-WMNXGH25.cjs.map +1 -0
  48. package/dist/tsup/{chunk-SNNVRHLX.js → chunk-XZBDVEQN.js} +2 -2
  49. package/dist/tsup/{chunk-P2OFXH4G.js → chunk-ZOVJDAOW.js} +14 -4
  50. package/dist/tsup/chunk-ZOVJDAOW.js.map +1 -0
  51. package/dist/tsup/client/mod.cjs +6 -6
  52. package/dist/tsup/client/mod.cjs.map +1 -1
  53. package/dist/tsup/client/mod.d.cts +15 -6
  54. package/dist/tsup/client/mod.d.ts +15 -6
  55. package/dist/tsup/client/mod.js +5 -5
  56. package/dist/tsup/common/log.cjs +3 -3
  57. package/dist/tsup/common/log.cjs.map +1 -1
  58. package/dist/tsup/common/log.js +2 -2
  59. package/dist/tsup/common/websocket.cjs +4 -4
  60. package/dist/tsup/common/websocket.cjs.map +1 -1
  61. package/dist/tsup/common/websocket.js +3 -3
  62. package/dist/tsup/{config-Be-VOHaX.d.ts → config-Cv6pjCt-.d.ts} +37 -7
  63. package/dist/tsup/{config-Ct5uXxXk.d.cts → config-osdJqQwX.d.cts} +37 -7
  64. package/dist/tsup/{context-CXLa0BIM.d.ts → context-CoVbKBuk.d.ts} +1 -1
  65. package/dist/tsup/{context-Cw-11Q-B.d.cts → context-DpjrM7n7.d.cts} +1 -1
  66. package/dist/tsup/db/drizzle.cjs +3 -3
  67. package/dist/tsup/db/drizzle.cjs.map +1 -1
  68. package/dist/tsup/db/drizzle.js +2 -2
  69. package/dist/tsup/db/mod.cjs +4 -4
  70. package/dist/tsup/db/mod.cjs.map +1 -1
  71. package/dist/tsup/db/mod.js +3 -3
  72. package/dist/tsup/dynamic/mod.cjs.map +1 -1
  73. package/dist/tsup/dynamic/mod.d.cts +4 -3
  74. package/dist/tsup/dynamic/mod.d.ts +4 -3
  75. package/dist/tsup/inspector/mod.cjs +6 -6
  76. package/dist/tsup/inspector/mod.cjs.map +1 -1
  77. package/dist/tsup/inspector/mod.js +5 -5
  78. package/dist/tsup/inspector/workflow.cjs +5 -5
  79. package/dist/tsup/inspector/workflow.cjs.map +1 -1
  80. package/dist/tsup/inspector/workflow.js +4 -4
  81. package/dist/tsup/inspector-tab/mod.cjs.map +1 -1
  82. package/dist/tsup/inspector-tab/mod.d.cts +5 -4
  83. package/dist/tsup/inspector-tab/mod.d.ts +5 -4
  84. package/dist/tsup/mod.cjs +170 -158
  85. package/dist/tsup/mod.cjs.map +1 -1
  86. package/dist/tsup/mod.d.cts +6 -5
  87. package/dist/tsup/mod.d.ts +6 -5
  88. package/dist/tsup/mod.js +56 -44
  89. package/dist/tsup/mod.js.map +1 -1
  90. package/dist/tsup/test/mod.cjs +7 -7
  91. package/dist/tsup/test/mod.cjs.map +1 -1
  92. package/dist/tsup/test/mod.d.cts +4 -3
  93. package/dist/tsup/test/mod.d.ts +4 -3
  94. package/dist/tsup/test/mod.js +5 -5
  95. package/dist/tsup/unstable/migrations.cjs.map +1 -1
  96. package/dist/tsup/{utils-DsoDinPz.d.ts → utils-3rsE0JvI.d.cts} +12 -2
  97. package/dist/tsup/{utils-DsoDinPz.d.cts → utils-3rsE0JvI.d.ts} +12 -2
  98. package/dist/tsup/{utils-OQHBjfcM.d.ts → utils-C1O-SklO.d.ts} +1 -1
  99. package/dist/tsup/{utils-CNFeS-Dk.d.cts → utils-C6b0aYUM.d.cts} +1 -1
  100. package/dist/tsup/utils.cjs +3 -3
  101. package/dist/tsup/utils.cjs.map +1 -1
  102. package/dist/tsup/utils.d.cts +2 -2
  103. package/dist/tsup/utils.d.ts +2 -2
  104. package/dist/tsup/utils.js +2 -2
  105. package/dist/tsup/workflow/mod.cjs +11 -11
  106. package/dist/tsup/workflow/mod.cjs.map +1 -1
  107. package/dist/tsup/workflow/mod.d.cts +6 -5
  108. package/dist/tsup/workflow/mod.d.ts +6 -5
  109. package/dist/tsup/workflow/mod.js +5 -5
  110. package/package.json +10 -9
  111. package/src/actor/errors.ts +27 -4
  112. package/src/client/actor-conn.ts +34 -1
  113. package/src/client/actor-handle.ts +29 -1
  114. package/src/client/auth.ts +37 -0
  115. package/src/client/client.ts +10 -2
  116. package/src/client/config.ts +12 -1
  117. package/src/client/mod.ts +9 -0
  118. package/src/client/token-provider.test.ts +86 -0
  119. package/src/client/token-provider.ts +93 -0
  120. package/src/client/utils.ts +1 -0
  121. package/src/engine-client/actor-websocket-client.ts +2 -1
  122. package/src/engine-client/api-endpoints.ts +28 -0
  123. package/src/engine-client/driver.ts +4 -0
  124. package/src/engine-client/mod.ts +201 -64
  125. package/src/registry/config/envoy.ts +1 -17
  126. package/src/registry/config/index.test.ts +2 -2
  127. package/src/registry/config/index.ts +7 -2
  128. package/src/registry/index.ts +28 -0
  129. package/src/registry/native.ts +31 -3
  130. package/dist/tsup/chunk-2CE5UNWK.cjs.map +0 -1
  131. package/dist/tsup/chunk-2NXLTFWI.js.map +0 -1
  132. package/dist/tsup/chunk-3WS7Z64U.cjs.map +0 -1
  133. package/dist/tsup/chunk-5G2J26VM.js.map +0 -1
  134. package/dist/tsup/chunk-76YTS32R.cjs.map +0 -1
  135. package/dist/tsup/chunk-A36FMKOV.cjs.map +0 -1
  136. package/dist/tsup/chunk-CVLNRT7O.cjs.map +0 -1
  137. package/dist/tsup/chunk-DHWZTUKA.js.map +0 -1
  138. package/dist/tsup/chunk-IHKDFKM4.cjs.map +0 -1
  139. package/dist/tsup/chunk-JX2ITWAV.cjs.map +0 -1
  140. package/dist/tsup/chunk-P2OFXH4G.js.map +0 -1
  141. package/dist/tsup/chunk-RSIOGT2U.cjs.map +0 -1
  142. package/dist/tsup/chunk-WAISW7KR.cjs.map +0 -1
  143. package/src/registry/process-metrics.ts +0 -250
  144. /package/dist/tsup/{chunk-553CIQJY.js.map → chunk-47FSGXYN.js.map} +0 -0
  145. /package/dist/tsup/{chunk-DMQUERRN.js.map → chunk-GINS4O73.js.map} +0 -0
  146. /package/dist/tsup/{chunk-TZVAVPGJ.js.map → chunk-QXBNHJH5.js.map} +0 -0
  147. /package/dist/tsup/{chunk-W2PXGWMR.js.map → chunk-RIPVNPR6.js.map} +0 -0
  148. /package/dist/tsup/{chunk-SNNVRHLX.js.map → chunk-XZBDVEQN.js.map} +0 -0
@@ -1,250 +0,0 @@
1
- /**
2
- * Node.js runtime health metrics.
3
- *
4
- * Collects JS-internal data (event loop lag, GC, heap, libuv handles,
5
- * event loop utilization, CPU) using Node built-ins (`node:perf_hooks`,
6
- * `process`, `node:v8`, `PerformanceObserver`) and pushes them across NAPI
7
- * into Rust-side prometheus collectors registered with
8
- * `rivet_metrics::REGISTRY` so they appear on the existing `/metrics`
9
- * endpoint.
10
- *
11
- * All data collection happens here in TypeScript. The NAPI bridge is pure
12
- * type marshalling and the Rust side only registers + stores the metrics.
13
- */
14
- import {
15
- monitorEventLoopDelay,
16
- PerformanceObserver,
17
- performance,
18
- } from "node:perf_hooks";
19
- import { getHeapStatistics } from "node:v8";
20
- import * as napi from "@rivetkit/rivetkit-napi";
21
-
22
- type OptionalProcessMetricsNapi = typeof napi & {
23
- jsObserveGcDuration?: (kind: string, durationSeconds: number) => void;
24
- jsSetEventloopHeartbeatTsMs?: (timestampMs: number) => void;
25
- jsSetEventloopLagQuantile?: (
26
- quantile: string,
27
- valueSeconds: number,
28
- ) => void;
29
- jsSetEventloopUtilization?: (utilization: number) => void;
30
- jsAddProcessCpuSeconds?: (mode: string, valueSeconds: number) => void;
31
- jsSetProcessResidentMemoryBytes?: (bytes: number) => void;
32
- jsSetHeapBytes?: (kind: string, bytes: number) => void;
33
- jsSetActiveHandles?: (count: number) => void;
34
- jsSetActiveRequests?: (count: number) => void;
35
- };
36
-
37
- type GcPerformanceEntry = {
38
- duration: number;
39
- detail?: { kind?: number };
40
- kind?: number;
41
- };
42
-
43
- const processMetricsNapi = napi as OptionalProcessMetricsNapi;
44
-
45
- // Some napi process-metrics symbols may be missing on older native binaries
46
- // (the auto-generated index.js destructures them as `undefined` if the
47
- // underlying `.node` was built before they were added). Guard each call so
48
- // the metrics collection runs as a no-op instead of throwing
49
- // `TypeError: napi.jsXxx is not a function` on every interval tick.
50
- function callIfFn<T extends unknown[]>(
51
- fn: ((...args: T) => void) | undefined,
52
- ...args: T
53
- ): void {
54
- if (typeof fn === "function") {
55
- fn(...args);
56
- }
57
- }
58
-
59
- const SCRAPE_INTERVAL_MS = 5_000;
60
- const HEARTBEAT_INTERVAL_MS = 100;
61
- const EVENTLOOP_DELAY_RESOLUTION_MS = 20;
62
- const NS_PER_SECOND = 1e9;
63
- const US_PER_SECOND = 1e6;
64
-
65
- // V8 GC kind bitfield from Node's perf_hooks documentation. A `gc` performance
66
- // entry's `kind` field is one of these values.
67
- const GC_KIND_NAMES: Record<number, string> = {
68
- 1: "minor",
69
- 2: "major",
70
- 4: "incremental",
71
- 8: "weakcb",
72
- };
73
-
74
- interface ProcessMetricsState {
75
- scrapeInterval: NodeJS.Timeout;
76
- heartbeatInterval: NodeJS.Timeout;
77
- gcObserver: PerformanceObserver;
78
- eventLoopHistogram: ReturnType<typeof monitorEventLoopDelay>;
79
- lastCpuUsage: NodeJS.CpuUsage;
80
- lastEventLoopUtilization: ReturnType<
81
- typeof performance.eventLoopUtilization
82
- >;
83
- }
84
-
85
- let state: ProcessMetricsState | undefined;
86
-
87
- export function startProcessMetrics(): void {
88
- if (state) {
89
- return;
90
- }
91
-
92
- const eventLoopHistogram = monitorEventLoopDelay({
93
- resolution: EVENTLOOP_DELAY_RESOLUTION_MS,
94
- });
95
- eventLoopHistogram.enable();
96
-
97
- const gcObserver = new PerformanceObserver((list) => {
98
- for (const entry of list.getEntries()) {
99
- const gcEntry = entry as GcPerformanceEntry;
100
- const kind = gcEntry.detail?.kind ?? gcEntry.kind;
101
- if (typeof kind !== "number") continue;
102
- const kindName = GC_KIND_NAMES[kind];
103
- if (!kindName) continue;
104
- // `entry.duration` is in milliseconds; convert to seconds.
105
- callIfFn(
106
- processMetricsNapi.jsObserveGcDuration,
107
- kindName,
108
- gcEntry.duration / 1000,
109
- );
110
- }
111
- });
112
- gcObserver.observe({ entryTypes: ["gc"], buffered: false });
113
-
114
- const lastCpuUsage = process.cpuUsage();
115
- const lastEventLoopUtilization = performance.eventLoopUtilization();
116
-
117
- const heartbeatInterval = setInterval(() => {
118
- callIfFn(processMetricsNapi.jsSetEventloopHeartbeatTsMs, Date.now());
119
- }, HEARTBEAT_INTERVAL_MS);
120
- heartbeatInterval.unref();
121
-
122
- const scrapeInterval = setInterval(() => {
123
- try {
124
- collectAndPush();
125
- } catch {
126
- // Collection errors must never bring down the process; metrics
127
- // are best-effort.
128
- }
129
- }, SCRAPE_INTERVAL_MS);
130
- scrapeInterval.unref();
131
-
132
- state = {
133
- scrapeInterval,
134
- heartbeatInterval,
135
- gcObserver,
136
- eventLoopHistogram,
137
- lastCpuUsage,
138
- lastEventLoopUtilization,
139
- };
140
-
141
- // Emit one snapshot immediately so freshly-scraped instances have data.
142
- callIfFn(processMetricsNapi.jsSetEventloopHeartbeatTsMs, Date.now());
143
- try {
144
- collectAndPush();
145
- } catch {
146
- // As above; best-effort.
147
- }
148
- }
149
-
150
- export function stopProcessMetrics(): void {
151
- if (!state) {
152
- return;
153
- }
154
- clearInterval(state.scrapeInterval);
155
- clearInterval(state.heartbeatInterval);
156
- state.gcObserver.disconnect();
157
- state.eventLoopHistogram.disable();
158
- state = undefined;
159
- }
160
-
161
- function collectAndPush(): void {
162
- if (!state) return;
163
-
164
- // Event loop delay quantiles. `monitorEventLoopDelay()` reports values in
165
- // nanoseconds; convert to seconds. Reset after reading so the next window
166
- // reflects only the new interval.
167
- const hist = state.eventLoopHistogram;
168
- callIfFn(
169
- processMetricsNapi.jsSetEventloopLagQuantile,
170
- "p50",
171
- hist.percentile(50) / NS_PER_SECOND,
172
- );
173
- callIfFn(
174
- processMetricsNapi.jsSetEventloopLagQuantile,
175
- "p90",
176
- hist.percentile(90) / NS_PER_SECOND,
177
- );
178
- callIfFn(
179
- processMetricsNapi.jsSetEventloopLagQuantile,
180
- "p99",
181
- hist.percentile(99) / NS_PER_SECOND,
182
- );
183
- callIfFn(
184
- processMetricsNapi.jsSetEventloopLagQuantile,
185
- "max",
186
- hist.max / NS_PER_SECOND,
187
- );
188
- hist.reset();
189
-
190
- // Event loop utilization delta over the scrape window.
191
- const nextElu = performance.eventLoopUtilization();
192
- const eluDelta = performance.eventLoopUtilization(
193
- nextElu,
194
- state.lastEventLoopUtilization,
195
- );
196
- state.lastEventLoopUtilization = nextElu;
197
- callIfFn(
198
- processMetricsNapi.jsSetEventloopUtilization,
199
- eluDelta.utilization,
200
- );
201
-
202
- // CPU usage delta. `process.cpuUsage()` returns microseconds.
203
- const nextCpu = process.cpuUsage();
204
- const userDeltaUs = nextCpu.user - state.lastCpuUsage.user;
205
- const systemDeltaUs = nextCpu.system - state.lastCpuUsage.system;
206
- state.lastCpuUsage = nextCpu;
207
- if (userDeltaUs > 0) {
208
- callIfFn(
209
- processMetricsNapi.jsAddProcessCpuSeconds,
210
- "user",
211
- userDeltaUs / US_PER_SECOND,
212
- );
213
- }
214
- if (systemDeltaUs > 0) {
215
- callIfFn(
216
- processMetricsNapi.jsAddProcessCpuSeconds,
217
- "system",
218
- systemDeltaUs / US_PER_SECOND,
219
- );
220
- }
221
-
222
- // Memory + heap.
223
- const mem = process.memoryUsage();
224
- callIfFn(processMetricsNapi.jsSetProcessResidentMemoryBytes, mem.rss);
225
- callIfFn(processMetricsNapi.jsSetHeapBytes, "used", mem.heapUsed);
226
- callIfFn(processMetricsNapi.jsSetHeapBytes, "total", mem.heapTotal);
227
- const heapLimit = getHeapStatistics().heap_size_limit;
228
- callIfFn(processMetricsNapi.jsSetHeapBytes, "limit", heapLimit);
229
-
230
- // libuv active handles + requests. These are unstable Node internals
231
- // guarded behind underscore-prefixed names; if a future Node release
232
- // removes them the try/catch above keeps the rest of the collection
233
- // alive.
234
- const proc = process as unknown as {
235
- _getActiveHandles?: () => unknown[];
236
- _getActiveRequests?: () => unknown[];
237
- };
238
- if (typeof proc._getActiveHandles === "function") {
239
- callIfFn(
240
- processMetricsNapi.jsSetActiveHandles,
241
- proc._getActiveHandles().length,
242
- );
243
- }
244
- if (typeof proc._getActiveRequests === "function") {
245
- callIfFn(
246
- processMetricsNapi.jsSetActiveRequests,
247
- proc._getActiveRequests().length,
248
- );
249
- }
250
- }