@tdengine/websocket 3.0.0
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 +59 -0
- package/dist/browser/index.js +778 -0
- package/dist/main/index.js +711 -0
- package/dist/main/index.js.map +1 -0
- package/dist/module/index.mjs +704 -0
- package/dist/module/index.mjs.map +1 -0
- package/dist/types.d.ts +103 -0
- package/dist/types.d.ts.map +1 -0
- package/example/basicUsageAsync.ts +48 -0
- package/example/basicUsagePrimse.ts +43 -0
- package/example/cloudUsage.ts +55 -0
- package/example/continousConnectAndVersion.ts +16 -0
- package/example/test.mjs +51 -0
- package/index.ts +7 -0
- package/jest.config.js +8 -0
- package/package.json +55 -0
- package/src/constant.ts +74 -0
- package/src/taosResult.ts +269 -0
- package/src/tdengineWebsocket.ts +39 -0
- package/src/ut8Helper.ts +42 -0
- package/src/wsClient.ts +196 -0
- package/src/wsError.ts +5 -0
- package/src/wsOptions.ts +14 -0
- package/src/wsQuery.ts +30 -0
- package/src/wsQueryInterface.ts +212 -0
- package/src/wsQueryResponse.ts +112 -0
- package/tdengine-websocket-3.0.0.tgz +0 -0
- package/test/bulkPulling/connect.test.ts +27 -0
- package/test/bulkPulling/queryTables.test.ts +274 -0
- package/test/bulkPulling/version.test.ts +19 -0
- package/test/utils.ts +235 -0
- package/tsconfig.json +101 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["index.ts","src/tdengineWebsocket.ts","src/wsQuery.ts","src/taosResult.ts","src/constant.ts","src/wsError.ts","src/ut8Helper.ts","src/wsQueryInterface.ts","src/wsClient.ts","src/wsQueryResponse.ts"],"sourcesContent":["import {TDengineWebSocket} from './src/tdengineWebsocket'\n\nlet connect = (url:string)=>{\n return new TDengineWebSocket(url)\n}\n\nexport{connect}","\nimport { execute } from './wsQuery'\nimport { TaosResult } from './taosResult'\nimport { WSInterface } from './wsQueryInterface'\nimport { WSConnResponse } from './wsQueryResponse'\n\n \nexport class TDengineWebSocket {\n _wsInterface: WSInterface\n _data: Array<any> = []\n _meta: Array<any> = []\n\n constructor(url: string) {\n this._wsInterface = new WSInterface(new URL(url))\n }\n\n connect(database?:string):Promise<WSConnResponse> {\n return this._wsInterface.connect(database)\n }\n\n state(){\n return this._wsInterface.getState();\n }\n\n /**\n * return client version.\n */\n version(): Promise<string> {\n return this._wsInterface.version()\n }\n\n query(sql:string):Promise<TaosResult>{\n return execute(sql,this._wsInterface)\n }\n close() {\n this._wsInterface.close();\n }\n\n} ","import { TaosResult } from './taosResult';\nimport { WSInterface } from './wsQueryInterface'\nexport async function execute(sql: string, wsInterface: WSInterface): Promise<TaosResult> {\n let taosResult;\n let wsQueryResponse = await wsInterface.query(sql);\n try {\n taosResult = new TaosResult(wsQueryResponse);\n if (wsQueryResponse.is_update == true) {\n return taosResult;\n } else {\n while (true) {\n let wsFetchResponse = await wsInterface.fetch(wsQueryResponse)\n // console.log(\"[wsQuery.execute.wsFetchResponse]==>\\n\")\n // console.log(wsFetchResponse)\n // console.log(typeof BigInt(8))\n // console.log(typeof wsFetchResponse.timing)\n if (wsFetchResponse.completed == true) {\n break;\n } else {\n taosResult.setRows(wsFetchResponse)\n let tmp: TaosResult = await wsInterface.fetchBlock(wsFetchResponse, taosResult)\n taosResult = tmp;\n }\n }\n return taosResult;\n }\n } finally {\n wsInterface.freeResult(wsQueryResponse)\n }\n}","import { WSFetchBlockResponse, WSFetchResponse, WSQueryResponse } from \"./wsQueryResponse\";\nimport { ColumnsBlockType, TDengineTypeCode, TDengineTypeName } from './constant'\nimport { TaosResultError, WebSocketQueryInterFaceError } from \"./wsError\";\nimport { AppendRune } from \"./ut8Helper\"\n\nexport class TaosResult {\n meta: Array<ResponseMeta> | null;\n data: Array<Array<any>> | null;\n precision: number = 0;\n affectRows: number = 0;\n /** unit nano seconds */\n timing: bigint;\n constructor(queryResponse: WSQueryResponse) {\n if (queryResponse.is_update == true) {\n this.meta = null\n this.data = null\n } else {\n if (queryResponse.fields_count && queryResponse.fields_names && queryResponse.fields_types && queryResponse.fields_lengths) {\n let _meta = [];\n for (let i = 0; i < queryResponse.fields_count; i++) {\n _meta.push({\n name: queryResponse.fields_names[i],\n type: queryResponse.fields_types[i],\n length: queryResponse.fields_lengths[i]\n })\n }\n this.meta = _meta;\n } else {\n throw new TaosResultError(`fields_count,fields_names,fields_types,fields_lengths of the update query response should be null`)\n }\n this.data = [];\n }\n\n this.affectRows = queryResponse.affected_rows\n this.timing = queryResponse.timing\n this.precision = queryResponse.precision\n // console.log(`typeof this.timing:${typeof this.timing}, typeof fetchResponse.timing:${typeof queryResponse.timing}`)\n }\n\n setRows(fetchResponse: WSFetchResponse) {\n this.affectRows += fetchResponse.rows;\n // console.log(`typeof this.timing:${typeof this.timing}, typeof fetchResponse.timing:${typeof fetchResponse.timing}`)\n this.timing = this.timing + fetchResponse.timing\n }\n\n setData(fetchBlockResponse: WSFetchBlockResponse) {\n if (this.data) {\n this.data.push([])\n } else {\n throw new TaosResultError(`update query response cannot set data`)\n }\n\n }\n /**\n * Mapping the WebSocket response type code to TDengine's type name. \n */\n getTDengineMeta(): Array<TDengineMeta> | null {\n if (this.meta) {\n let _ = new Array<TDengineMeta>()\n this.meta.forEach(m => {\n _.push({\n name: m.name,\n type: TDengineTypeName[m.type],\n length: m.length\n })\n })\n return _;\n } else {\n return null;\n }\n }\n\n}\n\ninterface TDengineMeta {\n name: string,\n type: string,\n length: number,\n}\ninterface ResponseMeta {\n name: string,\n type: number,\n length: number,\n}\n\nexport function parseBlock(fetchResponse: WSFetchResponse, blocks: WSFetchBlockResponse, taosResult: TaosResult): TaosResult {\n\n if (taosResult.meta && taosResult.data) {\n let metaList = taosResult.meta;\n\n // console.log(typeof taosResult.timing)\n // console.log(typeof blocks.timing)\n // console.log(blocks.id)\n\n taosResult.timing = BigInt(taosResult.timing) + blocks.timing\n\n const INT_32_SIZE = 4;\n\n // Offset num of bytes from rawBlockBuffer.\n let bufferOffset = (4 * 5) + 8 + (4 + 1) * metaList.length\n let colLengthBlockSize = INT_32_SIZE * metaList.length\n // console.log(\"===colLengthBlockSize:\" + colLengthBlockSize)\n\n let bitMapSize = (fetchResponse.rows + (1 << 3) - 1) >> 3\n\n // whole raw block ArrayBuffer\n let dataBuffer = blocks.data.slice(bufferOffset);\n\n // record the head of column in block\n let colBlockHead = 0;\n for (let i = 0; i < fetchResponse.rows; i++) {\n let row = [];\n // point to the head of the column in the block\n colBlockHead = 0 + colLengthBlockSize;\n // point to the head of columns's data in the block (include bitMap and offsetArray)\n let colDataHead = colBlockHead;\n // traverse row after row. \n for (let j = 0; j < metaList.length; j++) {\n\n let isVarType = _isVarTye(metaList[j])\n // console.log(\"== dataBuffer Length:\" + dataBuffer.byteLength)\n // console.log(\"== loop i:\" + i + \"J=\" + j + \"col:\" + metaList[j].name + \"type:\" + metaList[j].type)\n // console.log(\"== loop isVarType:\" + isVarType);\n if (isVarType == ColumnsBlockType.SOLID) {\n\n colDataHead = colBlockHead + bitMapSize + metaList[j].length * i\n\n let byteArrayIndex = i >> 3;\n let bitwiseOffset = 7 - (i & 7)\n let bitMapArr = dataBuffer.slice(colBlockHead, colBlockHead + bitMapSize)\n // console.log(\"==i:\" + i + \"byteArrayIndex=\" + byteArrayIndex)\n // console.log(\"== loop colblockhead:\" + colBlockHead)\n // console.log(\"== loop bitmap:\" + bitMapSize)\n // console.log(\"== loop bitMap length=\" + bitMapArr.byteLength)\n // console.log(\"==loop bitMap bitwiseoffset:\" + bitwiseOffset + \"byteArrayIndex:\" + byteArrayIndex)\n let bitFlag = ((new DataView(bitMapArr).getUint8(byteArrayIndex)) & (1 << bitwiseOffset)) >> bitwiseOffset\n\n if (bitFlag == 1) {\n row.push(\"NULL\")\n } else {\n row.push(readSolidData(dataBuffer, colDataHead, metaList[j]))\n }\n // console.log(\"=====(new DataView(dataBuffer, INT_32_SIZE * j, INT_32_SIZE).getInt32(0))=\" + (new DataView(dataBuffer, INT_32_SIZE * j, INT_32_SIZE).getInt32(0, true)));\n colBlockHead = colBlockHead + bitMapSize + (new DataView(dataBuffer, INT_32_SIZE * j, INT_32_SIZE).getInt32(0, true))\n\n } else {\n // if null check\n let varOffset = new DataView(dataBuffer, colBlockHead + (INT_32_SIZE * i), INT_32_SIZE).getInt32(0, true)\n // console.log(\"== var type offset:\" + varOffset)\n if (varOffset == -1) {\n row.push(\"NULL\")\n colBlockHead = colBlockHead + INT_32_SIZE * fetchResponse.rows + (new DataView(dataBuffer, j * INT_32_SIZE, INT_32_SIZE).getInt32(0, true))\n } else {\n colDataHead = colBlockHead + INT_32_SIZE * fetchResponse.rows + varOffset\n let dataLength = (new DataView(dataBuffer, colDataHead, 2).getInt16(0, true))\n // console.log(\"== loop var type length:\" + dataLength)\n if (isVarType == ColumnsBlockType.VARCHAR) {\n\n row.push(readVarchar(dataBuffer, colDataHead + 2, dataLength))\n\n } else {\n row.push(readNchar(dataBuffer, colDataHead + 2, dataLength))\n }\n colBlockHead = colBlockHead + INT_32_SIZE * fetchResponse.rows + (new DataView(dataBuffer, j * INT_32_SIZE, INT_32_SIZE).getInt32(0, true))\n }\n }\n }\n taosResult.data.push(row);\n }\n return taosResult;\n } else {\n throw new TaosResultError(\"cannot fetch block for an update query.\")\n }\n\n}\n\nfunction _isVarTye(meta: ResponseMeta): Number {\n switch (meta.type) {\n case TDengineTypeCode['NCHAR']: {\n return ColumnsBlockType['NCHAR']\n }\n case TDengineTypeCode['VARCHAR']: {\n return ColumnsBlockType['VARCHAR']\n }\n case TDengineTypeCode['BINARY']: {\n return ColumnsBlockType['VARCHAR']\n }\n case TDengineTypeCode['JSON']: {\n return ColumnsBlockType['VARCHAR']\n }\n default: {\n return ColumnsBlockType['SOLID']\n }\n }\n}\n\nfunction readSolidData(dataBuffer: ArrayBuffer, colDataHead: number, meta: ResponseMeta): Number | Boolean | BigInt {\n\n switch (meta.type) {\n case TDengineTypeCode['BOOL']: {\n return (Boolean)(new DataView(dataBuffer, colDataHead, 1).getInt8(0))\n }\n case TDengineTypeCode['TINYINT']: {\n return (new DataView(dataBuffer, colDataHead, 1).getInt8(0))\n }\n case TDengineTypeCode['SMALLINT']: {\n return (new DataView(dataBuffer, colDataHead, 2).getInt16(0, true))\n }\n case TDengineTypeCode['INT']: {\n return (new DataView(dataBuffer, colDataHead, 4).getInt32(0, true))\n }\n case TDengineTypeCode['BIGINT']: {\n return (new DataView(dataBuffer, colDataHead, 8).getBigInt64(0, true))\n }\n case TDengineTypeCode['TINYINT UNSIGNED']: {\n return (new DataView(dataBuffer, colDataHead, 1).getUint8(0))\n }\n case TDengineTypeCode['SMALLINT UNSIGNED']: {\n return (new DataView(dataBuffer, colDataHead, 2).getUint16(0, true))\n }\n case TDengineTypeCode['INT UNSIGNED']: {\n return (new DataView(dataBuffer, colDataHead, 4).getUint32(0, true))\n }\n case TDengineTypeCode['BIGINT UNSIGNED']: {\n return (new DataView(dataBuffer, colDataHead, 8).getBigUint64(0, true))\n }\n case TDengineTypeCode['FLOAT']: {\n return (parseFloat(new DataView(dataBuffer, colDataHead, 4).getFloat32(0, true).toFixed(5)) )\n }\n case TDengineTypeCode['DOUBLE']: {\n return (parseFloat(new DataView(dataBuffer, colDataHead, 8).getFloat64(0, true).toFixed(15)))\n }\n case TDengineTypeCode['TIMESTAMP']: {\n return (new DataView(dataBuffer, colDataHead, 8).getBigInt64(0, true))\n // could change \n }\n default: {\n throw new WebSocketQueryInterFaceError(`unspported type ${meta.type} for column ${meta.name}`)\n }\n }\n}\n\n\nfunction readVarchar(dataBuffer: ArrayBuffer, colDataHead: number, length: number): string {\n let data = \"\";\n data += new TextDecoder().decode(dataBuffer.slice(colDataHead, colDataHead + length))\n return data;\n}\n\nfunction readNchar(dataBuffer: ArrayBuffer, colDataHead: number, length: number): string {\n let decoder = new TextDecoder();\n let data = \"\";\n let buff: ArrayBuffer = dataBuffer.slice(colDataHead, colDataHead + length);\n for (let i = 0; i < length / 4; i++) {\n // console.log(\"== readNchar data:\" + new DataView(buff, i * 4, 4).getUint32(0, true))\n data += AppendRune(new DataView(buff, i * 4, 4).getUint32(0, true))\n\n }\n return data;\n}\n\n\nfunction iteratorBuff(arr: ArrayBuffer) {\n let buf = Buffer.from(arr);\n for (const value of buf) {\n console.log(value.toString())\n }\n\n}","interface IndexableString {\n [index: number]: string\n}\n\ninterface StringIndexable {\n [index: string]: number\n}\n\nexport const TDengineTypeName: IndexableString = {\n 0: 'NULL',\n 1: 'BOOL',\n 2: 'TINYINT',\n 3: 'SMALLINT',\n 4: 'INT',\n 5: 'BIGINT',\n 6: 'FLOAT',\n 7: 'DOUBLE',\n 8: 'VARCHAR',\n 9: 'TIMESTAMP',\n 10: 'NCHAR',\n 11: 'TINYINT UNSIGNED',\n 12: 'SMALLINT UNSIGNED',\n 13: 'INT UNSIGNED',\n 14: 'BIGINT UNSIGNED',\n 15: 'JSON',\n}\n\nexport const ColumnsBlockType: StringIndexable = {\n 'SOLID': 0,\n 'VARCHAR': 1,\n 'NCHAR': 2\n}\n\n\nexport const TDengineTypeCode: StringIndexable = {\n 'NULL': 0,\n 'BOOL': 1,\n 'TINYINT': 2,\n 'SMALLINT': 3,\n 'INT': 4,\n 'BIGINT': 5,\n 'FLOAT': 6,\n 'DOUBLE': 7,\n 'BINARY': 8,\n 'VARCHAR': 8,\n 'TIMESTAMP': 9,\n 'NCHAR': 10,\n 'TINYINT UNSIGNED': 11,\n 'SMALLINT UNSIGNED': 12,\n 'INT UNSIGNED': 13,\n 'BIGINT UNSIGNED': 14,\n 'JSON': 15,\n}\n\nexport const TDenginePrecision: IndexableString = {\n 0: 'MILLISECOND',\n 1: \"MICROSECOND\",\n 2: \"NANOSECOND\",\n}\n\nexport const TDengineTypeLength: StringIndexable = {\n 'BOOL': 1,\n 'TINYINT': 1,\n 'SMALLINT': 2,\n 'INT': 4,\n 'BIGINT': 8,\n 'FLOAT': 4,\n 'DOUBLE': 8,\n 'TIMESTAMP': 8,\n 'TINYINT UNSIGNED': 1,\n 'SMALLINT UNSIGNED': 2,\n 'INT UNSIGNED': 4,\n 'BIGINT UNSIGNED': 8,\n}","export class TDWebSocketClientError extends Error { }\nexport class WebSocketQueryError extends TDWebSocketClientError { }\nexport class WebSocketInterfaceError extends TDWebSocketClientError {}\nexport class WebSocketQueryInterFaceError extends WebSocketInterfaceError{}\nexport class TaosResultError extends Error{};","// Numbers fundamental to the encoding.\n// the \"error\" Rune or \"Unicode replacement character\"\nconst RuneError = '\\uFFFD'\n// Maximum valid Unicode code point.\nconst MaxRune = '\\U0010FFFF'\n// Code points in the surrogate range are not valid for UTF-8.\nconst surrogateMin = 0xD800\nconst surrogateMax = 0xDFFF\nconst tx = 128;\nconst t2 = 192;\nconst t3 = 224;\nconst t4 = 240;\nconst maskx = 63;\nconst rune1Max = (1 << 7) - 1;\n\nconst rune2Max = (1 << 11) - 1;\nconst rune3Max = (1 << 16) - 1;\n\n\n// AppendRune appends the UTF-8 encoding of r to the end of p and\n// returns the extended buffer. If the rune is out of range,\n// it appends the encoding of RuneError.\nexport function AppendRune(r:any) {\n let p:Array<any> = [];\n // console.log(\"== AppendRun r:\");\n // console.log(r)\n if (r <= rune1Max) {\n p.push(r & 0xff); \n return Buffer.from(p).toString();\n }\n if (r <= rune2Max) {\n p.push(t2 | ((r >> 6) & 0xff), tx | (r & 0xff) & maskx)\n } else if ((r > MaxRune) || (surrogateMax <= r && r <= surrogateMax)) {\n p.push(RuneError)\n } else if (r <= rune3Max) {\n p.push(t3 | ((r >> 12) & 0xff), tx | ((r >> 6) & 0xff) & maskx, tx | (r & 0xff) & maskx)\n } else {\n p.push(t4 | ((r >> 18) & 0xff), tx | ((r >> 12) & 0xff) & maskx, tx | ((r >> 6) & 0xff) & maskx, tx | (r & 0xff) & maskx)\n }\n\n return Buffer.from(p).toString();\n}","import { parseBlock, TaosResult } from './taosResult';\nimport { TDWebSocketClient } from './wsClient'\nimport { WebSocketInterfaceError, WebSocketQueryError } from './wsError'\nimport { WSVersionResponse, WSFetchBlockResponse, WSQueryResponse, WSFetchResponse, WSConnResponse } from './wsQueryResponse'\nimport JSONBig from 'json-bigint'\n\nexport class WSInterface {\n private _wsQueryClient: TDWebSocketClient;\n private _req_id = 0;\n private _url;\n\n constructor(url: URL) {\n this.checkURL(url);\n this._url = url;\n this._wsQueryClient = new TDWebSocketClient(this._url);\n }\n\n connect(database?: string): Promise<WSConnResponse> {\n\n let _db = this._url.pathname.split('/')[3];\n\n if (database) {\n _db = database;\n }\n this._reqIDIncrement()\n let connMsg = {\n action: 'conn',\n args: {\n req_id: this._req_id,\n user: this._url.username,\n password: this._url.password,\n db: _db,\n }\n }\n // console.log(connMsg)\n return new Promise((resolve, reject) => {\n if (this._wsQueryClient.readyState() > 0) {\n this._wsQueryClient.sendMsg(JSON.stringify(connMsg))\n .then((e: any) => {\n if (e.code == 0) {\n resolve(e);\n } else {\n reject(new WebSocketQueryError(`${e.message}, code ${e.code}`))\n }\n })\n } else {\n this._wsQueryClient.Ready()\n .then((ws: TDWebSocketClient) => {\n return ws.sendMsg(JSON.stringify(connMsg))\n })\n .then((e: any) => {\n if (e.code == 0) {\n resolve(e);\n } else {\n reject(new WebSocketQueryError(`${e.message}, code ${e.code}`))\n }\n })\n }\n\n })\n }\n\n // need to construct Response.\n query(sql: string): Promise<WSQueryResponse> {\n this._reqIDIncrement()\n // construct msg\n let queryMsg = {\n action: 'query',\n args: {\n req_id: this._req_id,\n sql: sql\n },\n }\n return new Promise((resolve, reject) => {\n let jsonStr = JSON.stringify(queryMsg)\n // console.log(\"[wsQueryInterface.query.queryMsg]===>\" + jsonStr)\n this._wsQueryClient.sendMsg(jsonStr)\n .then((e: any) => {\n if (e.code == 0) {\n resolve(new WSQueryResponse(e))\n } else {\n reject(new WebSocketInterfaceError(`${e.message},code ${e.code}`))\n }\n })\n })\n }\n\n getState() {\n return this._wsQueryClient.readyState()\n }\n\n fetch(res: WSQueryResponse): Promise<WSFetchResponse> {\n this._reqIDIncrement()\n let fetchMsg = {\n action: 'fetch',\n args: {\n req_id: this._req_id,\n id: res.id\n }\n }\n // console.log(\"[wsQueryInterface.fetch()]===>wsQueryResponse\\n\")\n // console.log(res)\n return new Promise((resolve, reject) => {\n let jsonStr = JSONBig.stringify(fetchMsg)\n // console.log(\"[wsQueryInterface.fetch.fetchMsg]===>\" + jsonStr)\n this._wsQueryClient.sendMsg(jsonStr)\n .then((e: any) => {\n if (e.code == 0) {\n resolve(new WSFetchResponse(e))\n } else {\n reject(new WebSocketInterfaceError(`${e.message},code ${e.code}`))\n }\n }).catch(e => {\n reject(e)\n });\n })\n }\n\n fetchBlock(fetchResponse: WSFetchResponse, taosResult: TaosResult): Promise<TaosResult> {\n this._reqIDIncrement()\n let fetchBlockMsg = {\n action: 'fetch_block',\n args: {\n 'req_id': this._req_id,\n 'id': fetchResponse.id,\n }\n }\n return new Promise((resolve, reject) => {\n let jsonStr = JSONBig.stringify(fetchBlockMsg)\n // console.log(\"[wsQueryInterface.fetchBlock.fetchBlockMsg]===>\" + jsonStr)\n this._wsQueryClient.sendMsg(jsonStr).then((e: any) => {\n resolve(parseBlock(fetchResponse, new WSFetchBlockResponse(e), taosResult))\n // if retrieve JSON then reject with message\n // else is binary , so parse raw block to TaosResult\n }).catch(e => reject(e))\n })\n }\n\n freeResult(res: WSQueryResponse) {\n this._reqIDIncrement()\n let freeResultMsg = {\n action: 'free_result',\n args: {\n req_id: this._req_id,\n id: res.id\n }\n }\n return new Promise((resolve, reject) => {\n let jsonStr = JSONBig.stringify(freeResultMsg)\n // console.log(\"[wsQueryInterface.freeResult.freeResultMsg]===>\" + jsonStr)\n this._wsQueryClient.sendMsg(jsonStr, false).then((e: any) => {\n resolve(e)\n }).catch(e => reject(e))\n })\n }\n\n version(): Promise<string> {\n this._reqIDIncrement()\n let versionMsg = {\n action: 'version',\n args: {\n req_id: this._req_id\n }\n }\n return new Promise((resolve, reject) => {\n if (this._wsQueryClient.readyState() > 0) {\n this._wsQueryClient.sendMsg(JSONBig.stringify(versionMsg))\n .then((e: any) => {\n // console.log(e)\n if (e.code == 0) {\n resolve(new WSVersionResponse(e).version)\n } else {\n reject(new WSVersionResponse(e).message)\n }\n }).catch(e => reject(e));\n }\n this._wsQueryClient.Ready()\n .then((ws: TDWebSocketClient) => {\n return ws.sendMsg(JSONBig.stringify(versionMsg))\n }).then((e: any) => {\n // console.log(e)\n if (e.code == 0) {\n resolve(new WSVersionResponse(e).version)\n } else {\n reject(new WSVersionResponse(e).message)\n }\n }).catch(e => reject(e));\n })\n }\n\n close() {\n this._wsQueryClient.close();\n }\n\n checkURL(url: URL) {\n // Assert is cloud url\n if (!url.searchParams.has('token')) {\n if (!(url.username || url.password)) {\n throw new WebSocketInterfaceError(\"invalid url, password or username needed.\")\n }\n }\n }\n\n private _reqIDIncrement() {\n if (this._req_id == Number.MAX_SAFE_INTEGER) {\n this._req_id = 0;\n } else {\n this._req_id += 1;\n }\n }\n\n}","import { ICloseEvent, IMessageEvent, w3cwebsocket } from \"websocket\";\nimport { TDWebSocketClientError, WebSocketQueryError } from './wsError'\n\ninterface MessageId {\n action: string,\n req_id: bigint,\n id?: bigint\n}\n\ninterface MessageAction {\n reject: Function,\n resolve: Function,\n timer: ReturnType<typeof setTimeout>,\n}\n\nvar _msgActionRegister: Map<MessageId, MessageAction> = new Map();\n\nexport class TDWebSocketClient {\n private _wsConn: w3cwebsocket;\n _wsURL: URL;\n _timeout = 5000;\n\n // create ws\n constructor(url: URL) {\n\n // return w3bsocket3\n if (url) {\n this._wsURL = url;\n let origin = url.origin;\n let pathname = url.pathname;\n let search = url.search;\n\n this._wsConn = new w3cwebsocket(origin.concat(pathname).concat(search));\n\n // this._wsConn.onopen = this._onopen\n\n this._wsConn.onerror = function (err: Error) { throw err }\n\n this._wsConn.onclose = this._onclose\n\n this._wsConn.onmessage = this._onmessage\n this._wsConn._binaryType = \"arraybuffer\"\n } else {\n throw new WebSocketQueryError(\"websocket URL must be defined\")\n }\n\n\n }\n\n Ready(): Promise<TDWebSocketClient> {\n return new Promise((resolve, reject) => {\n this._wsConn.onopen = () => {\n // console.log(\"websocket connection opened\")\n resolve(this);\n }\n })\n }\n\n private _onclose(e: ICloseEvent) {\n return new Promise((resolve, reject) => {\n resolve(\"websocket connection closed\")\n })\n }\n\n\n private _onmessage(event: any) {\n let data = event.data;\n // console.log(\"[wsClient._onMessage()._msgActionRegister]\\n\")\n // console.log(_msgActionRegister)\n\n // console.log(\"====\"+ (Object.prototype.toString.call(data)))\n\n if (Object.prototype.toString.call(data) === '[object ArrayBuffer]') {\n let id = new DataView(data, 8, 8).getBigUint64(0, true)\n // console.log(\"fetch block response id:\" + id)\n\n let action: MessageAction | any = undefined;\n\n _msgActionRegister.forEach((v: MessageAction, k: MessageId) => {\n if (k.id == id) {\n action = v\n _msgActionRegister.delete(k)\n }\n })\n if (action) {\n action.resolve(data);\n }\n else {\n _msgActionRegister.clear()\n throw new TDWebSocketClientError(`no callback registered for fetch_block with id=${id}`);\n }\n\n } else if (Object.prototype.toString.call(data) === '[object Blob]') {\n data.arrayBuffer().then((d: ArrayBuffer) => {\n let id = new DataView(d, 8, 8).getBigUint64(0, true)\n // console.log(\"fetch block response id:\" + id)\n\n let action: MessageAction | any = undefined;\n\n _msgActionRegister.forEach((v: MessageAction, k: MessageId) => {\n if (k.id == id) {\n action = v\n _msgActionRegister.delete(k)\n }\n })\n if (action) {\n action.resolve(d);\n }\n else {\n _msgActionRegister.clear()\n throw new TDWebSocketClientError(`no callback registered for fetch_block with id=${id}`);\n }\n })\n\n } else if (Object.prototype.toString.call(data) === '[object String]') {\n let msg = JSON.parse(data)\n // console.log(\"[_onmessage.stringType]==>:\" + data);\n let action: MessageAction | any = undefined;\n\n _msgActionRegister.forEach((v: MessageAction, k: MessageId) => {\n if (k.action == 'version') {\n action = v\n _msgActionRegister.delete(k)\n }\n if (k.req_id == msg.req_id && k.action == msg.action) {\n action = v\n _msgActionRegister.delete(k)\n }\n })\n if (action) {\n action.resolve(msg);\n }\n else {\n _msgActionRegister.clear()\n throw new TDWebSocketClientError(`no callback registered for ${msg.action} with req_id=${msg.req_id}`);\n }\n } else {\n _msgActionRegister.clear()\n throw new TDWebSocketClientError(`invalid message type ${Object.prototype.toString.call(data)}`)\n }\n }\n\n close() {\n if (this._wsConn) {\n _msgActionRegister.clear();\n this._wsConn.close();\n } else {\n throw new TDWebSocketClientError(\"WebSocket connection is undefined.\")\n }\n }\n\n readyState(): number {\n return this._wsConn.readyState;\n }\n\n sendMsg(message: string, register: Boolean = true) {\n // console.log(\"[wsClient.sendMessage()]===>\" + message)\n let msg = JSON.parse(message);\n // console.log(typeof msg.args.id)\n if (msg.args.id) {\n msg.args.id = BigInt(msg.args.id)\n }\n // console.log(\"[wsClient.sendMessage.msg]===>\\n\")\n // console.log(msg)\n\n return new Promise((resolve, reject) => {\n if (this._wsConn && this._wsConn.readyState > 0) {\n if (register) {\n\n this._registerCallback({ action: msg.action, req_id: msg.args.req_id, id: msg.args.id === undefined ? msg.args.id : BigInt(msg.args.id) }, resolve, reject)\n // console.log(\"[wsClient.sendMessage._msgActionRegister]===>\\n\")\n // console.log(_msgActionRegister)\n }\n this._wsConn.send(message)\n } else {\n reject(new WebSocketQueryError(`WebSocket connection is not ready,status :${this._wsConn?.readyState}`))\n }\n })\n }\n\n private _registerCallback(id: MessageId, res: (args: unknown) => void, rej: (reason: any) => void) {\n // console.log(\"register messageId:\"+ JSON.stringify(id))\n _msgActionRegister.set(id,\n {\n reject: rej,\n resolve: res,\n timer: setTimeout(() => rej(new WebSocketQueryError(`action:${id.action},req_id:${id.req_id} timeout with ${this._timeout} milliseconds`)), this._timeout)\n })\n }\n\n configTimeout(ms: number) {\n this._timeout = ms;\n }\n\n}\n\n","/**\n * define ws Response type|class, for query?\n */\n\n\nexport class WSVersionResponse {\n\n version: string;\n code: number;\n message: string;\n action: string;\n\n constructor(msg: any) {\n\n this.version = msg.version;\n this.code = msg.code;\n this.message = msg.message;\n this.action = msg.action;\n }\n}\n\nexport class WSQueryResponse {\n code: number;\n message: string;\n action: string;\n req_id: number;\n timing: bigint;\n id: bigint;\n is_update: boolean;\n affected_rows: number;\n fields_count: number | null;\n fields_names: Array<string> | null;\n fields_types: Array<number> | null;\n fields_lengths: Array<number> | null;\n precision: number;\n\n constructor(msg: any) {\n this.code = msg.code;\n this.message = msg.message;\n this.action = msg.action;\n this.req_id = msg.req_id;\n this.timing = BigInt(msg.timing);\n this.id = BigInt(msg.id);\n this.is_update = msg.is_update;\n this.affected_rows = msg.affected_rows;\n this.fields_count = msg.fields_count;\n this.fields_names = msg.fields_names;\n this.fields_types = msg.fields_types;\n this.fields_lengths = msg.fields_lengths;\n this.precision = msg.precision;\n }\n}\n\nexport class WSFetchResponse {\n code: number;\n message: string;\n action: string;\n req_id: number;\n timing: bigint;\n id: bigint;\n completed: boolean;\n length: Array<number>;\n rows: number;\n\n constructor(msg: any) {\n this.code = msg.code;\n this.message = msg.message;\n this.action = msg.action;\n this.req_id = msg.req_id;\n this.timing = BigInt(msg.timing);\n this.id = BigInt(msg.id);\n this.completed = msg.completed;\n this.length = msg.length;\n this.rows = msg.rows;\n }\n}\n\nexport class WSFetchBlockResponse {\n\n id: bigint\n data: ArrayBuffer\n timing: bigint\n constructor(msg: ArrayBuffer) {\n this.timing = new DataView(msg, 0, 8).getBigUint64(0, true)\n this.id = new DataView(msg, 8, 8).getBigUint64(0, true)\n this.data = msg.slice(16)\n }\n}\n\ninterface IWSConnResponse {\n code: number;\n message: string;\n action: string;\n req_id: number;\n timing: bigint;\n}\n\nexport class WSConnResponse {\n code: number;\n message: string;\n action: string;\n req_id: number;\n timing: bigint;\n\n constructor(msg: IWSConnResponse) {\n this.code = msg.code;\n this.message = msg.message;\n this.action = msg.action;\n this.req_id = msg.req_id;\n this.timing = BigInt(msg.timing);\n }\n}\n"],"names":[],"version":3,"file":"index.mjs.map"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
declare class WSQueryResponse {
|
|
2
|
+
code: number;
|
|
3
|
+
message: string;
|
|
4
|
+
action: string;
|
|
5
|
+
req_id: number;
|
|
6
|
+
timing: bigint;
|
|
7
|
+
id: bigint;
|
|
8
|
+
is_update: boolean;
|
|
9
|
+
affected_rows: number;
|
|
10
|
+
fields_count: number | null;
|
|
11
|
+
fields_names: Array<string> | null;
|
|
12
|
+
fields_types: Array<number> | null;
|
|
13
|
+
fields_lengths: Array<number> | null;
|
|
14
|
+
precision: number;
|
|
15
|
+
constructor(msg: any);
|
|
16
|
+
}
|
|
17
|
+
declare class WSFetchResponse {
|
|
18
|
+
code: number;
|
|
19
|
+
message: string;
|
|
20
|
+
action: string;
|
|
21
|
+
req_id: number;
|
|
22
|
+
timing: bigint;
|
|
23
|
+
id: bigint;
|
|
24
|
+
completed: boolean;
|
|
25
|
+
length: Array<number>;
|
|
26
|
+
rows: number;
|
|
27
|
+
constructor(msg: any);
|
|
28
|
+
}
|
|
29
|
+
declare class WSFetchBlockResponse {
|
|
30
|
+
id: bigint;
|
|
31
|
+
data: ArrayBuffer;
|
|
32
|
+
timing: bigint;
|
|
33
|
+
constructor(msg: ArrayBuffer);
|
|
34
|
+
}
|
|
35
|
+
interface IWSConnResponse {
|
|
36
|
+
code: number;
|
|
37
|
+
message: string;
|
|
38
|
+
action: string;
|
|
39
|
+
req_id: number;
|
|
40
|
+
timing: bigint;
|
|
41
|
+
}
|
|
42
|
+
declare class WSConnResponse {
|
|
43
|
+
code: number;
|
|
44
|
+
message: string;
|
|
45
|
+
action: string;
|
|
46
|
+
req_id: number;
|
|
47
|
+
timing: bigint;
|
|
48
|
+
constructor(msg: IWSConnResponse);
|
|
49
|
+
}
|
|
50
|
+
declare class TaosResult {
|
|
51
|
+
meta: Array<ResponseMeta> | null;
|
|
52
|
+
data: Array<Array<any>> | null;
|
|
53
|
+
precision: number;
|
|
54
|
+
affectRows: number;
|
|
55
|
+
/** unit nano seconds */
|
|
56
|
+
timing: bigint;
|
|
57
|
+
constructor(queryResponse: WSQueryResponse);
|
|
58
|
+
setRows(fetchResponse: WSFetchResponse): void;
|
|
59
|
+
setData(fetchBlockResponse: WSFetchBlockResponse): void;
|
|
60
|
+
/**
|
|
61
|
+
* Mapping the WebSocket response type code to TDengine's type name.
|
|
62
|
+
*/
|
|
63
|
+
getTDengineMeta(): Array<TDengineMeta> | null;
|
|
64
|
+
}
|
|
65
|
+
interface TDengineMeta {
|
|
66
|
+
name: string;
|
|
67
|
+
type: string;
|
|
68
|
+
length: number;
|
|
69
|
+
}
|
|
70
|
+
interface ResponseMeta {
|
|
71
|
+
name: string;
|
|
72
|
+
type: number;
|
|
73
|
+
length: number;
|
|
74
|
+
}
|
|
75
|
+
declare class WSInterface {
|
|
76
|
+
constructor(url: URL);
|
|
77
|
+
connect(database?: string): Promise<WSConnResponse>;
|
|
78
|
+
query(sql: string): Promise<WSQueryResponse>;
|
|
79
|
+
getState(): number;
|
|
80
|
+
fetch(res: WSQueryResponse): Promise<WSFetchResponse>;
|
|
81
|
+
fetchBlock(fetchResponse: WSFetchResponse, taosResult: TaosResult): Promise<TaosResult>;
|
|
82
|
+
freeResult(res: WSQueryResponse): Promise<unknown>;
|
|
83
|
+
version(): Promise<string>;
|
|
84
|
+
close(): void;
|
|
85
|
+
checkURL(url: URL): void;
|
|
86
|
+
}
|
|
87
|
+
declare class TDengineWebSocket {
|
|
88
|
+
_wsInterface: WSInterface;
|
|
89
|
+
_data: Array<any>;
|
|
90
|
+
_meta: Array<any>;
|
|
91
|
+
constructor(url: string);
|
|
92
|
+
connect(database?: string): Promise<WSConnResponse>;
|
|
93
|
+
state(): number;
|
|
94
|
+
/**
|
|
95
|
+
* return client version.
|
|
96
|
+
*/
|
|
97
|
+
version(): Promise<string>;
|
|
98
|
+
query(sql: string): Promise<TaosResult>;
|
|
99
|
+
close(): void;
|
|
100
|
+
}
|
|
101
|
+
export let connect: (url: string) => TDengineWebSocket;
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/wsQueryResponse.ts","src/constant.ts","src/wsError.ts","src/ut8Helper.ts","src/taosResult.ts","src/wsClient.ts","src/wsQueryInterface.ts","src/wsQuery.ts","src/tdengineWebsocket.ts","index.ts"],"sourcesContent":["/**\n * define ws Response type|class, for query?\n */\n\n\nexport class WSVersionResponse {\n\n version: string;\n code: number;\n message: string;\n action: string;\n\n constructor(msg: any) {\n\n this.version = msg.version;\n this.code = msg.code;\n this.message = msg.message;\n this.action = msg.action;\n }\n}\n\nexport class WSQueryResponse {\n code: number;\n message: string;\n action: string;\n req_id: number;\n timing: bigint;\n id: bigint;\n is_update: boolean;\n affected_rows: number;\n fields_count: number | null;\n fields_names: Array<string> | null;\n fields_types: Array<number> | null;\n fields_lengths: Array<number> | null;\n precision: number;\n\n constructor(msg: any) {\n this.code = msg.code;\n this.message = msg.message;\n this.action = msg.action;\n this.req_id = msg.req_id;\n this.timing = BigInt(msg.timing);\n this.id = BigInt(msg.id);\n this.is_update = msg.is_update;\n this.affected_rows = msg.affected_rows;\n this.fields_count = msg.fields_count;\n this.fields_names = msg.fields_names;\n this.fields_types = msg.fields_types;\n this.fields_lengths = msg.fields_lengths;\n this.precision = msg.precision;\n }\n}\n\nexport class WSFetchResponse {\n code: number;\n message: string;\n action: string;\n req_id: number;\n timing: bigint;\n id: bigint;\n completed: boolean;\n length: Array<number>;\n rows: number;\n\n constructor(msg: any) {\n this.code = msg.code;\n this.message = msg.message;\n this.action = msg.action;\n this.req_id = msg.req_id;\n this.timing = BigInt(msg.timing);\n this.id = BigInt(msg.id);\n this.completed = msg.completed;\n this.length = msg.length;\n this.rows = msg.rows;\n }\n}\n\nexport class WSFetchBlockResponse {\n\n id: bigint\n data: ArrayBuffer\n timing: bigint\n constructor(msg: ArrayBuffer) {\n this.timing = new DataView(msg, 0, 8).getBigUint64(0, true)\n this.id = new DataView(msg, 8, 8).getBigUint64(0, true)\n this.data = msg.slice(16)\n }\n}\n\ninterface IWSConnResponse {\n code: number;\n message: string;\n action: string;\n req_id: number;\n timing: bigint;\n}\n\nexport class WSConnResponse {\n code: number;\n message: string;\n action: string;\n req_id: number;\n timing: bigint;\n\n constructor(msg: IWSConnResponse) {\n this.code = msg.code;\n this.message = msg.message;\n this.action = msg.action;\n this.req_id = msg.req_id;\n this.timing = BigInt(msg.timing);\n }\n}\n","interface IndexableString {\n [index: number]: string\n}\n\ninterface StringIndexable {\n [index: string]: number\n}\n\nexport const TDengineTypeName: IndexableString = {\n 0: 'NULL',\n 1: 'BOOL',\n 2: 'TINYINT',\n 3: 'SMALLINT',\n 4: 'INT',\n 5: 'BIGINT',\n 6: 'FLOAT',\n 7: 'DOUBLE',\n 8: 'VARCHAR',\n 9: 'TIMESTAMP',\n 10: 'NCHAR',\n 11: 'TINYINT UNSIGNED',\n 12: 'SMALLINT UNSIGNED',\n 13: 'INT UNSIGNED',\n 14: 'BIGINT UNSIGNED',\n 15: 'JSON',\n}\n\nexport const ColumnsBlockType: StringIndexable = {\n 'SOLID': 0,\n 'VARCHAR': 1,\n 'NCHAR': 2\n}\n\n\nexport const TDengineTypeCode: StringIndexable = {\n 'NULL': 0,\n 'BOOL': 1,\n 'TINYINT': 2,\n 'SMALLINT': 3,\n 'INT': 4,\n 'BIGINT': 5,\n 'FLOAT': 6,\n 'DOUBLE': 7,\n 'BINARY': 8,\n 'VARCHAR': 8,\n 'TIMESTAMP': 9,\n 'NCHAR': 10,\n 'TINYINT UNSIGNED': 11,\n 'SMALLINT UNSIGNED': 12,\n 'INT UNSIGNED': 13,\n 'BIGINT UNSIGNED': 14,\n 'JSON': 15,\n}\n\nexport const TDenginePrecision: IndexableString = {\n 0: 'MILLISECOND',\n 1: \"MICROSECOND\",\n 2: \"NANOSECOND\",\n}\n\nexport const TDengineTypeLength: StringIndexable = {\n 'BOOL': 1,\n 'TINYINT': 1,\n 'SMALLINT': 2,\n 'INT': 4,\n 'BIGINT': 8,\n 'FLOAT': 4,\n 'DOUBLE': 8,\n 'TIMESTAMP': 8,\n 'TINYINT UNSIGNED': 1,\n 'SMALLINT UNSIGNED': 2,\n 'INT UNSIGNED': 4,\n 'BIGINT UNSIGNED': 8,\n}","export class TDWebSocketClientError extends Error { }\nexport class WebSocketQueryError extends TDWebSocketClientError { }\nexport class WebSocketInterfaceError extends TDWebSocketClientError {}\nexport class WebSocketQueryInterFaceError extends WebSocketInterfaceError{}\nexport class TaosResultError extends Error{};","// Numbers fundamental to the encoding.\n// the \"error\" Rune or \"Unicode replacement character\"\nconst RuneError = '\\uFFFD'\n// Maximum valid Unicode code point.\nconst MaxRune = '\\U0010FFFF'\n// Code points in the surrogate range are not valid for UTF-8.\nconst surrogateMin = 0xD800\nconst surrogateMax = 0xDFFF\nconst tx = 128;\nconst t2 = 192;\nconst t3 = 224;\nconst t4 = 240;\nconst maskx = 63;\nconst rune1Max = (1 << 7) - 1;\n\nconst rune2Max = (1 << 11) - 1;\nconst rune3Max = (1 << 16) - 1;\n\n\n// AppendRune appends the UTF-8 encoding of r to the end of p and\n// returns the extended buffer. If the rune is out of range,\n// it appends the encoding of RuneError.\nexport function AppendRune(r:any) {\n let p:Array<any> = [];\n // console.log(\"== AppendRun r:\");\n // console.log(r)\n if (r <= rune1Max) {\n p.push(r & 0xff); \n return Buffer.from(p).toString();\n }\n if (r <= rune2Max) {\n p.push(t2 | ((r >> 6) & 0xff), tx | (r & 0xff) & maskx)\n } else if ((r > MaxRune) || (surrogateMax <= r && r <= surrogateMax)) {\n p.push(RuneError)\n } else if (r <= rune3Max) {\n p.push(t3 | ((r >> 12) & 0xff), tx | ((r >> 6) & 0xff) & maskx, tx | (r & 0xff) & maskx)\n } else {\n p.push(t4 | ((r >> 18) & 0xff), tx | ((r >> 12) & 0xff) & maskx, tx | ((r >> 6) & 0xff) & maskx, tx | (r & 0xff) & maskx)\n }\n\n return Buffer.from(p).toString();\n}","import { WSFetchBlockResponse, WSFetchResponse, WSQueryResponse } from \"./wsQueryResponse\";\nimport { ColumnsBlockType, TDengineTypeCode, TDengineTypeName } from './constant'\nimport { TaosResultError, WebSocketQueryInterFaceError } from \"./wsError\";\nimport { AppendRune } from \"./ut8Helper\"\n\nexport class TaosResult {\n meta: Array<ResponseMeta> | null;\n data: Array<Array<any>> | null;\n precision: number = 0;\n affectRows: number = 0;\n /** unit nano seconds */\n timing: bigint;\n constructor(queryResponse: WSQueryResponse) {\n if (queryResponse.is_update == true) {\n this.meta = null\n this.data = null\n } else {\n if (queryResponse.fields_count && queryResponse.fields_names && queryResponse.fields_types && queryResponse.fields_lengths) {\n let _meta = [];\n for (let i = 0; i < queryResponse.fields_count; i++) {\n _meta.push({\n name: queryResponse.fields_names[i],\n type: queryResponse.fields_types[i],\n length: queryResponse.fields_lengths[i]\n })\n }\n this.meta = _meta;\n } else {\n throw new TaosResultError(`fields_count,fields_names,fields_types,fields_lengths of the update query response should be null`)\n }\n this.data = [];\n }\n\n this.affectRows = queryResponse.affected_rows\n this.timing = queryResponse.timing\n this.precision = queryResponse.precision\n // console.log(`typeof this.timing:${typeof this.timing}, typeof fetchResponse.timing:${typeof queryResponse.timing}`)\n }\n\n setRows(fetchResponse: WSFetchResponse) {\n this.affectRows += fetchResponse.rows;\n // console.log(`typeof this.timing:${typeof this.timing}, typeof fetchResponse.timing:${typeof fetchResponse.timing}`)\n this.timing = this.timing + fetchResponse.timing\n }\n\n setData(fetchBlockResponse: WSFetchBlockResponse) {\n if (this.data) {\n this.data.push([])\n } else {\n throw new TaosResultError(`update query response cannot set data`)\n }\n\n }\n /**\n * Mapping the WebSocket response type code to TDengine's type name. \n */\n getTDengineMeta(): Array<TDengineMeta> | null {\n if (this.meta) {\n let _ = new Array<TDengineMeta>()\n this.meta.forEach(m => {\n _.push({\n name: m.name,\n type: TDengineTypeName[m.type],\n length: m.length\n })\n })\n return _;\n } else {\n return null;\n }\n }\n\n}\n\ninterface TDengineMeta {\n name: string,\n type: string,\n length: number,\n}\ninterface ResponseMeta {\n name: string,\n type: number,\n length: number,\n}\n\nexport function parseBlock(fetchResponse: WSFetchResponse, blocks: WSFetchBlockResponse, taosResult: TaosResult): TaosResult {\n\n if (taosResult.meta && taosResult.data) {\n let metaList = taosResult.meta;\n\n // console.log(typeof taosResult.timing)\n // console.log(typeof blocks.timing)\n // console.log(blocks.id)\n\n taosResult.timing = BigInt(taosResult.timing) + blocks.timing\n\n const INT_32_SIZE = 4;\n\n // Offset num of bytes from rawBlockBuffer.\n let bufferOffset = (4 * 5) + 8 + (4 + 1) * metaList.length\n let colLengthBlockSize = INT_32_SIZE * metaList.length\n // console.log(\"===colLengthBlockSize:\" + colLengthBlockSize)\n\n let bitMapSize = (fetchResponse.rows + (1 << 3) - 1) >> 3\n\n // whole raw block ArrayBuffer\n let dataBuffer = blocks.data.slice(bufferOffset);\n\n // record the head of column in block\n let colBlockHead = 0;\n for (let i = 0; i < fetchResponse.rows; i++) {\n let row = [];\n // point to the head of the column in the block\n colBlockHead = 0 + colLengthBlockSize;\n // point to the head of columns's data in the block (include bitMap and offsetArray)\n let colDataHead = colBlockHead;\n // traverse row after row. \n for (let j = 0; j < metaList.length; j++) {\n\n let isVarType = _isVarTye(metaList[j])\n // console.log(\"== dataBuffer Length:\" + dataBuffer.byteLength)\n // console.log(\"== loop i:\" + i + \"J=\" + j + \"col:\" + metaList[j].name + \"type:\" + metaList[j].type)\n // console.log(\"== loop isVarType:\" + isVarType);\n if (isVarType == ColumnsBlockType.SOLID) {\n\n colDataHead = colBlockHead + bitMapSize + metaList[j].length * i\n\n let byteArrayIndex = i >> 3;\n let bitwiseOffset = 7 - (i & 7)\n let bitMapArr = dataBuffer.slice(colBlockHead, colBlockHead + bitMapSize)\n // console.log(\"==i:\" + i + \"byteArrayIndex=\" + byteArrayIndex)\n // console.log(\"== loop colblockhead:\" + colBlockHead)\n // console.log(\"== loop bitmap:\" + bitMapSize)\n // console.log(\"== loop bitMap length=\" + bitMapArr.byteLength)\n // console.log(\"==loop bitMap bitwiseoffset:\" + bitwiseOffset + \"byteArrayIndex:\" + byteArrayIndex)\n let bitFlag = ((new DataView(bitMapArr).getUint8(byteArrayIndex)) & (1 << bitwiseOffset)) >> bitwiseOffset\n\n if (bitFlag == 1) {\n row.push(\"NULL\")\n } else {\n row.push(readSolidData(dataBuffer, colDataHead, metaList[j]))\n }\n // console.log(\"=====(new DataView(dataBuffer, INT_32_SIZE * j, INT_32_SIZE).getInt32(0))=\" + (new DataView(dataBuffer, INT_32_SIZE * j, INT_32_SIZE).getInt32(0, true)));\n colBlockHead = colBlockHead + bitMapSize + (new DataView(dataBuffer, INT_32_SIZE * j, INT_32_SIZE).getInt32(0, true))\n\n } else {\n // if null check\n let varOffset = new DataView(dataBuffer, colBlockHead + (INT_32_SIZE * i), INT_32_SIZE).getInt32(0, true)\n // console.log(\"== var type offset:\" + varOffset)\n if (varOffset == -1) {\n row.push(\"NULL\")\n colBlockHead = colBlockHead + INT_32_SIZE * fetchResponse.rows + (new DataView(dataBuffer, j * INT_32_SIZE, INT_32_SIZE).getInt32(0, true))\n } else {\n colDataHead = colBlockHead + INT_32_SIZE * fetchResponse.rows + varOffset\n let dataLength = (new DataView(dataBuffer, colDataHead, 2).getInt16(0, true))\n // console.log(\"== loop var type length:\" + dataLength)\n if (isVarType == ColumnsBlockType.VARCHAR) {\n\n row.push(readVarchar(dataBuffer, colDataHead + 2, dataLength))\n\n } else {\n row.push(readNchar(dataBuffer, colDataHead + 2, dataLength))\n }\n colBlockHead = colBlockHead + INT_32_SIZE * fetchResponse.rows + (new DataView(dataBuffer, j * INT_32_SIZE, INT_32_SIZE).getInt32(0, true))\n }\n }\n }\n taosResult.data.push(row);\n }\n return taosResult;\n } else {\n throw new TaosResultError(\"cannot fetch block for an update query.\")\n }\n\n}\n\nfunction _isVarTye(meta: ResponseMeta): Number {\n switch (meta.type) {\n case TDengineTypeCode['NCHAR']: {\n return ColumnsBlockType['NCHAR']\n }\n case TDengineTypeCode['VARCHAR']: {\n return ColumnsBlockType['VARCHAR']\n }\n case TDengineTypeCode['BINARY']: {\n return ColumnsBlockType['VARCHAR']\n }\n case TDengineTypeCode['JSON']: {\n return ColumnsBlockType['VARCHAR']\n }\n default: {\n return ColumnsBlockType['SOLID']\n }\n }\n}\n\nfunction readSolidData(dataBuffer: ArrayBuffer, colDataHead: number, meta: ResponseMeta): Number | Boolean | BigInt {\n\n switch (meta.type) {\n case TDengineTypeCode['BOOL']: {\n return (Boolean)(new DataView(dataBuffer, colDataHead, 1).getInt8(0))\n }\n case TDengineTypeCode['TINYINT']: {\n return (new DataView(dataBuffer, colDataHead, 1).getInt8(0))\n }\n case TDengineTypeCode['SMALLINT']: {\n return (new DataView(dataBuffer, colDataHead, 2).getInt16(0, true))\n }\n case TDengineTypeCode['INT']: {\n return (new DataView(dataBuffer, colDataHead, 4).getInt32(0, true))\n }\n case TDengineTypeCode['BIGINT']: {\n return (new DataView(dataBuffer, colDataHead, 8).getBigInt64(0, true))\n }\n case TDengineTypeCode['TINYINT UNSIGNED']: {\n return (new DataView(dataBuffer, colDataHead, 1).getUint8(0))\n }\n case TDengineTypeCode['SMALLINT UNSIGNED']: {\n return (new DataView(dataBuffer, colDataHead, 2).getUint16(0, true))\n }\n case TDengineTypeCode['INT UNSIGNED']: {\n return (new DataView(dataBuffer, colDataHead, 4).getUint32(0, true))\n }\n case TDengineTypeCode['BIGINT UNSIGNED']: {\n return (new DataView(dataBuffer, colDataHead, 8).getBigUint64(0, true))\n }\n case TDengineTypeCode['FLOAT']: {\n return (parseFloat(new DataView(dataBuffer, colDataHead, 4).getFloat32(0, true).toFixed(5)) )\n }\n case TDengineTypeCode['DOUBLE']: {\n return (parseFloat(new DataView(dataBuffer, colDataHead, 8).getFloat64(0, true).toFixed(15)))\n }\n case TDengineTypeCode['TIMESTAMP']: {\n return (new DataView(dataBuffer, colDataHead, 8).getBigInt64(0, true))\n // could change \n }\n default: {\n throw new WebSocketQueryInterFaceError(`unspported type ${meta.type} for column ${meta.name}`)\n }\n }\n}\n\n\nfunction readVarchar(dataBuffer: ArrayBuffer, colDataHead: number, length: number): string {\n let data = \"\";\n data += new TextDecoder().decode(dataBuffer.slice(colDataHead, colDataHead + length))\n return data;\n}\n\nfunction readNchar(dataBuffer: ArrayBuffer, colDataHead: number, length: number): string {\n let decoder = new TextDecoder();\n let data = \"\";\n let buff: ArrayBuffer = dataBuffer.slice(colDataHead, colDataHead + length);\n for (let i = 0; i < length / 4; i++) {\n // console.log(\"== readNchar data:\" + new DataView(buff, i * 4, 4).getUint32(0, true))\n data += AppendRune(new DataView(buff, i * 4, 4).getUint32(0, true))\n\n }\n return data;\n}\n\n\nfunction iteratorBuff(arr: ArrayBuffer) {\n let buf = Buffer.from(arr);\n for (const value of buf) {\n console.log(value.toString())\n }\n\n}","import { ICloseEvent, IMessageEvent, w3cwebsocket } from \"websocket\";\nimport { TDWebSocketClientError, WebSocketQueryError } from './wsError'\n\ninterface MessageId {\n action: string,\n req_id: bigint,\n id?: bigint\n}\n\ninterface MessageAction {\n reject: Function,\n resolve: Function,\n timer: ReturnType<typeof setTimeout>,\n}\n\nvar _msgActionRegister: Map<MessageId, MessageAction> = new Map();\n\nexport class TDWebSocketClient {\n private _wsConn: w3cwebsocket;\n _wsURL: URL;\n _timeout = 5000;\n\n // create ws\n constructor(url: URL) {\n\n // return w3bsocket3\n if (url) {\n this._wsURL = url;\n let origin = url.origin;\n let pathname = url.pathname;\n let search = url.search;\n\n this._wsConn = new w3cwebsocket(origin.concat(pathname).concat(search));\n\n // this._wsConn.onopen = this._onopen\n\n this._wsConn.onerror = function (err: Error) { throw err }\n\n this._wsConn.onclose = this._onclose\n\n this._wsConn.onmessage = this._onmessage\n this._wsConn._binaryType = \"arraybuffer\"\n } else {\n throw new WebSocketQueryError(\"websocket URL must be defined\")\n }\n\n\n }\n\n Ready(): Promise<TDWebSocketClient> {\n return new Promise((resolve, reject) => {\n this._wsConn.onopen = () => {\n // console.log(\"websocket connection opened\")\n resolve(this);\n }\n })\n }\n\n private _onclose(e: ICloseEvent) {\n return new Promise((resolve, reject) => {\n resolve(\"websocket connection closed\")\n })\n }\n\n\n private _onmessage(event: any) {\n let data = event.data;\n // console.log(\"[wsClient._onMessage()._msgActionRegister]\\n\")\n // console.log(_msgActionRegister)\n\n // console.log(\"====\"+ (Object.prototype.toString.call(data)))\n\n if (Object.prototype.toString.call(data) === '[object ArrayBuffer]') {\n let id = new DataView(data, 8, 8).getBigUint64(0, true)\n // console.log(\"fetch block response id:\" + id)\n\n let action: MessageAction | any = undefined;\n\n _msgActionRegister.forEach((v: MessageAction, k: MessageId) => {\n if (k.id == id) {\n action = v\n _msgActionRegister.delete(k)\n }\n })\n if (action) {\n action.resolve(data);\n }\n else {\n _msgActionRegister.clear()\n throw new TDWebSocketClientError(`no callback registered for fetch_block with id=${id}`);\n }\n\n } else if (Object.prototype.toString.call(data) === '[object Blob]') {\n data.arrayBuffer().then((d: ArrayBuffer) => {\n let id = new DataView(d, 8, 8).getBigUint64(0, true)\n // console.log(\"fetch block response id:\" + id)\n\n let action: MessageAction | any = undefined;\n\n _msgActionRegister.forEach((v: MessageAction, k: MessageId) => {\n if (k.id == id) {\n action = v\n _msgActionRegister.delete(k)\n }\n })\n if (action) {\n action.resolve(d);\n }\n else {\n _msgActionRegister.clear()\n throw new TDWebSocketClientError(`no callback registered for fetch_block with id=${id}`);\n }\n })\n\n } else if (Object.prototype.toString.call(data) === '[object String]') {\n let msg = JSON.parse(data)\n // console.log(\"[_onmessage.stringType]==>:\" + data);\n let action: MessageAction | any = undefined;\n\n _msgActionRegister.forEach((v: MessageAction, k: MessageId) => {\n if (k.action == 'version') {\n action = v\n _msgActionRegister.delete(k)\n }\n if (k.req_id == msg.req_id && k.action == msg.action) {\n action = v\n _msgActionRegister.delete(k)\n }\n })\n if (action) {\n action.resolve(msg);\n }\n else {\n _msgActionRegister.clear()\n throw new TDWebSocketClientError(`no callback registered for ${msg.action} with req_id=${msg.req_id}`);\n }\n } else {\n _msgActionRegister.clear()\n throw new TDWebSocketClientError(`invalid message type ${Object.prototype.toString.call(data)}`)\n }\n }\n\n close() {\n if (this._wsConn) {\n _msgActionRegister.clear();\n this._wsConn.close();\n } else {\n throw new TDWebSocketClientError(\"WebSocket connection is undefined.\")\n }\n }\n\n readyState(): number {\n return this._wsConn.readyState;\n }\n\n sendMsg(message: string, register: Boolean = true) {\n // console.log(\"[wsClient.sendMessage()]===>\" + message)\n let msg = JSON.parse(message);\n // console.log(typeof msg.args.id)\n if (msg.args.id) {\n msg.args.id = BigInt(msg.args.id)\n }\n // console.log(\"[wsClient.sendMessage.msg]===>\\n\")\n // console.log(msg)\n\n return new Promise((resolve, reject) => {\n if (this._wsConn && this._wsConn.readyState > 0) {\n if (register) {\n\n this._registerCallback({ action: msg.action, req_id: msg.args.req_id, id: msg.args.id === undefined ? msg.args.id : BigInt(msg.args.id) }, resolve, reject)\n // console.log(\"[wsClient.sendMessage._msgActionRegister]===>\\n\")\n // console.log(_msgActionRegister)\n }\n this._wsConn.send(message)\n } else {\n reject(new WebSocketQueryError(`WebSocket connection is not ready,status :${this._wsConn?.readyState}`))\n }\n })\n }\n\n private _registerCallback(id: MessageId, res: (args: unknown) => void, rej: (reason: any) => void) {\n // console.log(\"register messageId:\"+ JSON.stringify(id))\n _msgActionRegister.set(id,\n {\n reject: rej,\n resolve: res,\n timer: setTimeout(() => rej(new WebSocketQueryError(`action:${id.action},req_id:${id.req_id} timeout with ${this._timeout} milliseconds`)), this._timeout)\n })\n }\n\n configTimeout(ms: number) {\n this._timeout = ms;\n }\n\n}\n\n","import { parseBlock, TaosResult } from './taosResult';\nimport { TDWebSocketClient } from './wsClient'\nimport { WebSocketInterfaceError, WebSocketQueryError } from './wsError'\nimport { WSVersionResponse, WSFetchBlockResponse, WSQueryResponse, WSFetchResponse, WSConnResponse } from './wsQueryResponse'\nimport JSONBig from 'json-bigint'\n\nexport class WSInterface {\n private _wsQueryClient: TDWebSocketClient;\n private _req_id = 0;\n private _url;\n\n constructor(url: URL) {\n this.checkURL(url);\n this._url = url;\n this._wsQueryClient = new TDWebSocketClient(this._url);\n }\n\n connect(database?: string): Promise<WSConnResponse> {\n\n let _db = this._url.pathname.split('/')[3];\n\n if (database) {\n _db = database;\n }\n this._reqIDIncrement()\n let connMsg = {\n action: 'conn',\n args: {\n req_id: this._req_id,\n user: this._url.username,\n password: this._url.password,\n db: _db,\n }\n }\n // console.log(connMsg)\n return new Promise((resolve, reject) => {\n if (this._wsQueryClient.readyState() > 0) {\n this._wsQueryClient.sendMsg(JSON.stringify(connMsg))\n .then((e: any) => {\n if (e.code == 0) {\n resolve(e);\n } else {\n reject(new WebSocketQueryError(`${e.message}, code ${e.code}`))\n }\n })\n } else {\n this._wsQueryClient.Ready()\n .then((ws: TDWebSocketClient) => {\n return ws.sendMsg(JSON.stringify(connMsg))\n })\n .then((e: any) => {\n if (e.code == 0) {\n resolve(e);\n } else {\n reject(new WebSocketQueryError(`${e.message}, code ${e.code}`))\n }\n })\n }\n\n })\n }\n\n // need to construct Response.\n query(sql: string): Promise<WSQueryResponse> {\n this._reqIDIncrement()\n // construct msg\n let queryMsg = {\n action: 'query',\n args: {\n req_id: this._req_id,\n sql: sql\n },\n }\n return new Promise((resolve, reject) => {\n let jsonStr = JSON.stringify(queryMsg)\n // console.log(\"[wsQueryInterface.query.queryMsg]===>\" + jsonStr)\n this._wsQueryClient.sendMsg(jsonStr)\n .then((e: any) => {\n if (e.code == 0) {\n resolve(new WSQueryResponse(e))\n } else {\n reject(new WebSocketInterfaceError(`${e.message},code ${e.code}`))\n }\n })\n })\n }\n\n getState() {\n return this._wsQueryClient.readyState()\n }\n\n fetch(res: WSQueryResponse): Promise<WSFetchResponse> {\n this._reqIDIncrement()\n let fetchMsg = {\n action: 'fetch',\n args: {\n req_id: this._req_id,\n id: res.id\n }\n }\n // console.log(\"[wsQueryInterface.fetch()]===>wsQueryResponse\\n\")\n // console.log(res)\n return new Promise((resolve, reject) => {\n let jsonStr = JSONBig.stringify(fetchMsg)\n // console.log(\"[wsQueryInterface.fetch.fetchMsg]===>\" + jsonStr)\n this._wsQueryClient.sendMsg(jsonStr)\n .then((e: any) => {\n if (e.code == 0) {\n resolve(new WSFetchResponse(e))\n } else {\n reject(new WebSocketInterfaceError(`${e.message},code ${e.code}`))\n }\n }).catch(e => {\n reject(e)\n });\n })\n }\n\n fetchBlock(fetchResponse: WSFetchResponse, taosResult: TaosResult): Promise<TaosResult> {\n this._reqIDIncrement()\n let fetchBlockMsg = {\n action: 'fetch_block',\n args: {\n 'req_id': this._req_id,\n 'id': fetchResponse.id,\n }\n }\n return new Promise((resolve, reject) => {\n let jsonStr = JSONBig.stringify(fetchBlockMsg)\n // console.log(\"[wsQueryInterface.fetchBlock.fetchBlockMsg]===>\" + jsonStr)\n this._wsQueryClient.sendMsg(jsonStr).then((e: any) => {\n resolve(parseBlock(fetchResponse, new WSFetchBlockResponse(e), taosResult))\n // if retrieve JSON then reject with message\n // else is binary , so parse raw block to TaosResult\n }).catch(e => reject(e))\n })\n }\n\n freeResult(res: WSQueryResponse) {\n this._reqIDIncrement()\n let freeResultMsg = {\n action: 'free_result',\n args: {\n req_id: this._req_id,\n id: res.id\n }\n }\n return new Promise((resolve, reject) => {\n let jsonStr = JSONBig.stringify(freeResultMsg)\n // console.log(\"[wsQueryInterface.freeResult.freeResultMsg]===>\" + jsonStr)\n this._wsQueryClient.sendMsg(jsonStr, false).then((e: any) => {\n resolve(e)\n }).catch(e => reject(e))\n })\n }\n\n version(): Promise<string> {\n this._reqIDIncrement()\n let versionMsg = {\n action: 'version',\n args: {\n req_id: this._req_id\n }\n }\n return new Promise((resolve, reject) => {\n if (this._wsQueryClient.readyState() > 0) {\n this._wsQueryClient.sendMsg(JSONBig.stringify(versionMsg))\n .then((e: any) => {\n // console.log(e)\n if (e.code == 0) {\n resolve(new WSVersionResponse(e).version)\n } else {\n reject(new WSVersionResponse(e).message)\n }\n }).catch(e => reject(e));\n }\n this._wsQueryClient.Ready()\n .then((ws: TDWebSocketClient) => {\n return ws.sendMsg(JSONBig.stringify(versionMsg))\n }).then((e: any) => {\n // console.log(e)\n if (e.code == 0) {\n resolve(new WSVersionResponse(e).version)\n } else {\n reject(new WSVersionResponse(e).message)\n }\n }).catch(e => reject(e));\n })\n }\n\n close() {\n this._wsQueryClient.close();\n }\n\n checkURL(url: URL) {\n // Assert is cloud url\n if (!url.searchParams.has('token')) {\n if (!(url.username || url.password)) {\n throw new WebSocketInterfaceError(\"invalid url, password or username needed.\")\n }\n }\n }\n\n private _reqIDIncrement() {\n if (this._req_id == Number.MAX_SAFE_INTEGER) {\n this._req_id = 0;\n } else {\n this._req_id += 1;\n }\n }\n\n}","import { TaosResult } from './taosResult';\nimport { WSInterface } from './wsQueryInterface'\nexport async function execute(sql: string, wsInterface: WSInterface): Promise<TaosResult> {\n let taosResult;\n let wsQueryResponse = await wsInterface.query(sql);\n try {\n taosResult = new TaosResult(wsQueryResponse);\n if (wsQueryResponse.is_update == true) {\n return taosResult;\n } else {\n while (true) {\n let wsFetchResponse = await wsInterface.fetch(wsQueryResponse)\n // console.log(\"[wsQuery.execute.wsFetchResponse]==>\\n\")\n // console.log(wsFetchResponse)\n // console.log(typeof BigInt(8))\n // console.log(typeof wsFetchResponse.timing)\n if (wsFetchResponse.completed == true) {\n break;\n } else {\n taosResult.setRows(wsFetchResponse)\n let tmp: TaosResult = await wsInterface.fetchBlock(wsFetchResponse, taosResult)\n taosResult = tmp;\n }\n }\n return taosResult;\n }\n } finally {\n wsInterface.freeResult(wsQueryResponse)\n }\n}","\nimport { execute } from './wsQuery'\nimport { TaosResult } from './taosResult'\nimport { WSInterface } from './wsQueryInterface'\nimport { WSConnResponse } from './wsQueryResponse'\n\n \nexport class TDengineWebSocket {\n _wsInterface: WSInterface\n _data: Array<any> = []\n _meta: Array<any> = []\n\n constructor(url: string) {\n this._wsInterface = new WSInterface(new URL(url))\n }\n\n connect(database?:string):Promise<WSConnResponse> {\n return this._wsInterface.connect(database)\n }\n\n state(){\n return this._wsInterface.getState();\n }\n\n /**\n * return client version.\n */\n version(): Promise<string> {\n return this._wsInterface.version()\n }\n\n query(sql:string):Promise<TaosResult>{\n return execute(sql,this._wsInterface)\n }\n close() {\n this._wsInterface.close();\n }\n\n} ","import {TDengineWebSocket} from './src/tdengineWebsocket'\n\nlet connect = (url:string)=>{\n return new TDengineWebSocket(url)\n}\n\nexport{connect}"],"names":[],"version":3,"file":"types.d.ts.map"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { connect } from "../index";
|
|
2
|
+
|
|
3
|
+
let dsn = 'ws://root:taosdata@127.0.0.1:6041/rest/ws'
|
|
4
|
+
let ws = connect(dsn)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
async function connectDatabase(database?: string) {
|
|
8
|
+
let res
|
|
9
|
+
if (database) {
|
|
10
|
+
res = await ws.connect(database)
|
|
11
|
+
} else {
|
|
12
|
+
res = await ws.connect()
|
|
13
|
+
}
|
|
14
|
+
console.log(res)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async function getVersion() {
|
|
18
|
+
let version = await ws.version()
|
|
19
|
+
console.log("version:"+version)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async function runSql(sql:string) {
|
|
23
|
+
|
|
24
|
+
let queryRes = await ws.query(sql)
|
|
25
|
+
console.log(queryRes)
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
(async () => {
|
|
30
|
+
|
|
31
|
+
try{
|
|
32
|
+
await getVersion()
|
|
33
|
+
await connectDatabase()
|
|
34
|
+
await runSql('show databases')
|
|
35
|
+
await runSql('create database if not exists power KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;')
|
|
36
|
+
await runSql('use power')
|
|
37
|
+
await runSql('show tables')
|
|
38
|
+
await runSql('CREATE STABLE if not exists meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);')
|
|
39
|
+
await runSql('describe meters')
|
|
40
|
+
await runSql('INSERT INTO d1001 USING meters TAGS ("California.SanFrancisco", 2) VALUES (NOW, 10.2, 219, 0.32)')
|
|
41
|
+
await runSql('select * from meters')
|
|
42
|
+
await runSql('use test')
|
|
43
|
+
ws.close()
|
|
44
|
+
}catch(e){
|
|
45
|
+
console.error(e)
|
|
46
|
+
ws.close()
|
|
47
|
+
}
|
|
48
|
+
})()
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { connect } from "../index";
|
|
2
|
+
|
|
3
|
+
let ws = connect("ws://root:taosdata@127.0.0.1:6041/rest/ws")
|
|
4
|
+
|
|
5
|
+
const db = 'test';
|
|
6
|
+
const table = 'ws'
|
|
7
|
+
const createDB = `create database if not exists ${db} keep 3650`;
|
|
8
|
+
const useDB = `use ${db}`;
|
|
9
|
+
const dropDB = `drop database if exists ${db}`;
|
|
10
|
+
const createTB = `create table if not exists ${table}(ts timestamp,i8 tinyint,i16 smallint,i32 int,i64 bigint,bnr binary(40),nchr nchar(40))`;
|
|
11
|
+
const addColumn = `alter table ${db}.${table} add column new_column nchar(40) `;
|
|
12
|
+
const dropColumn = `alter table ${db}.${table} drop column new_column`;
|
|
13
|
+
const insertSql = `insert into ${db}.${table} values('2022-03-30 18:30:51.567',1,2,3,4,'binary1','nchar1')` +
|
|
14
|
+
`('2022-03-30 18:30:51.568',5,6,7,8,'binary2','nchar2')` +
|
|
15
|
+
`('2022-03-30 18:30:51.569',9,0,1,2,'binary3','nchar3')`;
|
|
16
|
+
const querySql = `select * from ${db}.${table}`;
|
|
17
|
+
const errorSql = 'show database';
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
ws.connect()
|
|
21
|
+
.then(res=>console.log(res))
|
|
22
|
+
.then(() => ws.query(createDB))
|
|
23
|
+
.then(res => { console.log(res) })
|
|
24
|
+
.then(() => ws.query(useDB))
|
|
25
|
+
.then(res => { console.log(res) })
|
|
26
|
+
.then(() => ws.query(createTB))
|
|
27
|
+
.then(res => { console.log(res) })
|
|
28
|
+
.then(() => ws.query(insertSql))
|
|
29
|
+
.then(res => console.log(res))
|
|
30
|
+
.then(() => ws.query(addColumn))
|
|
31
|
+
.then(res => console.log(res))
|
|
32
|
+
.then(() => ws.query(dropColumn))
|
|
33
|
+
.then(res => console.log(res))
|
|
34
|
+
.then(() => ws.query(querySql))
|
|
35
|
+
.then(res => console.log(res))
|
|
36
|
+
.then(() => ws.query(dropDB))
|
|
37
|
+
.then(res => console.log(res))
|
|
38
|
+
.then(() => ws.query(errorSql))
|
|
39
|
+
.then(res=>console.log(res))
|
|
40
|
+
.then(() => ws.close())
|
|
41
|
+
.catch(e => { console.log(e); ws.close() })
|
|
42
|
+
|
|
43
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { connect } from "../index";
|
|
2
|
+
|
|
3
|
+
let dsn = 'ws://root:taosdata@127.0.0.1:6041/rest/ws'
|
|
4
|
+
// let dsn = 'ws://192.168.1.106:8085/rest/ws?token=795c5a6eada8a3006629483f0049350fa540e995'
|
|
5
|
+
|
|
6
|
+
let ws = connect(dsn)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
async function connectDatabase(database?: string) {
|
|
10
|
+
let res
|
|
11
|
+
if (database) {
|
|
12
|
+
res = await ws.connect(database)
|
|
13
|
+
} else {
|
|
14
|
+
res = await ws.connect()
|
|
15
|
+
}
|
|
16
|
+
console.log(res)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async function getVersion() {
|
|
20
|
+
let version = await ws.version()
|
|
21
|
+
console.log("version:"+version)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function runSql(sql:string) {
|
|
25
|
+
console.log(sql)
|
|
26
|
+
let queryRes = await ws.query(sql)
|
|
27
|
+
console.log(queryRes)
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
(async () => {
|
|
32
|
+
// await getVersion()
|
|
33
|
+
try{
|
|
34
|
+
await connectDatabase()
|
|
35
|
+
await runSql('show databases')
|
|
36
|
+
await runSql('use power')
|
|
37
|
+
await runSql('show tables')
|
|
38
|
+
// await runSql('select * from d250')
|
|
39
|
+
// await runSql('create database if not exists power KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;')
|
|
40
|
+
// await runSql('use power')
|
|
41
|
+
// await runSql('show tables')
|
|
42
|
+
await runSql('CREATE STABLE if not exists meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);')
|
|
43
|
+
await runSql('describe meters')
|
|
44
|
+
await runSql('INSERT INTO d1001 USING meters TAGS ("California.SanFrancisco", 2) VALUES (NOW, 10.2, 219, 0.32)')
|
|
45
|
+
await runSql('select * from meters')
|
|
46
|
+
// await runSql('use test')
|
|
47
|
+
// await runSql('show tables')
|
|
48
|
+
ws.close()
|
|
49
|
+
}catch(e){
|
|
50
|
+
console.error(e)
|
|
51
|
+
ws.close()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
})()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { connect } from "../index";
|
|
2
|
+
|
|
3
|
+
let ws = connect("ws://root:taosdata@127.0.0.1:6041/rest/ws")
|
|
4
|
+
|
|
5
|
+
ws.version()
|
|
6
|
+
.then((e) =>{console.log(e)} )
|
|
7
|
+
.then(()=>ws.version())
|
|
8
|
+
.then((e) =>{console.log(e)} )
|
|
9
|
+
.then(()=>ws.connect())
|
|
10
|
+
.then((e) =>{console.log(e)} )
|
|
11
|
+
.then(()=>ws.connect('test'))
|
|
12
|
+
.then((e) =>{console.log(e);ws.close()} )
|
|
13
|
+
.catch(e=>{console.log(e);ws.close();})
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
package/example/test.mjs
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { TDWebSocket } from "../dist/module/index.mjs";
|
|
2
|
+
|
|
3
|
+
// let ws = TDWebSocket("ws://root:taosdata@182.92.127.131:6041/rest/ws")
|
|
4
|
+
// let ws = TDWebSocket("ws://root:taosdata@127.0.0.1:6041/rest/ws")
|
|
5
|
+
let ws = TDWebSocket("ws://192.168.1.106:8085/rest/ws?token=795c5a6eada8a3006629483f0049350fa540e995")
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
const db = 'test';
|
|
10
|
+
const table = 'ws'
|
|
11
|
+
const createDB = `create database if not exists ${db} keep 3650`;
|
|
12
|
+
const useDB = `use ${db}`;
|
|
13
|
+
const dropDB = `drop database if exists ${db}`;
|
|
14
|
+
const createTB = `create table if not exists ${table}(ts timestamp,i8 tinyint,i16 smallint,i32 int,i64 bigint,bnr binary(40),nchr nchar(40))`;
|
|
15
|
+
const addColumn = `alter table ${db}.${table} add column new_column nchar(40) `;
|
|
16
|
+
const dropColumn = `alter table ${db}.${table} drop column new_column`;
|
|
17
|
+
const insertSql = `insert into ${db}.${table} values('2022-03-30 18:30:51.567',1,2,3,4,'binary1','nchar1')` +
|
|
18
|
+
`('2022-03-30 18:30:51.568',5,6,7,8,'binary2','nchar2')` +
|
|
19
|
+
`('2022-03-30 18:30:51.569',9,0,1,2,'binary3','nchar3')`;
|
|
20
|
+
const querySql = `select * from ${db}.${table}`;
|
|
21
|
+
const errorSql = 'show database';
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// ws.version()
|
|
25
|
+
// .then((e) =>{console.log(e);ws.close()} );
|
|
26
|
+
|
|
27
|
+
ws.connect().then(() => ws.query("show databases")).then(res => console.log(res)).then(()=>ws.close());
|
|
28
|
+
|
|
29
|
+
// ws.connect()
|
|
30
|
+
// .then(res=>console.log(res))
|
|
31
|
+
// .then(() => ws.query(createDB))
|
|
32
|
+
// .then(res => { console.log(res) })
|
|
33
|
+
// .then(() => ws.query(useDB))
|
|
34
|
+
// .then(res => { console.log(res) })
|
|
35
|
+
// .then(() => ws.query(createTB))
|
|
36
|
+
// .then(res => { console.log(res) })
|
|
37
|
+
// .then(() => ws.query(insertSql))
|
|
38
|
+
// .then(res => console.log(res))
|
|
39
|
+
// .then(() => ws.query(addColumn))
|
|
40
|
+
// .then(res => console.log(res))
|
|
41
|
+
// .then(() => ws.query(dropColumn))
|
|
42
|
+
// .then(res => console.log(res))
|
|
43
|
+
// .then(() => ws.query(querySql))
|
|
44
|
+
// .then(res => console.log(res))
|
|
45
|
+
// .then(() => ws.query(dropDB))
|
|
46
|
+
// .then(res => console.log(res))
|
|
47
|
+
// .then(() => ws.query(errorSql))
|
|
48
|
+
// .then(res=>console.log(res))
|
|
49
|
+
// .then(() => ws.close())
|
|
50
|
+
// .catch(e => { console.log(e); ws.close() })
|
|
51
|
+
|
package/index.ts
ADDED
package/jest.config.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
|
2
|
+
module.exports = {
|
|
3
|
+
preset: "ts-jest",
|
|
4
|
+
transform: {'^.+\\.ts?$': 'ts-jest'},
|
|
5
|
+
testEnvironment: 'node',
|
|
6
|
+
testRegex: '/test/.*\\.(test|spec)?\\.(ts|tsx)$',
|
|
7
|
+
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
|
|
8
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tdengine/websocket",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "TDengine WebSocket Connector for nodejs and browser.",
|
|
5
|
+
"source": "index.ts",
|
|
6
|
+
"main": "dist/main/index.js",
|
|
7
|
+
"module": "dist/module/index.mjs",
|
|
8
|
+
"types": "dist/types.d.ts",
|
|
9
|
+
"directories": {
|
|
10
|
+
"example": "example",
|
|
11
|
+
"test": "test"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"test": "jest --coverage",
|
|
15
|
+
"example": "tsc && node tsc/example/basicUsage.js",
|
|
16
|
+
"build": "parcel build --no-source-maps",
|
|
17
|
+
"watch": "parcel watch",
|
|
18
|
+
"prepare": "parcel build"
|
|
19
|
+
},
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/taosdata/taos-connector-node.git"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"WebSocket",
|
|
26
|
+
"taosdata",
|
|
27
|
+
"taos",
|
|
28
|
+
"IOT",
|
|
29
|
+
"TypeScript",
|
|
30
|
+
"TDengine",
|
|
31
|
+
"database"
|
|
32
|
+
],
|
|
33
|
+
"author": "TaosData Inc.",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"bugs": {
|
|
36
|
+
"url": "https://github.com/taosdata/taos-connector-node/issues"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://github.com/taosdata/taos-connector-node/blob/3.0/WebSocket/README.md",
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"json-bigint": "^1.0.0",
|
|
41
|
+
"websocket": "^1.0.34"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@parcel/packager-ts": "^2.7.0",
|
|
45
|
+
"@parcel/transformer-typescript-types": "^2.7.0",
|
|
46
|
+
"@types/jest": "^29.2.1",
|
|
47
|
+
"@types/json-bigint": "^1.0.1",
|
|
48
|
+
"@types/node": "^18.0.0",
|
|
49
|
+
"@types/websocket": "^1.0.5",
|
|
50
|
+
"jest": "^29.2.2",
|
|
51
|
+
"parcel": "^2.7.0",
|
|
52
|
+
"ts-jest": "^29.0.3",
|
|
53
|
+
"typescript": "^4.6.3"
|
|
54
|
+
}
|
|
55
|
+
}
|