@azure/web-pubsub-client 1.0.3-alpha.20250619.1 → 1.0.3-alpha.20250718.1
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/dist/browser/errors/index.js +12 -0
- package/dist/browser/errors/index.js.map +1 -1
- package/dist/browser/protocols/jsonProtocolBase.js +9 -5
- package/dist/browser/protocols/jsonProtocolBase.js.map +1 -1
- package/dist/browser/protocols/webPubSubJsonProtocol.js +8 -10
- package/dist/browser/protocols/webPubSubJsonProtocol.js.map +1 -1
- package/dist/browser/protocols/webPubSubJsonReliableProtocol.js +8 -10
- package/dist/browser/protocols/webPubSubJsonReliableProtocol.js.map +1 -1
- package/dist/browser/webPubSubClient.js +57 -27
- package/dist/browser/webPubSubClient.js.map +1 -1
- package/dist/browser/websocket/websocketClient-browser.mjs.map +1 -1
- package/dist/browser/websocket/websocketClient.js +1 -0
- package/dist/commonjs/errors/index.js +12 -0
- package/dist/commonjs/errors/index.js.map +1 -1
- package/dist/commonjs/protocols/jsonProtocolBase.js +9 -5
- package/dist/commonjs/protocols/jsonProtocolBase.js.map +1 -1
- package/dist/commonjs/protocols/webPubSubJsonProtocol.js +8 -10
- package/dist/commonjs/protocols/webPubSubJsonProtocol.js.map +1 -1
- package/dist/commonjs/protocols/webPubSubJsonReliableProtocol.js +8 -10
- package/dist/commonjs/protocols/webPubSubJsonReliableProtocol.js.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +11 -11
- package/dist/commonjs/webPubSubClient.js +57 -27
- package/dist/commonjs/webPubSubClient.js.map +1 -1
- package/dist/commonjs/websocket/websocketClient.js +1 -0
- package/dist/commonjs/websocket/websocketClient.js.map +1 -1
- package/dist/esm/errors/index.js +12 -0
- package/dist/esm/errors/index.js.map +1 -1
- package/dist/esm/protocols/jsonProtocolBase.js +9 -5
- package/dist/esm/protocols/jsonProtocolBase.js.map +1 -1
- package/dist/esm/protocols/webPubSubJsonProtocol.js +8 -10
- package/dist/esm/protocols/webPubSubJsonProtocol.js.map +1 -1
- package/dist/esm/protocols/webPubSubJsonReliableProtocol.js +8 -10
- package/dist/esm/protocols/webPubSubJsonReliableProtocol.js.map +1 -1
- package/dist/esm/webPubSubClient.js +57 -27
- package/dist/esm/webPubSubClient.js.map +1 -1
- package/dist/esm/websocket/websocketClient.js +1 -0
- package/dist/esm/websocket/websocketClient.js.map +1 -1
- package/dist/react-native/errors/index.js +12 -0
- package/dist/react-native/errors/index.js.map +1 -1
- package/dist/react-native/protocols/jsonProtocolBase.js +9 -5
- package/dist/react-native/protocols/jsonProtocolBase.js.map +1 -1
- package/dist/react-native/protocols/webPubSubJsonProtocol.js +8 -10
- package/dist/react-native/protocols/webPubSubJsonProtocol.js.map +1 -1
- package/dist/react-native/protocols/webPubSubJsonReliableProtocol.js +8 -10
- package/dist/react-native/protocols/webPubSubJsonReliableProtocol.js.map +1 -1
- package/dist/react-native/webPubSubClient.js +57 -27
- package/dist/react-native/webPubSubClient.js.map +1 -1
- package/dist/react-native/websocket/websocketClient.js +1 -0
- package/dist/react-native/websocket/websocketClient.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webPubSubClient.js","sourceRoot":"","sources":["../../src/webPubSubClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAiCrC,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAKxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,IAAK,oBAMJ;AAND,WAAK,oBAAoB;IACvB,2CAAmB,CAAA;IACnB,qDAA6B,CAAA;IAC7B,iDAAyB,CAAA;IACzB,+CAAuB,CAAA;IACvB,iDAAyB,CAAA;AAC3B,CAAC,EANI,oBAAoB,KAApB,oBAAoB,QAMxB;AAOD;;GAEG;AACH,MAAM,OAAO,eAAe;IA4BlB,SAAS;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAcD,YAAY,UAA8C,EAAE,OAAgC;QApC3E,0BAAqB,GAAG,GAAG,CAAC;QAC5B,uBAAkB,GAAG,KAAK,CAAC;QAE3B,aAAQ,GAAiB,IAAI,YAAY,EAAE,CAAC;QAErD,gBAAW,GAAY,KAAK,CAAC;QAW7B,wBAAmB,GAAG,KAAK,CAAC;QAqBlC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,EAAE,kBAAkB,EAAE,UAAU,EAA+B,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAChC,CAAC;QAED,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,CAAC,mBAAmB,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAoB,CAAC,CAAC;QAC/E,IAAI,CAAC,qBAAqB,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAsB,CAAC,CAAC;QAEnF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAS,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,EAAE,CAAC;QAEpC,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAK,CAAC,OAAsB;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,WAAwC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iGAAiG;YACjG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;gBAClC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,WAA6B;QAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,CAAC,YAAY,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACxC,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;YACrD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,WAA6B;QACpD,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxC,qCAAqC;QACrC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QAEtB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB,KAAK,QAAQ,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;gBACpD,WAAW,EAAE,WAAW;aACI,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,2DAA2D,OAAO,IAAI,CAAC,IAAI,EAAE,CAC9E,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,IAAI;QACT,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QAED,0DAA0D;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;QACxC,CAAC;IACH,CAAC;IAsCM,EAAE,CACP,KAMyB,EACzB,QAA0B;QAE1B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAsCM,GAAG,CACR,KAMyB,EACzB,QAA0B;QAE1B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAQO,UAAU,CAChB,KAMyB,EACzB,IAAS;QAET,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,SAAS,CACpB,SAAiB,EACjB,OAAgC,EAChC,QAA2B,EAC3B,OAA0B;QAE1B,OAAO,IAAI,CAAC,0BAA0B,CACpC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EACnE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CACrB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,SAAiB,EACjB,OAAgC,EAChC,QAA2B,EAC3B,OAA0B;;QAE1B,MAAM,aAAa,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,mCAAI,KAAK,CAAC;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,qBAAqB,CAC/B,CAAC,EAAE,EAAE,EAAE;gBACL,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,QAAQ;oBAClB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE,SAAS;iBACG,CAAC;YACxB,CAAC,EACD,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EACd,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CACrB,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,SAAS;SACG,CAAC;QAEtB,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAC,CAAC;QACvD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,OAA0B;QAClE,OAAO,IAAI,CAAC,0BAA0B,CACpC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,EAChD,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CACrB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,SAAiB,EACjB,OAA0B;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7D,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,SAAiB,EACjB,OAA0B;QAE1B,OAAO,IAAI,CAAC,qBAAqB,CAC/B,CAAC,EAAE,EAAE,EAAE;YACL,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,WAAW;aACE,CAAC;QACxB,CAAC,EACD,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EACd,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CACrB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU,CACrB,SAAiB,EACjB,OAA2B;QAE3B,OAAO,IAAI,CAAC,0BAA0B,CACpC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,EACjD,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CACrB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,SAAiB,EACjB,OAA2B;QAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAC7C,CAAC,EAAE,EAAE,EAAE;YACL,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,YAAY;aACE,CAAC;QACzB,CAAC,EACD,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EACd,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CACrB,CAAC;QACF,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,WAAW,CACtB,SAAiB,EACjB,OAAgC,EAChC,QAA2B,EAC3B,OAA4B;QAE5B,OAAO,IAAI,CAAC,0BAA0B,CACpC,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EACrE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CACrB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,SAAiB,EACjB,OAAgC,EAChC,QAA2B,EAC3B,OAA4B;;QAE5B,MAAM,aAAa,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,mCAAI,KAAK,CAAC;QACtD,MAAM,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,KAAK,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,qBAAqB,CAC/B,CAAC,EAAE,EAAE,EAAE;gBACL,OAAO;oBACL,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,SAAS;oBAChB,QAAQ,EAAE,QAAQ;oBAClB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,MAAM;iBACO,CAAC;YAC1B,CAAC,EACD,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EACd,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CACrB,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAM;SACO,CAAC;QAExB,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAC,CAAC;QACvD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IAEO,0BAA0B;QAChC,OAAO,IAAI,sBAAsB,EAAE,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAC/D,IAAI,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACvD,iBAAiB;YACjB,MAAM,OAAO,GAAuB;gBAClC,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,KAAM;aACnB,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YAAC,WAAM,CAAC;gBACP,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAM,CAAC,CAAC,CAAC,sEAAsE;YAC5G,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,6BAA6B;YAC7B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC,MAAM,CACvE,GAAG,EACH,IAAI,CAAC,SAAS,CAAC,IAAI,CACpB,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;gBACjB,+GAA+G;gBAC/G,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC;wBACH,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,CAAC;oBAAC,WAAM,CAAC;wBACP,YAAY;oBACd,CAAC;oBAED,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBACD,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;oBACzC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;wBAClC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBAChC,CAAC;oBACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,aAAa,CAAC,KAAK,IAAI,EAAE;wBACnD,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACnC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACX,CAAC;gBAED,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;oBAClC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAChC,CAAC;gBACD,MAAM,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;gBAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,CAAC,SAAS,EAAE,CAAC;oBACnD,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;oBAC9C,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;wBAClC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBAChC,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,sCAAsC,IAAI,aAAa,MAAM,EAAE,CAAC,CAAC;oBAC7E,IAAI,CAAC,eAAe,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;oBACtD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;oBAC/C,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,CAAC,IAAS,EAAE,EAAE;gBAC7B,MAAM,gBAAgB,GAAG,CAAC,OAAmB,EAAQ,EAAE;oBACrD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC;wBAChD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACnC,MAAM,YAAY,GAChB,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;wBAC9D,IAAI,OAAO,CAAC,OAAO,IAAI,YAAY,EAAE,CAAC;4BACpC,MAAM,CAAC,OAAO,CAAC;gCACb,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,YAAY,EAAE,YAAY;6BACR,CAAC,CAAC;wBACxB,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,MAAM,CACX,IAAI,gBAAgB,CAAC,yBAAyB,EAAE;gCAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,WAAW,EAAE,OAAO,CAAC,KAAK;6BACA,CAAC,CAC9B,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAAyB,EAAiB,EAAE;oBAChF,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;oBAC1C,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;oBAEpD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAC9B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;wBAEhC,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;4BACnC,MAAM,aAAa,GAAoB,EAAE,CAAC;4BAC1C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gCAC3B,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;oCACf,aAAa,CAAC,IAAI,CAChB,CAAC,KAAK,IAAI,EAAE;wCACV,IAAI,CAAC;4CACH,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wCACpC,CAAC;wCAAC,OAAO,GAAG,EAAE,CAAC;4CACb,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;wCAC/C,CAAC;oCACH,CAAC,CAAC,EAAE,CACL,CAAC;gCACJ,CAAC;4BACH,CAAC,CAAC,CAAC;4BAEH,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gCAC1C,YAAY;4BACd,CAAC,CAAC,CAAC;wBACL,CAAC;wBAED,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,yBAAyB,GAAG,CAAC,OAA4B,EAAQ,EAAE;oBACvE,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC;gBAC1C,CAAC,CAAC;gBAEF,MAAM,sBAAsB,GAAG,CAAC,OAAyB,EAAQ,EAAE;oBACjE,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;wBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBAC5D,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;4BACf,0BAA0B;4BAC1B,OAAO;wBACT,CAAC;wBAED,2FAA2F;wBAC3F,IAAI,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;4BACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAC7B,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBACtC,CAAC,CAAC;gBAEF,MAAM,uBAAuB,GAAG,CAAC,OAA0B,EAAQ,EAAE;oBACnE,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;wBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBAC5D,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;4BACf,0BAA0B;4BAC1B,OAAO;wBACT,CAAC;wBAED,2FAA2F;wBAC3F,IAAI,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;4BACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAC7B,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC,CAAC;gBAEF,IAAI,QAAsD,CAAC;gBAC3D,IAAI,CAAC;oBACH,IAAI,aAA4C,CAAC;oBACjD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBACxB,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtC,CAAC;yBAAM,CAAC;wBACN,aAAa,GAAG,IAAI,CAAC;oBACvB,CAAC;oBAED,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;oBACvD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;wBACtB,4CAA4C;wBAC5C,OAAO;oBACT,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,OAAO,CAAC,0DAA0D,EAAE,GAAG,CAAC,CAAC;oBAChF,MAAM,GAAG,CAAC;gBACZ,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7B,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxB,CAAC;gBAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC3B,IAAI,CAAC;wBACH,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;4BACrB,KAAK,KAAK,CAAC,CAAC,CAAC;gCACX,gBAAgB,CAAC,OAAqB,CAAC,CAAC;gCACxC,MAAM;4BACR,CAAC;4BACD,KAAK,WAAW,CAAC,CAAC,CAAC;gCACjB,sBAAsB,CAAC,OAA2B,CAAC,CAAC;gCACpD,MAAM;4BACR,CAAC;4BACD,KAAK,cAAc,CAAC,CAAC,CAAC;gCACpB,yBAAyB,CAAC,OAA8B,CAAC,CAAC;gCAC1D,MAAM;4BACR,CAAC;4BACD,KAAK,WAAW,CAAC,CAAC,CAAC;gCACjB,sBAAsB,CAAC,OAA2B,CAAC,CAAC;gCACpD,MAAM;4BACR,CAAC;4BACD,KAAK,YAAY,CAAC,CAAC,CAAC;gCAClB,uBAAuB,CAAC,OAA4B,CAAC,CAAC;gCACtD,MAAM;4BACR,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,CAAC,OAAO,CACZ,2DAA2D,OAAO,CAAC,IAAI,eAAe,EACtF,GAAG,CACJ,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,mCAAmC;QAC/C,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,YAAY,CAAC;QAEhD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAE9E,yBAAyB;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAClC,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACR,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,OAAO,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;oBAElE,OAAO,EAAE,CAAC;oBACV,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;oBAEzE,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;wBACtB,MAAM;oBACR,CAAC;oBAED,MAAM,CAAC,OAAO,CAAC,oCAAoC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC;oBAC5E,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAChC,YAAY;oBACd,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,wBAAwB;QAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,uBAAuB;QAC7B,OAAO,IAAI,aAAa,CAAC,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;QAChD,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,OAAyB,EACzB,WAA6B;QAE7B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,SAAU,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,eAAoD,EACpD,KAAc,EACd,WAA6B;QAE7B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QAExC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE3B,IAAI,YAAY,GAAW,EAAE,CAAC;YAC9B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;YAC/B,CAAC;YACD,MAAM,IAAI,gBAAgB,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,OAAO,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACtD,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3E,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAClC,kBAAkB;QAClB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,MAAM,CACV,IAAI,gBAAgB,CAAC,gEAAgE,EAAE;oBACrF,KAAK,EAAE,KAAK,CAAC,KAAK;iBACQ,CAAC,CAC9B,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;YAC/D,IAAI,CAAC,mCAAmC,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/D,MAAM,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC;YAC5E,IAAI,CAAC,mCAAmC,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC;YAC3E,IAAI,CAAC,mCAAmC,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,qBAAqB;QACrB,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;YACvE,IAAI,CAAC,mCAAmC,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC;QAC9C,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,OAAO,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAChD,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBAChD,SAAS,GAAG,IAAI,CAAC;oBACjB,OAAO;gBACT,CAAC;gBAAC,WAAM,CAAC;oBACP,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAC;gBAC1F,IAAI,CAAC,mCAAmC,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,YAAoB,EAAE,MAAc;QAC7D,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YAC3B,YAAY,EAAE,YAAY;YAC1B,MAAM,EAAE,MAAM;SACI,CAAC,CAAC;IACxB,CAAC;IAEO,qBAAqB,CAC3B,YAAgC,EAChC,uBAAwD;QAExD,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAC9B,YAAY,EAAE,YAAY;YAC1B,OAAO,EAAE,uBAAuB;SACX,CAAC,CAAC;IAC3B,CAAC;IAEO,qBAAqB,CAAC,OAAyB;QACrD,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;YAC/B,OAAO,EAAE,OAAO;SACS,CAAC,CAAC;IAC/B,CAAC;IAEO,sBAAsB,CAAC,OAA0B;QACvD,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;YAChC,OAAO,EAAE,OAAO;SACU,CAAC,CAAC;IAChC,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAEO,0BAA0B,CAAC,SAAiB,EAAE,GAAY;QAChE,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;YACrC,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,GAAG;SACgB,CAAC,CAAC;IAChC,CAAC;IAEO,oBAAoB,CAAC,aAAqC;QAChE,IAAI,aAAa,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC;YACxC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC;QACrC,CAAC;QAED,IAAI,aAAa,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;YAC3C,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACxC,CAAC;QAED,IAAI,aAAa,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YACnC,aAAa,CAAC,QAAQ,GAAG,6BAA6B,EAAE,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;QAEhD,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,yBAAyB,CAAC,aAAqC;QACrE,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;YACvC,aAAa,CAAC,mBAAmB,GAAG,EAAE,CAAC;QACzC,CAAC;QAED,IACE,aAAa,CAAC,mBAAmB,CAAC,UAAU,IAAI,IAAI;YACpD,aAAa,CAAC,mBAAmB,CAAC,UAAU,GAAG,CAAC,EAChD,CAAC;YACD,aAAa,CAAC,mBAAmB,CAAC,UAAU,GAAG,CAAC,CAAC;QACnD,CAAC;QAED,IACE,aAAa,CAAC,mBAAmB,CAAC,cAAc,IAAI,IAAI;YACxD,aAAa,CAAC,mBAAmB,CAAC,cAAc,GAAG,CAAC,EACpD,CAAC;YACD,aAAa,CAAC,mBAAmB,CAAC,cAAc,GAAG,IAAI,CAAC;QAC1D,CAAC;QAED,IACE,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,IAAI,IAAI;YAC3D,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,GAAG,CAAC,EACvD,CAAC;YACD,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC9D,CAAC;QAED,IAAI,aAAa,CAAC,mBAAmB,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACnD,aAAa,CAAC,mBAAmB,CAAC,IAAI,GAAG,OAAO,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,2BAA2B,CAAC,aAAqC;QACvE,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;YACzC,aAAa,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAC3C,CAAC;QAED,IACE,aAAa,CAAC,qBAAqB,CAAC,UAAU,IAAI,IAAI;YACtD,aAAa,CAAC,qBAAqB,CAAC,UAAU,GAAG,CAAC,EAClD,CAAC;YACD,aAAa,CAAC,qBAAqB,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QACpE,CAAC;QAED,IACE,aAAa,CAAC,qBAAqB,CAAC,cAAc,IAAI,IAAI;YAC1D,aAAa,CAAC,qBAAqB,CAAC,cAAc,GAAG,CAAC,EACtD,CAAC;YACD,aAAa,CAAC,qBAAqB,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5D,CAAC;QAED,IACE,aAAa,CAAC,qBAAqB,CAAC,iBAAiB,IAAI,IAAI;YAC7D,aAAa,CAAC,qBAAqB,CAAC,iBAAiB,GAAG,CAAC,EACzD,CAAC;YACD,aAAa,CAAC,qBAAqB,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAChE,CAAC;QAED,IAAI,aAAa,CAAC,qBAAqB,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACrD,aAAa,CAAC,qBAAqB,CAAC,IAAI,GAAG,OAAO,CAAC;QACrD,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAClE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,yBAAyB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC5E,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAmB,CAAC;IACpD,CAAC;IAEO,YAAY,CAAC,QAA8B;QACjD,MAAM,CAAC,OAAO,CACZ,kCAAkC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,QAAQ,CAAC,QAAQ,EAAE,EAAE,CACrF,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,0BAA0B,CACtC,KAAuB,EACvB,MAAwB;QAExB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBAC5E,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;oBACtB,MAAM,GAAG,CAAC;gBACZ,CAAC;gBAED,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;gBAEvB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,WAAW;IAIf,YAAmB,YAAmC;QACpD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,IAAI,CACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAkB,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAe,CAAC;YAC7C,CAAC,CACJ,CAAC;IACJ,CAAC;IAEM,kBAAkB,CAAC,YAAoB;QAC5C,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,UAAW,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,aAAa,CAAC,IAAK,KAAK,OAAO,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC,aAAa,CAAC,cAAe,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,0BAA0B,CAAC,OAAe;QAChD,IAAI,OAAO,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAkB,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,cAAe,CAAC;QACnE,CAAC;IACH,CAAC;CACF;AAED,MAAM,cAAc;IAIlB,YAAY,IAAY;QAFjB,aAAQ,GAAG,KAAK,CAAC;QAGtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,SAAS;IAKb,YAAY,KAAa;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAIM,OAAO;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,OAAO,CAAC,KAAqD;QAClE,IAAI,CAAC,QAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEM,MAAM,CAAC,MAAY;QACxB,IAAI,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;CACF;AAED,MAAM,UAAU;IAId;QACE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAEM,SAAS,CAAC,UAAkB;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAC3C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAEM,gBAAgB;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;CACF;AAED,MAAM,aAAa;IAMjB,YAAY,IAAkC,EAAE,QAAgB,EAAE,GAAS;QACzE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;QAAC,WAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAAC,WAAM,CAAC;gBACP,YAAY;YACd,CAAC;oBAAS,CAAC;gBACT,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { delay } from \"@azure/core-util\";\nimport EventEmitter from \"events\";\nimport type { SendMessageErrorOptions } from \"./errors/index.js\";\nimport { SendMessageError } from \"./errors/index.js\";\nimport { logger } from \"./logger.js\";\nimport type {\n WebPubSubResult,\n JoinGroupOptions,\n LeaveGroupOptions,\n OnConnectedArgs,\n OnDisconnectedArgs,\n OnGroupDataMessageArgs,\n OnServerDataMessageArgs,\n OnStoppedArgs,\n WebPubSubRetryOptions,\n SendToGroupOptions,\n SendEventOptions,\n WebPubSubClientOptions,\n OnRejoinGroupFailedArgs,\n StartOptions,\n GetClientAccessUrlOptions,\n} from \"./models/index.js\";\nimport type {\n ConnectedMessage,\n DisconnectedMessage,\n GroupDataMessage,\n ServerDataMessage,\n WebPubSubDataType,\n WebPubSubMessage,\n JoinGroupMessage,\n LeaveGroupMessage,\n SendToGroupMessage,\n SendEventMessage,\n AckMessage,\n SequenceAckMessage,\n} from \"./models/messages.js\";\nimport type { WebPubSubClientProtocol } from \"./protocols/index.js\";\nimport { WebPubSubJsonReliableProtocol } from \"./protocols/index.js\";\nimport type { WebPubSubClientCredential } from \"./webPubSubClientCredential.js\";\nimport { WebSocketClientFactory } from \"./websocket/websocketClient.js\";\nimport type {\n WebSocketClientFactoryLike,\n WebSocketClientLike,\n} from \"./websocket/websocketClientLike.js\";\nimport { abortablePromise } from \"./utils/abortablePromise.js\";\n\nenum WebPubSubClientState {\n Stopped = \"Stopped\",\n Disconnected = \"Disconnected\",\n Connecting = \"Connecting\",\n Connected = \"Connected\",\n Recovering = \"Recovering\",\n}\n\n/**\n * Types which can be serialized and sent as JSON.\n */\nexport type JSONTypes = string | number | boolean | object;\n\n/**\n * The WebPubSub client\n */\nexport class WebPubSubClient {\n private readonly _protocol: WebPubSubClientProtocol;\n private readonly _credential: WebPubSubClientCredential;\n private readonly _options: WebPubSubClientOptions;\n private readonly _groupMap: Map<string, WebPubSubGroup>;\n private readonly _ackMap: Map<number, AckEntity>;\n private readonly _sequenceId: SequenceId;\n private readonly _messageRetryPolicy: RetryPolicy;\n private readonly _reconnectRetryPolicy: RetryPolicy;\n private readonly _quickSequenceAckDiff = 300;\n private readonly _activeTimeoutInMs = 20000;\n\n private readonly _emitter: EventEmitter = new EventEmitter();\n private _state: WebPubSubClientState;\n private _isStopping: boolean = false;\n private _ackId: number;\n private _activeKeepaliveTask: AbortableTask | undefined;\n\n // connection lifetime\n private _wsClient?: WebSocketClientLike;\n private _uri?: string;\n private _lastCloseEvent?: { code: number; reason: string };\n private _lastDisconnectedMessage?: DisconnectedMessage;\n private _connectionId?: string;\n private _reconnectionToken?: string;\n private _isInitialConnected = false;\n private _sequenceAckTask?: AbortableTask;\n\n private nextAckId(): number {\n this._ackId = this._ackId + 1;\n return this._ackId;\n }\n\n /**\n * Create an instance of WebPubSubClient\n * @param clientAccessUrl - The uri to connect\n * @param options - The client options\n */\n constructor(clientAccessUrl: string, options?: WebPubSubClientOptions);\n /**\n * Create an instance of WebPubSubClient\n * @param credential - The credential to use when connecting\n * @param options - The client options\n */\n constructor(credential: WebPubSubClientCredential, options?: WebPubSubClientOptions);\n constructor(credential: string | WebPubSubClientCredential, options?: WebPubSubClientOptions) {\n if (typeof credential === \"string\") {\n this._credential = { getClientAccessUrl: credential } as WebPubSubClientCredential;\n } else {\n this._credential = credential;\n }\n\n if (options == null) {\n options = {};\n }\n this._buildDefaultOptions(options);\n this._options = options;\n\n this._messageRetryPolicy = new RetryPolicy(this._options.messageRetryOptions!);\n this._reconnectRetryPolicy = new RetryPolicy(this._options.reconnectRetryOptions!);\n\n this._protocol = this._options.protocol!;\n this._groupMap = new Map<string, WebPubSubGroup>();\n this._ackMap = new Map<number, AckEntity>();\n this._sequenceId = new SequenceId();\n\n this._state = WebPubSubClientState.Stopped;\n this._ackId = 0;\n }\n\n /**\n * Start to start to the service.\n * @param abortSignal - The abort signal\n */\n public async start(options?: StartOptions): Promise<void> {\n if (this._isStopping) {\n throw new Error(\"Can't start a client during stopping\");\n }\n\n if (this._state !== WebPubSubClientState.Stopped) {\n throw new Error(\"Client can be only started when it's Stopped\");\n }\n\n let abortSignal: AbortSignalLike | undefined;\n if (options) {\n abortSignal = options.abortSignal;\n }\n\n if (!this._activeKeepaliveTask) {\n this._activeKeepaliveTask = this._getActiveKeepaliveTask();\n }\n\n try {\n await this._startCore(abortSignal);\n } catch (err) {\n // this two sentense should be set together. Consider client.stop() is called during _startCore()\n this._changeState(WebPubSubClientState.Stopped);\n if (this._activeKeepaliveTask) {\n this._activeKeepaliveTask.abort();\n this._activeKeepaliveTask = undefined;\n }\n this._isStopping = false;\n throw err;\n }\n }\n\n private async _startFromRestarting(abortSignal?: AbortSignalLike): Promise<void> {\n if (this._state !== WebPubSubClientState.Disconnected) {\n throw new Error(\"Client can be only restarted when it's Disconnected\");\n }\n\n try {\n logger.verbose(\"Staring reconnecting.\");\n await this._startCore(abortSignal);\n } catch (err) {\n this._changeState(WebPubSubClientState.Disconnected);\n throw err;\n }\n }\n\n private async _startCore(abortSignal?: AbortSignalLike): Promise<void> {\n this._changeState(WebPubSubClientState.Connecting);\n\n logger.info(\"Staring a new connection\");\n // Reset before a pure new connection\n this._sequenceId.reset();\n this._isInitialConnected = false;\n this._lastCloseEvent = undefined;\n this._lastDisconnectedMessage = undefined;\n this._connectionId = undefined;\n this._reconnectionToken = undefined;\n this._uri = undefined;\n\n if (typeof this._credential.getClientAccessUrl === \"string\") {\n this._uri = this._credential.getClientAccessUrl;\n } else {\n this._uri = await this._credential.getClientAccessUrl({\n abortSignal: abortSignal,\n } as GetClientAccessUrlOptions);\n }\n\n if (typeof this._uri !== \"string\") {\n throw new Error(\n `The clientAccessUrl must be a string but currently it's ${typeof this._uri}`,\n );\n }\n await this._connectCore(this._uri);\n }\n\n /**\n * Stop the client.\n */\n public stop(): void {\n if (this._state === WebPubSubClientState.Stopped || this._isStopping) {\n return;\n }\n\n // TODO: Maybe we need a better logic for stopping control\n this._isStopping = true;\n if (this._wsClient && this._wsClient.isOpen()) {\n this._wsClient.close();\n } else {\n this._isStopping = false;\n }\n if (this._activeKeepaliveTask) {\n this._activeKeepaliveTask.abort();\n this._activeKeepaliveTask = undefined;\n }\n }\n\n /**\n * Add handler for connected event\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"connected\", listener: (e: OnConnectedArgs) => void): void;\n /**\n * Add handler for disconnected event\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"disconnected\", listener: (e: OnDisconnectedArgs) => void): void;\n /**\n * Add handler for stopped event\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"stopped\", listener: (e: OnStoppedArgs) => void): void;\n /**\n * Add handler for server messages\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"server-message\", listener: (e: OnServerDataMessageArgs) => void): void;\n /**\n * Add handler for group messags\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"group-message\", listener: (e: OnGroupDataMessageArgs) => void): void;\n /**\n * Add handler for rejoining group failed\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"rejoin-group-failed\", listener: (e: OnRejoinGroupFailedArgs) => void): void;\n public on(\n event:\n | \"connected\"\n | \"disconnected\"\n | \"stopped\"\n | \"server-message\"\n | \"group-message\"\n | \"rejoin-group-failed\",\n listener: (e: any) => void,\n ): void {\n this._emitter.on(event, listener);\n }\n\n /**\n * Remove handler for connected event\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"connected\", listener: (e: OnConnectedArgs) => void): void;\n /**\n * Remove handler for disconnected event\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"disconnected\", listener: (e: OnDisconnectedArgs) => void): void;\n /**\n * Remove handler for stopped event\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"stopped\", listener: (e: OnStoppedArgs) => void): void;\n /**\n * Remove handler for server message\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"server-message\", listener: (e: OnServerDataMessageArgs) => void): void;\n /**\n * Remove handler for group message\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"group-message\", listener: (e: OnGroupDataMessageArgs) => void): void;\n /**\n * Remove handler for rejoining group failed\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"rejoin-group-failed\", listener: (e: OnRejoinGroupFailedArgs) => void): void;\n public off(\n event:\n | \"connected\"\n | \"disconnected\"\n | \"stopped\"\n | \"server-message\"\n | \"group-message\"\n | \"rejoin-group-failed\",\n listener: (e: any) => void,\n ): void {\n this._emitter.removeListener(event, listener);\n }\n\n private _emitEvent(event: \"connected\", args: OnConnectedArgs): void;\n private _emitEvent(event: \"disconnected\", args: OnDisconnectedArgs): void;\n private _emitEvent(event: \"stopped\", args: OnStoppedArgs): void;\n private _emitEvent(event: \"server-message\", args: OnServerDataMessageArgs): void;\n private _emitEvent(event: \"group-message\", args: OnGroupDataMessageArgs): void;\n private _emitEvent(event: \"rejoin-group-failed\", args: OnRejoinGroupFailedArgs): void;\n private _emitEvent(\n event:\n | \"connected\"\n | \"disconnected\"\n | \"stopped\"\n | \"server-message\"\n | \"group-message\"\n | \"rejoin-group-failed\",\n args: any,\n ): void {\n this._emitter.emit(event, args);\n }\n\n /**\n * Send custom event to server.\n * @param eventName - The event name\n * @param content - The data content\n * @param dataType - The data type\n * @param options - The options\n * @param abortSignal - The abort signal\n */\n public async sendEvent(\n eventName: string,\n content: JSONTypes | ArrayBuffer,\n dataType: WebPubSubDataType,\n options?: SendEventOptions,\n ): Promise<WebPubSubResult> {\n return this._operationExecuteWithRetry(\n () => this._sendEventAttempt(eventName, content, dataType, options),\n options?.abortSignal,\n );\n }\n\n private async _sendEventAttempt(\n eventName: string,\n content: JSONTypes | ArrayBuffer,\n dataType: WebPubSubDataType,\n options?: SendEventOptions,\n ): Promise<WebPubSubResult> {\n const fireAndForget = options?.fireAndForget ?? false;\n if (!fireAndForget) {\n return this._sendMessageWithAckId(\n (id) => {\n return {\n kind: \"sendEvent\",\n dataType: dataType,\n data: content,\n ackId: id,\n event: eventName,\n } as SendEventMessage;\n },\n options?.ackId,\n options?.abortSignal,\n );\n }\n\n const message = {\n kind: \"sendEvent\",\n dataType: dataType,\n data: content,\n event: eventName,\n } as SendEventMessage;\n\n await this._sendMessage(message, options?.abortSignal);\n return { isDuplicated: false };\n }\n\n /**\n * Join the client to group\n * @param groupName - The group name\n * @param options - The join group options\n */\n public async joinGroup(groupName: string, options?: JoinGroupOptions): Promise<WebPubSubResult> {\n return this._operationExecuteWithRetry(\n () => this._joinGroupAttempt(groupName, options),\n options?.abortSignal,\n );\n }\n\n private async _joinGroupAttempt(\n groupName: string,\n options?: JoinGroupOptions,\n ): Promise<WebPubSubResult> {\n const group = this._getOrAddGroup(groupName);\n const result = await this._joinGroupCore(groupName, options);\n group.isJoined = true;\n return result;\n }\n\n private async _joinGroupCore(\n groupName: string,\n options?: JoinGroupOptions,\n ): Promise<WebPubSubResult> {\n return this._sendMessageWithAckId(\n (id) => {\n return {\n group: groupName,\n ackId: id,\n kind: \"joinGroup\",\n } as JoinGroupMessage;\n },\n options?.ackId,\n options?.abortSignal,\n );\n }\n\n /**\n * Leave the client from group\n * @param groupName - The group name\n * @param ackId - The optional ackId. If not specified, client will generate one.\n * @param abortSignal - The abort signal\n */\n public async leaveGroup(\n groupName: string,\n options?: LeaveGroupOptions,\n ): Promise<WebPubSubResult> {\n return this._operationExecuteWithRetry(\n () => this._leaveGroupAttempt(groupName, options),\n options?.abortSignal,\n );\n }\n\n private async _leaveGroupAttempt(\n groupName: string,\n options?: LeaveGroupOptions,\n ): Promise<WebPubSubResult> {\n const group = this._getOrAddGroup(groupName);\n const result = await this._sendMessageWithAckId(\n (id) => {\n return {\n group: groupName,\n ackId: id,\n kind: \"leaveGroup\",\n } as LeaveGroupMessage;\n },\n options?.ackId,\n options?.abortSignal,\n );\n group.isJoined = false;\n return result;\n }\n\n /**\n * Send message to group.\n * @param groupName - The group name\n * @param content - The data content\n * @param dataType - The data type\n * @param options - The options\n * @param abortSignal - The abort signal\n */\n public async sendToGroup(\n groupName: string,\n content: JSONTypes | ArrayBuffer,\n dataType: WebPubSubDataType,\n options?: SendToGroupOptions,\n ): Promise<WebPubSubResult> {\n return this._operationExecuteWithRetry(\n () => this._sendToGroupAttempt(groupName, content, dataType, options),\n options?.abortSignal,\n );\n }\n\n private async _sendToGroupAttempt(\n groupName: string,\n content: JSONTypes | ArrayBuffer,\n dataType: WebPubSubDataType,\n options?: SendToGroupOptions,\n ): Promise<WebPubSubResult> {\n const fireAndForget = options?.fireAndForget ?? false;\n const noEcho = options?.noEcho ?? false;\n if (!fireAndForget) {\n return this._sendMessageWithAckId(\n (id) => {\n return {\n kind: \"sendToGroup\",\n group: groupName,\n dataType: dataType,\n data: content,\n ackId: id,\n noEcho: noEcho,\n } as SendToGroupMessage;\n },\n options?.ackId,\n options?.abortSignal,\n );\n }\n\n const message = {\n kind: \"sendToGroup\",\n group: groupName,\n dataType: dataType,\n data: content,\n noEcho: noEcho,\n } as SendToGroupMessage;\n\n await this._sendMessage(message, options?.abortSignal);\n return { isDuplicated: false };\n }\n\n private _getWebSocketClientFactory(): WebSocketClientFactoryLike {\n return new WebSocketClientFactory();\n }\n\n private async _trySendSequenceAck(): Promise<void> {\n if (!this._protocol.isReliableSubProtocol) {\n return;\n }\n const [isUpdated, seqId] = this._sequenceId.tryGetSequenceId();\n if (isUpdated && seqId !== null && seqId !== undefined) {\n // seqId can be 0\n const message: SequenceAckMessage = {\n kind: \"sequenceAck\",\n sequenceId: seqId!,\n };\n try {\n await this._sendMessage(message);\n } catch {\n this._sequenceId.tryUpdate(seqId!); // If sending failed, mark it as updated so that it can be sent again.\n }\n }\n }\n\n private _connectCore(uri: string): Promise<void> {\n if (this._isStopping) {\n throw new Error(\"Can't start a client during stopping\");\n }\n\n return new Promise<void>((resolve, reject) => {\n // This part is executed sync\n const client = (this._wsClient = this._getWebSocketClientFactory().create(\n uri,\n this._protocol.name,\n ));\n client.onopen(() => {\n // There's a case that client called stop() before this method. We need to check and close it if it's the case.\n if (this._isStopping) {\n try {\n client.close();\n } catch {\n /** empty */\n }\n\n reject(new Error(`The client is stopped`));\n }\n logger.verbose(\"WebSocket connection has opened\");\n this._changeState(WebPubSubClientState.Connected);\n if (this._protocol.isReliableSubProtocol) {\n if (this._sequenceAckTask != null) {\n this._sequenceAckTask.abort();\n }\n this._sequenceAckTask = new AbortableTask(async () => {\n await this._trySendSequenceAck();\n }, 1000);\n }\n\n resolve();\n });\n\n client.onerror((e) => {\n if (this._sequenceAckTask != null) {\n this._sequenceAckTask.abort();\n }\n reject(e);\n });\n\n client.onclose((code: number, reason: string) => {\n if (this._state === WebPubSubClientState.Connected) {\n logger.verbose(\"WebSocket closed after open\");\n if (this._sequenceAckTask != null) {\n this._sequenceAckTask.abort();\n }\n logger.info(`WebSocket connection closed. Code: ${code}, Reason: ${reason}`);\n this._lastCloseEvent = { code: code, reason: reason };\n this._handleConnectionClose.call(this);\n } else {\n logger.verbose(\"WebSocket closed before open\");\n reject(new Error(`Failed to start WebSocket: ${code}`));\n }\n });\n\n client.onmessage((data: any) => {\n const handleAckMessage = (message: AckMessage): void => {\n if (this._ackMap.has(message.ackId)) {\n const entity = this._ackMap.get(message.ackId)!;\n this._ackMap.delete(message.ackId);\n const isDuplicated: boolean =\n message.error != null && message.error.name === \"Duplicate\";\n if (message.success || isDuplicated) {\n entity.resolve({\n ackId: message.ackId,\n isDuplicated: isDuplicated,\n } as WebPubSubResult);\n } else {\n entity.reject(\n new SendMessageError(\"Failed to send message.\", {\n ackId: message.ackId,\n errorDetail: message.error,\n } as SendMessageErrorOptions),\n );\n }\n }\n };\n\n const handleConnectedMessage = async (message: ConnectedMessage): Promise<void> => {\n this._connectionId = message.connectionId;\n this._reconnectionToken = message.reconnectionToken;\n\n if (!this._isInitialConnected) {\n this._isInitialConnected = true;\n\n if (this._options.autoRejoinGroups) {\n const groupPromises: Promise<void>[] = [];\n this._groupMap.forEach((g) => {\n if (g.isJoined) {\n groupPromises.push(\n (async () => {\n try {\n await this._joinGroupCore(g.name);\n } catch (err) {\n this._safeEmitRejoinGroupFailed(g.name, err);\n }\n })(),\n );\n }\n });\n\n await Promise.all(groupPromises).catch(() => {\n /** empty */\n });\n }\n\n this._safeEmitConnected(message.connectionId, message.userId);\n }\n };\n\n const handleDisconnectedMessage = (message: DisconnectedMessage): void => {\n this._lastDisconnectedMessage = message;\n };\n\n const handleGroupDataMessage = (message: GroupDataMessage): void => {\n if (message.sequenceId != null) {\n const diff = this._sequenceId.tryUpdate(message.sequenceId);\n if (diff === 0) {\n // drop duplicated message\n return;\n }\n\n // If the diff is larger than the threshold, we must ack quicker to avoid slow client drop.\n if (diff > this._quickSequenceAckDiff) {\n this._trySendSequenceAck();\n }\n }\n\n this._safeEmitGroupMessage(message);\n };\n\n const handleServerDataMessage = (message: ServerDataMessage): void => {\n if (message.sequenceId != null) {\n const diff = this._sequenceId.tryUpdate(message.sequenceId);\n if (diff === 0) {\n // drop duplicated message\n return;\n }\n\n // If the diff is larger than the threshold, we must ack quicker to avoid slow client drop.\n if (diff > this._quickSequenceAckDiff) {\n this._trySendSequenceAck();\n }\n }\n\n this._safeEmitServerMessage(message);\n };\n\n let messages: WebPubSubMessage[] | WebPubSubMessage | null;\n try {\n let convertedData: Buffer | ArrayBuffer | string;\n if (Array.isArray(data)) {\n convertedData = Buffer.concat(data);\n } else {\n convertedData = data;\n }\n\n messages = this._protocol.parseMessages(convertedData);\n if (messages === null) {\n // null means the message is not recognized.\n return;\n }\n } catch (err) {\n logger.warning(\"An error occurred while parsing the message from service\", err);\n throw err;\n }\n\n if (!Array.isArray(messages)) {\n messages = [messages];\n }\n\n messages.forEach((message) => {\n try {\n switch (message.kind) {\n case \"ack\": {\n handleAckMessage(message as AckMessage);\n break;\n }\n case \"connected\": {\n handleConnectedMessage(message as ConnectedMessage);\n break;\n }\n case \"disconnected\": {\n handleDisconnectedMessage(message as DisconnectedMessage);\n break;\n }\n case \"groupData\": {\n handleGroupDataMessage(message as GroupDataMessage);\n break;\n }\n case \"serverData\": {\n handleServerDataMessage(message as ServerDataMessage);\n break;\n }\n }\n } catch (err) {\n logger.warning(\n `An error occurred while handling the message with kind: ${message.kind} from service`,\n err,\n );\n }\n });\n });\n });\n }\n\n private async _handleConnectionCloseAndNoRecovery(): Promise<void> {\n this._state = WebPubSubClientState.Disconnected;\n\n this._safeEmitDisconnected(this._connectionId, this._lastDisconnectedMessage);\n\n // Auto reconnect or stop\n if (this._options.autoReconnect) {\n await this._autoReconnect();\n } else {\n await this._handleConnectionStopped();\n }\n }\n\n private async _autoReconnect(): Promise<void> {\n let isSuccess = false;\n let attempt = 0;\n try {\n while (!this._isStopping) {\n try {\n await this._startFromRestarting();\n isSuccess = true;\n break;\n } catch (err) {\n logger.warning(\"An attempt to reconnect connection failed.\", err);\n\n attempt++;\n const delayInMs = this._reconnectRetryPolicy.nextRetryDelayInMs(attempt);\n\n if (delayInMs == null) {\n break;\n }\n\n logger.verbose(`Delay time for reconnect attempt ${attempt}: ${delayInMs}`);\n await delay(delayInMs).catch(() => {\n /** empty */\n });\n }\n }\n } finally {\n if (!isSuccess) {\n this._handleConnectionStopped();\n }\n }\n }\n\n private _handleConnectionStopped(): void {\n this._isStopping = false;\n this._state = WebPubSubClientState.Stopped;\n this._safeEmitStopped();\n }\n\n private _getActiveKeepaliveTask(): AbortableTask {\n return new AbortableTask(async () => {\n this._sequenceId.tryUpdate(0); // force update\n }, this._activeTimeoutInMs);\n }\n\n private async _sendMessage(\n message: WebPubSubMessage,\n abortSignal?: AbortSignalLike,\n ): Promise<void> {\n if (!this._wsClient || !this._wsClient.isOpen()) {\n throw new Error(\"The connection is not connected.\");\n }\n\n const payload = this._protocol.writeMessage(message);\n await this._wsClient!.send(payload, abortSignal);\n }\n\n private async _sendMessageWithAckId(\n messageProvider: (ackId: number) => WebPubSubMessage,\n ackId?: number,\n abortSignal?: AbortSignalLike,\n ): Promise<WebPubSubResult> {\n if (ackId == null) {\n ackId = this.nextAckId();\n }\n\n const message = messageProvider(ackId);\n if (!this._ackMap.has(ackId)) {\n this._ackMap.set(ackId, new AckEntity(ackId));\n }\n const entity = this._ackMap.get(ackId)!;\n\n try {\n await this._sendMessage(message, abortSignal);\n } catch (error) {\n this._ackMap.delete(ackId);\n\n let errorMessage: string = \"\";\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n throw new SendMessageError(errorMessage, { ackId: ackId });\n }\n\n if (abortSignal) {\n try {\n return await abortablePromise(entity.promise(), abortSignal);\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new SendMessageError(\"Cancelled by abortSignal\", { ackId: ackId });\n }\n throw err;\n }\n }\n\n return entity.promise();\n }\n\n private async _handleConnectionClose(): Promise<void> {\n // Clean ack cache\n this._ackMap.forEach((value, key) => {\n if (this._ackMap.delete(key)) {\n value.reject(\n new SendMessageError(\"Connection is disconnected before receive ack from the service\", {\n ackId: value.ackId,\n } as SendMessageErrorOptions),\n );\n }\n });\n\n if (this._isStopping) {\n logger.warning(\"The client is stopping state. Stop recovery.\");\n this._handleConnectionCloseAndNoRecovery();\n return;\n }\n\n if (this._lastCloseEvent && this._lastCloseEvent.code === 1008) {\n logger.warning(\"The websocket close with status code 1008. Stop recovery.\");\n this._handleConnectionCloseAndNoRecovery();\n return;\n }\n\n if (!this._protocol.isReliableSubProtocol) {\n logger.warning(\"The protocol is not reliable, recovery is not applicable\");\n this._handleConnectionCloseAndNoRecovery();\n return;\n }\n\n // Build recovery uri\n const recoveryUri = this._buildRecoveryUri();\n if (!recoveryUri) {\n logger.warning(\"Connection id or reconnection token is not available\");\n this._handleConnectionCloseAndNoRecovery();\n return;\n }\n\n // Try recover connection\n let recovered = false;\n this._state = WebPubSubClientState.Recovering;\n const abortSignal = AbortSignal.timeout(30 * 1000);\n try {\n while (!abortSignal.aborted || this._isStopping) {\n try {\n await this._connectCore.call(this, recoveryUri);\n recovered = true;\n return;\n } catch {\n await delay(1000);\n }\n }\n } finally {\n if (!recovered) {\n logger.warning(\"Recovery attempts failed more then 30 seconds or the client is stopping\");\n this._handleConnectionCloseAndNoRecovery();\n }\n }\n }\n\n private _safeEmitConnected(connectionId: string, userId: string): void {\n this._emitEvent(\"connected\", {\n connectionId: connectionId,\n userId: userId,\n } as OnConnectedArgs);\n }\n\n private _safeEmitDisconnected(\n connectionId: string | undefined,\n lastDisconnectedMessage: DisconnectedMessage | undefined,\n ): void {\n this._emitEvent(\"disconnected\", {\n connectionId: connectionId,\n message: lastDisconnectedMessage,\n } as OnDisconnectedArgs);\n }\n\n private _safeEmitGroupMessage(message: GroupDataMessage): void {\n this._emitEvent(\"group-message\", {\n message: message,\n } as OnGroupDataMessageArgs);\n }\n\n private _safeEmitServerMessage(message: ServerDataMessage): void {\n this._emitEvent(\"server-message\", {\n message: message,\n } as OnServerDataMessageArgs);\n }\n\n private _safeEmitStopped(): void {\n this._emitEvent(\"stopped\", {});\n }\n\n private _safeEmitRejoinGroupFailed(groupName: string, err: unknown): void {\n this._emitEvent(\"rejoin-group-failed\", {\n group: groupName,\n error: err,\n } as OnRejoinGroupFailedArgs);\n }\n\n private _buildDefaultOptions(clientOptions: WebPubSubClientOptions): WebPubSubClientOptions {\n if (clientOptions.autoReconnect == null) {\n clientOptions.autoReconnect = true;\n }\n\n if (clientOptions.autoRejoinGroups == null) {\n clientOptions.autoRejoinGroups = true;\n }\n\n if (clientOptions.protocol == null) {\n clientOptions.protocol = WebPubSubJsonReliableProtocol();\n }\n\n this._buildMessageRetryOptions(clientOptions);\n this._buildReconnectRetryOptions(clientOptions);\n\n return clientOptions;\n }\n\n private _buildMessageRetryOptions(clientOptions: WebPubSubClientOptions): void {\n if (!clientOptions.messageRetryOptions) {\n clientOptions.messageRetryOptions = {};\n }\n\n if (\n clientOptions.messageRetryOptions.maxRetries == null ||\n clientOptions.messageRetryOptions.maxRetries < 0\n ) {\n clientOptions.messageRetryOptions.maxRetries = 3;\n }\n\n if (\n clientOptions.messageRetryOptions.retryDelayInMs == null ||\n clientOptions.messageRetryOptions.retryDelayInMs < 0\n ) {\n clientOptions.messageRetryOptions.retryDelayInMs = 1000;\n }\n\n if (\n clientOptions.messageRetryOptions.maxRetryDelayInMs == null ||\n clientOptions.messageRetryOptions.maxRetryDelayInMs < 0\n ) {\n clientOptions.messageRetryOptions.maxRetryDelayInMs = 30000;\n }\n\n if (clientOptions.messageRetryOptions.mode == null) {\n clientOptions.messageRetryOptions.mode = \"Fixed\";\n }\n }\n\n private _buildReconnectRetryOptions(clientOptions: WebPubSubClientOptions): void {\n if (!clientOptions.reconnectRetryOptions) {\n clientOptions.reconnectRetryOptions = {};\n }\n\n if (\n clientOptions.reconnectRetryOptions.maxRetries == null ||\n clientOptions.reconnectRetryOptions.maxRetries < 0\n ) {\n clientOptions.reconnectRetryOptions.maxRetries = Number.MAX_VALUE;\n }\n\n if (\n clientOptions.reconnectRetryOptions.retryDelayInMs == null ||\n clientOptions.reconnectRetryOptions.retryDelayInMs < 0\n ) {\n clientOptions.reconnectRetryOptions.retryDelayInMs = 1000;\n }\n\n if (\n clientOptions.reconnectRetryOptions.maxRetryDelayInMs == null ||\n clientOptions.reconnectRetryOptions.maxRetryDelayInMs < 0\n ) {\n clientOptions.reconnectRetryOptions.maxRetryDelayInMs = 30000;\n }\n\n if (clientOptions.reconnectRetryOptions.mode == null) {\n clientOptions.reconnectRetryOptions.mode = \"Fixed\";\n }\n }\n\n private _buildRecoveryUri(): string | null {\n if (this._connectionId && this._reconnectionToken && this._uri) {\n const url = new URL(this._uri);\n url.searchParams.append(\"awps_connection_id\", this._connectionId);\n url.searchParams.append(\"awps_reconnection_token\", this._reconnectionToken);\n return url.toString();\n }\n return null;\n }\n\n private _getOrAddGroup(name: string): WebPubSubGroup {\n if (!this._groupMap.has(name)) {\n this._groupMap.set(name, new WebPubSubGroup(name));\n }\n return this._groupMap.get(name) as WebPubSubGroup;\n }\n\n private _changeState(newState: WebPubSubClientState): void {\n logger.verbose(\n `The client state transfer from ${this._state.toString()} to ${newState.toString()}`,\n );\n this._state = newState;\n }\n\n private async _operationExecuteWithRetry<T>(\n inner: () => Promise<T>,\n signal?: AbortSignalLike,\n ): Promise<T> {\n let retryAttempt = 0;\n\n while (true) {\n try {\n return await inner.call(this);\n } catch (err) {\n retryAttempt++;\n const delayInMs = this._messageRetryPolicy.nextRetryDelayInMs(retryAttempt);\n if (delayInMs == null) {\n throw err;\n }\n\n await delay(delayInMs);\n\n if (signal?.aborted) {\n throw err;\n }\n }\n }\n }\n}\n\nclass RetryPolicy {\n private _retryOptions: WebPubSubRetryOptions;\n private _maxRetriesToGetMaxDelay: number;\n\n public constructor(retryOptions: WebPubSubRetryOptions) {\n this._retryOptions = retryOptions;\n this._maxRetriesToGetMaxDelay = Math.ceil(\n Math.log2(this._retryOptions.maxRetryDelayInMs!) -\n Math.log2(this._retryOptions.retryDelayInMs!) +\n 1,\n );\n }\n\n public nextRetryDelayInMs(retryAttempt: number): number | null {\n if (retryAttempt > this._retryOptions.maxRetries!) {\n return null;\n } else {\n if (this._retryOptions.mode! === \"Fixed\") {\n return this._retryOptions.retryDelayInMs!;\n } else {\n return this._calculateExponentialDelay(retryAttempt);\n }\n }\n }\n\n private _calculateExponentialDelay(attempt: number): number {\n if (attempt >= this._maxRetriesToGetMaxDelay) {\n return this._retryOptions.maxRetryDelayInMs!;\n } else {\n return (1 << (attempt - 1)) * this._retryOptions.retryDelayInMs!;\n }\n }\n}\n\nclass WebPubSubGroup {\n public readonly name: string;\n public isJoined = false;\n\n constructor(name: string) {\n this.name = name;\n }\n}\n\nclass AckEntity {\n private readonly _promise: Promise<WebPubSubResult>;\n private _resolve?: (value: WebPubSubResult | PromiseLike<WebPubSubResult>) => void;\n private _reject?: (reason?: any) => void;\n\n constructor(ackId: number) {\n this._promise = new Promise<WebPubSubResult>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.ackId = ackId;\n }\n\n public ackId;\n\n public promise(): Promise<WebPubSubResult> {\n return this._promise;\n }\n\n public resolve(value: WebPubSubResult | PromiseLike<WebPubSubResult>): void {\n this._resolve!(value);\n }\n\n public reject(reason?: any): void {\n this._reject!(reason);\n }\n}\n\nclass SequenceId {\n private _sequenceId: number;\n private _isUpdate: boolean;\n\n constructor() {\n this._sequenceId = 0;\n this._isUpdate = false;\n }\n\n public tryUpdate(sequenceId: number): number {\n this._isUpdate = true;\n if (sequenceId > this._sequenceId) {\n const diff = sequenceId - this._sequenceId;\n this._sequenceId = sequenceId;\n return diff;\n }\n return 0;\n }\n\n public tryGetSequenceId(): [boolean, number | null] {\n if (this._isUpdate) {\n this._isUpdate = false;\n return [true, this._sequenceId];\n }\n\n return [false, null];\n }\n\n public reset(): void {\n this._sequenceId = 0;\n this._isUpdate = false;\n }\n}\n\nclass AbortableTask {\n private readonly _func: (obj?: any) => Promise<void>;\n private readonly _abortController: AbortController;\n private readonly _interval: number;\n private readonly _obj?: any;\n\n constructor(func: (obj?: any) => Promise<void>, interval: number, obj?: any) {\n this._func = func;\n this._abortController = new AbortController();\n this._interval = interval;\n this._obj = obj;\n this._start();\n }\n\n public abort(): void {\n try {\n this._abortController.abort();\n } catch {\n /** empty */\n }\n }\n\n private async _start(): Promise<void> {\n const signal = this._abortController.signal;\n while (!signal.aborted) {\n try {\n await this._func(this._obj);\n } catch {\n /** empty */\n } finally {\n await delay(this._interval);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"webPubSubClient.js","sourceRoot":"","sources":["../../src/webPubSubClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { delay } from \"@azure/core-util\";\nimport EventEmitter from \"events\";\nimport type { SendMessageErrorOptions } from \"./errors/index.js\";\nimport { SendMessageError } from \"./errors/index.js\";\nimport { logger } from \"./logger.js\";\nimport type {\n WebPubSubResult,\n JoinGroupOptions,\n LeaveGroupOptions,\n OnConnectedArgs,\n OnDisconnectedArgs,\n OnGroupDataMessageArgs,\n OnServerDataMessageArgs,\n OnStoppedArgs,\n WebPubSubRetryOptions,\n SendToGroupOptions,\n SendEventOptions,\n WebPubSubClientOptions,\n OnRejoinGroupFailedArgs,\n StartOptions,\n GetClientAccessUrlOptions,\n} from \"./models/index.js\";\nimport type {\n ConnectedMessage,\n DisconnectedMessage,\n GroupDataMessage,\n ServerDataMessage,\n WebPubSubDataType,\n WebPubSubMessage,\n JoinGroupMessage,\n LeaveGroupMessage,\n SendToGroupMessage,\n SendEventMessage,\n AckMessage,\n SequenceAckMessage,\n} from \"./models/messages.js\";\nimport type { WebPubSubClientProtocol } from \"./protocols/index.js\";\nimport { WebPubSubJsonReliableProtocol } from \"./protocols/index.js\";\nimport type { WebPubSubClientCredential } from \"./webPubSubClientCredential.js\";\nimport { WebSocketClientFactory } from \"./websocket/websocketClient.js\";\nimport type {\n WebSocketClientFactoryLike,\n WebSocketClientLike,\n} from \"./websocket/websocketClientLike.js\";\nimport { abortablePromise } from \"./utils/abortablePromise.js\";\n\nenum WebPubSubClientState {\n Stopped = \"Stopped\",\n Disconnected = \"Disconnected\",\n Connecting = \"Connecting\",\n Connected = \"Connected\",\n Recovering = \"Recovering\",\n}\n\n/**\n * Types which can be serialized and sent as JSON.\n */\nexport type JSONTypes = string | number | boolean | object;\n\n/**\n * The WebPubSub client\n */\nexport class WebPubSubClient {\n private readonly _protocol: WebPubSubClientProtocol;\n private readonly _credential: WebPubSubClientCredential;\n private readonly _options: WebPubSubClientOptions;\n private readonly _groupMap: Map<string, WebPubSubGroup>;\n private readonly _ackMap: Map<number, AckEntity>;\n private readonly _sequenceId: SequenceId;\n private readonly _messageRetryPolicy: RetryPolicy;\n private readonly _reconnectRetryPolicy: RetryPolicy;\n private readonly _quickSequenceAckDiff = 300;\n private readonly _activeTimeoutInMs = 20000;\n\n private readonly _emitter: EventEmitter = new EventEmitter();\n private _state: WebPubSubClientState;\n private _isStopping: boolean = false;\n private _ackId: number;\n private _activeKeepaliveTask: AbortableTask | undefined;\n\n // connection lifetime\n private _wsClient?: WebSocketClientLike;\n private _uri?: string;\n private _lastCloseEvent?: { code: number; reason: string };\n private _lastDisconnectedMessage?: DisconnectedMessage;\n private _connectionId?: string;\n private _reconnectionToken?: string;\n private _isInitialConnected = false;\n private _sequenceAckTask?: AbortableTask;\n\n private nextAckId(): number {\n this._ackId = this._ackId + 1;\n return this._ackId;\n }\n\n /**\n * Create an instance of WebPubSubClient\n * @param clientAccessUrl - The uri to connect\n * @param options - The client options\n */\n constructor(clientAccessUrl: string, options?: WebPubSubClientOptions);\n /**\n * Create an instance of WebPubSubClient\n * @param credential - The credential to use when connecting\n * @param options - The client options\n */\n constructor(credential: WebPubSubClientCredential, options?: WebPubSubClientOptions);\n constructor(credential: string | WebPubSubClientCredential, options?: WebPubSubClientOptions) {\n if (typeof credential === \"string\") {\n this._credential = { getClientAccessUrl: credential } as WebPubSubClientCredential;\n } else {\n this._credential = credential;\n }\n\n if (options == null) {\n options = {};\n }\n this._buildDefaultOptions(options);\n this._options = options;\n\n this._messageRetryPolicy = new RetryPolicy(this._options.messageRetryOptions!);\n this._reconnectRetryPolicy = new RetryPolicy(this._options.reconnectRetryOptions!);\n\n this._protocol = this._options.protocol!;\n this._groupMap = new Map<string, WebPubSubGroup>();\n this._ackMap = new Map<number, AckEntity>();\n this._sequenceId = new SequenceId();\n\n this._state = WebPubSubClientState.Stopped;\n this._ackId = 0;\n }\n\n /**\n * Start to start to the service.\n * @param abortSignal - The abort signal\n */\n public async start(options?: StartOptions): Promise<void> {\n if (this._isStopping) {\n throw new Error(\"Can't start a client during stopping\");\n }\n\n if (this._state !== WebPubSubClientState.Stopped) {\n throw new Error(\"Client can be only started when it's Stopped\");\n }\n\n let abortSignal: AbortSignalLike | undefined;\n if (options) {\n abortSignal = options.abortSignal;\n }\n\n if (!this._activeKeepaliveTask) {\n this._activeKeepaliveTask = this._getActiveKeepaliveTask();\n }\n\n try {\n await this._startCore(abortSignal);\n } catch (err) {\n // this two sentense should be set together. Consider client.stop() is called during _startCore()\n this._changeState(WebPubSubClientState.Stopped);\n if (this._activeKeepaliveTask) {\n this._activeKeepaliveTask.abort();\n this._activeKeepaliveTask = undefined;\n }\n this._isStopping = false;\n throw err;\n }\n }\n\n private async _startFromRestarting(abortSignal?: AbortSignalLike): Promise<void> {\n if (this._state !== WebPubSubClientState.Disconnected) {\n throw new Error(\"Client can be only restarted when it's Disconnected\");\n }\n\n try {\n logger.verbose(\"Staring reconnecting.\");\n await this._startCore(abortSignal);\n } catch (err) {\n this._changeState(WebPubSubClientState.Disconnected);\n throw err;\n }\n }\n\n private async _startCore(abortSignal?: AbortSignalLike): Promise<void> {\n this._changeState(WebPubSubClientState.Connecting);\n\n logger.info(\"Staring a new connection\");\n // Reset before a pure new connection\n this._sequenceId.reset();\n this._isInitialConnected = false;\n this._lastCloseEvent = undefined;\n this._lastDisconnectedMessage = undefined;\n this._connectionId = undefined;\n this._reconnectionToken = undefined;\n this._uri = undefined;\n\n if (typeof this._credential.getClientAccessUrl === \"string\") {\n this._uri = this._credential.getClientAccessUrl;\n } else {\n this._uri = await this._credential.getClientAccessUrl({\n abortSignal: abortSignal,\n } as GetClientAccessUrlOptions);\n }\n\n if (typeof this._uri !== \"string\") {\n throw new Error(\n `The clientAccessUrl must be a string but currently it's ${typeof this._uri}`,\n );\n }\n await this._connectCore(this._uri);\n }\n\n /**\n * Stop the client.\n */\n public stop(): void {\n if (this._state === WebPubSubClientState.Stopped || this._isStopping) {\n return;\n }\n\n // TODO: Maybe we need a better logic for stopping control\n this._isStopping = true;\n if (this._wsClient && this._wsClient.isOpen()) {\n this._wsClient.close();\n } else {\n this._isStopping = false;\n }\n if (this._activeKeepaliveTask) {\n this._activeKeepaliveTask.abort();\n this._activeKeepaliveTask = undefined;\n }\n }\n\n /**\n * Add handler for connected event\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"connected\", listener: (e: OnConnectedArgs) => void): void;\n /**\n * Add handler for disconnected event\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"disconnected\", listener: (e: OnDisconnectedArgs) => void): void;\n /**\n * Add handler for stopped event\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"stopped\", listener: (e: OnStoppedArgs) => void): void;\n /**\n * Add handler for server messages\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"server-message\", listener: (e: OnServerDataMessageArgs) => void): void;\n /**\n * Add handler for group messags\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"group-message\", listener: (e: OnGroupDataMessageArgs) => void): void;\n /**\n * Add handler for rejoining group failed\n * @param event - The event name\n * @param listener - The handler\n */\n public on(event: \"rejoin-group-failed\", listener: (e: OnRejoinGroupFailedArgs) => void): void;\n public on(\n event:\n | \"connected\"\n | \"disconnected\"\n | \"stopped\"\n | \"server-message\"\n | \"group-message\"\n | \"rejoin-group-failed\",\n listener: (e: any) => void,\n ): void {\n this._emitter.on(event, listener);\n }\n\n /**\n * Remove handler for connected event\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"connected\", listener: (e: OnConnectedArgs) => void): void;\n /**\n * Remove handler for disconnected event\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"disconnected\", listener: (e: OnDisconnectedArgs) => void): void;\n /**\n * Remove handler for stopped event\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"stopped\", listener: (e: OnStoppedArgs) => void): void;\n /**\n * Remove handler for server message\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"server-message\", listener: (e: OnServerDataMessageArgs) => void): void;\n /**\n * Remove handler for group message\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"group-message\", listener: (e: OnGroupDataMessageArgs) => void): void;\n /**\n * Remove handler for rejoining group failed\n * @param event - The event name\n * @param listener - The handler\n */\n public off(event: \"rejoin-group-failed\", listener: (e: OnRejoinGroupFailedArgs) => void): void;\n public off(\n event:\n | \"connected\"\n | \"disconnected\"\n | \"stopped\"\n | \"server-message\"\n | \"group-message\"\n | \"rejoin-group-failed\",\n listener: (e: any) => void,\n ): void {\n this._emitter.removeListener(event, listener);\n }\n\n private _emitEvent(event: \"connected\", args: OnConnectedArgs): void;\n private _emitEvent(event: \"disconnected\", args: OnDisconnectedArgs): void;\n private _emitEvent(event: \"stopped\", args: OnStoppedArgs): void;\n private _emitEvent(event: \"server-message\", args: OnServerDataMessageArgs): void;\n private _emitEvent(event: \"group-message\", args: OnGroupDataMessageArgs): void;\n private _emitEvent(event: \"rejoin-group-failed\", args: OnRejoinGroupFailedArgs): void;\n private _emitEvent(\n event:\n | \"connected\"\n | \"disconnected\"\n | \"stopped\"\n | \"server-message\"\n | \"group-message\"\n | \"rejoin-group-failed\",\n args: any,\n ): void {\n this._emitter.emit(event, args);\n }\n\n /**\n * Send custom event to server.\n * @param eventName - The event name\n * @param content - The data content\n * @param dataType - The data type\n * @param options - The options\n * @param abortSignal - The abort signal\n */\n public async sendEvent(\n eventName: string,\n content: JSONTypes | ArrayBuffer,\n dataType: WebPubSubDataType,\n options?: SendEventOptions,\n ): Promise<WebPubSubResult> {\n return this._operationExecuteWithRetry(\n () => this._sendEventAttempt(eventName, content, dataType, options),\n options?.abortSignal,\n );\n }\n\n private async _sendEventAttempt(\n eventName: string,\n content: JSONTypes | ArrayBuffer,\n dataType: WebPubSubDataType,\n options?: SendEventOptions,\n ): Promise<WebPubSubResult> {\n const fireAndForget = options?.fireAndForget ?? false;\n if (!fireAndForget) {\n return this._sendMessageWithAckId(\n (id) => {\n return {\n kind: \"sendEvent\",\n dataType: dataType,\n data: content,\n ackId: id,\n event: eventName,\n } as SendEventMessage;\n },\n options?.ackId,\n options?.abortSignal,\n );\n }\n\n const message = {\n kind: \"sendEvent\",\n dataType: dataType,\n data: content,\n event: eventName,\n } as SendEventMessage;\n\n await this._sendMessage(message, options?.abortSignal);\n return { isDuplicated: false };\n }\n\n /**\n * Join the client to group\n * @param groupName - The group name\n * @param options - The join group options\n */\n public async joinGroup(groupName: string, options?: JoinGroupOptions): Promise<WebPubSubResult> {\n return this._operationExecuteWithRetry(\n () => this._joinGroupAttempt(groupName, options),\n options?.abortSignal,\n );\n }\n\n private async _joinGroupAttempt(\n groupName: string,\n options?: JoinGroupOptions,\n ): Promise<WebPubSubResult> {\n const group = this._getOrAddGroup(groupName);\n const result = await this._joinGroupCore(groupName, options);\n group.isJoined = true;\n return result;\n }\n\n private async _joinGroupCore(\n groupName: string,\n options?: JoinGroupOptions,\n ): Promise<WebPubSubResult> {\n return this._sendMessageWithAckId(\n (id) => {\n return {\n group: groupName,\n ackId: id,\n kind: \"joinGroup\",\n } as JoinGroupMessage;\n },\n options?.ackId,\n options?.abortSignal,\n );\n }\n\n /**\n * Leave the client from group\n * @param groupName - The group name\n * @param ackId - The optional ackId. If not specified, client will generate one.\n * @param abortSignal - The abort signal\n */\n public async leaveGroup(\n groupName: string,\n options?: LeaveGroupOptions,\n ): Promise<WebPubSubResult> {\n return this._operationExecuteWithRetry(\n () => this._leaveGroupAttempt(groupName, options),\n options?.abortSignal,\n );\n }\n\n private async _leaveGroupAttempt(\n groupName: string,\n options?: LeaveGroupOptions,\n ): Promise<WebPubSubResult> {\n const group = this._getOrAddGroup(groupName);\n const result = await this._sendMessageWithAckId(\n (id) => {\n return {\n group: groupName,\n ackId: id,\n kind: \"leaveGroup\",\n } as LeaveGroupMessage;\n },\n options?.ackId,\n options?.abortSignal,\n );\n group.isJoined = false;\n return result;\n }\n\n /**\n * Send message to group.\n * @param groupName - The group name\n * @param content - The data content\n * @param dataType - The data type\n * @param options - The options\n * @param abortSignal - The abort signal\n */\n public async sendToGroup(\n groupName: string,\n content: JSONTypes | ArrayBuffer,\n dataType: WebPubSubDataType,\n options?: SendToGroupOptions,\n ): Promise<WebPubSubResult> {\n return this._operationExecuteWithRetry(\n () => this._sendToGroupAttempt(groupName, content, dataType, options),\n options?.abortSignal,\n );\n }\n\n private async _sendToGroupAttempt(\n groupName: string,\n content: JSONTypes | ArrayBuffer,\n dataType: WebPubSubDataType,\n options?: SendToGroupOptions,\n ): Promise<WebPubSubResult> {\n const fireAndForget = options?.fireAndForget ?? false;\n const noEcho = options?.noEcho ?? false;\n if (!fireAndForget) {\n return this._sendMessageWithAckId(\n (id) => {\n return {\n kind: \"sendToGroup\",\n group: groupName,\n dataType: dataType,\n data: content,\n ackId: id,\n noEcho: noEcho,\n } as SendToGroupMessage;\n },\n options?.ackId,\n options?.abortSignal,\n );\n }\n\n const message = {\n kind: \"sendToGroup\",\n group: groupName,\n dataType: dataType,\n data: content,\n noEcho: noEcho,\n } as SendToGroupMessage;\n\n await this._sendMessage(message, options?.abortSignal);\n return { isDuplicated: false };\n }\n\n private _getWebSocketClientFactory(): WebSocketClientFactoryLike {\n return new WebSocketClientFactory();\n }\n\n private async _trySendSequenceAck(): Promise<void> {\n if (!this._protocol.isReliableSubProtocol) {\n return;\n }\n const [isUpdated, seqId] = this._sequenceId.tryGetSequenceId();\n if (isUpdated && seqId !== null && seqId !== undefined) {\n // seqId can be 0\n const message: SequenceAckMessage = {\n kind: \"sequenceAck\",\n sequenceId: seqId!,\n };\n try {\n await this._sendMessage(message);\n } catch {\n this._sequenceId.tryUpdate(seqId!); // If sending failed, mark it as updated so that it can be sent again.\n }\n }\n }\n\n private _connectCore(uri: string): Promise<void> {\n if (this._isStopping) {\n throw new Error(\"Can't start a client during stopping\");\n }\n\n return new Promise<void>((resolve, reject) => {\n // This part is executed sync\n const client = (this._wsClient = this._getWebSocketClientFactory().create(\n uri,\n this._protocol.name,\n ));\n client.onopen(() => {\n // There's a case that client called stop() before this method. We need to check and close it if it's the case.\n if (this._isStopping) {\n try {\n client.close();\n } catch {\n /** empty */\n }\n\n reject(new Error(`The client is stopped`));\n }\n logger.verbose(\"WebSocket connection has opened\");\n this._changeState(WebPubSubClientState.Connected);\n if (this._protocol.isReliableSubProtocol) {\n if (this._sequenceAckTask != null) {\n this._sequenceAckTask.abort();\n }\n this._sequenceAckTask = new AbortableTask(async () => {\n await this._trySendSequenceAck();\n }, 1000);\n }\n\n resolve();\n });\n\n client.onerror((e) => {\n if (this._sequenceAckTask != null) {\n this._sequenceAckTask.abort();\n }\n reject(e);\n });\n\n client.onclose((code: number, reason: string) => {\n if (this._state === WebPubSubClientState.Connected) {\n logger.verbose(\"WebSocket closed after open\");\n if (this._sequenceAckTask != null) {\n this._sequenceAckTask.abort();\n }\n logger.info(`WebSocket connection closed. Code: ${code}, Reason: ${reason}`);\n this._lastCloseEvent = { code: code, reason: reason };\n this._handleConnectionClose.call(this);\n } else {\n logger.verbose(\"WebSocket closed before open\");\n reject(new Error(`Failed to start WebSocket: ${code}`));\n }\n });\n\n client.onmessage((data: any) => {\n const handleAckMessage = (message: AckMessage): void => {\n if (this._ackMap.has(message.ackId)) {\n const entity = this._ackMap.get(message.ackId)!;\n this._ackMap.delete(message.ackId);\n const isDuplicated: boolean =\n message.error != null && message.error.name === \"Duplicate\";\n if (message.success || isDuplicated) {\n entity.resolve({\n ackId: message.ackId,\n isDuplicated: isDuplicated,\n } as WebPubSubResult);\n } else {\n entity.reject(\n new SendMessageError(\"Failed to send message.\", {\n ackId: message.ackId,\n errorDetail: message.error,\n } as SendMessageErrorOptions),\n );\n }\n }\n };\n\n const handleConnectedMessage = async (message: ConnectedMessage): Promise<void> => {\n this._connectionId = message.connectionId;\n this._reconnectionToken = message.reconnectionToken;\n\n if (!this._isInitialConnected) {\n this._isInitialConnected = true;\n\n if (this._options.autoRejoinGroups) {\n const groupPromises: Promise<void>[] = [];\n this._groupMap.forEach((g) => {\n if (g.isJoined) {\n groupPromises.push(\n (async () => {\n try {\n await this._joinGroupCore(g.name);\n } catch (err) {\n this._safeEmitRejoinGroupFailed(g.name, err);\n }\n })(),\n );\n }\n });\n\n await Promise.all(groupPromises).catch(() => {\n /** empty */\n });\n }\n\n this._safeEmitConnected(message.connectionId, message.userId);\n }\n };\n\n const handleDisconnectedMessage = (message: DisconnectedMessage): void => {\n this._lastDisconnectedMessage = message;\n };\n\n const handleGroupDataMessage = (message: GroupDataMessage): void => {\n if (message.sequenceId != null) {\n const diff = this._sequenceId.tryUpdate(message.sequenceId);\n if (diff === 0) {\n // drop duplicated message\n return;\n }\n\n // If the diff is larger than the threshold, we must ack quicker to avoid slow client drop.\n if (diff > this._quickSequenceAckDiff) {\n this._trySendSequenceAck();\n }\n }\n\n this._safeEmitGroupMessage(message);\n };\n\n const handleServerDataMessage = (message: ServerDataMessage): void => {\n if (message.sequenceId != null) {\n const diff = this._sequenceId.tryUpdate(message.sequenceId);\n if (diff === 0) {\n // drop duplicated message\n return;\n }\n\n // If the diff is larger than the threshold, we must ack quicker to avoid slow client drop.\n if (diff > this._quickSequenceAckDiff) {\n this._trySendSequenceAck();\n }\n }\n\n this._safeEmitServerMessage(message);\n };\n\n let messages: WebPubSubMessage[] | WebPubSubMessage | null;\n try {\n let convertedData: Buffer | ArrayBuffer | string;\n if (Array.isArray(data)) {\n convertedData = Buffer.concat(data);\n } else {\n convertedData = data;\n }\n\n messages = this._protocol.parseMessages(convertedData);\n if (messages === null) {\n // null means the message is not recognized.\n return;\n }\n } catch (err) {\n logger.warning(\"An error occurred while parsing the message from service\", err);\n throw err;\n }\n\n if (!Array.isArray(messages)) {\n messages = [messages];\n }\n\n messages.forEach((message) => {\n try {\n switch (message.kind) {\n case \"ack\": {\n handleAckMessage(message as AckMessage);\n break;\n }\n case \"connected\": {\n handleConnectedMessage(message as ConnectedMessage);\n break;\n }\n case \"disconnected\": {\n handleDisconnectedMessage(message as DisconnectedMessage);\n break;\n }\n case \"groupData\": {\n handleGroupDataMessage(message as GroupDataMessage);\n break;\n }\n case \"serverData\": {\n handleServerDataMessage(message as ServerDataMessage);\n break;\n }\n }\n } catch (err) {\n logger.warning(\n `An error occurred while handling the message with kind: ${message.kind} from service`,\n err,\n );\n }\n });\n });\n });\n }\n\n private async _handleConnectionCloseAndNoRecovery(): Promise<void> {\n this._state = WebPubSubClientState.Disconnected;\n\n this._safeEmitDisconnected(this._connectionId, this._lastDisconnectedMessage);\n\n // Auto reconnect or stop\n if (this._options.autoReconnect) {\n await this._autoReconnect();\n } else {\n await this._handleConnectionStopped();\n }\n }\n\n private async _autoReconnect(): Promise<void> {\n let isSuccess = false;\n let attempt = 0;\n try {\n while (!this._isStopping) {\n try {\n await this._startFromRestarting();\n isSuccess = true;\n break;\n } catch (err) {\n logger.warning(\"An attempt to reconnect connection failed.\", err);\n\n attempt++;\n const delayInMs = this._reconnectRetryPolicy.nextRetryDelayInMs(attempt);\n\n if (delayInMs == null) {\n break;\n }\n\n logger.verbose(`Delay time for reconnect attempt ${attempt}: ${delayInMs}`);\n await delay(delayInMs).catch(() => {\n /** empty */\n });\n }\n }\n } finally {\n if (!isSuccess) {\n this._handleConnectionStopped();\n }\n }\n }\n\n private _handleConnectionStopped(): void {\n this._isStopping = false;\n this._state = WebPubSubClientState.Stopped;\n this._safeEmitStopped();\n }\n\n private _getActiveKeepaliveTask(): AbortableTask {\n return new AbortableTask(async () => {\n this._sequenceId.tryUpdate(0); // force update\n }, this._activeTimeoutInMs);\n }\n\n private async _sendMessage(\n message: WebPubSubMessage,\n abortSignal?: AbortSignalLike,\n ): Promise<void> {\n if (!this._wsClient || !this._wsClient.isOpen()) {\n throw new Error(\"The connection is not connected.\");\n }\n\n const payload = this._protocol.writeMessage(message);\n await this._wsClient!.send(payload, abortSignal);\n }\n\n private async _sendMessageWithAckId(\n messageProvider: (ackId: number) => WebPubSubMessage,\n ackId?: number,\n abortSignal?: AbortSignalLike,\n ): Promise<WebPubSubResult> {\n if (ackId == null) {\n ackId = this.nextAckId();\n }\n\n const message = messageProvider(ackId);\n if (!this._ackMap.has(ackId)) {\n this._ackMap.set(ackId, new AckEntity(ackId));\n }\n const entity = this._ackMap.get(ackId)!;\n\n try {\n await this._sendMessage(message, abortSignal);\n } catch (error) {\n this._ackMap.delete(ackId);\n\n let errorMessage: string = \"\";\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n throw new SendMessageError(errorMessage, { ackId: ackId });\n }\n\n if (abortSignal) {\n try {\n return await abortablePromise(entity.promise(), abortSignal);\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new SendMessageError(\"Cancelled by abortSignal\", { ackId: ackId });\n }\n throw err;\n }\n }\n\n return entity.promise();\n }\n\n private async _handleConnectionClose(): Promise<void> {\n // Clean ack cache\n this._ackMap.forEach((value, key) => {\n if (this._ackMap.delete(key)) {\n value.reject(\n new SendMessageError(\"Connection is disconnected before receive ack from the service\", {\n ackId: value.ackId,\n } as SendMessageErrorOptions),\n );\n }\n });\n\n if (this._isStopping) {\n logger.warning(\"The client is stopping state. Stop recovery.\");\n this._handleConnectionCloseAndNoRecovery();\n return;\n }\n\n if (this._lastCloseEvent && this._lastCloseEvent.code === 1008) {\n logger.warning(\"The websocket close with status code 1008. Stop recovery.\");\n this._handleConnectionCloseAndNoRecovery();\n return;\n }\n\n if (!this._protocol.isReliableSubProtocol) {\n logger.warning(\"The protocol is not reliable, recovery is not applicable\");\n this._handleConnectionCloseAndNoRecovery();\n return;\n }\n\n // Build recovery uri\n const recoveryUri = this._buildRecoveryUri();\n if (!recoveryUri) {\n logger.warning(\"Connection id or reconnection token is not available\");\n this._handleConnectionCloseAndNoRecovery();\n return;\n }\n\n // Try recover connection\n let recovered = false;\n this._state = WebPubSubClientState.Recovering;\n const abortSignal = AbortSignal.timeout(30 * 1000);\n try {\n while (!abortSignal.aborted || this._isStopping) {\n try {\n await this._connectCore.call(this, recoveryUri);\n recovered = true;\n return;\n } catch {\n await delay(1000);\n }\n }\n } finally {\n if (!recovered) {\n logger.warning(\"Recovery attempts failed more then 30 seconds or the client is stopping\");\n this._handleConnectionCloseAndNoRecovery();\n }\n }\n }\n\n private _safeEmitConnected(connectionId: string, userId: string): void {\n this._emitEvent(\"connected\", {\n connectionId: connectionId,\n userId: userId,\n } as OnConnectedArgs);\n }\n\n private _safeEmitDisconnected(\n connectionId: string | undefined,\n lastDisconnectedMessage: DisconnectedMessage | undefined,\n ): void {\n this._emitEvent(\"disconnected\", {\n connectionId: connectionId,\n message: lastDisconnectedMessage,\n } as OnDisconnectedArgs);\n }\n\n private _safeEmitGroupMessage(message: GroupDataMessage): void {\n this._emitEvent(\"group-message\", {\n message: message,\n } as OnGroupDataMessageArgs);\n }\n\n private _safeEmitServerMessage(message: ServerDataMessage): void {\n this._emitEvent(\"server-message\", {\n message: message,\n } as OnServerDataMessageArgs);\n }\n\n private _safeEmitStopped(): void {\n this._emitEvent(\"stopped\", {});\n }\n\n private _safeEmitRejoinGroupFailed(groupName: string, err: unknown): void {\n this._emitEvent(\"rejoin-group-failed\", {\n group: groupName,\n error: err,\n } as OnRejoinGroupFailedArgs);\n }\n\n private _buildDefaultOptions(clientOptions: WebPubSubClientOptions): WebPubSubClientOptions {\n if (clientOptions.autoReconnect == null) {\n clientOptions.autoReconnect = true;\n }\n\n if (clientOptions.autoRejoinGroups == null) {\n clientOptions.autoRejoinGroups = true;\n }\n\n if (clientOptions.protocol == null) {\n clientOptions.protocol = WebPubSubJsonReliableProtocol();\n }\n\n this._buildMessageRetryOptions(clientOptions);\n this._buildReconnectRetryOptions(clientOptions);\n\n return clientOptions;\n }\n\n private _buildMessageRetryOptions(clientOptions: WebPubSubClientOptions): void {\n if (!clientOptions.messageRetryOptions) {\n clientOptions.messageRetryOptions = {};\n }\n\n if (\n clientOptions.messageRetryOptions.maxRetries == null ||\n clientOptions.messageRetryOptions.maxRetries < 0\n ) {\n clientOptions.messageRetryOptions.maxRetries = 3;\n }\n\n if (\n clientOptions.messageRetryOptions.retryDelayInMs == null ||\n clientOptions.messageRetryOptions.retryDelayInMs < 0\n ) {\n clientOptions.messageRetryOptions.retryDelayInMs = 1000;\n }\n\n if (\n clientOptions.messageRetryOptions.maxRetryDelayInMs == null ||\n clientOptions.messageRetryOptions.maxRetryDelayInMs < 0\n ) {\n clientOptions.messageRetryOptions.maxRetryDelayInMs = 30000;\n }\n\n if (clientOptions.messageRetryOptions.mode == null) {\n clientOptions.messageRetryOptions.mode = \"Fixed\";\n }\n }\n\n private _buildReconnectRetryOptions(clientOptions: WebPubSubClientOptions): void {\n if (!clientOptions.reconnectRetryOptions) {\n clientOptions.reconnectRetryOptions = {};\n }\n\n if (\n clientOptions.reconnectRetryOptions.maxRetries == null ||\n clientOptions.reconnectRetryOptions.maxRetries < 0\n ) {\n clientOptions.reconnectRetryOptions.maxRetries = Number.MAX_VALUE;\n }\n\n if (\n clientOptions.reconnectRetryOptions.retryDelayInMs == null ||\n clientOptions.reconnectRetryOptions.retryDelayInMs < 0\n ) {\n clientOptions.reconnectRetryOptions.retryDelayInMs = 1000;\n }\n\n if (\n clientOptions.reconnectRetryOptions.maxRetryDelayInMs == null ||\n clientOptions.reconnectRetryOptions.maxRetryDelayInMs < 0\n ) {\n clientOptions.reconnectRetryOptions.maxRetryDelayInMs = 30000;\n }\n\n if (clientOptions.reconnectRetryOptions.mode == null) {\n clientOptions.reconnectRetryOptions.mode = \"Fixed\";\n }\n }\n\n private _buildRecoveryUri(): string | null {\n if (this._connectionId && this._reconnectionToken && this._uri) {\n const url = new URL(this._uri);\n url.searchParams.append(\"awps_connection_id\", this._connectionId);\n url.searchParams.append(\"awps_reconnection_token\", this._reconnectionToken);\n return url.toString();\n }\n return null;\n }\n\n private _getOrAddGroup(name: string): WebPubSubGroup {\n if (!this._groupMap.has(name)) {\n this._groupMap.set(name, new WebPubSubGroup(name));\n }\n return this._groupMap.get(name) as WebPubSubGroup;\n }\n\n private _changeState(newState: WebPubSubClientState): void {\n logger.verbose(\n `The client state transfer from ${this._state.toString()} to ${newState.toString()}`,\n );\n this._state = newState;\n }\n\n private async _operationExecuteWithRetry<T>(\n inner: () => Promise<T>,\n signal?: AbortSignalLike,\n ): Promise<T> {\n let retryAttempt = 0;\n\n while (true) {\n try {\n return await inner.call(this);\n } catch (err) {\n retryAttempt++;\n const delayInMs = this._messageRetryPolicy.nextRetryDelayInMs(retryAttempt);\n if (delayInMs == null) {\n throw err;\n }\n\n await delay(delayInMs);\n\n if (signal?.aborted) {\n throw err;\n }\n }\n }\n }\n}\n\nclass RetryPolicy {\n private _retryOptions: WebPubSubRetryOptions;\n private _maxRetriesToGetMaxDelay: number;\n\n public constructor(retryOptions: WebPubSubRetryOptions) {\n this._retryOptions = retryOptions;\n this._maxRetriesToGetMaxDelay = Math.ceil(\n Math.log2(this._retryOptions.maxRetryDelayInMs!) -\n Math.log2(this._retryOptions.retryDelayInMs!) +\n 1,\n );\n }\n\n public nextRetryDelayInMs(retryAttempt: number): number | null {\n if (retryAttempt > this._retryOptions.maxRetries!) {\n return null;\n } else {\n if (this._retryOptions.mode! === \"Fixed\") {\n return this._retryOptions.retryDelayInMs!;\n } else {\n return this._calculateExponentialDelay(retryAttempt);\n }\n }\n }\n\n private _calculateExponentialDelay(attempt: number): number {\n if (attempt >= this._maxRetriesToGetMaxDelay) {\n return this._retryOptions.maxRetryDelayInMs!;\n } else {\n return (1 << (attempt - 1)) * this._retryOptions.retryDelayInMs!;\n }\n }\n}\n\nclass WebPubSubGroup {\n public readonly name: string;\n public isJoined = false;\n\n constructor(name: string) {\n this.name = name;\n }\n}\n\nclass AckEntity {\n private readonly _promise: Promise<WebPubSubResult>;\n private _resolve?: (value: WebPubSubResult | PromiseLike<WebPubSubResult>) => void;\n private _reject?: (reason?: any) => void;\n\n constructor(ackId: number) {\n this._promise = new Promise<WebPubSubResult>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.ackId = ackId;\n }\n\n public ackId;\n\n public promise(): Promise<WebPubSubResult> {\n return this._promise;\n }\n\n public resolve(value: WebPubSubResult | PromiseLike<WebPubSubResult>): void {\n this._resolve!(value);\n }\n\n public reject(reason?: any): void {\n this._reject!(reason);\n }\n}\n\nclass SequenceId {\n private _sequenceId: number;\n private _isUpdate: boolean;\n\n constructor() {\n this._sequenceId = 0;\n this._isUpdate = false;\n }\n\n public tryUpdate(sequenceId: number): number {\n this._isUpdate = true;\n if (sequenceId > this._sequenceId) {\n const diff = sequenceId - this._sequenceId;\n this._sequenceId = sequenceId;\n return diff;\n }\n return 0;\n }\n\n public tryGetSequenceId(): [boolean, number | null] {\n if (this._isUpdate) {\n this._isUpdate = false;\n return [true, this._sequenceId];\n }\n\n return [false, null];\n }\n\n public reset(): void {\n this._sequenceId = 0;\n this._isUpdate = false;\n }\n}\n\nclass AbortableTask {\n private readonly _func: (obj?: any) => Promise<void>;\n private readonly _abortController: AbortController;\n private readonly _interval: number;\n private readonly _obj?: any;\n\n constructor(func: (obj?: any) => Promise<void>, interval: number, obj?: any) {\n this._func = func;\n this._abortController = new AbortController();\n this._interval = interval;\n this._obj = obj;\n this._start();\n }\n\n public abort(): void {\n try {\n this._abortController.abort();\n } catch {\n /** empty */\n }\n }\n\n private async _start(): Promise<void> {\n const signal = this._abortController.signal;\n while (!signal.aborted) {\n try {\n await this._func(this._obj);\n } catch {\n /** empty */\n } finally {\n await delay(this._interval);\n }\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocketClient.js","sourceRoot":"","sources":["../../../src/websocket/websocketClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,SAAS,MAAM,IAAI,CAAC;AAG3B,MAAM,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"websocketClient.js","sourceRoot":"","sources":["../../../src/websocket/websocketClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,SAAS,MAAM,IAAI,CAAC;AAG3B,MAAM,OAAO,eAAe;IAClB,OAAO,CAAY;IAE3B,YAAmB,GAAW,EAAE,YAAoB;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,aAAa,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,EAAc;QACnB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,EAA0C;QAChD,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,CAAC,EAAwB;QAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,CAAC,EAA4D;QACpE,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,KAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,IAAa,EAAE,MAAe;QAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC,IAAS,EAAE,CAAmB;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,sBAAsB;IAC1B,MAAM,CAAC,GAAW,EAAE,YAAoB;QAC7C,OAAO,IAAI,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { CloseEvent, MessageEvent, ErrorEvent } from \"ws\";\nimport WebSocket from \"ws\";\nimport type { WebSocketClientLike, WebSocketClientFactoryLike } from \"./websocketClientLike.js\";\n\nexport class WebSocketClient implements WebSocketClientLike {\n private _socket: WebSocket;\n\n public constructor(uri: string, protocolName: string) {\n this._socket = new WebSocket(uri, protocolName);\n this._socket.binaryType = \"arraybuffer\";\n }\n\n onopen(fn: () => void): void {\n this._socket.onopen = fn;\n }\n\n onclose(fn: (code: number, reason: string) => void): void {\n this._socket.onclose = (event: CloseEvent) => fn(event.code, event.reason);\n }\n\n onerror(fn: (error: any) => void): void {\n this._socket.onerror = (event: ErrorEvent) => fn(event.error);\n }\n\n onmessage(fn: (data: string | Buffer | ArrayBuffer | Buffer[]) => void): void {\n this._socket.onmessage = (event: MessageEvent) => fn(event.data);\n }\n\n close(code?: number, reason?: string): void {\n this._socket.close(code, reason);\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n send(data: any, _?: AbortSignalLike): Promise<void> {\n return new Promise((resolve, reject) => {\n this._socket.send(data, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n }\n\n isOpen(): boolean {\n return this._socket.readyState === WebSocket.OPEN;\n }\n}\n\nexport class WebSocketClientFactory implements WebSocketClientFactoryLike {\n public create(uri: string, protocolName: string): WebSocketClient {\n return new WebSocketClient(uri, protocolName);\n }\n}\n"]}
|
|
@@ -4,6 +4,18 @@
|
|
|
4
4
|
* Error when sending message failed
|
|
5
5
|
*/
|
|
6
6
|
export class SendMessageError extends Error {
|
|
7
|
+
/**
|
|
8
|
+
* Error name
|
|
9
|
+
*/
|
|
10
|
+
name;
|
|
11
|
+
/**
|
|
12
|
+
* The ack id of the message
|
|
13
|
+
*/
|
|
14
|
+
ackId;
|
|
15
|
+
/**
|
|
16
|
+
* The error details from the service
|
|
17
|
+
*/
|
|
18
|
+
errorDetail;
|
|
7
19
|
/**
|
|
8
20
|
* Initialize a SendMessageError
|
|
9
21
|
* @param message - The error message
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;;OAEG;IACI,IAAI,CAAS;IACpB;;OAEG;IACI,KAAK,CAAU;IACtB;;OAEG;IACI,WAAW,CAAmB;IACrC;;;;OAIG;IACH,YAAY,OAAe,EAAE,OAAgC;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AckMessageError } from \"../models/messages.js\";\n\n/**\n * Error when sending message failed\n */\nexport class SendMessageError extends Error {\n /**\n * Error name\n */\n public name: string;\n /**\n * The ack id of the message\n */\n public ackId?: number;\n /**\n * The error details from the service\n */\n public errorDetail?: AckMessageError;\n /**\n * Initialize a SendMessageError\n * @param message - The error message\n * @param ackMessage - The ack message\n */\n constructor(message: string, options: SendMessageErrorOptions) {\n super(message);\n this.name = \"SendMessageError\";\n this.ackId = options.ackId;\n this.errorDetail = options.errorDetail;\n }\n}\n\nexport interface SendMessageErrorOptions {\n /**\n * The ack id of the message\n */\n ackId?: number;\n /**\n * The error details from the service\n */\n errorDetail?: AckMessageError;\n}\n"]}
|
|
@@ -14,10 +14,10 @@ export function parseMessages(input) {
|
|
|
14
14
|
let returnMessage;
|
|
15
15
|
if (typedMessage.type === "system") {
|
|
16
16
|
if (typedMessage.event === "connected") {
|
|
17
|
-
returnMessage =
|
|
17
|
+
returnMessage = { ...parsedMessage, kind: "connected" };
|
|
18
18
|
}
|
|
19
19
|
else if (typedMessage.event === "disconnected") {
|
|
20
|
-
returnMessage =
|
|
20
|
+
returnMessage = { ...parsedMessage, kind: "disconnected" };
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
23
|
// Forward compatible
|
|
@@ -30,14 +30,18 @@ export function parseMessages(input) {
|
|
|
30
30
|
if (data === null) {
|
|
31
31
|
return null;
|
|
32
32
|
}
|
|
33
|
-
returnMessage =
|
|
33
|
+
returnMessage = { ...parsedMessage, data: data, kind: "groupData" };
|
|
34
34
|
}
|
|
35
35
|
else if (typedMessage.from === "server") {
|
|
36
36
|
const data = parsePayload(parsedMessage.data, parsedMessage.dataType);
|
|
37
37
|
if (data === null) {
|
|
38
38
|
return null;
|
|
39
39
|
}
|
|
40
|
-
returnMessage =
|
|
40
|
+
returnMessage = {
|
|
41
|
+
...parsedMessage,
|
|
42
|
+
data: data,
|
|
43
|
+
kind: "serverData",
|
|
44
|
+
};
|
|
41
45
|
}
|
|
42
46
|
else {
|
|
43
47
|
// Forward compatible
|
|
@@ -45,7 +49,7 @@ export function parseMessages(input) {
|
|
|
45
49
|
}
|
|
46
50
|
}
|
|
47
51
|
else if (typedMessage.type === "ack") {
|
|
48
|
-
returnMessage =
|
|
52
|
+
returnMessage = { ...parsedMessage, kind: "ack" };
|
|
49
53
|
}
|
|
50
54
|
else {
|
|
51
55
|
// Forward compatible
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonProtocolBase.js","sourceRoot":"","sources":["../../../src/protocols/jsonProtocolBase.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAYlC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,2HAA2H;IAC3H,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,aAA8D,CAAC;IACpF,IAAI,aAA+B,CAAC;IAEpC,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,IAAI,YAAY,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACvC,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"jsonProtocolBase.js","sourceRoot":"","sources":["../../../src/protocols/jsonProtocolBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n AckMessage,\n ConnectedMessage,\n DisconnectedMessage,\n GroupDataMessage,\n ServerDataMessage,\n WebPubSubDataType,\n WebPubSubMessage,\n} from \"../models/messages.js\";\nimport type { JSONTypes } from \"../webPubSubClient.js\";\nimport { Buffer } from \"buffer\";\n\nexport function parseMessages(input: string): WebPubSubMessage | null {\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\n if (typeof input !== \"string\") {\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\n }\n\n if (!input) {\n throw new Error(\"No input\");\n }\n\n const parsedMessage = JSON.parse(input);\n const typedMessage = parsedMessage as { type: string; from: string; event: string };\n let returnMessage: WebPubSubMessage;\n\n if (typedMessage.type === \"system\") {\n if (typedMessage.event === \"connected\") {\n returnMessage = { ...parsedMessage, kind: \"connected\" } as ConnectedMessage;\n } else if (typedMessage.event === \"disconnected\") {\n returnMessage = { ...parsedMessage, kind: \"disconnected\" } as DisconnectedMessage;\n } else {\n // Forward compatible\n return null;\n }\n } else if (typedMessage.type === \"message\") {\n if (typedMessage.from === \"group\") {\n const data = parsePayload(parsedMessage.data, parsedMessage.dataType as WebPubSubDataType);\n if (data === null) {\n return null;\n }\n returnMessage = { ...parsedMessage, data: data, kind: \"groupData\" } as GroupDataMessage;\n } else if (typedMessage.from === \"server\") {\n const data = parsePayload(parsedMessage.data, parsedMessage.dataType as WebPubSubDataType);\n if (data === null) {\n return null;\n }\n returnMessage = {\n ...parsedMessage,\n data: data,\n kind: \"serverData\",\n } as ServerDataMessage;\n } else {\n // Forward compatible\n return null;\n }\n } else if (typedMessage.type === \"ack\") {\n returnMessage = { ...parsedMessage, kind: \"ack\" } as AckMessage;\n } else {\n // Forward compatible\n return null;\n }\n return returnMessage;\n}\n\nexport function writeMessage(message: WebPubSubMessage): string {\n let data: any;\n switch (message.kind) {\n case \"joinGroup\": {\n data = { type: \"joinGroup\", group: message.group, ackId: message.ackId } as JoinGroupData;\n break;\n }\n case \"leaveGroup\": {\n data = { type: \"leaveGroup\", group: message.group, ackId: message.ackId } as LeaveGroupData;\n break;\n }\n case \"sendEvent\": {\n data = {\n type: \"event\",\n event: message.event,\n ackId: message.ackId,\n dataType: message.dataType,\n data: getPayload(message.data, message.dataType),\n } as SendEventData;\n break;\n }\n case \"sendToGroup\": {\n data = {\n type: \"sendToGroup\",\n group: message.group,\n ackId: message.ackId,\n dataType: message.dataType,\n data: getPayload(message.data, message.dataType),\n noEcho: message.noEcho,\n } as SendToGroupData;\n break;\n }\n case \"sequenceAck\": {\n data = { type: \"sequenceAck\", sequenceId: message.sequenceId } as SequenceAckData;\n break;\n }\n default: {\n throw new Error(`Unsupported type: ${message.kind}`);\n }\n }\n\n return JSON.stringify(data);\n}\n\ninterface JoinGroupData {\n readonly type: \"joinGroup\";\n group: string;\n ackId?: number;\n}\n\ninterface LeaveGroupData {\n readonly type: \"leaveGroup\";\n group: string;\n ackId?: number;\n}\n\ninterface SendToGroupData {\n readonly type: \"sendToGroup\";\n group: string;\n ackId?: number;\n dataType: WebPubSubDataType;\n data: any;\n noEcho: boolean;\n}\n\ninterface SendEventData {\n readonly type: \"event\";\n ackId?: number;\n dataType: WebPubSubDataType;\n data: any;\n event: string;\n}\n\ninterface SequenceAckData {\n readonly type: \"sequenceAck\";\n sequenceId: number;\n}\n\nfunction getPayload(data: JSONTypes | ArrayBuffer, dataType: WebPubSubDataType): any {\n switch (dataType) {\n case \"text\": {\n if (typeof data !== \"string\") {\n throw new TypeError(\"Message must be a string.\");\n }\n return data;\n }\n case \"json\": {\n return data;\n }\n case \"binary\":\n case \"protobuf\": {\n if (data instanceof ArrayBuffer) {\n return Buffer.from(data).toString(\"base64\");\n }\n throw new TypeError(\"Message must be a ArrayBuffer\");\n }\n }\n}\n\nfunction parsePayload(data: any, dataType: string): JSONTypes | ArrayBuffer | null {\n if (dataType === \"text\") {\n if (typeof data !== \"string\") {\n throw new TypeError(\"Message must be a string when dataType is text\");\n }\n return data as string;\n } else if (dataType === \"json\") {\n return data as JSONTypes;\n } else if (dataType === \"binary\" || dataType === \"protobuf\") {\n const buf = Buffer.from(data as string, \"base64\");\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) as ArrayBuffer;\n } else {\n // Forward compatible\n return null;\n }\n}\n"]}
|
|
@@ -5,16 +5,14 @@ import * as base from "./jsonProtocolBase.js";
|
|
|
5
5
|
* The "json.webpubsub.azure.v1" protocol
|
|
6
6
|
*/
|
|
7
7
|
export class WebPubSubJsonProtocolImpl {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.name = "json.webpubsub.azure.v1";
|
|
17
|
-
}
|
|
8
|
+
/**
|
|
9
|
+
* True if the protocol supports reliable features
|
|
10
|
+
*/
|
|
11
|
+
isReliableSubProtocol = false;
|
|
12
|
+
/**
|
|
13
|
+
* The name of subprotocol. Name will be used in websocket subprotocol
|
|
14
|
+
*/
|
|
15
|
+
name = "json.webpubsub.azure.v1";
|
|
18
16
|
/**
|
|
19
17
|
* Creates WebPubSubMessage objects from the specified serialized representation.
|
|
20
18
|
* @param input - The serialized representation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webPubSubJsonProtocol.js","sourceRoot":"","sources":["../../../src/protocols/webPubSubJsonProtocol.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,yBAAyB;
|
|
1
|
+
{"version":3,"file":"webPubSubJsonProtocol.js","sourceRoot":"","sources":["../../../src/protocols/webPubSubJsonProtocol.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,yBAAyB;IACpC;;OAEG;IACa,qBAAqB,GAAG,KAAK,CAAC;IAE9C;;OAEG;IACa,IAAI,GAAG,yBAAyB,CAAC;IAEjD;;;OAGG;IACI,aAAa,CAAC,KAAa;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,OAAyB;QAC3C,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { WebPubSubClientProtocol } from \"./index.js\";\nimport type { WebPubSubMessage } from \"../models/messages.js\";\nimport * as base from \"./jsonProtocolBase.js\";\n\n/**\n * The \"json.webpubsub.azure.v1\" protocol\n */\nexport class WebPubSubJsonProtocolImpl implements WebPubSubClientProtocol {\n /**\n * True if the protocol supports reliable features\n */\n public readonly isReliableSubProtocol = false;\n\n /**\n * The name of subprotocol. Name will be used in websocket subprotocol\n */\n public readonly name = \"json.webpubsub.azure.v1\";\n\n /**\n * Creates WebPubSubMessage objects from the specified serialized representation.\n * @param input - The serialized representation\n */\n public parseMessages(input: string): WebPubSubMessage | null {\n return base.parseMessages(input);\n }\n\n /**\n * Write WebPubSubMessage to string\n * @param message - The message to be written\n */\n public writeMessage(message: WebPubSubMessage): string {\n return base.writeMessage(message);\n }\n}\n"]}
|
|
@@ -5,16 +5,14 @@ import * as base from "./jsonProtocolBase.js";
|
|
|
5
5
|
* The "json.reliable.webpubsub.azure.v1" protocol
|
|
6
6
|
*/
|
|
7
7
|
export class WebPubSubJsonReliableProtocolImpl {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.name = "json.reliable.webpubsub.azure.v1";
|
|
17
|
-
}
|
|
8
|
+
/**
|
|
9
|
+
* True if the protocol supports reliable features
|
|
10
|
+
*/
|
|
11
|
+
isReliableSubProtocol = true;
|
|
12
|
+
/**
|
|
13
|
+
* The name of subprotocol. Name will be used in websocket subprotocol
|
|
14
|
+
*/
|
|
15
|
+
name = "json.reliable.webpubsub.azure.v1";
|
|
18
16
|
/**
|
|
19
17
|
* Creates WebPubSubMessage objects from the specified serialized representation.
|
|
20
18
|
* @param input - The serialized representation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webPubSubJsonReliableProtocol.js","sourceRoot":"","sources":["../../../src/protocols/webPubSubJsonReliableProtocol.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,iCAAiC;
|
|
1
|
+
{"version":3,"file":"webPubSubJsonReliableProtocol.js","sourceRoot":"","sources":["../../../src/protocols/webPubSubJsonReliableProtocol.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,iCAAiC;IAC5C;;OAEG;IACa,qBAAqB,GAAG,IAAI,CAAC;IAE7C;;OAEG;IACa,IAAI,GAAG,kCAAkC,CAAC;IAE1D;;;OAGG;IACI,aAAa,CAAC,KAAa;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,OAAyB;QAC3C,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { WebPubSubClientProtocol } from \"./index.js\";\nimport type { WebPubSubMessage } from \"../models/messages.js\";\nimport * as base from \"./jsonProtocolBase.js\";\n\n/**\n * The \"json.reliable.webpubsub.azure.v1\" protocol\n */\nexport class WebPubSubJsonReliableProtocolImpl implements WebPubSubClientProtocol {\n /**\n * True if the protocol supports reliable features\n */\n public readonly isReliableSubProtocol = true;\n\n /**\n * The name of subprotocol. Name will be used in websocket subprotocol\n */\n public readonly name = \"json.reliable.webpubsub.azure.v1\";\n\n /**\n * Creates WebPubSubMessage objects from the specified serialized representation.\n * @param input - The serialized representation\n */\n public parseMessages(input: string): WebPubSubMessage | null {\n return base.parseMessages(input);\n }\n\n /**\n * Write WebPubSubMessage to string\n * @param message - The message to be written\n */\n public writeMessage(message: WebPubSubMessage): string {\n return base.writeMessage(message);\n }\n}\n"]}
|