rivetkit 2.3.6 → 2.3.8

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 (90) hide show
  1. package/dist/browser/client.d.ts +34 -6
  2. package/dist/browser/client.js +33 -14
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +1 -1
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/tsup/agent-os/index.cjs +1 -1
  7. package/dist/tsup/agent-os/index.cjs.map +1 -1
  8. package/dist/tsup/agent-os/index.d.cts +34 -6
  9. package/dist/tsup/agent-os/index.d.ts +34 -6
  10. package/dist/tsup/agent-os/index.js +1 -1
  11. package/dist/tsup/agent-os/index.js.map +1 -1
  12. package/dist/tsup/{chunk-AXEGEUYB.cjs → chunk-5MJPN3QU.cjs} +172 -151
  13. package/dist/tsup/chunk-5MJPN3QU.cjs.map +1 -0
  14. package/dist/tsup/{chunk-WS3PP253.cjs → chunk-7TNEDX3Y.cjs} +3 -3
  15. package/dist/tsup/{chunk-WS3PP253.cjs.map → chunk-7TNEDX3Y.cjs.map} +1 -1
  16. package/dist/tsup/{chunk-F6ZW7JZQ.js → chunk-BL6ERZQO.js} +36 -15
  17. package/dist/tsup/chunk-BL6ERZQO.js.map +1 -0
  18. package/dist/tsup/{chunk-HVOKIYUB.cjs → chunk-F6GCLL5Z.cjs} +7 -7
  19. package/dist/tsup/{chunk-HVOKIYUB.cjs.map → chunk-F6GCLL5Z.cjs.map} +1 -1
  20. package/dist/tsup/{chunk-PLLHHJWR.js → chunk-HWBISPRP.js} +2 -2
  21. package/dist/tsup/{chunk-FNTTW25Q.cjs → chunk-IJMVVULS.cjs} +4 -4
  22. package/dist/tsup/{chunk-FNTTW25Q.cjs.map → chunk-IJMVVULS.cjs.map} +1 -1
  23. package/dist/tsup/{chunk-BX4G2O6M.js → chunk-MY6BRV3S.js} +3 -3
  24. package/dist/tsup/{chunk-234EFKN2.cjs → chunk-NUMGL52R.cjs} +6 -3
  25. package/dist/tsup/chunk-NUMGL52R.cjs.map +1 -0
  26. package/dist/tsup/{chunk-PD7SZKHY.cjs → chunk-TMTJPSHQ.cjs} +9 -9
  27. package/dist/tsup/{chunk-PD7SZKHY.cjs.map → chunk-TMTJPSHQ.cjs.map} +1 -1
  28. package/dist/tsup/{chunk-OH6CBWUD.js → chunk-V7PJYBA5.js} +2 -2
  29. package/dist/tsup/{chunk-3ZE5UDOA.js → chunk-YFXQ7DBH.js} +3 -3
  30. package/dist/tsup/{chunk-RDTFPGU2.js → chunk-ZKDZW5DQ.js} +6 -3
  31. package/dist/tsup/chunk-ZKDZW5DQ.js.map +1 -0
  32. package/dist/tsup/client/mod.cjs +5 -5
  33. package/dist/tsup/client/mod.d.cts +2 -2
  34. package/dist/tsup/client/mod.d.ts +2 -2
  35. package/dist/tsup/client/mod.js +4 -4
  36. package/dist/tsup/common/log.cjs +2 -2
  37. package/dist/tsup/common/log.js +1 -1
  38. package/dist/tsup/common/websocket.cjs +3 -3
  39. package/dist/tsup/common/websocket.js +2 -2
  40. package/dist/tsup/{config-BRpVbJCD.d.ts → config-CUymbyM6.d.ts} +35 -7
  41. package/dist/tsup/{config-BobvQpex.d.cts → config-CpB-e4I9.d.cts} +35 -7
  42. package/dist/tsup/{context-Cj-DFyiy.d.ts → context-YBUBTwTS.d.ts} +1 -1
  43. package/dist/tsup/{context-YEBNJrws.d.cts → context-c-6G4mjk.d.cts} +1 -1
  44. package/dist/tsup/db/drizzle.cjs +2 -2
  45. package/dist/tsup/db/drizzle.js +1 -1
  46. package/dist/tsup/db/mod.cjs +2 -2
  47. package/dist/tsup/db/mod.js +1 -1
  48. package/dist/tsup/dynamic/mod.d.cts +1 -1
  49. package/dist/tsup/dynamic/mod.d.ts +1 -1
  50. package/dist/tsup/inspector/mod.cjs +4 -4
  51. package/dist/tsup/inspector/mod.js +3 -3
  52. package/dist/tsup/inspector-tab/mod.d.cts +2 -2
  53. package/dist/tsup/inspector-tab/mod.d.ts +2 -2
  54. package/dist/tsup/mod.cjs +449 -124
  55. package/dist/tsup/mod.cjs.map +1 -1
  56. package/dist/tsup/mod.d.cts +3 -3
  57. package/dist/tsup/mod.d.ts +3 -3
  58. package/dist/tsup/mod.js +388 -63
  59. package/dist/tsup/mod.js.map +1 -1
  60. package/dist/tsup/test/mod.cjs +6 -6
  61. package/dist/tsup/test/mod.d.cts +1 -1
  62. package/dist/tsup/test/mod.d.ts +1 -1
  63. package/dist/tsup/test/mod.js +4 -4
  64. package/dist/tsup/utils.cjs +2 -2
  65. package/dist/tsup/utils.js +1 -1
  66. package/dist/tsup/workflow/mod.cjs +6 -6
  67. package/dist/tsup/workflow/mod.d.cts +3 -3
  68. package/dist/tsup/workflow/mod.d.ts +3 -3
  69. package/dist/tsup/workflow/mod.js +3 -3
  70. package/package.json +8 -8
  71. package/src/client/actor-handle.ts +3 -1
  72. package/src/client/raw-utils.ts +11 -2
  73. package/src/common/actor-router-consts.ts +1 -0
  74. package/src/common/encoding.ts +4 -1
  75. package/src/common/fetch-like.ts +49 -0
  76. package/src/engine-client/actor-http-client.ts +6 -22
  77. package/src/registry/index.ts +159 -14
  78. package/src/registry/napi-runtime.ts +74 -0
  79. package/src/registry/native-http.ts +208 -0
  80. package/src/registry/native.ts +111 -63
  81. package/src/registry/runtime.ts +35 -0
  82. package/src/registry/wasm-runtime.ts +11 -0
  83. package/dist/tsup/chunk-234EFKN2.cjs.map +0 -1
  84. package/dist/tsup/chunk-AXEGEUYB.cjs.map +0 -1
  85. package/dist/tsup/chunk-F6ZW7JZQ.js.map +0 -1
  86. package/dist/tsup/chunk-RDTFPGU2.js.map +0 -1
  87. /package/dist/tsup/{chunk-PLLHHJWR.js.map → chunk-HWBISPRP.js.map} +0 -0
  88. /package/dist/tsup/{chunk-BX4G2O6M.js.map → chunk-MY6BRV3S.js.map} +0 -0
  89. /package/dist/tsup/{chunk-OH6CBWUD.js.map → chunk-V7PJYBA5.js.map} +0 -0
  90. /package/dist/tsup/{chunk-3ZE5UDOA.js.map → chunk-YFXQ7DBH.js.map} +0 -0
@@ -1765,6 +1765,12 @@ interface RuntimeHttpRequest {
1765
1765
  headers?: Record<string, string>;
1766
1766
  body?: RuntimeBytes;
1767
1767
  }
1768
+ interface RuntimeHttpResponseBodyStream {
1769
+ cancelled(): Promise<void>;
1770
+ write(chunk: Uint8Array): Promise<void>;
1771
+ end(): Promise<void>;
1772
+ error(message: string): Promise<void>;
1773
+ }
1768
1774
  interface RuntimeStateDeltaPayload {
1769
1775
  state?: RuntimeBytes;
1770
1776
  connHibernation: Array<{
@@ -1987,6 +1993,7 @@ interface RuntimeListenerConfig {
1987
1993
  port: number;
1988
1994
  host?: string;
1989
1995
  publicDir?: string;
1996
+ application?: RuntimeApplicationFetch;
1990
1997
  }
1991
1998
  interface RuntimeServerlessRequest {
1992
1999
  method: string;
@@ -1994,6 +2001,19 @@ interface RuntimeServerlessRequest {
1994
2001
  headers: Record<string, string>;
1995
2002
  body: RuntimeBytes;
1996
2003
  }
2004
+ interface RuntimeApplicationRequest extends RuntimeServerlessRequest {
2005
+ cancelToken?: CancellationTokenHandle;
2006
+ }
2007
+ interface RuntimeApplicationResponse {
2008
+ status: number;
2009
+ headers: Record<string, string>;
2010
+ body?: RuntimeBytes;
2011
+ stream?: boolean;
2012
+ }
2013
+ type RuntimeApplicationFetch = (request: RuntimeApplicationRequest, responseBodyStream?: RuntimeHttpResponseBodyStream) => Promise<RuntimeApplicationResponse>;
2014
+ interface RuntimeApplicationListenerConfig extends RuntimeListenerConfig {
2015
+ application: RuntimeApplicationFetch;
2016
+ }
1997
2017
  interface RuntimeServerlessResponseHead {
1998
2018
  status: number;
1999
2019
  headers: Record<string, string>;
@@ -2036,6 +2056,7 @@ interface CoreRuntime {
2036
2056
  registryActorStopThresholdMs?(registry: RegistryHandle): Promise<number | undefined>;
2037
2057
  handleServerlessRequest(registry: RegistryHandle, req: RuntimeServerlessRequest, onStreamEvent: RuntimeServerlessStreamCallback, cancelToken: CancellationTokenHandle, config: RuntimeServeConfig): Promise<RuntimeServerlessResponseHead>;
2038
2058
  serveListener(registry: RegistryHandle, listener: RuntimeListenerConfig, config: RuntimeServeConfig): Promise<void>;
2059
+ serveApplicationListener(registry: RegistryHandle, listener: RuntimeApplicationListenerConfig, config: RuntimeServeConfig): Promise<void>;
2039
2060
  registryHealth?(registry: RegistryHandle): Promise<RuntimeRegistryRouteResponse>;
2040
2061
  registryMetadata?(registry: RegistryHandle): Promise<RuntimeRegistryRouteResponse>;
2041
2062
  registryMetrics?(registry: RegistryHandle): Promise<RuntimeRegistryRouteResponse>;
@@ -2146,6 +2167,15 @@ type FetchHandler = (request: Request, ...args: any) => Response | Promise<Respo
2146
2167
  interface ServerlessHandler {
2147
2168
  fetch: FetchHandler;
2148
2169
  }
2170
+ interface RegistryApplication {
2171
+ fetch: FetchHandler;
2172
+ }
2173
+ interface RegistryListenOptions {
2174
+ port?: number;
2175
+ host?: string;
2176
+ publicDir?: string;
2177
+ application?: RegistryApplication;
2178
+ }
2149
2179
  interface RegistryRoutes {
2150
2180
  health(): Promise<Response>;
2151
2181
  metadata(): Promise<Response>;
@@ -2195,18 +2225,16 @@ declare class Registry<A extends RegistryActors> {
2195
2225
  * @param opts.host Address to bind. Defaults to `0.0.0.0`.
2196
2226
  * @param opts.publicDir If set, serves static files from this directory
2197
2227
  * as a fallback below the framework routes.
2228
+ * @param opts.application If set, handles requests that do not match a
2229
+ * framework route.
2198
2230
  *
2199
2231
  * @example
2200
2232
  * ```ts
2201
2233
  * await registry.listen();
2202
- * await registry.listen({ port: 8080, publicDir: "./public" });
2234
+ * await registry.listen({ application: app });
2203
2235
  * ```
2204
2236
  */
2205
- listen(opts?: {
2206
- port?: number;
2207
- host?: string;
2208
- publicDir?: string;
2209
- }): Promise<void>;
2237
+ listen(opts?: RegistryListenOptions): Promise<void>;
2210
2238
  /**
2211
2239
  * Gracefully drains all live registries.
2212
2240
  *
@@ -194,7 +194,7 @@ function noopNext() {
194
194
  // package.json
195
195
  var package_default = {
196
196
  name: "rivetkit",
197
- version: "2.3.6",
197
+ version: "2.3.8",
198
198
  description: "Lightweight libraries for building stateful actors on edge platforms",
199
199
  license: "Apache-2.0",
200
200
  keywords: [
@@ -729,7 +729,10 @@ function jsonStringifyCompat(input, space) {
729
729
  return [JSON_COMPAT_BIGINT, value.toString()];
730
730
  }
731
731
  if (value instanceof ArrayBuffer) {
732
- return [JSON_COMPAT_ARRAY_BUFFER, base64EncodeArrayBuffer(value)];
732
+ return [
733
+ JSON_COMPAT_ARRAY_BUFFER,
734
+ base64EncodeArrayBuffer(value)
735
+ ];
733
736
  }
734
737
  if (value instanceof Uint8Array) {
735
738
  return [JSON_COMPAT_UINT8_ARRAY, base64EncodeUint8Array(value)];
@@ -1109,6 +1112,7 @@ var PATH_WEBSOCKET_BASE = "/websocket";
1109
1112
  var PATH_WEBSOCKET_PREFIX = "/websocket/";
1110
1113
  var HEADER_ENCODING = "x-rivet-encoding";
1111
1114
  var HEADER_CONN_PARAMS = "x-rivet-conn-params";
1115
+ var HEADER_ORIGINAL_REQUEST_URL = "x-rivet-internal-original-request-url";
1112
1116
  var HEADER_RIVET_TOKEN = "x-rivet-token";
1113
1117
  var HEADER_RIVET_TARGET = "x-rivet-target";
1114
1118
  var HEADER_RIVET_ACTOR = "x-rivet-actor";
@@ -1135,23 +1139,19 @@ async function sendHttpRequestToGateway(runConfig, gatewayUrl, actorRequest, opt
1135
1139
  if (actorRequest.bodyUsed) {
1136
1140
  throw new Error("Request body has already been consumed");
1137
1141
  }
1138
- const reqBody = await actorRequest.arrayBuffer();
1139
- if (reqBody.byteLength !== 0) {
1140
- bodyToSend = reqBody;
1142
+ if (actorRequest.body) {
1143
+ bodyToSend = actorRequest.body;
1141
1144
  guardHeaders.delete("transfer-encoding");
1142
1145
  guardHeaders.delete("content-length");
1143
1146
  }
1144
1147
  }
1145
- const guardRequest = new Request(gatewayUrl, {
1148
+ return fetch(gatewayUrl, {
1146
1149
  method: actorRequest.method,
1147
1150
  headers: guardHeaders,
1148
1151
  body: bodyToSend,
1149
- signal: actorRequest.signal
1152
+ signal: actorRequest.signal,
1153
+ ...bodyToSend ? { duplex: "half" } : {}
1150
1154
  });
1151
- return mutableResponse(await fetch(guardRequest));
1152
- }
1153
- function mutableResponse(fetchRes) {
1154
- return new Response(fetchRes.body, fetchRes);
1155
1155
  }
1156
1156
  function buildGuardHeaders(runConfig, actorRequest, options) {
1157
1157
  const headers = new Headers();
@@ -5824,6 +5824,17 @@ var ActorConnRaw = class {
5824
5824
  }
5825
5825
  };
5826
5826
 
5827
+ // src/common/fetch-like.ts
5828
+ function isUrlLike(value) {
5829
+ return typeof value === "object" && value !== null && typeof value.href === "string" && typeof value.pathname === "string" && typeof value.search === "string";
5830
+ }
5831
+ function isRequestLike(value) {
5832
+ return typeof value === "object" && value !== null && typeof value.url === "string" && typeof value.method === "string" && isHeadersLike(value.headers);
5833
+ }
5834
+ function isHeadersLike(value) {
5835
+ return typeof value === "object" && value !== null && typeof value.entries === "function";
5836
+ }
5837
+
5827
5838
  // src/common/database/shared.ts
5828
5839
  var MIGRATION_TRANSACTION_TIMEOUT_MS = 5 * 6e4;
5829
5840
  var AsyncMutex = class {
@@ -5855,14 +5866,17 @@ var AsyncMutex = class {
5855
5866
  // src/client/raw-utils.ts
5856
5867
  async function rawHttpFetch(driver, target, params, input, init, options = {}) {
5857
5868
  let path;
5869
+ let originalUrl;
5858
5870
  let mergedInit = init || {};
5859
5871
  if (typeof input === "string") {
5860
5872
  path = input;
5861
- } else if (input instanceof URL) {
5873
+ } else if (isUrlLike(input)) {
5862
5874
  path = input.pathname + input.search;
5863
- } else if (input instanceof Request) {
5875
+ originalUrl = input.toString();
5876
+ } else if (isRequestLike(input)) {
5864
5877
  const url = new URL(input.url);
5865
5878
  path = url.pathname + url.search;
5879
+ originalUrl = url.toString();
5866
5880
  const requestHeaders = new Headers(input.headers);
5867
5881
  const initHeaders = new Headers(init?.headers || {});
5868
5882
  const mergedHeaders = new Headers(requestHeaders);
@@ -5904,6 +5918,10 @@ async function rawHttpFetch(driver, target, params, input, init, options = {}) {
5904
5918
  const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
5905
5919
  const url = new URL(`http://actor/request/${normalizedPath}`);
5906
5920
  const proxyRequestHeaders = new Headers(mergedInit.headers);
5921
+ proxyRequestHeaders.delete(HEADER_ORIGINAL_REQUEST_URL);
5922
+ if (originalUrl) {
5923
+ proxyRequestHeaders.set(HEADER_ORIGINAL_REQUEST_URL, originalUrl);
5924
+ }
5907
5925
  if (params) {
5908
5926
  proxyRequestHeaders.set(HEADER_CONN_PARAMS, JSON.stringify(params));
5909
5927
  }
@@ -6376,6 +6394,7 @@ var ActorHandleRaw = class {
6376
6394
  async #fetchWithResolvedActor(input, init) {
6377
6395
  const maxAttempts = this.#getDynamicQueryMaxAttempts();
6378
6396
  let useQueryTarget = false;
6397
+ const retryableRequest = isRequestLike(input) ? input.clone() : void 0;
6379
6398
  const { skipReadyWait, ...requestInit } = init ?? {};
6380
6399
  const gatewayOptions = resolveActorGatewayOptions(
6381
6400
  this.#gatewayOptions,
@@ -6395,7 +6414,7 @@ var ActorHandleRaw = class {
6395
6414
  this.#driver,
6396
6415
  target,
6397
6416
  this.#params,
6398
- input,
6417
+ retryableRequest ? retryableRequest.clone() : input,
6399
6418
  requestInit,
6400
6419
  gatewayOptions
6401
6420
  );