@stagewise/toolbar
Version:
stagewise toolbar SDK for AI Agent interaction.
1,166 lines • 725 kB
JavaScript
var define_MAIN_MODULES_default = { "index-DsC5zpes.js": `import { jsx, jsxs } from "react/jsx-runtime";
import { createContext, useMemo, useContext, useState, useRef, useCallback, useEffect, createRef } from "react";
const ConfigContext = createContext({
config: void 0
});
function ConfigProvider({
children,
config
}) {
const value = useMemo(() => ({
config
}), [config]);
return /* @__PURE__ */ jsx(ConfigContext.Provider, { value, children });
}
function useConfig() {
return useContext(ConfigContext);
}
var __create$1 = Object.create, __defProp$2 = Object.defineProperty, __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor, __getOwnPropNames$1 = Object.getOwnPropertyNames, __getProtoOf$1 = Object.getPrototypeOf, __hasOwnProp$1 = Object.prototype.hasOwnProperty, __commonJS$1 = (cb, mod) => function() {
return mod || (0, cb[__getOwnPropNames$1(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
}, __copyProps$1 = (to, from, except, desc) => {
if (from && typeof from == "object" || typeof from == "function") for (var keys = __getOwnPropNames$1(from), i = 0, n = keys.length, key; i < n; i++)
key = keys[i], !__hasOwnProp$1.call(to, key) && key !== except && __defProp$2(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc$1(from, key)) || desc.enumerable
});
return to;
}, __toESM$1 = (mod, isNodeMode, target) => (target = mod != null ? __create$1(__getProtoOf$1(mod)) : {}, __copyProps$1(__defProp$2(target, "default", {
value: mod,
enumerable: !0
}), mod)), require_typeof$1 = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js"(exports, module) {
function _typeof$2(o) {
"@babel/helpers - typeof";
return module.exports = _typeof$2 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(o$1) {
return typeof o$1;
} : function(o$1) {
return o$1 && typeof Symbol == "function" && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1;
}, module.exports.__esModule = !0, module.exports.default = module.exports, _typeof$2(o);
}
module.exports = _typeof$2, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_toPrimitive$1 = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js"(exports, module) {
var _typeof$1 = require_typeof$1().default;
function toPrimitive$1(t, r2) {
if (_typeof$1(t) != "object" || !t) return t;
var e = t[Symbol.toPrimitive];
if (e !== void 0) {
var i = e.call(t, r2 || "default");
if (_typeof$1(i) != "object") return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (r2 === "string" ? String : Number)(t);
}
module.exports = toPrimitive$1, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_toPropertyKey$1 = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js"(exports, module) {
var _typeof = require_typeof$1().default, toPrimitive = require_toPrimitive$1();
function toPropertyKey$1(t) {
var i = toPrimitive(t, "string");
return _typeof(i) == "symbol" ? i : i + "";
}
module.exports = toPropertyKey$1, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_defineProperty$1 = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js"(exports, module) {
var toPropertyKey = require_toPropertyKey$1();
function _defineProperty(e, r2, t) {
return (r2 = toPropertyKey(r2)) in e ? Object.defineProperty(e, r2, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r2] = t, e;
}
module.exports = _defineProperty, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_objectSpread2$1 = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js"(exports, module) {
var defineProperty = require_defineProperty$1();
function ownKeys(e, r2) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r2 && (o = o.filter(function(r$1) {
return Object.getOwnPropertyDescriptor(e, r$1).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread2(e) {
for (var r2 = 1; r2 < arguments.length; r2++) {
var t = arguments[r2] != null ? arguments[r2] : {};
r2 % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {
defineProperty(e, r$1, t[r$1]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {
Object.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));
});
}
return e;
}
module.exports = _objectSpread2, module.exports.__esModule = !0, module.exports.default = module.exports;
} });
function observable(subscribe) {
const self = {
subscribe(observer) {
let teardownRef = null, isDone = !1, unsubscribed = !1, teardownImmediately = !1;
function unsubscribe() {
if (teardownRef === null) {
teardownImmediately = !0;
return;
}
unsubscribed || (unsubscribed = !0, typeof teardownRef == "function" ? teardownRef() : teardownRef && teardownRef.unsubscribe());
}
return teardownRef = subscribe({
next(value) {
var _observer$next;
isDone || (_observer$next = observer.next) === null || _observer$next === void 0 || _observer$next.call(observer, value);
},
error(err) {
var _observer$error;
isDone || (isDone = !0, (_observer$error = observer.error) === null || _observer$error === void 0 || _observer$error.call(observer, err), unsubscribe());
},
complete() {
var _observer$complete;
isDone || (isDone = !0, (_observer$complete = observer.complete) === null || _observer$complete === void 0 || _observer$complete.call(observer), unsubscribe());
}
}), teardownImmediately && unsubscribe(), { unsubscribe };
},
pipe(...operations) {
return operations.reduce(pipeReducer, self);
}
};
return self;
}
function pipeReducer(prev, fn) {
return fn(prev);
}
function observableToPromise(observable$1) {
const ac = new AbortController();
return new Promise((resolve, reject) => {
let isDone = !1;
function onDone() {
isDone || (isDone = !0, obs$.unsubscribe());
}
ac.signal.addEventListener("abort", () => {
reject(ac.signal.reason);
});
const obs$ = observable$1.subscribe({
next(data) {
isDone = !0, resolve(data), onDone();
},
error(data) {
reject(data);
},
complete() {
ac.abort(), onDone();
}
});
});
}
function share(_opts) {
return (source) => {
let refCount = 0, subscription = null;
const observers = [];
function startIfNeeded() {
subscription || (subscription = source.subscribe({
next(value) {
for (const observer of observers) {
var _observer$next;
(_observer$next = observer.next) === null || _observer$next === void 0 || _observer$next.call(observer, value);
}
},
error(error) {
for (const observer of observers) {
var _observer$error;
(_observer$error = observer.error) === null || _observer$error === void 0 || _observer$error.call(observer, error);
}
},
complete() {
for (const observer of observers) {
var _observer$complete;
(_observer$complete = observer.complete) === null || _observer$complete === void 0 || _observer$complete.call(observer);
}
}
}));
}
function resetIfNeeded() {
if (refCount === 0 && subscription) {
const _sub = subscription;
subscription = null, _sub.unsubscribe();
}
}
return observable((subscriber) => (refCount++, observers.push(subscriber), startIfNeeded(), { unsubscribe() {
refCount--, resetIfNeeded();
const index = observers.findIndex((v) => v === subscriber);
index > -1 && observers.splice(index, 1);
} }));
};
}
function behaviorSubject(initialValue) {
let value = initialValue;
const observerList = [], addObserver = (observer) => {
value !== void 0 && observer.next(value), observerList.push(observer);
}, removeObserver = (observer) => {
observerList.splice(observerList.indexOf(observer), 1);
}, obs = observable((observer) => (addObserver(observer), () => {
removeObserver(observer);
}));
return obs.next = (nextValue) => {
if (value !== nextValue) {
value = nextValue;
for (const observer of observerList) observer.next(nextValue);
}
}, obs.get = () => value, obs;
}
function createChain(opts) {
return observable((observer) => {
function execute(index = 0, op = opts.op) {
const next = opts.links[index];
if (!next) throw new Error("No more links to execute - did you forget to add an ending link?");
return next({
op,
next(nextOp) {
return execute(index + 1, nextOp);
}
});
}
return execute().subscribe(observer);
});
}
function isObject(value) {
return !!value && !Array.isArray(value) && typeof value == "object";
}
const run = (fn) => fn();
function sleep(ms = 0) {
return new Promise((res) => setTimeout(res, ms));
}
var __create = Object.create, __defProp$1 = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyDescriptor, __getOwnPropNames = Object.getOwnPropertyNames, __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty, __commonJS = (cb, mod) => function() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
}, __copyProps = (to, from, except, desc) => {
if (from && typeof from == "object" || typeof from == "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++)
key = keys[i], !__hasOwnProp.call(to, key) && key !== except && __defProp$1(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
return to;
}, __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(__defProp$1(target, "default", {
value: mod,
enumerable: !0
}), mod));
const noop = () => {
}, freezeIfAvailable = (obj) => {
Object.freeze && Object.freeze(obj);
};
function createInnerProxy(callback, path, memo) {
var _memo$cacheKey;
const cacheKey = path.join(".");
return (_memo$cacheKey = memo[cacheKey]) !== null && _memo$cacheKey !== void 0 || (memo[cacheKey] = new Proxy(noop, {
get(_obj, key) {
if (!(typeof key != "string" || key === "then"))
return createInnerProxy(callback, [...path, key], memo);
},
apply(_1, _2, args) {
const lastOfPath = path[path.length - 1];
let opts = {
args,
path
};
return lastOfPath === "call" ? opts = {
args: args.length >= 2 ? [args[1]] : [],
path: path.slice(0, -1)
} : lastOfPath === "apply" && (opts = {
args: args.length >= 2 ? args[1] : [],
path: path.slice(0, -1)
}), freezeIfAvailable(opts.args), freezeIfAvailable(opts.path), callback(opts);
}
})), memo[cacheKey];
}
const createRecursiveProxy = (callback) => createInnerProxy(callback, [], /* @__PURE__ */ Object.create(null)), createFlatProxy = (callback) => new Proxy(noop, { get(_obj, name) {
if (name !== "then")
return callback(name);
} });
var require_typeof = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js"(exports, module) {
function _typeof$2(o) {
"@babel/helpers - typeof";
return module.exports = _typeof$2 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(o$1) {
return typeof o$1;
} : function(o$1) {
return o$1 && typeof Symbol == "function" && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1;
}, module.exports.__esModule = !0, module.exports.default = module.exports, _typeof$2(o);
}
module.exports = _typeof$2, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_toPrimitive = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js"(exports, module) {
var _typeof$1 = require_typeof().default;
function toPrimitive$1(t, r2) {
if (_typeof$1(t) != "object" || !t) return t;
var e = t[Symbol.toPrimitive];
if (e !== void 0) {
var i = e.call(t, r2 || "default");
if (_typeof$1(i) != "object") return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (r2 === "string" ? String : Number)(t);
}
module.exports = toPrimitive$1, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_toPropertyKey = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js"(exports, module) {
var _typeof = require_typeof().default, toPrimitive = require_toPrimitive();
function toPropertyKey$1(t) {
var i = toPrimitive(t, "string");
return _typeof(i) == "symbol" ? i : i + "";
}
module.exports = toPropertyKey$1, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_defineProperty = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js"(exports, module) {
var toPropertyKey = require_toPropertyKey();
function _defineProperty(e, r2, t) {
return (r2 = toPropertyKey(r2)) in e ? Object.defineProperty(e, r2, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r2] = t, e;
}
module.exports = _defineProperty, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_objectSpread2 = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js"(exports, module) {
var defineProperty = require_defineProperty();
function ownKeys(e, r2) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r2 && (o = o.filter(function(r$1) {
return Object.getOwnPropertyDescriptor(e, r$1).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread2(e) {
for (var r2 = 1; r2 < arguments.length; r2++) {
var t = arguments[r2] != null ? arguments[r2] : {};
r2 % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {
defineProperty(e, r$1, t[r$1]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {
Object.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));
});
}
return e;
}
module.exports = _objectSpread2, module.exports.__esModule = !0, module.exports.default = module.exports;
} });
__toESM(require_objectSpread2());
__toESM(require_defineProperty());
var import_objectSpread2$1$1 = __toESM(require_objectSpread2());
function transformResultInner(response, transformer2) {
if ("error" in response) {
const error = transformer2.deserialize(response.error);
return {
ok: !1,
error: (0, import_objectSpread2$1$1.default)((0, import_objectSpread2$1$1.default)({}, response), {}, { error })
};
}
return {
ok: !0,
result: (0, import_objectSpread2$1$1.default)((0, import_objectSpread2$1$1.default)({}, response.result), (!response.result.type || response.result.type === "data") && {
type: "data",
data: transformer2.deserialize(response.result.data)
})
};
}
var TransformResultError = class extends Error {
constructor() {
super("Unable to transform response from server");
}
};
function transformResult(response, transformer2) {
let result;
try {
result = transformResultInner(response, transformer2);
} catch {
throw new TransformResultError();
}
if (!result.ok && (!isObject(result.error.error) || typeof result.error.error.code != "number")) throw new TransformResultError();
if (result.ok && !isObject(result.result)) throw new TransformResultError();
return result;
}
__toESM(require_objectSpread2());
var import_defineProperty$5 = __toESM$1(require_defineProperty$1()), import_objectSpread2$1 = __toESM$1(require_objectSpread2$1());
function isTRPCClientError(cause) {
return cause instanceof TRPCClientError;
}
function isTRPCErrorResponse(obj) {
return isObject(obj) && isObject(obj.error) && typeof obj.error.code == "number" && typeof obj.error.message == "string";
}
function getMessageFromUnknownError(err, fallback) {
return typeof err == "string" ? err : isObject(err) && typeof err.message == "string" ? err.message : fallback;
}
var TRPCClientError = class TRPCClientError2 extends Error {
constructor(message, opts) {
var _opts$result, _opts$result2;
const cause = opts == null ? void 0 : opts.cause;
super(message, { cause }), (0, import_defineProperty$5.default)(this, "cause", void 0), (0, import_defineProperty$5.default)(this, "shape", void 0), (0, import_defineProperty$5.default)(this, "data", void 0), (0, import_defineProperty$5.default)(this, "meta", void 0), this.meta = opts == null ? void 0 : opts.meta, this.cause = cause, this.shape = opts == null || (_opts$result = opts.result) === null || _opts$result === void 0 ? void 0 : _opts$result.error, this.data = opts == null || (_opts$result2 = opts.result) === null || _opts$result2 === void 0 ? void 0 : _opts$result2.error.data, this.name = "TRPCClientError", Object.setPrototypeOf(this, TRPCClientError2.prototype);
}
static from(_cause, opts = {}) {
const cause = _cause;
return isTRPCClientError(cause) ? (opts.meta && (cause.meta = (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, cause.meta), opts.meta)), cause) : isTRPCErrorResponse(cause) ? new TRPCClientError2(cause.error.message, (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts), {}, { result: cause })) : new TRPCClientError2(getMessageFromUnknownError(cause, "Unknown error"), (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts), {}, { cause }));
}
};
function getTransformer(transformer2) {
const _transformer = transformer2;
return _transformer ? "input" in _transformer ? _transformer : {
input: _transformer,
output: _transformer
} : {
input: {
serialize: (data) => data,
deserialize: (data) => data
},
output: {
serialize: (data) => data,
deserialize: (data) => data
}
};
}
__toESM$1(require_objectSpread2$1());
__toESM$1(require_objectSpread2$1());
__toESM$1(require_objectSpread2$1());
__toESM$1(require_objectSpread2$1());
const lazyDefaults = {
enabled: !1,
closeMs: 0
}, keepAliveDefaults = {
enabled: !1,
pongTimeoutMs: 1e3,
intervalMs: 5e3
}, exponentialBackoff = (attemptIndex) => attemptIndex === 0 ? 0 : Math.min(1e3 * 2 ** attemptIndex, 3e4), resultOf = (value, ...args) => typeof value == "function" ? value(...args) : value;
var import_defineProperty$3 = __toESM$1(require_defineProperty$1()), TRPCWebSocketClosedError = class TRPCWebSocketClosedError2 extends Error {
constructor(opts) {
super(opts.message, { cause: opts.cause }), this.name = "TRPCWebSocketClosedError", Object.setPrototypeOf(this, TRPCWebSocketClosedError2.prototype);
}
}, ResettableTimeout = class {
constructor(onTimeout, timeoutMs) {
this.onTimeout = onTimeout, this.timeoutMs = timeoutMs, (0, import_defineProperty$3.default)(this, "timeout", void 0);
}
/**
* Resets the current timeout, restarting it with the same duration.
* Does nothing if no timeout is active.
*/
reset() {
this.timeout && (clearTimeout(this.timeout), this.timeout = setTimeout(this.onTimeout, this.timeoutMs));
}
start() {
clearTimeout(this.timeout), this.timeout = setTimeout(this.onTimeout, this.timeoutMs);
}
stop() {
clearTimeout(this.timeout), this.timeout = void 0;
}
};
function withResolvers() {
let resolve, reject;
return {
promise: new Promise((res, rej) => {
resolve = res, reject = rej;
}),
resolve,
reject
};
}
async function prepareUrl(urlOptions) {
const url = await resultOf(urlOptions.url);
if (!urlOptions.connectionParams) return url;
const connectionParams = \`\${url.includes("?") ? "&" : "?"}connectionParams=1\`;
return url + connectionParams;
}
async function buildConnectionMessage(connectionParams) {
const message = {
method: "connectionParams",
data: await resultOf(connectionParams)
};
return JSON.stringify(message);
}
var import_defineProperty$2 = __toESM$1(require_defineProperty$1()), RequestManager = class {
constructor() {
(0, import_defineProperty$2.default)(this, "outgoingRequests", new Array()), (0, import_defineProperty$2.default)(this, "pendingRequests", {});
}
/**
* Registers a new request by adding it to the outgoing queue and setting up
* callbacks for lifecycle events such as completion or error.
*
* @param message - The outgoing message to be sent.
* @param callbacks - Callback functions to observe the request's state.
* @returns A cleanup function to manually remove the request.
*/
register(message, callbacks) {
const { promise: end, resolve } = withResolvers();
return this.outgoingRequests.push({
id: String(message.id),
message,
end,
callbacks: {
next: callbacks.next,
complete: () => {
callbacks.complete(), resolve();
},
error: (e) => {
callbacks.error(e), resolve();
}
}
}), () => {
this.delete(message.id), callbacks.complete(), resolve();
};
}
/**
* Deletes a request from both the outgoing and pending collections, if it exists.
*/
delete(messageId) {
messageId !== null && (this.outgoingRequests = this.outgoingRequests.filter(({ id }) => id !== String(messageId)), delete this.pendingRequests[String(messageId)]);
}
/**
* Moves all outgoing requests to the pending state and clears the outgoing queue.
*
* The caller is expected to handle the actual sending of the requests
* (e.g., sending them over the network) after this method is called.
*
* @returns The list of requests that were transitioned to the pending state.
*/
flush() {
const requests = this.outgoingRequests;
this.outgoingRequests = [];
for (const request of requests) this.pendingRequests[request.id] = request;
return requests;
}
/**
* Retrieves all currently pending requests, which are in flight awaiting responses
* or handling ongoing subscriptions.
*/
getPendingRequests() {
return Object.values(this.pendingRequests);
}
/**
* Retrieves a specific pending request by its message ID.
*/
getPendingRequest(messageId) {
return messageId === null ? null : this.pendingRequests[String(messageId)];
}
/**
* Retrieves all outgoing requests, which are waiting to be sent.
*/
getOutgoingRequests() {
return this.outgoingRequests;
}
/**
* Retrieves all requests, both outgoing and pending, with their respective states.
*
* @returns An array of all requests with their state ("outgoing" or "pending").
*/
getRequests() {
return [...this.getOutgoingRequests().map((request) => ({
state: "outgoing",
message: request.message,
end: request.end,
callbacks: request.callbacks
})), ...this.getPendingRequests().map((request) => ({
state: "pending",
message: request.message,
end: request.end,
callbacks: request.callbacks
}))];
}
/**
* Checks if there are any pending requests, including ongoing subscriptions.
*/
hasPendingRequests() {
return this.getPendingRequests().length > 0;
}
/**
* Checks if there are any pending subscriptions
*/
hasPendingSubscriptions() {
return this.getPendingRequests().some((request) => request.message.method === "subscription");
}
/**
* Checks if there are any outgoing requests waiting to be sent.
*/
hasOutgoingRequests() {
return this.outgoingRequests.length > 0;
}
}, import_defineProperty$1 = __toESM$1(require_defineProperty$1());
function asyncWsOpen(ws) {
const { promise, resolve, reject } = withResolvers();
return ws.addEventListener("open", () => {
ws.removeEventListener("error", reject), resolve();
}), ws.addEventListener("error", reject), promise;
}
function setupPingInterval(ws, { intervalMs, pongTimeoutMs }) {
let pingTimeout, pongTimeout;
function start() {
pingTimeout = setTimeout(() => {
ws.send("PING"), pongTimeout = setTimeout(() => {
ws.close();
}, pongTimeoutMs);
}, intervalMs);
}
function reset() {
clearTimeout(pingTimeout), start();
}
function pong() {
clearTimeout(pongTimeout), reset();
}
ws.addEventListener("open", start), ws.addEventListener("message", ({ data }) => {
clearTimeout(pingTimeout), start(), data === "PONG" && pong();
}), ws.addEventListener("close", () => {
clearTimeout(pingTimeout), clearTimeout(pongTimeout);
});
}
var WsConnection = class WsConnection2 {
constructor(opts) {
var _opts$WebSocketPonyfi;
if ((0, import_defineProperty$1.default)(this, "id", ++WsConnection2.connectCount), (0, import_defineProperty$1.default)(this, "WebSocketPonyfill", void 0), (0, import_defineProperty$1.default)(this, "urlOptions", void 0), (0, import_defineProperty$1.default)(this, "keepAliveOpts", void 0), (0, import_defineProperty$1.default)(this, "wsObservable", behaviorSubject(null)), (0, import_defineProperty$1.default)(this, "openPromise", null), this.WebSocketPonyfill = (_opts$WebSocketPonyfi = opts.WebSocketPonyfill) !== null && _opts$WebSocketPonyfi !== void 0 ? _opts$WebSocketPonyfi : WebSocket, !this.WebSocketPonyfill) throw new Error("No WebSocket implementation found - you probably don't want to use this on the server, but if you do you need to pass a \`WebSocket\`-ponyfill");
this.urlOptions = opts.urlOptions, this.keepAliveOpts = opts.keepAlive;
}
get ws() {
return this.wsObservable.get();
}
set ws(ws) {
this.wsObservable.next(ws);
}
/**
* Checks if the WebSocket connection is open and ready to communicate.
*/
isOpen() {
return !!this.ws && this.ws.readyState === this.WebSocketPonyfill.OPEN && !this.openPromise;
}
/**
* Checks if the WebSocket connection is closed or in the process of closing.
*/
isClosed() {
return !!this.ws && (this.ws.readyState === this.WebSocketPonyfill.CLOSING || this.ws.readyState === this.WebSocketPonyfill.CLOSED);
}
async open() {
var _this = this;
if (_this.openPromise) return _this.openPromise;
_this.id = ++WsConnection2.connectCount;
const wsPromise = prepareUrl(_this.urlOptions).then((url) => new _this.WebSocketPonyfill(url));
_this.openPromise = wsPromise.then(async (ws) => {
_this.ws = ws, ws.addEventListener("message", function({ data }) {
data === "PING" && this.send("PONG");
}), _this.keepAliveOpts.enabled && setupPingInterval(ws, _this.keepAliveOpts), ws.addEventListener("close", () => {
_this.ws === ws && (_this.ws = null);
}), await asyncWsOpen(ws), _this.urlOptions.connectionParams && ws.send(await buildConnectionMessage(_this.urlOptions.connectionParams));
});
try {
await _this.openPromise;
} finally {
_this.openPromise = null;
}
}
/**
* Closes the WebSocket connection gracefully.
* Waits for any ongoing open operation to complete before closing.
*/
async close() {
var _this2 = this;
try {
await _this2.openPromise;
} finally {
var _this$ws;
(_this$ws = _this2.ws) === null || _this$ws === void 0 || _this$ws.close();
}
}
};
(0, import_defineProperty$1.default)(WsConnection, "connectCount", 0);
function backwardCompatibility(connection) {
return connection.isOpen() ? {
id: connection.id,
state: "open",
ws: connection.ws
} : connection.isClosed() ? {
id: connection.id,
state: "closed",
ws: connection.ws
} : connection.ws ? {
id: connection.id,
state: "connecting",
ws: connection.ws
} : null;
}
var import_defineProperty$4 = __toESM$1(require_defineProperty$1()), import_objectSpread2 = __toESM$1(require_objectSpread2$1()), WsClient = class {
constructor(opts) {
var _opts$retryDelayMs;
(0, import_defineProperty$4.default)(this, "connectionState", void 0), (0, import_defineProperty$4.default)(this, "allowReconnect", !1), (0, import_defineProperty$4.default)(this, "requestManager", new RequestManager()), (0, import_defineProperty$4.default)(this, "activeConnection", void 0), (0, import_defineProperty$4.default)(this, "reconnectRetryDelay", void 0), (0, import_defineProperty$4.default)(this, "inactivityTimeout", void 0), (0, import_defineProperty$4.default)(this, "callbacks", void 0), (0, import_defineProperty$4.default)(this, "lazyMode", void 0), (0, import_defineProperty$4.default)(this, "reconnecting", null), this.callbacks = {
onOpen: opts.onOpen,
onClose: opts.onClose,
onError: opts.onError
};
const lazyOptions = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, lazyDefaults), opts.lazy);
this.inactivityTimeout = new ResettableTimeout(() => {
if (this.requestManager.hasOutgoingRequests() || this.requestManager.hasPendingRequests()) {
this.inactivityTimeout.reset();
return;
}
this.close().catch(() => null);
}, lazyOptions.closeMs), this.activeConnection = new WsConnection({
WebSocketPonyfill: opts.WebSocket,
urlOptions: opts,
keepAlive: (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, keepAliveDefaults), opts.keepAlive)
}), this.activeConnection.wsObservable.subscribe({ next: (ws) => {
ws && this.setupWebSocketListeners(ws);
} }), this.reconnectRetryDelay = (_opts$retryDelayMs = opts.retryDelayMs) !== null && _opts$retryDelayMs !== void 0 ? _opts$retryDelayMs : exponentialBackoff, this.lazyMode = lazyOptions.enabled, this.connectionState = behaviorSubject({
type: "state",
state: lazyOptions.enabled ? "idle" : "connecting",
error: null
}), this.lazyMode || this.open().catch(() => null);
}
/**
* Opens the WebSocket connection. Handles reconnection attempts and updates
* the connection state accordingly.
*/
async open() {
var _this = this;
_this.allowReconnect = !0, _this.connectionState.get().state !== "connecting" && _this.connectionState.next({
type: "state",
state: "connecting",
error: null
});
try {
await _this.activeConnection.open();
} catch (error) {
return _this.reconnect(new TRPCWebSocketClosedError({
message: "Initialization error",
cause: error
})), _this.reconnecting;
}
}
/**
* Closes the WebSocket connection and stops managing requests.
* Ensures all outgoing and pending requests are properly finalized.
*/
async close() {
var _this2 = this;
_this2.allowReconnect = !1, _this2.inactivityTimeout.stop();
const requestsToAwait = [];
for (const request of _this2.requestManager.getRequests()) request.message.method === "subscription" ? request.callbacks.complete() : request.state === "outgoing" ? request.callbacks.error(TRPCClientError.from(new TRPCWebSocketClosedError({ message: "Closed before connection was established" }))) : requestsToAwait.push(request.end);
await Promise.all(requestsToAwait).catch(() => null), await _this2.activeConnection.close().catch(() => null), _this2.connectionState.next({
type: "state",
state: "idle",
error: null
});
}
/**
* Method to request the server.
* Handles data transformation, batching of requests, and subscription lifecycle.
*
* @param op - The operation details including id, type, path, input and signal
* @param transformer - Data transformer for serializing requests and deserializing responses
* @param lastEventId - Optional ID of the last received event for subscriptions
*
* @returns An observable that emits operation results and handles cleanup
*/
request({ op: { id, type, path, input, signal }, transformer: transformer2, lastEventId }) {
return observable((observer) => {
const abort = this.batchSend({
id,
method: type,
params: {
input: transformer2.input.serialize(input),
path,
lastEventId
}
}, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, observer), {}, { next(event) {
const transformed = transformResult(event, transformer2.output);
if (!transformed.ok) {
observer.error(TRPCClientError.from(transformed.error));
return;
}
observer.next({ result: transformed.result });
} }));
return () => {
abort(), type === "subscription" && this.activeConnection.isOpen() && this.send({
id,
method: "subscription.stop"
}), signal == null || signal.removeEventListener("abort", abort);
};
});
}
get connection() {
return backwardCompatibility(this.activeConnection);
}
reconnect(closedError) {
var _this3 = this;
if (this.connectionState.next({
type: "state",
state: "connecting",
error: TRPCClientError.from(closedError)
}), this.reconnecting) return;
const tryReconnect = async (attemptIndex) => {
try {
await sleep(_this3.reconnectRetryDelay(attemptIndex)), _this3.allowReconnect && (await _this3.activeConnection.close(), await _this3.activeConnection.open(), _this3.requestManager.hasPendingRequests() && _this3.send(_this3.requestManager.getPendingRequests().map(({ message }) => message))), _this3.reconnecting = null;
} catch {
await tryReconnect(attemptIndex + 1);
}
};
this.reconnecting = tryReconnect(0);
}
setupWebSocketListeners(ws) {
var _this4 = this;
const handleCloseOrError = (cause) => {
const reqs = this.requestManager.getPendingRequests();
for (const { message, callbacks } of reqs)
message.method !== "subscription" && (callbacks.error(TRPCClientError.from(cause ?? new TRPCWebSocketClosedError({
message: "WebSocket closed",
cause
}))), this.requestManager.delete(message.id));
};
ws.addEventListener("open", () => {
run(async () => {
var _this$callbacks$onOpe, _this$callbacks;
_this4.lazyMode && _this4.inactivityTimeout.start(), (_this$callbacks$onOpe = (_this$callbacks = _this4.callbacks).onOpen) === null || _this$callbacks$onOpe === void 0 || _this$callbacks$onOpe.call(_this$callbacks), _this4.connectionState.next({
type: "state",
state: "pending",
error: null
});
}).catch((error) => {
ws.close(3e3), handleCloseOrError(error);
});
}), ws.addEventListener("message", ({ data }) => {
if (this.inactivityTimeout.reset(), typeof data != "string" || ["PING", "PONG"].includes(data)) return;
const incomingMessage = JSON.parse(data);
if ("method" in incomingMessage) {
this.handleIncomingRequest(incomingMessage);
return;
}
this.handleResponseMessage(incomingMessage);
}), ws.addEventListener("close", (event) => {
var _this$callbacks$onClo, _this$callbacks2;
handleCloseOrError(event), (_this$callbacks$onClo = (_this$callbacks2 = this.callbacks).onClose) === null || _this$callbacks$onClo === void 0 || _this$callbacks$onClo.call(_this$callbacks2, event), (!this.lazyMode || this.requestManager.hasPendingSubscriptions()) && this.reconnect(new TRPCWebSocketClosedError({
message: "WebSocket closed",
cause: event
}));
}), ws.addEventListener("error", (event) => {
var _this$callbacks$onErr, _this$callbacks3;
handleCloseOrError(event), (_this$callbacks$onErr = (_this$callbacks3 = this.callbacks).onError) === null || _this$callbacks$onErr === void 0 || _this$callbacks$onErr.call(_this$callbacks3, event), this.reconnect(new TRPCWebSocketClosedError({
message: "WebSocket closed",
cause: event
}));
});
}
handleResponseMessage(message) {
const request = this.requestManager.getPendingRequest(message.id);
if (!request) return;
request.callbacks.next(message);
let completed = !0;
"result" in message && request.message.method === "subscription" && (message.result.type === "data" && (request.message.params.lastEventId = message.result.id), message.result.type !== "stopped" && (completed = !1)), completed && (request.callbacks.complete(), this.requestManager.delete(message.id));
}
handleIncomingRequest(message) {
message.method === "reconnect" && this.reconnect(new TRPCWebSocketClosedError({ message: "Server requested reconnect" }));
}
/**
* Sends a message or batch of messages directly to the server.
*/
send(messageOrMessages) {
if (!this.activeConnection.isOpen()) throw new Error("Active connection is not open");
const messages = messageOrMessages instanceof Array ? messageOrMessages : [messageOrMessages];
this.activeConnection.ws.send(JSON.stringify(messages.length === 1 ? messages[0] : messages));
}
/**
* Groups requests for batch sending.
*
* @returns A function to abort the batched request.
*/
batchSend(message, callbacks) {
var _this5 = this;
return this.inactivityTimeout.reset(), run(async () => {
_this5.activeConnection.isOpen() || await _this5.open(), await sleep(0), _this5.requestManager.hasOutgoingRequests() && _this5.send(_this5.requestManager.flush().map(({ message: message$1 }) => message$1));
}).catch((err) => {
this.requestManager.delete(message.id), callbacks.error(TRPCClientError.from(err));
}), this.requestManager.register(message, callbacks);
}
};
function createWSClient(opts) {
return new WsClient(opts);
}
function wsLink(opts) {
const { client } = opts, transformer2 = getTransformer(opts.transformer);
return () => ({ op }) => observable((observer) => {
const connStateSubscription = op.type === "subscription" ? client.connectionState.subscribe({ next(result) {
observer.next({
result,
context: op.context
});
} }) : null, requestSubscription = client.request({
op,
transformer: transformer2
}).subscribe(observer);
return () => {
requestSubscription.unsubscribe(), connStateSubscription == null || connStateSubscription.unsubscribe();
};
});
}
var import_defineProperty = __toESM$1(require_defineProperty$1()), import_objectSpread2$4 = __toESM$1(require_objectSpread2$1()), TRPCUntypedClient = class {
constructor(opts) {
(0, import_defineProperty.default)(this, "links", void 0), (0, import_defineProperty.default)(this, "runtime", void 0), (0, import_defineProperty.default)(this, "requestId", void 0), this.requestId = 0, this.runtime = {}, this.links = opts.links.map((link) => link(this.runtime));
}
$request(opts) {
var _opts$context;
return createChain({
links: this.links,
op: (0, import_objectSpread2$4.default)((0, import_objectSpread2$4.default)({}, opts), {}, {
context: (_opts$context = opts.context) !== null && _opts$context !== void 0 ? _opts$context : {},
id: ++this.requestId
})
}).pipe(share());
}
async requestAsPromise(opts) {
var _this = this;
try {
const req$ = _this.$request(opts);
return (await observableToPromise(req$)).result.data;
} catch (err) {
throw TRPCClientError.from(err);
}
}
query(path, input, opts) {
return this.requestAsPromise({
type: "query",
path,
input,
context: opts == null ? void 0 : opts.context,
signal: opts == null ? void 0 : opts.signal
});
}
mutation(path, input, opts) {
return this.requestAsPromise({
type: "mutation",
path,
input,
context: opts == null ? void 0 : opts.context,
signal: opts == null ? void 0 : opts.signal
});
}
subscription(path, input, opts) {
return this.$request({
type: "subscription",
path,
input,
context: opts.context,
signal: opts.signal
}).subscribe({
next(envelope) {
switch (envelope.result.type) {
case "state": {
var _opts$onConnectionSta;
(_opts$onConnectionSta = opts.onConnectionStateChange) === null || _opts$onConnectionSta === void 0 || _opts$onConnectionSta.call(opts, envelope.result);
break;
}
case "started": {
var _opts$onStarted;
(_opts$onStarted = opts.onStarted) === null || _opts$onStarted === void 0 || _opts$onStarted.call(opts, { context: envelope.context });
break;
}
case "stopped": {
var _opts$onStopped;
(_opts$onStopped = opts.onStopped) === null || _opts$onStopped === void 0 || _opts$onStopped.call(opts);
break;
}
case "data":
case void 0: {
var _opts$onData;
(_opts$onData = opts.onData) === null || _opts$onData === void 0 || _opts$onData.call(opts, envelope.result.data);
break;
}
}
},
error(err) {
var _opts$onError;
(_opts$onError = opts.onError) === null || _opts$onError === void 0 || _opts$onError.call(opts, err);
},
complete() {
var _opts$onComplete;
(_opts$onComplete = opts.onComplete) === null || _opts$onComplete === void 0 || _opts$onComplete.call(opts);
}
});
}
};
const untypedClientSymbol = Symbol.for("trpc_untypedClient"), clientCallTypeMap = {
query: "query",
mutate: "mutation",
subscribe: "subscription"
}, clientCallTypeToProcedureType = (clientCallType) => clientCallTypeMap[clientCallType];
function createTRPCClientProxy(client) {
const proxy = createRecursiveProxy(({ path, args }) => {
const pathCopy = [...path], procedureType = clientCallTypeToProcedureType(pathCopy.pop()), fullPath = pathCopy.join(".");
return client[procedureType](fullPath, ...args);
});
return createFlatProxy((key) => key === untypedClientSymbol ? client : proxy[key]);
}
function createTRPCClient(opts) {
const client = new TRPCUntypedClient(opts);
return createTRPCClientProxy(client);
}
__toESM$1(require_objectSpread2$1());
__toESM$1(require_objectSpread2$1());
var require_asyncIterator = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js"(exports, module) {
function _asyncIterator$1(r2) {
var n, t, o, e = 2;
for (typeof Symbol < "u" && (t = Symbol.asyncIterator, o = Symbol.iterator); e--; ) {
if (t && (n = r2[t]) != null) return n.call(r2);
if (o && (n = r2[o]) != null) return new AsyncFromSyncIterator(n.call(r2));
t = "@@asyncIterator", o = "@@iterator";
}
throw new TypeError("Object is not async iterable");
}
function AsyncFromSyncIterator(r2) {
function AsyncFromSyncIteratorContinuation(r$1) {
if (Object(r$1) !== r$1) return Promise.reject(new TypeError(r$1 + " is not an object."));
var n = r$1.done;
return Promise.resolve(r$1.value).then(function(r$2) {
return {
value: r$2,
done: n
};
});
}
return AsyncFromSyncIterator = function(r$1) {
this.s = r$1, this.n = r$1.next;
}, AsyncFromSyncIterator.prototype = {
s: null,
n: null,
next: function() {
return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
},
return: function(r$1) {
var n = this.s.return;
return n === void 0 ? Promise.resolve({
value: r$1,
done: !0
}) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
},
throw: function(r$1) {
var n = this.s.return;
return n === void 0 ? Promise.reject(r$1) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
}
}, new AsyncFromSyncIterator(r2);
}
module.exports = _asyncIterator$1, module.exports.__esModule = !0, module.exports.default = module.exports;
} });
__toESM$1(require_asyncIterator());
__toESM$1(require_objectSpread2$1());
var require_usingCtx = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js"(exports, module) {
function _usingCtx() {
var r2 = typeof SuppressedError == "function" ? SuppressedError : function(r$1, e$1) {
var n$1 = Error();
return n$1.name = "SuppressedError", n$1.error = r$1, n$1.suppressed = e$1, n$1;
}, e = {}, n = [];
function using(r$1, e$1) {
if (e$1 != null) {
if (Object(e$1) !== e$1) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
if (r$1) var o = e$1[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")];
if (o === void 0 && (o = e$1[Symbol.dispose || Symbol.for("Symbol.dispose")], r$1)) var t = o;
if (typeof o != "function") throw new TypeError("Object is not disposable.");
t && (o = function() {
try {
t.call(e$1);
} catch (r$2) {
return Promise.reject(r$2);
}
}), n.push({
v: e$1,
d: o,
a: r$1
});
} else r$1 && n.push({
d: e$1,
a: r$1
});
return e$1;
}
return {
e,
u: using.bind(null, !1),
a: using.bind(null, !0),
d: function() {
var o, t = this.e, s = 0;
function next() {
for (; o = n.pop(); ) try {
if (!o.a && s === 1) return s = 0, n.push(o), Promise.resolve().then(next);
if (o.d) {
var r$1 = o.d.call(o.v);
if (o.a) return s |= 2, Promise.resolve(r$1).then(next, err);
} else s |= 1;
} catch (r$2) {
return err(r$2);
}
if (s === 1) return t !== e ? Promise.reject(t) : Promise.resolve();
if (t !== e) throw t;
}
function err(n$1) {
return t = t !== e ? new r2(n$1, t) : n$1, next();
}
return next();
}
};
}
module.exports = _usingCtx, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_OverloadYield = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js"(exports, module) {
function _OverloadYield(e, d) {
this.v = e, this.k = d;
}
module.exports = _OverloadYield, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_awaitAsyncGenerator = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js"(exports, module) {
var OverloadYield$1 = require_OverloadYield();
function _awaitAsyncGenerator$1(e) {
return new OverloadYield$1(e, 0);
}
module.exports = _awaitAsyncGenerator$1, module.exports.__esModule = !0, module.exports.default = module.exports;
} }), require_wrapAsyncGenerator = __commonJS$1({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js"(exports, module) {
var OverloadYield = require_OverloadYield();
function _wrapAsyncGenerator$1(e) {
return function() {
return new AsyncGenerator(e.apply(this, arguments));
};
}
function AsyncGenerator(e) {
var r2, t;
function resume(r$1, t$1) {
try {
var n = e[r$1](t$1), o = n.value, u = o instanceof OverloadYield;
Promise.resolve(u ? o.v : o).then(function(t$2) {
if (u) {
var i = r$1 === "return" ? "return" : "next";
if (!o.k || t$2.done) return resume(i, t$2);
t$2 = e[i](t$2).value;
}
settle(n.done ? "return" : "normal", t$2);
}, function(e$1) {
resume("throw", e$1);
});
} catch (e$1) {
settle("throw", e$1);
}
}
function settle(e$1, n) {
switch (e$1) {
case "return":
r2.resolve({
value: n,
done: !0
});
break;
case "throw":
r2.reject(n);
break;
default:
r2.resolve({
value: n,
done: !1
});
}
(r2 = r2.next) ? resume(r2.key, r2.arg) : t = null;
}
this._invoke = function(e$1, n) {
return new Promise(function(o, u) {
var i = {
key: e$1,
arg: n,
resolve: o,
reject: u,
next: null
};
t ? t = t.next = i : (r2 = t = i, resume(e$1, n));
});
}, typeof e.return != "function" && (this.return = void 0);
}
AsyncGenerator.prototype[typeof Symbol == "function" && Symbol.asyncIterator || "@@asyncIterator"] = function() {
return this;
}, As