wampy
Version:
Amazingly fast, feature-rich, lightweight WAMP Javascript client (for browser and node.js)
1 lines • 7 kB
Source Map (JSON)
{"version":3,"sources":["../../src/utils.ts","../../src/constants.ts"],"sourcesContent":["import { isNode } from './constants.js';\n\n/**\n * Deferred promise object with exposed resolve and reject callbacks.\n */\nexport interface Deferred<T = unknown> {\n promise: Promise<T>;\n onSuccess: (value: T) => void | Promise<void>;\n onError: (reason?: unknown) => void | Promise<void>;\n}\n\n/**\n * Configuration object for getWebSocket.\n */\ninterface GetWebSocketConfig {\n url?: string;\n protocols?: string[];\n options?: {\n ws?: { new (url: string, protocols?: string[], origin?: null, headers?: Record<string, string>, requestOptions?: Record<string, unknown>): WebSocket };\n additionalHeaders?: Record<string, string>;\n wsRequestOptions?: Record<string, unknown>;\n };\n isBrowserMock?: boolean;\n}\n\nfunction isWebSocketSchemeSpecified (url: string): boolean {\n return /^ws(s)?:\\/\\//.test(url);\n}\n\nfunction getServerUrlForNode (url: string): string | null {\n return isWebSocketSchemeSpecified(url) ? url : null;\n}\n\nfunction getServerUrlForBrowser (url?: string): string | null {\n if (url && isWebSocketSchemeSpecified(url)) {\n return url;\n }\n\n const isSecureProtocol = globalThis.location.protocol === 'https:';\n const scheme = isSecureProtocol ? 'wss://' : 'ws://';\n const port = globalThis.location.port ? `:${globalThis.location.port}` : '';\n\n if (!url) {\n return `${scheme}${globalThis.location.hostname}${port}/ws`;\n }\n\n if (url.startsWith('/')) { // just path on current server\n return `${scheme}${globalThis.location.hostname}${port}${url}`;\n }\n\n // assuming just domain + path\n return `${scheme}${url}`;\n}\n\n/** Get a WebSocket object from the browser's window global variable */\nfunction getWebSocketFromWindowObject (parsedUrl: string, protocols?: string[]): WebSocket | null {\n if (globalThis?.WebSocket) {\n return new globalThis.WebSocket(parsedUrl, protocols);\n }\n\n return null;\n}\n\n/** Get a WebSocket object according to the user's current environment */\nexport function getWebSocket ({ url, protocols, options, isBrowserMock }: GetWebSocketConfig = {}): WebSocket | null {\n const { ws, additionalHeaders, wsRequestOptions } = options || {};\n const isActualNode = isNode && !isBrowserMock;\n\n if (!ws && isActualNode) {\n return null;\n }\n\n const parsedUrl = isActualNode ? getServerUrlForNode(url!) : getServerUrlForBrowser(url);\n\n if (!parsedUrl) {\n return null;\n }\n\n if (ws) { // User-provided WebSocket class\n return new ws(parsedUrl, protocols, null, additionalHeaders, wsRequestOptions);\n }\n\n return getWebSocketFromWindowObject(parsedUrl, protocols);\n}\n\n/** Create a new deferred promise with exposed resolve and reject callbacks */\nexport function getNewPromise<T = unknown> (): Deferred<T> {\n const deferred = {} as Deferred<T>;\n\n deferred.promise = new Promise<T>(function (resolve, reject) {\n deferred.onSuccess = resolve;\n deferred.onError = reject;\n });\n\n return deferred;\n}\n","export const WAMP_MSG_SPEC = {\n HELLO: 1,\n WELCOME: 2,\n ABORT: 3,\n CHALLENGE: 4,\n AUTHENTICATE: 5,\n GOODBYE: 6,\n ERROR: 8,\n PUBLISH: 16,\n PUBLISHED: 17,\n SUBSCRIBE: 32,\n SUBSCRIBED: 33,\n UNSUBSCRIBE: 34,\n UNSUBSCRIBED: 35,\n EVENT: 36,\n CALL: 48,\n CANCEL: 49,\n RESULT: 50,\n REGISTER: 64,\n REGISTERED: 65,\n UNREGISTER: 66,\n UNREGISTERED: 67,\n INVOCATION: 68,\n INTERRUPT: 69,\n YIELD: 70\n} as const;\n\nexport const SUCCESS: { readonly code: 0; readonly error: null } = {\n code: 0,\n error: null\n};\n\nexport const WAMP_ERROR_MSG: Record<string, string> = {\n SUCCESS: 'Success!',\n URI_ERROR: 'Topic URI doesn\\'t meet requirements!',\n NO_BROKER: 'Server doesn\\'t provide broker role!',\n NO_CALLBACK_SPEC: 'No required callback function specified!',\n INVALID_PARAM: 'Invalid parameter(s) specified!',\n NO_SERIALIZER_AVAILABLE: 'Server has chosen a serializer, which is not available!',\n NON_EXIST_UNSUBSCRIBE: 'Trying to unsubscribe from non existent subscription!',\n NO_DEALER: 'Server doesn\\'t provide dealer role!',\n RPC_ALREADY_REGISTERED: 'RPC already registered!',\n NON_EXIST_RPC_UNREG: 'Received rpc unregistration for non existent rpc!',\n NON_EXIST_RPC_INVOCATION: 'Received invocation for non existent rpc!',\n NON_EXIST_RPC_REQ_ID: 'No RPC calls in action with specified request ID!',\n NO_REALM: 'No realm specified!',\n NO_WS_OR_URL: 'No websocket provided or URL specified is incorrect!',\n NO_CRA_CB_OR_ID: 'No onChallenge callback or authid was provided for authentication!',\n CHALLENGE_EXCEPTION: 'Exception raised during challenge processing',\n PPT_NOT_SUPPORTED: 'Payload Passthru Mode is not supported by the router',\n PPT_INVALID_SCHEME: 'Provided PPT scheme is invalid',\n PPT_SRLZ_INVALID: 'Provided PPT serializer is invalid or not supported',\n PPT_SRLZ_ERR: 'Can not serialize/deserialize payload',\n PROTOCOL_VIOLATION: 'Protocol violation',\n WAMP_ABORT: 'Router aborted connection',\n WAMP_GENERAL_ERROR: 'Wamp error',\n WEBSOCKET_ERROR: 'Websocket error',\n FEATURE_NOT_SUPPORTED: 'Feature not supported'\n};\n\nexport const E2EE_SERIALIZERS: readonly string[] = ['cbor'] as const;\n\nexport const isNode: boolean = (typeof process === 'object' && Object.prototype.toString.call(process) === '[object process]');\n\nexport const WAMP_CUSTOM_ATTR_REGEX: RegExp = /^_[a-z0-9_]{3,}$/;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC8DO,IAAM,SAAmB,OAAO,YAAY,YAAY,OAAO,UAAU,SAAS,KAAK,OAAO,MAAM;;;ADrC3G,SAAS,2BAA4B,KAAsB;AACvD,SAAO,eAAe,KAAK,GAAG;AAClC;AAEA,SAAS,oBAAqB,KAA4B;AACtD,SAAO,2BAA2B,GAAG,IAAI,MAAM;AACnD;AAEA,SAAS,uBAAwB,KAA6B;AAC1D,MAAI,OAAO,2BAA2B,GAAG,GAAG;AACxC,WAAO;AAAA,EACX;AAEA,QAAM,mBAAmB,WAAW,SAAS,aAAa;AAC1D,QAAM,SAAS,mBAAmB,WAAW;AAC7C,QAAM,OAAO,WAAW,SAAS,OAAO,IAAI,WAAW,SAAS,IAAI,KAAK;AAEzE,MAAI,CAAC,KAAK;AACN,WAAO,GAAG,MAAM,GAAG,WAAW,SAAS,QAAQ,GAAG,IAAI;AAAA,EAC1D;AAEA,MAAI,IAAI,WAAW,GAAG,GAAG;AACrB,WAAO,GAAG,MAAM,GAAG,WAAW,SAAS,QAAQ,GAAG,IAAI,GAAG,GAAG;AAAA,EAChE;AAGA,SAAO,GAAG,MAAM,GAAG,GAAG;AAC1B;AAGA,SAAS,6BAA8B,WAAmB,WAAwC;AAC9F,MAAI,YAAY,WAAW;AACvB,WAAO,IAAI,WAAW,UAAU,WAAW,SAAS;AAAA,EACxD;AAEA,SAAO;AACX;AAGO,SAAS,aAAc,EAAE,KAAK,WAAW,SAAS,cAAc,IAAwB,CAAC,GAAqB;AACjH,QAAM,EAAE,IAAI,mBAAmB,iBAAiB,IAAI,WAAW,CAAC;AAChE,QAAM,eAAe,UAAU,CAAC;AAEhC,MAAI,CAAC,MAAM,cAAc;AACrB,WAAO;AAAA,EACX;AAEA,QAAM,YAAY,eAAe,oBAAoB,GAAI,IAAI,uBAAuB,GAAG;AAEvF,MAAI,CAAC,WAAW;AACZ,WAAO;AAAA,EACX;AAEA,MAAI,IAAI;AACJ,WAAO,IAAI,GAAG,WAAW,WAAW,MAAM,mBAAmB,gBAAgB;AAAA,EACjF;AAEA,SAAO,6BAA6B,WAAW,SAAS;AAC5D;AAGO,SAAS,gBAA2C;AACvD,QAAM,WAAW,CAAC;AAElB,WAAS,UAAU,IAAI,QAAW,SAAU,SAAS,QAAQ;AACzD,aAAS,YAAY;AACrB,aAAS,UAAU;AAAA,EACvB,CAAC;AAED,SAAO;AACX;","names":[]}