@ug.software/opposer 3.0.10

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 (447) hide show
  1. package/README.md +504 -0
  2. package/lib/bin/commands/build.js +75 -0
  3. package/lib/bin/commands/generate/api-key.js +28 -0
  4. package/lib/bin/commands/generate/jwt-key.js +46 -0
  5. package/lib/bin/commands/init.js +169 -0
  6. package/lib/bin/helpers/crypto.js +33 -0
  7. package/lib/bin/opposer.js +26 -0
  8. package/lib/cjs/examples/full-app/index.d.ts +1 -0
  9. package/lib/cjs/examples/full-app/index.js +102 -0
  10. package/lib/cjs/examples/full-app/models/author.d.ts +7 -0
  11. package/lib/cjs/examples/full-app/models/author.js +42 -0
  12. package/lib/cjs/examples/full-app/models/book.d.ts +9 -0
  13. package/lib/cjs/examples/full-app/models/book.js +51 -0
  14. package/lib/cjs/examples/full-app/models/category.d.ts +4 -0
  15. package/lib/cjs/examples/full-app/models/category.js +26 -0
  16. package/lib/cjs/examples/full-app/schedules/catalog-refresh.d.ts +28 -0
  17. package/lib/cjs/examples/full-app/schedules/catalog-refresh.js +149 -0
  18. package/lib/cjs/examples/full-app/schedules/inventory-sync.d.ts +12 -0
  19. package/lib/cjs/examples/full-app/schedules/inventory-sync.js +61 -0
  20. package/lib/cjs/examples/full-app/schedules/library-alerts.d.ts +11 -0
  21. package/lib/cjs/examples/full-app/schedules/library-alerts.js +55 -0
  22. package/lib/cjs/examples/minimal/src/handlers/book.d.ts +11 -0
  23. package/lib/cjs/examples/minimal/src/handlers/book.js +51 -0
  24. package/lib/cjs/examples/minimal/src/index.d.ts +1 -0
  25. package/lib/cjs/examples/minimal/src/index.js +14 -0
  26. package/lib/cjs/examples/minimal/src/models/books.d.ts +4 -0
  27. package/lib/cjs/examples/minimal/src/models/books.js +26 -0
  28. package/lib/cjs/examples/orm/models/permission.d.ts +6 -0
  29. package/lib/cjs/examples/orm/models/permission.js +38 -0
  30. package/lib/cjs/examples/orm/models/profile.d.ts +7 -0
  31. package/lib/cjs/examples/orm/models/profile.js +42 -0
  32. package/lib/cjs/examples/orm/models/user.d.ts +11 -0
  33. package/lib/cjs/examples/orm/models/user.js +70 -0
  34. package/lib/cjs/examples/orm/mysql/index.d.ts +1 -0
  35. package/lib/cjs/examples/orm/mysql/index.js +44 -0
  36. package/lib/cjs/examples/orm/postgres/index.d.ts +1 -0
  37. package/lib/cjs/examples/orm/postgres/index.js +40 -0
  38. package/lib/cjs/examples/orm/sqlite/index.d.ts +1 -0
  39. package/lib/cjs/examples/orm/sqlite/index.js +41 -0
  40. package/lib/cjs/index.d.ts +2 -0
  41. package/lib/cjs/index.js +23 -0
  42. package/lib/cjs/interfaces/controller.d.ts +109 -0
  43. package/lib/cjs/interfaces/controller.js +2 -0
  44. package/lib/cjs/interfaces/field.d.ts +23 -0
  45. package/lib/cjs/interfaces/field.js +2 -0
  46. package/lib/cjs/interfaces/handler.d.ts +18 -0
  47. package/lib/cjs/interfaces/handler.js +2 -0
  48. package/lib/cjs/interfaces/jwt.d.ts +21 -0
  49. package/lib/cjs/interfaces/jwt.js +2 -0
  50. package/lib/cjs/interfaces/model.d.ts +9 -0
  51. package/lib/cjs/interfaces/model.js +2 -0
  52. package/lib/cjs/interfaces/request.d.ts +13 -0
  53. package/lib/cjs/interfaces/request.js +2 -0
  54. package/lib/cjs/interfaces/schema.d.ts +9 -0
  55. package/lib/cjs/interfaces/schema.js +2 -0
  56. package/lib/cjs/interfaces/security.d.ts +32 -0
  57. package/lib/cjs/interfaces/security.js +2 -0
  58. package/lib/cjs/interfaces/server.d.ts +37 -0
  59. package/lib/cjs/interfaces/server.js +2 -0
  60. package/lib/cjs/interfaces/system.d.ts +41 -0
  61. package/lib/cjs/interfaces/system.js +2 -0
  62. package/lib/cjs/orm/decorators/index.d.ts +33 -0
  63. package/lib/cjs/orm/decorators/index.js +131 -0
  64. package/lib/cjs/orm/driver/mysql.d.ts +14 -0
  65. package/lib/cjs/orm/driver/mysql.js +103 -0
  66. package/lib/cjs/orm/driver/postgres.d.ts +14 -0
  67. package/lib/cjs/orm/driver/postgres.js +105 -0
  68. package/lib/cjs/orm/driver/sqlite.d.ts +14 -0
  69. package/lib/cjs/orm/driver/sqlite.js +143 -0
  70. package/lib/cjs/orm/index.d.ts +8 -0
  71. package/lib/cjs/orm/index.js +28 -0
  72. package/lib/cjs/orm/metadata.d.ts +47 -0
  73. package/lib/cjs/orm/metadata.js +47 -0
  74. package/lib/cjs/orm/opposer.d.ts +30 -0
  75. package/lib/cjs/orm/opposer.js +33 -0
  76. package/lib/cjs/orm/query-builder.d.ts +32 -0
  77. package/lib/cjs/orm/query-builder.js +278 -0
  78. package/lib/cjs/orm/repository.d.ts +54 -0
  79. package/lib/cjs/orm/repository.js +325 -0
  80. package/lib/cjs/orm/validation.d.ts +44 -0
  81. package/lib/cjs/orm/validation.js +128 -0
  82. package/lib/cjs/package.json +3 -0
  83. package/lib/cjs/persistent/cache/core-context.d.ts +17 -0
  84. package/lib/cjs/persistent/cache/core-context.js +39 -0
  85. package/lib/cjs/persistent/cache/global.d.ts +18 -0
  86. package/lib/cjs/persistent/cache/global.js +22 -0
  87. package/lib/cjs/persistent/cache/index.d.ts +3 -0
  88. package/lib/cjs/persistent/cache/index.js +12 -0
  89. package/lib/cjs/persistent/cache/session.d.ts +19 -0
  90. package/lib/cjs/persistent/cache/session.js +39 -0
  91. package/lib/cjs/persistent/cache/storage.d.ts +14 -0
  92. package/lib/cjs/persistent/cache/storage.js +88 -0
  93. package/lib/cjs/persistent/cache/store.d.ts +16 -0
  94. package/lib/cjs/persistent/cache/store.js +112 -0
  95. package/lib/cjs/persistent/context/index.d.ts +3 -0
  96. package/lib/cjs/persistent/context/index.js +5 -0
  97. package/lib/cjs/persistent/decorators/global.d.ts +1 -0
  98. package/lib/cjs/persistent/decorators/global.js +25 -0
  99. package/lib/cjs/persistent/decorators/session.d.ts +1 -0
  100. package/lib/cjs/persistent/decorators/session.js +27 -0
  101. package/lib/cjs/persistent/index.d.ts +6 -0
  102. package/lib/cjs/persistent/index.js +18 -0
  103. package/lib/cjs/persistent/interfaces/context.d.ts +5 -0
  104. package/lib/cjs/persistent/interfaces/context.js +2 -0
  105. package/lib/cjs/persistent/interfaces/system.d.ts +47 -0
  106. package/lib/cjs/persistent/interfaces/system.js +29 -0
  107. package/lib/cjs/persistent/system/index.d.ts +7 -0
  108. package/lib/cjs/persistent/system/index.js +44 -0
  109. package/lib/cjs/persistent/utils/memory.d.ts +8 -0
  110. package/lib/cjs/persistent/utils/memory.js +44 -0
  111. package/lib/cjs/persistent/utils/timer.d.ts +14 -0
  112. package/lib/cjs/persistent/utils/timer.js +21 -0
  113. package/lib/cjs/playground/build/client/assets/AddRounded-ByHfnsiW.js +4 -0
  114. package/lib/cjs/playground/build/client/assets/Button-DLrxHRm7.js +1 -0
  115. package/lib/cjs/playground/build/client/assets/Container-CgITmmbk.js +1 -0
  116. package/lib/cjs/playground/build/client/assets/Divider-B_Wx9srO.js +1 -0
  117. package/lib/cjs/playground/build/client/assets/List-juBjUmfP.js +1 -0
  118. package/lib/cjs/playground/build/client/assets/ListItemText-DgWZmgzc.js +1 -0
  119. package/lib/cjs/playground/build/client/assets/MenuItem-D_5SuVKQ.js +1 -0
  120. package/lib/cjs/playground/build/client/assets/Modal-BwXR_5Bh.js +1 -0
  121. package/lib/cjs/playground/build/client/assets/TableRow-B9hAmlnV.js +2 -0
  122. package/lib/cjs/playground/build/client/assets/TextField-UybdTIGB.js +3 -0
  123. package/lib/cjs/playground/build/client/assets/Tooltip-BGcUWUcF.js +1 -0
  124. package/lib/cjs/playground/build/client/assets/auth-CD1rXHzz.js +1 -0
  125. package/lib/cjs/playground/build/client/assets/auth-GyTIVKy5.js +1 -0
  126. package/lib/cjs/playground/build/client/assets/confirm-Dr0pbiV6.js +1 -0
  127. package/lib/cjs/playground/build/client/assets/dividerClasses-CIiqeEPO.js +1 -0
  128. package/lib/cjs/playground/build/client/assets/entry.client-D6FYz1yh.js +13 -0
  129. package/lib/cjs/playground/build/client/assets/index-CJ0wdt6Z.js +1 -0
  130. package/lib/cjs/playground/build/client/assets/index-CQc11yq_.js +1153 -0
  131. package/lib/cjs/playground/build/client/assets/index-Cr4I-4J2.js +1 -0
  132. package/lib/cjs/playground/build/client/assets/index-CtPqstFl.js +26 -0
  133. package/lib/cjs/playground/build/client/assets/index-Ct_NE85o.js +1 -0
  134. package/lib/cjs/playground/build/client/assets/index-D0I6xwmb.js +1 -0
  135. package/lib/cjs/playground/build/client/assets/index-DmDCpKb3.js +1 -0
  136. package/lib/cjs/playground/build/client/assets/index-DsSkAwyn.js +1 -0
  137. package/lib/cjs/playground/build/client/assets/index-_DMgWZ3Y.js +1 -0
  138. package/lib/cjs/playground/build/client/assets/listItemIconClasses-39Itzgzt.js +1 -0
  139. package/lib/cjs/playground/build/client/assets/listItemTextClasses-EQFLPLzt.js +1 -0
  140. package/lib/cjs/playground/build/client/assets/manifest-c06e9a7f.js +1 -0
  141. package/lib/cjs/playground/build/client/assets/mergeSlotProps-DptgQgAT.js +1 -0
  142. package/lib/cjs/playground/build/client/assets/playground-Hl52p9f5.js +108 -0
  143. package/lib/cjs/playground/build/client/assets/root-CQTBmuv8.js +1 -0
  144. package/lib/cjs/playground/build/client/assets/toast-CsAH5FIf.js +1 -0
  145. package/lib/cjs/playground/build/client/assets/use-request-BZNkzlTr.js +1 -0
  146. package/lib/cjs/playground/build/client/favicon.ico +0 -0
  147. package/lib/cjs/playground/build/client/index.html +6 -0
  148. package/lib/cjs/playground/index.d.ts +2 -0
  149. package/lib/cjs/playground/index.js +135 -0
  150. package/lib/cjs/scheduler/controllers/index.d.ts +19 -0
  151. package/lib/cjs/scheduler/controllers/index.js +62 -0
  152. package/lib/cjs/scheduler/decorators/index.d.ts +9 -0
  153. package/lib/cjs/scheduler/decorators/index.js +21 -0
  154. package/lib/cjs/scheduler/handlers/index.d.ts +19 -0
  155. package/lib/cjs/scheduler/handlers/index.js +62 -0
  156. package/lib/cjs/scheduler/index.d.ts +24 -0
  157. package/lib/cjs/scheduler/index.js +110 -0
  158. package/lib/cjs/scheduler/models/history.d.ts +10 -0
  159. package/lib/cjs/scheduler/models/history.js +50 -0
  160. package/lib/cjs/server/constants/index.d.ts +78 -0
  161. package/lib/cjs/server/constants/index.js +372 -0
  162. package/lib/cjs/server/context/index.d.ts +17 -0
  163. package/lib/cjs/server/context/index.js +33 -0
  164. package/lib/cjs/server/controller/index.d.ts +3 -0
  165. package/lib/cjs/server/controller/index.js +217 -0
  166. package/lib/cjs/server/controllers/index.d.ts +5 -0
  167. package/lib/cjs/server/controllers/index.js +72 -0
  168. package/lib/cjs/server/core/index.d.ts +16 -0
  169. package/lib/cjs/server/core/index.js +110 -0
  170. package/lib/cjs/server/core/middleware/body-parser.d.ts +2 -0
  171. package/lib/cjs/server/core/middleware/body-parser.js +27 -0
  172. package/lib/cjs/server/core/middleware/cors.d.ts +4 -0
  173. package/lib/cjs/server/core/middleware/cors.js +32 -0
  174. package/lib/cjs/server/core/middleware/logger.d.ts +2 -0
  175. package/lib/cjs/server/core/middleware/logger.js +15 -0
  176. package/lib/cjs/server/decorators/controller.d.ts +3 -0
  177. package/lib/cjs/server/decorators/controller.js +14 -0
  178. package/lib/cjs/server/decorators/field.d.ts +2 -0
  179. package/lib/cjs/server/decorators/field.js +36 -0
  180. package/lib/cjs/server/decorators/handler.d.ts +3 -0
  181. package/lib/cjs/server/decorators/handler.js +14 -0
  182. package/lib/cjs/server/decorators/index.d.ts +7 -0
  183. package/lib/cjs/server/decorators/index.js +26 -0
  184. package/lib/cjs/server/decorators/is-public-method.d.ts +3 -0
  185. package/lib/cjs/server/decorators/is-public-method.js +16 -0
  186. package/lib/cjs/server/decorators/is-public.d.ts +3 -0
  187. package/lib/cjs/server/decorators/is-public.js +14 -0
  188. package/lib/cjs/server/decorators/method.d.ts +3 -0
  189. package/lib/cjs/server/decorators/method.js +16 -0
  190. package/lib/cjs/server/decorators/payload.d.ts +3 -0
  191. package/lib/cjs/server/decorators/payload.js +15 -0
  192. package/lib/cjs/server/handlers/index.d.ts +5 -0
  193. package/lib/cjs/server/handlers/index.js +72 -0
  194. package/lib/cjs/server/helpers/index.d.ts +17 -0
  195. package/lib/cjs/server/helpers/index.js +39 -0
  196. package/lib/cjs/server/index.d.ts +12 -0
  197. package/lib/cjs/server/index.js +176 -0
  198. package/lib/cjs/server/security/controller/auth.d.ts +76 -0
  199. package/lib/cjs/server/security/controller/auth.js +346 -0
  200. package/lib/cjs/server/security/index.d.ts +2 -0
  201. package/lib/cjs/server/security/index.js +10 -0
  202. package/lib/cjs/server/security/jwt/index.d.ts +23 -0
  203. package/lib/cjs/server/security/jwt/index.js +108 -0
  204. package/lib/cjs/server/security/middleware/autorization.d.ts +3 -0
  205. package/lib/cjs/server/security/middleware/autorization.js +46 -0
  206. package/lib/cjs/server/security/middleware/permission.d.ts +3 -0
  207. package/lib/cjs/server/security/middleware/permission.js +138 -0
  208. package/lib/cjs/server/security/models/crp.d.ts +8 -0
  209. package/lib/cjs/server/security/models/crp.js +42 -0
  210. package/lib/cjs/server/security/models/ke.d.ts +7 -0
  211. package/lib/cjs/server/security/models/ke.js +38 -0
  212. package/lib/cjs/server/security/models/rl.d.ts +9 -0
  213. package/lib/cjs/server/security/models/rl.js +50 -0
  214. package/lib/cjs/server/security/models/se.d.ts +11 -0
  215. package/lib/cjs/server/security/models/se.js +54 -0
  216. package/lib/cjs/server/security/models/usr.d.ts +14 -0
  217. package/lib/cjs/server/security/models/usr.js +82 -0
  218. package/lib/cjs/server/services/delete.d.ts +13 -0
  219. package/lib/cjs/server/services/delete.js +49 -0
  220. package/lib/cjs/server/services/get.d.ts +4 -0
  221. package/lib/cjs/server/services/get.js +145 -0
  222. package/lib/cjs/server/services/insert.d.ts +13 -0
  223. package/lib/cjs/server/services/insert.js +74 -0
  224. package/lib/cjs/server/services/update.d.ts +13 -0
  225. package/lib/cjs/server/services/update.js +60 -0
  226. package/lib/cjs/system/index.d.ts +13 -0
  227. package/lib/cjs/system/index.js +237 -0
  228. package/lib/esm/examples/full-app/index.d.ts +1 -0
  229. package/lib/esm/examples/full-app/index.js +64 -0
  230. package/lib/esm/examples/full-app/models/author.d.ts +7 -0
  231. package/lib/esm/examples/full-app/models/author.js +37 -0
  232. package/lib/esm/examples/full-app/models/book.d.ts +9 -0
  233. package/lib/esm/examples/full-app/models/book.js +46 -0
  234. package/lib/esm/examples/full-app/models/category.d.ts +4 -0
  235. package/lib/esm/examples/full-app/models/category.js +24 -0
  236. package/lib/esm/examples/full-app/schedules/catalog-refresh.d.ts +28 -0
  237. package/lib/esm/examples/full-app/schedules/catalog-refresh.js +143 -0
  238. package/lib/esm/examples/full-app/schedules/inventory-sync.d.ts +12 -0
  239. package/lib/esm/examples/full-app/schedules/inventory-sync.js +55 -0
  240. package/lib/esm/examples/full-app/schedules/library-alerts.d.ts +11 -0
  241. package/lib/esm/examples/full-app/schedules/library-alerts.js +52 -0
  242. package/lib/esm/examples/minimal/src/handlers/book.d.ts +11 -0
  243. package/lib/esm/examples/minimal/src/handlers/book.js +49 -0
  244. package/lib/esm/examples/minimal/src/index.d.ts +1 -0
  245. package/lib/esm/examples/minimal/src/index.js +9 -0
  246. package/lib/esm/examples/minimal/src/models/books.d.ts +4 -0
  247. package/lib/esm/examples/minimal/src/models/books.js +24 -0
  248. package/lib/esm/examples/orm/models/permission.d.ts +6 -0
  249. package/lib/esm/examples/orm/models/permission.js +33 -0
  250. package/lib/esm/examples/orm/models/profile.d.ts +7 -0
  251. package/lib/esm/examples/orm/models/profile.js +37 -0
  252. package/lib/esm/examples/orm/models/user.d.ts +11 -0
  253. package/lib/esm/examples/orm/models/user.js +65 -0
  254. package/lib/esm/examples/orm/mysql/index.d.ts +1 -0
  255. package/lib/esm/examples/orm/mysql/index.js +39 -0
  256. package/lib/esm/examples/orm/postgres/index.d.ts +1 -0
  257. package/lib/esm/examples/orm/postgres/index.js +35 -0
  258. package/lib/esm/examples/orm/sqlite/index.d.ts +1 -0
  259. package/lib/esm/examples/orm/sqlite/index.js +36 -0
  260. package/lib/esm/index.d.ts +2 -0
  261. package/lib/esm/index.js +2 -0
  262. package/lib/esm/interfaces/controller.d.ts +109 -0
  263. package/lib/esm/interfaces/controller.js +1 -0
  264. package/lib/esm/interfaces/field.d.ts +23 -0
  265. package/lib/esm/interfaces/field.js +1 -0
  266. package/lib/esm/interfaces/handler.d.ts +18 -0
  267. package/lib/esm/interfaces/handler.js +1 -0
  268. package/lib/esm/interfaces/jwt.d.ts +21 -0
  269. package/lib/esm/interfaces/jwt.js +1 -0
  270. package/lib/esm/interfaces/model.d.ts +9 -0
  271. package/lib/esm/interfaces/model.js +1 -0
  272. package/lib/esm/interfaces/request.d.ts +13 -0
  273. package/lib/esm/interfaces/request.js +1 -0
  274. package/lib/esm/interfaces/schema.d.ts +9 -0
  275. package/lib/esm/interfaces/schema.js +1 -0
  276. package/lib/esm/interfaces/security.d.ts +32 -0
  277. package/lib/esm/interfaces/security.js +1 -0
  278. package/lib/esm/interfaces/server.d.ts +37 -0
  279. package/lib/esm/interfaces/server.js +1 -0
  280. package/lib/esm/interfaces/system.d.ts +41 -0
  281. package/lib/esm/interfaces/system.js +1 -0
  282. package/lib/esm/orm/decorators/index.d.ts +33 -0
  283. package/lib/esm/orm/decorators/index.js +118 -0
  284. package/lib/esm/orm/driver/mysql.d.ts +14 -0
  285. package/lib/esm/orm/driver/mysql.js +66 -0
  286. package/lib/esm/orm/driver/postgres.d.ts +14 -0
  287. package/lib/esm/orm/driver/postgres.js +68 -0
  288. package/lib/esm/orm/driver/sqlite.d.ts +14 -0
  289. package/lib/esm/orm/driver/sqlite.js +106 -0
  290. package/lib/esm/orm/index.d.ts +8 -0
  291. package/lib/esm/orm/index.js +8 -0
  292. package/lib/esm/orm/metadata.d.ts +47 -0
  293. package/lib/esm/orm/metadata.js +43 -0
  294. package/lib/esm/orm/opposer.d.ts +30 -0
  295. package/lib/esm/orm/opposer.js +29 -0
  296. package/lib/esm/orm/query-builder.d.ts +32 -0
  297. package/lib/esm/orm/query-builder.js +274 -0
  298. package/lib/esm/orm/repository.d.ts +54 -0
  299. package/lib/esm/orm/repository.js +318 -0
  300. package/lib/esm/orm/validation.d.ts +44 -0
  301. package/lib/esm/orm/validation.js +122 -0
  302. package/lib/esm/persistent/cache/core-context.d.ts +17 -0
  303. package/lib/esm/persistent/cache/core-context.js +34 -0
  304. package/lib/esm/persistent/cache/global.d.ts +18 -0
  305. package/lib/esm/persistent/cache/global.js +17 -0
  306. package/lib/esm/persistent/cache/index.d.ts +3 -0
  307. package/lib/esm/persistent/cache/index.js +3 -0
  308. package/lib/esm/persistent/cache/session.d.ts +19 -0
  309. package/lib/esm/persistent/cache/session.js +34 -0
  310. package/lib/esm/persistent/cache/storage.d.ts +14 -0
  311. package/lib/esm/persistent/cache/storage.js +82 -0
  312. package/lib/esm/persistent/cache/store.d.ts +16 -0
  313. package/lib/esm/persistent/cache/store.js +106 -0
  314. package/lib/esm/persistent/context/index.d.ts +3 -0
  315. package/lib/esm/persistent/context/index.js +3 -0
  316. package/lib/esm/persistent/decorators/global.d.ts +1 -0
  317. package/lib/esm/persistent/decorators/global.js +19 -0
  318. package/lib/esm/persistent/decorators/session.d.ts +1 -0
  319. package/lib/esm/persistent/decorators/session.js +21 -0
  320. package/lib/esm/persistent/index.d.ts +6 -0
  321. package/lib/esm/persistent/index.js +6 -0
  322. package/lib/esm/persistent/interfaces/context.d.ts +5 -0
  323. package/lib/esm/persistent/interfaces/context.js +1 -0
  324. package/lib/esm/persistent/interfaces/system.d.ts +47 -0
  325. package/lib/esm/persistent/interfaces/system.js +26 -0
  326. package/lib/esm/persistent/system/index.d.ts +7 -0
  327. package/lib/esm/persistent/system/index.js +39 -0
  328. package/lib/esm/persistent/utils/memory.d.ts +8 -0
  329. package/lib/esm/persistent/utils/memory.js +42 -0
  330. package/lib/esm/persistent/utils/timer.d.ts +14 -0
  331. package/lib/esm/persistent/utils/timer.js +16 -0
  332. package/lib/esm/playground/build/client/assets/AddRounded-ByHfnsiW.js +4 -0
  333. package/lib/esm/playground/build/client/assets/Button-DLrxHRm7.js +1 -0
  334. package/lib/esm/playground/build/client/assets/Container-CgITmmbk.js +1 -0
  335. package/lib/esm/playground/build/client/assets/Divider-B_Wx9srO.js +1 -0
  336. package/lib/esm/playground/build/client/assets/List-juBjUmfP.js +1 -0
  337. package/lib/esm/playground/build/client/assets/ListItemText-DgWZmgzc.js +1 -0
  338. package/lib/esm/playground/build/client/assets/MenuItem-D_5SuVKQ.js +1 -0
  339. package/lib/esm/playground/build/client/assets/Modal-BwXR_5Bh.js +1 -0
  340. package/lib/esm/playground/build/client/assets/TableRow-B9hAmlnV.js +2 -0
  341. package/lib/esm/playground/build/client/assets/TextField-UybdTIGB.js +3 -0
  342. package/lib/esm/playground/build/client/assets/Tooltip-BGcUWUcF.js +1 -0
  343. package/lib/esm/playground/build/client/assets/auth-CD1rXHzz.js +1 -0
  344. package/lib/esm/playground/build/client/assets/auth-GyTIVKy5.js +1 -0
  345. package/lib/esm/playground/build/client/assets/confirm-Dr0pbiV6.js +1 -0
  346. package/lib/esm/playground/build/client/assets/dividerClasses-CIiqeEPO.js +1 -0
  347. package/lib/esm/playground/build/client/assets/entry.client-D6FYz1yh.js +13 -0
  348. package/lib/esm/playground/build/client/assets/index-CJ0wdt6Z.js +1 -0
  349. package/lib/esm/playground/build/client/assets/index-CQc11yq_.js +1153 -0
  350. package/lib/esm/playground/build/client/assets/index-Cr4I-4J2.js +1 -0
  351. package/lib/esm/playground/build/client/assets/index-CtPqstFl.js +26 -0
  352. package/lib/esm/playground/build/client/assets/index-Ct_NE85o.js +1 -0
  353. package/lib/esm/playground/build/client/assets/index-D0I6xwmb.js +1 -0
  354. package/lib/esm/playground/build/client/assets/index-DmDCpKb3.js +1 -0
  355. package/lib/esm/playground/build/client/assets/index-DsSkAwyn.js +1 -0
  356. package/lib/esm/playground/build/client/assets/index-_DMgWZ3Y.js +1 -0
  357. package/lib/esm/playground/build/client/assets/listItemIconClasses-39Itzgzt.js +1 -0
  358. package/lib/esm/playground/build/client/assets/listItemTextClasses-EQFLPLzt.js +1 -0
  359. package/lib/esm/playground/build/client/assets/manifest-c06e9a7f.js +1 -0
  360. package/lib/esm/playground/build/client/assets/mergeSlotProps-DptgQgAT.js +1 -0
  361. package/lib/esm/playground/build/client/assets/playground-Hl52p9f5.js +108 -0
  362. package/lib/esm/playground/build/client/assets/root-CQTBmuv8.js +1 -0
  363. package/lib/esm/playground/build/client/assets/toast-CsAH5FIf.js +1 -0
  364. package/lib/esm/playground/build/client/assets/use-request-BZNkzlTr.js +1 -0
  365. package/lib/esm/playground/build/client/favicon.ico +0 -0
  366. package/lib/esm/playground/build/client/index.html +6 -0
  367. package/lib/esm/playground/index.d.ts +2 -0
  368. package/lib/esm/playground/index.js +129 -0
  369. package/lib/esm/scheduler/controllers/index.d.ts +19 -0
  370. package/lib/esm/scheduler/controllers/index.js +57 -0
  371. package/lib/esm/scheduler/decorators/index.d.ts +9 -0
  372. package/lib/esm/scheduler/decorators/index.js +16 -0
  373. package/lib/esm/scheduler/handlers/index.d.ts +19 -0
  374. package/lib/esm/scheduler/handlers/index.js +57 -0
  375. package/lib/esm/scheduler/index.d.ts +24 -0
  376. package/lib/esm/scheduler/index.js +89 -0
  377. package/lib/esm/scheduler/models/history.d.ts +10 -0
  378. package/lib/esm/scheduler/models/history.js +48 -0
  379. package/lib/esm/server/constants/index.d.ts +78 -0
  380. package/lib/esm/server/constants/index.js +369 -0
  381. package/lib/esm/server/context/index.d.ts +17 -0
  382. package/lib/esm/server/context/index.js +31 -0
  383. package/lib/esm/server/controller/index.d.ts +3 -0
  384. package/lib/esm/server/controller/index.js +179 -0
  385. package/lib/esm/server/controllers/index.d.ts +5 -0
  386. package/lib/esm/server/controllers/index.js +31 -0
  387. package/lib/esm/server/core/index.d.ts +16 -0
  388. package/lib/esm/server/core/index.js +103 -0
  389. package/lib/esm/server/core/middleware/body-parser.d.ts +2 -0
  390. package/lib/esm/server/core/middleware/body-parser.js +24 -0
  391. package/lib/esm/server/core/middleware/cors.d.ts +4 -0
  392. package/lib/esm/server/core/middleware/cors.js +29 -0
  393. package/lib/esm/server/core/middleware/logger.d.ts +2 -0
  394. package/lib/esm/server/core/middleware/logger.js +12 -0
  395. package/lib/esm/server/decorators/controller.d.ts +3 -0
  396. package/lib/esm/server/decorators/controller.js +10 -0
  397. package/lib/esm/server/decorators/field.d.ts +2 -0
  398. package/lib/esm/server/decorators/field.js +32 -0
  399. package/lib/esm/server/decorators/handler.d.ts +3 -0
  400. package/lib/esm/server/decorators/handler.js +10 -0
  401. package/lib/esm/server/decorators/index.d.ts +7 -0
  402. package/lib/esm/server/decorators/index.js +7 -0
  403. package/lib/esm/server/decorators/is-public-method.d.ts +3 -0
  404. package/lib/esm/server/decorators/is-public-method.js +12 -0
  405. package/lib/esm/server/decorators/is-public.d.ts +3 -0
  406. package/lib/esm/server/decorators/is-public.js +10 -0
  407. package/lib/esm/server/decorators/method.d.ts +3 -0
  408. package/lib/esm/server/decorators/method.js +12 -0
  409. package/lib/esm/server/decorators/payload.d.ts +3 -0
  410. package/lib/esm/server/decorators/payload.js +11 -0
  411. package/lib/esm/server/handlers/index.d.ts +5 -0
  412. package/lib/esm/server/handlers/index.js +31 -0
  413. package/lib/esm/server/helpers/index.d.ts +17 -0
  414. package/lib/esm/server/helpers/index.js +34 -0
  415. package/lib/esm/server/index.d.ts +12 -0
  416. package/lib/esm/server/index.js +147 -0
  417. package/lib/esm/server/security/controller/auth.d.ts +76 -0
  418. package/lib/esm/server/security/controller/auth.js +341 -0
  419. package/lib/esm/server/security/index.d.ts +2 -0
  420. package/lib/esm/server/security/index.js +2 -0
  421. package/lib/esm/server/security/jwt/index.d.ts +23 -0
  422. package/lib/esm/server/security/jwt/index.js +103 -0
  423. package/lib/esm/server/security/middleware/autorization.d.ts +3 -0
  424. package/lib/esm/server/security/middleware/autorization.js +41 -0
  425. package/lib/esm/server/security/middleware/permission.d.ts +3 -0
  426. package/lib/esm/server/security/middleware/permission.js +133 -0
  427. package/lib/esm/server/security/models/crp.d.ts +8 -0
  428. package/lib/esm/server/security/models/crp.js +40 -0
  429. package/lib/esm/server/security/models/ke.d.ts +7 -0
  430. package/lib/esm/server/security/models/ke.js +36 -0
  431. package/lib/esm/server/security/models/rl.d.ts +9 -0
  432. package/lib/esm/server/security/models/rl.js +45 -0
  433. package/lib/esm/server/security/models/se.d.ts +11 -0
  434. package/lib/esm/server/security/models/se.js +52 -0
  435. package/lib/esm/server/security/models/usr.d.ts +14 -0
  436. package/lib/esm/server/security/models/usr.js +77 -0
  437. package/lib/esm/server/services/delete.d.ts +13 -0
  438. package/lib/esm/server/services/delete.js +44 -0
  439. package/lib/esm/server/services/get.d.ts +4 -0
  440. package/lib/esm/server/services/get.js +140 -0
  441. package/lib/esm/server/services/insert.d.ts +13 -0
  442. package/lib/esm/server/services/insert.js +69 -0
  443. package/lib/esm/server/services/update.d.ts +13 -0
  444. package/lib/esm/server/services/update.js +55 -0
  445. package/lib/esm/system/index.d.ts +13 -0
  446. package/lib/esm/system/index.js +197 -0
  447. package/package.json +95 -0
@@ -0,0 +1,169 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+
4
+ export const command = "init";
5
+ export const desc = "Scaffold a new Opposer project structure.";
6
+
7
+ export const builder = {};
8
+
9
+ export const handler = async () => {
10
+ const root = process.cwd();
11
+
12
+ // 1. Create Directories
13
+ const dirs = [
14
+ 'src',
15
+ 'src/controllers',
16
+ 'src/models',
17
+ 'src/schedules'
18
+ ];
19
+
20
+ console.log('--> Creating project structure...');
21
+
22
+ dirs.forEach(dir => {
23
+ const fullPath = path.join(root, dir);
24
+ if (!fs.existsSync(fullPath)) {
25
+ fs.mkdirSync(fullPath, { recursive: true });
26
+ console.log(` --> Created ${dir}/`);
27
+ } else {
28
+ console.log(` --> Skipped ${dir}/ (already exists)`);
29
+ }
30
+ });
31
+
32
+ // 2. Create Files Content
33
+
34
+ // src/index.ts
35
+ const indexTsContent = `import { Server } from "@ug.software/opposer";
36
+
37
+ const app = await Server({
38
+ models: "./src/models",
39
+ controllers: "./src/controllers",
40
+ schedules: "./src/schedules",
41
+ cors: { origin: "*" }
42
+ });
43
+
44
+ app.initialize();
45
+ `;
46
+
47
+ // src/controllers/health.ts
48
+ const healthControllerContent = `import { Controller, Method, Success, IsPublicMethod } from "@ug.software/opposer/server";
49
+
50
+ @Controller("health")
51
+ export default class HealthController {
52
+ @IsPublicMethod()
53
+ @Method()
54
+ check() {
55
+ return Success({
56
+ status: "online",
57
+ timestamp: new Date()
58
+ });
59
+ }
60
+ }
61
+ `;
62
+
63
+ // src/models/example.ts
64
+ const exampleModelContent = `import { Entity, PrimaryColumn, Field, f, CreateDateColumn } from "@ug.software/opposer/orm";
65
+
66
+ @Entity("examples", "Example Entity")
67
+ export default class Example {
68
+ @PrimaryColumn({ type: "uuid" })
69
+ id!: string;
70
+
71
+ @Field(() => f().string().required())
72
+ name!: string;
73
+
74
+ @CreateDateColumn()
75
+ createdAt!: Date;
76
+ }
77
+ `;
78
+
79
+ // opposer-settings.json
80
+ const settingsContent = `{
81
+ "port": 3838,
82
+ "url": "/opposer",
83
+ "database": {
84
+ "type": "sqlite",
85
+ "database": "./database.sqlite",
86
+ "logging": true
87
+ },
88
+ "auth": false,
89
+ "logger": true
90
+ }`;
91
+
92
+ // .env
93
+ const envContent = `# --- Server ---
94
+ OPPOSER_PORT=3838
95
+
96
+ # --- Database ---
97
+ # Options: postgres, mysql, sqlite
98
+ OPPOSER_DATABASE_TYPE=sqlite
99
+ # For SQLite use path (e.g., ./db.sqlite), for others use DB name
100
+ OPPOSER_DATABASE_NAME=./database.sqlite
101
+ OPPOSER_DATABASE_LOGGING=true
102
+
103
+ # DB Connection (Not needed for SQLite)
104
+ # OPPOSER_DATABASE_HOST=localhost
105
+ # OPPOSER_DATABASE_PORT=5432
106
+ # OPPOSER_DATABASE_USER=root
107
+ # OPPOSER_DATABASE_PASSWORD=secret
108
+
109
+ # --- Security & Auth ---
110
+ # Set to 'true' in settings.json or enable via code to use
111
+ # OPPOSER_JWT_ACCESS=generate-secure-random-key-here
112
+ # OPPOSER_JWT_REFRESH=generate-secure-random-key-here
113
+
114
+ # Initial Admin User
115
+ # OPPOSER_MANAGER_LOGIN=admin
116
+ # OPPOSER_MANAGER_PASSWORD=admin
117
+ # OPPOSER_MANAGER_FIRST_NAME=System
118
+ # OPPOSER_MANAGER_LAST_NAME=Admin
119
+ `;
120
+
121
+ // 3. Write Files
122
+ const files = [
123
+ { path: 'src/index.ts', content: indexTsContent },
124
+ { path: 'src/controllers/health.ts', content: healthControllerContent },
125
+ { path: 'src/models/example.ts', content: exampleModelContent },
126
+ { path: 'opposer-settings.json', content: settingsContent },
127
+ { path: '.env', content: envContent }
128
+ ];
129
+
130
+ files.forEach(file => {
131
+ const fullPath = path.join(root, file.path);
132
+ if (!fs.existsSync(fullPath)) {
133
+ fs.writeFileSync(fullPath, file.content);
134
+ console.log(` --> Created ${file.path}`);
135
+ } else {
136
+ console.log(` --> Skipped ${file.path} (already exists)`);
137
+ }
138
+ });
139
+
140
+ // 4. Update package.json
141
+ const packageJsonPath = path.join(root, 'package.json');
142
+ let packageJson = {};
143
+
144
+ if (fs.existsSync(packageJsonPath)) {
145
+ packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
146
+ } else {
147
+ packageJson = {
148
+ name: path.basename(root),
149
+ version: "1.0.0",
150
+ type: "module",
151
+ description: "Opposer project",
152
+ main: "src/index.ts",
153
+ dependencies: {},
154
+ devDependencies: {}
155
+ };
156
+ }
157
+
158
+ packageJson.scripts = {
159
+ ...(packageJson.scripts || {}),
160
+ "dev": "npx tsx src/index.ts",
161
+ "build": "npx opposer build"
162
+ };
163
+
164
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
165
+ console.log(' --> Updated package.json with "dev" and "build" scripts.');
166
+
167
+ console.log('\n--> Project initialized successfully!');
168
+ console.log('--> Run "npm run dev" to start your server.');
169
+ };
@@ -0,0 +1,33 @@
1
+ import crypto from "crypto";
2
+
3
+ function base64UrlEncode(buffer) {
4
+ return buffer
5
+ .toString("base64")
6
+ .replace(/\+/g, "-")
7
+ .replace(/\//g, "_")
8
+ .replace(/=+$/, "")
9
+ .slice(0, 200);
10
+ }
11
+
12
+ function deterministic(
13
+ phrase,
14
+ salt,
15
+ bytes = 32,
16
+ iterations = 100_000,
17
+ digest = "sha256"
18
+ ) {
19
+ const derived = crypto.pbkdf2Sync(
20
+ phrase,
21
+ crypto.randomBytes(salt),
22
+ bytes,
23
+ iterations,
24
+ digest
25
+ );
26
+ return base64UrlEncode(derived);
27
+ }
28
+
29
+ function hash(bytes = 32) {
30
+ return crypto.randomBytes(bytes).toString("hex");
31
+ }
32
+
33
+ export { deterministic, hash };
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import yargs from "yargs";
3
+ import { hideBin } from "yargs/helpers";
4
+
5
+ import * as generateJwtKey from "./commands/generate/jwt-key.js";
6
+ import * as generateApiKey from "./commands/generate/api-key.js";
7
+ import * as init from "./commands/init.js";
8
+ import * as build from "./commands/build.js";
9
+
10
+ yargs(hideBin(process.argv))
11
+ .scriptName("opposer")
12
+ .usage("$0 <cmd> [args]")
13
+ .command(init)
14
+ .command(build)
15
+ .command(generateJwtKey)
16
+ .command(generateApiKey)
17
+ .demandCommand(
18
+ 1,
19
+ "É necessário informar um comando. Use --help para listar todos."
20
+ )
21
+ .strict()
22
+ .help()
23
+ .alias("h", "help")
24
+ .alias("v", "version")
25
+ .wrap(null)
26
+ .parse();
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const index_js_1 = __importStar(require("../../server/index.js"));
40
+ const author_js_1 = __importDefault(require("./models/author.js"));
41
+ const book_js_1 = __importDefault(require("./models/book.js"));
42
+ const category_js_1 = __importDefault(require("./models/category.js"));
43
+ const path_1 = __importDefault(require("path"));
44
+ const url_1 = require("url");
45
+ // @ts-ignore
46
+ const _dirname = typeof __dirname !== 'undefined'
47
+ ? __dirname
48
+ : // @ts-ignore
49
+ path_1.default.dirname((0, url_1.fileURLToPath)(import.meta.url));
50
+ async function runFullExample() {
51
+ console.log('🚀 Initializing Full Opposer Example...');
52
+ // 1. Setup Environment
53
+ process.env.OPPOSER_PORT = '4000';
54
+ process.env.OPPOSER_DATABASE_TYPE = 'sqlite';
55
+ process.env.OPPOSER_DATABASE_NAME = './full-app.db';
56
+ try {
57
+ // 2. Start Opposer Server
58
+ // Passing the local models and schedules path so initialization can find our entities
59
+ const { initialize } = await (0, index_js_1.default)({
60
+ cors: { origin: '*' },
61
+ models: path_1.default.resolve(_dirname, 'models'),
62
+ schedules: path_1.default.resolve(_dirname, 'schedules'),
63
+ });
64
+ // 3. Populate Initial Data
65
+ // Using the new global Context to get the database
66
+ const db = index_js_1.Context.get('db');
67
+ console.log('📝 Populating initial data...');
68
+ const authorRepo = db.getRepository(author_js_1.default);
69
+ const categoryRepo = db.getRepository(category_js_1.default);
70
+ const bookRepo = db.getRepository(book_js_1.default);
71
+ //@ts-ignore
72
+ const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
73
+ // Insert Author
74
+ let author = await authorRepo.findOne({ where: { name: 'J.K. Rowling' } });
75
+ if (!author) {
76
+ author = await authorRepo.insert({ id: randomUUID(), name: 'J.K. Rowling', nationality: 'British' });
77
+ }
78
+ // Insert Category
79
+ let category = await categoryRepo.findOne({ where: { title: 'Fantasy' } });
80
+ if (!category) {
81
+ category = await categoryRepo.insert({ id: randomUUID(), title: 'Fantasy' });
82
+ }
83
+ // Insert Books
84
+ const bookCount = await bookRepo.count({});
85
+ if (bookCount === 0) {
86
+ await bookRepo.insert({ id: randomUUID(), title: "Harry Potter and the Philosopher's Stone", price: 39.9, author: author.id, category: category.id });
87
+ await bookRepo.insert({ id: randomUUID(), title: 'Harry Potter and the Chamber of Secrets', price: 42.5, author: author.id, category: category.id });
88
+ console.log('✅ Data populated.');
89
+ }
90
+ // 4. Start listening
91
+ initialize();
92
+ console.log('\n--- Example Info ---');
93
+ console.log('API URL: http://localhost:4000/opposer');
94
+ console.log('Playground Map: http://localhost:4000/opposer-map.json');
95
+ console.log('Playground Status: http://localhost:4000/playground');
96
+ console.log('--------------------\n');
97
+ }
98
+ catch (error) {
99
+ console.error('❌ Failed to start example:', error);
100
+ }
101
+ }
102
+ runFullExample();
@@ -0,0 +1,7 @@
1
+ import Book from "./book.js";
2
+ export default class Author {
3
+ id: string;
4
+ name: string;
5
+ nationality?: string;
6
+ books: Book[];
7
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const index_js_1 = require("../../../orm/index.js");
16
+ const book_js_1 = __importDefault(require("./book.js"));
17
+ let Author = class Author {
18
+ };
19
+ __decorate([
20
+ (0, index_js_1.PrimaryColumn)({ type: "uuid" }),
21
+ __metadata("design:type", String)
22
+ ], Author.prototype, "id", void 0);
23
+ __decorate([
24
+ (0, index_js_1.Field)(() => (0, index_js_1.f)().string("Name is string").required("Name is required")),
25
+ __metadata("design:type", String)
26
+ ], Author.prototype, "name", void 0);
27
+ __decorate([
28
+ (0, index_js_1.Field)({ type: "string" }),
29
+ __metadata("design:type", String)
30
+ ], Author.prototype, "nationality", void 0);
31
+ __decorate([
32
+ (0, index_js_1.Relation)({
33
+ type: "one-to-many",
34
+ target: () => book_js_1.default,
35
+ inverseSide: "author"
36
+ }),
37
+ __metadata("design:type", Array)
38
+ ], Author.prototype, "books", void 0);
39
+ Author = __decorate([
40
+ (0, index_js_1.Entity)("authors", { description: "The author of the book, which contains the name and nationality" })
41
+ ], Author);
42
+ exports.default = Author;
@@ -0,0 +1,9 @@
1
+ import Author from "./author.js";
2
+ import Category from "./category.js";
3
+ export default class Book {
4
+ id: string;
5
+ title: string;
6
+ price: number;
7
+ author: Author;
8
+ category: Category;
9
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const index_js_1 = require("../../../orm/index.js");
16
+ const author_js_1 = __importDefault(require("./author.js"));
17
+ const category_js_1 = __importDefault(require("./category.js"));
18
+ let Book = class Book {
19
+ };
20
+ __decorate([
21
+ (0, index_js_1.PrimaryColumn)({ type: "uuid" }),
22
+ __metadata("design:type", String)
23
+ ], Book.prototype, "id", void 0);
24
+ __decorate([
25
+ (0, index_js_1.Field)(() => (0, index_js_1.f)().string("Title is string").required("Title is required")),
26
+ __metadata("design:type", String)
27
+ ], Book.prototype, "title", void 0);
28
+ __decorate([
29
+ (0, index_js_1.Field)({ type: "number", default: 0 }),
30
+ __metadata("design:type", Number)
31
+ ], Book.prototype, "price", void 0);
32
+ __decorate([
33
+ (0, index_js_1.Relation)({
34
+ type: "many-to-one",
35
+ target: () => author_js_1.default,
36
+ inverseSide: "books"
37
+ }),
38
+ __metadata("design:type", author_js_1.default)
39
+ ], Book.prototype, "author", void 0);
40
+ __decorate([
41
+ (0, index_js_1.Relation)({
42
+ type: "many-to-one",
43
+ target: () => category_js_1.default,
44
+ inverseSide: "books"
45
+ }),
46
+ __metadata("design:type", category_js_1.default)
47
+ ], Book.prototype, "category", void 0);
48
+ Book = __decorate([
49
+ (0, index_js_1.Entity)("books", { description: "Entity representing a book in the store" })
50
+ ], Book);
51
+ exports.default = Book;
@@ -0,0 +1,4 @@
1
+ export default class Category {
2
+ id: string;
3
+ title: string;
4
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const index_js_1 = require("../../../orm/index.js");
13
+ let Category = class Category {
14
+ };
15
+ __decorate([
16
+ (0, index_js_1.PrimaryColumn)({ type: "uuid" }),
17
+ __metadata("design:type", String)
18
+ ], Category.prototype, "id", void 0);
19
+ __decorate([
20
+ (0, index_js_1.Field)(() => (0, index_js_1.f)().string("Title is string").required("Title is required")),
21
+ __metadata("design:type", String)
22
+ ], Category.prototype, "title", void 0);
23
+ Category = __decorate([
24
+ (0, index_js_1.Entity)("categories")
25
+ ], Category);
26
+ exports.default = Category;
@@ -0,0 +1,28 @@
1
+ import { OpposerDatabase } from '../../../orm';
2
+ export default class CatalogRefreshSchedules {
3
+ refreshCatalog(): Promise<{
4
+ status: string;
5
+ imported: number;
6
+ timestamp: string;
7
+ message?: undefined;
8
+ } | {
9
+ status: string;
10
+ message: any;
11
+ imported?: undefined;
12
+ timestamp?: undefined;
13
+ }>;
14
+ /**
15
+ * Logic to wipe and refill the catalog with 10,000 books
16
+ */
17
+ static performRefresh(db: OpposerDatabase): Promise<{
18
+ status: string;
19
+ imported: number;
20
+ timestamp: string;
21
+ message?: undefined;
22
+ } | {
23
+ status: string;
24
+ message: any;
25
+ imported?: undefined;
26
+ timestamp?: undefined;
27
+ }>;
28
+ }
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const scheduler_1 = require("../../../scheduler");
16
+ const server_1 = require("../../../server");
17
+ const book_js_1 = __importDefault(require("../models/book.js"));
18
+ const author_js_1 = __importDefault(require("../models/author.js"));
19
+ const category_js_1 = __importDefault(require("../models/category.js"));
20
+ const crypto_1 = require("crypto");
21
+ class CatalogRefreshSchedules {
22
+ async refreshCatalog() {
23
+ console.log('[schedule] Starting hourly catalog refresh...');
24
+ const db = server_1.Context.get('db');
25
+ return await CatalogRefreshSchedules.performRefresh(db);
26
+ }
27
+ /**
28
+ * Logic to wipe and refill the catalog with 10,000 books
29
+ */
30
+ static async performRefresh(db) {
31
+ try {
32
+ const authorRepo = db.getRepository(author_js_1.default);
33
+ const categoryRepo = db.getRepository(category_js_1.default);
34
+ const bookRepo = db.getRepository(book_js_1.default);
35
+ const totalToFetch = 100;
36
+ const pageSize = 10;
37
+ const pages = totalToFetch / pageSize;
38
+ console.log(`[catalog-refresh] Fetching ${totalToFetch} books from Open Library...`);
39
+ const allBooksData = [];
40
+ for (let i = 0; i < pages; i += 5) {
41
+ const requests = [];
42
+ for (let j = 0; j < 5 && i + j < pages; j++) {
43
+ const page = i + j + 1;
44
+ requests.push(fetch(`https://openlibrary.org/search.json?q=has_fulltext:true&page=${page}&limit=${pageSize}`)
45
+ .then((res) => res.json())
46
+ .then((data) => data.docs || [])
47
+ .catch((err) => {
48
+ console.error(`Error fetching page ${page}:`, err.message);
49
+ return [];
50
+ }));
51
+ }
52
+ const results = await Promise.all(requests);
53
+ allBooksData.push(...results.flat());
54
+ if (allBooksData.length >= totalToFetch)
55
+ break;
56
+ }
57
+ console.log('allBooksData', allBooksData);
58
+ if (allBooksData.length === 0)
59
+ throw new Error('No books fetched from API');
60
+ console.log(`[catalog-refresh] Wiping current database...`);
61
+ //@ts-ignore
62
+ if (typeof db.query === 'function') {
63
+ //@ts-ignore
64
+ await db.query('DELETE FROM books');
65
+ //@ts-ignore
66
+ await db.query('DELETE FROM authors');
67
+ //@ts-ignore
68
+ await db.query('DELETE FROM categories');
69
+ }
70
+ else {
71
+ //@ts-ignore
72
+ if (typeof bookRepo.delete === 'function') {
73
+ //@ts-ignore
74
+ await bookRepo.delete({});
75
+ //@ts-ignore
76
+ await authorRepo.delete({});
77
+ //@ts-ignore
78
+ await categoryRepo.delete({});
79
+ }
80
+ }
81
+ const authorsMap = new Map();
82
+ const categoriesMap = new Map();
83
+ let importedCount = 0;
84
+ console.log(`[catalog-refresh] Processing and inserting records...`);
85
+ for (const bookData of allBooksData) {
86
+ if (!bookData.title)
87
+ continue;
88
+ // Author
89
+ const authorName = (bookData.author_name && bookData.author_name[0]) || 'Unknown Author';
90
+ let authorId = authorsMap.get(authorName);
91
+ if (!authorId) {
92
+ authorId = (0, crypto_1.randomUUID)();
93
+ await authorRepo.insert({
94
+ id: authorId,
95
+ name: authorName,
96
+ nationality: 'Unknown',
97
+ });
98
+ authorsMap.set(authorName, authorId);
99
+ }
100
+ // Category
101
+ const categoryName = (bookData.subject && bookData.subject[0]) || 'General';
102
+ let categoryId = categoriesMap.get(categoryName);
103
+ if (!categoryId) {
104
+ categoryId = (0, crypto_1.randomUUID)();
105
+ await categoryRepo.insert({
106
+ id: categoryId,
107
+ title: categoryName,
108
+ });
109
+ categoriesMap.set(categoryName, categoryId);
110
+ }
111
+ // Book
112
+ let imageUrl = bookData.cover_i ? `https://covers.openlibrary.org/b/id/${bookData.cover_i}-L.jpg` : undefined;
113
+ await bookRepo.insert({
114
+ id: (0, crypto_1.randomUUID)(),
115
+ title: bookData.title,
116
+ price: Math.floor(Math.random() * 100) + 20,
117
+ imageUrl,
118
+ author: authorId,
119
+ category: categoryId,
120
+ });
121
+ importedCount++;
122
+ if (importedCount % 1000 === 0)
123
+ console.log(`[catalog-refresh] Imported ${importedCount} books...`);
124
+ if (importedCount >= totalToFetch)
125
+ break;
126
+ }
127
+ console.log(`[catalog-refresh] Success! Total imported: ${importedCount}`);
128
+ return {
129
+ status: 'success',
130
+ imported: importedCount,
131
+ timestamp: new Date().toISOString(),
132
+ };
133
+ }
134
+ catch (error) {
135
+ console.error(`[catalog-refresh] Failed:`, error.message);
136
+ return { status: 'error', message: error.message };
137
+ }
138
+ }
139
+ }
140
+ exports.default = CatalogRefreshSchedules;
141
+ __decorate([
142
+ (0, scheduler_1.Schedule)({
143
+ name: 'hourly-catalog-wipe-and-refill',
144
+ interval: 3600000, // 1 hour
145
+ }),
146
+ __metadata("design:type", Function),
147
+ __metadata("design:paramtypes", []),
148
+ __metadata("design:returntype", Promise)
149
+ ], CatalogRefreshSchedules.prototype, "refreshCatalog", null);
@@ -0,0 +1,12 @@
1
+ export default class InventorySchedules {
2
+ checkStock(): Promise<{
3
+ timestamp: string;
4
+ booksChecked: number;
5
+ status: string;
6
+ }>;
7
+ importCatalog(): Promise<{
8
+ imported: number;
9
+ skipped: number;
10
+ errors: number;
11
+ }>;
12
+ }