api-machine 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.
Files changed (196) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/LICENSE.md +20 -0
  3. package/README.md +383 -0
  4. package/authentication/authenticated-request.d.ts +4 -0
  5. package/authentication/authenticated-request.js +3 -0
  6. package/authentication/authenticated-request.js.map +1 -0
  7. package/authentication/authentication-scheme.d.ts +38 -0
  8. package/authentication/authentication-scheme.js +21 -0
  9. package/authentication/authentication-scheme.js.map +1 -0
  10. package/authentication/index.d.ts +4 -0
  11. package/authentication/index.js +9 -0
  12. package/authentication/index.js.map +1 -0
  13. package/authentication/middleware/bearer-authentication.d.ts +12 -0
  14. package/authentication/middleware/bearer-authentication.js +49 -0
  15. package/authentication/middleware/bearer-authentication.js.map +1 -0
  16. package/authentication/middleware/index.d.ts +1 -0
  17. package/authentication/middleware/index.js +6 -0
  18. package/authentication/middleware/index.js.map +1 -0
  19. package/authentication/schemes/bearer-authentication-scheme.d.ts +37 -0
  20. package/authentication/schemes/bearer-authentication-scheme.js +43 -0
  21. package/authentication/schemes/bearer-authentication-scheme.js.map +1 -0
  22. package/authentication/schemes/index.d.ts +1 -0
  23. package/authentication/schemes/index.js +6 -0
  24. package/authentication/schemes/index.js.map +1 -0
  25. package/error/error-options.d.ts +4 -0
  26. package/error/error-options.js +3 -0
  27. package/error/error-options.js.map +1 -0
  28. package/error/error-response.d.ts +7 -0
  29. package/error/error-response.js +3 -0
  30. package/error/error-response.js.map +1 -0
  31. package/error/http-errors/400-bad-request-error.d.ts +12 -0
  32. package/error/http-errors/400-bad-request-error.js +20 -0
  33. package/error/http-errors/400-bad-request-error.js.map +1 -0
  34. package/error/http-errors/401-unauthorized-error.d.ts +14 -0
  35. package/error/http-errors/401-unauthorized-error.js +24 -0
  36. package/error/http-errors/401-unauthorized-error.js.map +1 -0
  37. package/error/http-errors/402-payment-required-error.d.ts +10 -0
  38. package/error/http-errors/402-payment-required-error.js +18 -0
  39. package/error/http-errors/402-payment-required-error.js.map +1 -0
  40. package/error/http-errors/403-forbidden-error.d.ts +10 -0
  41. package/error/http-errors/403-forbidden-error.js +18 -0
  42. package/error/http-errors/403-forbidden-error.js.map +1 -0
  43. package/error/http-errors/404-not-found-error.d.ts +10 -0
  44. package/error/http-errors/404-not-found-error.js +18 -0
  45. package/error/http-errors/404-not-found-error.js.map +1 -0
  46. package/error/http-errors/405-method-not-allowed-error.d.ts +13 -0
  47. package/error/http-errors/405-method-not-allowed-error.js +27 -0
  48. package/error/http-errors/405-method-not-allowed-error.js.map +1 -0
  49. package/error/http-errors/406-not-acceptable-error.d.ts +11 -0
  50. package/error/http-errors/406-not-acceptable-error.js +19 -0
  51. package/error/http-errors/406-not-acceptable-error.js.map +1 -0
  52. package/error/http-errors/407-proxy-authentication-required-error.d.ts +13 -0
  53. package/error/http-errors/407-proxy-authentication-required-error.js +23 -0
  54. package/error/http-errors/407-proxy-authentication-required-error.js.map +1 -0
  55. package/error/http-errors/408-request-timeout-error.d.ts +10 -0
  56. package/error/http-errors/408-request-timeout-error.js +18 -0
  57. package/error/http-errors/408-request-timeout-error.js.map +1 -0
  58. package/error/http-errors/409-conflict-error.d.ts +10 -0
  59. package/error/http-errors/409-conflict-error.js +18 -0
  60. package/error/http-errors/409-conflict-error.js.map +1 -0
  61. package/error/http-errors/410-gone-error.d.ts +10 -0
  62. package/error/http-errors/410-gone-error.js +18 -0
  63. package/error/http-errors/410-gone-error.js.map +1 -0
  64. package/error/http-errors/411-length-required-error.d.ts +10 -0
  65. package/error/http-errors/411-length-required-error.js +18 -0
  66. package/error/http-errors/411-length-required-error.js.map +1 -0
  67. package/error/http-errors/412-precondition-failed-error.d.ts +10 -0
  68. package/error/http-errors/412-precondition-failed-error.js +18 -0
  69. package/error/http-errors/412-precondition-failed-error.js.map +1 -0
  70. package/error/http-errors/413-payload-too-large-error.d.ts +10 -0
  71. package/error/http-errors/413-payload-too-large-error.js +18 -0
  72. package/error/http-errors/413-payload-too-large-error.js.map +1 -0
  73. package/error/http-errors/414-uri-too-long-error.d.ts +10 -0
  74. package/error/http-errors/414-uri-too-long-error.js +18 -0
  75. package/error/http-errors/414-uri-too-long-error.js.map +1 -0
  76. package/error/http-errors/415-unsupported-media-type-error.d.ts +13 -0
  77. package/error/http-errors/415-unsupported-media-type-error.js +25 -0
  78. package/error/http-errors/415-unsupported-media-type-error.js.map +1 -0
  79. package/error/http-errors/416-range-not-satisfiable-error.d.ts +13 -0
  80. package/error/http-errors/416-range-not-satisfiable-error.js +25 -0
  81. package/error/http-errors/416-range-not-satisfiable-error.js.map +1 -0
  82. package/error/http-errors/417-expectation-failed-error.d.ts +10 -0
  83. package/error/http-errors/417-expectation-failed-error.js +18 -0
  84. package/error/http-errors/417-expectation-failed-error.js.map +1 -0
  85. package/error/http-errors/418-im-a-teapot-error.d.ts +10 -0
  86. package/error/http-errors/418-im-a-teapot-error.js +18 -0
  87. package/error/http-errors/418-im-a-teapot-error.js.map +1 -0
  88. package/error/http-errors/421-misdirected-request-error.d.ts +10 -0
  89. package/error/http-errors/421-misdirected-request-error.js +18 -0
  90. package/error/http-errors/421-misdirected-request-error.js.map +1 -0
  91. package/error/http-errors/422-unprocessable-entity-error.d.ts +10 -0
  92. package/error/http-errors/422-unprocessable-entity-error.js +18 -0
  93. package/error/http-errors/422-unprocessable-entity-error.js.map +1 -0
  94. package/error/http-errors/423-locked-error.d.ts +10 -0
  95. package/error/http-errors/423-locked-error.js +18 -0
  96. package/error/http-errors/423-locked-error.js.map +1 -0
  97. package/error/http-errors/424-failed-dependency-error.d.ts +10 -0
  98. package/error/http-errors/424-failed-dependency-error.js +18 -0
  99. package/error/http-errors/424-failed-dependency-error.js.map +1 -0
  100. package/error/http-errors/425-too-early-error.d.ts +10 -0
  101. package/error/http-errors/425-too-early-error.js +18 -0
  102. package/error/http-errors/425-too-early-error.js.map +1 -0
  103. package/error/http-errors/426-upgrade-required-error.d.ts +13 -0
  104. package/error/http-errors/426-upgrade-required-error.js +22 -0
  105. package/error/http-errors/426-upgrade-required-error.js.map +1 -0
  106. package/error/http-errors/428-precondition-required-error.d.ts +10 -0
  107. package/error/http-errors/428-precondition-required-error.js +18 -0
  108. package/error/http-errors/428-precondition-required-error.js.map +1 -0
  109. package/error/http-errors/429-too-many-requests-error.d.ts +13 -0
  110. package/error/http-errors/429-too-many-requests-error.js +25 -0
  111. package/error/http-errors/429-too-many-requests-error.js.map +1 -0
  112. package/error/http-errors/431-request-header-fields-too-large-error.d.ts +11 -0
  113. package/error/http-errors/431-request-header-fields-too-large-error.js +19 -0
  114. package/error/http-errors/431-request-header-fields-too-large-error.js.map +1 -0
  115. package/error/http-errors/451-unavailable-for-legal-reasons-error.d.ts +10 -0
  116. package/error/http-errors/451-unavailable-for-legal-reasons-error.js +18 -0
  117. package/error/http-errors/451-unavailable-for-legal-reasons-error.js.map +1 -0
  118. package/error/http-errors/http-error.d.ts +26 -0
  119. package/error/http-errors/http-error.js +37 -0
  120. package/error/http-errors/http-error.js.map +1 -0
  121. package/error/http-errors/index.d.ts +30 -0
  122. package/error/http-errors/index.js +67 -0
  123. package/error/http-errors/index.js.map +1 -0
  124. package/error/index.d.ts +3 -0
  125. package/error/index.js +5 -0
  126. package/error/index.js.map +1 -0
  127. package/index.d.ts +4 -0
  128. package/index.js +8 -0
  129. package/index.js.map +1 -0
  130. package/log/index.d.ts +1 -0
  131. package/log/index.js +3 -0
  132. package/log/index.js.map +1 -0
  133. package/log/log-interface.d.ts +7 -0
  134. package/log/log-interface.js +3 -0
  135. package/log/log-interface.js.map +1 -0
  136. package/oas/index.d.ts +2 -0
  137. package/oas/index.js +8 -0
  138. package/oas/index.js.map +1 -0
  139. package/oas/oas-endpoint-component-converter.d.ts +15 -0
  140. package/oas/oas-endpoint-component-converter.js +33 -0
  141. package/oas/oas-endpoint-component-converter.js.map +1 -0
  142. package/oas/oas-endpoint-converter.d.ts +17 -0
  143. package/oas/oas-endpoint-converter.js +89 -0
  144. package/oas/oas-endpoint-converter.js.map +1 -0
  145. package/oas/oas-rest-server-converter.d.ts +13 -0
  146. package/oas/oas-rest-server-converter.js +82 -0
  147. package/oas/oas-rest-server-converter.js.map +1 -0
  148. package/oas/routes.d.ts +8 -0
  149. package/oas/routes.js +24 -0
  150. package/oas/routes.js.map +1 -0
  151. package/package.json +34 -0
  152. package/router/base.d.ts +35 -0
  153. package/router/base.js +59 -0
  154. package/router/base.js.map +1 -0
  155. package/router/endpoint.d.ts +44 -0
  156. package/router/endpoint.js +76 -0
  157. package/router/endpoint.js.map +1 -0
  158. package/router/endpoints/delete-endpoint.d.ts +5 -0
  159. package/router/endpoints/delete-endpoint.js +10 -0
  160. package/router/endpoints/delete-endpoint.js.map +1 -0
  161. package/router/endpoints/get-endpoint.d.ts +5 -0
  162. package/router/endpoints/get-endpoint.js +10 -0
  163. package/router/endpoints/get-endpoint.js.map +1 -0
  164. package/router/endpoints/health-check-endpoint.d.ts +15 -0
  165. package/router/endpoints/health-check-endpoint.js +30 -0
  166. package/router/endpoints/health-check-endpoint.js.map +1 -0
  167. package/router/endpoints/index.d.ts +6 -0
  168. package/router/endpoints/index.js +16 -0
  169. package/router/endpoints/index.js.map +1 -0
  170. package/router/endpoints/patch-endpoint.d.ts +5 -0
  171. package/router/endpoints/patch-endpoint.js +10 -0
  172. package/router/endpoints/patch-endpoint.js.map +1 -0
  173. package/router/endpoints/post-endpoint.d.ts +5 -0
  174. package/router/endpoints/post-endpoint.js +10 -0
  175. package/router/endpoints/post-endpoint.js.map +1 -0
  176. package/router/endpoints/put-endpoint.d.ts +5 -0
  177. package/router/endpoints/put-endpoint.js +10 -0
  178. package/router/endpoints/put-endpoint.js.map +1 -0
  179. package/router/index.d.ts +3 -0
  180. package/router/index.js +15 -0
  181. package/router/index.js.map +1 -0
  182. package/router/router.d.ts +15 -0
  183. package/router/router.js +67 -0
  184. package/router/router.js.map +1 -0
  185. package/router/validation-middleware.d.ts +13 -0
  186. package/router/validation-middleware.js +45 -0
  187. package/router/validation-middleware.js.map +1 -0
  188. package/server/index.d.ts +2 -0
  189. package/server/index.js +8 -0
  190. package/server/index.js.map +1 -0
  191. package/server/server-options.d.ts +46 -0
  192. package/server/server-options.js +24 -0
  193. package/server/server-options.js.map +1 -0
  194. package/server/server.d.ts +38 -0
  195. package/server/server.js +178 -0
  196. package/server/server.js.map +1 -0
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /* eslint-disable max-len */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.UnavailableForLegalReasonsError = exports.RequestHeaderFieldsTooLargeError = exports.TooManyRequestsError = exports.PreconditionRequiredError = exports.UpgradeRequiredError = exports.TooEarlyError = exports.FailedDependencyError = exports.LockedError = exports.UnprocessableEntityError = exports.MisdirectedRequestError = exports.ImATeapotError = exports.ExpectationFailedError = exports.RangeNotSatisfiableError = exports.UnsupportedMediaTypeError = exports.URITooLongError = exports.PayloadTooLargeError = exports.PreconditionFailedError = exports.LengthRequiredError = exports.GoneError = exports.ConflictError = exports.RequestTimeoutError = exports.ProxyAuthenticationRequiredError = exports.NotAcceptableError = exports.MethodNotAllowedError = exports.NotFoundError = exports.ForbiddenError = exports.PaymentRequiredError = exports.UnauthorizedError = exports.BadRequestError = exports.HTTPError = void 0;
5
+ // Base HTTP Error
6
+ var http_error_1 = require("./http-error");
7
+ Object.defineProperty(exports, "HTTPError", { enumerable: true, get: function () { return http_error_1.HTTPError; } });
8
+ // 4xx Client Errors (in order)
9
+ var _400_bad_request_error_1 = require("./400-bad-request-error");
10
+ Object.defineProperty(exports, "BadRequestError", { enumerable: true, get: function () { return _400_bad_request_error_1.BadRequestError; } });
11
+ var _401_unauthorized_error_1 = require("./401-unauthorized-error");
12
+ Object.defineProperty(exports, "UnauthorizedError", { enumerable: true, get: function () { return _401_unauthorized_error_1.UnauthorizedError; } });
13
+ var _402_payment_required_error_1 = require("./402-payment-required-error");
14
+ Object.defineProperty(exports, "PaymentRequiredError", { enumerable: true, get: function () { return _402_payment_required_error_1.PaymentRequiredError; } });
15
+ var _403_forbidden_error_1 = require("./403-forbidden-error");
16
+ Object.defineProperty(exports, "ForbiddenError", { enumerable: true, get: function () { return _403_forbidden_error_1.ForbiddenError; } });
17
+ var _404_not_found_error_1 = require("./404-not-found-error");
18
+ Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return _404_not_found_error_1.NotFoundError; } });
19
+ var _405_method_not_allowed_error_1 = require("./405-method-not-allowed-error");
20
+ Object.defineProperty(exports, "MethodNotAllowedError", { enumerable: true, get: function () { return _405_method_not_allowed_error_1.MethodNotAllowedError; } });
21
+ var _406_not_acceptable_error_1 = require("./406-not-acceptable-error");
22
+ Object.defineProperty(exports, "NotAcceptableError", { enumerable: true, get: function () { return _406_not_acceptable_error_1.NotAcceptableError; } });
23
+ var _407_proxy_authentication_required_error_1 = require("./407-proxy-authentication-required-error");
24
+ Object.defineProperty(exports, "ProxyAuthenticationRequiredError", { enumerable: true, get: function () { return _407_proxy_authentication_required_error_1.ProxyAuthenticationRequiredError; } });
25
+ var _408_request_timeout_error_1 = require("./408-request-timeout-error");
26
+ Object.defineProperty(exports, "RequestTimeoutError", { enumerable: true, get: function () { return _408_request_timeout_error_1.RequestTimeoutError; } });
27
+ var _409_conflict_error_1 = require("./409-conflict-error");
28
+ Object.defineProperty(exports, "ConflictError", { enumerable: true, get: function () { return _409_conflict_error_1.ConflictError; } });
29
+ var _410_gone_error_1 = require("./410-gone-error");
30
+ Object.defineProperty(exports, "GoneError", { enumerable: true, get: function () { return _410_gone_error_1.GoneError; } });
31
+ var _411_length_required_error_1 = require("./411-length-required-error");
32
+ Object.defineProperty(exports, "LengthRequiredError", { enumerable: true, get: function () { return _411_length_required_error_1.LengthRequiredError; } });
33
+ var _412_precondition_failed_error_1 = require("./412-precondition-failed-error");
34
+ Object.defineProperty(exports, "PreconditionFailedError", { enumerable: true, get: function () { return _412_precondition_failed_error_1.PreconditionFailedError; } });
35
+ var _413_payload_too_large_error_1 = require("./413-payload-too-large-error");
36
+ Object.defineProperty(exports, "PayloadTooLargeError", { enumerable: true, get: function () { return _413_payload_too_large_error_1.PayloadTooLargeError; } });
37
+ var _414_uri_too_long_error_1 = require("./414-uri-too-long-error");
38
+ Object.defineProperty(exports, "URITooLongError", { enumerable: true, get: function () { return _414_uri_too_long_error_1.URITooLongError; } });
39
+ var _415_unsupported_media_type_error_1 = require("./415-unsupported-media-type-error");
40
+ Object.defineProperty(exports, "UnsupportedMediaTypeError", { enumerable: true, get: function () { return _415_unsupported_media_type_error_1.UnsupportedMediaTypeError; } });
41
+ var _416_range_not_satisfiable_error_1 = require("./416-range-not-satisfiable-error");
42
+ Object.defineProperty(exports, "RangeNotSatisfiableError", { enumerable: true, get: function () { return _416_range_not_satisfiable_error_1.RangeNotSatisfiableError; } });
43
+ var _417_expectation_failed_error_1 = require("./417-expectation-failed-error");
44
+ Object.defineProperty(exports, "ExpectationFailedError", { enumerable: true, get: function () { return _417_expectation_failed_error_1.ExpectationFailedError; } });
45
+ var _418_im_a_teapot_error_1 = require("./418-im-a-teapot-error");
46
+ Object.defineProperty(exports, "ImATeapotError", { enumerable: true, get: function () { return _418_im_a_teapot_error_1.ImATeapotError; } });
47
+ var _421_misdirected_request_error_1 = require("./421-misdirected-request-error");
48
+ Object.defineProperty(exports, "MisdirectedRequestError", { enumerable: true, get: function () { return _421_misdirected_request_error_1.MisdirectedRequestError; } });
49
+ var _422_unprocessable_entity_error_1 = require("./422-unprocessable-entity-error");
50
+ Object.defineProperty(exports, "UnprocessableEntityError", { enumerable: true, get: function () { return _422_unprocessable_entity_error_1.UnprocessableEntityError; } });
51
+ var _423_locked_error_1 = require("./423-locked-error");
52
+ Object.defineProperty(exports, "LockedError", { enumerable: true, get: function () { return _423_locked_error_1.LockedError; } });
53
+ var _424_failed_dependency_error_1 = require("./424-failed-dependency-error");
54
+ Object.defineProperty(exports, "FailedDependencyError", { enumerable: true, get: function () { return _424_failed_dependency_error_1.FailedDependencyError; } });
55
+ var _425_too_early_error_1 = require("./425-too-early-error");
56
+ Object.defineProperty(exports, "TooEarlyError", { enumerable: true, get: function () { return _425_too_early_error_1.TooEarlyError; } });
57
+ var _426_upgrade_required_error_1 = require("./426-upgrade-required-error");
58
+ Object.defineProperty(exports, "UpgradeRequiredError", { enumerable: true, get: function () { return _426_upgrade_required_error_1.UpgradeRequiredError; } });
59
+ var _428_precondition_required_error_1 = require("./428-precondition-required-error");
60
+ Object.defineProperty(exports, "PreconditionRequiredError", { enumerable: true, get: function () { return _428_precondition_required_error_1.PreconditionRequiredError; } });
61
+ var _429_too_many_requests_error_1 = require("./429-too-many-requests-error");
62
+ Object.defineProperty(exports, "TooManyRequestsError", { enumerable: true, get: function () { return _429_too_many_requests_error_1.TooManyRequestsError; } });
63
+ var _431_request_header_fields_too_large_error_1 = require("./431-request-header-fields-too-large-error");
64
+ Object.defineProperty(exports, "RequestHeaderFieldsTooLargeError", { enumerable: true, get: function () { return _431_request_header_fields_too_large_error_1.RequestHeaderFieldsTooLargeError; } });
65
+ var _451_unavailable_for_legal_reasons_error_1 = require("./451-unavailable-for-legal-reasons-error");
66
+ Object.defineProperty(exports, "UnavailableForLegalReasonsError", { enumerable: true, get: function () { return _451_unavailable_for_legal_reasons_error_1.UnavailableForLegalReasonsError; } });
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/error/http-errors/index.ts"],"names":[],"mappings":";AAAA,4BAA4B;;;AAE5B,kBAAkB;AAClB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAElB,+BAA+B;AAC/B,kEAA0D;AAAjD,yHAAA,eAAe,OAAA;AACxB,oEAGkC;AAFjC,4HAAA,iBAAiB,OAAA;AAGlB,4EAAoE;AAA3D,mIAAA,oBAAoB,OAAA;AAC7B,8DAAuD;AAA9C,sHAAA,cAAc,OAAA;AACvB,8DAAsD;AAA7C,qHAAA,aAAa,OAAA;AACtB,gFAGwC;AAFvC,sIAAA,qBAAqB,OAAA;AAGtB,wEAAgE;AAAvD,+HAAA,kBAAkB,OAAA;AAC3B,sGAGmD;AAFlD,4JAAA,gCAAgC,OAAA;AAGjC,0EAAkE;AAAzD,iIAAA,mBAAmB,OAAA;AAC5B,4DAAqD;AAA5C,oHAAA,aAAa,OAAA;AACtB,oDAA6C;AAApC,4GAAA,SAAS,OAAA;AAClB,0EAAkE;AAAzD,iIAAA,mBAAmB,OAAA;AAC5B,kFAA0E;AAAjE,yIAAA,uBAAuB,OAAA;AAChC,8EAAqE;AAA5D,oIAAA,oBAAoB,OAAA;AAC7B,oEAA2D;AAAlD,0HAAA,eAAe,OAAA;AACxB,wFAG4C;AAF3C,8IAAA,yBAAyB,OAAA;AAG1B,sFAG2C;AAF1C,4IAAA,wBAAwB,OAAA;AAGzB,gFAAwE;AAA/D,uIAAA,sBAAsB,OAAA;AAC/B,kEAAyD;AAAhD,wHAAA,cAAc,OAAA;AACvB,kFAA0E;AAAjE,yIAAA,uBAAuB,OAAA;AAChC,oFAA4E;AAAnE,2IAAA,wBAAwB,OAAA;AACjC,wDAAiD;AAAxC,gHAAA,WAAW,OAAA;AACpB,8EAAsE;AAA7D,qIAAA,qBAAqB,OAAA;AAC9B,8DAAsD;AAA7C,qHAAA,aAAa,OAAA;AACtB,4EAGsC;AAFrC,mIAAA,oBAAoB,OAAA;AAGrB,sFAA8E;AAArE,6IAAA,yBAAyB,OAAA;AAClC,8EAGuC;AAFtC,oIAAA,oBAAoB,OAAA;AAGrB,0GAA+F;AAAtF,8JAAA,gCAAgC,OAAA;AACzC,sGAA4F;AAAnF,2JAAA,+BAA+B,OAAA"}
@@ -0,0 +1,3 @@
1
+ export { ErrorResponse } from './error-response';
2
+ export { HttpErrorOptions } from './error-options';
3
+ export * from './http-errors';
package/error/index.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./http-errors"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/error/index.ts"],"names":[],"mappings":";;;AAEA,wDAA8B"}
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './router';
2
+ export * from './server';
3
+ export * from './error';
4
+ export * from './authentication';
package/index.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./router"), exports);
5
+ tslib_1.__exportStar(require("./server"), exports);
6
+ tslib_1.__exportStar(require("./error"), exports);
7
+ tslib_1.__exportStar(require("./authentication"), exports);
8
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB;AACzB,mDAAyB;AACzB,kDAAwB;AACxB,2DAAiC"}
package/log/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export { LogInterface } from './log-interface';
package/log/index.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export interface LogInterface {
2
+ fatal: (...args: any[]) => void;
3
+ error: (...args: any[]) => void;
4
+ warn: (...args: any[]) => void;
5
+ info: (...args: any[]) => void;
6
+ debug: (...args: any[]) => void;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=log-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-interface.js","sourceRoot":"","sources":["../../../src/log/log-interface.ts"],"names":[],"mappings":""}
package/oas/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { OasRestServerConverter } from './oas-rest-server-converter';
2
+ export { OasEndpointConverter } from './oas-endpoint-converter';
package/oas/index.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OasEndpointConverter = exports.OasRestServerConverter = void 0;
4
+ var oas_rest_server_converter_1 = require("./oas-rest-server-converter");
5
+ Object.defineProperty(exports, "OasRestServerConverter", { enumerable: true, get: function () { return oas_rest_server_converter_1.OasRestServerConverter; } });
6
+ var oas_endpoint_converter_1 = require("./oas-endpoint-converter");
7
+ Object.defineProperty(exports, "OasEndpointConverter", { enumerable: true, get: function () { return oas_endpoint_converter_1.OasEndpointConverter; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/oas/index.ts"],"names":[],"mappings":";;;AAAA,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAC/B,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA"}
@@ -0,0 +1,15 @@
1
+ import { ObjectSanitizer } from 'valsan';
2
+ import { SchemaObject } from 'auto-oas/oas/v3.1';
3
+ import { BaseApiEndpoint } from '../router';
4
+ /**
5
+ * Builds OpenAPI component schemas for an endpoint from valsans
6
+ */
7
+ export declare class OasEndpointComponentConverter {
8
+ protected schemas: Record<string, SchemaObject>;
9
+ getSchemas(endpoint: BaseApiEndpoint): Record<string, SchemaObject>;
10
+ protected addSchema({ name, sanitizer, example, }: {
11
+ name: string;
12
+ sanitizer: ObjectSanitizer;
13
+ example?: any;
14
+ }): void;
15
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OasEndpointComponentConverter = void 0;
4
+ const auto_oas_1 = require("auto-oas/auto-oas");
5
+ /**
6
+ * Builds OpenAPI component schemas for an endpoint from valsans
7
+ */
8
+ class OasEndpointComponentConverter {
9
+ schemas = {};
10
+ // Return a map of schema name -> SchemaObject for the endpoint
11
+ getSchemas(endpoint) {
12
+ const bodySanitizer = endpoint.body;
13
+ if (bodySanitizer) {
14
+ this.addSchema({
15
+ name: `${endpoint.name}Body`,
16
+ sanitizer: bodySanitizer,
17
+ example: endpoint.bodyExample,
18
+ });
19
+ }
20
+ return this.schemas;
21
+ }
22
+ addSchema({ name, sanitizer, example, }) {
23
+ const schema = (0, auto_oas_1.buildObjectSchema)(sanitizer);
24
+ if (schema) {
25
+ if (example) {
26
+ schema.example = example;
27
+ }
28
+ this.schemas[name] = schema;
29
+ }
30
+ }
31
+ }
32
+ exports.OasEndpointComponentConverter = OasEndpointComponentConverter;
33
+ //# sourceMappingURL=oas-endpoint-component-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oas-endpoint-component-converter.js","sourceRoot":"","sources":["../../../src/oas/oas-endpoint-component-converter.ts"],"names":[],"mappings":";;;AAIA,gDAAsD;AAEtD;;GAEG;AACH,MAAa,6BAA6B;IAC/B,OAAO,GAAiC,EAAE,CAAC;IAErD,+DAA+D;IACxD,UAAU,CAAC,QAAyB;QAC1C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEpC,IAAI,aAAa,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC;gBACd,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM;gBAC5B,SAAS,EAAE,aAAa;gBACxB,OAAO,EAAE,QAAQ,CAAC,WAAW;aAC7B,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAES,SAAS,CAAC,EACnB,IAAI,EACJ,SAAS,EACT,OAAO,GAMP;QACA,MAAM,MAAM,GAAG,IAAA,4BAAiB,EAAC,SAAS,CAAC,CAAC;QAE5C,IAAI,MAAM,EAAE,CAAC;YACZ,IAAI,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAC7B,CAAC;IACF,CAAC;CACD;AAtCD,sEAsCC"}
@@ -0,0 +1,17 @@
1
+ import { ObjectSanitizer } from 'valsan';
2
+ import { PathItemObject, ParameterObject } from 'auto-oas/oas/v3.1';
3
+ import { BaseApiEndpoint } from '../router';
4
+ import { AuthenticationScheme } from '../authentication/authentication-scheme';
5
+ /**
6
+ * Returns OpenAPI path item for an endpoint,
7
+ * based on validation.
8
+ */
9
+ export declare class OasEndpointConverter {
10
+ protected parameters: ParameterObject[];
11
+ getOpenApiPath(endpoint: BaseApiEndpoint, authentication?: AuthenticationScheme | null): PathItemObject;
12
+ protected addParams({ location, sanitizer, example, }: {
13
+ location: 'path' | 'query' | 'header';
14
+ sanitizer?: ObjectSanitizer;
15
+ example?: any;
16
+ }): void;
17
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OasEndpointConverter = void 0;
4
+ const auto_oas_1 = require("auto-oas/auto-oas");
5
+ /**
6
+ * Returns OpenAPI path item for an endpoint,
7
+ * based on validation.
8
+ */
9
+ class OasEndpointConverter {
10
+ parameters = [];
11
+ getOpenApiPath(endpoint, authentication) {
12
+ this.addParams({
13
+ location: 'path',
14
+ sanitizer: endpoint.params,
15
+ example: endpoint.paramsExample,
16
+ });
17
+ this.addParams({
18
+ location: 'query',
19
+ sanitizer: endpoint.query,
20
+ example: endpoint.queryExample,
21
+ });
22
+ this.addParams({
23
+ location: 'header',
24
+ sanitizer: endpoint.headers,
25
+ example: endpoint.headersExample,
26
+ });
27
+ let requestBody = undefined;
28
+ const bodySanitizer = endpoint.body;
29
+ if (bodySanitizer && bodySanitizer.schema) {
30
+ requestBody = {
31
+ required: true,
32
+ content: {
33
+ 'application/json': {
34
+ schema: {
35
+ $ref: '#/components/schemas/' +
36
+ endpoint.getName() +
37
+ 'Body',
38
+ },
39
+ },
40
+ },
41
+ };
42
+ }
43
+ // Use statusCode for response
44
+ const status = endpoint.statusCode;
45
+ const responses = {
46
+ [status]: { description: 'Success' },
47
+ };
48
+ const errors = endpoint.getErrors();
49
+ for (const error in errors) {
50
+ const httpError = errors[error];
51
+ responses[httpError.getStatusCode()] = {
52
+ description: httpError.message || 'Error response',
53
+ };
54
+ }
55
+ // Add security requirement if authentication is present
56
+ // null means explicitly public (no auth),
57
+ // undefined inherited from parent
58
+ const security = authentication !== undefined && authentication !== null
59
+ ? [authentication.getSecurityRequirement()]
60
+ : authentication === null
61
+ ? []
62
+ : undefined;
63
+ return {
64
+ [endpoint.method]: {
65
+ summary: endpoint.getName(),
66
+ description: endpoint.description,
67
+ tags: [endpoint.getTag()],
68
+ parameters: this.parameters.length > 0 ? this.parameters : undefined,
69
+ requestBody,
70
+ responses,
71
+ security,
72
+ },
73
+ };
74
+ }
75
+ addParams({ location, sanitizer, example, }) {
76
+ if (sanitizer && sanitizer.schema) {
77
+ for (const key in sanitizer.schema) {
78
+ const valSan = sanitizer.schema[key];
79
+ const param = (0, auto_oas_1.buildParameter)(key, valSan, location);
80
+ if (example && example[key] !== undefined) {
81
+ param.example = example[key];
82
+ }
83
+ this.parameters.push(param);
84
+ }
85
+ }
86
+ }
87
+ }
88
+ exports.OasEndpointConverter = OasEndpointConverter;
89
+ //# sourceMappingURL=oas-endpoint-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oas-endpoint-converter.js","sourceRoot":"","sources":["../../../src/oas/oas-endpoint-converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { ComponentsObject, InfoObject, OpenAPIObject, PathItemObject, SecuritySchemeObject, TagObject } from 'auto-oas/oas/v3.1';
2
+ import { RestServer } from '../server';
3
+ import { BaseApiEndpoint, BaseApiRouter } from '../router';
4
+ export declare class OasRestServerConverter {
5
+ protected paths: Record<string, PathItemObject>;
6
+ protected components: ComponentsObject;
7
+ protected tags: TagObject[];
8
+ protected securitySchemes: Record<string, SecuritySchemeObject>;
9
+ getOpenApiSpec(server: RestServer): Promise<OpenAPIObject>;
10
+ getOpenApiInfo(server: RestServer): Promise<InfoObject>;
11
+ convertRouter(router: BaseApiRouter): Promise<void>;
12
+ convertEndpoint(endpoint: BaseApiEndpoint): Promise<void>;
13
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OasRestServerConverter = void 0;
4
+ const router_1 = require("../router");
5
+ const oas_endpoint_converter_1 = require("./oas-endpoint-converter");
6
+ // eslint-disable-next-line max-len
7
+ const oas_endpoint_component_converter_1 = require("./oas-endpoint-component-converter");
8
+ class OasRestServerConverter {
9
+ paths = {};
10
+ components = {};
11
+ tags = [];
12
+ securitySchemes = {};
13
+ async getOpenApiSpec(server) {
14
+ await this.convertRouter(server.routerInstance);
15
+ // Add collected security schemes to components
16
+ if (Object.keys(this.securitySchemes).length > 0) {
17
+ if (!this.components.securitySchemes) {
18
+ this.components.securitySchemes = {};
19
+ }
20
+ Object.assign(this.components.securitySchemes, this.securitySchemes);
21
+ }
22
+ // Set global security if server has authentication
23
+ const globalSecurity = [];
24
+ if (server.authentication) {
25
+ globalSecurity.push(server.authentication.getSecurityRequirement());
26
+ }
27
+ return {
28
+ openapi: '3.1.0',
29
+ info: await this.getOpenApiInfo(server),
30
+ servers: [],
31
+ paths: this.paths,
32
+ components: this.components,
33
+ security: globalSecurity,
34
+ tags: this.tags,
35
+ };
36
+ }
37
+ async getOpenApiInfo(server) {
38
+ return {
39
+ title: server.name,
40
+ version: server.version,
41
+ description: server.description,
42
+ };
43
+ }
44
+ async convertRouter(router) {
45
+ for (const route of router.registeredRoutes) {
46
+ if (route instanceof router_1.BaseApiEndpoint) {
47
+ await this.convertEndpoint(route);
48
+ }
49
+ else if (route instanceof router_1.BaseApiRouter) {
50
+ await this.convertRouter(route);
51
+ }
52
+ }
53
+ }
54
+ async convertEndpoint(endpoint) {
55
+ // Get effective authentication for this endpoint
56
+ const effectiveAuth = endpoint.getEffectiveAuthentication();
57
+ // Collect authentication scheme if present and not null
58
+ // (null = public)
59
+ if (effectiveAuth) {
60
+ const schemeName = effectiveAuth.schemeName;
61
+ if (!this.securitySchemes[schemeName]) {
62
+ this.securitySchemes[schemeName] =
63
+ effectiveAuth.getSecurityScheme();
64
+ }
65
+ }
66
+ const endpointConverter = new oas_endpoint_converter_1.OasEndpointConverter();
67
+ const pathItem = endpointConverter.getOpenApiPath(endpoint, effectiveAuth);
68
+ const path = (endpoint.fullPath || '/').replace(/:([a-zA-Z0-9_]+)/g, '{$1}');
69
+ if (this.paths[path] === undefined) {
70
+ this.paths[path] = {};
71
+ }
72
+ Object.assign(this.paths[path], pathItem);
73
+ const endpointComponentConverter = new oas_endpoint_component_converter_1.OasEndpointComponentConverter();
74
+ const endpointComponents = endpointComponentConverter.getSchemas(endpoint);
75
+ if (!this.components.schemas) {
76
+ this.components.schemas = {};
77
+ }
78
+ Object.assign(this.components.schemas, endpointComponents);
79
+ }
80
+ }
81
+ exports.OasRestServerConverter = OasRestServerConverter;
82
+ //# sourceMappingURL=oas-rest-server-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oas-rest-server-converter.js","sourceRoot":"","sources":["../../../src/oas/oas-rest-server-converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Express } from 'express';
2
+ import { RestServer } from '../server';
3
+ export declare function oasRoutes({ router, server, oasPath, swaggerPath, }: {
4
+ router: Express;
5
+ server: RestServer;
6
+ oasPath?: string;
7
+ swaggerPath?: string;
8
+ }): Promise<void>;
package/oas/routes.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.oasRoutes = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const swagger_ui_express_1 = tslib_1.__importDefault(require("swagger-ui-express"));
6
+ const oas_rest_server_converter_1 = require("./oas-rest-server-converter");
7
+ async function oasRoutes({ router, server, oasPath, swaggerPath, }) {
8
+ oasPath = oasPath || '/openapi.json';
9
+ swaggerPath = swaggerPath || '/docs';
10
+ const converter = new oas_rest_server_converter_1.OasRestServerConverter();
11
+ const spec = await converter.getOpenApiSpec(server);
12
+ // Expose OpenAPI spec
13
+ router.get(oasPath, async (req, res) => {
14
+ res.json(spec);
15
+ });
16
+ // Serve Swagger UI static assets
17
+ router.use(swaggerPath, swagger_ui_express_1.default.serve);
18
+ // Serve Swagger UI HTML
19
+ router.get(swaggerPath, async (req, res, next) => {
20
+ return swagger_ui_express_1.default.setup(spec)(req, res, next);
21
+ });
22
+ }
23
+ exports.oasRoutes = oasRoutes;
24
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/oas/routes.ts"],"names":[],"mappings":";;;;AACA,oFAA2C;AAG3C,2EAAqE;AAE9D,KAAK,UAAU,SAAS,CAAC,EAC/B,MAAM,EACN,MAAM,EACN,OAAO,EACP,WAAW,GAMX;IACA,OAAO,GAAG,OAAO,IAAI,eAAe,CAAC;IACrC,WAAW,GAAG,WAAW,IAAI,OAAO,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,kDAAsB,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAEpD,sBAAsB;IACtB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,iCAAiC;IACjC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,4BAAS,CAAC,KAAK,CAAC,CAAC;IAEzC,wBAAwB;IACxB,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAChD,OAAO,4BAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACJ,CAAC;AA5BD,8BA4BC"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "api-machine",
3
+ "version": "1.0.0",
4
+ "description": "api-machine",
5
+ "typescript-template": {
6
+ "base": "1.0.1",
7
+ "jasmine": "1.0.0",
8
+ "library": "1.0.0"
9
+ },
10
+ "scripts": {},
11
+ "dependencies": {
12
+ "auto-oas": "^1.2.0",
13
+ "cors": "^2.8.5",
14
+ "express": "^5.1.0",
15
+ "swagger-ui-express": "^5.0.1",
16
+ "valsan": "^2.2.0"
17
+ },
18
+ "peerDependencies": {
19
+ "valsan": "^2.2.0"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/StatelessStudio/api-machine.git"
24
+ },
25
+ "author": "StatelessStudio",
26
+ "license": "MIT",
27
+ "bugs": {
28
+ "url": "https://github.com/StatelessStudio/api-machine/issues"
29
+ },
30
+ "homepage": "https://github.com/StatelessStudio/api-machine#readme",
31
+ "keywords": [],
32
+ "main": "index.js",
33
+ "types": "index.d.ts"
34
+ }
@@ -0,0 +1,35 @@
1
+ import { Router as ExpressRouter, RequestHandler } from 'express';
2
+ import { AuthenticationScheme } from '../authentication/authentication-scheme';
3
+ export declare abstract class BaseApiRoute {
4
+ path: string;
5
+ fullPath: string;
6
+ name: string;
7
+ description?: string;
8
+ /**
9
+ * Optional array of Express middleware to apply
10
+ */
11
+ middleware: RequestHandler[];
12
+ /**
13
+ * Authentication scheme for this route
14
+ * Set to null to explicitly make a route public (no authentication)
15
+ * If undefined, inherits from parent router or server
16
+ */
17
+ authentication?: AuthenticationScheme | null;
18
+ /**
19
+ * Parent route in the hierarchy (used for authentication cascading)
20
+ * @internal
21
+ */
22
+ parentRoute?: BaseApiRoute;
23
+ abstract register(parentRouter: ExpressRouter, parentPath: string): Promise<void>;
24
+ getName(): string;
25
+ registerRoutePath(parentPath: string): void;
26
+ /**
27
+ * Get the effective authentication scheme for this route
28
+ * Implements cascading logic: endpoint → router → server
29
+ * @returns The authentication scheme to use, or undefined if public
30
+ */
31
+ getEffectiveAuthentication(): AuthenticationScheme | undefined | null;
32
+ }
33
+ export type ApiRoute = {
34
+ new (): BaseApiRoute;
35
+ };
package/router/base.js ADDED
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseApiRoute = void 0;
4
+ class BaseApiRoute {
5
+ path;
6
+ fullPath;
7
+ name;
8
+ description;
9
+ /**
10
+ * Optional array of Express middleware to apply
11
+ */
12
+ middleware = [];
13
+ /**
14
+ * Authentication scheme for this route
15
+ * Set to null to explicitly make a route public (no authentication)
16
+ * If undefined, inherits from parent router or server
17
+ */
18
+ authentication;
19
+ /**
20
+ * Parent route in the hierarchy (used for authentication cascading)
21
+ * @internal
22
+ */
23
+ // eslint-disable-next-line no-use-before-define
24
+ parentRoute;
25
+ getName() {
26
+ return this.name || this.constructor.name;
27
+ }
28
+ registerRoutePath(parentPath) {
29
+ if (!this.path) {
30
+ this.path = '';
31
+ }
32
+ else if (!this.path.startsWith('/')) {
33
+ this.path = '/' + this.path;
34
+ }
35
+ if (parentPath.endsWith('/')) {
36
+ parentPath = parentPath.slice(0, -1);
37
+ }
38
+ this.fullPath = parentPath + this.path;
39
+ }
40
+ /**
41
+ * Get the effective authentication scheme for this route
42
+ * Implements cascading logic: endpoint → router → server
43
+ * @returns The authentication scheme to use, or undefined if public
44
+ */
45
+ getEffectiveAuthentication() {
46
+ // If explicitly set (including null for public routes), use it
47
+ if (this.authentication !== undefined) {
48
+ return this.authentication;
49
+ }
50
+ // Otherwise, cascade to parent
51
+ if (this.parentRoute) {
52
+ return this.parentRoute.getEffectiveAuthentication();
53
+ }
54
+ // No authentication at any level
55
+ return undefined;
56
+ }
57
+ }
58
+ exports.BaseApiRoute = BaseApiRoute;
59
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/router/base.ts"],"names":[],"mappings":";;;AAGA,MAAsB,YAAY;IAC1B,IAAI,CAAS;IACb,QAAQ,CAAS;IACjB,IAAI,CAAS;IACb,WAAW,CAAU;IAE5B;;OAEG;IACI,UAAU,GAAqB,EAAE,CAAC;IAEzC;;;;OAIG;IACI,cAAc,CAA+B;IAEpD;;;OAGG;IACH,gDAAgD;IACzC,WAAW,CAAgB;IAO3B,OAAO;QACb,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC3C,CAAC;IAEM,iBAAiB,CAAC,UAAkB;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QAChB,CAAC;aACI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACI,0BAA0B;QAIhC,+DAA+D;QAC/D,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,cAAc,CAAC;QAC5B,CAAC;QAED,+BAA+B;QAC/B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC;QACtD,CAAC;QAED,iCAAiC;QACjC,OAAO,SAAS,CAAC;IAClB,CAAC;CACD;AAvED,oCAuEC"}