@databehave/server 0.1.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/CHANGELOG.md +28 -0
- package/LICENSE +21 -0
- package/README.md +87 -0
- package/dist/admin/admin-routes.d.ts +42 -0
- package/dist/admin/admin-routes.d.ts.map +1 -0
- package/dist/admin/admin-routes.js +472 -0
- package/dist/admin/admin-routes.js.map +1 -0
- package/dist/admin/admin-types.d.ts +170 -0
- package/dist/admin/admin-types.d.ts.map +1 -0
- package/dist/admin/admin-types.js +30 -0
- package/dist/admin/admin-types.js.map +1 -0
- package/dist/admin/banner.d.ts +11 -0
- package/dist/admin/banner.d.ts.map +1 -0
- package/dist/admin/banner.js +5 -0
- package/dist/admin/banner.js.map +1 -0
- package/dist/admin/header-parser.d.ts +14 -0
- package/dist/admin/header-parser.d.ts.map +1 -0
- package/dist/admin/header-parser.js +171 -0
- package/dist/admin/header-parser.js.map +1 -0
- package/dist/admin/inject.d.ts +48 -0
- package/dist/admin/inject.d.ts.map +1 -0
- package/dist/admin/inject.js +167 -0
- package/dist/admin/inject.js.map +1 -0
- package/dist/admin/overrides-store.d.ts +18 -0
- package/dist/admin/overrides-store.d.ts.map +1 -0
- package/dist/admin/overrides-store.js +100 -0
- package/dist/admin/overrides-store.js.map +1 -0
- package/dist/admin/resolve-cors.d.ts +22 -0
- package/dist/admin/resolve-cors.d.ts.map +1 -0
- package/dist/admin/resolve-cors.js +28 -0
- package/dist/admin/resolve-cors.js.map +1 -0
- package/dist/admin/scenarios-store.d.ts +15 -0
- package/dist/admin/scenarios-store.d.ts.map +1 -0
- package/dist/admin/scenarios-store.js +109 -0
- package/dist/admin/scenarios-store.js.map +1 -0
- package/dist/admin/ui.css +2 -0
- package/dist/admin/ui.html +13 -0
- package/dist/admin/ui.js +240 -0
- package/dist/bin-helpers.d.ts +46 -0
- package/dist/bin-helpers.d.ts.map +1 -0
- package/dist/bin-helpers.js +61 -0
- package/dist/bin-helpers.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +57 -0
- package/dist/bin.js.map +1 -0
- package/dist/cors.d.ts +57 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/cors.js +167 -0
- package/dist/cors.js.map +1 -0
- package/dist/define.d.ts +26 -0
- package/dist/define.d.ts.map +1 -0
- package/dist/define.js +55 -0
- package/dist/define.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/json-config.d.ts +170 -0
- package/dist/json-config.d.ts.map +1 -0
- package/dist/json-config.js +684 -0
- package/dist/json-config.js.map +1 -0
- package/dist/jsonc.d.ts +24 -0
- package/dist/jsonc.d.ts.map +1 -0
- package/dist/jsonc.js +125 -0
- package/dist/jsonc.js.map +1 -0
- package/dist/log.d.ts +57 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +103 -0
- package/dist/log.js.map +1 -0
- package/dist/middleware/request-validation.d.ts +58 -0
- package/dist/middleware/request-validation.d.ts.map +1 -0
- package/dist/middleware/request-validation.js +328 -0
- package/dist/middleware/request-validation.js.map +1 -0
- package/dist/mock-mode.d.ts +95 -0
- package/dist/mock-mode.d.ts.map +1 -0
- package/dist/mock-mode.js +95 -0
- package/dist/mock-mode.js.map +1 -0
- package/dist/openapi/auto-schema.d.ts +83 -0
- package/dist/openapi/auto-schema.d.ts.map +1 -0
- package/dist/openapi/auto-schema.js +232 -0
- package/dist/openapi/auto-schema.js.map +1 -0
- package/dist/openapi/generate.d.ts +20 -0
- package/dist/openapi/generate.d.ts.map +1 -0
- package/dist/openapi/generate.js +121 -0
- package/dist/openapi/generate.js.map +1 -0
- package/dist/openapi/loader.d.ts +18 -0
- package/dist/openapi/loader.d.ts.map +1 -0
- package/dist/openapi/loader.js +25 -0
- package/dist/openapi/loader.js.map +1 -0
- package/dist/openapi/register.d.ts +58 -0
- package/dist/openapi/register.d.ts.map +1 -0
- package/dist/openapi/register.js +166 -0
- package/dist/openapi/register.js.map +1 -0
- package/dist/openapi/seed.d.ts +16 -0
- package/dist/openapi/seed.d.ts.map +1 -0
- package/dist/openapi/seed.js +58 -0
- package/dist/openapi/seed.js.map +1 -0
- package/dist/openapi/translate.d.ts +55 -0
- package/dist/openapi/translate.d.ts.map +1 -0
- package/dist/openapi/translate.js +319 -0
- package/dist/openapi/translate.js.map +1 -0
- package/dist/openapi/walker.d.ts +44 -0
- package/dist/openapi/walker.d.ts.map +1 -0
- package/dist/openapi/walker.js +15 -0
- package/dist/openapi/walker.js.map +1 -0
- package/dist/request.d.ts +19 -0
- package/dist/request.d.ts.map +1 -0
- package/dist/request.js +66 -0
- package/dist/request.js.map +1 -0
- package/dist/response.d.ts +13 -0
- package/dist/response.d.ts.map +1 -0
- package/dist/response.js +43 -0
- package/dist/response.js.map +1 -0
- package/dist/route-key.d.ts +60 -0
- package/dist/route-key.d.ts.map +1 -0
- package/dist/route-key.js +105 -0
- package/dist/route-key.js.map +1 -0
- package/dist/run.d.ts +27 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +87 -0
- package/dist/run.js.map +1 -0
- package/dist/server.d.ts +60 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +497 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +274 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/validation/validate.d.ts +38 -0
- package/dist/validation/validate.d.ts.map +1 -0
- package/dist/validation/validate.js +372 -0
- package/dist/validation/validate.js.map +1 -0
- package/docs/admin/error-mode.md +14 -0
- package/docs/admin/headers.md +63 -0
- package/docs/admin/index.md +111 -0
- package/docs/admin/overrides.md +23 -0
- package/docs/admin/rest-api.md +90 -0
- package/docs/admin/scenarios.md +28 -0
- package/docs/cli.md +76 -0
- package/docs/config/admin.md +62 -0
- package/docs/config/cors.md +72 -0
- package/docs/config/endpoints.md +162 -0
- package/docs/config/index.md +107 -0
- package/docs/config/log.md +43 -0
- package/docs/config/mock-mode.md +84 -0
- package/docs/config/openapi.md +8 -0
- package/docs/config/schema.md +34 -0
- package/docs/config/server.md +32 -0
- package/docs/config/validation.md +161 -0
- package/docs/design.md +517 -0
- package/docs/errors.md +192 -0
- package/docs/getting-started.md +146 -0
- package/docs/index.md +23 -0
- package/docs/openapi/auto-schema.md +146 -0
- package/docs/openapi/fallback.md +242 -0
- package/docs/openapi/keywords.md +78 -0
- package/docs/recipes.md +258 -0
- package/docs/stability.md +118 -0
- package/docs/troubleshooting.md +191 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-routes.js","sourceRoot":"","sources":["../../src/admin/admin-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAWxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAG1D,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACpD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AACzC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAE3C,8EAA8E;AAC9E,4EAA4E;AAC5E,yEAAyE;AACzE,2DAA2D;AAC3D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAA;AACnD,IAAI,SAA6B,CAAA;AACjC,IAAI,UAA8B,CAAA;AAElC;;;;;;;GAOG;AACH,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,QAAgB,EAAU,EAAE;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACzC,OAAO,GAAG;SACP,OAAO,CAAC,mBAAmB,EAAE,QAAQ,QAAQ,SAAS,CAAC;SACvD,OAAO,CAAC,qBAAqB,EAAE,SAAS,QAAQ,UAAU,CAAC;SAC3D,OAAO,CACN,uBAAuB,EACvB,sCAAsC,QAAQ,qCAAqC,CACpF,CAAA;AACL,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,CAAU,EAAgC,EAAE,CACjE,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAE1D,MAAM,YAAY,GAAG,CAAC,GAAY,EAAqC,EAAE;IACvE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAA;IAC7C,CAAC;IACD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,aAAa;YAChB,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;gBAChC,OAAO,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAA;YACpD,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;QAC5D,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;gBACjC,OAAO,CAAC,IAAI,EAAE,yCAAyC,CAAC,CAAA;YAC1D,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAA;YAC1E,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC3B,OAAO,CAAC,IAAI,EAAE,+CAA+C,CAAC,CAC/D;gBAAC,IAA4C,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAA;YAClE,CAAC;YACD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrB,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAA;YACnE,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAA;YAC/D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;oBAChC,OAAO,CAAC,IAAI,EAAE,mCAAmC,CAAC,CACnD;gBAAC,IAA4B,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;YACpD,CAAC;YACD,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;oBACrC,OAAO,CAAC,IAAI,EAAE,wCAAwC,CAAC,CACxD;gBAAC,IAAiC,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAA;YACnE,CAAC;YACD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrB,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;YAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;oBAChC,OAAO,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAClD;gBAAC,IAA4B,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;YACpD,CAAC;YACD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrB,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;YAClD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;oBAChC,OAAO,CAAC,IAAI,EAAE,sCAAsC,CAAC,CACtD;gBAAC,IAA4B,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;YACpD,CAAC;YACD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrB,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC;gBAC1C,OAAO,CAAC,IAAI,EAAE,wCAAwC,CAAC,CAAA;YACzD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;YACxE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC3C,IAAI,GAAG;gBAAE,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,EAAE,CAAC,CAAA;YAC5C,IACE,KAAM,CAAC,IAAI,KAAK,OAAO;gBACvB,KAAM,CAAC,IAAI,KAAK,MAAM;gBACtB,KAAM,CAAC,IAAI,KAAK,SAAS,EACzB,CAAC;gBACD,OAAO,CAAC,IAAI,EAAE,wBAAwB,KAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YACtD,CAAC;YACD,OAAO;gBACL;oBACE,IAAI,EAAE,OAAO;oBACb,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,KAGL;iBACF;gBACD,IAAI;aACL,CAAA;QACH,CAAC;QACD,KAAK,MAAM;YACT,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;QACjC,KAAK,SAAS;YACZ,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,CAAA;QACpC;YACE,OAAO,CAAC,IAAI,EAAE,sBAAsB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CACtB,GAAY,EAC6B,EAAE;IAC3C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAA;IAChD,CAAC;IACD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;gBAChC,OAAO,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAA;YAChD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC3D,OAAO,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAA;YACnD,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;QACtE,KAAK,MAAM;YACT,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC3D,OAAO,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAA;YACnD,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;QACjD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;gBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;YAChE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC7B,OAAO,CAAC,IAAI,EAAE,6CAA6C,CAAC,CAAA;YAC9D,MAAM,OAAO,GAAa,EAAE,CAAA;YAC5B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ;oBACvB,OAAO,CAAC,IAAI,EAAE,6CAA6C,CAAC,CAAA;gBAC9D,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;gBACxB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBACtB,OAAO,CAAC,IAAI,EAAE,2CAA2C,CAAC,CAAA;gBAC5D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;YACrC,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;YAC3D,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAA;QAC5C,CAAC;QACD;YACE,OAAO,CAAC,IAAI,EAAE,yBAAyB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9D,CAAC;AACH,CAAC,CAAA;AAoBD,MAAM,oBAAoB,GAAG,CAC3B,WAA+B,EAC/B,aAA0E,EAC1E,QAAgB,EACsC,EAAE;IACxD,MAAM,GAAG,GAAuB,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAe,CAAA;YACjD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAA;YAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7C,KAAK,MAAM,MAAM,IAAI;oBACnB,KAAK;oBACL,MAAM;oBACN,KAAK;oBACL,QAAQ;oBACR,OAAO;iBACC,EAAE,CAAC;oBACX,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;oBACtB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;wBACrB,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;wBAClC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,CAAA;wBACzB,GAAG,CAAC,IAAI,CAAC;4BACP,MAAM,EAAE,KAAK;4BACb,IAAI,EAAE,CAAC;4BACP,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ;gCAChC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE;gCACzB,CAAC,CAAC,EAAE,CAAC;4BACP,MAAM,EAAE,SAAS;yBAClB,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;YACpC,uEAAuE;YACvE,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC;gBAAE,SAAQ;YACtE,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;YAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAQ;YAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;QAClC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CACjC,CAAA;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAA;AAChE,CAAC,CAAA;AAwBD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAwB,EACY,EAAE;IACtC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAA;IAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,KAAK,KAAK,CAAA;IAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAA;IAC1C,MAAM,WAAW,GAAG,oBAAoB,CACtC,WAAW,EACX,IAAI,CAAC,aAAa,EAClB,QAAQ,CACT,CAAA;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,2DAA2D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CACvF,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,IAAa,EAAgB,EAAE,CAAC,CAAC;QAC7D,MAAM;QACN,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE;KAC5B,CAAC,CAAA;IAEF,MAAM,SAAS,GAAY,KAAK,IAAI,EAAE;QACpC,IAAI,CAAC;YACH,IAAI,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;gBAChD,IAAI,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;gBAClC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YACvC,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,CAAA;YACzD,yFAAyF;QAC3F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,EAAE;gBACf,KAAK,EAAE,wBAAwB;gBAC/B,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACzD,CAAC,CAAA;QACJ,CAAC;QACD,oBAAoB;IACtB,CAAC,CAAA;IAED,MAAM,WAAW,GAAY,KAAK,IAAI,EAAE;QACtC,IAAI,CAAC;YACH,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,SAAS,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAChD,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACP,GAAG,WAAW;oBACd,cAAc,EAAE,uCAAuC;iBACxD;aACF,CAAA;YACD,uFAAuF;QACzF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,EAAE;gBACf,KAAK,EAAE,sBAAsB;gBAC7B,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACzD,CAAC,CAAA;QACJ,CAAC;QACD,oBAAoB;IACtB,CAAC,CAAA;IAED,MAAM,YAAY,GAAY,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC;YACH,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,UAAU,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YAClD,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,GAAG,WAAW;oBACd,cAAc,EAAE,yBAAyB;iBAC1C;aACF,CAAA;YACD,wFAAwF;QAC1F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,EAAE;gBACf,KAAK,EAAE,uBAAuB;gBAC9B,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACzD,CAAC,CAAA;QACJ,CAAC;QACD,oBAAoB;IACtB,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAY,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IAE/D,MAAM,iBAAiB,GAAY,GAAG,EAAE;QACtC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAA;QAC/D,CAAC;QACD,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE;gBACP,GAAG,WAAW;gBACd,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU;aAC5B;SACF,CAAA;IACH,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAY,GAAG,EAAE,CACzC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAExC,MAAM,kBAAkB,GAAY,KAAK,EACvC,GAAgB,EAChB,EAAE;QACF,IAAI,IAAa,CAAA;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,EAAE;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACzD,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACtB,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAA;QAC3D,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrD,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,IAAI,EAAE,EAAE,CAAC,CAAA;QACjE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,OAAO;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,OAAO,EAAE,EAAE,CAAC,CAAA;QACpE,MAAM,WAAW,GACf,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;QACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;YACzB,OAAO,EAAE,OAAQ;YACjB,IAAI,EAAE,IAAK;YACX,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC,CAAA;QACF,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE;YACnC,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE;SAC5B,CAAA;IACH,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAY,CACjC,GAAgB,EAChB,EAAE;QACF,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;QACxB,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAA;QACnD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC3B,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACzC,CAAC,CAAA;IAED,MAAM,eAAe,GAAY,GAAG,EAAE;QACpC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QACvB,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IAClC,CAAC,CAAA;IAED,MAAM,MAAM,GAAuC;QACjD,CAAC,OAAO,QAAQ,iBAA6B,CAAC,EAC5C,iBAAiB;QACnB,CAAC,OAAO,QAAQ,eAA2B,CAAC,EAAE,iBAAiB;QAC/D,CAAC,OAAO,QAAQ,YAAwB,CAAC,EACvC,oBAAoB;QACtB,CAAC,QAAQ,QAAQ,YAAwB,CAAC,EAAE,kBAAkB;QAC9D,CAAC,UAAU,QAAQ,YAAwB,CAAC,EAAE,eAAe;QAC7D,CAAC,UAAU,QAAQ,gBAA4B,CAAC,EAC9C,iBAAiB;KACpB,CAAA;IACD,IAAI,EAAE,EAAE,CAAC;QACP,oEAAoE;QACpE,sEAAsE;QACtE,MAAM,CAAC,OAAO,QAAQ,EAAc,CAAC,GAAG,SAAS,CAAA;QACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,QAAQ,GAAe,CAAC,GAAG,SAAS,CAAA;QACpD,CAAC;QACD,MAAM,CAAC,OAAO,QAAQ,QAAoB,CAAC,GAAG,WAAW,CAAA;QACzD,MAAM,CAAC,OAAO,QAAQ,SAAqB,CAAC,GAAG,YAAY,CAAA;IAC7D,CAAC;IAED,mEAAmE;IACnE,6DAA6D;IAC7D,qEAAqE;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;IAChC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,oBAAoB,GAAY,KAAK,IAAI,EAAE,CAC/C,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAElD,MAAM,kBAAkB,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;YAClC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAA;YACtD,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/D,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACrB,CAAC,CAAA;QAED,MAAM,qBAAqB,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE;YACnD,IAAI,IAAa,CAAA;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,GAAG,EAAE;oBACf,KAAK,EAAE,mBAAmB;oBAC1B,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACzD,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACtB,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAA;YAC3D,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YAC3D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,EAAE;oBACf,KAAK,EACH,0DAA0D;iBAC7D,CAAC,CAAA;YACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;YAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACvC,CAAC,CAAE,QAAoB;gBACvB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;YAChB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YACnD,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE;aAC5B,CAAA;QACH,CAAC,CAAA;QAED,MAAM,qBAAqB,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE;YACnD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;YAClC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAA;YACtD,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACvC,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAA;YAChE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,CAAC,CAAA;QAED,MAAM,mBAAmB,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;YAClC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAA;YACtD,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/D,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;oBACtB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,GAAG,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS;wBAC7B,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE;wBAChC,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC,CAAA;gBACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACvB,CAAC;YACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,CAAC,CAAA;QAED,MAAM,CAAC,OAAO,QAAQ,YAAwB,CAAC;YAC7C,oBAAoB,CAAA;QACtB,MAAM,CAAC,OAAO,QAAQ,kBAA8B,CAAC;YACnD,kBAAkB,CAAA;QACpB,MAAM,CAAC,QAAQ,QAAQ,YAAwB,CAAC;YAC9C,qBAAqB,CAAA;QACvB,MAAM,CACJ,UAAU,QAAQ,kBAA8B,CACjD,GAAG,qBAAqB,CAAA;QACzB,MAAM,CACJ,QAAQ,QAAQ,uBAAmC,CACpD,GAAG,mBAAmB,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin-mode types & internal sentinel.
|
|
3
|
+
*
|
|
4
|
+
* `admin` is an opt-in extension of `Config` that
|
|
5
|
+
* mounts an in-memory error-injection panel + `x-mock-*` headers
|
|
6
|
+
* under a configurable mount path (default `/databehave`). See
|
|
7
|
+
* {@link AdminModeConfig} on `Config.admin`.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Internal symbol attached to the response object returned by
|
|
11
|
+
* {@link createInjectHook} when an `x-mock-destroy` is honored. The
|
|
12
|
+
* kit's `server.listen()` http adapter recognizes this property and
|
|
13
|
+
* drops the underlying socket without writing a response. Hidden
|
|
14
|
+
* from {@link MockResponse} on purpose — destroy is not a
|
|
15
|
+
* normal HTTP response shape.
|
|
16
|
+
*/
|
|
17
|
+
export declare const DESTROY_SOCKET_SENTINEL: unique symbol;
|
|
18
|
+
export type DestroySocketSentinel = typeof DESTROY_SOCKET_SENTINEL;
|
|
19
|
+
/**
|
|
20
|
+
* Thrown internally by `server.fetch` when the admin inject hook
|
|
21
|
+
* surfaced a {@link DESTROY_SOCKET_SENTINEL} response. `server.listen()`
|
|
22
|
+
* catches it and destroys the socket; callers of `server.fetch()`
|
|
23
|
+
* outside a listening server will observe the throw.
|
|
24
|
+
*/
|
|
25
|
+
export declare class AdminDestroySocketSignal extends Error {
|
|
26
|
+
readonly name = "AdminDestroySocketSignal";
|
|
27
|
+
constructor();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Discriminated union of every error mode the admin layer can inject.
|
|
31
|
+
* 1. `http-status` — non-2xx → typical HTTP error
|
|
32
|
+
* 2. `business-failure` — 2xx + `{success:false, message}`
|
|
33
|
+
* 3. `custom-body` — arbitrary status + arbitrary JSON / text
|
|
34
|
+
* 4. `empty-body` — empty body
|
|
35
|
+
* 5. `malformed-json` — body is literally `{` so JSON.parse blows up
|
|
36
|
+
* 6. `delay` — sleep `ms` then either run `then` or pass through
|
|
37
|
+
* 7. `hang` — never resolve (FE timeout / hang detection)
|
|
38
|
+
* 8. `destroy` — drop the socket without a response
|
|
39
|
+
*/
|
|
40
|
+
export type ErrorMode = {
|
|
41
|
+
kind: 'http-status';
|
|
42
|
+
status: number;
|
|
43
|
+
} | {
|
|
44
|
+
kind: 'business-failure';
|
|
45
|
+
message: string;
|
|
46
|
+
extra?: Record<string, unknown>;
|
|
47
|
+
} | {
|
|
48
|
+
kind: 'custom-body';
|
|
49
|
+
status?: number;
|
|
50
|
+
body: unknown;
|
|
51
|
+
contentType?: string;
|
|
52
|
+
} | {
|
|
53
|
+
kind: 'empty-body';
|
|
54
|
+
status?: number;
|
|
55
|
+
} | {
|
|
56
|
+
kind: 'malformed-json';
|
|
57
|
+
status?: number;
|
|
58
|
+
} | {
|
|
59
|
+
kind: 'delay';
|
|
60
|
+
ms: number;
|
|
61
|
+
then?: Exclude<ErrorMode, {
|
|
62
|
+
kind: 'delay';
|
|
63
|
+
} | {
|
|
64
|
+
kind: 'hang';
|
|
65
|
+
} | {
|
|
66
|
+
kind: 'destroy';
|
|
67
|
+
}>;
|
|
68
|
+
} | {
|
|
69
|
+
kind: 'hang';
|
|
70
|
+
} | {
|
|
71
|
+
kind: 'destroy';
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Resolution priority (handled by `OverridesStore.resolve`):
|
|
75
|
+
* 1. `exact` (METHOD + path)
|
|
76
|
+
* 2. `path` (path only, any method)
|
|
77
|
+
* 3. `global` (every route)
|
|
78
|
+
*/
|
|
79
|
+
export type OverrideMatcher = {
|
|
80
|
+
kind: 'exact';
|
|
81
|
+
method: string;
|
|
82
|
+
path: string;
|
|
83
|
+
} | {
|
|
84
|
+
kind: 'path';
|
|
85
|
+
path: string;
|
|
86
|
+
} | {
|
|
87
|
+
kind: 'global';
|
|
88
|
+
methods?: readonly string[];
|
|
89
|
+
};
|
|
90
|
+
/** Alias kept for parity with the legacy reference; prefer {@link OverrideMatcher}. */
|
|
91
|
+
export type StickyMatcher = OverrideMatcher;
|
|
92
|
+
export interface StickyOverride {
|
|
93
|
+
readonly id: string;
|
|
94
|
+
readonly matcher: OverrideMatcher;
|
|
95
|
+
readonly mode: ErrorMode;
|
|
96
|
+
readonly createdAt: string;
|
|
97
|
+
readonly description?: string;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Admin-mode CORS policy.
|
|
101
|
+
*
|
|
102
|
+
* - `'auto'` — `'*'` when bind is loopback-only, `'same-origin'`
|
|
103
|
+
* when `bind === 'any'` (defensive default for
|
|
104
|
+
* LAN-exposed servers).
|
|
105
|
+
* - `'any'` — `Access-Control-Allow-Origin: *`.
|
|
106
|
+
* - `'same-origin'` — no CORS headers added; browser enforces same-origin.
|
|
107
|
+
* - `{ origin }` — explicit allowlist (string | string[]).
|
|
108
|
+
*/
|
|
109
|
+
export type AdminModeCors = 'auto' | 'any' | 'same-origin' | {
|
|
110
|
+
origin: string | readonly string[];
|
|
111
|
+
};
|
|
112
|
+
/** Opt-in admin-mode configuration. All fields optional. */
|
|
113
|
+
export interface AdminModeConfig {
|
|
114
|
+
/** Opt-in. Default: false. */
|
|
115
|
+
enabled?: boolean;
|
|
116
|
+
/** Mount point for admin routes. Default: '/databehave'. Must start with '/'. */
|
|
117
|
+
path?: string;
|
|
118
|
+
/** Serve the admin HTML page at `${path}` itself. Default: true when enabled. */
|
|
119
|
+
ui?: boolean;
|
|
120
|
+
/** Honor `x-mock-*` request headers. Default: true when enabled. */
|
|
121
|
+
headers?: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Bind policy. 'loopback-only' (default) refuses to enable admin when
|
|
124
|
+
* server.host resolves to a non-loopback address. 'any' allows it.
|
|
125
|
+
*/
|
|
126
|
+
bind?: 'loopback-only' | 'any';
|
|
127
|
+
/** Admin-route CORS — see {@link AdminModeCors}. Default: 'auto'. */
|
|
128
|
+
cors?: AdminModeCors;
|
|
129
|
+
/** Allow `x-mock-destroy: 1` and the equivalent sticky. Default: true. */
|
|
130
|
+
allowDestroy?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* When `true`, the kit spawns the platform browser opener on the
|
|
133
|
+
* resolved admin URL after `server.listen()` emits `listening`.
|
|
134
|
+
* Default: `false` — the URL is logged to stdout (see the
|
|
135
|
+
* `admin panel ready at …` banner) but no browser is launched.
|
|
136
|
+
* Opt-in only; consumers who prefer to click the logged link, or
|
|
137
|
+
* who run the kit in headless / CI environments, should leave this
|
|
138
|
+
* unset. The CLI's `--open` flag is ORed with this field, so either
|
|
139
|
+
* trigger launches the browser exactly once.
|
|
140
|
+
*/
|
|
141
|
+
openBrowserOnStart?: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Optional raw OpenAPI document body (JSON text) used to populate
|
|
144
|
+
* the route picker in the UI. The CLI fills this in from the
|
|
145
|
+
* config's `openapi` field; programmatic consumers can pass it
|
|
146
|
+
* directly.
|
|
147
|
+
*/
|
|
148
|
+
openapiBody?: string;
|
|
149
|
+
/**
|
|
150
|
+
* Directory used to persist named scenarios (snapshots of the
|
|
151
|
+
* current sticky overrides set). Default:
|
|
152
|
+
* `<process.cwd()>/mock-scenarios`. The directory is created on
|
|
153
|
+
* first write; a missing directory is treated as "no scenarios"
|
|
154
|
+
* rather than an error.
|
|
155
|
+
*/
|
|
156
|
+
scenariosDir?: string;
|
|
157
|
+
}
|
|
158
|
+
/** A persisted scenario — a named bundle of sticky overrides. */
|
|
159
|
+
export interface Scenario {
|
|
160
|
+
readonly name: string;
|
|
161
|
+
readonly overrides: readonly StickyOverride[];
|
|
162
|
+
readonly created?: string;
|
|
163
|
+
}
|
|
164
|
+
/** Lightweight scenario summary returned by the list endpoint. */
|
|
165
|
+
export interface ScenarioSummary {
|
|
166
|
+
readonly name: string;
|
|
167
|
+
readonly count: number;
|
|
168
|
+
readonly created: string;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=admin-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-types.d.ts","sourceRoot":"","sources":["../../src/admin/admin-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin-mode types & internal sentinel.
|
|
3
|
+
*
|
|
4
|
+
* `admin` is an opt-in extension of `Config` that
|
|
5
|
+
* mounts an in-memory error-injection panel + `x-mock-*` headers
|
|
6
|
+
* under a configurable mount path (default `/databehave`). See
|
|
7
|
+
* {@link AdminModeConfig} on `Config.admin`.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Internal symbol attached to the response object returned by
|
|
11
|
+
* {@link createInjectHook} when an `x-mock-destroy` is honored. The
|
|
12
|
+
* kit's `server.listen()` http adapter recognizes this property and
|
|
13
|
+
* drops the underlying socket without writing a response. Hidden
|
|
14
|
+
* from {@link MockResponse} on purpose — destroy is not a
|
|
15
|
+
* normal HTTP response shape.
|
|
16
|
+
*/
|
|
17
|
+
export const DESTROY_SOCKET_SENTINEL = Symbol.for('@databehave/server:admin:destroy-socket');
|
|
18
|
+
/**
|
|
19
|
+
* Thrown internally by `server.fetch` when the admin inject hook
|
|
20
|
+
* surfaced a {@link DESTROY_SOCKET_SENTINEL} response. `server.listen()`
|
|
21
|
+
* catches it and destroys the socket; callers of `server.fetch()`
|
|
22
|
+
* outside a listening server will observe the throw.
|
|
23
|
+
*/
|
|
24
|
+
export class AdminDestroySocketSignal extends Error {
|
|
25
|
+
name = 'AdminDestroySocketSignal';
|
|
26
|
+
constructor() {
|
|
27
|
+
super('@databehave/server: admin x-mock-destroy requested');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=admin-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-types.js","sourceRoot":"","sources":["../../src/admin/admin-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAkB,MAAM,CAAC,GAAG,CAC9D,yCAAyC,CAC1C,CAAA;AAGD;;;;;GAKG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,IAAI,GAAG,0BAA0B,CAAA;IAC1C;QACE,KAAK,CAAC,oDAAoD,CAAC,CAAA;IAC7D,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stdout notice emitted at `server.listen()` start when admin is
|
|
3
|
+
* enabled. Splitting it out keeps the banner format unit-testable
|
|
4
|
+
* (no need to spin up a real http server just to assert a string).
|
|
5
|
+
*/
|
|
6
|
+
export interface AdminBannerLogger {
|
|
7
|
+
info(message: string): void;
|
|
8
|
+
}
|
|
9
|
+
export declare const formatAdminBanner: (host: string, port: number, path: string) => string;
|
|
10
|
+
export declare const emitAdminBanner: (host: string, port: number, path: string, logger?: AdminBannerLogger) => void;
|
|
11
|
+
//# sourceMappingURL=banner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/admin/banner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,MAAM,MAAM,KACX,MAC2G,CAAA;AAE9G,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,SAAQ,iBAA2B,KAClC,IAEF,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const formatAdminBanner = (host, port, path) => `[@databehave/server] admin panel ready at http://${host}:${port}${path} (dev mock — disable in production)`;
|
|
2
|
+
export const emitAdminBanner = (host, port, path, logger = console) => {
|
|
3
|
+
logger.info(formatAdminBanner(host, port, path));
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/admin/banner.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAY,EACZ,IAAY,EACZ,IAAY,EACJ,EAAE,CACV,oDAAoD,IAAI,IAAI,IAAI,GAAG,IAAI,qCAAqC,CAAA;AAE9G,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,SAA4B,OAAO,EAC7B,EAAE;IACR,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAClD,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ErrorMode } from './admin-types.js';
|
|
2
|
+
export type HeaderParseResult = {
|
|
3
|
+
kind: 'none';
|
|
4
|
+
} | {
|
|
5
|
+
kind: 'mode';
|
|
6
|
+
mode: ErrorMode;
|
|
7
|
+
} | {
|
|
8
|
+
kind: 'error';
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const parseHeaderMode: (headers: Readonly<Record<string, string>>) => HeaderParseResult;
|
|
12
|
+
/** Public alias of {@link parseHeaderMode}. */
|
|
13
|
+
export declare const parseMockHeaders: (headers: Readonly<Record<string, string>>) => HeaderParseResult;
|
|
14
|
+
//# sourceMappingURL=header-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-parser.d.ts","sourceRoot":"","sources":["../../src/admin/header-parser.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAkJtC,eAAO,MAAM,eAAe,GAC1B,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACxC,iBAqCF,CAAA;AAGD,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,YA1ClB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACxC,iBAyC4C,CAAA"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse `x-mock-*` request headers into an `ErrorMode` (or surface a
|
|
3
|
+
* conflict error). One header set ↔ one ErrorMode. Multiple terminal
|
|
4
|
+
* modes (e.g. both `x-mock-status` and `x-mock-business-failure`) are
|
|
5
|
+
* rejected with `kind: 'conflict'` so the caller can return 400.
|
|
6
|
+
*
|
|
7
|
+
* Base64 inputs (`x-mock-body`, `x-mock-business-failure-extra`) use
|
|
8
|
+
* standard base64 (NOT url-safe), per the README contract.
|
|
9
|
+
*/
|
|
10
|
+
import { Buffer } from 'node:buffer';
|
|
11
|
+
// Note: `x-mock-business-failure-b64` is an alternative to
|
|
12
|
+
// `x-mock-business-failure` that accepts a base64-UTF8 message so
|
|
13
|
+
// non-ASCII strings can travel through an HTTP header — Node's fetch
|
|
14
|
+
// rejects non-ASCII byte values in header values.
|
|
15
|
+
const TERMINAL_HEADERS = [
|
|
16
|
+
'x-mock-status',
|
|
17
|
+
'x-mock-business-failure',
|
|
18
|
+
'x-mock-business-failure-b64',
|
|
19
|
+
'x-mock-body',
|
|
20
|
+
'x-mock-empty',
|
|
21
|
+
'x-mock-malformed',
|
|
22
|
+
'x-mock-hang',
|
|
23
|
+
'x-mock-destroy',
|
|
24
|
+
];
|
|
25
|
+
const get = (h, name) => h[name];
|
|
26
|
+
const decodeBase64Json = (raw, headerName) => {
|
|
27
|
+
let decoded;
|
|
28
|
+
try {
|
|
29
|
+
decoded = Buffer.from(raw, 'base64').toString('utf8');
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
throw new Error(`invalid ${headerName} header: base64 decode failed (${err instanceof Error ? err.message : String(err)})`);
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
return JSON.parse(decoded);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
throw new Error(`invalid ${headerName} header: JSON parse failed (${err instanceof Error ? err.message : String(err)})`);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const parseIntStrict = (raw, headerName) => {
|
|
42
|
+
const n = Number.parseInt(raw, 10);
|
|
43
|
+
if (!Number.isFinite(n)) {
|
|
44
|
+
throw new Error(`invalid ${headerName} header: not an integer (${JSON.stringify(raw)})`);
|
|
45
|
+
}
|
|
46
|
+
return n;
|
|
47
|
+
};
|
|
48
|
+
const parseTerminal = (h) => {
|
|
49
|
+
const present = TERMINAL_HEADERS.filter((name) => get(h, name) !== undefined);
|
|
50
|
+
if (present.length === 0)
|
|
51
|
+
return null;
|
|
52
|
+
if (present.length > 1) {
|
|
53
|
+
throw new Error(`conflicting x-mock-* headers: ${present.join(', ')} — pick exactly one terminal mode`);
|
|
54
|
+
}
|
|
55
|
+
const [only] = present;
|
|
56
|
+
switch (only) {
|
|
57
|
+
case 'x-mock-status': {
|
|
58
|
+
const status = parseIntStrict(get(h, 'x-mock-status'), 'x-mock-status');
|
|
59
|
+
return { kind: 'http-status', status };
|
|
60
|
+
}
|
|
61
|
+
case 'x-mock-business-failure':
|
|
62
|
+
case 'x-mock-business-failure-b64': {
|
|
63
|
+
let message;
|
|
64
|
+
if (only === 'x-mock-business-failure-b64') {
|
|
65
|
+
const raw = get(h, 'x-mock-business-failure-b64');
|
|
66
|
+
try {
|
|
67
|
+
message = Buffer.from(raw, 'base64').toString('utf8');
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
throw new Error(`invalid x-mock-business-failure-b64 header: base64 decode failed (${err instanceof Error ? err.message : String(err)})`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
message = get(h, 'x-mock-business-failure');
|
|
75
|
+
}
|
|
76
|
+
const extraRaw = get(h, 'x-mock-business-failure-extra');
|
|
77
|
+
if (extraRaw === undefined)
|
|
78
|
+
return { kind: 'business-failure', message };
|
|
79
|
+
const extra = decodeBase64Json(extraRaw, 'x-mock-business-failure-extra');
|
|
80
|
+
if (extra === null || typeof extra !== 'object' || Array.isArray(extra)) {
|
|
81
|
+
throw new Error('invalid x-mock-business-failure-extra header: decoded value must be a JSON object');
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
kind: 'business-failure',
|
|
85
|
+
message,
|
|
86
|
+
extra: extra,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
case 'x-mock-body': {
|
|
90
|
+
const body = decodeBase64Json(get(h, 'x-mock-body'), 'x-mock-body');
|
|
91
|
+
const statusRaw = get(h, 'x-mock-body-status');
|
|
92
|
+
const contentType = get(h, 'x-mock-body-content-type');
|
|
93
|
+
const mode = { kind: 'custom-body', body };
|
|
94
|
+
if (statusRaw !== undefined) {
|
|
95
|
+
;
|
|
96
|
+
mode.status = parseIntStrict(statusRaw, 'x-mock-body-status');
|
|
97
|
+
}
|
|
98
|
+
if (contentType !== undefined) {
|
|
99
|
+
;
|
|
100
|
+
mode.contentType = contentType;
|
|
101
|
+
}
|
|
102
|
+
return mode;
|
|
103
|
+
}
|
|
104
|
+
case 'x-mock-empty': {
|
|
105
|
+
const statusRaw = get(h, 'x-mock-empty-status');
|
|
106
|
+
if (statusRaw === undefined)
|
|
107
|
+
return { kind: 'empty-body' };
|
|
108
|
+
return {
|
|
109
|
+
kind: 'empty-body',
|
|
110
|
+
status: parseIntStrict(statusRaw, 'x-mock-empty-status'),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
case 'x-mock-malformed': {
|
|
114
|
+
const statusRaw = get(h, 'x-mock-malformed-status');
|
|
115
|
+
if (statusRaw === undefined)
|
|
116
|
+
return { kind: 'malformed-json' };
|
|
117
|
+
return {
|
|
118
|
+
kind: 'malformed-json',
|
|
119
|
+
status: parseIntStrict(statusRaw, 'x-mock-malformed-status'),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
case 'x-mock-hang':
|
|
123
|
+
return { kind: 'hang' };
|
|
124
|
+
case 'x-mock-destroy':
|
|
125
|
+
return { kind: 'destroy' };
|
|
126
|
+
/* v8 ignore next 3 -- exhaustiveness: unreachable */
|
|
127
|
+
default:
|
|
128
|
+
// exhaustiveness — unreachable.
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
export const parseHeaderMode = (headers) => {
|
|
133
|
+
try {
|
|
134
|
+
const terminal = parseTerminal(headers);
|
|
135
|
+
const delayRaw = get(headers, 'x-mock-delay');
|
|
136
|
+
if (terminal === null && delayRaw === undefined) {
|
|
137
|
+
return { kind: 'none' };
|
|
138
|
+
}
|
|
139
|
+
if (delayRaw === undefined) {
|
|
140
|
+
return { kind: 'mode', mode: terminal };
|
|
141
|
+
}
|
|
142
|
+
const ms = parseIntStrict(delayRaw, 'x-mock-delay');
|
|
143
|
+
if (ms < 0) {
|
|
144
|
+
return {
|
|
145
|
+
kind: 'error',
|
|
146
|
+
message: 'invalid x-mock-delay header: must be >= 0',
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (terminal === null) {
|
|
150
|
+
return { kind: 'mode', mode: { kind: 'delay', ms } };
|
|
151
|
+
}
|
|
152
|
+
if (terminal.kind === 'delay' ||
|
|
153
|
+
terminal.kind === 'hang' ||
|
|
154
|
+
terminal.kind === 'destroy') {
|
|
155
|
+
return {
|
|
156
|
+
kind: 'error',
|
|
157
|
+
message: `x-mock-delay cannot wrap kind=${terminal.kind}`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return { kind: 'mode', mode: { kind: 'delay', ms, then: terminal } };
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
return {
|
|
164
|
+
kind: 'error',
|
|
165
|
+
message: err instanceof Error ? err.message : String(err),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
/** Public alias of {@link parseHeaderMode}. */
|
|
170
|
+
export const parseMockHeaders = parseHeaderMode;
|
|
171
|
+
//# sourceMappingURL=header-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-parser.js","sourceRoot":"","sources":["../../src/admin/header-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* onRequest hook that consults `x-mock-*` headers + sticky overrides
|
|
3
|
+
* and produces a `MockResponse` short-circuit. Header-derived
|
|
4
|
+
* modes always beat sticky modes (per-request scoping > sticky rules).
|
|
5
|
+
*
|
|
6
|
+
* Modes handled directly here:
|
|
7
|
+
* - http-status, business-failure, custom-body, empty-body,
|
|
8
|
+
* malformed-json, delay (recursive), hang
|
|
9
|
+
*
|
|
10
|
+
* `destroy` is signalled via a sentinel response (see
|
|
11
|
+
* {@link DESTROY_SOCKET_SENTINEL}) so the kit's `server.listen()` http
|
|
12
|
+
* adapter can drop the socket without writing a body. When
|
|
13
|
+
* `allowDestroy: false`, destroy resolves to a normal 503 response
|
|
14
|
+
* instead.
|
|
15
|
+
*/
|
|
16
|
+
import type { MockRequest, MockResponse } from '../types.js';
|
|
17
|
+
import type { OverridesStore } from './overrides-store.js';
|
|
18
|
+
import { type ErrorMode } from './admin-types.js';
|
|
19
|
+
export type ResolveResult = {
|
|
20
|
+
kind: 'mode';
|
|
21
|
+
mode: ErrorMode;
|
|
22
|
+
source: 'header' | 'sticky';
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'error';
|
|
25
|
+
message: string;
|
|
26
|
+
} | {
|
|
27
|
+
kind: 'none';
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Pure resolver: header overrides beat sticky overrides. Returns
|
|
31
|
+
* `'none'` when nothing applies and `'error'` for malformed headers.
|
|
32
|
+
*/
|
|
33
|
+
export declare const resolveMode: (store: OverridesStore, method: string, path: string, headers: Readonly<Record<string, string>>) => ResolveResult;
|
|
34
|
+
export interface InjectHookOptions {
|
|
35
|
+
readonly store: OverridesStore;
|
|
36
|
+
/** Paths matching any of these prefixes are passed through (no injection). */
|
|
37
|
+
readonly bypassPathPrefixes?: readonly string[];
|
|
38
|
+
/** When false, destroy mode resolves to a 503 instead of dropping the socket. */
|
|
39
|
+
readonly allowDestroy?: boolean;
|
|
40
|
+
readonly logger?: {
|
|
41
|
+
warn(message: string): void;
|
|
42
|
+
info?(message: string): void;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export declare const createInjectHook: (opts: InjectHookOptions) => (req: MockRequest) => Promise<MockResponse | void>;
|
|
46
|
+
/** True when the response carries the internal destroy-socket sentinel. */
|
|
47
|
+
export declare const isDestroySocketSentinel: (res: MockResponse | undefined | null) => boolean;
|
|
48
|
+
//# sourceMappingURL=inject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/admin/inject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACb,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAI1E,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpB;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,cAAc,EACrB,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACxC,aAUF,CAAA;AAuGD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/C,iFAAiF;IACjF,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3B,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAC7B,CAAA;CACF;AAED,eAAO,MAAM,gBAAgB,GAAI,MAAM,iBAAiB,MAUpD,KAAK,WAAW,KACf,OAAO,CAAC,YAAY,GAAG,IAAI,CA+C/B,CAAA;AAED,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,GAClC,KAAK,YAAY,GAAG,SAAS,GAAG,IAAI,KACnC,OAGF,CAAA"}
|