@vercel/functions 3.6.3 → 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.
- package/CHANGELOG.md +6 -0
- package/docs/index/README.md +4 -0
- package/docs/index/functions/experimental_upgradeWebSocket.md +19 -0
- package/docs/index/interfaces/WebSocket.md +2187 -0
- package/docs/index/type-aliases/WebSocket.md +9 -0
- package/docs/index/type-aliases/WebSocketData.md +11 -0
- package/get-context.d.ts +13 -0
- package/index.d.ts +2 -0
- package/index.js +3 -0
- package/package.json +3 -1
- package/websocket/index.d.ts +2 -0
- package/websocket/index.js +77 -0
|
@@ -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.
|
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.
|
|
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,6 +73,7 @@
|
|
|
72
73
|
"access": "public"
|
|
73
74
|
},
|
|
74
75
|
"dependencies": {
|
|
76
|
+
"ws": "8.20.0",
|
|
75
77
|
"@vercel/oidc": "3.6.1"
|
|
76
78
|
},
|
|
77
79
|
"scripts": {
|
|
@@ -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
|
+
});
|