@agentdance/node-webrtc-dtls 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,yDAAyD;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EACL,WAAW,EAEX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,UAAU,EACV,qBAAqB,EAKrB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,iCAAiC,EACjC,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,GAAG,EACH,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,6BAA6B,EAC7B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAA2C,MAAM,YAAY,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,CAAC;AAkBrB,+DAA+D;AAC/D,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAS5B,MAAM,OAAO,aAAc,SAAQ,YAAY;IACpC,gBAAgB,CAAkB;IAEnC,MAAM,GAAc,SAAS,CAAC,GAAG,CAAC;IACzB,IAAI,CAAsB;IAC1B,iBAAiB,CAAmD;IACpE,IAAI,CAAS;IAEtB,MAAM,CAAuC;IAC7C,aAAa,CAAmD;IAChE,YAAY,CAAqC;IAEjD,GAAG,GAAqB;QAC9B,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,CAAC;KAClB,CAAC;IAEM,WAAW,CAA0B;IACrC,UAAU,GAAG,CAAC,CAAC;IACf,QAAQ,GAAG,EAAE,CAAC;IACd,QAAQ,CAAiC;IAChC,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAExD,YAAY,OAA6B;QACvC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,WAAW,IAAI,6BAA6B,EAAE,CAAC;IACjF,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;IAC3C,CAAC;IAED,eAAe,CAAC,EAA0B;QACxC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC;QAEnC,OAAO,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAC1D,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YAAE,OAAO;QACjF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,+EAA+E;IACvE,MAAM,CAAU,oBAAoB,GAAG,KAAK,CAAC;IAErD,IAAI,CAAC,IAAY;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QACD,uDAAuD;QACvD,MAAM,MAAM,GAAG,aAAa,CAAC,oBAAoB,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC7F,MAAM,GAAG,GAAG,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YAAE,OAAO;QAC7C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACvG,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,gFAAgF;IAExE,cAAc,CAAC,MAAkB;QACvC,QAAQ,MAAM,CAAC,WAAW,EAAE,CAAC;YAC3B,KAAK,WAAW,CAAC,SAAS;gBAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAAC,MAAM;YAC7E,KAAK,WAAW,CAAC,gBAAgB;gBAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAAC,MAAM;YAC1E,KAAK,WAAW,CAAC,eAAe;gBAAE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAAC,MAAM;YAC9E,KAAK,WAAW,CAAC,KAAK;gBAAY,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAAC,MAAM;QACtE,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,MAAkB;QAChD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ;gBACN,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW;oBAClC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;oBAC7B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,+BAA+B;QACzC,CAAC;QAED,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE;gBAAE,MAAM;YACtC,MAAM,UAAU,GACd,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,EAAE,CAAC;gBAC1B,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAE,IAAI,CAAC,CAAC;gBAC1B,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAE,CAAC;YACtB,IAAI,GAAG,GAAG,EAAE,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM;gBAAE,MAAM;YAEnD,MAAM,GAAG,GAAG,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,cAAc,CAAC;YAExC,uEAAuE;YACvE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3E,GAAG,IAAI,OAAO,CAAC;YAEf,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;gBAAE,OAAO;QAC/C,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,GAAqB;QACpD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,gFAAgF;IAExE,gBAAgB,CAAC,GAAqB;QAC5C,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACtC,MAAM,GAAG,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC/C,yDAAyD;gBACzD,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CACrD,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;gBACvE,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9D,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,KAAK,EAAE,CAAC;oBAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBAChE,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC7B,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBAChF,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACrC,MAAM,GAAG,GAAG,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;wBAC7B,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;wBAClE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBACnC,GAAG,CAAC,SAAS;qBACd,CAAC,CAAC;oBACH,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;wBAClD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC,CAAC;wBACzE,OAAO;oBACT,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC,SAAS,CAAC;gBAC9C,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,eAAe;gBAChC,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CACjD,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAC;gBACF,MAAM;YACR,KAAK,aAAa,CAAC,QAAQ;gBACzB,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM;QACV,CAAC;IACH,CAAC;IAED,gFAAgF;IAExE,gBAAgB,CAAC,GAAqB;QAC5C,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,CAAC,OAAO,QAAQ,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACnF,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC/B,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,gDAAgD;oBAChD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBAC/C,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;oBACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;oBACvB,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;oBAC5B,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,iCAAiC;oBACjC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC1D,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;wBAC7C,OAAO;oBACT,CAAC;oBACD,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBAC/C,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAC9C,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACrC,MAAM,GAAG,GAAG,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC,SAAS,CAAC;gBAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;oBAC7C,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,0BAA0B,CACnD,IAAI,CAAC,GAAG,CAAC,cAAc,EACvB,GAAG,CAAC,SAAS,CACd,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,QAAQ;gBACzB,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM;QACV,CAAC;IACH,CAAC;IAED,gFAAgF;IAExE,KAAK,CAAC,gBAAgB,CAAC,MAAc;QAC3C,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;QACxC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC;QAErC,MAAM,KAAK,GAAgB;YACzB,aAAa,EAAE,gBAAgB;YAC/B,MAAM,EAAE,YAAY;YACpB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1B,MAAM;YACN,YAAY,EAAE;gBACZ,YAAY,CAAC,uCAAuC;gBACpD,YAAY,CAAC,qCAAqC;aACnD;YACD,kBAAkB,EAAE,CAAC,CAAC,CAAC;YACvB,UAAU,EAAE;gBACV,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,CAAC,EAAE;gBAC1J,EAAE,IAAI,EAAE,aAAa,CAAC,eAAe,EAAE,IAAI,EAAE,6BAA6B,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE;gBACpG,EAAE,IAAI,EAAE,aAAa,CAAC,mBAAmB,EAAE,IAAI,EAAE,iCAAiC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE;aACtI;SACF,CAAC;QACF,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1J,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YAC1F,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,0BAA0B,CACnD,IAAI,CAAC,GAAG,CAAC,cAAc,EACvB,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAC9B,CAAC;QACF,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5G,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,gFAAgF;IAEhF;;;OAGG;IACK,2BAA2B,CAAC,MAAc;QAChD,MAAM,GAAG,GAAG,wBAAwB,CAAC,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,sBAAsB,CAAC;YACnC,OAAO,EAAE,aAAa,CAAC,kBAAkB;YACzC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG;YACf,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,GAAG,CAAC,MAAM;YAC1B,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACzG,iCAAiC;IACnC,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,WAAwB;QACtD,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC;QAErC,MAAM,SAAS,GAAa;YAC1B,YAAY,CAAC,uCAAuC;YACpD,YAAY,CAAC,qCAAqC;SACnD,CAAC;QACF,MAAM,WAAW,GACf,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC7D,YAAY,CAAC,uCAAuC,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,WAAW,CAAC;QAE3C,MAAM,eAAe,GAA0C,EAAE,CAAC;QAClE,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC;QACrF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,OAAO,GACX,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,qBAAqB,CAAC,sBAAsB,CAAC;gBACxE,QAAQ,CAAC,CAAC,CAAC;gBACX,qBAAqB,CAAC,sBAAsB,CAAC;YAC/C,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,EAAE,GAAgB;YACtB,aAAa,EAAE,gBAAgB;YAC/B,MAAM,EAAE,YAAY;YACpB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1B,WAAW;YACX,iBAAiB,EAAE,CAAC;YACpB,UAAU,EAAE,eAAe;SAC5B,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAElG,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC5C,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,YAAY,EAAE,YAAY;YAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAAC;YACtE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAChC,UAAU;SACX,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAsB;YAC7B,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,gBAAgB;YAC5B,SAAS,EAAE,UAAU;YACrB,kBAAkB,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE;YACvE,SAAS,EAAE,GAAG;SACf,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,gFAAgF;IAExE,WAAW;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEvE,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,WAAW,GAAG;YACjB,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc;YACxE,OAAO,EAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAE,CAAC,CAAC,EAAE,CAAC,aAAa;YACvE,OAAO,EAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc;YACxE,MAAM,EAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAE,CAAC,CAAC,EAAE,CAAC,aAAa;YACvE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAC3B,SAAS,EAAG,CAAC,EAAE,OAAO,EAAG,EAAE;SAC5B,CAAC;QAEF,MAAM,OAAO,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,GAAG;YACd,SAAS,EAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,SAAS,EAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,OAAO,EAAE,qBAAqB,CAAC,sBAAsB;SACtD,CAAC;IACJ,CAAC;IAED,gFAAgF;IAExE,qBAAqB;QAC3B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3H,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAEO,wBAAwB;QAC9B,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,IAAyB;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACvE,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3F,OAAO,GAAG,CAAC,EAAE,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAc,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;IAEO,oBAAoB,CAAC,QAA6B;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACvE,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,+EAA+E;QAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9E,OAAO,GAAG,CAAC,EAAE,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAc,EAAE,EAAE,CAAC,CAAC;IACpG,CAAC;IAEO,aAAa;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAClE,iEAAiE;QACjE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEO,sBAAsB,CAAC,IAAY;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,IAAY;QACzC,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,gFAAgF;IAExE,uBAAuB,CAAC,MAAkB;QAChD,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,MAAkB;QACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,gFAAgF;IAExE,cAAc,CAAC,WAAwB,EAAE,SAAiB;QAChE,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAC5F,OAAO,YAAY,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,CAAC;IAEO,cAAc,CAAC,MAAkB;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACjG,OAAO,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9E,CAAC;IAED,gFAAgF;IAExE,sBAAsB,CAAC,OAAsB,EAAE,IAAY;QACjE,OAAO,sBAAsB,CAAC;YAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;YAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE;YACrC,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI;SACrD,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,OAAsB,EAAE,IAAY;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IAEO,cAAc,CAAC,GAAqB;QAC1C,MAAM,KAAK,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,gFAAgF;IAExE,eAAe,CAAC,YAAoB;QAC1C,OAAO,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,gFAAgF;IAExE,SAAS,CAAC,IAAY;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,GAAU;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YAAE,OAAO;QACjF,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;;AAGH,gFAAgF;AAEhF,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAW,EAAE,EAAe,EAAE,GAAW;IACxE,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtB,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1C,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,51 @@
1
+ export declare enum ContentType {
2
+ ChangeCipherSpec = 20,
3
+ Alert = 21,
4
+ Handshake = 22,
5
+ ApplicationData = 23
6
+ }
7
+ export declare enum AlertLevel {
8
+ Warning = 1,
9
+ Fatal = 2
10
+ }
11
+ export declare enum AlertDescription {
12
+ CloseNotify = 0,
13
+ UnexpectedMessage = 10,
14
+ BadRecordMac = 20,
15
+ DecryptionFailed = 21,
16
+ RecordOverflow = 22,
17
+ DecompressionFailure = 30,
18
+ HandshakeFailure = 40,
19
+ NoCertificate = 41,
20
+ BadCertificate = 42,
21
+ UnsupportedCertificate = 43,
22
+ CertificateRevoked = 44,
23
+ CertificateExpired = 45,
24
+ CertificateUnknown = 46,
25
+ IllegalParameter = 47,
26
+ UnknownCA = 48,
27
+ AccessDenied = 49,
28
+ DecodeError = 50,
29
+ DecryptError = 51,
30
+ ExportRestriction = 60,
31
+ ProtocolVersion = 70,
32
+ InsufficientSecurity = 71,
33
+ InternalError = 80,
34
+ UserCanceled = 90,
35
+ NoRenegotiation = 100,
36
+ UnsupportedExtension = 110
37
+ }
38
+ export interface DtlsVersion {
39
+ major: number;
40
+ minor: number;
41
+ }
42
+ /** DTLS 1.2 = {254, 253} */
43
+ export declare const DTLS_VERSION_1_2: DtlsVersion;
44
+ export interface DtlsRecord {
45
+ contentType: ContentType;
46
+ version: DtlsVersion;
47
+ epoch: number;
48
+ sequenceNumber: bigint;
49
+ fragment: Buffer;
50
+ }
51
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACrB,gBAAgB,KAAK;IACrB,KAAK,KAAK;IACV,SAAS,KAAK;IACd,eAAe,KAAK;CACrB;AAED,oBAAY,UAAU;IACpB,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAED,oBAAY,gBAAgB;IAC1B,WAAW,IAAI;IACf,iBAAiB,KAAK;IACtB,YAAY,KAAK;IACjB,gBAAgB,KAAK;IACrB,cAAc,KAAK;IACnB,oBAAoB,KAAK;IACzB,gBAAgB,KAAK;IACrB,aAAa,KAAK;IAClB,cAAc,KAAK;IACnB,sBAAsB,KAAK;IAC3B,kBAAkB,KAAK;IACvB,kBAAkB,KAAK;IACvB,kBAAkB,KAAK;IACvB,gBAAgB,KAAK;IACrB,SAAS,KAAK;IACd,YAAY,KAAK;IACjB,WAAW,KAAK;IAChB,YAAY,KAAK;IACjB,iBAAiB,KAAK;IACtB,eAAe,KAAK;IACpB,oBAAoB,KAAK;IACzB,aAAa,KAAK;IAClB,YAAY,KAAK;IACjB,eAAe,MAAM;IACrB,oBAAoB,MAAM;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4BAA4B;AAC5B,eAAO,MAAM,gBAAgB,EAAE,WAAwC,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
package/dist/types.js ADDED
@@ -0,0 +1,44 @@
1
+ // DTLS 1.2 shared types
2
+ export var ContentType;
3
+ (function (ContentType) {
4
+ ContentType[ContentType["ChangeCipherSpec"] = 20] = "ChangeCipherSpec";
5
+ ContentType[ContentType["Alert"] = 21] = "Alert";
6
+ ContentType[ContentType["Handshake"] = 22] = "Handshake";
7
+ ContentType[ContentType["ApplicationData"] = 23] = "ApplicationData";
8
+ })(ContentType || (ContentType = {}));
9
+ export var AlertLevel;
10
+ (function (AlertLevel) {
11
+ AlertLevel[AlertLevel["Warning"] = 1] = "Warning";
12
+ AlertLevel[AlertLevel["Fatal"] = 2] = "Fatal";
13
+ })(AlertLevel || (AlertLevel = {}));
14
+ export var AlertDescription;
15
+ (function (AlertDescription) {
16
+ AlertDescription[AlertDescription["CloseNotify"] = 0] = "CloseNotify";
17
+ AlertDescription[AlertDescription["UnexpectedMessage"] = 10] = "UnexpectedMessage";
18
+ AlertDescription[AlertDescription["BadRecordMac"] = 20] = "BadRecordMac";
19
+ AlertDescription[AlertDescription["DecryptionFailed"] = 21] = "DecryptionFailed";
20
+ AlertDescription[AlertDescription["RecordOverflow"] = 22] = "RecordOverflow";
21
+ AlertDescription[AlertDescription["DecompressionFailure"] = 30] = "DecompressionFailure";
22
+ AlertDescription[AlertDescription["HandshakeFailure"] = 40] = "HandshakeFailure";
23
+ AlertDescription[AlertDescription["NoCertificate"] = 41] = "NoCertificate";
24
+ AlertDescription[AlertDescription["BadCertificate"] = 42] = "BadCertificate";
25
+ AlertDescription[AlertDescription["UnsupportedCertificate"] = 43] = "UnsupportedCertificate";
26
+ AlertDescription[AlertDescription["CertificateRevoked"] = 44] = "CertificateRevoked";
27
+ AlertDescription[AlertDescription["CertificateExpired"] = 45] = "CertificateExpired";
28
+ AlertDescription[AlertDescription["CertificateUnknown"] = 46] = "CertificateUnknown";
29
+ AlertDescription[AlertDescription["IllegalParameter"] = 47] = "IllegalParameter";
30
+ AlertDescription[AlertDescription["UnknownCA"] = 48] = "UnknownCA";
31
+ AlertDescription[AlertDescription["AccessDenied"] = 49] = "AccessDenied";
32
+ AlertDescription[AlertDescription["DecodeError"] = 50] = "DecodeError";
33
+ AlertDescription[AlertDescription["DecryptError"] = 51] = "DecryptError";
34
+ AlertDescription[AlertDescription["ExportRestriction"] = 60] = "ExportRestriction";
35
+ AlertDescription[AlertDescription["ProtocolVersion"] = 70] = "ProtocolVersion";
36
+ AlertDescription[AlertDescription["InsufficientSecurity"] = 71] = "InsufficientSecurity";
37
+ AlertDescription[AlertDescription["InternalError"] = 80] = "InternalError";
38
+ AlertDescription[AlertDescription["UserCanceled"] = 90] = "UserCanceled";
39
+ AlertDescription[AlertDescription["NoRenegotiation"] = 100] = "NoRenegotiation";
40
+ AlertDescription[AlertDescription["UnsupportedExtension"] = 110] = "UnsupportedExtension";
41
+ })(AlertDescription || (AlertDescription = {}));
42
+ /** DTLS 1.2 = {254, 253} */
43
+ export const DTLS_VERSION_1_2 = { major: 254, minor: 253 };
44
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAExB,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,sEAAqB,CAAA;IACrB,gDAAU,CAAA;IACV,wDAAc,CAAA;IACd,oEAAoB,CAAA;AACtB,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;AAED,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,iDAAW,CAAA;IACX,6CAAS,CAAA;AACX,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED,MAAM,CAAN,IAAY,gBA0BX;AA1BD,WAAY,gBAAgB;IAC1B,qEAAe,CAAA;IACf,kFAAsB,CAAA;IACtB,wEAAiB,CAAA;IACjB,gFAAqB,CAAA;IACrB,4EAAmB,CAAA;IACnB,wFAAyB,CAAA;IACzB,gFAAqB,CAAA;IACrB,0EAAkB,CAAA;IAClB,4EAAmB,CAAA;IACnB,4FAA2B,CAAA;IAC3B,oFAAuB,CAAA;IACvB,oFAAuB,CAAA;IACvB,oFAAuB,CAAA;IACvB,gFAAqB,CAAA;IACrB,kEAAc,CAAA;IACd,wEAAiB,CAAA;IACjB,sEAAgB,CAAA;IAChB,wEAAiB,CAAA;IACjB,kFAAsB,CAAA;IACtB,8EAAoB,CAAA;IACpB,wFAAyB,CAAA;IACzB,0EAAkB,CAAA;IAClB,wEAAiB,CAAA;IACjB,+EAAqB,CAAA;IACrB,yFAA0B,CAAA;AAC5B,CAAC,EA1BW,gBAAgB,KAAhB,gBAAgB,QA0B3B;AAOD,4BAA4B;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@agentdance/node-webrtc-dtls",
3
+ "version": "1.0.0",
4
+ "description": "RFC 6347 DTLS 1.2 transport — full handshake, ECDHE P-256, AES-128-GCM, self-signed cert via pure ASN.1/DER. Part of the @agentdance/node-webrtc stack.",
5
+ "keywords": [
6
+ "webrtc",
7
+ "dtls",
8
+ "rfc6347",
9
+ "tls",
10
+ "ecdhe",
11
+ "typescript",
12
+ "node"
13
+ ],
14
+ "license": "MIT",
15
+ "homepage": "https://github.com/agent-dance/node-webrtc#readme",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/agent-dance/node-webrtc.git",
19
+ "directory": "packages/dtls"
20
+ },
21
+ "bugs": {
22
+ "url": "https://github.com/agent-dance/node-webrtc/issues"
23
+ },
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "type": "module",
28
+ "main": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "exports": {
31
+ ".": {
32
+ "import": "./dist/index.js",
33
+ "types": "./dist/index.d.ts"
34
+ }
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "src"
39
+ ],
40
+ "sideEffects": false,
41
+ "publishConfig": {
42
+ "access": "public",
43
+ "registry": "https://registry.npmjs.org/"
44
+ },
45
+ "devDependencies": {
46
+ "typescript": "*",
47
+ "vitest": "*",
48
+ "@types/node": "*"
49
+ },
50
+ "scripts": {
51
+ "build": "tsc",
52
+ "test": "vitest run",
53
+ "typecheck": "tsc --noEmit",
54
+ "clean": "rm -rf dist"
55
+ }
56
+ }
@@ -0,0 +1,253 @@
1
+ // Self-signed ECDSA certificate generation for DTLS
2
+ // Uses a minimal ASN.1/DER builder – no external dependencies.
3
+
4
+ import * as crypto from 'node:crypto';
5
+
6
+ export interface DtlsCertificate {
7
+ cert: Buffer; // DER-encoded X.509
8
+ privateKey: crypto.KeyObject;
9
+ fingerprint: { algorithm: 'sha-256'; value: string };
10
+ }
11
+
12
+ // ─── ASN.1 / DER helpers ──────────────────────────────────────────────────────
13
+
14
+ function derLength(len: number): Buffer {
15
+ if (len < 0x80) {
16
+ return Buffer.from([len]);
17
+ } else if (len < 0x100) {
18
+ return Buffer.from([0x81, len]);
19
+ } else if (len < 0x10000) {
20
+ return Buffer.from([0x82, (len >> 8) & 0xff, len & 0xff]);
21
+ } else {
22
+ return Buffer.from([
23
+ 0x83,
24
+ (len >> 16) & 0xff,
25
+ (len >> 8) & 0xff,
26
+ len & 0xff,
27
+ ]);
28
+ }
29
+ }
30
+
31
+ function tlv(tag: number, ...contents: Buffer[]): Buffer {
32
+ const body = Buffer.concat(contents);
33
+ return Buffer.concat([Buffer.from([tag]), derLength(body.length), body]);
34
+ }
35
+
36
+ function sequence(...contents: Buffer[]): Buffer {
37
+ return tlv(0x30, ...contents);
38
+ }
39
+
40
+ function set_(...contents: Buffer[]): Buffer {
41
+ return tlv(0x31, ...contents);
42
+ }
43
+
44
+ function integer(bytes: Buffer): Buffer {
45
+ // Ensure positive integer (prepend 0x00 if high bit set)
46
+ let val = bytes;
47
+ if (val[0]! & 0x80) {
48
+ val = Buffer.concat([Buffer.from([0x00]), val]);
49
+ }
50
+ return tlv(0x02, val);
51
+ }
52
+
53
+ function integerN(n: number): Buffer {
54
+ const buf = Buffer.allocUnsafe(4);
55
+ buf.writeInt32BE(n, 0);
56
+ // Trim leading zeros but keep at least 1 byte
57
+ let start = 0;
58
+ while (start < buf.length - 1 && buf[start] === 0 && !(buf[start + 1]! & 0x80)) {
59
+ start++;
60
+ }
61
+ return integer(buf.subarray(start));
62
+ }
63
+
64
+ function oid(dotNotation: string): Buffer {
65
+ const parts = dotNotation.split('.').map(Number);
66
+ // First two components encoded as 40*a + b
67
+ const encoded: number[] = [40 * parts[0]! + parts[1]!];
68
+ for (let i = 2; i < parts.length; i++) {
69
+ let n = parts[i]!;
70
+ const bytes: number[] = [];
71
+ bytes.push(n & 0x7f);
72
+ n >>= 7;
73
+ while (n > 0) {
74
+ bytes.unshift((n & 0x7f) | 0x80);
75
+ n >>= 7;
76
+ }
77
+ encoded.push(...bytes);
78
+ }
79
+ return tlv(0x06, Buffer.from(encoded));
80
+ }
81
+
82
+ function utf8String(s: string): Buffer {
83
+ return tlv(0x0c, Buffer.from(s, 'utf8'));
84
+ }
85
+
86
+ function utcTime(d: Date): Buffer {
87
+ const pad = (n: number) => String(n).padStart(2, '0');
88
+ const y = String(d.getUTCFullYear()).slice(2);
89
+ const str =
90
+ y +
91
+ pad(d.getUTCMonth() + 1) +
92
+ pad(d.getUTCDate()) +
93
+ pad(d.getUTCHours()) +
94
+ pad(d.getUTCMinutes()) +
95
+ pad(d.getUTCSeconds()) +
96
+ 'Z';
97
+ return tlv(0x17, Buffer.from(str, 'ascii'));
98
+ }
99
+
100
+ function bitString(bytes: Buffer, unusedBits = 0): Buffer {
101
+ return tlv(0x03, Buffer.from([unusedBits]), bytes);
102
+ }
103
+
104
+ function octetString(bytes: Buffer): Buffer {
105
+ return tlv(0x04, bytes);
106
+ }
107
+
108
+ function contextTag(n: number, ...contents: Buffer[]): Buffer {
109
+ return tlv(0xa0 | n, ...contents);
110
+ }
111
+
112
+ // ─── Known OIDs ───────────────────────────────────────────────────────────────
113
+
114
+ // ecPublicKey: 1.2.840.10045.2.1
115
+ const OID_EC_PUBLIC_KEY = oid('1.2.840.10045.2.1');
116
+ // secp256r1 / P-256: 1.2.840.10045.3.1.7
117
+ const OID_P256 = oid('1.2.840.10045.3.1.7');
118
+ // ecdsa-with-SHA256: 1.2.840.10045.4.3.2
119
+ const OID_ECDSA_SHA256 = oid('1.2.840.10045.4.3.2');
120
+ // commonName: 2.5.4.3
121
+ const OID_COMMON_NAME = oid('2.5.4.3');
122
+ // subjectKeyIdentifier: 2.5.29.14
123
+ const OID_SKI = oid('2.5.29.14');
124
+
125
+ // ─── Certificate builder ──────────────────────────────────────────────────────
126
+
127
+ /**
128
+ * Build a self-signed X.509 certificate in DER format.
129
+ * Uses ECDSA P-256 with SHA-256.
130
+ */
131
+ function buildSelfSignedCert(
132
+ keyPair: crypto.KeyPairKeyObjectResult,
133
+ commonNameValue: string,
134
+ validityDays: number,
135
+ ): Buffer {
136
+ // Export public key as uncompressed EC point
137
+ const jwk = keyPair.publicKey.export({ format: 'jwk' }) as crypto.JsonWebKey;
138
+ if (!jwk.x || !jwk.y) throw new Error('Not an EC key pair');
139
+ const x = Buffer.from(jwk.x, 'base64url');
140
+ const y = Buffer.from(jwk.y, 'base64url');
141
+ const coordSize = 32;
142
+ const xPad = Buffer.alloc(coordSize);
143
+ const yPad = Buffer.alloc(coordSize);
144
+ x.copy(xPad, coordSize - x.length);
145
+ y.copy(yPad, coordSize - y.length);
146
+ const ecPoint = Buffer.concat([Buffer.from([0x04]), xPad, yPad]);
147
+
148
+ // Dates
149
+ const now = new Date();
150
+ const notBefore = new Date(now.getTime() - 60000); // 1 min ago
151
+ const notAfter = new Date(now.getTime() + validityDays * 86400000);
152
+
153
+ // Serial number (random 8 bytes)
154
+ const serialBytes = crypto.randomBytes(8);
155
+ // Ensure positive (clear high bit)
156
+ serialBytes[0] = serialBytes[0]! & 0x7f;
157
+
158
+ // Subject / Issuer RDN: CN=<commonName>
159
+ const rdn = sequence(set_(sequence(OID_COMMON_NAME, utf8String(commonNameValue))));
160
+
161
+ // SubjectPublicKeyInfo
162
+ const spki = sequence(
163
+ sequence(OID_EC_PUBLIC_KEY, OID_P256),
164
+ bitString(ecPoint),
165
+ );
166
+
167
+ // Subject key identifier extension
168
+ const skiValue = crypto.createHash('sha1').update(ecPoint).digest();
169
+ const skiExtension = sequence(
170
+ OID_SKI,
171
+ octetString(octetString(skiValue)),
172
+ );
173
+ const extensions = contextTag(3, sequence(skiExtension));
174
+
175
+ // TBSCertificate
176
+ const tbs = sequence(
177
+ contextTag(0, integerN(2)), // version: v3
178
+ integer(serialBytes), // serialNumber
179
+ sequence(OID_ECDSA_SHA256), // signature algorithm
180
+ rdn, // issuer
181
+ sequence(utcTime(notBefore), utcTime(notAfter)), // validity
182
+ rdn, // subject
183
+ spki, // subjectPublicKeyInfo
184
+ extensions, // extensions
185
+ );
186
+
187
+ // Sign TBSCertificate
188
+ const signature = crypto.sign('sha256', tbs, keyPair.privateKey);
189
+
190
+ // Certificate = SEQUENCE { tbs, algorithm, signature }
191
+ const cert = sequence(
192
+ tbs,
193
+ sequence(OID_ECDSA_SHA256),
194
+ bitString(signature),
195
+ );
196
+
197
+ return cert;
198
+ }
199
+
200
+ // ─── Public API ───────────────────────────────────────────────────────────────
201
+
202
+ /**
203
+ * Compute SHA-256 fingerprint of a DER certificate.
204
+ * Returns colon-separated uppercase hex, e.g. "AA:BB:CC:..."
205
+ */
206
+ export function computeFingerprint(certDer: Buffer): string {
207
+ const hash = crypto.createHash('sha256').update(certDer).digest();
208
+ return Array.from(hash)
209
+ .map((b) => b.toString(16).padStart(2, '0').toUpperCase())
210
+ .join(':');
211
+ }
212
+
213
+ /**
214
+ * Verify that a DER certificate matches the expected fingerprint.
215
+ */
216
+ export function verifyFingerprint(
217
+ certDer: Buffer,
218
+ expected: { algorithm: string; value: string },
219
+ ): boolean {
220
+ const algo = expected.algorithm.toLowerCase().replace('-', '');
221
+ if (algo !== 'sha256') {
222
+ throw new Error(`Unsupported fingerprint algorithm: ${expected.algorithm}`);
223
+ }
224
+ const actual = computeFingerprint(certDer);
225
+ // Case-insensitive comparison
226
+ return actual.toLowerCase() === expected.value.toLowerCase();
227
+ }
228
+
229
+ /**
230
+ * Generate a self-signed ECDSA (P-256) certificate for use in DTLS.
231
+ */
232
+ export function generateSelfSignedCertificate(): DtlsCertificate {
233
+ const keyPair = crypto.generateKeyPairSync('ec', { namedCurve: 'P-256' });
234
+ const cn = `dtls-${crypto.randomBytes(8).toString('hex')}`;
235
+ const certDer = buildSelfSignedCert(keyPair, cn, 365);
236
+ const fingerprint = computeFingerprint(certDer);
237
+
238
+ return {
239
+ cert: certDer,
240
+ privateKey: keyPair.privateKey,
241
+ fingerprint: { algorithm: 'sha-256', value: fingerprint },
242
+ };
243
+ }
244
+
245
+ /**
246
+ * Extract public key from DER-encoded certificate.
247
+ * Parses the SubjectPublicKeyInfo to get the EC public key.
248
+ */
249
+ export function extractPublicKeyFromCert(certDer: Buffer): crypto.KeyObject {
250
+ // Use Node.js X509Certificate (available since Node 15.6)
251
+ const x509 = new crypto.X509Certificate(certDer);
252
+ return x509.publicKey;
253
+ }