Files
Tiber365/node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs
2025-07-24 18:46:24 +02:00

87 lines
2.2 KiB
JavaScript

class AdapterHookable {
options;
constructor(options) {
this.options = options || {};
}
callHook(name, arg1, arg2) {
const globalHook = this.options.hooks?.[name];
const globalPromise = globalHook?.(arg1, arg2);
const resolveHooksPromise = this.options.resolve?.(arg1);
if (!resolveHooksPromise) {
return globalPromise;
}
const resolvePromise = resolveHooksPromise instanceof Promise ? resolveHooksPromise.then((hooks) => hooks?.[name]) : resolveHooksPromise?.[name];
return Promise.all([globalPromise, resolvePromise]).then(
([globalRes, hook]) => {
const hookResPromise = hook?.(arg1, arg2);
return hookResPromise instanceof Promise ? hookResPromise.then((hookRes) => hookRes || globalRes) : hookResPromise || globalRes;
}
);
}
async upgrade(request) {
let context = request.context;
if (!context) {
context = {};
Object.defineProperty(request, "context", {
enumerable: true,
value: context
});
}
try {
const res = await this.callHook(
"upgrade",
request
);
if (!res) {
return { context };
}
if (res.ok === false) {
return { context, endResponse: res };
}
if (res.headers) {
return {
context,
upgradeHeaders: res.headers
};
}
} catch (error) {
const errResponse = error.response || error;
if (errResponse instanceof Response) {
return {
context,
endResponse: errResponse
};
}
throw error;
}
return { context };
}
}
function defineHooks(hooks) {
return hooks;
}
function adapterUtils(peers) {
return {
peers,
publish(topic, message, options) {
let firstPeerWithTopic;
for (const peer of peers) {
if (peer.topics.has(topic)) {
firstPeerWithTopic = peer;
break;
}
}
if (firstPeerWithTopic) {
firstPeerWithTopic.send(message, options);
firstPeerWithTopic.publish(topic, message, options);
}
}
};
}
function defineWebSocketAdapter(factory) {
return factory;
}
export { AdapterHookable as A, adapterUtils as a, defineWebSocketAdapter as b, defineHooks as d };