crossws 0.2.4 → 0.3.1
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/README.md +8 -9
- package/adapters/cloudflare-durable.d.ts +2 -0
- package/adapters/sse.d.ts +2 -0
- package/dist/adapters/bun.d.mts +25 -6
- package/dist/adapters/bun.d.ts +25 -6
- package/dist/adapters/bun.mjs +54 -62
- package/dist/adapters/cloudflare-durable.d.mts +20 -0
- package/dist/adapters/cloudflare-durable.d.ts +20 -0
- package/dist/adapters/cloudflare-durable.mjs +132 -0
- package/dist/adapters/cloudflare.d.mts +5 -5
- package/dist/adapters/cloudflare.d.ts +5 -5
- package/dist/adapters/cloudflare.mjs +56 -49
- package/dist/adapters/deno.d.mts +10 -3
- package/dist/adapters/deno.d.ts +10 -3
- package/dist/adapters/deno.mjs +54 -45
- package/dist/adapters/node.d.mts +4 -2
- package/dist/adapters/node.d.ts +4 -2
- package/dist/adapters/node.mjs +106 -82
- package/dist/adapters/sse.d.mts +12 -0
- package/dist/adapters/sse.d.ts +12 -0
- package/dist/adapters/sse.mjs +120 -0
- package/dist/adapters/uws.d.mts +45 -9
- package/dist/adapters/uws.d.ts +45 -9
- package/dist/adapters/uws.mjs +148 -124
- package/dist/index.d.mts +136 -4
- package/dist/index.d.ts +136 -4
- package/dist/index.mjs +1 -10
- package/dist/shared/crossws.B4sHId41.mjs +42 -0
- package/dist/shared/crossws.By9qWDAI.mjs +8 -0
- package/dist/shared/crossws.ChIJSJVK.d.mts +297 -0
- package/dist/shared/crossws.ChIJSJVK.d.ts +297 -0
- package/dist/shared/crossws.DTY7a69w.mjs +315 -0
- package/dist/shared/{crossws.a5db571c.mjs → crossws.YgHWLi0G.mjs} +284 -115
- package/dist/websocket/{index.d.mts → native.d.mts} +1 -1
- package/dist/websocket/{node.d.cts → native.d.ts} +1 -1
- package/dist/websocket/native.mjs +3 -0
- package/dist/websocket/node.d.mts +1 -1
- package/dist/websocket/node.d.ts +1 -1
- package/dist/websocket/node.mjs +1 -1
- package/dist/websocket/sse.d.mts +41 -0
- package/dist/websocket/sse.d.ts +41 -0
- package/dist/websocket/sse.mjs +127 -0
- package/package.json +78 -75
- package/dist/adapters/bun.cjs +0 -95
- package/dist/adapters/bun.d.cts +0 -17
- package/dist/adapters/cloudflare.cjs +0 -65
- package/dist/adapters/cloudflare.d.cts +0 -12
- package/dist/adapters/deno.cjs +0 -63
- package/dist/adapters/deno.d.cts +0 -15
- package/dist/adapters/node.cjs +0 -739
- package/dist/adapters/node.d.cts +0 -298
- package/dist/adapters/uws.cjs +0 -153
- package/dist/adapters/uws.d.cts +0 -19
- package/dist/index.cjs +0 -17
- package/dist/index.d.cts +0 -6
- package/dist/shared/crossws.2ed26345.cjs +0 -3931
- package/dist/shared/crossws.36b9e66f.cjs +0 -156
- package/dist/shared/crossws.381454fe.d.cts +0 -115
- package/dist/shared/crossws.381454fe.d.mts +0 -115
- package/dist/shared/crossws.381454fe.d.ts +0 -115
- package/dist/shared/crossws.77e89680.mjs +0 -149
- package/dist/websocket/index.cjs +0 -5
- package/dist/websocket/index.d.cts +0 -10
- package/dist/websocket/index.d.ts +0 -10
- package/dist/websocket/index.mjs +0 -3
- package/dist/websocket/node.cjs +0 -17
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
function createCrossWS(opts = {}) {
|
|
4
|
-
const resolveHook = async (req, name) => {
|
|
5
|
-
const hooks = await opts.resolve?.(req);
|
|
6
|
-
return hooks?.[name];
|
|
7
|
-
};
|
|
8
|
-
return {
|
|
9
|
-
// WS Hooks
|
|
10
|
-
async callHook(name, ...args) {
|
|
11
|
-
await opts.hooks?.[name]?.apply(void 0, args);
|
|
12
|
-
const hook = await resolveHook(args[0], name);
|
|
13
|
-
await hook?.apply(void 0, args);
|
|
14
|
-
},
|
|
15
|
-
// Upgrade
|
|
16
|
-
async upgrade(req) {
|
|
17
|
-
const [res1, res2] = await Promise.all([
|
|
18
|
-
opts.hooks?.upgrade?.(req),
|
|
19
|
-
await resolveHook(req, "upgrade").then((h) => h?.(req))
|
|
20
|
-
]);
|
|
21
|
-
const headers = new Headers(res1?.headers);
|
|
22
|
-
if (res2?.headers) {
|
|
23
|
-
for (const [key, value] of new Headers(res2?.headers)) {
|
|
24
|
-
headers.append(key, value);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return { headers };
|
|
28
|
-
},
|
|
29
|
-
// Adapter hook
|
|
30
|
-
$callHook(name, ...args) {
|
|
31
|
-
return opts.adapterHooks?.[name]?.apply(void 0, args);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function toBufferLike(val) {
|
|
37
|
-
if (val === void 0 || val === null) {
|
|
38
|
-
return "";
|
|
39
|
-
}
|
|
40
|
-
if (typeof val === "string") {
|
|
41
|
-
return val;
|
|
42
|
-
}
|
|
43
|
-
if (isPlainObject(val)) {
|
|
44
|
-
return JSON.stringify(val);
|
|
45
|
-
}
|
|
46
|
-
return val;
|
|
47
|
-
}
|
|
48
|
-
function isPlainObject(value) {
|
|
49
|
-
if (value === null || typeof value !== "object") {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
const prototype = Object.getPrototypeOf(value);
|
|
53
|
-
if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
if (Symbol.iterator in value) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
if (Symbol.toStringTag in value) {
|
|
60
|
-
return Object.prototype.toString.call(value) === "[object Module]";
|
|
61
|
-
}
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
class Message {
|
|
66
|
-
constructor(rawData, isBinary) {
|
|
67
|
-
this.rawData = rawData;
|
|
68
|
-
this.isBinary = isBinary;
|
|
69
|
-
}
|
|
70
|
-
text() {
|
|
71
|
-
if (typeof this.rawData === "string") {
|
|
72
|
-
return this.rawData;
|
|
73
|
-
}
|
|
74
|
-
const buff = toBufferLike(this.rawData);
|
|
75
|
-
if (typeof buff === "string") {
|
|
76
|
-
return buff;
|
|
77
|
-
}
|
|
78
|
-
return new TextDecoder().decode(buff);
|
|
79
|
-
}
|
|
80
|
-
toString() {
|
|
81
|
-
return this.text();
|
|
82
|
-
}
|
|
83
|
-
[Symbol.for("nodejs.util.inspect.custom")]() {
|
|
84
|
-
return this.text();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
var __defProp = Object.defineProperty;
|
|
89
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
90
|
-
var __publicField = (obj, key, value) => {
|
|
91
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
92
|
-
return value;
|
|
93
|
-
};
|
|
94
|
-
const ReadyStateMap = {
|
|
95
|
-
"-1": "unknown",
|
|
96
|
-
0: "connecting",
|
|
97
|
-
1: "open",
|
|
98
|
-
2: "closing",
|
|
99
|
-
3: "closed"
|
|
100
|
-
};
|
|
101
|
-
const _Peer = class _Peer {
|
|
102
|
-
constructor(ctx) {
|
|
103
|
-
this.ctx = ctx;
|
|
104
|
-
__publicField(this, "_subscriptions", /* @__PURE__ */ new Set());
|
|
105
|
-
__publicField(this, "_id");
|
|
106
|
-
this._id = ++_Peer._idCounter + "";
|
|
107
|
-
}
|
|
108
|
-
get id() {
|
|
109
|
-
return this._id.toString();
|
|
110
|
-
}
|
|
111
|
-
get addr() {
|
|
112
|
-
return void 0;
|
|
113
|
-
}
|
|
114
|
-
get url() {
|
|
115
|
-
return "/";
|
|
116
|
-
}
|
|
117
|
-
get headers() {
|
|
118
|
-
return {};
|
|
119
|
-
}
|
|
120
|
-
get readyState() {
|
|
121
|
-
return -1;
|
|
122
|
-
}
|
|
123
|
-
publish(topic, message, options) {
|
|
124
|
-
}
|
|
125
|
-
subscribe(topic) {
|
|
126
|
-
this._subscriptions.add(topic);
|
|
127
|
-
}
|
|
128
|
-
unsubscribe(topic) {
|
|
129
|
-
this._subscriptions.delete(topic);
|
|
130
|
-
}
|
|
131
|
-
toString() {
|
|
132
|
-
return `#${this.id}`;
|
|
133
|
-
}
|
|
134
|
-
[Symbol.for("nodejs.util.inspect.custom")]() {
|
|
135
|
-
const _id = this.toString();
|
|
136
|
-
const _addr = this.addr ? ` (${this.addr})` : "";
|
|
137
|
-
const _state = this.readyState === 1 || this.readyState === -1 ? "" : ` [${ReadyStateMap[this.readyState]}]`;
|
|
138
|
-
return `${_id}${_addr}${_state}`;
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
__publicField(_Peer, "_idCounter", 0);
|
|
142
|
-
let Peer = _Peer;
|
|
143
|
-
|
|
144
|
-
function defineWebSocketAdapter(factory) {
|
|
145
|
-
return factory;
|
|
146
|
-
}
|
|
147
|
-
function defineHooks(hooks) {
|
|
148
|
-
return hooks;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
exports.Message = Message;
|
|
152
|
-
exports.Peer = Peer;
|
|
153
|
-
exports.createCrossWS = createCrossWS;
|
|
154
|
-
exports.defineHooks = defineHooks;
|
|
155
|
-
exports.defineWebSocketAdapter = defineWebSocketAdapter;
|
|
156
|
-
exports.toBufferLike = toBufferLike;
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
declare class WSError extends Error {
|
|
2
|
-
constructor(...args: any[]);
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
declare class Message {
|
|
6
|
-
readonly rawData: any;
|
|
7
|
-
readonly isBinary?: boolean | undefined;
|
|
8
|
-
constructor(rawData: any, isBinary?: boolean | undefined);
|
|
9
|
-
text(): string;
|
|
10
|
-
toString(): string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
type ReadyState = 0 | 1 | 2 | 3;
|
|
14
|
-
declare abstract class Peer<AdapterContext = any> implements WSRequest {
|
|
15
|
-
ctx: AdapterContext;
|
|
16
|
-
_subscriptions: Set<string>;
|
|
17
|
-
static _idCounter: number;
|
|
18
|
-
private _id;
|
|
19
|
-
constructor(ctx: AdapterContext);
|
|
20
|
-
get id(): string;
|
|
21
|
-
get addr(): string | undefined;
|
|
22
|
-
get url(): string;
|
|
23
|
-
get headers(): HeadersInit;
|
|
24
|
-
get readyState(): ReadyState | -1;
|
|
25
|
-
abstract send(message: any, options?: {
|
|
26
|
-
compress?: boolean;
|
|
27
|
-
}): number;
|
|
28
|
-
publish(topic: string, message: any, options?: {
|
|
29
|
-
compress?: boolean;
|
|
30
|
-
}): void;
|
|
31
|
-
subscribe(topic: string): void;
|
|
32
|
-
unsubscribe(topic: string): void;
|
|
33
|
-
toString(): string;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
type MaybePromise<T> = T | Promise<T>;
|
|
37
|
-
type Caller<T extends Record<string, (...args: any[]) => Promise<any>>, RT = null> = <K extends keyof T>(key: K, ...args: Parameters<T[K]>) => RT extends null ? Promise<ReturnType<T[K]>> : RT;
|
|
38
|
-
interface AdapterOptions {
|
|
39
|
-
resolve?: ResolveHooks;
|
|
40
|
-
hooks?: Hooks;
|
|
41
|
-
adapterHooks?: AdapterHooks;
|
|
42
|
-
}
|
|
43
|
-
type Adapter<AdapterT, Options extends AdapterOptions> = (options?: Options) => AdapterT;
|
|
44
|
-
declare function defineWebSocketAdapter<AdapterT, Options extends AdapterOptions = AdapterOptions>(factory: Adapter<AdapterT, Options>): Adapter<AdapterT, Options>;
|
|
45
|
-
interface CrossWS {
|
|
46
|
-
$callHook: Caller<AdapterHooks>;
|
|
47
|
-
callHook: Caller<Exclude<Hooks, "upgrade">, void>;
|
|
48
|
-
upgrade: (req: WSRequest) => Promise<{
|
|
49
|
-
headers?: HeadersInit;
|
|
50
|
-
}>;
|
|
51
|
-
}
|
|
52
|
-
interface WSRequest {
|
|
53
|
-
readonly url: string;
|
|
54
|
-
readonly headers: HeadersInit;
|
|
55
|
-
}
|
|
56
|
-
declare function defineHooks<T extends Partial<Hooks> = Partial<Hooks>>(hooks: T): T;
|
|
57
|
-
type ResolveHooks = (info: WSRequest | Peer) => Partial<Hooks> | Promise<Partial<Hooks>>;
|
|
58
|
-
type HookFn<ArgsT extends any[] = any, RT = void> = (info: Peer, ...args: ArgsT) => MaybePromise<RT>;
|
|
59
|
-
interface Hooks extends Record<string, HookFn<any[], any>> {
|
|
60
|
-
/** Upgrading */
|
|
61
|
-
upgrade: (req: WSRequest) => MaybePromise<void | {
|
|
62
|
-
headers?: HeadersInit;
|
|
63
|
-
}>;
|
|
64
|
-
/** A message is received */
|
|
65
|
-
message: (peer: Peer, message: Message) => MaybePromise<void>;
|
|
66
|
-
/** A socket is opened */
|
|
67
|
-
open: (peer: Peer) => MaybePromise<void>;
|
|
68
|
-
/** A socket is closed */
|
|
69
|
-
close: (peer: Peer, details: {
|
|
70
|
-
code?: number;
|
|
71
|
-
reason?: string;
|
|
72
|
-
}) => MaybePromise<void>;
|
|
73
|
-
/** An error occurs */
|
|
74
|
-
error: (peer: Peer, error: WSError) => MaybePromise<void>;
|
|
75
|
-
}
|
|
76
|
-
interface AdapterHooks extends Record<string, HookFn<any[], any>> {
|
|
77
|
-
"bun:message": HookFn<[ws: any, message: any]>;
|
|
78
|
-
"bun:open": HookFn<[ws: any]>;
|
|
79
|
-
"bun:close": HookFn<[ws: any]>;
|
|
80
|
-
"bun:drain": HookFn<[]>;
|
|
81
|
-
"bun:error": HookFn<[ws: any, error: any]>;
|
|
82
|
-
"bun:ping": HookFn<[ws: any, data: any]>;
|
|
83
|
-
"bun:pong": HookFn<[ws: any, data: any]>;
|
|
84
|
-
"cloudflare:accept": HookFn<[]>;
|
|
85
|
-
"cloudflare:message": HookFn<[event: any]>;
|
|
86
|
-
"cloudflare:error": HookFn<[event: any]>;
|
|
87
|
-
"cloudflare:close": HookFn<[event: any]>;
|
|
88
|
-
"deno:open": HookFn<[]>;
|
|
89
|
-
"deno:message": HookFn<[event: any]>;
|
|
90
|
-
"deno:close": HookFn<[]>;
|
|
91
|
-
"deno:error": HookFn<[error: any]>;
|
|
92
|
-
"node:open": HookFn<[]>;
|
|
93
|
-
"node:message": HookFn<[data: any, isBinary: boolean]>;
|
|
94
|
-
"node:close": HookFn<[code: number, reason: Buffer]>;
|
|
95
|
-
"node:error": HookFn<[error: any]>;
|
|
96
|
-
"node:ping": HookFn<[data: Buffer]>;
|
|
97
|
-
"node:pong": HookFn<[data: Buffer]>;
|
|
98
|
-
"node:unexpected-response": HookFn<[req: any, res: any]>;
|
|
99
|
-
"node:upgrade": HookFn<[req: any]>;
|
|
100
|
-
"uws:open": HookFn<[ws: any]>;
|
|
101
|
-
"uws:message": HookFn<[ws: any, message: any, isBinary: boolean]>;
|
|
102
|
-
"uws:close": HookFn<[ws: any, code: number, message: any]>;
|
|
103
|
-
"uws:ping": HookFn<[ws: any, message: any]>;
|
|
104
|
-
"uws:pong": HookFn<[ws: any, message: any]>;
|
|
105
|
-
"uws:drain": HookFn<[ws: any]>;
|
|
106
|
-
"uws:upgrade": HookFn<[res: any, req: any, context: any]>;
|
|
107
|
-
"uws:subscription": HookFn<[
|
|
108
|
-
ws: any,
|
|
109
|
-
topic: any,
|
|
110
|
-
newCount: number,
|
|
111
|
-
oldCount: number
|
|
112
|
-
]>;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export { type AdapterOptions as A, type CrossWS as C, type Hooks as H, Message as M, Peer as P, type ResolveHooks as R, WSError as W, type Caller as a, type Adapter as b, type WSRequest as c, defineWebSocketAdapter as d, defineHooks as e, type AdapterHooks as f };
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
declare class WSError extends Error {
|
|
2
|
-
constructor(...args: any[]);
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
declare class Message {
|
|
6
|
-
readonly rawData: any;
|
|
7
|
-
readonly isBinary?: boolean | undefined;
|
|
8
|
-
constructor(rawData: any, isBinary?: boolean | undefined);
|
|
9
|
-
text(): string;
|
|
10
|
-
toString(): string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
type ReadyState = 0 | 1 | 2 | 3;
|
|
14
|
-
declare abstract class Peer<AdapterContext = any> implements WSRequest {
|
|
15
|
-
ctx: AdapterContext;
|
|
16
|
-
_subscriptions: Set<string>;
|
|
17
|
-
static _idCounter: number;
|
|
18
|
-
private _id;
|
|
19
|
-
constructor(ctx: AdapterContext);
|
|
20
|
-
get id(): string;
|
|
21
|
-
get addr(): string | undefined;
|
|
22
|
-
get url(): string;
|
|
23
|
-
get headers(): HeadersInit;
|
|
24
|
-
get readyState(): ReadyState | -1;
|
|
25
|
-
abstract send(message: any, options?: {
|
|
26
|
-
compress?: boolean;
|
|
27
|
-
}): number;
|
|
28
|
-
publish(topic: string, message: any, options?: {
|
|
29
|
-
compress?: boolean;
|
|
30
|
-
}): void;
|
|
31
|
-
subscribe(topic: string): void;
|
|
32
|
-
unsubscribe(topic: string): void;
|
|
33
|
-
toString(): string;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
type MaybePromise<T> = T | Promise<T>;
|
|
37
|
-
type Caller<T extends Record<string, (...args: any[]) => Promise<any>>, RT = null> = <K extends keyof T>(key: K, ...args: Parameters<T[K]>) => RT extends null ? Promise<ReturnType<T[K]>> : RT;
|
|
38
|
-
interface AdapterOptions {
|
|
39
|
-
resolve?: ResolveHooks;
|
|
40
|
-
hooks?: Hooks;
|
|
41
|
-
adapterHooks?: AdapterHooks;
|
|
42
|
-
}
|
|
43
|
-
type Adapter<AdapterT, Options extends AdapterOptions> = (options?: Options) => AdapterT;
|
|
44
|
-
declare function defineWebSocketAdapter<AdapterT, Options extends AdapterOptions = AdapterOptions>(factory: Adapter<AdapterT, Options>): Adapter<AdapterT, Options>;
|
|
45
|
-
interface CrossWS {
|
|
46
|
-
$callHook: Caller<AdapterHooks>;
|
|
47
|
-
callHook: Caller<Exclude<Hooks, "upgrade">, void>;
|
|
48
|
-
upgrade: (req: WSRequest) => Promise<{
|
|
49
|
-
headers?: HeadersInit;
|
|
50
|
-
}>;
|
|
51
|
-
}
|
|
52
|
-
interface WSRequest {
|
|
53
|
-
readonly url: string;
|
|
54
|
-
readonly headers: HeadersInit;
|
|
55
|
-
}
|
|
56
|
-
declare function defineHooks<T extends Partial<Hooks> = Partial<Hooks>>(hooks: T): T;
|
|
57
|
-
type ResolveHooks = (info: WSRequest | Peer) => Partial<Hooks> | Promise<Partial<Hooks>>;
|
|
58
|
-
type HookFn<ArgsT extends any[] = any, RT = void> = (info: Peer, ...args: ArgsT) => MaybePromise<RT>;
|
|
59
|
-
interface Hooks extends Record<string, HookFn<any[], any>> {
|
|
60
|
-
/** Upgrading */
|
|
61
|
-
upgrade: (req: WSRequest) => MaybePromise<void | {
|
|
62
|
-
headers?: HeadersInit;
|
|
63
|
-
}>;
|
|
64
|
-
/** A message is received */
|
|
65
|
-
message: (peer: Peer, message: Message) => MaybePromise<void>;
|
|
66
|
-
/** A socket is opened */
|
|
67
|
-
open: (peer: Peer) => MaybePromise<void>;
|
|
68
|
-
/** A socket is closed */
|
|
69
|
-
close: (peer: Peer, details: {
|
|
70
|
-
code?: number;
|
|
71
|
-
reason?: string;
|
|
72
|
-
}) => MaybePromise<void>;
|
|
73
|
-
/** An error occurs */
|
|
74
|
-
error: (peer: Peer, error: WSError) => MaybePromise<void>;
|
|
75
|
-
}
|
|
76
|
-
interface AdapterHooks extends Record<string, HookFn<any[], any>> {
|
|
77
|
-
"bun:message": HookFn<[ws: any, message: any]>;
|
|
78
|
-
"bun:open": HookFn<[ws: any]>;
|
|
79
|
-
"bun:close": HookFn<[ws: any]>;
|
|
80
|
-
"bun:drain": HookFn<[]>;
|
|
81
|
-
"bun:error": HookFn<[ws: any, error: any]>;
|
|
82
|
-
"bun:ping": HookFn<[ws: any, data: any]>;
|
|
83
|
-
"bun:pong": HookFn<[ws: any, data: any]>;
|
|
84
|
-
"cloudflare:accept": HookFn<[]>;
|
|
85
|
-
"cloudflare:message": HookFn<[event: any]>;
|
|
86
|
-
"cloudflare:error": HookFn<[event: any]>;
|
|
87
|
-
"cloudflare:close": HookFn<[event: any]>;
|
|
88
|
-
"deno:open": HookFn<[]>;
|
|
89
|
-
"deno:message": HookFn<[event: any]>;
|
|
90
|
-
"deno:close": HookFn<[]>;
|
|
91
|
-
"deno:error": HookFn<[error: any]>;
|
|
92
|
-
"node:open": HookFn<[]>;
|
|
93
|
-
"node:message": HookFn<[data: any, isBinary: boolean]>;
|
|
94
|
-
"node:close": HookFn<[code: number, reason: Buffer]>;
|
|
95
|
-
"node:error": HookFn<[error: any]>;
|
|
96
|
-
"node:ping": HookFn<[data: Buffer]>;
|
|
97
|
-
"node:pong": HookFn<[data: Buffer]>;
|
|
98
|
-
"node:unexpected-response": HookFn<[req: any, res: any]>;
|
|
99
|
-
"node:upgrade": HookFn<[req: any]>;
|
|
100
|
-
"uws:open": HookFn<[ws: any]>;
|
|
101
|
-
"uws:message": HookFn<[ws: any, message: any, isBinary: boolean]>;
|
|
102
|
-
"uws:close": HookFn<[ws: any, code: number, message: any]>;
|
|
103
|
-
"uws:ping": HookFn<[ws: any, message: any]>;
|
|
104
|
-
"uws:pong": HookFn<[ws: any, message: any]>;
|
|
105
|
-
"uws:drain": HookFn<[ws: any]>;
|
|
106
|
-
"uws:upgrade": HookFn<[res: any, req: any, context: any]>;
|
|
107
|
-
"uws:subscription": HookFn<[
|
|
108
|
-
ws: any,
|
|
109
|
-
topic: any,
|
|
110
|
-
newCount: number,
|
|
111
|
-
oldCount: number
|
|
112
|
-
]>;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export { type AdapterOptions as A, type CrossWS as C, type Hooks as H, Message as M, Peer as P, type ResolveHooks as R, WSError as W, type Caller as a, type Adapter as b, type WSRequest as c, defineWebSocketAdapter as d, defineHooks as e, type AdapterHooks as f };
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
declare class WSError extends Error {
|
|
2
|
-
constructor(...args: any[]);
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
declare class Message {
|
|
6
|
-
readonly rawData: any;
|
|
7
|
-
readonly isBinary?: boolean | undefined;
|
|
8
|
-
constructor(rawData: any, isBinary?: boolean | undefined);
|
|
9
|
-
text(): string;
|
|
10
|
-
toString(): string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
type ReadyState = 0 | 1 | 2 | 3;
|
|
14
|
-
declare abstract class Peer<AdapterContext = any> implements WSRequest {
|
|
15
|
-
ctx: AdapterContext;
|
|
16
|
-
_subscriptions: Set<string>;
|
|
17
|
-
static _idCounter: number;
|
|
18
|
-
private _id;
|
|
19
|
-
constructor(ctx: AdapterContext);
|
|
20
|
-
get id(): string;
|
|
21
|
-
get addr(): string | undefined;
|
|
22
|
-
get url(): string;
|
|
23
|
-
get headers(): HeadersInit;
|
|
24
|
-
get readyState(): ReadyState | -1;
|
|
25
|
-
abstract send(message: any, options?: {
|
|
26
|
-
compress?: boolean;
|
|
27
|
-
}): number;
|
|
28
|
-
publish(topic: string, message: any, options?: {
|
|
29
|
-
compress?: boolean;
|
|
30
|
-
}): void;
|
|
31
|
-
subscribe(topic: string): void;
|
|
32
|
-
unsubscribe(topic: string): void;
|
|
33
|
-
toString(): string;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
type MaybePromise<T> = T | Promise<T>;
|
|
37
|
-
type Caller<T extends Record<string, (...args: any[]) => Promise<any>>, RT = null> = <K extends keyof T>(key: K, ...args: Parameters<T[K]>) => RT extends null ? Promise<ReturnType<T[K]>> : RT;
|
|
38
|
-
interface AdapterOptions {
|
|
39
|
-
resolve?: ResolveHooks;
|
|
40
|
-
hooks?: Hooks;
|
|
41
|
-
adapterHooks?: AdapterHooks;
|
|
42
|
-
}
|
|
43
|
-
type Adapter<AdapterT, Options extends AdapterOptions> = (options?: Options) => AdapterT;
|
|
44
|
-
declare function defineWebSocketAdapter<AdapterT, Options extends AdapterOptions = AdapterOptions>(factory: Adapter<AdapterT, Options>): Adapter<AdapterT, Options>;
|
|
45
|
-
interface CrossWS {
|
|
46
|
-
$callHook: Caller<AdapterHooks>;
|
|
47
|
-
callHook: Caller<Exclude<Hooks, "upgrade">, void>;
|
|
48
|
-
upgrade: (req: WSRequest) => Promise<{
|
|
49
|
-
headers?: HeadersInit;
|
|
50
|
-
}>;
|
|
51
|
-
}
|
|
52
|
-
interface WSRequest {
|
|
53
|
-
readonly url: string;
|
|
54
|
-
readonly headers: HeadersInit;
|
|
55
|
-
}
|
|
56
|
-
declare function defineHooks<T extends Partial<Hooks> = Partial<Hooks>>(hooks: T): T;
|
|
57
|
-
type ResolveHooks = (info: WSRequest | Peer) => Partial<Hooks> | Promise<Partial<Hooks>>;
|
|
58
|
-
type HookFn<ArgsT extends any[] = any, RT = void> = (info: Peer, ...args: ArgsT) => MaybePromise<RT>;
|
|
59
|
-
interface Hooks extends Record<string, HookFn<any[], any>> {
|
|
60
|
-
/** Upgrading */
|
|
61
|
-
upgrade: (req: WSRequest) => MaybePromise<void | {
|
|
62
|
-
headers?: HeadersInit;
|
|
63
|
-
}>;
|
|
64
|
-
/** A message is received */
|
|
65
|
-
message: (peer: Peer, message: Message) => MaybePromise<void>;
|
|
66
|
-
/** A socket is opened */
|
|
67
|
-
open: (peer: Peer) => MaybePromise<void>;
|
|
68
|
-
/** A socket is closed */
|
|
69
|
-
close: (peer: Peer, details: {
|
|
70
|
-
code?: number;
|
|
71
|
-
reason?: string;
|
|
72
|
-
}) => MaybePromise<void>;
|
|
73
|
-
/** An error occurs */
|
|
74
|
-
error: (peer: Peer, error: WSError) => MaybePromise<void>;
|
|
75
|
-
}
|
|
76
|
-
interface AdapterHooks extends Record<string, HookFn<any[], any>> {
|
|
77
|
-
"bun:message": HookFn<[ws: any, message: any]>;
|
|
78
|
-
"bun:open": HookFn<[ws: any]>;
|
|
79
|
-
"bun:close": HookFn<[ws: any]>;
|
|
80
|
-
"bun:drain": HookFn<[]>;
|
|
81
|
-
"bun:error": HookFn<[ws: any, error: any]>;
|
|
82
|
-
"bun:ping": HookFn<[ws: any, data: any]>;
|
|
83
|
-
"bun:pong": HookFn<[ws: any, data: any]>;
|
|
84
|
-
"cloudflare:accept": HookFn<[]>;
|
|
85
|
-
"cloudflare:message": HookFn<[event: any]>;
|
|
86
|
-
"cloudflare:error": HookFn<[event: any]>;
|
|
87
|
-
"cloudflare:close": HookFn<[event: any]>;
|
|
88
|
-
"deno:open": HookFn<[]>;
|
|
89
|
-
"deno:message": HookFn<[event: any]>;
|
|
90
|
-
"deno:close": HookFn<[]>;
|
|
91
|
-
"deno:error": HookFn<[error: any]>;
|
|
92
|
-
"node:open": HookFn<[]>;
|
|
93
|
-
"node:message": HookFn<[data: any, isBinary: boolean]>;
|
|
94
|
-
"node:close": HookFn<[code: number, reason: Buffer]>;
|
|
95
|
-
"node:error": HookFn<[error: any]>;
|
|
96
|
-
"node:ping": HookFn<[data: Buffer]>;
|
|
97
|
-
"node:pong": HookFn<[data: Buffer]>;
|
|
98
|
-
"node:unexpected-response": HookFn<[req: any, res: any]>;
|
|
99
|
-
"node:upgrade": HookFn<[req: any]>;
|
|
100
|
-
"uws:open": HookFn<[ws: any]>;
|
|
101
|
-
"uws:message": HookFn<[ws: any, message: any, isBinary: boolean]>;
|
|
102
|
-
"uws:close": HookFn<[ws: any, code: number, message: any]>;
|
|
103
|
-
"uws:ping": HookFn<[ws: any, message: any]>;
|
|
104
|
-
"uws:pong": HookFn<[ws: any, message: any]>;
|
|
105
|
-
"uws:drain": HookFn<[ws: any]>;
|
|
106
|
-
"uws:upgrade": HookFn<[res: any, req: any, context: any]>;
|
|
107
|
-
"uws:subscription": HookFn<[
|
|
108
|
-
ws: any,
|
|
109
|
-
topic: any,
|
|
110
|
-
newCount: number,
|
|
111
|
-
oldCount: number
|
|
112
|
-
]>;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export { type AdapterOptions as A, type CrossWS as C, type Hooks as H, Message as M, Peer as P, type ResolveHooks as R, WSError as W, type Caller as a, type Adapter as b, type WSRequest as c, defineWebSocketAdapter as d, defineHooks as e, type AdapterHooks as f };
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
function createCrossWS(opts = {}) {
|
|
2
|
-
const resolveHook = async (req, name) => {
|
|
3
|
-
const hooks = await opts.resolve?.(req);
|
|
4
|
-
return hooks?.[name];
|
|
5
|
-
};
|
|
6
|
-
return {
|
|
7
|
-
// WS Hooks
|
|
8
|
-
async callHook(name, ...args) {
|
|
9
|
-
await opts.hooks?.[name]?.apply(void 0, args);
|
|
10
|
-
const hook = await resolveHook(args[0], name);
|
|
11
|
-
await hook?.apply(void 0, args);
|
|
12
|
-
},
|
|
13
|
-
// Upgrade
|
|
14
|
-
async upgrade(req) {
|
|
15
|
-
const [res1, res2] = await Promise.all([
|
|
16
|
-
opts.hooks?.upgrade?.(req),
|
|
17
|
-
await resolveHook(req, "upgrade").then((h) => h?.(req))
|
|
18
|
-
]);
|
|
19
|
-
const headers = new Headers(res1?.headers);
|
|
20
|
-
if (res2?.headers) {
|
|
21
|
-
for (const [key, value] of new Headers(res2?.headers)) {
|
|
22
|
-
headers.append(key, value);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return { headers };
|
|
26
|
-
},
|
|
27
|
-
// Adapter hook
|
|
28
|
-
$callHook(name, ...args) {
|
|
29
|
-
return opts.adapterHooks?.[name]?.apply(void 0, args);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function toBufferLike(val) {
|
|
35
|
-
if (val === void 0 || val === null) {
|
|
36
|
-
return "";
|
|
37
|
-
}
|
|
38
|
-
if (typeof val === "string") {
|
|
39
|
-
return val;
|
|
40
|
-
}
|
|
41
|
-
if (isPlainObject(val)) {
|
|
42
|
-
return JSON.stringify(val);
|
|
43
|
-
}
|
|
44
|
-
return val;
|
|
45
|
-
}
|
|
46
|
-
function isPlainObject(value) {
|
|
47
|
-
if (value === null || typeof value !== "object") {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
const prototype = Object.getPrototypeOf(value);
|
|
51
|
-
if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
if (Symbol.iterator in value) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
if (Symbol.toStringTag in value) {
|
|
58
|
-
return Object.prototype.toString.call(value) === "[object Module]";
|
|
59
|
-
}
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
class Message {
|
|
64
|
-
constructor(rawData, isBinary) {
|
|
65
|
-
this.rawData = rawData;
|
|
66
|
-
this.isBinary = isBinary;
|
|
67
|
-
}
|
|
68
|
-
text() {
|
|
69
|
-
if (typeof this.rawData === "string") {
|
|
70
|
-
return this.rawData;
|
|
71
|
-
}
|
|
72
|
-
const buff = toBufferLike(this.rawData);
|
|
73
|
-
if (typeof buff === "string") {
|
|
74
|
-
return buff;
|
|
75
|
-
}
|
|
76
|
-
return new TextDecoder().decode(buff);
|
|
77
|
-
}
|
|
78
|
-
toString() {
|
|
79
|
-
return this.text();
|
|
80
|
-
}
|
|
81
|
-
[Symbol.for("nodejs.util.inspect.custom")]() {
|
|
82
|
-
return this.text();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
var __defProp = Object.defineProperty;
|
|
87
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
88
|
-
var __publicField = (obj, key, value) => {
|
|
89
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
90
|
-
return value;
|
|
91
|
-
};
|
|
92
|
-
const ReadyStateMap = {
|
|
93
|
-
"-1": "unknown",
|
|
94
|
-
0: "connecting",
|
|
95
|
-
1: "open",
|
|
96
|
-
2: "closing",
|
|
97
|
-
3: "closed"
|
|
98
|
-
};
|
|
99
|
-
const _Peer = class _Peer {
|
|
100
|
-
constructor(ctx) {
|
|
101
|
-
this.ctx = ctx;
|
|
102
|
-
__publicField(this, "_subscriptions", /* @__PURE__ */ new Set());
|
|
103
|
-
__publicField(this, "_id");
|
|
104
|
-
this._id = ++_Peer._idCounter + "";
|
|
105
|
-
}
|
|
106
|
-
get id() {
|
|
107
|
-
return this._id.toString();
|
|
108
|
-
}
|
|
109
|
-
get addr() {
|
|
110
|
-
return void 0;
|
|
111
|
-
}
|
|
112
|
-
get url() {
|
|
113
|
-
return "/";
|
|
114
|
-
}
|
|
115
|
-
get headers() {
|
|
116
|
-
return {};
|
|
117
|
-
}
|
|
118
|
-
get readyState() {
|
|
119
|
-
return -1;
|
|
120
|
-
}
|
|
121
|
-
publish(topic, message, options) {
|
|
122
|
-
}
|
|
123
|
-
subscribe(topic) {
|
|
124
|
-
this._subscriptions.add(topic);
|
|
125
|
-
}
|
|
126
|
-
unsubscribe(topic) {
|
|
127
|
-
this._subscriptions.delete(topic);
|
|
128
|
-
}
|
|
129
|
-
toString() {
|
|
130
|
-
return `#${this.id}`;
|
|
131
|
-
}
|
|
132
|
-
[Symbol.for("nodejs.util.inspect.custom")]() {
|
|
133
|
-
const _id = this.toString();
|
|
134
|
-
const _addr = this.addr ? ` (${this.addr})` : "";
|
|
135
|
-
const _state = this.readyState === 1 || this.readyState === -1 ? "" : ` [${ReadyStateMap[this.readyState]}]`;
|
|
136
|
-
return `${_id}${_addr}${_state}`;
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
__publicField(_Peer, "_idCounter", 0);
|
|
140
|
-
let Peer = _Peer;
|
|
141
|
-
|
|
142
|
-
function defineWebSocketAdapter(factory) {
|
|
143
|
-
return factory;
|
|
144
|
-
}
|
|
145
|
-
function defineHooks(hooks) {
|
|
146
|
-
return hooks;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export { Message as M, Peer as P, defineHooks as a, createCrossWS as c, defineWebSocketAdapter as d, toBufferLike as t };
|
package/dist/websocket/index.cjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: {
|
|
2
|
-
new (url: string | URL, protocols?: string | string[] | undefined): WebSocket;
|
|
3
|
-
prototype: WebSocket;
|
|
4
|
-
readonly CONNECTING: 0;
|
|
5
|
-
readonly OPEN: 1;
|
|
6
|
-
readonly CLOSING: 2;
|
|
7
|
-
readonly CLOSED: 3;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export { _default as default };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: {
|
|
2
|
-
new (url: string | URL, protocols?: string | string[] | undefined): WebSocket;
|
|
3
|
-
prototype: WebSocket;
|
|
4
|
-
readonly CONNECTING: 0;
|
|
5
|
-
readonly OPEN: 1;
|
|
6
|
-
readonly CLOSING: 2;
|
|
7
|
-
readonly CLOSED: 3;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export { _default as default };
|
package/dist/websocket/index.mjs
DELETED