@next-core/easyops-runtime 0.10.5 → 0.10.7

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.
Files changed (66) hide show
  1. package/dist/cjs/analytics/http.js +3 -4
  2. package/dist/cjs/analytics/http.js.map +1 -1
  3. package/dist/cjs/checkInstalledApps.js +1 -2
  4. package/dist/cjs/checkInstalledApps.js.map +1 -1
  5. package/dist/cjs/checkPermissions.js.map +1 -1
  6. package/dist/cjs/flowApi/CollectContracts.js.map +1 -1
  7. package/dist/cjs/flowApi/FlowApi.js +2 -2
  8. package/dist/cjs/flowApi/FlowApi.js.map +1 -1
  9. package/dist/cjs/flowApi/FlowApiProvider.js +5 -5
  10. package/dist/cjs/flowApi/FlowApiProvider.js.map +1 -1
  11. package/dist/cjs/menu/fetchMenuById.js.map +1 -1
  12. package/dist/cjs/menu/fetchMenuTitle.js +1 -1
  13. package/dist/cjs/menu/fetchMenuTitle.js.map +1 -1
  14. package/dist/cjs/menu/getMenusOfStandaloneApp.js +2 -2
  15. package/dist/cjs/menu/getMenusOfStandaloneApp.js.map +1 -1
  16. package/dist/cjs/menu/mergeMenu.js +1 -2
  17. package/dist/cjs/menu/mergeMenu.js.map +1 -1
  18. package/dist/cjs/menu/reorderMenuItems.js +1 -4
  19. package/dist/cjs/menu/reorderMenuItems.js.map +1 -1
  20. package/dist/cjs/websocket/MessageDispatcher.js.map +1 -1
  21. package/dist/cjs/websocket/MessageService.js.map +1 -1
  22. package/dist/esm/analytics/analytics.js +23 -18
  23. package/dist/esm/analytics/analytics.js.map +1 -1
  24. package/dist/esm/analytics/http.js +19 -20
  25. package/dist/esm/analytics/http.js.map +1 -1
  26. package/dist/esm/analytics/pageView.js +6 -6
  27. package/dist/esm/analytics/pageView.js.map +1 -1
  28. package/dist/esm/analytics/transport.js +12 -12
  29. package/dist/esm/analytics/transport.js.map +1 -1
  30. package/dist/esm/auth-v2.js +1 -1
  31. package/dist/esm/auth-v2.js.map +1 -1
  32. package/dist/esm/auth.js +5 -4
  33. package/dist/esm/auth.js.map +1 -1
  34. package/dist/esm/checkInstalledApps.js +19 -30
  35. package/dist/esm/checkInstalledApps.js.map +1 -1
  36. package/dist/esm/checkPermissions.js +35 -48
  37. package/dist/esm/checkPermissions.js.map +1 -1
  38. package/dist/esm/flowApi/CollectContracts.js +5 -5
  39. package/dist/esm/flowApi/CollectContracts.js.map +1 -1
  40. package/dist/esm/flowApi/FlowApi.js +68 -87
  41. package/dist/esm/flowApi/FlowApi.js.map +1 -1
  42. package/dist/esm/flowApi/FlowApiProvider.js +87 -87
  43. package/dist/esm/flowApi/FlowApiProvider.js.map +1 -1
  44. package/dist/esm/index.js +3 -3
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/menu/computeMenuData.js +17 -24
  47. package/dist/esm/menu/computeMenuData.js.map +1 -1
  48. package/dist/esm/menu/constants.js +3 -3
  49. package/dist/esm/menu/constants.js.map +1 -1
  50. package/dist/esm/menu/fetchMenuById.js +61 -70
  51. package/dist/esm/menu/fetchMenuById.js.map +1 -1
  52. package/dist/esm/menu/fetchMenuTitle.js +27 -34
  53. package/dist/esm/menu/fetchMenuTitle.js.map +1 -1
  54. package/dist/esm/menu/getMenusOfStandaloneApp.js +11 -9
  55. package/dist/esm/menu/getMenusOfStandaloneApp.js.map +1 -1
  56. package/dist/esm/menu/loadDynamicMenuItems.js +17 -23
  57. package/dist/esm/menu/loadDynamicMenuItems.js.map +1 -1
  58. package/dist/esm/menu/mergeMenu.js +44 -54
  59. package/dist/esm/menu/mergeMenu.js.map +1 -1
  60. package/dist/esm/menu/reorderMenuItems.js +3 -6
  61. package/dist/esm/menu/reorderMenuItems.js.map +1 -1
  62. package/dist/esm/websocket/MessageDispatcher.js +19 -19
  63. package/dist/esm/websocket/MessageDispatcher.js.map +1 -1
  64. package/dist/esm/websocket/MessageService.js +9 -9
  65. package/dist/esm/websocket/MessageService.js.map +1 -1
  66. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"MessageDispatcher.js","names":["getBasePath","escapeRegExp","MessageService","_ms","WeakMap","_memoizedChannels","_channelPayloads","_MessageDispatcher_brand","WeakSet","MessageDispatcher","constructor","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","sub","Map","unsub","subscribe","channel","payload","stringifiedPayload","JSON","stringify","_assertClassBrand","_subOrUnsub","call","unsubscribe","_classPrivateFieldGet","get","msg","concat","console","error","Promise","reject","Error","parse","result","delete","then","onMessage","listener","warned","_classPrivateGetter","_get_ms","response","event","matchMessageChannel","message","onClose","reset","_classPrivateFieldGet2","clear","_this","protocol","location","url","window","host","_classPrivateFieldSet","type","hit","request","promise","resolve","identity","getIdentity","isSuccess","isFailed","send","set","system","topic","responsePayload","includes","RegExp","replace","_m","p1","p2","test"],"sources":["../../../src/websocket/MessageDispatcher.ts"],"sourcesContent":["import { getBasePath } from \"@next-core/runtime\";\nimport { escapeRegExp } from \"lodash\";\nimport {\n MessageService,\n type MessageListener,\n CloseListener,\n} from \"./MessageService.js\";\n\ninterface MessageResponse {\n event:\n | \"TOPIC.SUB_SUCCESS\"\n | \"TOPIC.SUB_FAILED\"\n | \"TOPIC.UNSUB_SUCCESS\"\n | \"TOPIC.UNSUB_FAILED\"\n | \"MESSAGE.PUSH\";\n payload: MessagePayload;\n}\n\ninterface MessagePayload {\n source?: string;\n system: string;\n topic: string;\n message?: unknown;\n}\n\nexport class MessageDispatcher {\n #_ms: MessageService | undefined;\n #memoizedChannels = {\n sub: new Map<string, Promise<unknown>>(),\n unsub: new Map<string, Promise<unknown>>(),\n };\n #channelPayloads = new Map<string, string>();\n\n get #ms(): MessageService {\n if (!this.#_ms) {\n const protocol = location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const url = `${protocol}//${\n window.location.host\n }${getBasePath()}api/websocket_service/v1/ws`;\n this.#_ms = new MessageService(url);\n }\n return this.#_ms;\n }\n\n subscribe(channel: string, payload: MessagePayload): Promise<unknown> {\n const stringifiedPayload = JSON.stringify(payload);\n return this.#subOrUnsub(\"sub\", channel, payload, stringifiedPayload);\n }\n\n unsubscribe(channel: string): Promise<unknown> {\n const stringifiedPayload = this.#channelPayloads.get(channel);\n if (!stringifiedPayload) {\n const msg = `The message channel to unsubscribe \"${channel}\" is not found`;\n // eslint-disable-next-line no-console\n console.error(msg);\n return Promise.reject(new Error(msg));\n }\n\n const payload = JSON.parse(stringifiedPayload);\n const result = this.#subOrUnsub(\n \"unsub\",\n channel,\n payload,\n stringifiedPayload\n );\n\n this.#memoizedChannels.sub.delete(stringifiedPayload);\n\n result.then(() => {\n this.#channelPayloads.delete(channel);\n });\n\n return result;\n }\n\n onMessage(channel: string, listener: MessageListener): void {\n let stringifiedPayload = this.#channelPayloads.get(channel);\n let warned = false;\n\n this.#ms.onMessage<MessageResponse>((response) => {\n if (!stringifiedPayload) {\n stringifiedPayload = this.#channelPayloads.get(channel);\n }\n if (!stringifiedPayload) {\n if (!warned) {\n // eslint-disable-next-line no-console\n console.error(`Message channel: \"${channel}\" not found`);\n warned = true;\n }\n return;\n }\n if (\n response.event === \"MESSAGE.PUSH\" &&\n matchMessageChannel(stringifiedPayload, response.payload)\n ) {\n listener(response.payload.message);\n }\n });\n }\n\n onClose(listener: CloseListener): void {\n this.#ms.onClose(listener);\n }\n\n reset(): void {\n this.#memoizedChannels.sub.clear();\n this.#memoizedChannels.unsub.clear();\n this.#channelPayloads.clear();\n this.#_ms?.reset();\n }\n\n #subOrUnsub(\n type: \"sub\" | \"unsub\",\n channel: string,\n payload: MessagePayload,\n stringifiedPayload: string\n ): Promise<unknown> {\n const hit = this.#memoizedChannels[type].get(stringifiedPayload);\n if (hit) {\n return hit;\n }\n const request = {\n event: type === \"sub\" ? \"TOPIC.SUB\" : \"TOPIC.UNSUB\",\n payload,\n };\n const promise = new Promise((resolve, reject) => {\n const identity = getIdentity(payload);\n this.#ms.onMessage<MessageResponse>((response) => {\n const isSuccess =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_SUCCESS\" : \"TOPIC.UNSUB_SUCCESS\");\n const isFailed =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_FAILED\" : \"TOPIC.UNSUB_FAILED\");\n if (\n (isSuccess || isFailed) &&\n // Put this after event type checks, to prevent unnecessary\n // JSON stringify.\n identity === getIdentity(response.payload)\n ) {\n (isSuccess ? resolve : reject)(response);\n }\n });\n this.#ms.send(request);\n });\n\n if (type === \"sub\") {\n this.#channelPayloads.set(channel, stringifiedPayload);\n }\n this.#memoizedChannels[type].set(stringifiedPayload, promise);\n return promise;\n }\n}\n\nfunction getIdentity(payload: MessagePayload) {\n const { system, topic } = payload;\n return JSON.stringify({ system, topic });\n}\n\nfunction matchMessageChannel(\n stringifiedPayload: string,\n responsePayload: MessagePayload\n): boolean {\n const payload = JSON.parse(stringifiedPayload) as MessagePayload;\n return (\n payload.system === responsePayload.system &&\n // Exact match\n (payload.topic === responsePayload.topic ||\n // Wildcards match\n // For `ab.cd.*`:\n // - Matches `ab.cd.r` or `ab.cd.x.yz`\n // - DOES NOT match `ab.cd.x/yz` or `ab.x.cd` or `x.ab.cd.yz`\n (typeof payload.topic === \"string\" &&\n payload.topic.includes(\"*\") &&\n new RegExp(\n `^${payload.topic.replace(\n /([^*]*)\\*([^*]*)/g,\n (_m, p1, p2) => `${escapeRegExp(p1)}[^/]*${escapeRegExp(p2)}`\n )}$`\n ).test(responsePayload.topic)))\n );\n}\n"],"mappings":";;;;;;AAAA,SAASA,WAAW,QAAQ,oBAAoB;AAChD,SAASC,YAAY,QAAQ,QAAQ;AACrC,SACEC,cAAc,QAGT,qBAAqB;AAAC,IAAAC,GAAA,oBAAAC,OAAA;AAAA,IAAAC,iBAAA,oBAAAD,OAAA;AAAA,IAAAE,gBAAA,oBAAAF,OAAA;AAAA,IAAAG,wBAAA,oBAAAC,OAAA;AAmB7B,OAAO,MAAMC,iBAAiB,CAAC;EAAAC,YAAA;IAAAC,2BAAA,OAAAJ,wBAAA;IAAAK,0BAAA,OAAAT,GAAA;IAAAS,0BAAA,OAAAP,iBAAA,EAET;MAClBQ,GAAG,EAAE,IAAIC,GAAG,CAA2B,CAAC;MACxCC,KAAK,EAAE,IAAID,GAAG,CAA2B;IAC3C,CAAC;IAAAF,0BAAA,OAAAN,gBAAA,EACkB,IAAIQ,GAAG,CAAiB,CAAC;EAAA;EAa5CE,SAASA,CAACC,OAAe,EAAEC,OAAuB,EAAoB;IACpE,IAAMC,kBAAkB,GAAGC,IAAI,CAACC,SAAS,CAACH,OAAO,CAAC;IAClD,OAAAI,iBAAA,CAAAf,wBAAA,EAAO,IAAI,EAAAgB,WAAA,EAAAC,IAAA,CAAJ,IAAI,EAAa,KAAK,EAAEP,OAAO,EAAEC,OAAO,EAAEC,kBAAkB;EACrE;EAEAM,WAAWA,CAACR,OAAe,EAAoB;IAC7C,IAAME,kBAAkB,GAAGO,qBAAA,CAAApB,gBAAA,MAAI,EAAkBqB,GAAG,CAACV,OAAO,CAAC;IAC7D,IAAI,CAACE,kBAAkB,EAAE;MACvB,IAAMS,GAAG,2CAAAC,MAAA,CAA0CZ,OAAO,oBAAgB;MAC1E;MACAa,OAAO,CAACC,KAAK,CAACH,GAAG,CAAC;MAClB,OAAOI,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAACN,GAAG,CAAC,CAAC;IACvC;IAEA,IAAMV,OAAO,GAAGE,IAAI,CAACe,KAAK,CAAChB,kBAAkB,CAAC;IAC9C,IAAMiB,MAAM,GAAAd,iBAAA,CAAAf,wBAAA,EAAG,IAAI,EAAAgB,WAAA,EAAAC,IAAA,CAAJ,IAAI,EACjB,OAAO,EACPP,OAAO,EACPC,OAAO,EACPC,kBAAkB,CACnB;IAEDO,qBAAA,CAAArB,iBAAA,MAAI,EAAmBQ,GAAG,CAACwB,MAAM,CAAClB,kBAAkB,CAAC;IAErDiB,MAAM,CAACE,IAAI,CAAC,MAAM;MAChBZ,qBAAA,CAAApB,gBAAA,MAAI,EAAkB+B,MAAM,CAACpB,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOmB,MAAM;EACf;EAEAG,SAASA,CAACtB,OAAe,EAAEuB,QAAyB,EAAQ;IAC1D,IAAIrB,kBAAkB,GAAGO,qBAAA,CAAApB,gBAAA,MAAI,EAAkBqB,GAAG,CAACV,OAAO,CAAC;IAC3D,IAAIwB,MAAM,GAAG,KAAK;IAElBC,mBAAA,CAAAnC,wBAAA,MAAI,EAAAoC,OAAA,EAAKJ,SAAS,CAAmBK,QAAQ,IAAK;MAChD,IAAI,CAACzB,kBAAkB,EAAE;QACvBA,kBAAkB,GAAGO,qBAAA,CAAApB,gBAAA,MAAI,EAAkBqB,GAAG,CAACV,OAAO,CAAC;MACzD;MACA,IAAI,CAACE,kBAAkB,EAAE;QACvB,IAAI,CAACsB,MAAM,EAAE;UACX;UACAX,OAAO,CAACC,KAAK,uBAAAF,MAAA,CAAsBZ,OAAO,iBAAa,CAAC;UACxDwB,MAAM,GAAG,IAAI;QACf;QACA;MACF;MACA,IACEG,QAAQ,CAACC,KAAK,KAAK,cAAc,IACjCC,mBAAmB,CAAC3B,kBAAkB,EAAEyB,QAAQ,CAAC1B,OAAO,CAAC,EACzD;QACAsB,QAAQ,CAACI,QAAQ,CAAC1B,OAAO,CAAC6B,OAAO,CAAC;MACpC;IACF,CAAC,CAAC;EACJ;EAEAC,OAAOA,CAACR,QAAuB,EAAQ;IACrCE,mBAAA,CAAAnC,wBAAA,MAAI,EAAAoC,OAAA,EAAKK,OAAO,CAACR,QAAQ,CAAC;EAC5B;EAEAS,KAAKA,CAAA,EAAS;IAAA,IAAAC,sBAAA;IACZxB,qBAAA,CAAArB,iBAAA,MAAI,EAAmBQ,GAAG,CAACsC,KAAK,CAAC,CAAC;IAClCzB,qBAAA,CAAArB,iBAAA,MAAI,EAAmBU,KAAK,CAACoC,KAAK,CAAC,CAAC;IACpCzB,qBAAA,CAAApB,gBAAA,MAAI,EAAkB6C,KAAK,CAAC,CAAC;IAC7B,CAAAD,sBAAA,GAAAxB,qBAAA,CAAAvB,GAAA,MAAI,eAAA+C,sBAAA,eAAJA,sBAAA,CAAWD,KAAK,CAAC,CAAC;EACpB;AA2CF;AAAC,SAAAN,QAAAS,KAAA,EAvH2B;EACxB,IAAI,CAAA1B,qBAAA,CAAAvB,GAAA,EAAAiD,KAAA,CAAU,EAAE;IACd,IAAMC,QAAQ,GAAGC,QAAQ,CAACD,QAAQ,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK;IAChE,IAAME,GAAG,MAAA1B,MAAA,CAAMwB,QAAQ,QAAAxB,MAAA,CACrB2B,MAAM,CAACF,QAAQ,CAACG,IAAI,EAAA5B,MAAA,CACnB7B,WAAW,CAAC,CAAC,gCAA6B;IAC7C0D,qBAAA,CAAAvD,GAAA,EAAAiD,KAAA,EAAY,IAAIlD,cAAc,CAACqD,GAAG,CAAC;EACrC;EACA,OAAA7B,qBAAA,CAAAvB,GAAA,EAAAiD,KAAA;AACF;AAAC,SAAA7B,YAsECoC,IAAqB,EACrB1C,OAAe,EACfC,OAAuB,EACvBC,kBAA0B,EACR;EAClB,IAAMyC,GAAG,GAAGlC,qBAAA,CAAArB,iBAAA,MAAI,EAAmBsD,IAAI,CAAC,CAAChC,GAAG,CAACR,kBAAkB,CAAC;EAChE,IAAIyC,GAAG,EAAE;IACP,OAAOA,GAAG;EACZ;EACA,IAAMC,OAAO,GAAG;IACdhB,KAAK,EAAEc,IAAI,KAAK,KAAK,GAAG,WAAW,GAAG,aAAa;IACnDzC;EACF,CAAC;EACD,IAAM4C,OAAO,GAAG,IAAI9B,OAAO,CAAC,CAAC+B,OAAO,EAAE9B,MAAM,KAAK;IAC/C,IAAM+B,QAAQ,GAAGC,WAAW,CAAC/C,OAAO,CAAC;IACrCwB,mBAAA,CAAAnC,wBAAA,MAAI,EAAAoC,OAAA,EAAKJ,SAAS,CAAmBK,QAAQ,IAAK;MAChD,IAAMsB,SAAS,GACbtB,QAAQ,CAACC,KAAK,MACbc,IAAI,KAAK,KAAK,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;MAChE,IAAMQ,QAAQ,GACZvB,QAAQ,CAACC,KAAK,MACbc,IAAI,KAAK,KAAK,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;MAC9D,IACE,CAACO,SAAS,IAAIC,QAAQ;MACtB;MACA;MACAH,QAAQ,KAAKC,WAAW,CAACrB,QAAQ,CAAC1B,OAAO,CAAC,EAC1C;QACA,CAACgD,SAAS,GAAGH,OAAO,GAAG9B,MAAM,EAAEW,QAAQ,CAAC;MAC1C;IACF,CAAC,CAAC;IACFF,mBAAA,CAAAnC,wBAAA,MAAI,EAAAoC,OAAA,EAAKyB,IAAI,CAACP,OAAO,CAAC;EACxB,CAAC,CAAC;EAEF,IAAIF,IAAI,KAAK,KAAK,EAAE;IAClBjC,qBAAA,CAAApB,gBAAA,MAAI,EAAkB+D,GAAG,CAACpD,OAAO,EAAEE,kBAAkB,CAAC;EACxD;EACAO,qBAAA,CAAArB,iBAAA,MAAI,EAAmBsD,IAAI,CAAC,CAACU,GAAG,CAAClD,kBAAkB,EAAE2C,OAAO,CAAC;EAC7D,OAAOA,OAAO;AAChB;AAGF,SAASG,WAAWA,CAAC/C,OAAuB,EAAE;EAC5C,IAAM;IAAEoD,MAAM;IAAEC;EAAM,CAAC,GAAGrD,OAAO;EACjC,OAAOE,IAAI,CAACC,SAAS,CAAC;IAAEiD,MAAM;IAAEC;EAAM,CAAC,CAAC;AAC1C;AAEA,SAASzB,mBAAmBA,CAC1B3B,kBAA0B,EAC1BqD,eAA+B,EACtB;EACT,IAAMtD,OAAO,GAAGE,IAAI,CAACe,KAAK,CAAChB,kBAAkB,CAAmB;EAChE,OACED,OAAO,CAACoD,MAAM,KAAKE,eAAe,CAACF,MAAM;EACzC;EACCpD,OAAO,CAACqD,KAAK,KAAKC,eAAe,CAACD,KAAK;EACtC;EACA;EACA;EACA;EACC,OAAOrD,OAAO,CAACqD,KAAK,KAAK,QAAQ,IAChCrD,OAAO,CAACqD,KAAK,CAACE,QAAQ,CAAC,GAAG,CAAC,IAC3B,IAAIC,MAAM,KAAA7C,MAAA,CACJX,OAAO,CAACqD,KAAK,CAACI,OAAO,CACvB,mBAAmB,EACnB,CAACC,EAAE,EAAEC,EAAE,EAAEC,EAAE,QAAAjD,MAAA,CAAQ5B,YAAY,CAAC4E,EAAE,CAAC,WAAAhD,MAAA,CAAQ5B,YAAY,CAAC6E,EAAE,CAAC,CAC7D,CAAC,MACH,CAAC,CAACC,IAAI,CAACP,eAAe,CAACD,KAAK,CAAE,CAAC;AAEvC","ignoreList":[]}
1
+ {"version":3,"file":"MessageDispatcher.js","names":["getBasePath","escapeRegExp","MessageService","_ms","WeakMap","_memoizedChannels","_channelPayloads","_MessageDispatcher_brand","WeakSet","MessageDispatcher","constructor","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","sub","Map","unsub","subscribe","channel","payload","stringifiedPayload","JSON","stringify","_assertClassBrand","_subOrUnsub","call","unsubscribe","_classPrivateFieldGet","get","msg","console","error","Promise","reject","Error","parse","result","delete","then","onMessage","listener","warned","_classPrivateGetter","_get_ms","response","event","matchMessageChannel","message","onClose","reset","_classPrivateFieldGet2","clear","_this","protocol","location","url","window","host","_classPrivateFieldSet","type","hit","request","promise","resolve","identity","getIdentity","isSuccess","isFailed","send","set","system","topic","responsePayload","includes","RegExp","replace","_m","p1","p2","test"],"sources":["../../../src/websocket/MessageDispatcher.ts"],"sourcesContent":["import { getBasePath } from \"@next-core/runtime\";\nimport { escapeRegExp } from \"lodash\";\nimport {\n MessageService,\n type MessageListener,\n CloseListener,\n} from \"./MessageService.js\";\n\ninterface MessageResponse {\n event:\n | \"TOPIC.SUB_SUCCESS\"\n | \"TOPIC.SUB_FAILED\"\n | \"TOPIC.UNSUB_SUCCESS\"\n | \"TOPIC.UNSUB_FAILED\"\n | \"MESSAGE.PUSH\";\n payload: MessagePayload;\n}\n\ninterface MessagePayload {\n source?: string;\n system: string;\n topic: string;\n message?: unknown;\n}\n\nexport class MessageDispatcher {\n #_ms: MessageService | undefined;\n #memoizedChannels = {\n sub: new Map<string, Promise<unknown>>(),\n unsub: new Map<string, Promise<unknown>>(),\n };\n #channelPayloads = new Map<string, string>();\n\n get #ms(): MessageService {\n if (!this.#_ms) {\n const protocol = location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const url = `${protocol}//${\n window.location.host\n }${getBasePath()}api/websocket_service/v1/ws`;\n this.#_ms = new MessageService(url);\n }\n return this.#_ms;\n }\n\n subscribe(channel: string, payload: MessagePayload): Promise<unknown> {\n const stringifiedPayload = JSON.stringify(payload);\n return this.#subOrUnsub(\"sub\", channel, payload, stringifiedPayload);\n }\n\n unsubscribe(channel: string): Promise<unknown> {\n const stringifiedPayload = this.#channelPayloads.get(channel);\n if (!stringifiedPayload) {\n const msg = `The message channel to unsubscribe \"${channel}\" is not found`;\n // eslint-disable-next-line no-console\n console.error(msg);\n return Promise.reject(new Error(msg));\n }\n\n const payload = JSON.parse(stringifiedPayload);\n const result = this.#subOrUnsub(\n \"unsub\",\n channel,\n payload,\n stringifiedPayload\n );\n\n this.#memoizedChannels.sub.delete(stringifiedPayload);\n\n result.then(() => {\n this.#channelPayloads.delete(channel);\n });\n\n return result;\n }\n\n onMessage(channel: string, listener: MessageListener): void {\n let stringifiedPayload = this.#channelPayloads.get(channel);\n let warned = false;\n\n this.#ms.onMessage<MessageResponse>((response) => {\n if (!stringifiedPayload) {\n stringifiedPayload = this.#channelPayloads.get(channel);\n }\n if (!stringifiedPayload) {\n if (!warned) {\n // eslint-disable-next-line no-console\n console.error(`Message channel: \"${channel}\" not found`);\n warned = true;\n }\n return;\n }\n if (\n response.event === \"MESSAGE.PUSH\" &&\n matchMessageChannel(stringifiedPayload, response.payload)\n ) {\n listener(response.payload.message);\n }\n });\n }\n\n onClose(listener: CloseListener): void {\n this.#ms.onClose(listener);\n }\n\n reset(): void {\n this.#memoizedChannels.sub.clear();\n this.#memoizedChannels.unsub.clear();\n this.#channelPayloads.clear();\n this.#_ms?.reset();\n }\n\n #subOrUnsub(\n type: \"sub\" | \"unsub\",\n channel: string,\n payload: MessagePayload,\n stringifiedPayload: string\n ): Promise<unknown> {\n const hit = this.#memoizedChannels[type].get(stringifiedPayload);\n if (hit) {\n return hit;\n }\n const request = {\n event: type === \"sub\" ? \"TOPIC.SUB\" : \"TOPIC.UNSUB\",\n payload,\n };\n const promise = new Promise((resolve, reject) => {\n const identity = getIdentity(payload);\n this.#ms.onMessage<MessageResponse>((response) => {\n const isSuccess =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_SUCCESS\" : \"TOPIC.UNSUB_SUCCESS\");\n const isFailed =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_FAILED\" : \"TOPIC.UNSUB_FAILED\");\n if (\n (isSuccess || isFailed) &&\n // Put this after event type checks, to prevent unnecessary\n // JSON stringify.\n identity === getIdentity(response.payload)\n ) {\n (isSuccess ? resolve : reject)(response);\n }\n });\n this.#ms.send(request);\n });\n\n if (type === \"sub\") {\n this.#channelPayloads.set(channel, stringifiedPayload);\n }\n this.#memoizedChannels[type].set(stringifiedPayload, promise);\n return promise;\n }\n}\n\nfunction getIdentity(payload: MessagePayload) {\n const { system, topic } = payload;\n return JSON.stringify({ system, topic });\n}\n\nfunction matchMessageChannel(\n stringifiedPayload: string,\n responsePayload: MessagePayload\n): boolean {\n const payload = JSON.parse(stringifiedPayload) as MessagePayload;\n return (\n payload.system === responsePayload.system &&\n // Exact match\n (payload.topic === responsePayload.topic ||\n // Wildcards match\n // For `ab.cd.*`:\n // - Matches `ab.cd.r` or `ab.cd.x.yz`\n // - DOES NOT match `ab.cd.x/yz` or `ab.x.cd` or `x.ab.cd.yz`\n (typeof payload.topic === \"string\" &&\n payload.topic.includes(\"*\") &&\n new RegExp(\n `^${payload.topic.replace(\n /([^*]*)\\*([^*]*)/g,\n (_m, p1, p2) => `${escapeRegExp(p1)}[^/]*${escapeRegExp(p2)}`\n )}$`\n ).test(responsePayload.topic)))\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,8 +3,8 @@ import _classPrivateFieldInitSpec from "@babel/runtime/helpers/classPrivateField
3
3
  import _assertClassBrand from "@babel/runtime/helpers/assertClassBrand";
4
4
  import _classPrivateFieldGet from "@babel/runtime/helpers/classPrivateFieldGet2";
5
5
  import _classPrivateFieldSet from "@babel/runtime/helpers/classPrivateFieldSet2";
6
- var RETRY_TIMEOUT_UNIT = 1000;
7
- var RETRY_LIMIT = 6;
6
+ const RETRY_TIMEOUT_UNIT = 1000;
7
+ const RETRY_LIMIT = 6;
8
8
  var _url = /*#__PURE__*/new WeakMap();
9
9
  var _ws = /*#__PURE__*/new WeakMap();
10
10
  var _queuedMessages = /*#__PURE__*/new WeakMap();
@@ -30,7 +30,7 @@ export class MessageService {
30
30
  if (!_classPrivateFieldGet(_ws, this)) {
31
31
  _classPrivateFieldSet(_ws, this, _assertClassBrand(_MessageService_brand, this, _connect).call(this));
32
32
  }
33
- var stringifiedData = JSON.stringify(data);
33
+ const stringifiedData = JSON.stringify(data);
34
34
  if (_classPrivateFieldGet(_ws, this).readyState === WebSocket.OPEN) {
35
35
  _classPrivateFieldGet(_ws, this).send(stringifiedData);
36
36
  } else {
@@ -59,12 +59,12 @@ export class MessageService {
59
59
  function _connect() {
60
60
  // eslint-disable-next-line no-console
61
61
  console.log("WebSocket connecting ...");
62
- var ws = new WebSocket(_classPrivateFieldGet(_url, this));
62
+ const ws = new WebSocket(_classPrivateFieldGet(_url, this));
63
63
  ws.addEventListener("open", e => {
64
64
  // eslint-disable-next-line no-console
65
65
  console.log("WebSocket open:", e);
66
66
  _classPrivateFieldSet(_retryCount, this, 0);
67
- for (var msg of _classPrivateFieldGet(_queuedMessages, this)) {
67
+ for (const msg of _classPrivateFieldGet(_queuedMessages, this)) {
68
68
  ws.send(msg);
69
69
  }
70
70
  _classPrivateFieldGet(_queuedMessages, this).length = 0;
@@ -75,7 +75,7 @@ function _connect() {
75
75
  }
76
76
  // eslint-disable-next-line no-console
77
77
  console.log("WebSocket close:", e);
78
- for (var listener of _classPrivateFieldGet(_closeListeners, this)) {
78
+ for (const listener of _classPrivateFieldGet(_closeListeners, this)) {
79
79
  listener();
80
80
  }
81
81
  // Error code 1000 means that the connection was closed normally.
@@ -90,8 +90,8 @@ function _connect() {
90
90
  console.error("WebSocket error:", e);
91
91
  });
92
92
  ws.addEventListener("message", e => {
93
- var response = JSON.parse(e.data);
94
- for (var listener of _classPrivateFieldGet(_messageListeners, this)) {
93
+ const response = JSON.parse(e.data);
94
+ for (const listener of _classPrivateFieldGet(_messageListeners, this)) {
95
95
  listener(response);
96
96
  }
97
97
  });
@@ -105,7 +105,7 @@ function _reconnect() {
105
105
  return;
106
106
  }
107
107
  // Double the timeout for each retry
108
- var delay = Math.pow(2, _classPrivateFieldGet(_retryCount, this)) * RETRY_TIMEOUT_UNIT;
108
+ const delay = Math.pow(2, _classPrivateFieldGet(_retryCount, this)) * RETRY_TIMEOUT_UNIT;
109
109
  // eslint-disable-next-line no-console
110
110
  console.log("WebSocket will reconnect after %d seconds", delay / 1000);
111
111
  setTimeout(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"MessageService.js","names":["RETRY_TIMEOUT_UNIT","RETRY_LIMIT","_url","WeakMap","_ws","_queuedMessages","_messageListeners","_closeListeners","_retryCount","_closed","_MessageService_brand","WeakSet","MessageService","constructor","url","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","Set","_classPrivateFieldSet","send","data","_classPrivateFieldGet","_assertClassBrand","_connect","call","stringifiedData","JSON","stringify","readyState","WebSocket","OPEN","push","onMessage","listener","add","onClose","reset","length","clear","close","_classPrivateFieldGet2","console","log","ws","addEventListener","e","msg","code","_reconnect","error","response","parse","delay","Math","pow","setTimeout","_this$retryCount","_this$retryCount2"],"sources":["../../../src/websocket/MessageService.ts"],"sourcesContent":["export type MessageListener<T = unknown> = (response: T) => void;\nexport type CloseListener = () => void;\n\nconst RETRY_TIMEOUT_UNIT = 1000;\nconst RETRY_LIMIT = 6;\n\nexport class MessageService {\n #url: string;\n #ws: WebSocket | undefined;\n #queuedMessages: string[] = [];\n #messageListeners = new Set<MessageListener>();\n #closeListeners = new Set<CloseListener>();\n #retryCount = 0;\n #closed = false;\n\n constructor(url: string) {\n this.#url = url;\n }\n\n #connect(): WebSocket {\n // eslint-disable-next-line no-console\n console.log(\"WebSocket connecting ...\");\n const ws = new WebSocket(this.#url);\n ws.addEventListener(\"open\", (e) => {\n // eslint-disable-next-line no-console\n console.log(\"WebSocket open:\", e);\n this.#retryCount = 0;\n for (const msg of this.#queuedMessages) {\n ws.send(msg);\n }\n this.#queuedMessages.length = 0;\n });\n ws.addEventListener(\"close\", (e) => {\n if (this.#closed) {\n return;\n }\n // eslint-disable-next-line no-console\n console.log(\"WebSocket close:\", e);\n for (const listener of this.#closeListeners) {\n listener();\n }\n // Error code 1000 means that the connection was closed normally.\n if (e.code !== 1000) {\n this.#reconnect();\n }\n });\n ws.addEventListener(\"error\", (e) => {\n // No need to reconnect in error event listener,\n // there will always be a close event along with the error event.\n // eslint-disable-next-line no-console\n console.error(\"WebSocket error:\", e);\n });\n ws.addEventListener(\"message\", (e: MessageEvent<string>) => {\n const response = JSON.parse(e.data);\n for (const listener of this.#messageListeners) {\n listener(response);\n }\n });\n return ws;\n }\n\n #reconnect() {\n // istanbul ignore next: currently can't mock this\n if (this.#retryCount >= RETRY_LIMIT) {\n // eslint-disable-next-line no-console\n console.error(\"WebSocket connect retry limit exceeded\");\n return;\n }\n // Double the timeout for each retry\n const delay = Math.pow(2, this.#retryCount) * RETRY_TIMEOUT_UNIT;\n // eslint-disable-next-line no-console\n console.log(\"WebSocket will reconnect after %d seconds\", delay / 1000);\n setTimeout(() => {\n this.#retryCount++;\n this.#ws = this.#connect();\n }, delay);\n }\n\n send(data: unknown): void {\n // Connect when data is sent for the first time\n if (!this.#ws) {\n this.#ws = this.#connect();\n }\n const stringifiedData = JSON.stringify(data);\n if (this.#ws.readyState === WebSocket.OPEN) {\n this.#ws.send(stringifiedData);\n } else {\n this.#queuedMessages.push(stringifiedData);\n }\n }\n\n onMessage<T = unknown>(listener: MessageListener<T>) {\n this.#messageListeners.add(listener as MessageListener<unknown>);\n }\n\n onClose(listener: CloseListener) {\n this.#closeListeners.add(listener);\n }\n\n reset() {\n this.#queuedMessages.length = 0;\n this.#messageListeners.clear();\n this.#closeListeners.clear();\n }\n\n close() {\n this.#closed = true;\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#ws.close();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MessageService.js","names":["RETRY_TIMEOUT_UNIT","RETRY_LIMIT","_url","WeakMap","_ws","_queuedMessages","_messageListeners","_closeListeners","_retryCount","_closed","_MessageService_brand","WeakSet","MessageService","constructor","url","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","Set","_classPrivateFieldSet","send","data","_classPrivateFieldGet","_assertClassBrand","_connect","call","stringifiedData","JSON","stringify","readyState","WebSocket","OPEN","push","onMessage","listener","add","onClose","reset","length","clear","close","_classPrivateFieldGet2","console","log","ws","addEventListener","e","msg","code","_reconnect","error","response","parse","delay","Math","pow","setTimeout","_this$retryCount","_this$retryCount2"],"sources":["../../../src/websocket/MessageService.ts"],"sourcesContent":["export type MessageListener<T = unknown> = (response: T) => void;\nexport type CloseListener = () => void;\n\nconst RETRY_TIMEOUT_UNIT = 1000;\nconst RETRY_LIMIT = 6;\n\nexport class MessageService {\n #url: string;\n #ws: WebSocket | undefined;\n #queuedMessages: string[] = [];\n #messageListeners = new Set<MessageListener>();\n #closeListeners = new Set<CloseListener>();\n #retryCount = 0;\n #closed = false;\n\n constructor(url: string) {\n this.#url = url;\n }\n\n #connect(): WebSocket {\n // eslint-disable-next-line no-console\n console.log(\"WebSocket connecting ...\");\n const ws = new WebSocket(this.#url);\n ws.addEventListener(\"open\", (e) => {\n // eslint-disable-next-line no-console\n console.log(\"WebSocket open:\", e);\n this.#retryCount = 0;\n for (const msg of this.#queuedMessages) {\n ws.send(msg);\n }\n this.#queuedMessages.length = 0;\n });\n ws.addEventListener(\"close\", (e) => {\n if (this.#closed) {\n return;\n }\n // eslint-disable-next-line no-console\n console.log(\"WebSocket close:\", e);\n for (const listener of this.#closeListeners) {\n listener();\n }\n // Error code 1000 means that the connection was closed normally.\n if (e.code !== 1000) {\n this.#reconnect();\n }\n });\n ws.addEventListener(\"error\", (e) => {\n // No need to reconnect in error event listener,\n // there will always be a close event along with the error event.\n // eslint-disable-next-line no-console\n console.error(\"WebSocket error:\", e);\n });\n ws.addEventListener(\"message\", (e: MessageEvent<string>) => {\n const response = JSON.parse(e.data);\n for (const listener of this.#messageListeners) {\n listener(response);\n }\n });\n return ws;\n }\n\n #reconnect() {\n // istanbul ignore next: currently can't mock this\n if (this.#retryCount >= RETRY_LIMIT) {\n // eslint-disable-next-line no-console\n console.error(\"WebSocket connect retry limit exceeded\");\n return;\n }\n // Double the timeout for each retry\n const delay = Math.pow(2, this.#retryCount) * RETRY_TIMEOUT_UNIT;\n // eslint-disable-next-line no-console\n console.log(\"WebSocket will reconnect after %d seconds\", delay / 1000);\n setTimeout(() => {\n this.#retryCount++;\n this.#ws = this.#connect();\n }, delay);\n }\n\n send(data: unknown): void {\n // Connect when data is sent for the first time\n if (!this.#ws) {\n this.#ws = this.#connect();\n }\n const stringifiedData = JSON.stringify(data);\n if (this.#ws.readyState === WebSocket.OPEN) {\n this.#ws.send(stringifiedData);\n } else {\n this.#queuedMessages.push(stringifiedData);\n }\n }\n\n onMessage<T = unknown>(listener: MessageListener<T>) {\n this.#messageListeners.add(listener as MessageListener<unknown>);\n }\n\n onClose(listener: CloseListener) {\n this.#closeListeners.add(listener);\n }\n\n reset() {\n this.#queuedMessages.length = 0;\n this.#messageListeners.clear();\n this.#closeListeners.clear();\n }\n\n close() {\n this.#closed = true;\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#ws.close();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/easyops-runtime",
3
- "version": "0.10.5",
3
+ "version": "0.10.7",
4
4
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
5
5
  "license": "GPL-3.0",
6
6
  "repository": {
@@ -44,20 +44,20 @@
44
44
  "@next-api-sdk/cmdb-sdk": "^1.1.0",
45
45
  "@next-api-sdk/micro-app-sdk": "^1.2.1",
46
46
  "@next-api-sdk/micro-app-standalone-sdk": "^1.1.0",
47
- "@next-core/cook": "^2.2.16",
48
- "@next-core/http": "^1.2.2",
49
- "@next-core/pipes": "^2.0.20",
50
- "@next-core/runtime": "^1.44.1",
47
+ "@next-core/cook": "^2.2.17",
48
+ "@next-core/http": "^1.2.3",
49
+ "@next-core/pipes": "^2.0.21",
50
+ "@next-core/runtime": "^1.44.3",
51
51
  "@next-core/types": "^1.11.0",
52
- "@next-core/utils": "^1.7.5",
52
+ "@next-core/utils": "^1.7.6",
53
53
  "js-yaml": "^3.14.1",
54
54
  "lodash": "^4.17.21"
55
55
  },
56
56
  "devDependencies": {
57
- "@next-core/build-next-libs": "^1.0.15",
58
- "@next-core/test-next": "^1.1.1",
57
+ "@next-core/build-next-libs": "^1.0.16",
58
+ "@next-core/test-next": "^1.1.2",
59
59
  "jest-websocket-mock": "^2.5.0",
60
60
  "whatwg-fetch": "^3.6.20"
61
61
  },
62
- "gitHead": "eb182d634aabe34abe67f222184881c459870fab"
62
+ "gitHead": "34346d51d4a58dbf496de22f2f06a3dd43dae52d"
63
63
  }