cojson-transport-ws 0.8.5 → 0.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"createWebSocketPeer.test.js","sourceRoot":"","sources":["../../src/tests/createWebSocketPeer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createWebSocketPeer.test.js","sourceRoot":"","sources":["../../src/tests/createWebSocketPeer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAU,MAAM,QAAQ,CAAC;AAC5D,OAAO,EACH,YAAY,EACZ,6BAA6B,EAC7B,mBAAmB,GAEtB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAElF,SAAS,KAAK,CAAC,OAAyC,EAAE;IACtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEnE,MAAM,aAAa,GAAG;QAClB,UAAU,EAAE,CAAC;QACb,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC5D,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;QACF,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;KACmB,CAAC;IAErC,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC7B,EAAE,EAAE,WAAW;QACf,SAAS,EAAE,aAAa;QACxB,IAAI,EAAE,QAAQ;QACd,iBAAiB,EAAE,IAAI;QACvB,GAAG,IAAI;KACV,CAAC,CAAC;IAEH,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAuB;IAC9C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QAEzB,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAErB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAErB,CAAC;QACF,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE3C,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE5C,YAAY,EAAE,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QAE1C,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAErB,CAAC;QACF,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEhD,cAAc,EAAE,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE9D,MAAM,EAAE,CAAC,wBAAwB,CAAC,KAAM,CAAC,CAAC;QAE1C,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAEpD,EAAE,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,CAAC;QAExC,MAAM,WAAW,GAAgB;YAC7B,MAAM,EAAE,OAAO;YACf,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,EAAE;SACf,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhD,MAAM,OAAO,CAAC,GAAG,EAAE;YACf,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC3C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAC9B,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,CAAC;QAExC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACvC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAgB;YAC1B,MAAM,EAAE,OAAO;YACf,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,EAAE;SACf,CAAC;QAEF,MAAM,QAAQ,GAAgB;YAC1B,MAAM,EAAE,SAAS;YACjB,EAAE,EAAE,SAAS;YACb,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,CAAC;SACd,CAAC;QAEF,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,MAAM,OAAO,CAAC,GAAG,EAAE;YACf,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1E,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;QAE9D,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QAExC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEtB,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACtC,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,CAAC;YAExC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBACvC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,OAAO;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAC;YAEF,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,SAAS;gBACb,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,CAAC;aACd,CAAC;YAEF,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElC,MAAM,OAAO,CAAC,GAAG,EAAE;gBACf,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC3C,CAAC,QAAQ,EAAE,QAAQ,CAAC;iBACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBACjC,IAAI,CAAC,IAAI,CAAC,CAClB,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,CAAC;YAExC,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,OAAO;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAC;YAEF,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,SAAS;gBACb,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,CAAC;aACd,CAAC;YAEF,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAEtB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC3C,CAAC,QAAQ,EAAE,QAAQ,CAAC;iBACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBACjC,IAAI,CAAC,IAAI,CAAC,CAClB,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,CAAC;YAExC,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,OAAO;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAC;YACF,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,SAAS;gBACb,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,CAAC;aACd,CAAC;YAEF,MAAM,MAAM,GAAkB,EAAE,CAAC;YAEjC,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,iCAAiC,EAAE,CAAC;gBAC3F,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;YAED,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElC,MAAM,OAAO,CAAC,GAAG,EAAE;gBACf,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC3C,iBAAiB,CAAC,MAAM,CAAC,CAC5B,CAAC;YAEF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,uBAAuB,CAC9C,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC3B,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;YAChG,EAAE,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,CAAC;YAExC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBACvC,aAAa,CAAC,cAAc,GAAG,YAAY,GAAG,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,OAAO;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAC;YACF,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,SAAS;gBACb,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,CAAC;aACd,CAAC;YAEF,MAAM,MAAM,GAAkB,EAAE,CAAC;YAEjC,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,iCAAiC,EAAE,CAAC;gBAC3F,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;YAED,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElC,MAAM,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;YAEvC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC3C,iBAAiB,CAAC,MAAM,CAAC,CAC5B,CAAC;YAEF,aAAa,CAAC,cAAc,GAAG,CAAC,CAAC;YAEjC,MAAM,EAAE,CAAC,wBAAwB,CAC7B,6BAA6B,GAAG,CAAC,CACpC,CAAC;YAEF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,uBAAuB,CAC9C,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC3B,CAAC;YAEF,EAAE,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACvC,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;YAEpE,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,OAAO;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAC;YAEF,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,SAAS;gBACb,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,CAAC;aACd,CAAC;YAEF,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElC,MAAM,OAAO,CAAC,GAAG,EAAE;gBACf,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,uBAAuB,CAC9C,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC3B,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,uBAAuB,CAC9C,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC3B,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;gBAC7C,iBAAiB,EAAE,KAAK;aAC3B,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,OAAO;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAC;YAEF,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEhD,cAAc,EAAE,CACZ,IAAI,YAAY,CAAC,SAAS,EAAE;gBACxB,IAAI,EAAE,KAAK,CAAC,IAAI,CACZ,EAAE,MAAM,EAAE,CAAC,EAAE,EACb,GAAG,EAAE,CAAC,QAAQ,CACjB;qBACI,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;qBACjC,IAAI,CAAC,IAAI,CAAC;aAClB,CAAC,CACL,CAAC;YAGF,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,SAAS;gBACb,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,CAAC;aACd,CAAC;YAEF,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElC,MAAM,OAAO,CAAC,GAAG,EAAE;gBACf,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC3C,CAAC,QAAQ,EAAE,QAAQ,CAAC;iBACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBACjC,IAAI,CAAC,IAAI,CAAC,CAClB,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAC9F,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;gBAC7C,iBAAiB,EAAE,KAAK;aAC3B,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,OAAO;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAC;YAEF,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEhD,cAAc,EAAE,CACZ,IAAI,YAAY,CAAC,SAAS,EAAE;gBACxB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;aACjC,CAAC,CACL,CAAC;YAGF,MAAM,QAAQ,GAAgB;gBAC1B,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,SAAS;gBACb,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,CAAC;aACd,CAAC;YAEF,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElC,MAAM,OAAO,CAAC,GAAG,EAAE;gBACf,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,uBAAuB,CAC9C,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC3B,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,uBAAuB,CAC9C,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC3B,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,SAAS,OAAO,CAAC,QAA8B;IAC3C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,GAAG,EAAE;YACrB,IAAI,CAAC;gBACD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAChC,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC9B,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;YAEpC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,CAAC;gBACjB,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,EAAE,GAAG,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cojson-transport-ws",
3
3
  "type": "module",
4
- "version": "0.8.5",
4
+ "version": "0.8.7",
5
5
  "main": "dist/index.js",
6
6
  "types": "src/index.ts",
7
7
  "license": "MIT",
@@ -0,0 +1,47 @@
1
+ import { SyncMessage } from "cojson";
2
+ import { addMessageToBacklog } from "./serialization.js";
3
+
4
+ export const MAX_OUTGOING_MESSAGES_CHUNK_BYTES = 25_000;
5
+
6
+ export class BatchedOutgoingMessages {
7
+ private backlog: string = '';
8
+ private timeout: ReturnType<typeof setTimeout> | null = null;
9
+
10
+ constructor(private send: (messages: string) => void) { }
11
+
12
+ push(msg: SyncMessage) {
13
+ const payload = addMessageToBacklog(this.backlog, msg);
14
+
15
+ if (this.timeout) {
16
+ clearTimeout(this.timeout);
17
+ }
18
+
19
+ const maxChunkSizeReached = payload.length >= MAX_OUTGOING_MESSAGES_CHUNK_BYTES;
20
+ const backlogExists = this.backlog.length > 0;
21
+
22
+ if (maxChunkSizeReached && backlogExists) {
23
+ this.sendMessagesInBulk();
24
+ this.backlog = addMessageToBacklog('', msg);
25
+ this.timeout = setTimeout(() => {
26
+ this.sendMessagesInBulk();
27
+ }, 0);
28
+ } else if (maxChunkSizeReached) {
29
+ this.backlog = payload;
30
+ this.sendMessagesInBulk();
31
+ } else {
32
+ this.backlog = payload;
33
+ this.timeout = setTimeout(() => {
34
+ this.sendMessagesInBulk();
35
+ }, 0);
36
+ }
37
+ }
38
+
39
+ sendMessagesInBulk() {
40
+ this.send(this.backlog);
41
+ this.backlog = '';
42
+ }
43
+
44
+ close() {
45
+ this.sendMessagesInBulk();
46
+ }
47
+ }
package/src/index.ts CHANGED
@@ -5,30 +5,28 @@ import {
5
5
  SyncMessage,
6
6
  cojsonInternals,
7
7
  } from "cojson";
8
- import { AnyWebSocket, PingMsg } from "./types.js";
9
-
10
- const g: typeof globalThis & {
11
- jazzPings?: {
12
- received: number;
13
- sent: number;
14
- dc: string;
15
- }[];
16
- } = globalThis;
8
+ import { AnyWebSocket } from "./types.js";
9
+ import { BatchedOutgoingMessages } from "./BatchedOutgoingMessages.js";
10
+ import { deserializeMessages } from "./serialization.js";
17
11
 
18
12
  export const BUFFER_LIMIT = 100_000;
19
13
  export const BUFFER_LIMIT_POLLING_INTERVAL = 10;
20
14
 
15
+ export type CreateWebSocketPeerOpts = {
16
+ id: string;
17
+ websocket: AnyWebSocket;
18
+ role: Peer["role"];
19
+ expectPings?: boolean;
20
+ batchingByDefault?: boolean;
21
+ };
22
+
21
23
  export function createWebSocketPeer({
22
24
  id,
23
25
  websocket,
24
26
  role,
25
27
  expectPings = true,
26
- }: {
27
- id: string;
28
- websocket: AnyWebSocket;
29
- role: Peer["role"];
30
- expectPings?: boolean;
31
- }): Peer {
28
+ batchingByDefault = true,
29
+ }: CreateWebSocketPeerOpts): Peer {
32
30
  const incoming = new cojsonInternals.Channel<
33
31
  SyncMessage | DisconnectedError | PingTimeoutError
34
32
  >();
@@ -43,26 +41,25 @@ export function createWebSocketPeer({
43
41
 
44
42
  let pingTimeout: ReturnType<typeof setTimeout> | null = null;
45
43
 
44
+ let supportsBatching = batchingByDefault;
45
+
46
46
  websocket.addEventListener("message", function handleIncomingMsg(event) {
47
- const msg = JSON.parse(event.data as string);
48
- pingTimeout && clearTimeout(pingTimeout);
49
-
50
- if (msg?.type === "ping") {
51
- const ping = msg as PingMsg;
52
- g.jazzPings ||= [];
53
- g.jazzPings.push({
54
- received: Date.now(),
55
- sent: ping.time,
56
- dc: ping.dc,
57
- });
58
- } else {
59
- incoming
60
- .push(msg)
61
- .catch((e) =>
62
- console.error("Error while pushing incoming msg", e),
63
- );
47
+ const result = deserializeMessages(event.data as string);
48
+
49
+ if (!result.ok) {
50
+ console.error("Error while deserializing messages", event.data, result.error);
51
+ return;
52
+ }
53
+
54
+ const { messages } = result;
55
+
56
+ if (!supportsBatching && messages.length > 1) {
57
+ // If more than one message is received, the other peer supports batching
58
+ supportsBatching = true;
64
59
  }
60
+
65
61
  if (expectPings) {
62
+ pingTimeout && clearTimeout(pingTimeout);
66
63
  pingTimeout = setTimeout(() => {
67
64
  incoming
68
65
  .push("PingTimeout")
@@ -71,6 +68,16 @@ export function createWebSocketPeer({
71
68
  );
72
69
  }, 10_000);
73
70
  }
71
+
72
+ for (const msg of messages) {
73
+ if (msg && "action" in msg) {
74
+ incoming
75
+ .push(msg)
76
+ .catch((e) =>
77
+ console.error("Error while pushing incoming msg", e),
78
+ );
79
+ }
80
+ }
74
81
  });
75
82
 
76
83
  const websocketOpen = new Promise<void>((resolve) => {
@@ -81,20 +88,37 @@ export function createWebSocketPeer({
81
88
  }
82
89
  });
83
90
 
91
+ const outgoingMessages = new BatchedOutgoingMessages((messages) => {
92
+ if (websocket.readyState === 1) {
93
+ websocket.send(
94
+ messages,
95
+ );
96
+ }
97
+ });
98
+
84
99
  async function pushMessage(msg: SyncMessage) {
85
100
  if (websocket.readyState !== 1) {
86
101
  await websocketOpen;
87
102
  }
88
103
 
89
- while (websocket.bufferedAmount > BUFFER_LIMIT && websocket.readyState === 1) {
90
- await new Promise<void>((resolve) => setTimeout(resolve, BUFFER_LIMIT_POLLING_INTERVAL));
104
+ while (
105
+ websocket.bufferedAmount > BUFFER_LIMIT &&
106
+ websocket.readyState === 1
107
+ ) {
108
+ await new Promise<void>((resolve) =>
109
+ setTimeout(resolve, BUFFER_LIMIT_POLLING_INTERVAL),
110
+ );
91
111
  }
92
112
 
93
113
  if (websocket.readyState !== 1) {
94
114
  return;
95
115
  }
96
116
 
97
- websocket.send(JSON.stringify(msg));
117
+ if (!supportsBatching) {
118
+ websocket.send(JSON.stringify(msg));
119
+ } else {
120
+ outgoingMessages.push(msg);
121
+ }
98
122
  }
99
123
 
100
124
  return {
@@ -104,6 +128,10 @@ export function createWebSocketPeer({
104
128
  push: pushMessage,
105
129
  close() {
106
130
  console.log("Trying to close", id, websocket.readyState);
131
+ if (supportsBatching) {
132
+ outgoingMessages.close();
133
+ }
134
+
107
135
  if (websocket.readyState === 0) {
108
136
  websocket.addEventListener(
109
137
  "open",
@@ -0,0 +1,24 @@
1
+ import { SyncMessage } from "cojson";
2
+ import { PingMsg } from "./types.js";
3
+
4
+ export function addMessageToBacklog(backlog: string, message: SyncMessage) {
5
+ if (!backlog) {
6
+ return JSON.stringify(message);
7
+ }
8
+ return `${backlog}\n${JSON.stringify(message)}`;
9
+ }
10
+
11
+ export function deserializeMessages(messages: string) {
12
+ try {
13
+ return {
14
+ ok: true,
15
+ messages: messages.split("\n").map((msg) => JSON.parse(msg)) as SyncMessage[] | PingMsg[],
16
+ } as const;
17
+ } catch (e) {
18
+ console.error("Error while deserializing messages", e);
19
+ return {
20
+ ok: false,
21
+ error: e,
22
+ } as const;
23
+ }
24
+ }
@@ -0,0 +1,114 @@
1
+ import { describe, test, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { BatchedOutgoingMessages, MAX_OUTGOING_MESSAGES_CHUNK_BYTES } from "../BatchedOutgoingMessages.js";
3
+ import { SyncMessage } from "cojson";
4
+ import { CoValueKnownState } from "cojson/src/sync.js";
5
+
6
+ beforeEach(() => {
7
+ vi.useFakeTimers();
8
+ })
9
+
10
+ afterEach(() => {
11
+ vi.useRealTimers();
12
+ })
13
+
14
+ describe("BatchedOutgoingMessages", () => {
15
+ function setup() {
16
+ const sendMock = vi.fn();
17
+ const batchedMessages = new BatchedOutgoingMessages(sendMock);
18
+ return { sendMock, batchedMessages };
19
+ }
20
+
21
+ test("should batch messages and send them after a timeout", () => {
22
+ const { sendMock, batchedMessages } = setup();
23
+ const message1: SyncMessage = { action: "known", id: "co_z1", header: false, sessions: {} };
24
+ const message2: SyncMessage = { action: "known", id: "co_z2", header: false, sessions: {} };
25
+
26
+ batchedMessages.push(message1);
27
+ batchedMessages.push(message2);
28
+
29
+ expect(sendMock).not.toHaveBeenCalled();
30
+
31
+ vi.runAllTimers();
32
+
33
+ expect(sendMock).toHaveBeenCalledTimes(1);
34
+ expect(sendMock).toHaveBeenCalledWith(
35
+ `${JSON.stringify(message1)}\n${JSON.stringify(message2)}`
36
+ );
37
+ });
38
+
39
+ test("should send messages immediately when reaching MAX_OUTGOING_MESSAGES_CHUNK_BYTES", () => {
40
+ const { sendMock, batchedMessages } = setup();
41
+ const largeMessage: SyncMessage = {
42
+ action: "known",
43
+ id: "co_z_large",
44
+ header: false,
45
+ sessions: {
46
+ // Add a large payload to exceed MAX_OUTGOING_MESSAGES_CHUNK_BYTES
47
+ payload: "x".repeat(MAX_OUTGOING_MESSAGES_CHUNK_BYTES)
48
+ } as CoValueKnownState['sessions'],
49
+
50
+ };
51
+
52
+ batchedMessages.push(largeMessage);
53
+
54
+ expect(sendMock).toHaveBeenCalledTimes(1);
55
+ expect(sendMock).toHaveBeenCalledWith(JSON.stringify(largeMessage));
56
+ });
57
+
58
+ test("should send accumulated messages before a large message", () => {
59
+ const { sendMock, batchedMessages } = setup();
60
+ const smallMessage: SyncMessage = { action: "known", id: "co_z_small", header: false, sessions: {} };
61
+ const largeMessage: SyncMessage = {
62
+ action: "known",
63
+ id: "co_z_large",
64
+ header: false,
65
+ sessions: {
66
+ // Add a large payload to exceed MAX_OUTGOING_MESSAGES_CHUNK_BYTES
67
+ payload: "x".repeat(MAX_OUTGOING_MESSAGES_CHUNK_BYTES)
68
+ } as CoValueKnownState['sessions'],
69
+ };
70
+
71
+ batchedMessages.push(smallMessage);
72
+ batchedMessages.push(largeMessage);
73
+
74
+ vi.runAllTimers();
75
+
76
+ expect(sendMock).toHaveBeenCalledTimes(2);
77
+ expect(sendMock).toHaveBeenNthCalledWith(1, JSON.stringify(smallMessage));
78
+ expect(sendMock).toHaveBeenNthCalledWith(2, JSON.stringify(largeMessage));
79
+ });
80
+
81
+ test("should send remaining messages on close", () => {
82
+ const { sendMock, batchedMessages } = setup();
83
+ const message: SyncMessage = { action: "known", id: "co_z_test", header: false, sessions: {} };
84
+
85
+ batchedMessages.push(message);
86
+ expect(sendMock).not.toHaveBeenCalled();
87
+
88
+ batchedMessages.close();
89
+
90
+ expect(sendMock).toHaveBeenCalledTimes(1);
91
+ expect(sendMock).toHaveBeenCalledWith(JSON.stringify(message));
92
+ });
93
+
94
+ test("should clear timeout when pushing new messages", () => {
95
+ const { sendMock, batchedMessages } = setup();
96
+ const message1: SyncMessage = { action: "known", id: "co_z1", header: false, sessions: {} };
97
+ const message2: SyncMessage = { action: "known", id: "co_z2", header: false, sessions: {} };
98
+
99
+ batchedMessages.push(message1);
100
+
101
+ const clearTimeoutSpy = vi.spyOn(global, 'clearTimeout');
102
+
103
+ batchedMessages.push(message2);
104
+
105
+ expect(clearTimeoutSpy).toHaveBeenCalled();
106
+
107
+ vi.runAllTimers();
108
+
109
+ expect(sendMock).toHaveBeenCalledTimes(1);
110
+ expect(sendMock).toHaveBeenCalledWith(
111
+ `${JSON.stringify(message1)}\n${JSON.stringify(message2)}`
112
+ );
113
+ });
114
+ });