@lakutata/entrypoint 3.0.0-beta.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 (325) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +183 -0
  3. package/THIRD_PARTY_NOTICES.md +206 -0
  4. package/dist/cjs/Entrypoint.d.ts +868 -0
  5. package/dist/cjs/Entrypoint.js +998 -0
  6. package/dist/cjs/adapter/commander/CommanderCLIEntrypoint.d.ts +192 -0
  7. package/dist/cjs/adapter/commander/CommanderCLIEntrypoint.js +439 -0
  8. package/dist/cjs/adapter/commander/Prompt.d.ts +22 -0
  9. package/dist/cjs/adapter/commander/Prompt.js +164 -0
  10. package/dist/cjs/adapter/commander/Width.d.ts +12 -0
  11. package/dist/cjs/adapter/commander/Width.js +67 -0
  12. package/dist/cjs/adapter/electron/ElectronIPCServiceEntrypoint.d.ts +203 -0
  13. package/dist/cjs/adapter/electron/ElectronIPCServiceEntrypoint.js +249 -0
  14. package/dist/cjs/adapter/express/ExpressHTTPEntrypoint.d.ts +172 -0
  15. package/dist/cjs/adapter/express/ExpressHTTPEntrypoint.js +301 -0
  16. package/dist/cjs/adapter/express/Responders.d.ts +89 -0
  17. package/dist/cjs/adapter/express/Responders.js +71 -0
  18. package/dist/cjs/adapter/express/StaticUI.d.ts +83 -0
  19. package/dist/cjs/adapter/express/StaticUI.js +104 -0
  20. package/dist/cjs/adapter/fastify/FastifyHTTPEntrypoint.d.ts +156 -0
  21. package/dist/cjs/adapter/fastify/FastifyHTTPEntrypoint.js +339 -0
  22. package/dist/cjs/adapter/fastify/Responders.d.ts +88 -0
  23. package/dist/cjs/adapter/fastify/Responders.js +77 -0
  24. package/dist/cjs/adapter/http/HTTPServiceEntrypoint.d.ts +117 -0
  25. package/dist/cjs/adapter/http/HTTPServiceEntrypoint.js +257 -0
  26. package/dist/cjs/adapter/jsonrpc/JSONRPCProtocol.d.ts +194 -0
  27. package/dist/cjs/adapter/jsonrpc/JSONRPCProtocol.js +187 -0
  28. package/dist/cjs/adapter/jsonrpc/JSONRPCServiceEntrypoint.d.ts +154 -0
  29. package/dist/cjs/adapter/jsonrpc/JSONRPCServiceEntrypoint.js +397 -0
  30. package/dist/cjs/adapter/schedule/ScheduleEntrypoint.d.ts +86 -0
  31. package/dist/cjs/adapter/schedule/ScheduleEntrypoint.js +275 -0
  32. package/dist/cjs/adapter/socket.io/SocketIOServiceEntrypoint.d.ts +138 -0
  33. package/dist/cjs/adapter/socket.io/SocketIOServiceEntrypoint.js +216 -0
  34. package/dist/cjs/channel/BuiltinChannels.d.ts +18 -0
  35. package/dist/cjs/channel/BuiltinChannels.js +128 -0
  36. package/dist/cjs/channel/Channel.d.ts +196 -0
  37. package/dist/cjs/channel/Channel.js +106 -0
  38. package/dist/cjs/channel/EntrypointAdapter.d.ts +195 -0
  39. package/dist/cjs/channel/EntrypointAdapter.js +43 -0
  40. package/dist/cjs/context/BaseContext.d.ts +75 -0
  41. package/dist/cjs/context/BaseContext.js +90 -0
  42. package/dist/cjs/context/CLIContext.d.ts +38 -0
  43. package/dist/cjs/context/CLIContext.js +53 -0
  44. package/dist/cjs/context/HTTPContext.d.ts +52 -0
  45. package/dist/cjs/context/HTTPContext.js +78 -0
  46. package/dist/cjs/context/ScheduleContext.d.ts +47 -0
  47. package/dist/cjs/context/ScheduleContext.js +65 -0
  48. package/dist/cjs/context/ServiceContext.d.ts +47 -0
  49. package/dist/cjs/context/ServiceContext.js +62 -0
  50. package/dist/cjs/decorators/CLIAction.d.ts +120 -0
  51. package/dist/cjs/decorators/CLIAction.js +13 -0
  52. package/dist/cjs/decorators/HTTPAction.d.ts +178 -0
  53. package/dist/cjs/decorators/HTTPAction.js +14 -0
  54. package/dist/cjs/decorators/Prefix.d.ts +44 -0
  55. package/dist/cjs/decorators/Prefix.js +48 -0
  56. package/dist/cjs/decorators/Schedule.d.ts +120 -0
  57. package/dist/cjs/decorators/Schedule.js +64 -0
  58. package/dist/cjs/decorators/ServiceAction.d.ts +116 -0
  59. package/dist/cjs/decorators/ServiceAction.js +12 -0
  60. package/dist/cjs/decorators/UseMiddlewares.d.ts +52 -0
  61. package/dist/cjs/decorators/UseMiddlewares.js +58 -0
  62. package/dist/cjs/decorators/http/DELETE.d.ts +87 -0
  63. package/dist/cjs/decorators/http/DELETE.js +7 -0
  64. package/dist/cjs/decorators/http/GET.d.ts +89 -0
  65. package/dist/cjs/decorators/http/GET.js +7 -0
  66. package/dist/cjs/decorators/http/HEAD.d.ts +84 -0
  67. package/dist/cjs/decorators/http/HEAD.js +7 -0
  68. package/dist/cjs/decorators/http/OPTIONS.d.ts +80 -0
  69. package/dist/cjs/decorators/http/OPTIONS.js +7 -0
  70. package/dist/cjs/decorators/http/PATCH.d.ts +90 -0
  71. package/dist/cjs/decorators/http/PATCH.js +7 -0
  72. package/dist/cjs/decorators/http/POST.d.ts +91 -0
  73. package/dist/cjs/decorators/http/POST.js +7 -0
  74. package/dist/cjs/decorators/http/PUT.d.ts +92 -0
  75. package/dist/cjs/decorators/http/PUT.js +7 -0
  76. package/dist/cjs/exceptions/AccessDeniedException.d.ts +10 -0
  77. package/dist/cjs/exceptions/AccessDeniedException.js +17 -0
  78. package/dist/cjs/exceptions/ControllerActionNotFoundException.d.ts +9 -0
  79. package/dist/cjs/exceptions/ControllerActionNotFoundException.js +16 -0
  80. package/dist/cjs/exceptions/DuplicateActionNameException.d.ts +8 -0
  81. package/dist/cjs/exceptions/DuplicateActionNameException.js +15 -0
  82. package/dist/cjs/exceptions/EntrypointStoppedException.d.ts +9 -0
  83. package/dist/cjs/exceptions/EntrypointStoppedException.js +16 -0
  84. package/dist/cjs/exceptions/InvalidActionGroupException.d.ts +4 -0
  85. package/dist/cjs/exceptions/InvalidActionGroupException.js +11 -0
  86. package/dist/cjs/exceptions/InvalidChannelException.d.ts +8 -0
  87. package/dist/cjs/exceptions/InvalidChannelException.js +15 -0
  88. package/dist/cjs/exceptions/InvalidEntrypointAdapterException.d.ts +9 -0
  89. package/dist/cjs/exceptions/InvalidEntrypointAdapterException.js +16 -0
  90. package/dist/cjs/exceptions/InvalidMiddlewareException.d.ts +8 -0
  91. package/dist/cjs/exceptions/InvalidMiddlewareException.js +15 -0
  92. package/dist/cjs/exceptions/InvalidPrefixException.d.ts +8 -0
  93. package/dist/cjs/exceptions/InvalidPrefixException.js +15 -0
  94. package/dist/cjs/exceptions/MiddlewareNextCalledException.d.ts +8 -0
  95. package/dist/cjs/exceptions/MiddlewareNextCalledException.js +15 -0
  96. package/dist/cjs/exceptions/RouteNotFoundException.d.ts +9 -0
  97. package/dist/cjs/exceptions/RouteNotFoundException.js +16 -0
  98. package/dist/cjs/exceptions/ServiceInvokeException.d.ts +11 -0
  99. package/dist/cjs/exceptions/ServiceInvokeException.js +14 -0
  100. package/dist/cjs/exports/CTRLDecorators.d.ts +13 -0
  101. package/dist/cjs/exports/CTRLDecorators.js +38 -0
  102. package/dist/cjs/exports/Channel.d.ts +14 -0
  103. package/dist/cjs/exports/Channel.js +33 -0
  104. package/dist/cjs/exports/CommanderAdapter.d.ts +1 -0
  105. package/dist/cjs/exports/CommanderAdapter.js +8 -0
  106. package/dist/cjs/exports/ElectronAdapter.d.ts +1 -0
  107. package/dist/cjs/exports/ElectronAdapter.js +9 -0
  108. package/dist/cjs/exports/Entrypoint.d.ts +24 -0
  109. package/dist/cjs/exports/Entrypoint.js +55 -0
  110. package/dist/cjs/exports/ExpressAdapter.d.ts +4 -0
  111. package/dist/cjs/exports/ExpressAdapter.js +15 -0
  112. package/dist/cjs/exports/FastifyAdapter.d.ts +4 -0
  113. package/dist/cjs/exports/FastifyAdapter.js +14 -0
  114. package/dist/cjs/exports/JSONRPCAdapter.d.ts +2 -0
  115. package/dist/cjs/exports/JSONRPCAdapter.js +11 -0
  116. package/dist/cjs/exports/SocketIOAdapter.d.ts +1 -0
  117. package/dist/cjs/exports/SocketIOAdapter.js +9 -0
  118. package/dist/cjs/lib/AccessControl.d.ts +118 -0
  119. package/dist/cjs/lib/AccessControl.js +208 -0
  120. package/dist/cjs/lib/AccessControlRule.d.ts +91 -0
  121. package/dist/cjs/lib/AccessControlRule.js +76 -0
  122. package/dist/cjs/lib/ActionOptions.d.ts +67 -0
  123. package/dist/cjs/lib/ActionOptions.js +67 -0
  124. package/dist/cjs/lib/ActionResult.d.ts +28 -0
  125. package/dist/cjs/lib/ActionResult.js +28 -0
  126. package/dist/cjs/lib/ApplicationOf.d.ts +6 -0
  127. package/dist/cjs/lib/ApplicationOf.js +14 -0
  128. package/dist/cjs/lib/Controller.d.ts +59 -0
  129. package/dist/cjs/lib/Controller.js +64 -0
  130. package/dist/cjs/lib/ControllerEntrypoint.d.ts +168 -0
  131. package/dist/cjs/lib/ControllerEntrypoint.js +239 -0
  132. package/dist/cjs/lib/GetActionDTOAndOptions.d.ts +29 -0
  133. package/dist/cjs/lib/GetActionDTOAndOptions.js +49 -0
  134. package/dist/cjs/lib/HTTPErrors.d.ts +55 -0
  135. package/dist/cjs/lib/HTTPErrors.js +52 -0
  136. package/dist/cjs/lib/Middleware.d.ts +146 -0
  137. package/dist/cjs/lib/Middleware.js +144 -0
  138. package/dist/cjs/lib/Prefix.d.ts +98 -0
  139. package/dist/cjs/lib/Prefix.js +151 -0
  140. package/dist/cjs/lib/Result.d.ts +173 -0
  141. package/dist/cjs/lib/Result.js +153 -0
  142. package/dist/cjs/lib/ServiceResponseCodec.d.ts +82 -0
  143. package/dist/cjs/lib/ServiceResponseCodec.js +117 -0
  144. package/dist/cjs/lib/StringifyPattern.d.ts +7 -0
  145. package/dist/cjs/lib/StringifyPattern.js +58 -0
  146. package/dist/cjs/lib/UnsetValue.d.ts +12 -0
  147. package/dist/cjs/lib/UnsetValue.js +216 -0
  148. package/dist/cjs/lib/pattern/GlobPattern.d.ts +34 -0
  149. package/dist/cjs/lib/pattern/GlobPattern.js +68 -0
  150. package/dist/cjs/lib/pattern/PatternManager.d.ts +103 -0
  151. package/dist/cjs/lib/pattern/PatternManager.js +233 -0
  152. package/dist/cjs/lib/schedule/Cron.d.ts +56 -0
  153. package/dist/cjs/lib/schedule/Cron.js +282 -0
  154. package/dist/cjs/package.json +1 -0
  155. package/dist/cjs/types/CLIContextParams.d.ts +14 -0
  156. package/dist/cjs/types/CLIContextParams.js +2 -0
  157. package/dist/cjs/types/ErrorDescription.d.ts +14 -0
  158. package/dist/cjs/types/ErrorDescription.js +2 -0
  159. package/dist/cjs/types/HTTPContextParams.d.ts +27 -0
  160. package/dist/cjs/types/HTTPContextParams.js +2 -0
  161. package/dist/cjs/types/ScheduleContextParams.d.ts +21 -0
  162. package/dist/cjs/types/ScheduleContextParams.js +2 -0
  163. package/dist/cjs/types/ServiceContextParams.d.ts +16 -0
  164. package/dist/cjs/types/ServiceContextParams.js +2 -0
  165. package/dist/esm/Entrypoint.js +985 -0
  166. package/dist/esm/adapter/commander/CommanderCLIEntrypoint.js +433 -0
  167. package/dist/esm/adapter/commander/Prompt.js +127 -0
  168. package/dist/esm/adapter/commander/Width.js +63 -0
  169. package/dist/esm/adapter/electron/ElectronIPCServiceEntrypoint.js +212 -0
  170. package/dist/esm/adapter/express/ExpressHTTPEntrypoint.js +295 -0
  171. package/dist/esm/adapter/express/Responders.js +66 -0
  172. package/dist/esm/adapter/express/StaticUI.js +96 -0
  173. package/dist/esm/adapter/fastify/FastifyHTTPEntrypoint.js +333 -0
  174. package/dist/esm/adapter/fastify/Responders.js +73 -0
  175. package/dist/esm/adapter/http/HTTPServiceEntrypoint.js +253 -0
  176. package/dist/esm/adapter/jsonrpc/JSONRPCProtocol.js +182 -0
  177. package/dist/esm/adapter/jsonrpc/JSONRPCServiceEntrypoint.js +361 -0
  178. package/dist/esm/adapter/schedule/ScheduleEntrypoint.js +272 -0
  179. package/dist/esm/adapter/socket.io/SocketIOServiceEntrypoint.js +212 -0
  180. package/dist/esm/channel/BuiltinChannels.js +125 -0
  181. package/dist/esm/channel/Channel.js +100 -0
  182. package/dist/esm/channel/EntrypointAdapter.js +39 -0
  183. package/dist/esm/context/BaseContext.js +87 -0
  184. package/dist/esm/context/CLIContext.js +49 -0
  185. package/dist/esm/context/HTTPContext.js +74 -0
  186. package/dist/esm/context/ScheduleContext.js +61 -0
  187. package/dist/esm/context/ServiceContext.js +58 -0
  188. package/dist/esm/decorators/CLIAction.js +10 -0
  189. package/dist/esm/decorators/HTTPAction.js +11 -0
  190. package/dist/esm/decorators/Prefix.js +45 -0
  191. package/dist/esm/decorators/Schedule.js +61 -0
  192. package/dist/esm/decorators/ServiceAction.js +9 -0
  193. package/dist/esm/decorators/UseMiddlewares.js +55 -0
  194. package/dist/esm/decorators/http/DELETE.js +4 -0
  195. package/dist/esm/decorators/http/GET.js +4 -0
  196. package/dist/esm/decorators/http/HEAD.js +4 -0
  197. package/dist/esm/decorators/http/OPTIONS.js +4 -0
  198. package/dist/esm/decorators/http/PATCH.js +4 -0
  199. package/dist/esm/decorators/http/POST.js +4 -0
  200. package/dist/esm/decorators/http/PUT.js +4 -0
  201. package/dist/esm/exceptions/AccessDeniedException.js +13 -0
  202. package/dist/esm/exceptions/ControllerActionNotFoundException.js +12 -0
  203. package/dist/esm/exceptions/DuplicateActionNameException.js +11 -0
  204. package/dist/esm/exceptions/EntrypointStoppedException.js +12 -0
  205. package/dist/esm/exceptions/InvalidActionGroupException.js +7 -0
  206. package/dist/esm/exceptions/InvalidChannelException.js +11 -0
  207. package/dist/esm/exceptions/InvalidEntrypointAdapterException.js +12 -0
  208. package/dist/esm/exceptions/InvalidMiddlewareException.js +11 -0
  209. package/dist/esm/exceptions/InvalidPrefixException.js +11 -0
  210. package/dist/esm/exceptions/MiddlewareNextCalledException.js +11 -0
  211. package/dist/esm/exceptions/RouteNotFoundException.js +12 -0
  212. package/dist/esm/exceptions/ServiceInvokeException.js +10 -0
  213. package/dist/esm/exports/CTRLDecorators.js +19 -0
  214. package/dist/esm/exports/Channel.js +11 -0
  215. package/dist/esm/exports/CommanderAdapter.js +1 -0
  216. package/dist/esm/exports/ElectronAdapter.js +1 -0
  217. package/dist/esm/exports/Entrypoint.js +22 -0
  218. package/dist/esm/exports/ExpressAdapter.js +3 -0
  219. package/dist/esm/exports/FastifyAdapter.js +3 -0
  220. package/dist/esm/exports/JSONRPCAdapter.js +2 -0
  221. package/dist/esm/exports/SocketIOAdapter.js +1 -0
  222. package/dist/esm/lib/AccessControl.js +204 -0
  223. package/dist/esm/lib/AccessControlRule.js +72 -0
  224. package/dist/esm/lib/ActionOptions.js +63 -0
  225. package/dist/esm/lib/ActionResult.js +24 -0
  226. package/dist/esm/lib/ApplicationOf.js +11 -0
  227. package/dist/esm/lib/Controller.js +61 -0
  228. package/dist/esm/lib/ControllerEntrypoint.js +229 -0
  229. package/dist/esm/lib/GetActionDTOAndOptions.js +46 -0
  230. package/dist/esm/lib/HTTPErrors.js +48 -0
  231. package/dist/esm/lib/Middleware.js +134 -0
  232. package/dist/esm/lib/Prefix.js +143 -0
  233. package/dist/esm/lib/Result.js +147 -0
  234. package/dist/esm/lib/ServiceResponseCodec.js +113 -0
  235. package/dist/esm/lib/StringifyPattern.js +55 -0
  236. package/dist/esm/lib/UnsetValue.js +213 -0
  237. package/dist/esm/lib/pattern/GlobPattern.js +64 -0
  238. package/dist/esm/lib/pattern/PatternManager.js +229 -0
  239. package/dist/esm/lib/schedule/Cron.js +277 -0
  240. package/dist/esm/types/CLIContextParams.js +1 -0
  241. package/dist/esm/types/ErrorDescription.js +1 -0
  242. package/dist/esm/types/HTTPContextParams.js +1 -0
  243. package/dist/esm/types/ScheduleContextParams.js +1 -0
  244. package/dist/esm/types/ServiceContextParams.js +1 -0
  245. package/dist/types/Entrypoint.d.ts +868 -0
  246. package/dist/types/adapter/commander/CommanderCLIEntrypoint.d.ts +192 -0
  247. package/dist/types/adapter/commander/Prompt.d.ts +22 -0
  248. package/dist/types/adapter/commander/Width.d.ts +12 -0
  249. package/dist/types/adapter/electron/ElectronIPCServiceEntrypoint.d.ts +203 -0
  250. package/dist/types/adapter/express/ExpressHTTPEntrypoint.d.ts +172 -0
  251. package/dist/types/adapter/express/Responders.d.ts +89 -0
  252. package/dist/types/adapter/express/StaticUI.d.ts +83 -0
  253. package/dist/types/adapter/fastify/FastifyHTTPEntrypoint.d.ts +156 -0
  254. package/dist/types/adapter/fastify/Responders.d.ts +88 -0
  255. package/dist/types/adapter/http/HTTPServiceEntrypoint.d.ts +117 -0
  256. package/dist/types/adapter/jsonrpc/JSONRPCProtocol.d.ts +194 -0
  257. package/dist/types/adapter/jsonrpc/JSONRPCServiceEntrypoint.d.ts +154 -0
  258. package/dist/types/adapter/schedule/ScheduleEntrypoint.d.ts +86 -0
  259. package/dist/types/adapter/socket.io/SocketIOServiceEntrypoint.d.ts +138 -0
  260. package/dist/types/channel/BuiltinChannels.d.ts +18 -0
  261. package/dist/types/channel/Channel.d.ts +196 -0
  262. package/dist/types/channel/EntrypointAdapter.d.ts +195 -0
  263. package/dist/types/context/BaseContext.d.ts +75 -0
  264. package/dist/types/context/CLIContext.d.ts +38 -0
  265. package/dist/types/context/HTTPContext.d.ts +52 -0
  266. package/dist/types/context/ScheduleContext.d.ts +47 -0
  267. package/dist/types/context/ServiceContext.d.ts +47 -0
  268. package/dist/types/decorators/CLIAction.d.ts +120 -0
  269. package/dist/types/decorators/HTTPAction.d.ts +178 -0
  270. package/dist/types/decorators/Prefix.d.ts +44 -0
  271. package/dist/types/decorators/Schedule.d.ts +120 -0
  272. package/dist/types/decorators/ServiceAction.d.ts +116 -0
  273. package/dist/types/decorators/UseMiddlewares.d.ts +52 -0
  274. package/dist/types/decorators/http/DELETE.d.ts +87 -0
  275. package/dist/types/decorators/http/GET.d.ts +89 -0
  276. package/dist/types/decorators/http/HEAD.d.ts +84 -0
  277. package/dist/types/decorators/http/OPTIONS.d.ts +80 -0
  278. package/dist/types/decorators/http/PATCH.d.ts +90 -0
  279. package/dist/types/decorators/http/POST.d.ts +91 -0
  280. package/dist/types/decorators/http/PUT.d.ts +92 -0
  281. package/dist/types/exceptions/AccessDeniedException.d.ts +10 -0
  282. package/dist/types/exceptions/ControllerActionNotFoundException.d.ts +9 -0
  283. package/dist/types/exceptions/DuplicateActionNameException.d.ts +8 -0
  284. package/dist/types/exceptions/EntrypointStoppedException.d.ts +9 -0
  285. package/dist/types/exceptions/InvalidActionGroupException.d.ts +4 -0
  286. package/dist/types/exceptions/InvalidChannelException.d.ts +8 -0
  287. package/dist/types/exceptions/InvalidEntrypointAdapterException.d.ts +9 -0
  288. package/dist/types/exceptions/InvalidMiddlewareException.d.ts +8 -0
  289. package/dist/types/exceptions/InvalidPrefixException.d.ts +8 -0
  290. package/dist/types/exceptions/MiddlewareNextCalledException.d.ts +8 -0
  291. package/dist/types/exceptions/RouteNotFoundException.d.ts +9 -0
  292. package/dist/types/exceptions/ServiceInvokeException.d.ts +11 -0
  293. package/dist/types/exports/CTRLDecorators.d.ts +13 -0
  294. package/dist/types/exports/Channel.d.ts +14 -0
  295. package/dist/types/exports/CommanderAdapter.d.ts +1 -0
  296. package/dist/types/exports/ElectronAdapter.d.ts +1 -0
  297. package/dist/types/exports/Entrypoint.d.ts +24 -0
  298. package/dist/types/exports/ExpressAdapter.d.ts +4 -0
  299. package/dist/types/exports/FastifyAdapter.d.ts +4 -0
  300. package/dist/types/exports/JSONRPCAdapter.d.ts +2 -0
  301. package/dist/types/exports/SocketIOAdapter.d.ts +1 -0
  302. package/dist/types/lib/AccessControl.d.ts +118 -0
  303. package/dist/types/lib/AccessControlRule.d.ts +91 -0
  304. package/dist/types/lib/ActionOptions.d.ts +67 -0
  305. package/dist/types/lib/ActionResult.d.ts +28 -0
  306. package/dist/types/lib/ApplicationOf.d.ts +6 -0
  307. package/dist/types/lib/Controller.d.ts +59 -0
  308. package/dist/types/lib/ControllerEntrypoint.d.ts +168 -0
  309. package/dist/types/lib/GetActionDTOAndOptions.d.ts +29 -0
  310. package/dist/types/lib/HTTPErrors.d.ts +55 -0
  311. package/dist/types/lib/Middleware.d.ts +146 -0
  312. package/dist/types/lib/Prefix.d.ts +98 -0
  313. package/dist/types/lib/Result.d.ts +173 -0
  314. package/dist/types/lib/ServiceResponseCodec.d.ts +82 -0
  315. package/dist/types/lib/StringifyPattern.d.ts +7 -0
  316. package/dist/types/lib/UnsetValue.d.ts +12 -0
  317. package/dist/types/lib/pattern/GlobPattern.d.ts +34 -0
  318. package/dist/types/lib/pattern/PatternManager.d.ts +103 -0
  319. package/dist/types/lib/schedule/Cron.d.ts +56 -0
  320. package/dist/types/types/CLIContextParams.d.ts +14 -0
  321. package/dist/types/types/ErrorDescription.d.ts +14 -0
  322. package/dist/types/types/HTTPContextParams.d.ts +27 -0
  323. package/dist/types/types/ScheduleContextParams.d.ts +21 -0
  324. package/dist/types/types/ServiceContextParams.d.ts +16 -0
  325. package/package.json +152 -0
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JSONRPCProtocol = exports.JSONRPCErrorCode = void 0;
4
+ exports.jsonRPCRequestOfContext = jsonRPCRequestOfContext;
5
+ const core_1 = require("@lakutata/core");
6
+ const ServiceContext_js_1 = require("../../context/ServiceContext.js");
7
+ const ServiceResponseCodec_js_1 = require("../../lib/ServiceResponseCodec.js");
8
+ const ControllerActionNotFoundException_js_1 = require("../../exceptions/ControllerActionNotFoundException.js");
9
+ const EntrypointStoppedException_js_1 = require("../../exceptions/EntrypointStoppedException.js");
10
+ /**
11
+ * The error codes of the JSON-RPC 2.0 responses sent by {@link jsonRPCServiceEntrypoint}.
12
+ */
13
+ exports.JSONRPCErrorCode = {
14
+ /**
15
+ * The message is not valid JSON.
16
+ */
17
+ PARSE_ERROR: -32700,
18
+ /**
19
+ * The message is not a JSON-RPC 2.0 request (or is an empty batch, or the HTTP request is not a `POST` to the path).
20
+ */
21
+ INVALID_REQUEST: -32600,
22
+ /**
23
+ * No service action matches the request (`ControllerActionNotFoundException`).
24
+ */
25
+ METHOD_NOT_FOUND: -32601,
26
+ /**
27
+ * The params are given by position without the `positionalParams` option, or fail the action's input validation
28
+ * (`InvalidValueException`).
29
+ */
30
+ INVALID_PARAMS: -32602,
31
+ /**
32
+ * Reserved by the specification for the internal errors; the adapter does not send it.
33
+ */
34
+ INTERNAL_ERROR: -32603,
35
+ /**
36
+ * Any other error thrown by an action (in the server error range, -32000 to -32099), with the whole error object as
37
+ * the error's `data`.
38
+ */
39
+ SERVER_ERROR: -32000,
40
+ /**
41
+ * The entrypoint is stopping and refuses the new requests (`EntrypointStoppedException`).
42
+ */
43
+ STOPPING: -32001
44
+ };
45
+ /**
46
+ * Get the JSON-RPC request behind a service action's request, when {@link jsonRPCServiceEntrypoint} serves it (to
47
+ * tell a notification from a request, or read the transport).
48
+ * @param context The service action's context (`this.context` in a controller).
49
+ * @returns The request's method, id and transport, or `undefined` when another adapter serves the request.
50
+ * @example
51
+ * ```typescript
52
+ * import {Controller, ServiceContext} from 'lakutata/com/entrypoint'
53
+ * import {ServiceAction} from 'lakutata/decorator/ctrl'
54
+ * import {jsonRPCRequestOfContext, type JSONRPCRequestInfo} from 'lakutata/adapter/jsonrpc'
55
+ *
56
+ * class LogController extends Controller {
57
+ * //{"jsonrpc": "2.0", "method": "log.write", "params": {"line": "started"}}: a notification, no id
58
+ * @ServiceAction({method: 'log.write'})
59
+ * public async write(input: {line: string}): Promise<void> {
60
+ * const request: JSONRPCRequestInfo | undefined = jsonRPCRequestOfContext(this.context as ServiceContext)
61
+ * console.log(`${request?.transport}: ${input.line}`)
62
+ * }
63
+ * }
64
+ * ```
65
+ */
66
+ function jsonRPCRequestOfContext(context) {
67
+ return context.jsonrpc;
68
+ }
69
+ /**
70
+ * An error of JSON-RPC
71
+ * @param id
72
+ * @param code
73
+ * @param message
74
+ * @param data
75
+ */
76
+ function errorResponse(id, code, message, data) {
77
+ return { jsonrpc: '2.0', id: id, error: { code: code, message: message, ...data === undefined ? {} : { data: data } } };
78
+ }
79
+ /**
80
+ * The code of an error of an action
81
+ * @param error
82
+ */
83
+ function errorCode(error) {
84
+ if (error instanceof ControllerActionNotFoundException_js_1.ControllerActionNotFoundException)
85
+ return exports.JSONRPCErrorCode.METHOD_NOT_FOUND;
86
+ if (error instanceof core_1.InvalidValueException)
87
+ return exports.JSONRPCErrorCode.INVALID_PARAMS;
88
+ if (error instanceof EntrypointStoppedException_js_1.EntrypointStoppedException)
89
+ return exports.JSONRPCErrorCode.STOPPING;
90
+ return exports.JSONRPCErrorCode.SERVER_ERROR;
91
+ }
92
+ /**
93
+ * The requests of JSON-RPC 2.0 dispatched to the service actions: the single ones, the batches, the notifications (no
94
+ * response); their methods given to the patterns of the actions
95
+ */
96
+ class JSONRPCProtocol {
97
+ constructor(options = {}) {
98
+ this.options = options;
99
+ }
100
+ /**
101
+ * The pattern and the input of the action of a request
102
+ * @param request
103
+ * @protected
104
+ */
105
+ pattern(request) {
106
+ if (this.options.toPattern)
107
+ return this.options.toPattern(request.method, request.params);
108
+ const field = this.options.methodField ?? 'method';
109
+ if (Array.isArray(request.params)) {
110
+ if (!this.options.positionalParams)
111
+ throw Object.assign(new Error('The params by position are not accepted: give them by name (an object)'), { jsonrpcCode: exports.JSONRPCErrorCode.INVALID_PARAMS });
112
+ return { [this.options.positionalParams]: request.params, [field]: request.method };
113
+ }
114
+ return { ...request.params ?? {}, [field]: request.method };
115
+ }
116
+ /**
117
+ * The response of a request (none for a notification)
118
+ * @param request
119
+ * @param dispatch
120
+ * @protected
121
+ */
122
+ async one(request, dispatch) {
123
+ const candidate = request;
124
+ const id = typeof candidate?.id === 'string' || typeof candidate?.id === 'number' ? candidate.id : null;
125
+ if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate) || candidate.jsonrpc !== '2.0' || typeof candidate.method !== 'string'
126
+ || (candidate.params !== undefined && (candidate.params === null || typeof candidate.params !== 'object'))
127
+ || (candidate.id !== undefined && candidate.id !== null && typeof candidate.id !== 'string' && typeof candidate.id !== 'number')) {
128
+ return errorResponse(id, exports.JSONRPCErrorCode.INVALID_REQUEST, 'The request is not a request of JSON-RPC 2.0');
129
+ }
130
+ const notification = !('id' in candidate);
131
+ const respond = (response) => notification ? undefined : response;
132
+ if (dispatch.stopping())
133
+ return respond(errorResponse(id, exports.JSONRPCErrorCode.STOPPING, 'The entrypoint is stopping'));
134
+ let data;
135
+ try {
136
+ data = this.pattern(candidate);
137
+ }
138
+ catch (error) {
139
+ return respond(errorResponse(id, error.jsonrpcCode ?? exports.JSONRPCErrorCode.INVALID_PARAMS, error.message));
140
+ }
141
+ try {
142
+ const context = new ServiceContext_js_1.ServiceContext({
143
+ data: data,
144
+ clientId: dispatch.clientId,
145
+ jsonrpc: { method: candidate.method, id: candidate.id, transport: dispatch.transport },
146
+ ...dispatch.extra ?? {}
147
+ });
148
+ //A StatusResult sent as its data (a file or an event stream cannot be sent: an error)
149
+ const result = ServiceResponseCodec_js_1.ServiceResponseCodec.payload(await dispatch.runtime.dispatch(context, { signal: dispatch.signal }));
150
+ return respond({ jsonrpc: '2.0', id: id, result: result === undefined ? null : result });
151
+ }
152
+ catch (error) {
153
+ //The error of the action: its message, the whole error as its data (as the other service adapters give it)
154
+ return respond(errorResponse(id, errorCode(error), error?.message || String(error), ServiceResponseCodec_js_1.ServiceResponseCodec.encodeError(error).error));
155
+ }
156
+ }
157
+ /**
158
+ * The response of a message (a request, a batch): undefined when there is none (notifications)
159
+ * @param message its text
160
+ * @param dispatch
161
+ */
162
+ async handle(message, dispatch) {
163
+ let parsed;
164
+ try {
165
+ parsed = JSON.parse(message);
166
+ }
167
+ catch {
168
+ return errorResponse(null, exports.JSONRPCErrorCode.PARSE_ERROR, 'The message is not JSON');
169
+ }
170
+ if (!Array.isArray(parsed))
171
+ return await this.one(parsed, dispatch);
172
+ if (!parsed.length)
173
+ return errorResponse(null, exports.JSONRPCErrorCode.INVALID_REQUEST, 'The batch is empty');
174
+ const responses = await Promise.all(parsed.map((request) => this.one(request, dispatch)));
175
+ const answered = responses.filter((response) => !!response);
176
+ return answered.length ? answered : undefined;
177
+ }
178
+ /**
179
+ * A notification sent to a client (an event pushed)
180
+ * @param event
181
+ * @param args
182
+ */
183
+ static notification(event, args) {
184
+ return JSON.stringify({ jsonrpc: '2.0', method: event, params: args });
185
+ }
186
+ }
187
+ exports.JSONRPCProtocol = JSONRPCProtocol;
@@ -0,0 +1,154 @@
1
+ import { type Server } from 'node:http';
2
+ import type { Readable, Writable } from 'node:stream';
3
+ import type { EntrypointAdapter } from '../../channel/EntrypointAdapter.js';
4
+ import type { MiddlewareDefinition } from '../../lib/Middleware.js';
5
+ import type { ServiceContext } from '../../context/ServiceContext.js';
6
+ import { type JSONRPCMappingOptions } from './JSONRPCProtocol.js';
7
+ /**
8
+ * The options of {@link jsonRPCServiceEntrypoint}: its transport, and how the requests map to the service actions (see
9
+ * {@link JSONRPCMappingOptions}).
10
+ */
11
+ export type JSONRPCServiceEntrypointOptions = JSONRPCMappingOptions & {
12
+ /**
13
+ * The adapter name, to tell apart several service adapters of one entrypoint.
14
+ */
15
+ name?: string;
16
+ /**
17
+ * The transport of the messages: `'http'` (a `POST` per message), `'websocket'` (a message per WebSocket text
18
+ * frame, with the events pushed; it needs the optional package `ws`), or `'stdio'` (the process's standard input
19
+ * and output, for a child process, with the events pushed).
20
+ * @default 'http'
21
+ */
22
+ transport?: 'http' | 'websocket' | 'stdio';
23
+ /**
24
+ * The port of the HTTP or WebSocket server; 0 picks a random free port. The entrypoint fails to start when the port
25
+ * is in use.
26
+ * @default 3000
27
+ */
28
+ port?: number;
29
+ /**
30
+ * The host or address of the HTTP or WebSocket server.
31
+ * @default all the interfaces
32
+ */
33
+ host?: string;
34
+ /**
35
+ * The path receiving the requests (HTTP) or the connections (WebSocket).
36
+ * @default '/'
37
+ */
38
+ path?: string;
39
+ /**
40
+ * The largest message, in bytes. Over HTTP a larger body is answered with 413; over WebSocket the connection is
41
+ * closed by `ws`; over stdio a larger message is skipped (the rest of its line, or the length its header declares)
42
+ * and answered with an Invalid Request error without id (`-32600`).
43
+ * @default 10485760 (10 MiB)
44
+ */
45
+ limit?: number;
46
+ /**
47
+ * How the messages are delimited on stdio: `'newline'` (one JSON message per line), or `'content-length'` (each
48
+ * message after a `Content-Length` header and a blank line, as in the Language Server Protocol). The responses and
49
+ * the notifications are written the same way.
50
+ * @default 'newline'
51
+ */
52
+ framing?: 'newline' | 'content-length';
53
+ /**
54
+ * The stream the stdio transport reads.
55
+ * @default process.stdin
56
+ */
57
+ input?: Readable;
58
+ /**
59
+ * The stream the stdio transport writes.
60
+ * @default process.stdout
61
+ */
62
+ output?: Writable;
63
+ /**
64
+ * What happens when the stdio input ends (the parent process is gone): `'application'` exits the application with
65
+ * the code 0 once the requests in progress are answered, `'none'` does nothing, or a function run once they are
66
+ * answered.
67
+ * @default 'application'
68
+ */
69
+ end?: 'application' | 'none' | (() => void | Promise<void>);
70
+ /**
71
+ * The interval between the pings of the WebSocket connections, in milliseconds; 0 sends none. A connection that has
72
+ * not answered a ping by the next one is terminated.
73
+ * @default 30000
74
+ */
75
+ heartbeat?: number;
76
+ /**
77
+ * The middlewares of this adapter's actions, run after the entrypoint's global middlewares.
78
+ */
79
+ middlewares?: MiddlewareDefinition[];
80
+ /**
81
+ * Run once the HTTP or WebSocket server listens, with the server (to read the port picked for port 0). A failure
82
+ * fails the entrypoint start. Not called with stdio.
83
+ */
84
+ listening?: (server: Server) => void | Promise<void>;
85
+ };
86
+ /**
87
+ * Create a service adapter of an entrypoint served over JSON-RPC 2.0, on HTTP, WebSocket or stdio. Only the WebSocket
88
+ * transport needs an optional peer dependency, `ws`; without it, the entrypoint fails to start.
89
+ *
90
+ * A request's method and named params become the service action's pattern and input: by default
91
+ * `{"method": "user.get", "params": {"id": 1}}` is dispatched as `{method: 'user.get', id: 1}` (see
92
+ * {@link JSONRPCMappingOptions} for the other mappings). The batches are answered with an array of responses, the
93
+ * notifications (no `id`) run without a response. The action's result is the response's `result` (`null` for none);
94
+ * its error becomes a JSON-RPC error (see {@link JSONRPCErrorCode}): `METHOD_NOT_FOUND`, `INVALID_PARAMS` for a failed
95
+ * validation, otherwise `SERVER_ERROR` with the whole error object as its `data`.
96
+ *
97
+ * Over HTTP, a message is the body of a `POST` to the path, answered with 200 and the JSON response (204 when it held
98
+ * only notifications); any other method or path is answered with 404, and the CORS headers allow any origin. Over
99
+ * WebSocket and stdio, the events pushed by `Entrypoint.notify` and `Entrypoint.broadcast` are sent as notifications,
100
+ * `{"jsonrpc": "2.0", "method": event, "params": args}`. The client id carried by `ServiceContext.clientId` is the `id`
101
+ * header or `id` query parameter of the HTTP request or of the WebSocket connection (at most 200 characters; a random
102
+ * one for a WebSocket connection without it), and `'stdio'` on stdio.
103
+ *
104
+ * When an HTTP client disconnects before its response, the action's abort signal fires. When the entrypoint stops,
105
+ * stdio stops reading, the new requests are answered with `STOPPING`, and once the requests in progress are answered
106
+ * the WebSocket connections are closed (code 1001) and the server shuts down.
107
+ * @param options The adapter options; by default it serves HTTP on port 3000 of all the interfaces, on the path `/`.
108
+ * @returns The adapter, to give to the `service` option of `buildEntrypoints`.
109
+ * @example
110
+ * ```typescript
111
+ * import {Application} from 'lakutata'
112
+ * import {buildEntrypoints, Controller} from 'lakutata/com/entrypoint'
113
+ * import {ServiceAction} from 'lakutata/decorator/ctrl'
114
+ * import {jsonRPCServiceEntrypoint} from 'lakutata/adapter/jsonrpc'
115
+ * import WebSocket from 'ws'
116
+ *
117
+ * class UserController extends Controller {
118
+ * @ServiceAction({method: 'user.get'})
119
+ * public async get(input: {id: number}): Promise<{id: number, name: string}> {
120
+ * return {id: input.id, name: 'Ada'}
121
+ * }
122
+ * }
123
+ *
124
+ * Application.run({
125
+ * id: 'user.service',
126
+ * name: 'Users',
127
+ * components: {
128
+ * entrypoint: buildEntrypoints({
129
+ * controllers: [UserController],
130
+ * service: [
131
+ * //POST http://localhost:3000/rpc
132
+ * jsonRPCServiceEntrypoint({name: 'rpc-http', port: 3000, path: '/rpc'}),
133
+ * //ws://localhost:3001/rpc, with the events pushed
134
+ * jsonRPCServiceEntrypoint({name: 'rpc-ws', transport: 'websocket', port: 3001, path: '/rpc'})
135
+ * ]
136
+ * })
137
+ * }
138
+ * })
139
+ *
140
+ * //An HTTP client: {"jsonrpc": "2.0", "id": 1, "result": {"id": 1, "name": "Ada"}}
141
+ * const response: Response = await fetch('http://localhost:3000/rpc', {
142
+ * method: 'POST',
143
+ * headers: {'Content-Type': 'application/json'},
144
+ * body: JSON.stringify({jsonrpc: '2.0', id: 1, method: 'user.get', params: {id: 1}})
145
+ * })
146
+ * console.log(await response.json())
147
+ *
148
+ * //A WebSocket client, identified as client-1: the responses and the notifications arrive as messages
149
+ * const socket: WebSocket = new WebSocket('ws://localhost:3001/rpc?id=client-1')
150
+ * socket.on('open', (): void => socket.send(JSON.stringify({jsonrpc: '2.0', id: 2, method: 'user.get', params: {id: 2}})))
151
+ * socket.on('message', (data: WebSocket.RawData): void => console.log(JSON.parse(data.toString())))
152
+ * ```
153
+ */
154
+ export declare function jsonRPCServiceEntrypoint(options?: JSONRPCServiceEntrypointOptions): EntrypointAdapter<ServiceContext>;