@kravc/dos 1.12.5 → 2.0.0-alpha.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 (497) hide show
  1. package/README.md +31 -994
  2. package/dist/Component/Component.d.ts +43 -0
  3. package/dist/Component/Component.d.ts.map +1 -0
  4. package/dist/Component/Component.js +99 -0
  5. package/dist/Component/Component.js.map +1 -0
  6. package/dist/Component/index.d.ts +4 -0
  7. package/dist/Component/index.d.ts.map +1 -0
  8. package/dist/Component/index.js +10 -0
  9. package/dist/Component/index.js.map +1 -0
  10. package/dist/Context/Context.d.ts +86 -0
  11. package/dist/Context/Context.d.ts.map +1 -0
  12. package/dist/Context/Context.js +148 -0
  13. package/dist/Context/Context.js.map +1 -0
  14. package/dist/Context/Request.d.ts +35 -0
  15. package/dist/Context/Request.d.ts.map +1 -0
  16. package/dist/Context/Request.js +3 -0
  17. package/dist/Context/Request.js.map +1 -0
  18. package/dist/Context/__tests__/__helpers.d.ts +14 -0
  19. package/dist/Context/__tests__/__helpers.d.ts.map +1 -0
  20. package/dist/Context/__tests__/__helpers.js +69 -0
  21. package/dist/Context/__tests__/__helpers.js.map +1 -0
  22. package/dist/Context/getHttpMethod.d.ts +6 -0
  23. package/dist/Context/getHttpMethod.d.ts.map +1 -0
  24. package/dist/Context/getHttpMethod.js +16 -0
  25. package/dist/Context/getHttpMethod.js.map +1 -0
  26. package/dist/Context/getHttpPath.d.ts +6 -0
  27. package/dist/Context/getHttpPath.d.ts.map +1 -0
  28. package/dist/Context/getHttpPath.js +25 -0
  29. package/dist/Context/getHttpPath.js.map +1 -0
  30. package/dist/Context/getMutationParameters.d.ts +8 -0
  31. package/dist/Context/getMutationParameters.d.ts.map +1 -0
  32. package/dist/Context/getMutationParameters.js +25 -0
  33. package/dist/Context/getMutationParameters.js.map +1 -0
  34. package/dist/Context/getOperationId.d.ts +6 -0
  35. package/dist/Context/getOperationId.d.ts.map +1 -0
  36. package/dist/Context/getOperationId.js +21 -0
  37. package/dist/Context/getOperationId.js.map +1 -0
  38. package/dist/Context/getQueryParameters.d.ts +5 -0
  39. package/dist/Context/getQueryParameters.d.ts.map +1 -0
  40. package/dist/Context/getQueryParameters.js +33 -0
  41. package/dist/Context/getQueryParameters.js.map +1 -0
  42. package/dist/Context/index.d.ts +7 -0
  43. package/dist/Context/index.d.ts.map +1 -0
  44. package/dist/Context/index.js +12 -0
  45. package/dist/Context/index.js.map +1 -0
  46. package/dist/Context/withSafeAttributes.d.ts +23 -0
  47. package/dist/Context/withSafeAttributes.d.ts.map +1 -0
  48. package/dist/Context/withSafeAttributes.js +39 -0
  49. package/dist/Context/withSafeAttributes.js.map +1 -0
  50. package/dist/Document/Document.d.ts +114 -0
  51. package/dist/Document/Document.d.ts.map +1 -0
  52. package/dist/Document/Document.js +285 -0
  53. package/dist/Document/Document.js.map +1 -0
  54. package/dist/Document/MemoryDocument.d.ts +34 -0
  55. package/dist/Document/MemoryDocument.d.ts.map +1 -0
  56. package/dist/Document/MemoryDocument.js +103 -0
  57. package/dist/Document/MemoryDocument.js.map +1 -0
  58. package/dist/Document/__tests__/__helpers.d.ts +18 -0
  59. package/dist/Document/__tests__/__helpers.d.ts.map +1 -0
  60. package/dist/Document/__tests__/__helpers.js +28 -0
  61. package/dist/Document/__tests__/__helpers.js.map +1 -0
  62. package/dist/Document/index.d.ts +5 -0
  63. package/dist/Document/index.d.ts.map +1 -0
  64. package/dist/Document/index.js +11 -0
  65. package/dist/Document/index.js.map +1 -0
  66. package/dist/Operation/Operation.d.ts +95 -0
  67. package/dist/Operation/Operation.d.ts.map +1 -0
  68. package/dist/Operation/Operation.js +301 -0
  69. package/dist/Operation/Operation.js.map +1 -0
  70. package/dist/Operation/errors/AccessDeniedError.d.ts +22 -0
  71. package/dist/Operation/errors/AccessDeniedError.d.ts.map +1 -0
  72. package/dist/Operation/errors/AccessDeniedError.js +29 -0
  73. package/dist/Operation/errors/AccessDeniedError.js.map +1 -0
  74. package/dist/Operation/errors/CommonError.d.ts +30 -0
  75. package/dist/Operation/errors/CommonError.d.ts.map +1 -0
  76. package/dist/Operation/errors/CommonError.js +39 -0
  77. package/dist/Operation/errors/CommonError.js.map +1 -0
  78. package/dist/Operation/errors/DocumentExistsError.d.ts +27 -0
  79. package/dist/Operation/errors/DocumentExistsError.d.ts.map +1 -0
  80. package/dist/Operation/errors/DocumentExistsError.js +35 -0
  81. package/dist/Operation/errors/DocumentExistsError.js.map +1 -0
  82. package/dist/Operation/errors/DocumentNotFoundError.d.ts +28 -0
  83. package/dist/Operation/errors/DocumentNotFoundError.d.ts.map +1 -0
  84. package/dist/Operation/errors/DocumentNotFoundError.js +36 -0
  85. package/dist/Operation/errors/DocumentNotFoundError.js.map +1 -0
  86. package/dist/Operation/errors/InvalidParametersError.d.ts +27 -0
  87. package/dist/Operation/errors/InvalidParametersError.d.ts.map +1 -0
  88. package/dist/Operation/errors/InvalidParametersError.js +34 -0
  89. package/dist/Operation/errors/InvalidParametersError.js.map +1 -0
  90. package/dist/Operation/errors/UnauthorizedError.d.ts +25 -0
  91. package/dist/Operation/errors/UnauthorizedError.d.ts.map +1 -0
  92. package/dist/Operation/errors/UnauthorizedError.js +32 -0
  93. package/dist/Operation/errors/UnauthorizedError.js.map +1 -0
  94. package/dist/Operation/errors/UnprocessibleConditionError.d.ts +29 -0
  95. package/dist/Operation/errors/UnprocessibleConditionError.d.ts.map +1 -0
  96. package/dist/Operation/errors/UnprocessibleConditionError.js +36 -0
  97. package/dist/Operation/errors/UnprocessibleConditionError.js.map +1 -0
  98. package/dist/Operation/errors/index.d.ts +9 -0
  99. package/dist/Operation/errors/index.d.ts.map +1 -0
  100. package/dist/Operation/errors/index.js +21 -0
  101. package/dist/Operation/errors/index.js.map +1 -0
  102. package/dist/Operation/helpers/index.d.ts +4 -0
  103. package/dist/Operation/helpers/index.d.ts.map +1 -0
  104. package/dist/Operation/helpers/index.js +9 -0
  105. package/dist/Operation/helpers/index.js.map +1 -0
  106. package/dist/Operation/helpers/withActivity.d.ts +16 -0
  107. package/dist/Operation/helpers/withActivity.d.ts.map +1 -0
  108. package/dist/Operation/helpers/withActivity.js +23 -0
  109. package/dist/Operation/helpers/withActivity.js.map +1 -0
  110. package/dist/Operation/index.d.ts +14 -0
  111. package/dist/Operation/index.d.ts.map +1 -0
  112. package/dist/Operation/index.js +40 -0
  113. package/dist/Operation/index.js.map +1 -0
  114. package/dist/Operation/operations/Create.d.ts +5 -0
  115. package/dist/Operation/operations/Create.d.ts.map +1 -0
  116. package/dist/Operation/operations/Create.js +44 -0
  117. package/dist/Operation/operations/Create.js.map +1 -0
  118. package/dist/Operation/operations/Delete.d.ts +5 -0
  119. package/dist/Operation/operations/Delete.d.ts.map +1 -0
  120. package/dist/Operation/operations/Delete.js +58 -0
  121. package/dist/Operation/operations/Delete.js.map +1 -0
  122. package/dist/Operation/operations/Index.d.ts +11 -0
  123. package/dist/Operation/operations/Index.d.ts.map +1 -0
  124. package/dist/Operation/operations/Index.js +128 -0
  125. package/dist/Operation/operations/Index.js.map +1 -0
  126. package/dist/Operation/operations/List.d.ts +5 -0
  127. package/dist/Operation/operations/List.d.ts.map +1 -0
  128. package/dist/Operation/operations/List.js +48 -0
  129. package/dist/Operation/operations/List.js.map +1 -0
  130. package/dist/Operation/operations/Read.d.ts +5 -0
  131. package/dist/Operation/operations/Read.d.ts.map +1 -0
  132. package/dist/Operation/operations/Read.js +50 -0
  133. package/dist/Operation/operations/Read.js.map +1 -0
  134. package/dist/Operation/operations/Update.d.ts +5 -0
  135. package/dist/Operation/operations/Update.d.ts.map +1 -0
  136. package/dist/Operation/operations/Update.js +54 -0
  137. package/dist/Operation/operations/Update.js.map +1 -0
  138. package/dist/Operation/security/JwtAuthorization.d.ts +67 -0
  139. package/dist/Operation/security/JwtAuthorization.d.ts.map +1 -0
  140. package/dist/Operation/security/JwtAuthorization.js +148 -0
  141. package/dist/Operation/security/JwtAuthorization.js.map +1 -0
  142. package/dist/Operation/security/LambdaAuthorization.d.ts +30 -0
  143. package/dist/Operation/security/LambdaAuthorization.d.ts.map +1 -0
  144. package/dist/Operation/security/LambdaAuthorization.js +77 -0
  145. package/dist/Operation/security/LambdaAuthorization.js.map +1 -0
  146. package/dist/Operation/security/index.d.ts +8 -0
  147. package/dist/Operation/security/index.d.ts.map +1 -0
  148. package/dist/Operation/security/index.js +17 -0
  149. package/dist/Operation/security/index.js.map +1 -0
  150. package/dist/Operation/security/systemAuthorization.d.ts +5 -0
  151. package/dist/Operation/security/systemAuthorization.d.ts.map +1 -0
  152. package/dist/Operation/security/systemAuthorization.js +24 -0
  153. package/dist/Operation/security/systemAuthorization.js.map +1 -0
  154. package/dist/Operation/security/userAuthorization.d.ts +11 -0
  155. package/dist/Operation/security/userAuthorization.d.ts.map +1 -0
  156. package/dist/Operation/security/userAuthorization.js +36 -0
  157. package/dist/Operation/security/userAuthorization.js.map +1 -0
  158. package/dist/Operation/security/verifyToken.d.ts +6 -0
  159. package/dist/Operation/security/verifyToken.d.ts.map +1 -0
  160. package/dist/Operation/security/verifyToken.js +15 -0
  161. package/dist/Operation/security/verifyToken.js.map +1 -0
  162. package/dist/Service/Service.d.ts +62 -0
  163. package/dist/Service/Service.d.ts.map +1 -0
  164. package/dist/Service/Service.js +213 -0
  165. package/dist/Service/Service.js.map +1 -0
  166. package/dist/Service/authorize.d.ts +26 -0
  167. package/dist/Service/authorize.d.ts.map +1 -0
  168. package/dist/Service/authorize.js +40 -0
  169. package/dist/Service/authorize.js.map +1 -0
  170. package/dist/Service/errors/InvalidInputError.d.ts +29 -0
  171. package/dist/Service/errors/InvalidInputError.d.ts.map +1 -0
  172. package/dist/Service/errors/InvalidInputError.js +36 -0
  173. package/dist/Service/errors/InvalidInputError.js.map +1 -0
  174. package/dist/Service/errors/InvalidOutputError.d.ts +29 -0
  175. package/dist/Service/errors/InvalidOutputError.d.ts.map +1 -0
  176. package/dist/Service/errors/InvalidOutputError.js +36 -0
  177. package/dist/Service/errors/InvalidOutputError.js.map +1 -0
  178. package/dist/Service/errors/OperationError.d.ts +30 -0
  179. package/dist/Service/errors/OperationError.d.ts.map +1 -0
  180. package/dist/Service/errors/OperationError.js +61 -0
  181. package/dist/Service/errors/OperationError.js.map +1 -0
  182. package/dist/Service/errors/OperationNotFoundError.d.ts +38 -0
  183. package/dist/Service/errors/OperationNotFoundError.d.ts.map +1 -0
  184. package/dist/Service/errors/OperationNotFoundError.js +45 -0
  185. package/dist/Service/errors/OperationNotFoundError.js.map +1 -0
  186. package/dist/Service/errors/index.d.ts +8 -0
  187. package/dist/Service/errors/index.d.ts.map +1 -0
  188. package/dist/Service/errors/index.js +15 -0
  189. package/dist/Service/errors/index.js.map +1 -0
  190. package/dist/Service/errors/logOperationError.d.ts +35 -0
  191. package/dist/Service/errors/logOperationError.d.ts.map +1 -0
  192. package/dist/Service/errors/logOperationError.js +47 -0
  193. package/dist/Service/errors/logOperationError.js.map +1 -0
  194. package/dist/Service/errors/maskSecrets.d.ts +13 -0
  195. package/dist/Service/errors/maskSecrets.d.ts.map +1 -0
  196. package/dist/Service/errors/maskSecrets.js +57 -0
  197. package/dist/Service/errors/maskSecrets.js.map +1 -0
  198. package/dist/Service/index.d.ts +5 -0
  199. package/dist/Service/index.d.ts.map +1 -0
  200. package/dist/Service/index.js +25 -0
  201. package/dist/Service/index.js.map +1 -0
  202. package/dist/Service/logRequest.d.ts +5 -0
  203. package/dist/Service/logRequest.d.ts.map +1 -0
  204. package/dist/Service/logRequest.js +26 -0
  205. package/dist/Service/logRequest.js.map +1 -0
  206. package/dist/Service/spec/createSpec.d.ts +7 -0
  207. package/dist/Service/spec/createSpec.d.ts.map +1 -0
  208. package/dist/Service/spec/createSpec.js +56 -0
  209. package/dist/Service/spec/createSpec.js.map +1 -0
  210. package/dist/Service/spec/getErrorResponseDescription.d.ts +8 -0
  211. package/dist/Service/spec/getErrorResponseDescription.d.ts.map +1 -0
  212. package/dist/Service/spec/getErrorResponseDescription.js +15 -0
  213. package/dist/Service/spec/getErrorResponseDescription.js.map +1 -0
  214. package/dist/Service/spec/getHttpMethod.d.ts +4 -0
  215. package/dist/Service/spec/getHttpMethod.d.ts.map +1 -0
  216. package/dist/Service/spec/getHttpMethod.js +21 -0
  217. package/dist/Service/spec/getHttpMethod.js.map +1 -0
  218. package/dist/Service/spec/getOperation.d.ts +6 -0
  219. package/dist/Service/spec/getOperation.d.ts.map +1 -0
  220. package/dist/Service/spec/getOperation.js +71 -0
  221. package/dist/Service/spec/getOperation.js.map +1 -0
  222. package/dist/Service/spec/getOperationParameters.d.ts +6 -0
  223. package/dist/Service/spec/getOperationParameters.d.ts.map +1 -0
  224. package/dist/Service/spec/getOperationParameters.js +32 -0
  225. package/dist/Service/spec/getOperationParameters.js.map +1 -0
  226. package/dist/Service/spec/getServiceDefinitions.d.ts +6 -0
  227. package/dist/Service/spec/getServiceDefinitions.d.ts.map +1 -0
  228. package/dist/Service/spec/getServiceDefinitions.js +18 -0
  229. package/dist/Service/spec/getServiceDefinitions.js.map +1 -0
  230. package/dist/Service/spec/getServiceInfo.d.ts +7 -0
  231. package/dist/Service/spec/getServiceInfo.d.ts.map +1 -0
  232. package/dist/Service/spec/getServiceInfo.js +15 -0
  233. package/dist/Service/spec/getServiceInfo.js.map +1 -0
  234. package/dist/Service/spec/getServiceSecurityDefinitions.d.ts +6 -0
  235. package/dist/Service/spec/getServiceSecurityDefinitions.d.ts.map +1 -0
  236. package/dist/Service/spec/getServiceSecurityDefinitions.js +21 -0
  237. package/dist/Service/spec/getServiceSecurityDefinitions.js.map +1 -0
  238. package/dist/Service/spec/getServiceTags.d.ts +7 -0
  239. package/dist/Service/spec/getServiceTags.d.ts.map +1 -0
  240. package/dist/Service/spec/getServiceTags.js +19 -0
  241. package/dist/Service/spec/getServiceTags.js.map +1 -0
  242. package/dist/Service/spec/getSuccessStatusCode.d.ts +4 -0
  243. package/dist/Service/spec/getSuccessStatusCode.d.ts.map +1 -0
  244. package/dist/Service/spec/getSuccessStatusCode.js +14 -0
  245. package/dist/Service/spec/getSuccessStatusCode.js.map +1 -0
  246. package/dist/Service/spec/index.d.ts +3 -0
  247. package/dist/Service/spec/index.d.ts.map +1 -0
  248. package/dist/Service/spec/index.js +9 -0
  249. package/dist/Service/spec/index.js.map +1 -0
  250. package/dist/Service/spec/validateSpec.d.ts +5 -0
  251. package/dist/Service/spec/validateSpec.d.ts.map +1 -0
  252. package/dist/Service/spec/validateSpec.js +21 -0
  253. package/dist/Service/spec/validateSpec.js.map +1 -0
  254. package/dist/Service/test/createAccessToken.d.ts +9 -0
  255. package/dist/Service/test/createAccessToken.d.ts.map +1 -0
  256. package/dist/Service/test/createAccessToken.js +16 -0
  257. package/dist/Service/test/createAccessToken.js.map +1 -0
  258. package/dist/Service/test/ensureItem.d.ts +5 -0
  259. package/dist/Service/test/ensureItem.d.ts.map +1 -0
  260. package/dist/Service/test/ensureItem.js +13 -0
  261. package/dist/Service/test/ensureItem.js.map +1 -0
  262. package/dist/Service/test/ensureNoItem.d.ts +5 -0
  263. package/dist/Service/test/ensureNoItem.d.ts.map +1 -0
  264. package/dist/Service/test/ensureNoItem.js +13 -0
  265. package/dist/Service/test/ensureNoItem.js.map +1 -0
  266. package/dist/Service/test/execute.d.ts +44 -0
  267. package/dist/Service/test/execute.d.ts.map +1 -0
  268. package/dist/Service/test/execute.js +65 -0
  269. package/dist/Service/test/execute.js.map +1 -0
  270. package/dist/Service/test/findItem.d.ts +7 -0
  271. package/dist/Service/test/findItem.d.ts.map +1 -0
  272. package/dist/Service/test/findItem.js +16 -0
  273. package/dist/Service/test/findItem.js.map +1 -0
  274. package/dist/Service/test/firstItemGet.d.ts +5 -0
  275. package/dist/Service/test/firstItemGet.d.ts.map +1 -0
  276. package/dist/Service/test/firstItemGet.js +15 -0
  277. package/dist/Service/test/firstItemGet.js.map +1 -0
  278. package/dist/Service/test/index.d.ts +10 -0
  279. package/dist/Service/test/index.d.ts.map +1 -0
  280. package/dist/Service/test/index.js +36 -0
  281. package/dist/Service/test/index.js.map +1 -0
  282. package/dist/Service/test/keys.d.ts +5 -0
  283. package/dist/Service/test/keys.d.ts.map +1 -0
  284. package/dist/Service/test/keys.js +74 -0
  285. package/dist/Service/test/keys.js.map +1 -0
  286. package/dist/Service/test/wait.d.ts +4 -0
  287. package/dist/Service/test/wait.d.ts.map +1 -0
  288. package/dist/Service/test/wait.js +6 -0
  289. package/dist/Service/test/wait.js.map +1 -0
  290. package/dist/Service/useComposerMiddleware.d.ts +11 -0
  291. package/dist/Service/useComposerMiddleware.d.ts.map +1 -0
  292. package/dist/Service/useComposerMiddleware.js +41 -0
  293. package/dist/Service/useComposerMiddleware.js.map +1 -0
  294. package/dist/Service/useOasMiddleware.d.ts +16 -0
  295. package/dist/Service/useOasMiddleware.d.ts.map +1 -0
  296. package/dist/Service/useOasMiddleware.js +53 -0
  297. package/dist/Service/useOasMiddleware.js.map +1 -0
  298. package/dist/index.d.ts +11 -0
  299. package/dist/index.d.ts.map +1 -0
  300. package/dist/index.js +25 -0
  301. package/dist/index.js.map +1 -0
  302. package/eslint.config.mjs +32 -52
  303. package/example/documents/Profile/Profile.ts +8 -0
  304. package/example/documents/Profile/Profile.yaml +6 -0
  305. package/example/documents/Profile/ProfileAttributes.d.ts +5 -0
  306. package/example/documents/Profile/index.ts +3 -0
  307. package/example/documents/index.ts +5 -0
  308. package/example/index.ts +38 -0
  309. package/example/lib/createActivity.ts +28 -0
  310. package/example/lib/index.ts +24 -0
  311. package/example/operations/Profile/CreateProfile.ts +9 -0
  312. package/example/operations/Profile/DeleteProfile.ts +9 -0
  313. package/example/operations/Profile/IndexProfiles.ts +9 -0
  314. package/example/operations/Profile/ReadProfile.ts +9 -0
  315. package/example/operations/Profile/ReadProfileSystem.ts +9 -0
  316. package/example/operations/Profile/UpdateProfile.ts +9 -0
  317. package/example/operations/Service/Health.ts +11 -0
  318. package/example/operations/index.ts +22 -0
  319. package/example/security/index.ts +25 -0
  320. package/jest.config.mjs +7 -0
  321. package/package.json +34 -24
  322. package/src/Component/Component.ts +120 -0
  323. package/src/Component/__tests__/Component.test.ts +161 -0
  324. package/src/Component/index.ts +7 -0
  325. package/src/Context/Context.ts +217 -0
  326. package/src/Context/Request.ts +41 -0
  327. package/src/Context/__tests__/Context.test.ts +271 -0
  328. package/src/Context/__tests__/__helpers.ts +86 -0
  329. package/src/Context/getHttpMethod.ts +21 -0
  330. package/src/Context/getHttpPath.ts +34 -0
  331. package/src/Context/getMutationParameters.ts +35 -0
  332. package/src/Context/getOperationId.ts +23 -0
  333. package/src/Context/getQueryParameters.ts +45 -0
  334. package/src/Context/index.ts +12 -0
  335. package/src/Context/withSafeAttributes.ts +39 -0
  336. package/src/Document/Document.ts +448 -0
  337. package/src/Document/MemoryDocument.ts +152 -0
  338. package/src/Document/__tests__/MemoryDocument.test.ts +406 -0
  339. package/src/Document/__tests__/__helpers.ts +40 -0
  340. package/src/Document/index.ts +11 -0
  341. package/src/Operation/Operation.ts +401 -0
  342. package/src/Operation/__tests__/Operation.test.ts +142 -0
  343. package/src/Operation/errors/AccessDeniedError.ts +25 -0
  344. package/src/Operation/errors/CommonError.ts +41 -0
  345. package/src/Operation/errors/DocumentExistsError.ts +33 -0
  346. package/src/Operation/errors/DocumentNotFoundError.ts +34 -0
  347. package/src/Operation/errors/InvalidParametersError.ts +30 -0
  348. package/src/Operation/errors/UnauthorizedError.ts +28 -0
  349. package/src/Operation/errors/UnprocessibleConditionError.ts +32 -0
  350. package/src/Operation/errors/__tests__/InvalidParametersError.test.ts +20 -0
  351. package/src/Operation/errors/__tests__/UnprocessibleConditionError.test.ts +20 -0
  352. package/src/Operation/errors/index.ts +17 -0
  353. package/src/Operation/helpers/index.ts +9 -0
  354. package/src/Operation/helpers/withActivity.ts +43 -0
  355. package/src/Operation/index.ts +29 -0
  356. package/src/Operation/operations/Create.ts +49 -0
  357. package/src/Operation/operations/Delete.ts +65 -0
  358. package/src/Operation/operations/Index.ts +164 -0
  359. package/src/Operation/operations/List.ts +62 -0
  360. package/src/Operation/operations/Read.ts +55 -0
  361. package/src/Operation/operations/Update.ts +60 -0
  362. package/src/Operation/operations/__tests__/Create.test.ts +153 -0
  363. package/src/Operation/operations/__tests__/Delete.test.ts +163 -0
  364. package/src/Operation/operations/__tests__/Index.test.ts +209 -0
  365. package/src/Operation/operations/__tests__/List.test.ts +146 -0
  366. package/src/Operation/operations/__tests__/Read.test.ts +152 -0
  367. package/src/Operation/operations/__tests__/Update.test.ts +158 -0
  368. package/src/Operation/security/JwtAuthorization.ts +247 -0
  369. package/src/Operation/security/LambdaAuthorization.ts +103 -0
  370. package/src/Operation/security/__tests__/JwtAuthorization.test.ts +230 -0
  371. package/src/Operation/security/__tests__/LambdaAuthorization.test.ts +63 -0
  372. package/src/Operation/security/__tests__/userAuthorization.test.ts +42 -0
  373. package/src/Operation/security/index.ts +15 -0
  374. package/src/Operation/security/systemAuthorization.ts +23 -0
  375. package/src/Operation/security/userAuthorization.ts +47 -0
  376. package/src/Operation/security/verifyToken.ts +22 -0
  377. package/src/Service/Service.ts +317 -0
  378. package/src/Service/__tests__/Service.test.ts +229 -0
  379. package/src/Service/authorize.ts +80 -0
  380. package/src/Service/errors/InvalidInputError.ts +40 -0
  381. package/src/Service/errors/InvalidOutputError.ts +40 -0
  382. package/src/Service/errors/OperationError.ts +74 -0
  383. package/src/{errors → Service/errors}/OperationError.yaml +7 -10
  384. package/src/Service/errors/OperationErrorAttributes.d.ts +12 -0
  385. package/src/Service/errors/OperationNotFoundError.ts +45 -0
  386. package/src/Service/errors/__tests__/OperationError.test.ts +17 -0
  387. package/src/Service/errors/__tests__/maskSecrets.test.ts +92 -0
  388. package/src/Service/errors/index.ts +18 -0
  389. package/src/Service/errors/logOperationError.ts +72 -0
  390. package/src/Service/errors/maskSecrets.ts +65 -0
  391. package/src/Service/index.ts +9 -0
  392. package/src/Service/logRequest.ts +50 -0
  393. package/src/Service/spec/__tests__/validateSpec.test.ts +10 -0
  394. package/src/Service/spec/createSpec.ts +68 -0
  395. package/src/Service/spec/getErrorResponseDescription.ts +20 -0
  396. package/src/Service/spec/getHttpMethod.ts +20 -0
  397. package/src/Service/spec/getOperation.ts +99 -0
  398. package/src/Service/spec/getOperationParameters.ts +43 -0
  399. package/src/Service/spec/getServiceDefinitions.ts +23 -0
  400. package/src/Service/spec/getServiceInfo.ts +18 -0
  401. package/src/Service/spec/getServiceSecurityDefinitions.ts +26 -0
  402. package/src/Service/spec/getServiceTags.ts +23 -0
  403. package/src/Service/spec/getSuccessStatusCode.ts +15 -0
  404. package/src/Service/spec/index.ts +5 -0
  405. package/src/Service/spec/validateSpec.ts +22 -0
  406. package/src/Service/test/__tests__/createAccessToken.test.ts +104 -0
  407. package/src/Service/test/__tests__/ensureItem.test.ts +41 -0
  408. package/src/Service/test/__tests__/ensureNoItem.test.ts +49 -0
  409. package/src/Service/test/__tests__/execute.test.ts +125 -0
  410. package/src/Service/test/__tests__/findItem.test.ts +45 -0
  411. package/src/Service/test/__tests__/firstItemGet.test.ts +50 -0
  412. package/src/Service/test/__tests__/wait.test.ts +66 -0
  413. package/src/Service/test/createAccessToken.ts +28 -0
  414. package/src/Service/test/ensureItem.ts +9 -0
  415. package/src/Service/test/ensureNoItem.ts +9 -0
  416. package/src/Service/test/execute.ts +112 -0
  417. package/src/Service/test/findItem.ts +22 -0
  418. package/src/Service/test/firstItemGet.ts +18 -0
  419. package/src/Service/test/index.ts +19 -0
  420. package/src/Service/test/keys.ts +75 -0
  421. package/src/Service/test/wait.ts +5 -0
  422. package/src/Service/useComposerMiddleware.ts +56 -0
  423. package/src/Service/useOasMiddleware.ts +69 -0
  424. package/src/index.ts +12 -0
  425. package/tsconfig.json +26 -0
  426. package/examples/CreateProfile.js +0 -40
  427. package/examples/DeleteProfile.js +0 -6
  428. package/examples/Health.js +0 -8
  429. package/examples/IndexProfiles.js +0 -6
  430. package/examples/Profile.js +0 -8
  431. package/examples/Profile.yaml +0 -4
  432. package/examples/ReadProfile.js +0 -18
  433. package/examples/UpdateProfile.js +0 -25
  434. package/examples/index.js +0 -29
  435. package/src/Component.js +0 -59
  436. package/src/Component.spec.js +0 -65
  437. package/src/Document.js +0 -310
  438. package/src/Document.spec.js +0 -331
  439. package/src/Operation.js +0 -258
  440. package/src/Operation.spec.js +0 -474
  441. package/src/Service.js +0 -207
  442. package/src/Service.spec.js +0 -388
  443. package/src/errors/AccessDeniedError.js +0 -11
  444. package/src/errors/CommonError.js +0 -19
  445. package/src/errors/DocumentExistsError.js +0 -15
  446. package/src/errors/DocumentNotFoundError.js +0 -15
  447. package/src/errors/InvalidInputError.js +0 -19
  448. package/src/errors/InvalidOutputError.js +0 -20
  449. package/src/errors/InvalidParametersError.js +0 -11
  450. package/src/errors/OperationError.js +0 -44
  451. package/src/errors/OperationNotFoundError.js +0 -16
  452. package/src/errors/UnauthorizedError.js +0 -11
  453. package/src/errors/UnprocessibleConditionError.js +0 -11
  454. package/src/errors/index.js +0 -11
  455. package/src/helpers/asSafeClass.js +0 -22
  456. package/src/helpers/authorize.js +0 -44
  457. package/src/helpers/createContext.js +0 -96
  458. package/src/helpers/createSchemasMap.js +0 -37
  459. package/src/helpers/createSpec.js +0 -196
  460. package/src/helpers/defaultId.js +0 -30
  461. package/src/helpers/defaultSummary.js +0 -15
  462. package/src/helpers/defaultTags.js +0 -16
  463. package/src/helpers/getComponentTitle.js +0 -22
  464. package/src/helpers/getDefaultSchemaAttributes.js +0 -32
  465. package/src/helpers/getHttpMethod.js +0 -19
  466. package/src/helpers/getIdPrefix.js +0 -7
  467. package/src/helpers/getOrFail.js +0 -24
  468. package/src/helpers/getOrFail.spec.js +0 -17
  469. package/src/helpers/getSuccessStatusCode.js +0 -15
  470. package/src/helpers/handler.js +0 -21
  471. package/src/helpers/loadSync.js +0 -14
  472. package/src/helpers/logError.js +0 -33
  473. package/src/helpers/logRequest.js +0 -36
  474. package/src/helpers/maskSecrets.js +0 -42
  475. package/src/helpers/specMiddleware.js +0 -81
  476. package/src/index.d.ts +0 -350
  477. package/src/index.js +0 -35
  478. package/src/operations/Create.js +0 -39
  479. package/src/operations/Delete.js +0 -54
  480. package/src/operations/Index.js +0 -107
  481. package/src/operations/Read.js +0 -46
  482. package/src/operations/Update.js +0 -50
  483. package/src/security/JwtAuthorization.js +0 -125
  484. package/src/security/SystemAuthorization.js +0 -73
  485. package/src/security/index.js +0 -9
  486. package/src/security/verifyToken.js +0 -17
  487. package/src/test/createAccessToken.js +0 -23
  488. package/src/test/execute.js +0 -84
  489. package/src/test/index.js +0 -11
  490. package/src/test/keys.js +0 -39
  491. package/src/test/wait.js +0 -5
  492. /package/{specs → .composer}/Documents.yaml +0 -0
  493. /package/{specs → .composer}/Enums.yaml +0 -0
  494. /package/{specs → .composer}/Operations.yaml +0 -0
  495. /package/{specs → .composer}/Parameters.yaml +0 -0
  496. /package/{specs → .composer}/Scenarios.yaml +0 -0
  497. /package/{specs → .composer}/Schemas.yaml +0 -0
@@ -0,0 +1,50 @@
1
+ import { firstItemGet } from '../';
2
+
3
+ describe('firstItemGet(items, attributeName, isUndefinedExpected)', () => {
4
+ const items = [
5
+ { id: '1', name: 'Alice', role: 'admin', nested: { value: 'test' } },
6
+ { id: '2', name: 'Bob', role: 'user' },
7
+ ];
8
+
9
+ describe('when isUndefinedExpected is false (default)', () => {
10
+ it('returns attribute value when first item exists and has the attribute', () => {
11
+ expect(firstItemGet(items, 'id')).toEqual('1');
12
+ expect(firstItemGet(items, 'name')).toEqual('Alice');
13
+ expect(firstItemGet(items, 'role')).toEqual('admin');
14
+ });
15
+
16
+ it('returns nested attribute value when first item has nested attribute', () => {
17
+ expect(firstItemGet(items, 'nested.value')).toEqual('test');
18
+ });
19
+
20
+ it('throws when first item is undefined (empty array)', () => {
21
+ expect(() => firstItemGet([], 'id')).toThrow();
22
+ });
23
+
24
+ it('throws when first item exists but attribute does not exist', () => {
25
+ expect(() => firstItemGet(items, 'missing')).toThrow();
26
+ expect(() => firstItemGet(items, 'nested.missing')).toThrow();
27
+ });
28
+ });
29
+
30
+ describe('when isUndefinedExpected is true', () => {
31
+ it('returns attribute value when first item exists and has the attribute', () => {
32
+ expect(firstItemGet(items, 'id', true)).toEqual('1');
33
+ expect(firstItemGet(items, 'name', true)).toEqual('Alice');
34
+ expect(firstItemGet(items, 'role', true)).toEqual('admin');
35
+ });
36
+
37
+ it('returns nested attribute value when first item has nested attribute', () => {
38
+ expect(firstItemGet(items, 'nested.value', true)).toEqual('test');
39
+ });
40
+
41
+ it('returns undefined when first item is undefined (empty array)', () => {
42
+ expect(firstItemGet([], 'id', true)).toBeUndefined();
43
+ });
44
+
45
+ it('returns undefined when first item exists but attribute does not exist', () => {
46
+ expect(firstItemGet(items, 'missing', true)).toBeUndefined();
47
+ expect(firstItemGet(items, 'nested.missing', true)).toBeUndefined();
48
+ });
49
+ });
50
+ });
@@ -0,0 +1,66 @@
1
+ import { wait } from '../';
2
+
3
+ describe('wait(ms)', () => {
4
+ beforeEach(() => {
5
+ jest.useFakeTimers();
6
+ });
7
+
8
+ afterEach(() => {
9
+ jest.runOnlyPendingTimers();
10
+ jest.useRealTimers();
11
+ });
12
+
13
+ it('returns a Promise', () => {
14
+ expect(wait(100)).toBeInstanceOf(Promise);
15
+ });
16
+
17
+ it('resolves after specified milliseconds', async () => {
18
+ const promise = wait(100);
19
+ let resolved = false;
20
+
21
+ promise.then(() => {
22
+ resolved = true;
23
+ });
24
+
25
+ expect(resolved).toBe(false);
26
+ jest.advanceTimersByTime(99);
27
+ await Promise.resolve();
28
+ expect(resolved).toBe(false);
29
+ jest.advanceTimersByTime(1);
30
+ await Promise.resolve();
31
+ expect(resolved).toBe(true);
32
+ });
33
+
34
+ it('resolves when ms is 0', async () => {
35
+ const promise = wait(0);
36
+ let resolved = false;
37
+
38
+ promise.then(() => {
39
+ resolved = true;
40
+ });
41
+
42
+ expect(resolved).toBe(false);
43
+ jest.advanceTimersByTime(0);
44
+ await Promise.resolve();
45
+ expect(resolved).toBe(true);
46
+ });
47
+
48
+ it('handles different time durations correctly', async () => {
49
+ const promise1 = wait(50);
50
+ const promise2 = wait(200);
51
+ let resolved1 = false;
52
+ let resolved2 = false;
53
+
54
+ promise1.then(() => { resolved1 = true; });
55
+ promise2.then(() => { resolved2 = true; });
56
+
57
+ jest.advanceTimersByTime(50);
58
+ await Promise.resolve();
59
+ expect(resolved1).toBe(true);
60
+ expect(resolved2).toBe(false);
61
+
62
+ jest.advanceTimersByTime(150);
63
+ await Promise.resolve();
64
+ expect(resolved2).toBe(true);
65
+ });
66
+ });
@@ -0,0 +1,28 @@
1
+ import { sign, type SignOptions } from 'jsonwebtoken';
2
+ import { TEST_ISSUER, TEST_PRIVATE_KEY } from './keys';
3
+
4
+ interface Options extends SignOptions {
5
+ exp?: string;
6
+ privateKey?: string;
7
+ }
8
+
9
+ /** Creates access token. */
10
+ const createAccessToken = (options: Options, claims: Record<string, unknown>) => {
11
+ const {
12
+ issuer = TEST_ISSUER,
13
+ algorithm = 'RS256',
14
+ privateKey = TEST_PRIVATE_KEY,
15
+ ...signOptions
16
+ } = options;
17
+
18
+ const payload = {
19
+ sub: 'TEST_USER_ID',
20
+ ...claims
21
+ };
22
+
23
+ const token = sign(payload, privateKey, { algorithm, issuer, ...signOptions });
24
+
25
+ return `Bearer ${token}`;
26
+ };
27
+
28
+ export default createAccessToken;
@@ -0,0 +1,9 @@
1
+ import findItem, { type Items, type Query } from './findItem';
2
+
3
+ /** Ensures item to exists in a list for specified query. */
4
+ const ensureItem = (items: Items, query: Query) => {
5
+ const item = findItem(items, query);
6
+ expect(item).toBeDefined();
7
+ };
8
+
9
+ export default ensureItem;
@@ -0,0 +1,9 @@
1
+ import findItem, { type Items, type Query } from './findItem';
2
+
3
+ /** Ensures item does not exist in a list for specified query. */
4
+ const ensureNoItem = (data: Items, query: Query) => {
5
+ const item = findItem(data, query);
6
+ expect(item).toBeUndefined();
7
+ };
8
+
9
+ export default ensureNoItem;
@@ -0,0 +1,112 @@
1
+ import Service from '../Service';
2
+ import { type ErrorAttributes } from '../errors';
3
+ import type { Headers, MutationMap, LambdaRequest, Logger } from '../../Context';
4
+
5
+ const SUCCESS_HTTP_CODES = [ 200, 201, 204 ];
6
+ const NO_RESPONSE_HTTP_CODE = 204;
7
+
8
+ type Parameters = {
9
+ mutation?: MutationMap;
10
+ [index: string]: unknown;
11
+ }
12
+
13
+ type SuccessResult = { data: Record<string, unknown>; };
14
+ type ErrorResult = { error: ErrorAttributes; };
15
+ type Result = SuccessResult | ErrorResult;
16
+
17
+ type Options = {
18
+ logger?: Logger
19
+ };
20
+
21
+ /** Returns helpers to process requests successfully or expect an error. */
22
+ const execute = (service: Service, options: Options = {}) => {
23
+ const { logger = console } = options;
24
+
25
+ /** Processes an operation parameters via service. */
26
+ const exec = async (operationId: string, parameters: Parameters = {}, headers: Headers = {}) => {
27
+ const { mutation: body, ...queryStringParameters } = parameters;
28
+
29
+ const request = {
30
+ body,
31
+ headers,
32
+ operationId,
33
+ queryStringParameters
34
+ } as LambdaRequest;
35
+
36
+ const response = await service.process(request);
37
+
38
+ let result;
39
+
40
+ if (response.body) {
41
+ result = JSON.parse(response.body) as Result;
42
+ }
43
+
44
+ return { ...response, result };
45
+ };
46
+
47
+ /** Processes an operation parameters via service, expects successfull response. */
48
+ const request = async (operationId: string, parameters: Parameters = {}, headers: Headers = {}) => {
49
+ const {
50
+ result,
51
+ statusCode,
52
+ } = await exec(operationId, parameters, headers);
53
+
54
+ let data;
55
+
56
+ const isResultExpected = statusCode !== NO_RESPONSE_HTTP_CODE;
57
+
58
+ if (isResultExpected) {
59
+ data = (result as SuccessResult).data;
60
+ }
61
+
62
+ const isSuccess = SUCCESS_HTTP_CODES.includes(statusCode);
63
+
64
+ if (!isSuccess) {
65
+ const { error } = (result as ErrorResult);
66
+
67
+ logger.error(`\x1b[31mRequestError for "${operationId}"\x1b[37m`);
68
+ logger.dir({ operationId, parameters, error }, { depth: null });
69
+
70
+ throw Error(`RequestError for "${operationId}"`);
71
+ }
72
+
73
+ return data;
74
+ };
75
+
76
+ /** Processes an operation parameters via service, expects an error with a specific code. */
77
+ const expectError = async (errorCode: string, operationId: string, parameters: Parameters = {}, headers: Headers = {}) => {
78
+ const {
79
+ result,
80
+ statusCode,
81
+ } = await exec(operationId, parameters, headers);
82
+
83
+ const isSuccess = SUCCESS_HTTP_CODES.includes(statusCode);
84
+
85
+ if (isSuccess) {
86
+ const { data } = (result as SuccessResult);
87
+
88
+ logger.error(`\x1b[31mSuccess NOT expected for "${operationId}"\x1b[37m`);
89
+ logger.dir({ operationId, statusCode, parameters, data }, { depth: null });
90
+
91
+ throw Error(`Success NOT expected for "${operationId}"`);
92
+ }
93
+
94
+ const { error } = (result as ErrorResult);
95
+
96
+ const isExpectedCode = error.code === errorCode;
97
+
98
+ if (!isExpectedCode) {
99
+ throw Error(`Unexpected error code received "${error.code}", expected "${errorCode}"`);
100
+ }
101
+
102
+ return error;
103
+ };
104
+
105
+ return {
106
+ exec,
107
+ request,
108
+ expectError,
109
+ };
110
+ };
111
+
112
+ export default execute;
@@ -0,0 +1,22 @@
1
+ export type Item = Record<string, unknown>;
2
+ export type Items = Item[];
3
+ export type Query = Record<string, unknown>;
4
+
5
+ /** Finds item in a list using query. */
6
+ const findItem = (items: Items, query: Query): Item | undefined =>
7
+ items.find(item => {
8
+ for (const key in query) {
9
+ const queryValue = query[key];
10
+ const itemValue = item[key];
11
+
12
+ const isMatch = itemValue === queryValue;
13
+
14
+ if (!isMatch) {
15
+ return false;
16
+ }
17
+ }
18
+
19
+ return true;
20
+ });
21
+
22
+ export default findItem;
@@ -0,0 +1,18 @@
1
+ import { get } from 'lodash';
2
+ import { got } from '@kravc/schema';
3
+ import { type Items } from './findItem';
4
+
5
+ /** Returns value or ensures specified attribute exists for the first item from the list. */
6
+ const firstItemGet = (items: Items, attributeName: string, isUndefinedExpected: boolean = false) => {
7
+ const [ firstItem ] = items;
8
+
9
+ if (isUndefinedExpected) {
10
+ return get(firstItem || {}, attributeName);
11
+ }
12
+
13
+ expect(firstItem).toBeDefined();
14
+
15
+ return got(firstItem, attributeName);
16
+ };
17
+
18
+ export default firstItemGet;
@@ -0,0 +1,19 @@
1
+ import wait from './wait';
2
+ import execute from './execute';
3
+ import findItem from './findItem';
4
+ import ensureItem from './ensureItem';
5
+ import ensureNoItem from './ensureNoItem';
6
+ import firstItemGet from './firstItemGet';
7
+ import createAccessToken from './createAccessToken';
8
+
9
+ export {
10
+ wait,
11
+ execute,
12
+ findItem,
13
+ ensureItem,
14
+ ensureNoItem,
15
+ firstItemGet,
16
+ createAccessToken
17
+ };
18
+
19
+ export * from './keys';
@@ -0,0 +1,75 @@
1
+ const TEST_ISSUER = 'http://localhost:3000';
2
+
3
+ const TEST_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
4
+ MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8+PZ2JWhsb9kwI4gdEhr
5
+ xaRimI6p/zYgYY9pb16wmiR5T2JaStWJU0Whbd8SImqgNPpNUkBhjMU1gY2rdYDr
6
+ K1vLyYcOrF6dZs50LzTZkxr6siWARYIOfgKKm+zfESNR2LhT+846pAwgjyzTfIri
7
+ E5astLrUtrHoDCH0kvUEBgWREDwNpOsDcuWdt/9J50rVKlIar5XhfPxN0ZPqkb4F
8
+ UnZXOwbE4yHEUcafXwnEAJ+e7nRMSAkTUQahN722xdZKYSeATSvANIAr64CH3Cxv
9
+ vHWDt7ZJUJ1wgRWmkyqOkJu+NwnNhVBLt/6KacMkdXLDJhq7KnOFOmGLqUIPEY2F
10
+ yFGahicWYoZiYCLli/XknzZRtmKjXrwvbIE6tx5lF/+RwD75Y4j057SHwDkvA/G7
11
+ aBMvcCBYMnRRuJnsnGf8hXwjbdjvbjx3S3NQU/nOumEuPEjSmm92WrnLXLfmVVrv
12
+ AImtxiAZWQi/EKVion96g3rTpirbbpp11+8JIlcy0cKZFNN3Vwfw2JmsG5srBEqz
13
+ 0S7s7ybuMPiRpD+NcxmSzbZt4qpgBDKJe71J0P6tzeca2SS7JuhUYwVdakiLKQT6
14
+ MKZT4sNBcn2mY/lYRNn3iw5Tc1mZ8Ou3EWwzR4uJUyyp1EUjvDjAT7vWauFrz1gW
15
+ eknx7j5GYy4QAZMQXsXCS80CAwEAAQ==
16
+ -----END PUBLIC KEY-----`;
17
+
18
+ const TEST_PRIVATE_KEY = `-----BEGIN PRIVATE KEY-----
19
+ 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
55
+ MI0ecUnEFVPJAjH3Qy2NYUhPOayNF7cw/iDB38ElKxKEEHruavAbWf78/7DVRTG2
56
+ Fh4vgNyfC5eRENcO3T2GBdxILX080hajO6UOPAA7yAUjxQe1sBMe2hwdh4oiNdWr
57
+ 2F5vPI5dEjfJY46Ijn2tZGkWyRg0+waXKnFX6MV5AoIBAQDCDS1q758VerwUBL6T
58
+ qWrLMFMrK1SVTesHwxkP+dMYFRr8Na/5f1VmSeWwpFBpQskUNXE+7QXxeRLpWID0
59
+ T/EgTGlf6eUKwpKsgnRLzwsU1NZyPgIljgKBZk46yatZT7vplQ78iO6QwZzoDdFA
60
+ 3wYA4Lnl7Nw+FAQzKtuBONpDJgTkCfFuIyriHlZj8qwaZk+Tk2ubArY2Dl3r93/g
61
+ bqZY28NAd802wMXeSq3zXb8svP6G2KEJmvp2nM3axXtPTDkybdLj8NaDlb1Ev3B6
62
+ IEvwdBbZOMGxFyplxHjTvPkbzQBmFnA9JIDHRvR2uUTRK28QvB3aCRPTD3vFaNem
63
+ 9KJBAoIBAH7OBL3maedlRcFZSqFNvGhh+J6RO5+6oFN8+8BAvfp6/eziircZSsr+
64
+ NOWNkVamC4Ye0mBQIToGb+65LzIhUbPOq9e7DbZt6mQTD9RJ+qYHcrY4xkCUOljo
65
+ ovI6AzKS+ENQ34OHbQXdkPSF+XoRrz2yFmp9YbB18+QnHSdJpQhE1yHEdnWWqxGp
66
+ xcIsxWce/OpIR5XWqMYuRxfFZ6/ftNV263gtKuZKpdcYthsDtrINbIh+hCz4ppjM
67
+ SOnb9KGxz2qg82zm6YtSRrrh6WwlrapSP5IaX6gTgE6gXa57hDsq/faTqzo8nO5C
68
+ /SGCq5WpDkykHMReK+D02pckJVfJcY8=
69
+ -----END PRIVATE KEY-----`;
70
+
71
+ export {
72
+ TEST_ISSUER,
73
+ TEST_PUBLIC_KEY,
74
+ TEST_PRIVATE_KEY,
75
+ };
@@ -0,0 +1,5 @@
1
+
2
+ /** Pause execution for a specified number of milliseconds. */
3
+ const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
4
+
5
+ export default wait;
@@ -0,0 +1,56 @@
1
+ import { sync } from 'read-yaml-file';
2
+ import type { Context } from '../Context';
3
+ import { OK_STATUS, JSON_TYPE } from './useOasMiddleware';
4
+
5
+ const ROOT_PATH = process.cwd();
6
+
7
+ const COMPOSER_FILES = [
8
+ '/Enums.yaml',
9
+ '/Schemas.yaml',
10
+ '/Documents.yaml',
11
+ '/Scenarios.yaml',
12
+ '/Operations.yaml',
13
+ '/Parameters.yaml'
14
+ ];
15
+
16
+ /** Returns result if request is for service composer file. */
17
+ const useComposerMiddleware = (_service: unknown, context: Context) => {
18
+ const {
19
+ httpPath,
20
+ httpMethod,
21
+ isDevelopment
22
+ } = context;
23
+
24
+ const isGetRequest = httpMethod === 'get';
25
+
26
+ /** Returns specified composer source file. */
27
+ const readFileJson = (httpPath: string) => {
28
+ const fileName = httpPath.replace('/', '');
29
+ const composerSource = sync(`${ROOT_PATH}/.composer/${fileName}`);
30
+
31
+ return JSON.stringify(composerSource, null, 2);
32
+ };
33
+
34
+ const isComposerPath = COMPOSER_FILES.includes(httpPath);
35
+
36
+ const shouldReturnComposerSource =
37
+ isDevelopment &&
38
+ isGetRequest &&
39
+ isComposerPath;
40
+
41
+ if (!shouldReturnComposerSource) {
42
+ return null;
43
+ }
44
+
45
+ const bodyJson = readFileJson(httpPath);
46
+
47
+ return {
48
+ headers: {
49
+ 'Content-Type': JSON_TYPE
50
+ },
51
+ statusCode: OK_STATUS,
52
+ body: bodyJson,
53
+ };
54
+ };
55
+
56
+ export default useComposerMiddleware;
@@ -0,0 +1,69 @@
1
+ import { resolve } from 'path';
2
+ import { Context } from '../Context';
3
+ import { OpenAPIV2 } from 'openapi-types';
4
+ import getServiceInfo from './spec/getServiceInfo';
5
+ import { readFileSync } from 'fs';
6
+
7
+ const SWAGGER_UI_TEMPLATE_PATH = resolve(__dirname, '../../assets/index.html');
8
+ const SWAGGER_UI_TEMPLATE = readFileSync(SWAGGER_UI_TEMPLATE_PATH, { encoding: 'utf8' });
9
+
10
+ const TEXT_TYPE = 'text/html; charset=UTF-8';
11
+ export const JSON_TYPE = 'application/json; charset=utf-8';
12
+ export const OK_STATUS = 200;
13
+
14
+ /** Returns result if request is for service specification file. */
15
+ const useOasMiddleware = ({ spec }: { spec: OpenAPIV2.Document; }, context: Context) => {
16
+ const {
17
+ httpPath,
18
+ httpMethod,
19
+ isDevelopment
20
+ } = context;
21
+
22
+ const isGetRequest = httpMethod === 'get';
23
+
24
+ const isRootPath = httpPath === '/';
25
+
26
+ const shouldReturnBody =
27
+ isRootPath &&
28
+ isGetRequest;
29
+
30
+ if (shouldReturnBody) {
31
+ const bodyText = isDevelopment
32
+ ? SWAGGER_UI_TEMPLATE.replace('$TITLE', getServiceInfo().title)
33
+ : 'healthy';
34
+
35
+ return {
36
+ headers: {
37
+ 'Content-Type': TEXT_TYPE
38
+ },
39
+ statusCode: OK_STATUS,
40
+ body: bodyText,
41
+ };
42
+ }
43
+
44
+ const isSpecPath = httpPath.toLowerCase() === '/spec';
45
+
46
+ const shouldReturnSpec =
47
+ isSpecPath &&
48
+ isGetRequest;
49
+
50
+ if (shouldReturnSpec) {
51
+ const body = isDevelopment
52
+ ? spec
53
+ : { info: getServiceInfo() };
54
+
55
+ const bodyJson = JSON.stringify(body, null, 2);
56
+
57
+ return {
58
+ headers: {
59
+ 'Content-Type': JSON_TYPE
60
+ },
61
+ statusCode: OK_STATUS,
62
+ body: bodyJson,
63
+ };
64
+ }
65
+
66
+ return null;
67
+ };
68
+
69
+ export default useOasMiddleware;
package/src/index.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { got } from '@kravc/schema';
2
+ export { got };
3
+
4
+ export * from './Component';
5
+ export * from './Document';
6
+ export * from './Operation';
7
+ export * from './Service';
8
+ export * from './Context';
9
+
10
+ export type * from './Context';
11
+ export type * from './Document';
12
+ export type * from './Operation';
package/tsconfig.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "rootDir": "./src",
4
+ "outDir": "./dist",
5
+ "target": "esnext",
6
+ "module": "nodenext",
7
+ "isolatedModules": true,
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "strictNullChecks": true,
11
+ "noUnusedLocals": true,
12
+ "noUnusedParameters": true,
13
+ "skipLibCheck": true,
14
+ "declaration": true,
15
+ "declarationMap": true,
16
+ "sourceMap": true
17
+ },
18
+ "include": [
19
+ "src"
20
+ ],
21
+ "exclude": [
22
+ "node_modules",
23
+ "dist",
24
+ "**/*.test.ts"
25
+ ]
26
+ }
@@ -1,40 +0,0 @@
1
- 'use strict'
2
-
3
- const Create = require('../src/operations/Create')
4
- const Profile = require('./Profile')
5
- const verifyToken = require('../src/security/verifyToken')
6
- const { publicKey } = require('../src/test/keys')
7
- const JwtAuthorization = require('../src/security/JwtAuthorization')
8
-
9
- class CreateProfile extends Create(Profile) {
10
- static get tags() {
11
- return [
12
- 'Profiles',
13
- 'profiles-write',
14
- 'System'
15
- ]
16
- }
17
-
18
- static get security() {
19
- const algorithm = 'RS256'
20
-
21
- const accessVerificationMethod = (context, { group }) => {
22
- const isAccessGranted = [ 'Administrators' ].includes(group)
23
-
24
- return [ isAccessGranted, 'Access denied' ]
25
- }
26
-
27
- const tokenVerificationMethod = (...args) => verifyToken(...args)
28
-
29
- return [
30
- JwtAuthorization.createRequirement({
31
- publicKey,
32
- algorithm,
33
- tokenVerificationMethod,
34
- accessVerificationMethod
35
- })
36
- ]
37
- }
38
- }
39
-
40
- module.exports = CreateProfile
@@ -1,6 +0,0 @@
1
- 'use strict'
2
-
3
- const Delete = require('../src/operations/Delete')
4
- const Profile = require('./Profile')
5
-
6
- module.exports = Delete(Profile)
@@ -1,8 +0,0 @@
1
- 'use strict'
2
-
3
- const { Operation } = require('../src')
4
-
5
- class Health extends Operation {
6
- }
7
-
8
- module.exports = Health
@@ -1,6 +0,0 @@
1
- 'use strict'
2
-
3
- const Index = require('../src/operations/Index')
4
- const Profile = require('./Profile')
5
-
6
- module.exports = Index(Profile)
@@ -1,8 +0,0 @@
1
- 'use strict'
2
-
3
- const { Document } = require('../src')
4
-
5
- class Profile extends Document {
6
- }
7
-
8
- module.exports = Profile
@@ -1,4 +0,0 @@
1
- id:
2
- required: true
3
-
4
- name: {}