@vuu-ui/vuu-data-remote 0.13.73 → 0.13.74
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/cjs/ConnectionManager.js +3 -1
- package/cjs/ConnectionManager.js.map +1 -1
- package/cjs/authenticate.js +41 -20
- package/cjs/authenticate.js.map +1 -1
- package/cjs/index.js +1 -0
- package/cjs/index.js.map +1 -1
- package/cjs/inlined-worker.js +3 -6
- package/cjs/inlined-worker.js.map +1 -1
- package/esm/ConnectionManager.js +3 -1
- package/esm/ConnectionManager.js.map +1 -1
- package/esm/authenticate.js +41 -21
- package/esm/authenticate.js.map +1 -1
- package/esm/index.js +1 -1
- package/esm/inlined-worker.js +3 -6
- package/esm/inlined-worker.js.map +1 -1
- package/package.json +7 -7
- package/types/ConnectionManager.d.ts +1 -1
- package/types/authenticate.d.ts +11 -1
- package/types/index.d.ts +1 -1
- package/types/inlined-worker.d.ts +1 -1
- package/types/server-proxy/server-proxy.d.ts +1 -2
package/cjs/ConnectionManager.js
CHANGED
|
@@ -132,10 +132,12 @@ const _ConnectionManager = class _ConnectionManager extends vuuUtils.EventEmitte
|
|
|
132
132
|
* @param serverUrl
|
|
133
133
|
* @param token
|
|
134
134
|
*/
|
|
135
|
-
async connect(options) {
|
|
135
|
+
async connect(options, throwOnRejected = false) {
|
|
136
136
|
const result = await __privateGet(this, _worker).connect(options);
|
|
137
137
|
if (result === "connected") {
|
|
138
138
|
__privateGet(this, _deferredServerAPI).resolve(this.connectedServerAPI);
|
|
139
|
+
} else if (result === "rejected" && throwOnRejected) {
|
|
140
|
+
throw Error("[ConnectionManager] connection rejected");
|
|
139
141
|
}
|
|
140
142
|
return result;
|
|
141
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionManager.js","sources":["../../../packages/vuu-data-remote/src/ConnectionManager.ts"],"sourcesContent":["import {\n ConnectOptions,\n DataSourceCallbackMessage,\n ServerAPI,\n ServerProxySubscribeMessage,\n TableSchema,\n VuuUIMessageIn,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n SelectRequest,\n SelectResponse,\n VuuCreateVisualLink,\n VuuLoginResponse,\n VuuRemoveVisualLink,\n VuuRpcMenuRequest,\n VuuRpcServiceRequest,\n VuuTableList,\n VuuTableListRequest,\n VuuTableMetaRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n DeferredPromise,\n EventEmitter,\n isConnectionQualityMetrics,\n isLoginResponse,\n isRequestResponse,\n isTableSchemaMessage,\n messageHasResult,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n WebSocketConnectionEvents,\n WebSocketConnectionState,\n isWebSocketConnectionMessage,\n} from \"./WebSocketConnection\";\nimport { DedicatedWorker } from \"./DedicatedWorker\";\nimport { shouldMessageBeRoutedToDataSource } from \"./data-source\";\n\nimport { ConnectionQualityMetrics } from \"@vuu-ui/vuu-data-types\";\n\nexport type PostMessageToClientCallback = (\n msg: DataSourceCallbackMessage,\n) => void;\n\nexport type ConnectionEvents = WebSocketConnectionEvents & {\n \"connection-metrics\": (message: ConnectionQualityMetrics) => void;\n \"session-status\": (loginResponse: VuuLoginResponse) => void;\n};\n\ntype RegisteredViewport = {\n postMessageToClientDataSource: PostMessageToClientCallback;\n request: ServerProxySubscribeMessage;\n status: \"subscribing\";\n};\n\nclass ConnectionManager extends EventEmitter<ConnectionEvents> {\n #connectionState: WebSocketConnectionState = {\n connectionPhase: \"connecting\",\n connectionStatus: \"closed\",\n retryAttemptsTotal: -1,\n retryAttemptsRemaining: -1,\n secondsToNextRetry: -1,\n };\n static #instance: ConnectionManager;\n #deferredServerAPI = new DeferredPromise<ServerAPI>();\n #pendingRequests = new Map();\n #viewports = new Map<string, RegisteredViewport>();\n // #worker?: Worker;\n #worker: DedicatedWorker;\n\n private constructor() {\n super();\n this.#worker = new DedicatedWorker(this.handleMessageFromWorker);\n }\n\n public static get instance(): ConnectionManager {\n if (!ConnectionManager.#instance) {\n ConnectionManager.#instance = new ConnectionManager();\n }\n return ConnectionManager.#instance;\n }\n\n /**\n * Open a connection to the VuuServer. This method opens the websocket connection\n * and logs in. It can be called from whichever client code has access to the auth\n * token (eg. the login page, or just a hardcoded login script in a sample).\n * This will unblock any DataSources which may have already tried to subscribe to data,\n * but lacked access to the auth token.\n *\n * @param serverUrl\n * @param token\n */\n async connect(options: ConnectOptions) {\n const result = await this.#worker.connect(options);\n if (result === \"connected\") {\n this.#deferredServerAPI.resolve(this.connectedServerAPI);\n }\n return result;\n }\n\n private handleMessageFromWorker = (\n message: VuuUIMessageIn | DataSourceCallbackMessage,\n ) => {\n if (shouldMessageBeRoutedToDataSource(message)) {\n const viewport = this.#viewports.get(message.clientViewportId);\n if (viewport) {\n viewport.postMessageToClientDataSource(message);\n } else {\n console.error(\n `[ConnectionManager] ${message.type} message received, viewport not found`,\n );\n }\n } else if (isLoginResponse(message)) {\n this.emit(\"session-status\", message);\n } else if (isWebSocketConnectionMessage(message)) {\n this.#connectionState = message;\n this.emit(\"connection-status\", message);\n } else if (isConnectionQualityMetrics(message)) {\n this.emit(\"connection-metrics\", message);\n } else if (isRequestResponse(message)) {\n const { requestId } = message;\n if (this.#pendingRequests.has(requestId)) {\n const { resolve } = this.#pendingRequests.get(requestId);\n this.#pendingRequests.delete(requestId);\n const { requestId: _, ...messageWithoutRequestId } = message;\n\n if (messageHasResult(message)) {\n resolve(message.result);\n } else if (\n message.type === \"VP_EDIT_RPC_RESPONSE\" ||\n message.type === \"VP_EDIT_RPC_REJECT\"\n ) {\n resolve(message);\n } else if (isTableSchemaMessage(message)) {\n resolve(message.tableSchema);\n } else {\n resolve(messageWithoutRequestId);\n }\n } else {\n console.warn(\n \"%cConnectionManager Unexpected message from the worker\",\n \"color:red;font-weight:bold;\",\n );\n }\n }\n };\n\n get connectionStatus() {\n return this.#connectionState.connectionStatus;\n }\n\n get serverAPI() {\n return this.#deferredServerAPI.promise;\n }\n\n private connectedServerAPI: ServerAPI = {\n subscribe: (message, callback) => {\n if (this.#viewports.get(message.viewport)) {\n throw Error(\n `ConnectionManager attempting to subscribe with an existing viewport id`,\n );\n }\n // TODO we never use this status\n this.#viewports.set(message.viewport, {\n status: \"subscribing\",\n request: message,\n postMessageToClientDataSource: callback,\n });\n this.#worker.send({ type: \"subscribe\", ...message });\n },\n\n unsubscribe: (viewport) => {\n this.#worker.send({ type: \"unsubscribe\", viewport });\n },\n\n send: (message) => {\n this.#worker.send(message);\n },\n\n destroy: (viewportId?: string) => {\n if (viewportId && this.#viewports.has(viewportId)) {\n this.#viewports.delete(viewportId);\n }\n },\n\n rpcCall: async <T = unknown>(\n message:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink,\n ) => this.asyncRequest<T>(message),\n\n select: async (selectRequest: SelectRequest) =>\n this.asyncRequest<SelectResponse>(selectRequest),\n\n getTableList: async () =>\n this.asyncRequest<VuuTableList>({ type: \"GET_TABLE_LIST\" }),\n\n getTableSchema: async (table) =>\n this.asyncRequest<TableSchema>({\n type: \"GET_TABLE_META\",\n table,\n }),\n };\n\n private asyncRequest = <T = unknown>(\n msg:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuTableListRequest\n | VuuTableMetaRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink\n | SelectRequest,\n ): Promise<T> => {\n const requestId = uuid();\n this.#worker.send({\n requestId,\n ...msg,\n });\n return new Promise((resolve, reject) => {\n this.#pendingRequests.set(requestId, { resolve, reject });\n });\n };\n\n async disconnect() {\n try {\n this.#worker.send({ type: \"disconnect\" });\n this.#deferredServerAPI = new DeferredPromise<ServerAPI>();\n return \"disconnected\";\n } catch (err: unknown) {\n return \"rejected\";\n }\n }\n\n destroy() {\n this.#worker.terminate();\n }\n}\n\nexport default ConnectionManager.instance;\n"],"names":["EventEmitter","DeferredPromise","shouldMessageBeRoutedToDataSource","isLoginResponse","isWebSocketConnectionMessage","isConnectionQualityMetrics","isRequestResponse","messageHasResult","isTableSchemaMessage","uuid","DedicatedWorker"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAA,gBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,OAAA;AAuDA,MAAM,kBAAA,GAAN,MAAM,kBAAA,SAA0BA,qBAA+B,CAAA;AAAA,EAerD,WAAc,GAAA;AACpB,IAAM,KAAA,EAAA;AAfR,IAA6C,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAA;AAAA,MAC3C,eAAiB,EAAA,YAAA;AAAA,MACjB,gBAAkB,EAAA,QAAA;AAAA,MAClB,kBAAoB,EAAA,CAAA,CAAA;AAAA,MACpB,sBAAwB,EAAA,CAAA,CAAA;AAAA,MACxB,kBAAoB,EAAA,CAAA;AAAA,KACtB,CAAA;AAEA,IAAA,YAAA,CAAA,IAAA,EAAA,kBAAA,EAAqB,IAAIC,wBAA2B,EAAA,CAAA;AACpD,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,sBAAuB,GAAI,EAAA,CAAA;AAC3B,IAAA,YAAA,CAAA,IAAA,EAAA,UAAA,sBAAiB,GAAgC,EAAA,CAAA;AAEjD;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAgCA,IAAQ,aAAA,CAAA,IAAA,EAAA,yBAAA,EAA0B,CAChC,OACG,KAAA;AACH,MAAI,IAAAC,4CAAA,CAAkC,OAAO,CAAG,EAAA;AAC9C,QAAA,MAAM,QAAW,GAAA,YAAA,CAAA,IAAA,EAAK,UAAW,CAAA,CAAA,GAAA,CAAI,QAAQ,gBAAgB,CAAA;AAC7D,QAAA,IAAI,QAAU,EAAA;AACZ,UAAA,QAAA,CAAS,8BAA8B,OAAO,CAAA;AAAA,SACzC,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA;AAAA,YACN,CAAA,oBAAA,EAAuB,QAAQ,IAAI,CAAA,qCAAA;AAAA,WACrC;AAAA;AACF,OACF,MAAA,IAAWC,wBAAgB,CAAA,OAAO,CAAG,EAAA;AACnC,QAAK,IAAA,CAAA,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAAA,OACrC,MAAA,IAAWC,gDAA6B,CAAA,OAAO,CAAG,EAAA;AAChD,QAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,OAAA,CAAA;AACxB,QAAK,IAAA,CAAA,IAAA,CAAK,qBAAqB,OAAO,CAAA;AAAA,OACxC,MAAA,IAAWC,mCAA2B,CAAA,OAAO,CAAG,EAAA;AAC9C,QAAK,IAAA,CAAA,IAAA,CAAK,sBAAsB,OAAO,CAAA;AAAA,OACzC,MAAA,IAAWC,0BAAkB,CAAA,OAAO,CAAG,EAAA;AACrC,QAAM,MAAA,EAAE,WAAc,GAAA,OAAA;AACtB,QAAA,IAAI,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,GAAI,CAAA,SAAS,CAAG,EAAA;AACxC,UAAA,MAAM,EAAE,OAAQ,EAAA,GAAI,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,IAAI,SAAS,CAAA;AACvD,UAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,OAAO,SAAS,CAAA;AACtC,UAAA,MAAM,EAAE,SAAA,EAAW,CAAG,EAAA,GAAG,yBAA4B,GAAA,OAAA;AAErD,UAAI,IAAAC,yBAAA,CAAiB,OAAO,CAAG,EAAA;AAC7B,YAAA,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAAA,qBAEtB,OAAQ,CAAA,IAAA,KAAS,sBACjB,IAAA,OAAA,CAAQ,SAAS,oBACjB,EAAA;AACA,YAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,WACjB,MAAA,IAAWC,6BAAqB,CAAA,OAAO,CAAG,EAAA;AACxC,YAAA,OAAA,CAAQ,QAAQ,WAAW,CAAA;AAAA,WACtB,MAAA;AACL,YAAA,OAAA,CAAQ,uBAAuB,CAAA;AAAA;AACjC,SACK,MAAA;AACL,UAAQ,OAAA,CAAA,IAAA;AAAA,YACN,wDAAA;AAAA,YACA;AAAA,WACF;AAAA;AACF;AACF,KACF,CAAA;AAUA,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAAgC,EAAA;AAAA,MACtC,SAAA,EAAW,CAAC,OAAA,EAAS,QAAa,KAAA;AAChC,QAAA,IAAI,YAAK,CAAA,IAAA,EAAA,UAAA,CAAA,CAAW,GAAI,CAAA,OAAA,CAAQ,QAAQ,CAAG,EAAA;AACzC,UAAM,MAAA,KAAA;AAAA,YACJ,CAAA,sEAAA;AAAA,WACF;AAAA;AAGF,QAAK,YAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAW,GAAI,CAAA,OAAA,CAAQ,QAAU,EAAA;AAAA,UACpC,MAAQ,EAAA,aAAA;AAAA,UACR,OAAS,EAAA,OAAA;AAAA,UACT,6BAA+B,EAAA;AAAA,SAChC,CAAA;AACD,QAAA,YAAA,CAAA,IAAA,EAAK,SAAQ,IAAK,CAAA,EAAE,MAAM,WAAa,EAAA,GAAG,SAAS,CAAA;AAAA,OACrD;AAAA,MAEA,WAAA,EAAa,CAAC,QAAa,KAAA;AACzB,QAAA,YAAA,CAAA,IAAA,EAAK,SAAQ,IAAK,CAAA,EAAE,IAAM,EAAA,aAAA,EAAe,UAAU,CAAA;AAAA,OACrD;AAAA,MAEA,IAAA,EAAM,CAAC,OAAY,KAAA;AACjB,QAAK,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,OAC3B;AAAA,MAEA,OAAA,EAAS,CAAC,UAAwB,KAAA;AAChC,QAAA,IAAI,UAAc,IAAA,YAAA,CAAA,IAAA,EAAK,UAAW,CAAA,CAAA,GAAA,CAAI,UAAU,CAAG,EAAA;AACjD,UAAK,YAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAW,OAAO,UAAU,CAAA;AAAA;AACnC,OACF;AAAA,MAEA,OAAS,EAAA,OACP,OAKG,KAAA,IAAA,CAAK,aAAgB,OAAO,CAAA;AAAA,MAEjC,MAAQ,EAAA,OAAO,aACb,KAAA,IAAA,CAAK,aAA6B,aAAa,CAAA;AAAA,MAEjD,cAAc,YACZ,IAAA,CAAK,aAA2B,EAAE,IAAA,EAAM,kBAAkB,CAAA;AAAA,MAE5D,cAAgB,EAAA,OAAO,KACrB,KAAA,IAAA,CAAK,YAA0B,CAAA;AAAA,QAC7B,IAAM,EAAA,gBAAA;AAAA,QACN;AAAA,OACD;AAAA,KACL,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,cAAA,EAAe,CACrB,GAQe,KAAA;AACf,MAAA,MAAM,YAAYC,aAAK,EAAA;AACvB,MAAA,YAAA,CAAA,IAAA,EAAK,SAAQ,IAAK,CAAA;AAAA,QAChB,SAAA;AAAA,QACA,GAAG;AAAA,OACJ,CAAA;AACD,MAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,QAAA,YAAA,CAAA,IAAA,EAAK,kBAAiB,GAAI,CAAA,SAAA,EAAW,EAAE,OAAA,EAAS,QAAQ,CAAA;AAAA,OACzD,CAAA;AAAA,KACH,CAAA;AAxJE,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,IAAIC,+BAAgB,CAAA,IAAA,CAAK,uBAAuB,CAAA,CAAA;AAAA;AACjE,EAEA,WAAkB,QAA8B,GAAA;AAC9C,IAAI,IAAA,CAAC,iCAAkB,SAAW,CAAA,EAAA;AAChC,MAAkB,YAAA,CAAA,kBAAA,EAAA,SAAA,EAAY,IAAI,kBAAkB,EAAA,CAAA;AAAA;AAEtD,IAAA,OAAO,YAAkB,CAAA,kBAAA,EAAA,SAAA,CAAA;AAAA;AAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,QAAQ,OAAyB,EAAA;AACrC,IAAA,MAAM,MAAS,GAAA,MAAM,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,QAAQ,OAAO,CAAA;AACjD,IAAA,IAAI,WAAW,WAAa,EAAA;AAC1B,MAAK,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAmB,OAAQ,CAAA,IAAA,CAAK,kBAAkB,CAAA;AAAA;AAEzD,IAAO,OAAA,MAAA;AAAA;AACT,EAiDA,IAAI,gBAAmB,GAAA;AACrB,IAAA,OAAO,mBAAK,gBAAiB,CAAA,CAAA,gBAAA;AAAA;AAC/B,EAEA,IAAI,SAAY,GAAA;AACd,IAAA,OAAO,mBAAK,kBAAmB,CAAA,CAAA,OAAA;AAAA;AACjC,EAyEA,MAAM,UAAa,GAAA;AACjB,IAAI,IAAA;AACF,MAAA,YAAA,CAAA,IAAA,EAAK,OAAQ,CAAA,CAAA,IAAA,CAAK,EAAE,IAAA,EAAM,cAAc,CAAA;AACxC,MAAK,YAAA,CAAA,IAAA,EAAA,kBAAA,EAAqB,IAAIT,wBAA2B,EAAA,CAAA;AACzD,MAAO,OAAA,cAAA;AAAA,aACA,GAAc,EAAA;AACrB,MAAO,OAAA,UAAA;AAAA;AACT;AACF,EAEA,OAAU,GAAA;AACR,IAAA,YAAA,CAAA,IAAA,EAAK,SAAQ,SAAU,EAAA;AAAA;AAE3B,CAAA;AAvLE,gBAAA,GAAA,IAAA,OAAA,EAAA;AAOO,SAAA,GAAA,IAAA,OAAA,EAAA;AACP,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,UAAA,GAAA,IAAA,OAAA,EAAA;AAEA,OAAA,GAAA,IAAA,OAAA,EAAA;AALA,YAAA,CARI,kBAQG,EAAA,SAAA,CAAA;AART,IAAM,iBAAN,GAAA,kBAAA;AA0LA,0BAAe,iBAAkB,CAAA,QAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"ConnectionManager.js","sources":["../../../packages/vuu-data-remote/src/ConnectionManager.ts"],"sourcesContent":["import {\n ConnectOptions,\n DataSourceCallbackMessage,\n ServerAPI,\n ServerProxySubscribeMessage,\n TableSchema,\n VuuUIMessageIn,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n SelectRequest,\n SelectResponse,\n VuuCreateVisualLink,\n VuuLoginResponse,\n VuuRemoveVisualLink,\n VuuRpcMenuRequest,\n VuuRpcServiceRequest,\n VuuTableList,\n VuuTableListRequest,\n VuuTableMetaRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n DeferredPromise,\n EventEmitter,\n isConnectionQualityMetrics,\n isLoginResponse,\n isRequestResponse,\n isTableSchemaMessage,\n messageHasResult,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n WebSocketConnectionEvents,\n WebSocketConnectionState,\n isWebSocketConnectionMessage,\n} from \"./WebSocketConnection\";\nimport { DedicatedWorker } from \"./DedicatedWorker\";\nimport { shouldMessageBeRoutedToDataSource } from \"./data-source\";\n\nimport { ConnectionQualityMetrics } from \"@vuu-ui/vuu-data-types\";\n\nexport type PostMessageToClientCallback = (\n msg: DataSourceCallbackMessage,\n) => void;\n\nexport type ConnectionEvents = WebSocketConnectionEvents & {\n \"connection-metrics\": (message: ConnectionQualityMetrics) => void;\n \"session-status\": (loginResponse: VuuLoginResponse) => void;\n};\n\ntype RegisteredViewport = {\n postMessageToClientDataSource: PostMessageToClientCallback;\n request: ServerProxySubscribeMessage;\n status: \"subscribing\";\n};\n\nclass ConnectionManager extends EventEmitter<ConnectionEvents> {\n #connectionState: WebSocketConnectionState = {\n connectionPhase: \"connecting\",\n connectionStatus: \"closed\",\n retryAttemptsTotal: -1,\n retryAttemptsRemaining: -1,\n secondsToNextRetry: -1,\n };\n static #instance: ConnectionManager;\n #deferredServerAPI = new DeferredPromise<ServerAPI>();\n #pendingRequests = new Map();\n #viewports = new Map<string, RegisteredViewport>();\n // #worker?: Worker;\n #worker: DedicatedWorker;\n\n private constructor() {\n super();\n this.#worker = new DedicatedWorker(this.handleMessageFromWorker);\n }\n\n public static get instance(): ConnectionManager {\n if (!ConnectionManager.#instance) {\n ConnectionManager.#instance = new ConnectionManager();\n }\n return ConnectionManager.#instance;\n }\n\n /**\n * Open a connection to the VuuServer. This method opens the websocket connection\n * and logs in. It can be called from whichever client code has access to the auth\n * token (eg. the login page, or just a hardcoded login script in a sample).\n * This will unblock any DataSources which may have already tried to subscribe to data,\n * but lacked access to the auth token.\n *\n * @param serverUrl\n * @param token\n */\n async connect(options: ConnectOptions, throwOnRejected = false) {\n const result = await this.#worker.connect(options);\n if (result === \"connected\") {\n this.#deferredServerAPI.resolve(this.connectedServerAPI);\n } else if (result === \"rejected\" && throwOnRejected) {\n throw Error(\"[ConnectionManager] connection rejected\");\n }\n return result;\n }\n\n private handleMessageFromWorker = (\n message: VuuUIMessageIn | DataSourceCallbackMessage,\n ) => {\n if (shouldMessageBeRoutedToDataSource(message)) {\n const viewport = this.#viewports.get(message.clientViewportId);\n if (viewport) {\n viewport.postMessageToClientDataSource(message);\n } else {\n console.error(\n `[ConnectionManager] ${message.type} message received, viewport not found`,\n );\n }\n } else if (isLoginResponse(message)) {\n this.emit(\"session-status\", message);\n } else if (isWebSocketConnectionMessage(message)) {\n this.#connectionState = message;\n this.emit(\"connection-status\", message);\n } else if (isConnectionQualityMetrics(message)) {\n this.emit(\"connection-metrics\", message);\n } else if (isRequestResponse(message)) {\n const { requestId } = message;\n if (this.#pendingRequests.has(requestId)) {\n const { resolve } = this.#pendingRequests.get(requestId);\n this.#pendingRequests.delete(requestId);\n const { requestId: _, ...messageWithoutRequestId } = message;\n\n if (messageHasResult(message)) {\n resolve(message.result);\n } else if (\n message.type === \"VP_EDIT_RPC_RESPONSE\" ||\n message.type === \"VP_EDIT_RPC_REJECT\"\n ) {\n resolve(message);\n } else if (isTableSchemaMessage(message)) {\n resolve(message.tableSchema);\n } else {\n resolve(messageWithoutRequestId);\n }\n } else {\n console.warn(\n \"%cConnectionManager Unexpected message from the worker\",\n \"color:red;font-weight:bold;\",\n );\n }\n }\n };\n\n get connectionStatus() {\n return this.#connectionState.connectionStatus;\n }\n\n get serverAPI() {\n return this.#deferredServerAPI.promise;\n }\n\n private connectedServerAPI: ServerAPI = {\n subscribe: (message, callback) => {\n if (this.#viewports.get(message.viewport)) {\n throw Error(\n `ConnectionManager attempting to subscribe with an existing viewport id`,\n );\n }\n // TODO we never use this status\n this.#viewports.set(message.viewport, {\n status: \"subscribing\",\n request: message,\n postMessageToClientDataSource: callback,\n });\n this.#worker.send({ type: \"subscribe\", ...message });\n },\n\n unsubscribe: (viewport) => {\n this.#worker.send({ type: \"unsubscribe\", viewport });\n },\n\n send: (message) => {\n this.#worker.send(message);\n },\n\n destroy: (viewportId?: string) => {\n if (viewportId && this.#viewports.has(viewportId)) {\n this.#viewports.delete(viewportId);\n }\n },\n\n rpcCall: async <T = unknown>(\n message:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink,\n ) => this.asyncRequest<T>(message),\n\n select: async (selectRequest: SelectRequest) =>\n this.asyncRequest<SelectResponse>(selectRequest),\n\n getTableList: async () =>\n this.asyncRequest<VuuTableList>({ type: \"GET_TABLE_LIST\" }),\n\n getTableSchema: async (table) =>\n this.asyncRequest<TableSchema>({\n type: \"GET_TABLE_META\",\n table,\n }),\n };\n\n private asyncRequest = <T = unknown>(\n msg:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuTableListRequest\n | VuuTableMetaRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink\n | SelectRequest,\n ): Promise<T> => {\n const requestId = uuid();\n this.#worker.send({\n requestId,\n ...msg,\n });\n return new Promise((resolve, reject) => {\n this.#pendingRequests.set(requestId, { resolve, reject });\n });\n };\n\n async disconnect() {\n try {\n this.#worker.send({ type: \"disconnect\" });\n this.#deferredServerAPI = new DeferredPromise<ServerAPI>();\n return \"disconnected\";\n } catch (err: unknown) {\n return \"rejected\";\n }\n }\n\n destroy() {\n this.#worker.terminate();\n }\n}\n\nexport default ConnectionManager.instance;\n"],"names":["EventEmitter","DeferredPromise","shouldMessageBeRoutedToDataSource","isLoginResponse","isWebSocketConnectionMessage","isConnectionQualityMetrics","isRequestResponse","messageHasResult","isTableSchemaMessage","uuid","DedicatedWorker"],"mappings":"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"}
|
package/cjs/authenticate.js
CHANGED
|
@@ -1,28 +1,49 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const defaultAuthUrl = "api/authn";
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
body: JSON.stringify({ username, password })
|
|
12
|
-
}).then((response) => {
|
|
13
|
-
if (response.ok) {
|
|
14
|
-
const authToken = response.headers.get("vuu-auth-token");
|
|
15
|
-
if (typeof authToken === "string" && authToken.length > 0) {
|
|
16
|
-
return authToken;
|
|
17
|
-
} else {
|
|
18
|
-
throw Error(`Authentication failed auth token not returned by server`);
|
|
19
|
-
}
|
|
4
|
+
const isValidVuuUser = (response) => typeof response === "object" && response !== null && "name" in response && "authorizations" in response && typeof response.name === "string" && Array.isArray(response.authorizations);
|
|
5
|
+
const parseVuuUserFromToken = (token) => {
|
|
6
|
+
const [base64EncodedVuuUser] = token.split(".");
|
|
7
|
+
const jsonString = atob(base64EncodedVuuUser);
|
|
8
|
+
const response = JSON.parse(jsonString);
|
|
9
|
+
if (isValidVuuUser(response)) {
|
|
10
|
+
return response;
|
|
20
11
|
} else {
|
|
21
|
-
throw Error(
|
|
22
|
-
`Authentication failed ${response.status} ${response.statusText}`
|
|
23
|
-
);
|
|
12
|
+
throw Error(`auth token does not containe VuuUser`);
|
|
24
13
|
}
|
|
25
|
-
}
|
|
14
|
+
};
|
|
15
|
+
const authenticate = async (username, password, authUrl = defaultAuthUrl) => {
|
|
16
|
+
return fetch(authUrl, {
|
|
17
|
+
method: "POST",
|
|
18
|
+
credentials: "include",
|
|
19
|
+
headers: {
|
|
20
|
+
"Content-Type": "application/json",
|
|
21
|
+
"access-control-allow-origin": location.host
|
|
22
|
+
},
|
|
23
|
+
body: JSON.stringify({ username, password })
|
|
24
|
+
}).then((response) => {
|
|
25
|
+
if (response.ok) {
|
|
26
|
+
const authToken = response.headers.get("vuu-auth-token");
|
|
27
|
+
if (typeof authToken === "string" && authToken.length > 0) {
|
|
28
|
+
try {
|
|
29
|
+
return {
|
|
30
|
+
token: authToken,
|
|
31
|
+
user: parseVuuUserFromToken(authToken)
|
|
32
|
+
};
|
|
33
|
+
} catch (e) {
|
|
34
|
+
throw Error(`Authentication error: vuu auth token decoding failed.`);
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
throw Error(`Authentication failed auth token not returned by server`);
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
throw Error(
|
|
41
|
+
`Authentication failed ${response.status} ${response.statusText}`
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
};
|
|
26
46
|
|
|
27
47
|
exports.authenticate = authenticate;
|
|
48
|
+
exports.parseVuuUserFromToken = parseVuuUserFromToken;
|
|
28
49
|
//# sourceMappingURL=authenticate.js.map
|
package/cjs/authenticate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate.js","sources":["../../../packages/vuu-data-remote/src/authenticate.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"authenticate.js","sources":["../../../packages/vuu-data-remote/src/authenticate.ts"],"sourcesContent":["import type { VuuUser } from \"@vuu-ui/vuu-protocol-types\";\n\nconst defaultAuthUrl = \"api/authn\";\n\nconst isValidVuuUser = (response: unknown): response is VuuUser =>\n typeof response === \"object\" &&\n response !== null &&\n \"name\" in response &&\n \"authorizations\" in response &&\n typeof response.name === \"string\" &&\n Array.isArray(response.authorizations);\n\n/**\n * The auth token returned from authn call encodes (Base64) a VuuUser\n * within the first part of the token.\n */\nexport const parseVuuUserFromToken = (token: string) => {\n const [base64EncodedVuuUser] = token.split(\".\");\n const jsonString = atob(base64EncodedVuuUser);\n const response = JSON.parse(jsonString);\n if (isValidVuuUser(response)) {\n return response;\n } else {\n throw Error(`auth token does not containe VuuUser`);\n }\n};\n\nexport type AuthenticationResponse = {\n token: string;\n user: VuuUser;\n};\n\nexport const authenticate = async (\n username: string,\n password: string,\n authUrl = defaultAuthUrl,\n): Promise<AuthenticationResponse> => {\n return fetch(authUrl, {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"access-control-allow-origin\": location.host,\n },\n body: JSON.stringify({ username, password }),\n }).then((response) => {\n if (response.ok) {\n const authToken = response.headers.get(\"vuu-auth-token\");\n if (typeof authToken === \"string\" && authToken.length > 0) {\n try {\n return {\n token: authToken,\n user: parseVuuUserFromToken(authToken),\n };\n } catch (e) {\n throw Error(`Authentication error: vuu auth token decoding failed.`);\n }\n } else {\n throw Error(`Authentication failed auth token not returned by server`);\n }\n } else {\n throw Error(\n `Authentication failed ${response.status} ${response.statusText}`,\n );\n }\n });\n};\n"],"names":[],"mappings":";;AAEA,MAAM,cAAiB,GAAA,WAAA;AAEvB,MAAM,iBAAiB,CAAC,QAAA,KACtB,OAAO,QAAa,KAAA,QAAA,IACpB,aAAa,IACb,IAAA,MAAA,IAAU,YACV,gBAAoB,IAAA,QAAA,IACpB,OAAO,QAAS,CAAA,IAAA,KAAS,YACzB,KAAM,CAAA,OAAA,CAAQ,SAAS,cAAc,CAAA;AAM1B,MAAA,qBAAA,GAAwB,CAAC,KAAkB,KAAA;AACtD,EAAA,MAAM,CAAC,oBAAoB,CAAI,GAAA,KAAA,CAAM,MAAM,GAAG,CAAA;AAC9C,EAAM,MAAA,UAAA,GAAa,KAAK,oBAAoB,CAAA;AAC5C,EAAM,MAAA,QAAA,GAAW,IAAK,CAAA,KAAA,CAAM,UAAU,CAAA;AACtC,EAAI,IAAA,cAAA,CAAe,QAAQ,CAAG,EAAA;AAC5B,IAAO,OAAA,QAAA;AAAA,GACF,MAAA;AACL,IAAA,MAAM,MAAM,CAAsC,oCAAA,CAAA,CAAA;AAAA;AAEtD;AAOO,MAAM,YAAe,GAAA,OAC1B,QACA,EAAA,QAAA,EACA,UAAU,cAC0B,KAAA;AACpC,EAAA,OAAO,MAAM,OAAS,EAAA;AAAA,IACpB,MAAQ,EAAA,MAAA;AAAA,IACR,WAAa,EAAA,SAAA;AAAA,IACb,OAAS,EAAA;AAAA,MACP,cAAgB,EAAA,kBAAA;AAAA,MAChB,+BAA+B,QAAS,CAAA;AAAA,KAC1C;AAAA,IACA,MAAM,IAAK,CAAA,SAAA,CAAU,EAAE,QAAA,EAAU,UAAU;AAAA,GAC5C,CAAA,CAAE,IAAK,CAAA,CAAC,QAAa,KAAA;AACpB,IAAA,IAAI,SAAS,EAAI,EAAA;AACf,MAAA,MAAM,SAAY,GAAA,QAAA,CAAS,OAAQ,CAAA,GAAA,CAAI,gBAAgB,CAAA;AACvD,MAAA,IAAI,OAAO,SAAA,KAAc,QAAY,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACzD,QAAI,IAAA;AACF,UAAO,OAAA;AAAA,YACL,KAAO,EAAA,SAAA;AAAA,YACP,IAAA,EAAM,sBAAsB,SAAS;AAAA,WACvC;AAAA,iBACO,CAAG,EAAA;AACV,UAAA,MAAM,MAAM,CAAwD,sDAAA,CAAA,CAAA;AAAA;AACtE,OACK,MAAA;AACL,QAAA,MAAM,MAAM,CAAyD,uDAAA,CAAA,CAAA;AAAA;AACvE,KACK,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,CAAyB,sBAAA,EAAA,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU,CAAA;AAAA,OACjE;AAAA;AACF,GACD,CAAA;AACH;;;;;"}
|
package/cjs/index.js
CHANGED
|
@@ -11,6 +11,7 @@ var WebSocketConnection = require('./WebSocketConnection.js');
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
exports.authenticate = authenticate.authenticate;
|
|
14
|
+
exports.parseVuuUserFromToken = authenticate.parseVuuUserFromToken;
|
|
14
15
|
exports.ConnectionManager = ConnectionManager;
|
|
15
16
|
exports.connectionId = constants.connectionId;
|
|
16
17
|
exports.msgType = constants.msgType;
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/cjs/inlined-worker.js
CHANGED
|
@@ -1588,7 +1588,6 @@ var ServerProxy = class {
|
|
|
1588
1588
|
__publicField(this, "viewports");
|
|
1589
1589
|
__publicField(this, "mapClientToServerViewport");
|
|
1590
1590
|
__publicField(this, "authToken", "");
|
|
1591
|
-
__publicField(this, "user", "user");
|
|
1592
1591
|
__publicField(this, "pendingLogin");
|
|
1593
1592
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1594
1593
|
__publicField(this, "pendingRequests", /* @__PURE__ */ new Map());
|
|
@@ -1646,10 +1645,9 @@ var ServerProxy = class {
|
|
|
1646
1645
|
connection.on("closed", this.connectionClosed);
|
|
1647
1646
|
connection.on("connection-status", this.connectionStatusChanged);
|
|
1648
1647
|
}
|
|
1649
|
-
async login(authToken
|
|
1648
|
+
async login(authToken) {
|
|
1650
1649
|
if (authToken) {
|
|
1651
1650
|
this.authToken = authToken;
|
|
1652
|
-
this.user = user;
|
|
1653
1651
|
return new Promise((resolve, reject) => {
|
|
1654
1652
|
this.sendMessageToServer({ type: "LOGIN", token: this.authToken }, "");
|
|
1655
1653
|
this.pendingLogin = { resolve, reject };
|
|
@@ -2844,7 +2842,7 @@ var ws;
|
|
|
2844
2842
|
var sendMessageToClient = (message) => {
|
|
2845
2843
|
postMessage(message);
|
|
2846
2844
|
};
|
|
2847
|
-
async function connectToServer(url, protocols, token,
|
|
2845
|
+
async function connectToServer(url, protocols, token, retryLimitDisconnect, retryLimitStartup) {
|
|
2848
2846
|
const websocketConnection = ws = new WebSocketConnection({
|
|
2849
2847
|
callback: (msg) => {
|
|
2850
2848
|
if (isConnectionQualityMetrics(msg)) {
|
|
@@ -2863,7 +2861,7 @@ async function connectToServer(url, protocols, token, username, retryLimitDiscon
|
|
|
2863
2861
|
await websocketConnection.connect();
|
|
2864
2862
|
server = new ServerProxy(websocketConnection, sendMessageToClient);
|
|
2865
2863
|
if (websocketConnection.requiresLogin) {
|
|
2866
|
-
await server.login(token
|
|
2864
|
+
await server.login(token);
|
|
2867
2865
|
}
|
|
2868
2866
|
}
|
|
2869
2867
|
var handleMessageFromClient = async ({
|
|
@@ -2876,7 +2874,6 @@ var handleMessageFromClient = async ({
|
|
|
2876
2874
|
message.url,
|
|
2877
2875
|
message.protocol,
|
|
2878
2876
|
message.token,
|
|
2879
|
-
message.username,
|
|
2880
2877
|
message.retryLimitDisconnect,
|
|
2881
2878
|
message.retryLimitStartup
|
|
2882
2879
|
);
|