@vercel/functions 3.6.2 → 3.7.0

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.
@@ -0,0 +1,9 @@
1
+ [**@vercel/functions**](../../README.md)
2
+
3
+ ***
4
+
5
+ # Type Alias: WebSocket
6
+
7
+ > **WebSocket** = *typeof* `WebSocket`
8
+
9
+ Defined in: node\_modules/.pnpm/@types+ws@8.18.1/node\_modules/@types/ws/index.d.ts:438
@@ -0,0 +1,11 @@
1
+ [**@vercel/functions**](../../README.md)
2
+
3
+ ***
4
+
5
+ # Type Alias: WebSocketData
6
+
7
+ > **WebSocketData** = `Buffer` \| [`ArrayBuffer`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) \| `Buffer`[]
8
+
9
+ Defined in: node\_modules/.pnpm/@types+ws@8.18.1/node\_modules/@types/ws/index.d.ts:205
10
+
11
+ Data represents the raw message payload received over the WebSocket.
@@ -18,7 +18,7 @@ The init object for the `awsCredentialsProvider` function.
18
18
 
19
19
  > `optional` **clientConfig?**: `any`
20
20
 
21
- Defined in: node\_modules/.pnpm/@aws-sdk+credential-provider-web-identity@3.609.0\_@aws-sdk+client-sts@3.806.0/node\_modules/@aws-sdk/credential-provider-web-identity/dist-types/fromWebToken.d.ts:135
21
+ Defined in: node\_modules/.pnpm/@aws-sdk+credential-provider-web-identity@3.609.0\_@aws-sdk+client-sts@3.609.0/node\_modules/@aws-sdk/credential-provider-web-identity/dist-types/fromWebToken.d.ts:135
22
22
 
23
23
  Custom STS client configurations overriding the default ones.
24
24
 
@@ -32,7 +32,7 @@ Custom STS client configurations overriding the default ones.
32
32
 
33
33
  > `optional` **clientPlugins?**: `Pluggable`\<`any`, `any`\>[]
34
34
 
35
- Defined in: node\_modules/.pnpm/@aws-sdk+credential-provider-web-identity@3.609.0\_@aws-sdk+client-sts@3.806.0/node\_modules/@aws-sdk/credential-provider-web-identity/dist-types/fromWebToken.d.ts:139
35
+ Defined in: node\_modules/.pnpm/@aws-sdk+credential-provider-web-identity@3.609.0\_@aws-sdk+client-sts@3.609.0/node\_modules/@aws-sdk/credential-provider-web-identity/dist-types/fromWebToken.d.ts:139
36
36
 
37
37
  Custom STS client middleware plugin to modify the client default behavior.
38
38
 
@@ -162,7 +162,7 @@ ARN of the role that the caller is assuming.
162
162
 
163
163
  > `optional` **roleAssumerWithWebIdentity?**: (`params`) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`AwsCredentialIdentity`\>
164
164
 
165
- Defined in: node\_modules/.pnpm/@aws-sdk+credential-provider-web-identity@3.609.0\_@aws-sdk+client-sts@3.806.0/node\_modules/@aws-sdk/credential-provider-web-identity/dist-types/fromWebToken.d.ts:130
165
+ Defined in: node\_modules/.pnpm/@aws-sdk+credential-provider-web-identity@3.609.0\_@aws-sdk+client-sts@3.609.0/node\_modules/@aws-sdk/credential-provider-web-identity/dist-types/fromWebToken.d.ts:130
166
166
 
167
167
  A function that assumes a role with web identity and returns a promise fulfilled with credentials for the assumed role.
168
168
 
@@ -186,7 +186,7 @@ A function that assumes a role with web identity and returns a promise fulfilled
186
186
 
187
187
  > `optional` **roleSessionName?**: `string`
188
188
 
189
- Defined in: node\_modules/.pnpm/@aws-sdk+credential-provider-web-identity@3.609.0\_@aws-sdk+client-sts@3.806.0/node\_modules/@aws-sdk/credential-provider-web-identity/dist-types/fromWebToken.d.ts:123
189
+ Defined in: node\_modules/.pnpm/@aws-sdk+credential-provider-web-identity@3.609.0\_@aws-sdk+client-sts@3.609.0/node\_modules/@aws-sdk/credential-provider-web-identity/dist-types/fromWebToken.d.ts:123
190
190
 
191
191
  An identifier for the assumed role session.
192
192
 
package/get-context.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import type { IncomingMessage } from 'http';
2
+ import type { Socket } from 'net';
1
3
  import { RuntimeCache } from './cache/types';
2
4
  import { PurgeApi } from './purge/types';
3
5
  import { AddCacheTagApi } from './addcachetag/types';
@@ -7,6 +9,17 @@ type Context = {
7
9
  purge?: PurgeApi;
8
10
  addCacheTag?: AddCacheTagApi;
9
11
  headers?: Record<string, string>;
12
+ /**
13
+ * Low-level WebSocket upgrade provided by the runtime bridge.
14
+ * Writes a 101 response on the underlying socket, detaches it
15
+ * from the ServerResponse, and returns the raw req/socket/head
16
+ * tuple for use with libraries like `ws`.
17
+ */
18
+ upgradeWebSocket?: () => {
19
+ req: IncomingMessage;
20
+ socket: Socket;
21
+ head: Buffer;
22
+ };
10
23
  };
11
24
  export declare const SYMBOL_FOR_REQ_CONTEXT: unique symbol;
12
25
  export declare function getContext(): Context;
package/index.d.ts CHANGED
@@ -10,3 +10,5 @@ export { invalidateByTag, dangerouslyDeleteByTag, invalidateBySrcImage, dangerou
10
10
  export type { PurgeApi, DangerouslyDeleteOptions } from './purge/types';
11
11
  export { addCacheTag } from './addcachetag';
12
12
  export type { AddCacheTagApi } from './addcachetag/types';
13
+ export { experimental_upgradeWebSocket } from './websocket';
14
+ export type { WebSocket, RawData as WebSocketData } from 'ws';
package/index.js CHANGED
@@ -23,6 +23,7 @@ __export(src_exports, {
23
23
  dangerouslyDeleteBySrcImage: () => import_purge.dangerouslyDeleteBySrcImage,
24
24
  dangerouslyDeleteByTag: () => import_purge.dangerouslyDeleteByTag,
25
25
  experimental_attachDatabasePool: () => import_db_connections.experimental_attachDatabasePool,
26
+ experimental_upgradeWebSocket: () => import_websocket.experimental_upgradeWebSocket,
26
27
  geolocation: () => import_headers.geolocation,
27
28
  getCache: () => import_cache.getCache,
28
29
  getEnv: () => import_get_env.getEnv,
@@ -42,6 +43,7 @@ var import_cache = require("./cache");
42
43
  var import_db_connections = require("./db-connections");
43
44
  var import_purge = require("./purge");
44
45
  var import_addcachetag = require("./addcachetag");
46
+ var import_websocket = require("./websocket");
45
47
  // Annotate the CommonJS export names for ESM import in node:
46
48
  0 && (module.exports = {
47
49
  addCacheTag,
@@ -49,6 +51,7 @@ var import_addcachetag = require("./addcachetag");
49
51
  dangerouslyDeleteBySrcImage,
50
52
  dangerouslyDeleteByTag,
51
53
  experimental_attachDatabasePool,
54
+ experimental_upgradeWebSocket,
52
55
  geolocation,
53
56
  getCache,
54
57
  getEnv,
package/package.json CHANGED
@@ -30,7 +30,7 @@
30
30
  "require": "./middleware.js"
31
31
  }
32
32
  },
33
- "version": "3.6.2",
33
+ "version": "3.7.0",
34
34
  "repository": {
35
35
  "directory": "packages/functions",
36
36
  "type": "git",
@@ -44,6 +44,7 @@
44
44
  "@aws-sdk/credential-provider-web-identity": "3.609.0",
45
45
  "@smithy/types": "3.3.0",
46
46
  "@types/pg": "8.15.5",
47
+ "@types/ws": "8.18.1",
47
48
  "cassandra-driver": "4.8.0",
48
49
  "ioredis": "5.6.1",
49
50
  "mariadb": "3.4.5",
@@ -72,7 +73,8 @@
72
73
  "access": "public"
73
74
  },
74
75
  "dependencies": {
75
- "@vercel/oidc": "3.6.0"
76
+ "ws": "8.20.0",
77
+ "@vercel/oidc": "3.6.1"
76
78
  },
77
79
  "scripts": {
78
80
  "pretest": "pnpm run build:code",
@@ -0,0 +1,2 @@
1
+ import { type WebSocket } from 'ws';
2
+ export declare function experimental_upgradeWebSocket(handler: (ws: WebSocket) => void | Promise<void>): Promise<Response>;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var websocket_exports = {};
20
+ __export(websocket_exports, {
21
+ experimental_upgradeWebSocket: () => experimental_upgradeWebSocket
22
+ });
23
+ module.exports = __toCommonJS(websocket_exports);
24
+ var import_ws = require("ws");
25
+ var import_get_context = require("../get-context");
26
+ async function experimental_upgradeWebSocket(handler) {
27
+ const ctx = (0, import_get_context.getContext)();
28
+ if (typeof ctx.upgradeWebSocket !== "function") {
29
+ throw new Error(
30
+ "experimental_upgradeWebSocket is not available in the current runtime environment. This feature requires a Vercel runtime that supports WebSocket upgrades."
31
+ );
32
+ }
33
+ const { req, socket, head } = ctx.upgradeWebSocket();
34
+ const wss = new import_ws.WebSocketServer({ noServer: true });
35
+ const ws = await new Promise((resolve, reject) => {
36
+ const cleanup = () => {
37
+ socket.removeListener("error", onError);
38
+ socket.removeListener("close", onClose);
39
+ };
40
+ const rejectUpgrade = (err) => {
41
+ cleanup();
42
+ if (err instanceof Error) {
43
+ reject(err);
44
+ return;
45
+ }
46
+ const error = new Error("WebSocket upgrade failed");
47
+ error.cause = err;
48
+ reject(error);
49
+ };
50
+ const resolveUpgrade = (ws2) => {
51
+ cleanup();
52
+ resolve(ws2);
53
+ };
54
+ const onError = (err) => rejectUpgrade(err);
55
+ const onClose = () => rejectUpgrade(
56
+ new Error("socket closed before the WebSocket upgrade completed")
57
+ );
58
+ socket.once("error", onError);
59
+ socket.once("close", onClose);
60
+ try {
61
+ wss.handleUpgrade(req, socket, head, resolveUpgrade);
62
+ } catch (err) {
63
+ rejectUpgrade(err);
64
+ }
65
+ });
66
+ try {
67
+ await handler(ws);
68
+ } catch (err) {
69
+ ws.close(1011, "WebSocket handler failed");
70
+ throw err;
71
+ }
72
+ return new Response(null, { status: 204 });
73
+ }
74
+ // Annotate the CommonJS export names for ESM import in node:
75
+ 0 && (module.exports = {
76
+ experimental_upgradeWebSocket
77
+ });