@dcl/http-server 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.
- package/README.md +3 -0
- package/dist/benchmark.d.ts +1 -0
- package/dist/benchmark.js +94 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/cors.d.ts +35 -0
- package/dist/cors.js +138 -0
- package/dist/cors.js.map +1 -0
- package/dist/helpers.d.ts +1 -0
- package/dist/helpers.js +3 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/injectors.d.ts +5 -0
- package/dist/injectors.js +22 -0
- package/dist/injectors.js.map +1 -0
- package/dist/layer.d.ts +58 -0
- package/dist/layer.js +102 -0
- package/dist/layer.js.map +1 -0
- package/dist/logic.d.ts +12 -0
- package/dist/logic.js +288 -0
- package/dist/logic.js.map +1 -0
- package/dist/methods.d.ts +6 -0
- package/dist/methods.js +16 -0
- package/dist/methods.js.map +1 -0
- package/dist/metrics.d.ts +36 -0
- package/dist/metrics.js +107 -0
- package/dist/metrics.js.map +1 -0
- package/dist/middleware.d.ts +9 -0
- package/dist/middleware.js +35 -0
- package/dist/middleware.js.map +1 -0
- package/dist/router.d.ts +190 -0
- package/dist/router.js +516 -0
- package/dist/router.js.map +1 -0
- package/dist/server-handler.d.ts +1 -0
- package/dist/server-handler.js +34 -0
- package/dist/server-handler.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.js +176 -0
- package/dist/server.js.map +1 -0
- package/dist/status-checks.d.ts +33 -0
- package/dist/status-checks.js +154 -0
- package/dist/status-checks.js.map +1 -0
- package/dist/terminator.d.ts +18 -0
- package/dist/terminator.js +128 -0
- package/dist/terminator.js.map +1 -0
- package/dist/test-component.d.ts +22 -0
- package/dist/test-component.js +89 -0
- package/dist/test-component.js.map +1 -0
- package/dist/test-server.d.ts +21 -0
- package/dist/test-server.js +81 -0
- package/dist/test-server.js.map +1 -0
- package/dist/types.d.ts +32 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/ws.d.ts +8 -0
- package/dist/ws.js +32 -0
- package/dist/ws.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAmC;AACnC,mCAA6C;AAC7C,mDAAkD;AAElD,6CAAkD;AAClD,uCAAuC;AAoBvC,MAAM,8BAA8B,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAEhE,gBAAgB;AAChB,SAAS,iBAAiB,CAAe,UAAyB;IAChE,OAAQ,UAAkB,CAAC,8BAA8B,CAAC,IAAI,IAAI,CAAA;AACpE,CAAC;AAED,gBAAgB;AAChB,SAAS,iBAAiB,CAAI,UAAyB,EAAE,MAAmB;IAC1E,CAAC;IAAE,UAAkB,CAAC,8BAA8B,CAAC,GAAG,MAAM,CAAA;AAChE,CAAC;AAyBD,SAAS,mBAAmB,CAC1B,MAAuB,EACvB,MAAuC;IAEvC,OAAO,UAAS,IAAI,EAAE,GAAG,WAAW;QAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,IAAA,oBAAO,EAAC,GAAG,WAAW,CAAkD,EAAE,EAAE,CAAC,CAAA;QAC7G,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAa,MAAM;IAIjB,YAAY,IAAoB;QADhC,UAAK,GAA0B,EAAE,CAAA;QAcjC,YAAO,GAAG,mBAAmB,CAAU,IAAI,EAAE,SAAS,CAAC,CAAA;QACvD,WAAM,GAAG,mBAAmB,CAAU,IAAI,EAAE,QAAQ,CAAC,CAAA;QACrD,QAAG,GAAG,mBAAmB,CAAU,IAAI,EAAE,KAAK,CAAC,CAAA;QAC/C,SAAI,GAAG,mBAAmB,CAAU,IAAI,EAAE,MAAM,CAAC,CAAA;QACjD,YAAO,GAAG,mBAAmB,CAAU,IAAI,EAAE,SAAS,CAAC,CAAA;QACvD,UAAK,GAAG,mBAAmB,CAAU,IAAI,EAAE,OAAO,CAAC,CAAA;QACnD,SAAI,GAAG,mBAAmB,CAAU,IAAI,EAAE,MAAM,CAAC,CAAA;QACjD,QAAG,GAAG,mBAAmB,CAAU,IAAI,EAAE,KAAK,CAAC,CAAA;QAC/C,UAAK,GAAG,mBAAmB,CAAU,IAAI,EAAE,OAAO,CAAC,CAAA;QApBjD,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI;YAChE,MAAM;YACN,SAAS;YACT,KAAK;YACL,KAAK;YACL,OAAO;YACP,MAAM;YACN,QAAQ;SACT,CAAA;IACH,CAAC;IA6CD,GAAG;QACD,MAAM,UAAU,GAA0B,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/E,IAAI,IAAwB,CAAA;QAC5B,IAAI,MAAM,GAAG,IAAI,CAAA;QAEjB,MAAM,OAAO,GAAG,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAA;QACjD,IAAI,OAAO;YAAE,IAAI,GAAG,UAAU,CAAC,KAAK,EAAmB,CAAA;QAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACvB,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;YAC3C,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE;oBACjF,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBACrC,CAAC,CAAA;gBAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClD,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;oBACxC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAK,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAA;oBAE7E,IAAI,IAAI;wBAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;oBACpC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;wBAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAChE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oBAC7B,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAA;gBACnC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAU,EAAE,CAAA;gBACtB,IAAA,6BAAY,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;gBAC5C,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAA;gBAC9D,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAA;YAC9G,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;OAUG;IAEH,MAAM,CAAC,MAAc;QACnB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAElC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC3B,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACzB,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAA;QAEnB,MAAM,gBAAgB,GACpB,SAAS,gBAAgB,CAAC,GAAG,EAAE,IAAI;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAA;YACzE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACtD,IAAI,UAA6F,CAAA;YAEjG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;YACnD,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAA;YAC5B,CAAC;YAED,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;YAEnB,IAAI,CAAC,OAAO,CAAC,KAAK;gBAAE,OAAO,IAAI,EAAE,CAAA;YAEjC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;YAC3C,MAAM,iBAAiB,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACjE,GAAG,CAAC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAA;YAC1C,IAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC;gBAC3B,GAAG,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAA;YAChD,CAAC;YAED,UAAU,GAAG,aAAa,CAAC,MAAM,CAC/B,UAAS,IAAI,EAAE,KAAK;gBAClB,IAAI,CAAC,IAAI,CAAC,KAAK,WAAU,GAAG,EAAE,IAAI;oBAChC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;oBACnC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;oBAChE,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAA;oBAC3B,2CAA2C;oBAC3C,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAA;oBAC9B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBACf,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAA;oBACpC,CAAC;oBACD,OAAO,MAAM,IAAI,EAAE,CAAA;gBACrB,CAAC,CAAC,CAAA;gBACF,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACjC,CAAC,EACD,EAAuB,CACxB,CAAA;YAED,OAAO,IAAA,oBAAO,EAAC,GAAG,UAAU,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1C,CAAC,CAAA;QAEH,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;QAEzC,OAAO,gBAAiE,CAAA;IAC1E,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IAEH,cAAc,CAAC,UAAgC,EAAE;QAC/C,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAA;QAEhC,MAAM,gBAAgB,GACpB,KAAK,UAAU,gBAAgB,CAAC,GAAG,EAAE,IAAI;YACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;YAE7B,MAAM,OAAO,GAAoC,EAAE,CAAA;YAEnD,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAChD,IAAI,SAAS,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5C,MAAM,KAAK,GAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;wBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;4BAC/B,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;wBAC1B,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACvC,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;gBAEtD,IAAI,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;oBACzC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAClB,IAAI,uBAAuB,GACzB,OAAO,OAAO,CAAC,cAAc,KAAK,UAAU;4BAC1C,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,oDAAoD;4BAC/E,CAAC,CAAC,IAAI,qBAAS,CAAC,cAAc,EAAE,CAAA;wBAEpC,MAAM,uBAAuB,CAAA;oBAC/B,CAAC;yBAAM,CAAC;wBACN,OAAO;4BACL,MAAM,EAAE,GAAG;4BACX,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;yBAC1C,CAAA;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBAC7B,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;wBAChC,OAAO;4BACL,MAAM,EAAE,GAAG;4BACX,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;yBAC1C,CAAA;oBACH,CAAC;yBAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;wBACnC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;4BAClB,IAAI,mBAAmB,GACrB,OAAO,OAAO,CAAC,gBAAgB,KAAK,UAAU;gCAC5C,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,oDAAoD;gCACjF,CAAC,CAAC,IAAI,qBAAS,CAAC,gBAAgB,EAAE,CAAA;4BAEtC,MAAM,mBAAmB,CAAA;wBAC3B,CAAC;6BAAM,CAAC;4BACN,OAAO;gCACL,MAAM,EAAE,GAAG;gCACX,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;6BAC1C,CAAA;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,QAAQ,CAAA;QACjB,CAAC,CAAA;QACH,OAAO,gBAAiE,CAAA;IAC1E,CAAC;IAED;;;;;;;OAOG;IAEH,GAAG,CAAmB,IAAO,EAAE,UAA2E;QACxG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,qBAAW,EAAE,UAAiB,EAAE,EAAE,CAAC,CAAA;QAEvD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IAEH,QAAQ,CAAC,MAAc,EAAE,WAAmB,EAAE,OAAe,GAAG;QAC9D,8BAA8B;QAC9B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAE9G,mCAAmC;QACnC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,2EAA2E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CACpG,CAAA;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAA;QAC7D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;OAMG;IAEH,QAAQ,CACN,IAAU,EACV,OAAuD,EACvD,UAAyD,EACzD,IAAmB;QAEnB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAA;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAExB,yBAAyB;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;YAClE,CAAC;QACH,CAAC;QAED,eAAe;QACf,MAAM,KAAK,GAAG,IAAI,aAAK,CAAgB,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE;YAChE,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;YACzC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK;YACzD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK;YAChD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;YAC7C,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEjB,0DAA0D;QAE1D,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IAEH,KAAK,CAAC,IAAY,EAAE,MAAc;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;QACzB,IAAI,KAA6B,CAAA;QAEjC,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,EAA8B;YACpC,aAAa,EAAE,EAA8B;YAC7C,KAAK,EAAE,KAAK;SACb,CAAA;QAED,KAAK,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEjB,gDAAgD;YAEhD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAExB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAa,CAAC,EAAE,CAAC;oBACxE,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBACjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM;wBAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAA;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AA3ZD,wBA2ZC;AAED,MAAM;AACN,uDAAuD;AACvD,KAAK;AACL,cAAc;AACd,KAAK;AACL,mBAAmB;AACnB,oDAAoD;AACpD,sBAAsB;AACtB,SAAS;AACT,KAAK;AACL,+BAA+B;AAC/B,oCAAoC;AACpC,MAAM;AACN,qEAAqE;AACrE,qDAAqD;AACrD,IAAI;AAEJ,MAAM;AACN,gFAAgF;AAChF,2CAA2C;AAC3C,KAAK;AACL,2FAA2F;AAC3F,wFAAwF;AACxF,KAAK;AACL,2EAA2E;AAC3E,KAAK;AACL,mBAAmB;AACnB,YAAY;AACZ,kCAAkC;AAClC,2CAA2C;AAC3C,UAAU;AACV,wCAAwC;AACxC,gBAAgB;AAChB,UAAU;AACV,2CAA2C;AAC3C,gBAAgB;AAChB,UAAU;AACV,2CAA2C;AAC3C,gBAAgB;AAChB,UAAU;AACV,2CAA2C;AAC3C,gBAAgB;AAChB,WAAW;AACX,SAAS;AACT,KAAK;AACL,yFAAyF;AACzF,sDAAsD;AACtD,KAAK;AACL,iEAAiE;AACjE,mEAAmE;AACnE,KAAK;AACL,kEAAkE;AAClE,KAAK;AACL,uBAAuB;AACvB,KAAK;AACL,+EAA+E;AAC/E,0CAA0C;AAC1C,KAAK;AACL,mBAAmB;AACnB,uDAAuD;AACvD,aAAa;AACb,SAAS;AACT,KAAK;AACL,4BAA4B;AAC5B,sBAAsB;AACtB,SAAS;AACT,KAAK;AACL,8BAA8B;AAC9B,KAAK;AACL,uCAAuC;AACvC,KAAK;AACL,mBAAmB;AACnB,iBAAiB;AACjB,qBAAqB;AACrB,wBAAwB;AACxB,kEAAkE;AAClE,4BAA4B;AAC5B,mBAAmB;AACnB,aAAa;AACb,UAAU;AACV,gBAAgB;AAChB,gCAAgC;AAChC,wCAAwC;AACxC,SAAS;AACT,QAAQ;AACR,SAAS;AACT,KAAK;AACL,wBAAwB;AACxB,KAAK;AACL,mCAAmC;AACnC,KAAK;AACL,mBAAmB;AACnB,kCAAkC;AAClC,iCAAiC;AACjC,KAAK;AACL,2CAA2C;AAC3C,+CAA+C;AAC/C,+EAA+E;AAC/E,KAAK;AACL,oEAAoE;AACpE,+BAA+B;AAC/B,SAAS;AACT,KAAK;AACL,0BAA0B;AAC1B,KAAK;AACL,sDAAsD;AACtD,KAAK;AACL,mBAAmB;AACnB,iCAAiC;AACjC,wBAAwB;AACxB,SAAS;AACT,KAAK;AACL,mDAAmD;AACnD,0DAA0D;AAC1D,SAAS;AACT,KAAK;AACL,yBAAyB;AACzB,KAAK;AACL,oEAAoE;AACpE,KAAK;AACL,mBAAmB;AACnB,sDAAsD;AACtD,gCAAgC;AAChC,+DAA+D;AAC/D,SAAS;AACT,SAAS;AACT,KAAK;AACL,gFAAgF;AAChF,mDAAmD;AACnD,KAAK;AACL,yCAAyC;AACzC,2CAA2C;AAC3C,mBAAmB;AACnB,6CAA6C;AAC7C,sCAAsC;AACtC,MAAM;AAEN,6CAA6C;AAC7C,qCAAqC;AACrC,gFAAgF;AAChF,sDAAsD;AAEtD,oBAAoB;AACpB,QAAQ;AACR,MAAM;AACN,8BAA8B;AAC9B,IAAI;AAEJ,mEAAmE;AACnE,oDAAoD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createServerHandler = createServerHandler;
|
|
4
|
+
const logic_1 = require("./logic");
|
|
5
|
+
const middleware_1 = require("./middleware");
|
|
6
|
+
// @internal
|
|
7
|
+
function createServerHandler() {
|
|
8
|
+
let middlewares;
|
|
9
|
+
let theFinalHandler;
|
|
10
|
+
function doMiddlewareComposition() {
|
|
11
|
+
theFinalHandler = (0, middleware_1.compose)(...middlewares);
|
|
12
|
+
}
|
|
13
|
+
function resetMiddlewares() {
|
|
14
|
+
middlewares = (0, logic_1.getDefaultMiddlewares)();
|
|
15
|
+
doMiddlewareComposition();
|
|
16
|
+
}
|
|
17
|
+
// initialize default middleware
|
|
18
|
+
resetMiddlewares();
|
|
19
|
+
const use = async (handler) => {
|
|
20
|
+
middlewares.push(handler);
|
|
21
|
+
doMiddlewareComposition();
|
|
22
|
+
};
|
|
23
|
+
async function processRequest(currentContext, req) {
|
|
24
|
+
const ctx = (0, logic_1.contextFromRequest)(currentContext, req);
|
|
25
|
+
const res = await theFinalHandler(ctx, logic_1.defaultHandler);
|
|
26
|
+
return (0, logic_1.normalizeResponseBody)(req, res);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
resetMiddlewares,
|
|
30
|
+
use,
|
|
31
|
+
processRequest
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=server-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-handler.js","sourceRoot":"","sources":["../src/server-handler.ts"],"names":[],"mappings":";;AAMA,kDAgCC;AAtCD,mCAA0G;AAC1G,6CAAkD;AAIlD,YAAY;AACZ,SAAgB,mBAAmB;IACjC,IAAI,WAA4C,CAAA;IAChD,IAAI,eAA8C,CAAA;IAElD,SAAS,uBAAuB;QAC9B,eAAe,GAAG,IAAA,oBAAO,EAAC,GAAG,WAAW,CAAC,CAAA;IAC3C,CAAC;IAED,SAAS,gBAAgB;QACvB,WAAW,GAAG,IAAA,6BAAqB,GAAE,CAAA;QACrC,uBAAuB,EAAE,CAAA;IAC3B,CAAC;IAED,gCAAgC;IAChC,gBAAgB,EAAE,CAAA;IAElB,MAAM,GAAG,GAAyB,KAAK,EAAE,OAAO,EAAE,EAAE;QAClD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzB,uBAAuB,EAAE,CAAA;IAC3B,CAAC,CAAA;IAED,KAAK,UAAU,cAAc,CAAC,cAAuB,EAAE,GAAkB;QACvE,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,cAAc,EAAE,GAAG,CAAC,CAAA;QACnD,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,sBAAc,CAAC,CAAA;QACtD,OAAO,IAAA,6BAAqB,EAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;IAED,OAAO;QACL,gBAAgB;QAChB,GAAG;QACH,cAAc;KACf,CAAA;AACH,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type IBaseComponent, type IHttpServerComponent, type IStatusCheckCapableComponent } from '@well-known-components/interfaces';
|
|
2
|
+
import type { ServerComponents, IHttpServerOptions } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export type FullHttpServerComponent<Context extends object> = IHttpServerComponent<Context> & IBaseComponent & IStatusCheckCapableComponent & {
|
|
7
|
+
/**
|
|
8
|
+
* WARNING! this is a very destructive function, it resets all the .use middlewares
|
|
9
|
+
* you must reconfigure your handlers entirely after calling this function
|
|
10
|
+
*/
|
|
11
|
+
resetMiddlewares(): void;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Creates a http-server component
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export declare function createServerComponent<Context extends object>(components: ServerComponents, options: Partial<IHttpServerOptions>): Promise<FullHttpServerComponent<Context>>;
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.createServerComponent = createServerComponent;
|
|
40
|
+
const interfaces_1 = require("@well-known-components/interfaces");
|
|
41
|
+
const injectors_1 = require("./injectors");
|
|
42
|
+
const logic_1 = require("./logic");
|
|
43
|
+
const server_handler_1 = require("./server-handler");
|
|
44
|
+
const http = __importStar(require("http"));
|
|
45
|
+
const terminator_1 = require("./terminator");
|
|
46
|
+
const ws_1 = require("./ws");
|
|
47
|
+
const destroy_1 = __importDefault(require("destroy"));
|
|
48
|
+
const cors_1 = require("./cors");
|
|
49
|
+
/**
|
|
50
|
+
* Creates a http-server component
|
|
51
|
+
* @public
|
|
52
|
+
*/
|
|
53
|
+
async function createServerComponent(components, options) {
|
|
54
|
+
const { config, logs, ws } = components;
|
|
55
|
+
const logger = logs.getLogger('http-server');
|
|
56
|
+
// config
|
|
57
|
+
const port = await config.requireNumber('HTTP_SERVER_PORT');
|
|
58
|
+
const host = await config.requireString('HTTP_SERVER_HOST');
|
|
59
|
+
let handlerFn = handler;
|
|
60
|
+
const server = (0, logic_1.getServer)(options, handlerFn);
|
|
61
|
+
let listen;
|
|
62
|
+
const terminator = (0, terminator_1.createServerTerminator)(server, { logger }, {});
|
|
63
|
+
async function start() {
|
|
64
|
+
if (listen) {
|
|
65
|
+
logger.error('start() called more than once');
|
|
66
|
+
await listen;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
listen = new Promise((resolve, reject) => {
|
|
70
|
+
const errorHandler = (err) => {
|
|
71
|
+
logger.error(err);
|
|
72
|
+
reject(err);
|
|
73
|
+
};
|
|
74
|
+
server.once('listening', () => {
|
|
75
|
+
logger.info(`Listening ${host}:${port}`);
|
|
76
|
+
resolve(server);
|
|
77
|
+
server.off('error', errorHandler);
|
|
78
|
+
});
|
|
79
|
+
server.once('error', errorHandler).listen(port, host, () => { });
|
|
80
|
+
});
|
|
81
|
+
await listen;
|
|
82
|
+
}
|
|
83
|
+
async function stop() {
|
|
84
|
+
logger.info(`Closing server`);
|
|
85
|
+
await terminator.terminate();
|
|
86
|
+
logger.info(`Server closed`);
|
|
87
|
+
}
|
|
88
|
+
let configuredContext = Object.create({});
|
|
89
|
+
const serverHandler = (0, server_handler_1.createServerHandler)();
|
|
90
|
+
const ret = {
|
|
91
|
+
// IBaseComponent
|
|
92
|
+
start,
|
|
93
|
+
stop,
|
|
94
|
+
[interfaces_1.START_COMPONENT]: start,
|
|
95
|
+
[interfaces_1.STOP_COMPONENT]: stop,
|
|
96
|
+
// IStatusCheckCapableComponent
|
|
97
|
+
async startupProbe() {
|
|
98
|
+
return true;
|
|
99
|
+
},
|
|
100
|
+
async readynessProbe() {
|
|
101
|
+
return server.listening;
|
|
102
|
+
},
|
|
103
|
+
// IHttpServerComponent
|
|
104
|
+
use: serverHandler.use,
|
|
105
|
+
setContext(context) {
|
|
106
|
+
configuredContext = context;
|
|
107
|
+
},
|
|
108
|
+
// extra
|
|
109
|
+
resetMiddlewares: serverHandler.resetMiddlewares
|
|
110
|
+
};
|
|
111
|
+
async function asyncHandle(req, res) {
|
|
112
|
+
const request = (0, logic_1.getRequestFromNodeMessage)(req, host);
|
|
113
|
+
const response = await serverHandler.processRequest(configuredContext, request);
|
|
114
|
+
(0, logic_1.success)(response, res);
|
|
115
|
+
}
|
|
116
|
+
async function handleUpgrade(req, socket, head) {
|
|
117
|
+
if (!ws) {
|
|
118
|
+
throw new Error('No WebSocketServer present');
|
|
119
|
+
}
|
|
120
|
+
const request = (0, logic_1.getRequestFromNodeMessage)(req, host);
|
|
121
|
+
const response = await serverHandler.processRequest(configuredContext, request);
|
|
122
|
+
const websocketConnect = (0, ws_1.getWebSocketCallback)(response);
|
|
123
|
+
if (websocketConnect) {
|
|
124
|
+
ws.handleUpgrade(req, socket, head, async (wsSocket) => {
|
|
125
|
+
try {
|
|
126
|
+
await websocketConnect(wsSocket);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
logger.error(err);
|
|
130
|
+
(0, destroy_1.default)(socket);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
if (response.status) {
|
|
136
|
+
const statusCode = isNaN(response.status) ? 404 : response.status;
|
|
137
|
+
const statusText = http.STATUS_CODES[statusCode] || 'Not Found';
|
|
138
|
+
socket.end(`HTTP/${req.httpVersion} ${statusCode} ${statusText}\r\n\r\n`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
socket.end();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (ws) {
|
|
146
|
+
server.on('upgrade', (req, socket, head) => {
|
|
147
|
+
return handleUpgrade(req, socket, head).catch((err) => {
|
|
148
|
+
logger.error(err);
|
|
149
|
+
(0, destroy_1.default)(socket);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function handler(request, response) {
|
|
154
|
+
asyncHandle(request, response).catch((error) => {
|
|
155
|
+
logger.error(error);
|
|
156
|
+
if (error.code == 'ERR_INVALID_URL') {
|
|
157
|
+
response.statusCode = 404;
|
|
158
|
+
response.end();
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
response.statusCode = 500;
|
|
162
|
+
response.end();
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
(0, injectors_1._setUnderlyingServer)(ret, async () => {
|
|
167
|
+
if (!server)
|
|
168
|
+
throw new Error('The server is stopped');
|
|
169
|
+
return (await listen) || server;
|
|
170
|
+
});
|
|
171
|
+
if (options.cors) {
|
|
172
|
+
ret.use((0, cors_1.createCorsMiddleware)(options.cors));
|
|
173
|
+
}
|
|
174
|
+
return ret;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { IBaseComponent, IConfigComponent, IHttpServerComponent } from '@well-known-components/interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* @beta
|
|
4
|
+
*/
|
|
5
|
+
export type StandardStatusResponse = {
|
|
6
|
+
status: 'pass' | 'fail' | 'warn';
|
|
7
|
+
version?: string;
|
|
8
|
+
releaseId?: string;
|
|
9
|
+
notes?: string[];
|
|
10
|
+
output?: string;
|
|
11
|
+
serviceId?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
details: Record<string, StandardStatusResponseDetail>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* @beta
|
|
17
|
+
*/
|
|
18
|
+
export type StandardStatusResponseDetail = {
|
|
19
|
+
status: 'pass' | 'fail' | 'warn';
|
|
20
|
+
componentType?: string;
|
|
21
|
+
componentId?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Binds status checks to the server
|
|
25
|
+
* - GET /health/ready - readyness probe
|
|
26
|
+
* - GET /health/startup - startup probe
|
|
27
|
+
* - GET /health/live - liveness probe
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
export declare function createStatusCheckComponent<Context extends object = {}>(components: {
|
|
31
|
+
server: IHttpServerComponent<Context>;
|
|
32
|
+
config: IConfigComponent;
|
|
33
|
+
}): Promise<IBaseComponent>;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createStatusCheckComponent = createStatusCheckComponent;
|
|
4
|
+
const router_1 = require("./router");
|
|
5
|
+
/**
|
|
6
|
+
* Binds status checks to the server
|
|
7
|
+
* - GET /health/ready - readyness probe
|
|
8
|
+
* - GET /health/startup - startup probe
|
|
9
|
+
* - GET /health/live - liveness probe
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
async function createStatusCheckComponent(components) {
|
|
13
|
+
const { server } = components;
|
|
14
|
+
let mutStartOptions;
|
|
15
|
+
const routes = new router_1.Router();
|
|
16
|
+
const SUCCESSFUL_STATUS = 200;
|
|
17
|
+
const FAILED_STATUS = 503;
|
|
18
|
+
const MIME = 'application/health+json; charset=utf-8';
|
|
19
|
+
async function getDetails(startup) {
|
|
20
|
+
if (!mutStartOptions) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const components = mutStartOptions.getComponents();
|
|
24
|
+
const probes = [];
|
|
25
|
+
let functionName = startup ? 'startupProbe' : 'readynessProbe';
|
|
26
|
+
for (let c in components) {
|
|
27
|
+
if (typeof components[c][functionName] == 'function') {
|
|
28
|
+
probes.push({
|
|
29
|
+
name: c,
|
|
30
|
+
promise: new Promise((ok) => {
|
|
31
|
+
components[c][functionName]()
|
|
32
|
+
.then(ok)
|
|
33
|
+
.catch(() => ok(false));
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const results = await Promise.all(probes.map(($) => $.promise));
|
|
39
|
+
const content = {
|
|
40
|
+
details: {},
|
|
41
|
+
status: results.some(($) => $ === false) ? 'fail' : 'pass'
|
|
42
|
+
};
|
|
43
|
+
for (let it of probes) {
|
|
44
|
+
content.details[it.name] = {
|
|
45
|
+
status: (await it.promise) ? 'pass' : 'fail'
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return content;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Readiness probes indicate whether your application is ready to
|
|
52
|
+
* handle requests. It could be that your application is alive, but
|
|
53
|
+
* that it just can't handle HTTP traffic. In that case, Kubernetes
|
|
54
|
+
* won't kill the container, but it will stop sending it requests.
|
|
55
|
+
* In practical terms, that means the pod is removed from an
|
|
56
|
+
* associated service's "pool" of pods that are handling requests,
|
|
57
|
+
* by marking the pod as "Unready".
|
|
58
|
+
*/
|
|
59
|
+
routes.get('/health/ready', async () => {
|
|
60
|
+
if (!mutStartOptions) {
|
|
61
|
+
return {
|
|
62
|
+
body: { status: 'initializing' },
|
|
63
|
+
status: FAILED_STATUS,
|
|
64
|
+
headers: {
|
|
65
|
+
'content-type': MIME
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (mutStartOptions.started()) {
|
|
70
|
+
const content = (await getDetails(false));
|
|
71
|
+
return {
|
|
72
|
+
status: content.status == 'pass' ? SUCCESSFUL_STATUS : FAILED_STATUS,
|
|
73
|
+
body: content,
|
|
74
|
+
headers: {
|
|
75
|
+
'content-type': MIME
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
else if (mutStartOptions.live()) {
|
|
80
|
+
return {
|
|
81
|
+
body: 'unready',
|
|
82
|
+
status: FAILED_STATUS,
|
|
83
|
+
headers: {
|
|
84
|
+
'content-type': MIME
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
body: 'waiting',
|
|
90
|
+
status: FAILED_STATUS,
|
|
91
|
+
headers: {
|
|
92
|
+
'content-type': MIME
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
/**
|
|
97
|
+
* The first probe to run is the Startup probe.
|
|
98
|
+
* When your app starts up, it might need to do a lot of work.
|
|
99
|
+
* It might need to fetch data from remote services, load dlls
|
|
100
|
+
* from plugins, who knows what else. During that process, your
|
|
101
|
+
* app should either not respond to requests, or if it does, it
|
|
102
|
+
* should return a status code of 400 or higher. Once the startup
|
|
103
|
+
* process has finished, you can switch to returning a success
|
|
104
|
+
* res (200) for the startup probe.
|
|
105
|
+
*/
|
|
106
|
+
routes.get('/health/startup', async () => {
|
|
107
|
+
if (!mutStartOptions) {
|
|
108
|
+
return {
|
|
109
|
+
body: {
|
|
110
|
+
status: 'bootstrapping'
|
|
111
|
+
},
|
|
112
|
+
headers: {
|
|
113
|
+
'content-type': MIME
|
|
114
|
+
},
|
|
115
|
+
status: FAILED_STATUS
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
else if (!mutStartOptions.started()) {
|
|
119
|
+
return {
|
|
120
|
+
body: {
|
|
121
|
+
status: 'starting'
|
|
122
|
+
},
|
|
123
|
+
headers: {
|
|
124
|
+
'content-type': MIME
|
|
125
|
+
},
|
|
126
|
+
status: FAILED_STATUS
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const content = (await getDetails(true));
|
|
130
|
+
return {
|
|
131
|
+
status: content.status == 'pass' ? SUCCESSFUL_STATUS : FAILED_STATUS,
|
|
132
|
+
body: content,
|
|
133
|
+
headers: {
|
|
134
|
+
'content-type': MIME
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
});
|
|
138
|
+
/**
|
|
139
|
+
* The liveness probe is what you might expect-it indicates whether
|
|
140
|
+
* the container is alive or not. If a container fails its liveness
|
|
141
|
+
* probe, Kubernetes will kill the pod and restart another.
|
|
142
|
+
*/
|
|
143
|
+
routes.get('/health/live', async () => {
|
|
144
|
+
return { status: SUCCESSFUL_STATUS, body: 'alive' };
|
|
145
|
+
});
|
|
146
|
+
const middleware = routes.middleware();
|
|
147
|
+
server.use(middleware);
|
|
148
|
+
return {
|
|
149
|
+
async start(opt) {
|
|
150
|
+
mutStartOptions = opt;
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=status-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-checks.js","sourceRoot":"","sources":["../src/status-checks.ts"],"names":[],"mappings":";;AAsCA,gEAiKC;AAjMD,qCAAiC;AAyBjC;;;;;;GAMG;AACI,KAAK,UAAU,0BAA0B,CAA8B,UAG7E;IACC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;IAE7B,IAAI,eAAiE,CAAA;IAErE,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAA;IAE3B,MAAM,iBAAiB,GAAG,GAAG,CAAA;IAC7B,MAAM,aAAa,GAAG,GAAG,CAAA;IACzB,MAAM,IAAI,GAAG,wCAAwC,CAAA;IAErD,KAAK,UAAU,UAAU,CAAC,OAAgB;QACxC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,UAAU,GAAiD,eAAe,CAAC,aAAa,EAAE,CAAA;QAEhG,MAAM,MAAM,GAAkD,EAAE,CAAA;QAEhE,IAAI,YAAY,GAAsC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAA;QAEjG,KAAK,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;YACzB,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,UAAU,EAAE,CAAC;gBACrD,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,CAAC;oBACP,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;wBAC1B,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAE,EAAE;6BAC3B,IAAI,CAAC,EAAE,CAAC;6BACR,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;oBAC3B,CAAC,CAAC;iBACH,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QAE/D,MAAM,OAAO,GAA2B;YACtC,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;SAC3D,CAAA;QAED,KAAK,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;gBACzB,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;aAC7C,CAAA;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;gBACL,IAAI,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;gBAChC,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,cAAc,EAAE,IAAI;iBACrB;aACF,CAAA;QACH,CAAC;QACD,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9B,MAAM,OAAO,GAA2B,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,CAAE,CAAA;YAElE,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa;gBACpE,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE;oBACP,cAAc,EAAE,IAAI;iBACrB;aACF,CAAA;QACH,CAAC;aAAM,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,cAAc,EAAE,IAAI;iBACrB;aACF,CAAA;QACH,CAAC;QACD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,cAAc,EAAE,IAAI;aACrB;SACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF;;;;;;;;;OASG;IACH,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;gBACL,IAAI,EAAE;oBACJ,MAAM,EAAE,eAAe;iBACxB;gBACD,OAAO,EAAE;oBACP,cAAc,EAAE,IAAI;iBACrB;gBACD,MAAM,EAAE,aAAa;aACtB,CAAA;QACH,CAAC;aAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,OAAO;gBACL,IAAI,EAAE;oBACJ,MAAM,EAAE,UAAU;iBACnB;gBACD,OAAO,EAAE;oBACP,cAAc,EAAE,IAAI;iBACrB;gBACD,MAAM,EAAE,aAAa;aACtB,CAAA;QACH,CAAC;QAED,MAAM,OAAO,GAA2B,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAE,CAAA;QAEjE,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa;YACpE,IAAI,EAAE,OAAO;YACb,OAAO,EAAE;gBACP,cAAc,EAAE,IAAI;aACrB;SACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QACpC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;IACtC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAEtB,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,GAAG;YACb,eAAe,GAAG,GAAG,CAAA;QACvB,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ILoggerComponent } from '@well-known-components/interfaces';
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import https from 'https';
|
|
4
|
+
import type { Duplex } from 'stream';
|
|
5
|
+
type Socket = Duplex & {
|
|
6
|
+
server?: http.Server | https.Server;
|
|
7
|
+
};
|
|
8
|
+
export type HttpTerminatorConfigurationInput = {
|
|
9
|
+
gracefulTerminationTimeout: number;
|
|
10
|
+
};
|
|
11
|
+
export declare function createServerTerminator(server: http.Server | https.Server, components: {
|
|
12
|
+
logger: ILoggerComponent.ILogger;
|
|
13
|
+
}, configurationInput: Partial<HttpTerminatorConfigurationInput>): {
|
|
14
|
+
secureSockets: Set<Socket>;
|
|
15
|
+
sockets: Set<Socket>;
|
|
16
|
+
terminate: () => Promise<void>;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Based on work of https://github.com/gajus/http-terminator
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createServerTerminator = createServerTerminator;
|
|
8
|
+
const fp_future_1 = __importDefault(require("fp-future"));
|
|
9
|
+
const http_1 = __importDefault(require("http"));
|
|
10
|
+
const https_1 = __importDefault(require("https"));
|
|
11
|
+
const configurationDefaults = {
|
|
12
|
+
gracefulTerminationTimeout: 1000
|
|
13
|
+
};
|
|
14
|
+
function delay(ms) {
|
|
15
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
16
|
+
}
|
|
17
|
+
function createServerTerminator(server, components, configurationInput) {
|
|
18
|
+
const { logger } = components;
|
|
19
|
+
const configuration = {
|
|
20
|
+
...configurationDefaults,
|
|
21
|
+
...configurationInput
|
|
22
|
+
};
|
|
23
|
+
const sockets = new Set();
|
|
24
|
+
const secureSockets = new Set();
|
|
25
|
+
let terminating;
|
|
26
|
+
server.on('connection', (socket) => {
|
|
27
|
+
if (terminating) {
|
|
28
|
+
socket.destroy();
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
sockets.add(socket);
|
|
32
|
+
socket.once('close', () => {
|
|
33
|
+
sockets.delete(socket);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
server.on('secureConnection', (socket) => {
|
|
38
|
+
if (terminating) {
|
|
39
|
+
socket.destroy();
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
secureSockets.add(socket);
|
|
43
|
+
socket.once('close', () => {
|
|
44
|
+
secureSockets.delete(socket);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Evaluate whether additional steps are required to destroy the socket.
|
|
50
|
+
*
|
|
51
|
+
* @see https://github.com/nodejs/node/blob/57bd715d527aba8dae56b975056961b0e429e91e/lib/_http_client.js#L363-L413
|
|
52
|
+
*/
|
|
53
|
+
const destroySocket = (socket) => {
|
|
54
|
+
socket.destroy();
|
|
55
|
+
if (socket.server instanceof http_1.default.Server) {
|
|
56
|
+
sockets.delete(socket);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
secureSockets.delete(socket);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const terminate = async () => {
|
|
63
|
+
if (terminating) {
|
|
64
|
+
logger.warn('Already terminating HTTP server');
|
|
65
|
+
return terminating;
|
|
66
|
+
}
|
|
67
|
+
terminating = (0, fp_future_1.default)();
|
|
68
|
+
server.on('request', (incomingMessage, outgoingMessage) => {
|
|
69
|
+
if (!outgoingMessage.headersSent) {
|
|
70
|
+
outgoingMessage.setHeader('connection', 'close');
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
for (const socket of sockets) {
|
|
74
|
+
// This is the HTTP CONNECT request socket.
|
|
75
|
+
// Unclear if I am using wrong type or how else this should be handled.
|
|
76
|
+
if (!(socket.server instanceof https_1.default.Server) && !(socket.server instanceof http_1.default.Server)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// @ts-expect-error Unclear if I am using wrong type or how else this should be handled.
|
|
80
|
+
const serverResponse = socket._httpMessage;
|
|
81
|
+
if (serverResponse) {
|
|
82
|
+
if (!serverResponse.headersSent) {
|
|
83
|
+
serverResponse.setHeader('connection', 'close');
|
|
84
|
+
}
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
destroySocket(socket);
|
|
88
|
+
}
|
|
89
|
+
for (const socket of secureSockets) {
|
|
90
|
+
// @ts-expect-error Unclear if I am using wrong type or how else this should be handled.
|
|
91
|
+
const serverResponse = socket._httpMessage;
|
|
92
|
+
if (serverResponse) {
|
|
93
|
+
if (!serverResponse.headersSent) {
|
|
94
|
+
serverResponse.setHeader('connection', 'close');
|
|
95
|
+
}
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
destroySocket(socket);
|
|
99
|
+
}
|
|
100
|
+
if (sockets.size) {
|
|
101
|
+
await delay(configuration.gracefulTerminationTimeout);
|
|
102
|
+
for (const socket of sockets) {
|
|
103
|
+
destroySocket(socket);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (secureSockets.size) {
|
|
107
|
+
await delay(configuration.gracefulTerminationTimeout);
|
|
108
|
+
for (const socket of secureSockets) {
|
|
109
|
+
destroySocket(socket);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
server.close((error) => {
|
|
113
|
+
if (error) {
|
|
114
|
+
terminating.reject(error);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
terminating.resolve();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return terminating;
|
|
121
|
+
};
|
|
122
|
+
return {
|
|
123
|
+
secureSockets,
|
|
124
|
+
sockets,
|
|
125
|
+
terminate
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=terminator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminator.js","sourceRoot":"","sources":["../src/terminator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IHttpServerComponent } from '@well-known-components/interfaces';
|
|
2
|
+
import { IFetchComponent } from '@well-known-components/interfaces';
|
|
3
|
+
import type { WebSocket as WS } from 'ws';
|
|
4
|
+
/** @alpha */
|
|
5
|
+
export type IWebSocketComponent<W = WS> = {
|
|
6
|
+
createWebSocket(url: string, protocols?: string | string[]): W;
|
|
7
|
+
};
|
|
8
|
+
/** @public */
|
|
9
|
+
export type ITestHttpServerComponent<Context extends object> = IHttpServerComponent<Context> & IFetchComponent & {
|
|
10
|
+
resetMiddlewares(): void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* @alpha
|
|
14
|
+
*/
|
|
15
|
+
export type TestServerWithWs = {
|
|
16
|
+
ws(path: string, protocols: string | string[]): WS;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Creates a http-server component for tests
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
export declare function createTestServerComponent<Context extends object = {}>(): ITestHttpServerComponent<Context>;
|