@openinc/parse-server-opendash 2.3.2 → 2.3.5

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 (358) hide show
  1. package/dist/config.d.ts +2 -2
  2. package/dist/config.js +438 -438
  3. package/dist/featuremap.json +73 -73
  4. package/dist/functions/_init.d.ts +1 -1
  5. package/dist/functions/_init.js +20 -20
  6. package/dist/functions/getAdminConfig.d.ts +1 -1
  7. package/dist/functions/getAdminConfig.js +63 -63
  8. package/dist/functions/getSchemaForAdmin.d.ts +1 -1
  9. package/dist/functions/getSchemaForAdmin.js +14 -14
  10. package/dist/functions/opendash-geo-features.d.ts +1 -1
  11. package/dist/functions/opendash-geo-features.js +19 -19
  12. package/dist/functions/openinc-auth-change-password.d.ts +1 -1
  13. package/dist/functions/openinc-auth-change-password.js +30 -30
  14. package/dist/functions/openinc-auth-confirm-email.d.ts +1 -1
  15. package/dist/functions/openinc-auth-confirm-email.js +18 -18
  16. package/dist/functions/openinc-auth-email-confirmation-request.d.ts +1 -1
  17. package/dist/functions/openinc-auth-email-confirmation-request.js +42 -34
  18. package/dist/functions/openinc-auth-email-confirmation.d.ts +1 -1
  19. package/dist/functions/openinc-auth-email-confirmation.js +23 -23
  20. package/dist/functions/openinc-auth-login-admin.d.ts +1 -1
  21. package/dist/functions/openinc-auth-login-admin.js +69 -69
  22. package/dist/functions/openinc-auth-login-passwordless.d.ts +1 -1
  23. package/dist/functions/openinc-auth-login-passwordless.js +50 -42
  24. package/dist/functions/openinc-auth-login.d.ts +1 -1
  25. package/dist/functions/openinc-auth-login.js +45 -45
  26. package/dist/functions/openinc-auth-password-reset-request.d.ts +1 -1
  27. package/dist/functions/openinc-auth-password-reset-request.js +42 -34
  28. package/dist/functions/openinc-auth-password-reset.d.ts +1 -1
  29. package/dist/functions/openinc-auth-password-reset.js +28 -28
  30. package/dist/functions/openinc-auth-signup.d.ts +1 -1
  31. package/dist/functions/openinc-auth-signup.js +88 -88
  32. package/dist/functions/openinc-auth-validate-token.d.ts +1 -1
  33. package/dist/functions/openinc-auth-validate-token.js +34 -34
  34. package/dist/functions/openinc-auth.common.d.ts +15 -15
  35. package/dist/functions/openinc-auth.common.js +47 -47
  36. package/dist/functions/openinc-config.d.ts +1 -1
  37. package/dist/functions/openinc-config.js +92 -92
  38. package/dist/functions/openinc-geo-google-autocomplete.d.ts +1 -1
  39. package/dist/functions/openinc-geo-google-autocomplete.js +58 -58
  40. package/dist/functions/openinc-geo-google.common.d.ts +2 -2
  41. package/dist/functions/openinc-geo-google.common.js +34 -34
  42. package/dist/functions/openinc-geo-graphhopper-geocode-reverse-raw.d.ts +1 -1
  43. package/dist/functions/openinc-geo-graphhopper-geocode-reverse-raw.js +24 -24
  44. package/dist/functions/openinc-geo-graphhopper-geocode-reverse.d.ts +1 -1
  45. package/dist/functions/openinc-geo-graphhopper-geocode-reverse.js +24 -24
  46. package/dist/functions/openinc-geo-graphhopper-geocode.d.ts +1 -1
  47. package/dist/functions/openinc-geo-graphhopper-geocode.js +24 -24
  48. package/dist/functions/openinc-geo-graphhopper-route-simple.d.ts +1 -1
  49. package/dist/functions/openinc-geo-graphhopper-route-simple.js +33 -33
  50. package/dist/functions/openinc-geo-graphhopper.common.d.ts +2 -2
  51. package/dist/functions/openinc-geo-graphhopper.common.js +60 -60
  52. package/dist/helper/Config.d.ts +33 -33
  53. package/dist/helper/Config.js +156 -156
  54. package/dist/helper/pdf2img.d.ts +12 -12
  55. package/dist/helper/pdf2img.js +111 -111
  56. package/dist/hooks/Alarm.d.ts +1 -1
  57. package/dist/hooks/Alarm.js +40 -40
  58. package/dist/hooks/AlarmAction.d.ts +1 -1
  59. package/dist/hooks/AlarmAction.js +15 -15
  60. package/dist/hooks/AlarmWebhook.d.ts +1 -1
  61. package/dist/hooks/AlarmWebhook.js +16 -16
  62. package/dist/hooks/Attachment.d.ts +1 -1
  63. package/dist/hooks/Attachment.js +18 -18
  64. package/dist/hooks/BDE_Form.d.ts +1 -1
  65. package/dist/hooks/BDE_Form.js +53 -53
  66. package/dist/hooks/BDE_List.d.ts +1 -1
  67. package/dist/hooks/BDE_List.js +17 -17
  68. package/dist/hooks/BDE_ListEntry.d.ts +1 -1
  69. package/dist/hooks/BDE_ListEntry.js +17 -17
  70. package/dist/hooks/BDE_Page.d.ts +1 -1
  71. package/dist/hooks/BDE_Page.js +44 -44
  72. package/dist/hooks/BDE_Result.d.ts +1 -1
  73. package/dist/hooks/BDE_Result.js +128 -128
  74. package/dist/hooks/BDE_Unit.d.ts +1 -1
  75. package/dist/hooks/BDE_Unit.js +17 -17
  76. package/dist/hooks/Config.d.ts +1 -1
  77. package/dist/hooks/Config.js +16 -16
  78. package/dist/hooks/Dashboard.d.ts +1 -1
  79. package/dist/hooks/Dashboard.js +33 -33
  80. package/dist/hooks/GTFS_Agency.d.ts +1 -1
  81. package/dist/hooks/GTFS_Agency.js +18 -18
  82. package/dist/hooks/GTFS_Bikes_Allowed.d.ts +1 -1
  83. package/dist/hooks/GTFS_Bikes_Allowed.js +18 -18
  84. package/dist/hooks/GTFS_Calendar.d.ts +1 -1
  85. package/dist/hooks/GTFS_Calendar.js +18 -18
  86. package/dist/hooks/GTFS_Direction.d.ts +1 -1
  87. package/dist/hooks/GTFS_Direction.js +18 -18
  88. package/dist/hooks/GTFS_Level.d.ts +1 -1
  89. package/dist/hooks/GTFS_Level.js +18 -18
  90. package/dist/hooks/GTFS_Location_Type.d.ts +1 -1
  91. package/dist/hooks/GTFS_Location_Type.js +18 -18
  92. package/dist/hooks/GTFS_Route.d.ts +1 -1
  93. package/dist/hooks/GTFS_Route.js +18 -18
  94. package/dist/hooks/GTFS_Route_Type.d.ts +1 -1
  95. package/dist/hooks/GTFS_Route_Type.js +18 -18
  96. package/dist/hooks/GTFS_Stop.d.ts +1 -1
  97. package/dist/hooks/GTFS_Stop.js +18 -18
  98. package/dist/hooks/GTFS_Stop_Times.d.ts +1 -1
  99. package/dist/hooks/GTFS_Stop_Times.js +18 -18
  100. package/dist/hooks/GTFS_Trip.d.ts +1 -1
  101. package/dist/hooks/GTFS_Trip.js +18 -18
  102. package/dist/hooks/GTFS_Wheelchair_Accessible.d.ts +1 -1
  103. package/dist/hooks/GTFS_Wheelchair_Accessible.js +18 -18
  104. package/dist/hooks/GTFS_Wheelchair_Boarding.d.ts +1 -1
  105. package/dist/hooks/GTFS_Wheelchair_Boarding.js +18 -18
  106. package/dist/hooks/Group.d.ts +1 -1
  107. package/dist/hooks/Group.js +56 -56
  108. package/dist/hooks/Knowledge_Article.d.ts +1 -1
  109. package/dist/hooks/Knowledge_Article.js +18 -18
  110. package/dist/hooks/Knowledge_Category.d.ts +1 -1
  111. package/dist/hooks/Knowledge_Category.js +18 -18
  112. package/dist/hooks/Knowledge_Document.d.ts +1 -1
  113. package/dist/hooks/Knowledge_Document.js +60 -60
  114. package/dist/hooks/Knowledge_DocumentPage.d.ts +1 -1
  115. package/dist/hooks/Knowledge_DocumentPage.js +22 -22
  116. package/dist/hooks/Knowledge_Video.d.ts +1 -1
  117. package/dist/hooks/Knowledge_Video.js +18 -18
  118. package/dist/hooks/Language.d.ts +1 -1
  119. package/dist/hooks/Language.js +18 -18
  120. package/dist/hooks/Log.d.ts +1 -1
  121. package/dist/hooks/Log.js +18 -18
  122. package/dist/hooks/MIAAS_MDSEndpoint.d.ts +1 -1
  123. package/dist/hooks/MIAAS_MDSEndpoint.js +18 -18
  124. package/dist/hooks/Maintenance_Article.d.ts +1 -1
  125. package/dist/hooks/Maintenance_Article.js +18 -18
  126. package/dist/hooks/Maintenance_Downtime.d.ts +1 -1
  127. package/dist/hooks/Maintenance_Downtime.js +18 -18
  128. package/dist/hooks/Maintenance_Duedate.d.ts +1 -1
  129. package/dist/hooks/Maintenance_Duedate.js +18 -18
  130. package/dist/hooks/Maintenance_Frequency.d.ts +1 -1
  131. package/dist/hooks/Maintenance_Frequency.js +18 -18
  132. package/dist/hooks/Maintenance_Issuecategory.d.ts +1 -1
  133. package/dist/hooks/Maintenance_Issuecategory.js +21 -21
  134. package/dist/hooks/Maintenance_Item.d.ts +1 -1
  135. package/dist/hooks/Maintenance_Item.js +18 -18
  136. package/dist/hooks/Maintenance_Kanban_State.d.ts +1 -1
  137. package/dist/hooks/Maintenance_Kanban_State.js +18 -18
  138. package/dist/hooks/Maintenance_Media.d.ts +1 -1
  139. package/dist/hooks/Maintenance_Media.js +18 -18
  140. package/dist/hooks/Maintenance_Message.d.ts +1 -1
  141. package/dist/hooks/Maintenance_Message.js +18 -18
  142. package/dist/hooks/Maintenance_Message_Body.d.ts +1 -1
  143. package/dist/hooks/Maintenance_Message_Body.js +18 -18
  144. package/dist/hooks/Maintenance_Order.d.ts +1 -1
  145. package/dist/hooks/Maintenance_Order.js +18 -18
  146. package/dist/hooks/Maintenance_Priority.d.ts +1 -1
  147. package/dist/hooks/Maintenance_Priority.js +18 -18
  148. package/dist/hooks/Maintenance_Restriction.d.ts +1 -1
  149. package/dist/hooks/Maintenance_Restriction.js +18 -18
  150. package/dist/hooks/Maintenance_Schedule.d.ts +1 -1
  151. package/dist/hooks/Maintenance_Schedule.js +18 -18
  152. package/dist/hooks/Maintenance_Schedule_Execution.d.ts +1 -1
  153. package/dist/hooks/Maintenance_Schedule_Execution.js +18 -18
  154. package/dist/hooks/Maintenance_Schedule_Execution_Step.d.ts +1 -1
  155. package/dist/hooks/Maintenance_Schedule_Execution_Step.js +18 -18
  156. package/dist/hooks/Maintenance_Schedule_Step.d.ts +1 -1
  157. package/dist/hooks/Maintenance_Schedule_Step.js +18 -18
  158. package/dist/hooks/Maintenance_SourceMeta.d.ts +1 -1
  159. package/dist/hooks/Maintenance_SourceMeta.js +18 -18
  160. package/dist/hooks/Maintenance_Ticket.d.ts +1 -1
  161. package/dist/hooks/Maintenance_Ticket.js +18 -18
  162. package/dist/hooks/Maintenance_Ticket_Issuecategory.d.ts +1 -1
  163. package/dist/hooks/Maintenance_Ticket_Issuecategory.js +18 -18
  164. package/dist/hooks/Maintenance_Ticket_Kanban_State.d.ts +1 -1
  165. package/dist/hooks/Maintenance_Ticket_Kanban_State.js +23 -23
  166. package/dist/hooks/Maintenance_Ticket_Source.d.ts +1 -1
  167. package/dist/hooks/Maintenance_Ticket_Source.js +18 -18
  168. package/dist/hooks/Monitoring_Slideshow.d.ts +1 -1
  169. package/dist/hooks/Monitoring_Slideshow.js +18 -18
  170. package/dist/hooks/NavigationGroup.d.ts +1 -1
  171. package/dist/hooks/NavigationGroup.js +15 -15
  172. package/dist/hooks/NavigationItem.d.ts +1 -1
  173. package/dist/hooks/NavigationItem.js +16 -16
  174. package/dist/hooks/Notification.d.ts +1 -1
  175. package/dist/hooks/Notification.js +73 -73
  176. package/dist/hooks/Permission.d.ts +1 -1
  177. package/dist/hooks/Permission.js +19 -19
  178. package/dist/hooks/Push.d.ts +1 -1
  179. package/dist/hooks/Push.js +30 -30
  180. package/dist/hooks/Report.d.ts +1 -1
  181. package/dist/hooks/Report.js +16 -16
  182. package/dist/hooks/Share.d.ts +1 -1
  183. package/dist/hooks/Share.js +16 -16
  184. package/dist/hooks/Source.d.ts +1 -1
  185. package/dist/hooks/Source.js +91 -91
  186. package/dist/hooks/Tenant.d.ts +1 -1
  187. package/dist/hooks/Tenant.js +75 -75
  188. package/dist/hooks/TenantTrustedDomain.d.ts +1 -1
  189. package/dist/hooks/TenantTrustedDomain.js +12 -12
  190. package/dist/hooks/UserData.d.ts +1 -1
  191. package/dist/hooks/UserData.js +16 -16
  192. package/dist/hooks/VirtualKPI.d.ts +1 -1
  193. package/dist/hooks/VirtualKPI.js +18 -18
  194. package/dist/hooks/Widget.d.ts +1 -1
  195. package/dist/hooks/Widget.js +16 -16
  196. package/dist/hooks/WidgetPreset.d.ts +1 -1
  197. package/dist/hooks/WidgetPreset.js +18 -18
  198. package/dist/hooks/_User.d.ts +1 -1
  199. package/dist/hooks/_User.js +108 -99
  200. package/dist/hooks/_beforeLogin.d.ts +1 -1
  201. package/dist/hooks/_beforeLogin.js +22 -22
  202. package/dist/hooks/_init.d.ts +1 -1
  203. package/dist/hooks/_init.js +23 -23
  204. package/dist/index.d.ts +72 -65
  205. package/dist/index.js +463 -432
  206. package/dist/ow.d.ts +20 -20
  207. package/dist/ow.js +91 -91
  208. package/dist/types/Alarm.d.ts +36 -36
  209. package/dist/types/Alarm.js +59 -59
  210. package/dist/types/AlarmAction.d.ts +42 -42
  211. package/dist/types/AlarmAction.js +71 -71
  212. package/dist/types/AlarmWebhook.d.ts +40 -40
  213. package/dist/types/AlarmWebhook.js +65 -65
  214. package/dist/types/Attachment.d.ts +21 -21
  215. package/dist/types/Attachment.js +29 -29
  216. package/dist/types/BDE_Form.d.ts +26 -26
  217. package/dist/types/BDE_Form.js +41 -41
  218. package/dist/types/BDE_List.d.ts +14 -14
  219. package/dist/types/BDE_List.js +17 -17
  220. package/dist/types/BDE_ListEntry.d.ts +21 -21
  221. package/dist/types/BDE_ListEntry.js +29 -29
  222. package/dist/types/BDE_Page.d.ts +17 -17
  223. package/dist/types/BDE_Page.js +23 -23
  224. package/dist/types/BDE_Result.d.ts +20 -20
  225. package/dist/types/BDE_Result.js +29 -29
  226. package/dist/types/BDE_Unit.d.ts +23 -23
  227. package/dist/types/BDE_Unit.js +32 -32
  228. package/dist/types/Config.d.ts +24 -24
  229. package/dist/types/Config.js +35 -35
  230. package/dist/types/Dashboard.d.ts +34 -34
  231. package/dist/types/Dashboard.js +53 -53
  232. package/dist/types/GTFS_Agency.d.ts +35 -35
  233. package/dist/types/GTFS_Agency.js +59 -59
  234. package/dist/types/GTFS_Bikes_Allowed.d.ts +17 -17
  235. package/dist/types/GTFS_Bikes_Allowed.js +23 -23
  236. package/dist/types/GTFS_Calendar.d.ts +38 -38
  237. package/dist/types/GTFS_Calendar.js +65 -65
  238. package/dist/types/GTFS_Direction.d.ts +17 -17
  239. package/dist/types/GTFS_Direction.js +23 -23
  240. package/dist/types/GTFS_Level.d.ts +17 -17
  241. package/dist/types/GTFS_Level.js +23 -23
  242. package/dist/types/GTFS_Location_Type.d.ts +20 -20
  243. package/dist/types/GTFS_Location_Type.js +29 -29
  244. package/dist/types/GTFS_Route.d.ts +42 -42
  245. package/dist/types/GTFS_Route.js +71 -71
  246. package/dist/types/GTFS_Route_Type.d.ts +20 -20
  247. package/dist/types/GTFS_Route_Type.js +29 -29
  248. package/dist/types/GTFS_Stop.d.ts +56 -56
  249. package/dist/types/GTFS_Stop.js +95 -95
  250. package/dist/types/GTFS_Stop_Times.d.ts +28 -28
  251. package/dist/types/GTFS_Stop_Times.js +41 -41
  252. package/dist/types/GTFS_Trip.d.ts +37 -37
  253. package/dist/types/GTFS_Trip.js +53 -53
  254. package/dist/types/GTFS_Wheelchair_Accessible.d.ts +17 -17
  255. package/dist/types/GTFS_Wheelchair_Accessible.js +23 -23
  256. package/dist/types/GTFS_Wheelchair_Boarding.d.ts +20 -20
  257. package/dist/types/GTFS_Wheelchair_Boarding.js +29 -29
  258. package/dist/types/Group.d.ts +32 -32
  259. package/dist/types/Group.js +47 -47
  260. package/dist/types/Knowledge_Article.d.ts +29 -29
  261. package/dist/types/Knowledge_Article.js +41 -41
  262. package/dist/types/Knowledge_Category.d.ts +25 -25
  263. package/dist/types/Knowledge_Category.js +35 -35
  264. package/dist/types/Knowledge_Document.d.ts +29 -29
  265. package/dist/types/Knowledge_Document.js +41 -41
  266. package/dist/types/Knowledge_DocumentPage.d.ts +31 -31
  267. package/dist/types/Knowledge_DocumentPage.js +47 -47
  268. package/dist/types/Knowledge_Video.d.ts +35 -35
  269. package/dist/types/Knowledge_Video.js +53 -53
  270. package/dist/types/Language.d.ts +14 -14
  271. package/dist/types/Language.js +17 -17
  272. package/dist/types/Log.d.ts +17 -17
  273. package/dist/types/Log.js +23 -23
  274. package/dist/types/MIAAS_MDSEndpoint.d.ts +26 -26
  275. package/dist/types/MIAAS_MDSEndpoint.js +41 -41
  276. package/dist/types/Maintenance_Article.d.ts +32 -32
  277. package/dist/types/Maintenance_Article.js +44 -44
  278. package/dist/types/Maintenance_Downtime.d.ts +26 -26
  279. package/dist/types/Maintenance_Downtime.js +35 -35
  280. package/dist/types/Maintenance_Duedate.d.ts +35 -35
  281. package/dist/types/Maintenance_Duedate.js +53 -53
  282. package/dist/types/Maintenance_Frequency.d.ts +26 -26
  283. package/dist/types/Maintenance_Frequency.js +35 -35
  284. package/dist/types/Maintenance_Issuecategory.d.ts +33 -33
  285. package/dist/types/Maintenance_Issuecategory.js +50 -50
  286. package/dist/types/Maintenance_Item.d.ts +21 -21
  287. package/dist/types/Maintenance_Item.js +29 -29
  288. package/dist/types/Maintenance_Kanban_State.d.ts +33 -33
  289. package/dist/types/Maintenance_Kanban_State.js +53 -53
  290. package/dist/types/Maintenance_Media.d.ts +21 -21
  291. package/dist/types/Maintenance_Media.js +29 -29
  292. package/dist/types/Maintenance_Message.d.ts +27 -27
  293. package/dist/types/Maintenance_Message.js +41 -41
  294. package/dist/types/Maintenance_Message_Body.d.ts +22 -22
  295. package/dist/types/Maintenance_Message_Body.js +29 -29
  296. package/dist/types/Maintenance_Order.d.ts +24 -24
  297. package/dist/types/Maintenance_Order.js +32 -32
  298. package/dist/types/Maintenance_Priority.d.ts +26 -26
  299. package/dist/types/Maintenance_Priority.js +35 -35
  300. package/dist/types/Maintenance_Restriction.d.ts +26 -26
  301. package/dist/types/Maintenance_Restriction.js +35 -35
  302. package/dist/types/Maintenance_Schedule.d.ts +37 -37
  303. package/dist/types/Maintenance_Schedule.js +56 -56
  304. package/dist/types/Maintenance_Schedule_Execution.d.ts +39 -39
  305. package/dist/types/Maintenance_Schedule_Execution.js +56 -56
  306. package/dist/types/Maintenance_Schedule_Execution_Step.d.ts +44 -44
  307. package/dist/types/Maintenance_Schedule_Execution_Step.js +71 -71
  308. package/dist/types/Maintenance_Schedule_Step.d.ts +38 -38
  309. package/dist/types/Maintenance_Schedule_Step.js +59 -59
  310. package/dist/types/Maintenance_SourceMeta.d.ts +23 -23
  311. package/dist/types/Maintenance_SourceMeta.js +29 -29
  312. package/dist/types/Maintenance_Ticket.d.ts +30 -30
  313. package/dist/types/Maintenance_Ticket.js +41 -41
  314. package/dist/types/Maintenance_Ticket_Issuecategory.d.ts +27 -27
  315. package/dist/types/Maintenance_Ticket_Issuecategory.js +35 -35
  316. package/dist/types/Maintenance_Ticket_Kanban_State.d.ts +27 -27
  317. package/dist/types/Maintenance_Ticket_Kanban_State.js +35 -35
  318. package/dist/types/Maintenance_Ticket_Source.d.ts +27 -27
  319. package/dist/types/Maintenance_Ticket_Source.js +35 -35
  320. package/dist/types/Monitoring_Slideshow.d.ts +20 -20
  321. package/dist/types/Monitoring_Slideshow.js +26 -26
  322. package/dist/types/NavigationGroup.d.ts +24 -24
  323. package/dist/types/NavigationGroup.js +35 -35
  324. package/dist/types/NavigationItem.d.ts +48 -48
  325. package/dist/types/NavigationItem.js +83 -83
  326. package/dist/types/Notification.d.ts +30 -30
  327. package/dist/types/Notification.js +47 -47
  328. package/dist/types/Permission.d.ts +18 -18
  329. package/dist/types/Permission.js +23 -23
  330. package/dist/types/Push.d.ts +27 -27
  331. package/dist/types/Push.js +41 -41
  332. package/dist/types/Report.d.ts +39 -39
  333. package/dist/types/Report.js +65 -65
  334. package/dist/types/Share.d.ts +34 -34
  335. package/dist/types/Share.js +53 -53
  336. package/dist/types/Source.d.ts +26 -26
  337. package/dist/types/Source.js +38 -38
  338. package/dist/types/Tenant.d.ts +45 -45
  339. package/dist/types/Tenant.js +77 -77
  340. package/dist/types/TenantTrustedDomain.d.ts +18 -18
  341. package/dist/types/TenantTrustedDomain.js +23 -23
  342. package/dist/types/UserData.d.ts +21 -21
  343. package/dist/types/UserData.js +29 -29
  344. package/dist/types/VirtualKPI.d.ts +21 -21
  345. package/dist/types/VirtualKPI.js +29 -29
  346. package/dist/types/Widget.d.ts +24 -24
  347. package/dist/types/Widget.js +35 -35
  348. package/dist/types/WidgetPreset.d.ts +40 -40
  349. package/dist/types/WidgetPreset.js +65 -65
  350. package/dist/types/_Role.d.ts +13 -13
  351. package/dist/types/_Role.js +2 -2
  352. package/dist/types/_Session.d.ts +15 -15
  353. package/dist/types/_Session.js +2 -2
  354. package/dist/types/_User.d.ts +28 -28
  355. package/dist/types/_User.js +2 -2
  356. package/dist/types/index.d.ts +148 -148
  357. package/dist/types/index.js +146 -146
  358. package/package.json +3 -1
package/dist/index.js CHANGED
@@ -1,432 +1,463 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.initAutoload = exports.autoloadCloudCode = exports.afterDeleteHook = exports.beforeDeleteHook = exports.afterSaveHook = exports.beforeSaveHook = exports.defaultAclHandler = exports.defaultHandler = exports.immutableField = exports.ensureUserRole = exports.ensureRole = exports.getConfigBoolean = exports.getConfig = exports.requirePermission = exports.hasPermission = exports.sendSimpleEmail = exports.init = exports.PREFIX = exports.Config = void 0;
7
- const path_1 = require("path");
8
- const web_push_1 = __importDefault(require("web-push"));
9
- const parse_server_schema_1 = require("@openinc/parse-server-schema");
10
- const fast_equals_1 = require("fast-equals");
11
- const fs_1 = __importDefault(require("fs"));
12
- const nodemailer_1 = __importDefault(require("nodemailer"));
13
- const path_2 = require("path");
14
- const config_1 = require("./config");
15
- const featuremap_json_1 = __importDefault(require("./featuremap.json"));
16
- const _init_1 = require("./functions/_init");
17
- const _init_2 = require("./hooks/_init");
18
- const types_1 = require("./types");
19
- var Config_1 = require("./helper/Config");
20
- Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return Config_1.Config; } });
21
- exports.PREFIX = "OD3_";
22
- let schema = {};
23
- let transport = undefined;
24
- async function init() {
25
- try {
26
- const pkg = require("../package.json");
27
- console.log(`[${pkg.name}] init (v${pkg.version})`);
28
- }
29
- catch (error) { }
30
- await config_1.config.init(true);
31
- await initEmailTransport();
32
- await initWebPush();
33
- await initSchema();
34
- await initDefaultRoles();
35
- await initDefaultData();
36
- await (0, _init_2.init)();
37
- await (0, _init_1.init)();
38
- await initAutoload();
39
- }
40
- exports.init = init;
41
- async function initEmailTransport() {
42
- try {
43
- if (config_1.config.getBoolean("SMTP_ENABLED")) {
44
- transport = nodemailer_1.default.createTransport({
45
- host: config_1.config.get("SMTP_HOST"),
46
- port: config_1.config.getNumber("SMTP_PORT"),
47
- secure: config_1.config.getBoolean("SMTP_SECURE"),
48
- ignoreTLS: config_1.config.getBoolean("SMTP_IGNORE_TLS"),
49
- auth: {
50
- user: config_1.config.get("SMTP_USER"),
51
- pass: config_1.config.get("SMTP_PASS"),
52
- },
53
- });
54
- await transport.verify();
55
- }
56
- }
57
- catch (error) {
58
- console.error(`Parse SMTP Adapter: Error when trying to establish the SMTP connection:`);
59
- console.error(error);
60
- process.exit(1);
61
- }
62
- }
63
- async function initWebPush() {
64
- try {
65
- if (config_1.config.getBoolean("WEB_PUSH_ENABLED")) {
66
- web_push_1.default.setVapidDetails(config_1.config.get("WEB_PUSH_HOST"), config_1.config.get("WEB_PUSH_VAPID_PUBLIC_KEY"), config_1.config.get("WEB_PUSH_VAPID_PRIVATE_KEY"));
67
- web_push_1.default.setGCMAPIKey(config_1.config.get("WEB_PUSH_FCM_KEY"));
68
- }
69
- }
70
- catch (error) {
71
- console.error(error);
72
- process.exit(1);
73
- }
74
- }
75
- async function initSchema() {
76
- const schemaConfig = await (0, parse_server_schema_1.loadConfig)();
77
- try {
78
- await (0, parse_server_schema_1.up)(schemaConfig, (0, path_1.resolve)(__dirname, "../schema"), {
79
- prefix: exports.PREFIX,
80
- deleteClasses: config_1.config.getBoolean("FORCE_SCHEMA"),
81
- deleteFields: config_1.config.getBoolean("FORCE_SCHEMA"),
82
- filter: (className) => isClassEnabled(className),
83
- });
84
- schema = Object.fromEntries((await Parse.Schema.all()).map((schema) => [
85
- schema.className,
86
- schema,
87
- ]));
88
- }
89
- catch (error) {
90
- console.error("Error while updating schema");
91
- console.error(error);
92
- process.exit(1);
93
- }
94
- }
95
- async function initDefaultRoles() {
96
- try {
97
- await ensureRole("od-user");
98
- await ensureRole("od-admin");
99
- await ensureRole("od-tenant-user");
100
- await ensureRole("od-tenant-verified");
101
- await ensureRole("od-tenant-admin");
102
- }
103
- catch (error) {
104
- console.error(error);
105
- }
106
- }
107
- async function initDefaultData() {
108
- try {
109
- // TODO
110
- }
111
- catch (error) {
112
- console.error(error);
113
- }
114
- }
115
- async function sendSimpleEmail(to, subject, text) {
116
- if (!transport) {
117
- return void console.error("E-Mails are not enabled.");
118
- }
119
- transport.sendMail({
120
- from: config_1.config.get("SMTP_FROM"),
121
- to,
122
- subject,
123
- text,
124
- });
125
- }
126
- exports.sendSimpleEmail = sendSimpleEmail;
127
- async function hasPermission(sessionToken, key) {
128
- const result = await new Parse.Query(types_1.Permission)
129
- .equalTo("key", key)
130
- .first({ sessionToken });
131
- return !!result;
132
- }
133
- exports.hasPermission = hasPermission;
134
- async function requirePermission(request, key, message) {
135
- if (request.master) {
136
- return;
137
- }
138
- if (!key) {
139
- throw new Parse.Error(119, "Missing Permission (1): " + (message || key || "Master Key Only"));
140
- }
141
- if (!request.sessionToken) {
142
- throw new Parse.Error(119, "Missing Permission (2): " + (message || key || "Master Key Only"));
143
- }
144
- const p = await hasPermission(request.sessionToken, key);
145
- if (!p) {
146
- throw new Parse.Error(119, "Missing Permission (3): " + (message || key || "Master Key Only"));
147
- }
148
- }
149
- exports.requirePermission = requirePermission;
150
- async function getConfig(key) {
151
- const result = await new Parse.Query(types_1.Config).equalTo("key", key).first({
152
- useMasterKey: true,
153
- });
154
- const value = result?.get("value");
155
- console.log("[@openinc/parse-server-opendash][Config]", key, value);
156
- return value || "";
157
- }
158
- exports.getConfig = getConfig;
159
- async function getConfigBoolean(key) {
160
- const value = await getConfig(key);
161
- if (!value || value.toLowerCase() === "false" || value === "0") {
162
- return false;
163
- }
164
- return true;
165
- }
166
- exports.getConfigBoolean = getConfigBoolean;
167
- async function ensureRole(name, options) {
168
- const label = options?.label || undefined;
169
- const acl = options?.acl || new Parse.ACL();
170
- const childRoles = options?.childRoles || undefined;
171
- console.log(`[@openinc/parse-server-opendash] ensureRole(${name})`
172
- // JSON.stringify({ label, acl, childRoles }, null, 2)
173
- );
174
- let role = await new Parse.Query(Parse.Role)
175
- .equalTo("name", name)
176
- .first({ useMasterKey: true });
177
- if (!role) {
178
- role = new Parse.Role(name, acl);
179
- role.set("label", label);
180
- await role.save(null, {
181
- useMasterKey: true,
182
- });
183
- }
184
- let changed = false;
185
- if (role.get("label") !== label) {
186
- role.set("label", label);
187
- changed = true;
188
- }
189
- if (!(0, fast_equals_1.deepEqual)(acl.toJSON(), role.getACL()?.toJSON())) {
190
- role.setACL(acl);
191
- changed = true;
192
- }
193
- if (Array.isArray(childRoles) && childRoles.length > 0) {
194
- const relation = role.getRoles();
195
- const currentChildRoles = await relation
196
- .query()
197
- .find({ useMasterKey: true });
198
- const currentChildRoleNames = currentChildRoles.map((role) => role.get("name"));
199
- for (const childRoleName of childRoles) {
200
- if (currentChildRoleNames.includes(childRoleName)) {
201
- continue;
202
- }
203
- const childRole = await new Parse.Query(Parse.Role)
204
- .equalTo("name", childRoleName)
205
- .find({ useMasterKey: true });
206
- relation.add(childRole);
207
- changed = true;
208
- }
209
- }
210
- if (changed) {
211
- await role.save(null, { useMasterKey: true });
212
- }
213
- }
214
- exports.ensureRole = ensureRole;
215
- async function ensureUserRole(user, roleName, add = false) {
216
- const role = await new Parse.Query(Parse.Role)
217
- .equalTo("name", roleName)
218
- .first({ useMasterKey: true });
219
- if (role) {
220
- const relation = role.relation("users");
221
- if (add) {
222
- relation.add(user);
223
- }
224
- else {
225
- relation.remove(user);
226
- }
227
- await role.save(null, { useMasterKey: true });
228
- console.log("userRole", user.get("username"), roleName, add);
229
- }
230
- }
231
- exports.ensureUserRole = ensureUserRole;
232
- async function immutableField(request, fieldName, permissionName = "parse:edit-immutable-fields") {
233
- if (!request.original || request.master) {
234
- return;
235
- }
236
- const previousValue = JSON.stringify(request.original.get(fieldName));
237
- const nextValue = JSON.stringify(request.object.get(fieldName));
238
- if ((0, fast_equals_1.deepEqual)(previousValue, nextValue)) {
239
- return;
240
- }
241
- await requirePermission(request, permissionName, `You are not allowed to edit the '${fieldName}' field.`);
242
- }
243
- exports.immutableField = immutableField;
244
- async function defaultHandler(request) {
245
- const className = request.object.className;
246
- if (request.master) {
247
- console.log(`[@openinc/parse-server-opendash] Skipping default beforeSave() handler of ${className} for masterkey`);
248
- return;
249
- }
250
- if (!request.user) {
251
- throw new Error();
252
- }
253
- const currentSchema = schema[className];
254
- if (!currentSchema) {
255
- console.warn(`[@openinc/parse-server-opendash] Skipping default beforeSave() handler, no schema found for ${className}`);
256
- return;
257
- }
258
- const userField = !!currentSchema?.fields?.user;
259
- const tenantField = !!currentSchema?.fields?.tenant;
260
- if (userField) {
261
- await immutableField(request, "user");
262
- }
263
- if (tenantField) {
264
- await immutableField(request, "tenant");
265
- }
266
- if (!request.original) {
267
- if (userField) {
268
- request.object.set("user", request.user);
269
- }
270
- if (tenantField) {
271
- const user = (await request.user?.fetch({
272
- useMasterKey: true,
273
- }));
274
- request.object.set("tenant", user.get("tenant"));
275
- }
276
- }
277
- }
278
- exports.defaultHandler = defaultHandler;
279
- async function defaultAclHandler(request, options) {
280
- const className = request.object.className;
281
- const currentSchema = schema[className];
282
- if (!currentSchema) {
283
- console.warn(`[@openinc/parse-server-opendash] Skipping default beforeSave() ACL handler, no schema found for ${className}`);
284
- return;
285
- }
286
- const userField = !!currentSchema?.fields?.user;
287
- const tenantField = !!currentSchema?.fields?.tenant;
288
- if (!options?.allowCustomACL || !request.object.getACL()) {
289
- request.object.setACL(new Parse.ACL());
290
- }
291
- const acl = request.object.getACL();
292
- acl.setRoleReadAccess("od-admin", true);
293
- acl.setRoleWriteAccess("od-admin", true);
294
- if (userField) {
295
- const user = request.object.get("user");
296
- if (user) {
297
- acl.setReadAccess(user.id, true);
298
- acl.setWriteAccess(user.id, true);
299
- }
300
- }
301
- if (tenantField) {
302
- const tenant = request.object.get("tenant");
303
- if (tenant) {
304
- if (!options?.denyTenantUserRead) {
305
- acl.setRoleReadAccess(`od-tenant-user-${tenant.id}`, true);
306
- }
307
- if (options?.allowTenantUserWrite) {
308
- acl.setRoleWriteAccess(`od-tenant-user-${tenant.id}`, true);
309
- }
310
- acl.setRoleReadAccess(`od-tenant-admin-${tenant.id}`, true);
311
- acl.setRoleWriteAccess(`od-tenant-admin-${tenant.id}`, true);
312
- }
313
- }
314
- }
315
- exports.defaultAclHandler = defaultAclHandler;
316
- const beforeSaveHooks = {};
317
- function beforeSaveHook(target, callback) {
318
- // @ts-ignore
319
- const className = typeof target === "string" ? target : target.className;
320
- if (!beforeSaveHooks[className]) {
321
- beforeSaveHooks[className] = [];
322
- Parse.Cloud.beforeSave(className, async function beforeSaveHookFunction(request) {
323
- const sessionToken = request.user?.getSessionToken();
324
- const newRequest = { ...request, sessionToken };
325
- for (const fn of beforeSaveHooks[className]) {
326
- await fn(newRequest);
327
- }
328
- });
329
- }
330
- beforeSaveHooks[className].push(callback);
331
- }
332
- exports.beforeSaveHook = beforeSaveHook;
333
- const afterSaveHooks = {};
334
- function afterSaveHook(target, callback) {
335
- // @ts-ignore
336
- const className = typeof target === "string" ? target : target.className;
337
- if (!afterSaveHooks[className]) {
338
- afterSaveHooks[className] = [];
339
- Parse.Cloud.afterSave(className, async function afterSaveHookFunction(request) {
340
- const sessionToken = request.user?.getSessionToken();
341
- const newRequest = { ...request, sessionToken };
342
- for (const fn of afterSaveHooks[className]) {
343
- await fn(newRequest);
344
- }
345
- });
346
- }
347
- afterSaveHooks[className].push(callback);
348
- }
349
- exports.afterSaveHook = afterSaveHook;
350
- const beforeDeleteHooks = {};
351
- function beforeDeleteHook(target, callback) {
352
- // @ts-ignore
353
- const className = typeof target === "string" ? target : target.className;
354
- if (!beforeDeleteHooks[className]) {
355
- beforeDeleteHooks[className] = [];
356
- Parse.Cloud.beforeDelete(className, async function beforeDeleteHookFunction(request) {
357
- const sessionToken = request.user?.getSessionToken();
358
- const newRequest = { ...request, sessionToken };
359
- for (const fn of beforeDeleteHooks[className]) {
360
- await fn(newRequest);
361
- }
362
- });
363
- }
364
- beforeDeleteHooks[className].push(callback);
365
- }
366
- exports.beforeDeleteHook = beforeDeleteHook;
367
- const afterDeleteHooks = {};
368
- function afterDeleteHook(target, callback) {
369
- // @ts-ignore
370
- const className = typeof target === "string" ? target : target.className;
371
- if (!afterDeleteHooks[className]) {
372
- afterDeleteHooks[className] = [];
373
- Parse.Cloud.afterDelete(className, async function afterDeleteHookFunction(request) {
374
- const sessionToken = request.user?.getSessionToken();
375
- const newRequest = { ...request, sessionToken };
376
- for (const fn of afterDeleteHooks[className]) {
377
- await fn(newRequest);
378
- }
379
- });
380
- }
381
- afterDeleteHooks[className].push(callback);
382
- }
383
- exports.afterDeleteHook = afterDeleteHook;
384
- async function autoloadCloudCode(path, regex = /^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$/) {
385
- const fns = fs_1.default
386
- .readdirSync(path)
387
- .filter((filename) => filename.endsWith(".js"))
388
- .map((filename) => filename.replace(".js", ""))
389
- .filter((name) => regex.test(name));
390
- for (const name of fns) {
391
- const { init } = require((0, path_2.join)(path, name));
392
- await init(name).catch((e) => console.error(e));
393
- }
394
- }
395
- exports.autoloadCloudCode = autoloadCloudCode;
396
- async function initAutoload() {
397
- const path = config_1.config.get("AUTOLOAD_DIR");
398
- if (path) {
399
- await autoloadCloudCode((0, path_1.resolve)(process.cwd(), path));
400
- }
401
- }
402
- exports.initAutoload = initAutoload;
403
- function getFeatureForClassName(className) {
404
- const map = featuremap_json_1.default;
405
- return map[className] || "unknown";
406
- }
407
- function isFeatureEnabled(feature) {
408
- switch (feature) {
409
- case "CORE":
410
- return config_1.config.getBoolean("FEATURE_CORE");
411
- case "MONITORING":
412
- return config_1.config.getBoolean("FEATURE_MONITORING");
413
- case "BDE":
414
- return config_1.config.getBoolean("FEATURE_BDE");
415
- case "GTFS":
416
- return config_1.config.getBoolean("FEATURE_GTFS");
417
- case "KNOWLEDGE":
418
- return config_1.config.getBoolean("FEATURE_KNOWLEDGE");
419
- case "MAINTENANCE":
420
- return config_1.config.getBoolean("FEATURE_MAINTENANCE");
421
- case "MIAAS":
422
- return config_1.config.getBoolean("FEATURE_MIAAS");
423
- default:
424
- return false;
425
- }
426
- }
427
- function isClassEnabled(className) {
428
- // if (!config.getBoolean("FEATURES_ENABLED")) return true;
429
- const feature = getFeatureForClassName(className);
430
- const enabled = isFeatureEnabled(feature);
431
- return enabled;
432
- }
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initAutoload = exports.autoloadCloudCode = exports.afterDeleteHook = exports.beforeDeleteHook = exports.afterSaveHook = exports.beforeSaveHook = exports.defaultAclHandler = exports.defaultHandler = exports.immutableField = exports.ensureUserRole = exports.ensureRole = exports.getConfigBoolean = exports.getConfig = exports.requirePermission = exports.hasPermission = exports.sendTemplateEmail = exports.sendSimpleEmail = exports.init = exports.PREFIX = exports.Config = void 0;
7
+ const parse_server_schema_1 = require("@openinc/parse-server-schema");
8
+ const fast_equals_1 = require("fast-equals");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const nodemailer_1 = __importDefault(require("nodemailer"));
11
+ const nunjucks_1 = __importDefault(require("nunjucks"));
12
+ const path_1 = require("path");
13
+ const web_push_1 = __importDefault(require("web-push"));
14
+ const config_1 = require("./config");
15
+ const featuremap_json_1 = __importDefault(require("./featuremap.json"));
16
+ const _init_1 = require("./functions/_init");
17
+ const _init_2 = require("./hooks/_init");
18
+ const types_1 = require("./types");
19
+ var Config_1 = require("./helper/Config");
20
+ Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return Config_1.Config; } });
21
+ exports.PREFIX = "OD3_";
22
+ let schema = {};
23
+ let transport = undefined;
24
+ const emailTemplateDir = (0, path_1.resolve)(process.cwd(), "views/emails");
25
+ async function init() {
26
+ try {
27
+ const pkg = require("../package.json");
28
+ console.log(`[${pkg.name}] init (v${pkg.version})`);
29
+ }
30
+ catch (error) { }
31
+ await config_1.config.init(true);
32
+ await initEmailTransport();
33
+ await initWebPush();
34
+ await initSchema();
35
+ await initDefaultRoles();
36
+ await initDefaultData();
37
+ await (0, _init_2.init)();
38
+ await (0, _init_1.init)();
39
+ await initAutoload();
40
+ }
41
+ exports.init = init;
42
+ async function initEmailTransport() {
43
+ try {
44
+ if (config_1.config.getBoolean("SMTP_ENABLED")) {
45
+ transport = nodemailer_1.default.createTransport({
46
+ host: config_1.config.get("SMTP_HOST"),
47
+ port: config_1.config.getNumber("SMTP_PORT"),
48
+ secure: config_1.config.getBoolean("SMTP_SECURE"),
49
+ ignoreTLS: config_1.config.getBoolean("SMTP_IGNORE_TLS"),
50
+ auth: {
51
+ user: config_1.config.get("SMTP_USER"),
52
+ pass: config_1.config.get("SMTP_PASS"),
53
+ },
54
+ });
55
+ await transport.verify();
56
+ nunjucks_1.default.configure(emailTemplateDir, { autoescape: true });
57
+ }
58
+ }
59
+ catch (error) {
60
+ console.error(`Parse SMTP Adapter: Error when trying to establish the SMTP connection:`);
61
+ console.error(error);
62
+ process.exit(1);
63
+ }
64
+ }
65
+ async function initWebPush() {
66
+ try {
67
+ if (config_1.config.getBoolean("WEB_PUSH_ENABLED")) {
68
+ web_push_1.default.setVapidDetails(config_1.config.get("WEB_PUSH_HOST"), config_1.config.get("WEB_PUSH_VAPID_PUBLIC_KEY"), config_1.config.get("WEB_PUSH_VAPID_PRIVATE_KEY"));
69
+ web_push_1.default.setGCMAPIKey(config_1.config.get("WEB_PUSH_FCM_KEY"));
70
+ }
71
+ }
72
+ catch (error) {
73
+ console.error(error);
74
+ process.exit(1);
75
+ }
76
+ }
77
+ async function initSchema() {
78
+ const schemaConfig = await (0, parse_server_schema_1.loadConfig)();
79
+ try {
80
+ await (0, parse_server_schema_1.up)(schemaConfig, (0, path_1.resolve)(__dirname, "../schema"), {
81
+ prefix: exports.PREFIX,
82
+ deleteClasses: config_1.config.getBoolean("FORCE_SCHEMA"),
83
+ deleteFields: config_1.config.getBoolean("FORCE_SCHEMA"),
84
+ filter: (className) => isClassEnabled(className),
85
+ });
86
+ schema = Object.fromEntries((await Parse.Schema.all()).map((schema) => [
87
+ schema.className,
88
+ schema,
89
+ ]));
90
+ }
91
+ catch (error) {
92
+ console.error("Error while updating schema");
93
+ console.error(error);
94
+ process.exit(1);
95
+ }
96
+ }
97
+ async function initDefaultRoles() {
98
+ try {
99
+ await ensureRole("od-user");
100
+ await ensureRole("od-admin");
101
+ await ensureRole("od-tenant-user");
102
+ await ensureRole("od-tenant-verified");
103
+ await ensureRole("od-tenant-admin");
104
+ }
105
+ catch (error) {
106
+ console.error(error);
107
+ }
108
+ }
109
+ async function initDefaultData() {
110
+ try {
111
+ // TODO
112
+ }
113
+ catch (error) {
114
+ console.error(error);
115
+ }
116
+ }
117
+ async function sendSimpleEmail(to, subject, text) {
118
+ if (!transport) {
119
+ return void console.error("E-Mails are not enabled.");
120
+ }
121
+ transport.sendMail({
122
+ from: config_1.config.get("SMTP_FROM"),
123
+ to,
124
+ subject,
125
+ text,
126
+ });
127
+ }
128
+ exports.sendSimpleEmail = sendSimpleEmail;
129
+ async function sendTemplateEmail({ to, subject, fallback, template, data, }) {
130
+ if (!transport) {
131
+ return void console.error("E-Mails are not enabled.");
132
+ }
133
+ transport.sendMail({
134
+ from: config_1.config.get("SMTP_FROM"),
135
+ to,
136
+ subject,
137
+ text: renderEmailTemplate("txt", template, data, fallback),
138
+ html: renderEmailTemplate("html", template, data, undefined),
139
+ });
140
+ }
141
+ exports.sendTemplateEmail = sendTemplateEmail;
142
+ async function hasPermission(sessionToken, key) {
143
+ const result = await new Parse.Query(types_1.Permission)
144
+ .equalTo("key", key)
145
+ .first({ sessionToken });
146
+ return !!result;
147
+ }
148
+ exports.hasPermission = hasPermission;
149
+ async function requirePermission(request, key, message) {
150
+ if (request.master) {
151
+ return;
152
+ }
153
+ if (!key) {
154
+ throw new Parse.Error(119, "Missing Permission (1): " + (message || key || "Master Key Only"));
155
+ }
156
+ if (!request.sessionToken) {
157
+ throw new Parse.Error(119, "Missing Permission (2): " + (message || key || "Master Key Only"));
158
+ }
159
+ const p = await hasPermission(request.sessionToken, key);
160
+ if (!p) {
161
+ throw new Parse.Error(119, "Missing Permission (3): " + (message || key || "Master Key Only"));
162
+ }
163
+ }
164
+ exports.requirePermission = requirePermission;
165
+ async function getConfig(key) {
166
+ const result = await new Parse.Query(types_1.Config).equalTo("key", key).first({
167
+ useMasterKey: true,
168
+ });
169
+ const value = result?.get("value");
170
+ console.log("[@openinc/parse-server-opendash][Config]", key, value);
171
+ return value || "";
172
+ }
173
+ exports.getConfig = getConfig;
174
+ async function getConfigBoolean(key) {
175
+ const value = await getConfig(key);
176
+ if (!value || value.toLowerCase() === "false" || value === "0") {
177
+ return false;
178
+ }
179
+ return true;
180
+ }
181
+ exports.getConfigBoolean = getConfigBoolean;
182
+ async function ensureRole(name, options) {
183
+ const label = options?.label || undefined;
184
+ const acl = options?.acl || new Parse.ACL();
185
+ const childRoles = options?.childRoles || undefined;
186
+ console.log(`[@openinc/parse-server-opendash] ensureRole(${name})`
187
+ // JSON.stringify({ label, acl, childRoles }, null, 2)
188
+ );
189
+ let role = await new Parse.Query(Parse.Role)
190
+ .equalTo("name", name)
191
+ .first({ useMasterKey: true });
192
+ if (!role) {
193
+ role = new Parse.Role(name, acl);
194
+ role.set("label", label);
195
+ await role.save(null, {
196
+ useMasterKey: true,
197
+ });
198
+ }
199
+ let changed = false;
200
+ if (role.get("label") !== label) {
201
+ role.set("label", label);
202
+ changed = true;
203
+ }
204
+ if (!(0, fast_equals_1.deepEqual)(acl.toJSON(), role.getACL()?.toJSON())) {
205
+ role.setACL(acl);
206
+ changed = true;
207
+ }
208
+ if (Array.isArray(childRoles) && childRoles.length > 0) {
209
+ const relation = role.getRoles();
210
+ const currentChildRoles = await relation
211
+ .query()
212
+ .find({ useMasterKey: true });
213
+ const currentChildRoleNames = currentChildRoles.map((role) => role.get("name"));
214
+ for (const childRoleName of childRoles) {
215
+ if (currentChildRoleNames.includes(childRoleName)) {
216
+ continue;
217
+ }
218
+ const childRole = await new Parse.Query(Parse.Role)
219
+ .equalTo("name", childRoleName)
220
+ .find({ useMasterKey: true });
221
+ relation.add(childRole);
222
+ changed = true;
223
+ }
224
+ }
225
+ if (changed) {
226
+ await role.save(null, { useMasterKey: true });
227
+ }
228
+ }
229
+ exports.ensureRole = ensureRole;
230
+ async function ensureUserRole(user, roleName, add = false) {
231
+ const role = await new Parse.Query(Parse.Role)
232
+ .equalTo("name", roleName)
233
+ .first({ useMasterKey: true });
234
+ if (role) {
235
+ const relation = role.relation("users");
236
+ if (add) {
237
+ relation.add(user);
238
+ }
239
+ else {
240
+ relation.remove(user);
241
+ }
242
+ await role.save(null, { useMasterKey: true });
243
+ console.log("userRole", user.get("username"), roleName, add);
244
+ }
245
+ }
246
+ exports.ensureUserRole = ensureUserRole;
247
+ async function immutableField(request, fieldName, permissionName = "parse:edit-immutable-fields") {
248
+ if (!request.original || request.master) {
249
+ return;
250
+ }
251
+ const previousValue = JSON.stringify(request.original.get(fieldName));
252
+ const nextValue = JSON.stringify(request.object.get(fieldName));
253
+ if ((0, fast_equals_1.deepEqual)(previousValue, nextValue)) {
254
+ return;
255
+ }
256
+ await requirePermission(request, permissionName, `You are not allowed to edit the '${fieldName}' field.`);
257
+ }
258
+ exports.immutableField = immutableField;
259
+ async function defaultHandler(request) {
260
+ const className = request.object.className;
261
+ if (request.master) {
262
+ console.log(`[@openinc/parse-server-opendash] Skipping default beforeSave() handler of ${className} for masterkey`);
263
+ return;
264
+ }
265
+ if (!request.user) {
266
+ throw new Error();
267
+ }
268
+ const currentSchema = schema[className];
269
+ if (!currentSchema) {
270
+ console.warn(`[@openinc/parse-server-opendash] Skipping default beforeSave() handler, no schema found for ${className}`);
271
+ return;
272
+ }
273
+ const userField = !!currentSchema?.fields?.user;
274
+ const tenantField = !!currentSchema?.fields?.tenant;
275
+ if (userField) {
276
+ await immutableField(request, "user");
277
+ }
278
+ if (tenantField) {
279
+ await immutableField(request, "tenant");
280
+ }
281
+ if (!request.original) {
282
+ if (userField) {
283
+ request.object.set("user", request.user);
284
+ }
285
+ if (tenantField) {
286
+ const user = (await request.user?.fetch({
287
+ useMasterKey: true,
288
+ }));
289
+ request.object.set("tenant", user.get("tenant"));
290
+ }
291
+ }
292
+ }
293
+ exports.defaultHandler = defaultHandler;
294
+ async function defaultAclHandler(request, options) {
295
+ const className = request.object.className;
296
+ const currentSchema = schema[className];
297
+ if (!currentSchema) {
298
+ console.warn(`[@openinc/parse-server-opendash] Skipping default beforeSave() ACL handler, no schema found for ${className}`);
299
+ return;
300
+ }
301
+ const userField = !!currentSchema?.fields?.user;
302
+ const tenantField = !!currentSchema?.fields?.tenant;
303
+ if (!options?.allowCustomACL || !request.object.getACL()) {
304
+ request.object.setACL(new Parse.ACL());
305
+ }
306
+ const acl = request.object.getACL();
307
+ acl.setRoleReadAccess("od-admin", true);
308
+ acl.setRoleWriteAccess("od-admin", true);
309
+ if (userField) {
310
+ const user = request.object.get("user");
311
+ if (user) {
312
+ acl.setReadAccess(user.id, true);
313
+ acl.setWriteAccess(user.id, true);
314
+ }
315
+ }
316
+ if (tenantField) {
317
+ const tenant = request.object.get("tenant");
318
+ if (tenant) {
319
+ if (!options?.denyTenantUserRead) {
320
+ acl.setRoleReadAccess(`od-tenant-user-${tenant.id}`, true);
321
+ }
322
+ if (options?.allowTenantUserWrite) {
323
+ acl.setRoleWriteAccess(`od-tenant-user-${tenant.id}`, true);
324
+ }
325
+ acl.setRoleReadAccess(`od-tenant-admin-${tenant.id}`, true);
326
+ acl.setRoleWriteAccess(`od-tenant-admin-${tenant.id}`, true);
327
+ }
328
+ }
329
+ }
330
+ exports.defaultAclHandler = defaultAclHandler;
331
+ const beforeSaveHooks = {};
332
+ function beforeSaveHook(target, callback) {
333
+ // @ts-ignore
334
+ const className = typeof target === "string" ? target : target.className;
335
+ if (!beforeSaveHooks[className]) {
336
+ beforeSaveHooks[className] = [];
337
+ Parse.Cloud.beforeSave(className, async function beforeSaveHookFunction(request) {
338
+ const sessionToken = request.user?.getSessionToken();
339
+ const newRequest = { ...request, sessionToken };
340
+ for (const fn of beforeSaveHooks[className]) {
341
+ await fn(newRequest);
342
+ }
343
+ });
344
+ }
345
+ beforeSaveHooks[className].push(callback);
346
+ }
347
+ exports.beforeSaveHook = beforeSaveHook;
348
+ const afterSaveHooks = {};
349
+ function afterSaveHook(target, callback) {
350
+ // @ts-ignore
351
+ const className = typeof target === "string" ? target : target.className;
352
+ if (!afterSaveHooks[className]) {
353
+ afterSaveHooks[className] = [];
354
+ Parse.Cloud.afterSave(className, async function afterSaveHookFunction(request) {
355
+ const sessionToken = request.user?.getSessionToken();
356
+ const newRequest = { ...request, sessionToken };
357
+ for (const fn of afterSaveHooks[className]) {
358
+ await fn(newRequest);
359
+ }
360
+ });
361
+ }
362
+ afterSaveHooks[className].push(callback);
363
+ }
364
+ exports.afterSaveHook = afterSaveHook;
365
+ const beforeDeleteHooks = {};
366
+ function beforeDeleteHook(target, callback) {
367
+ // @ts-ignore
368
+ const className = typeof target === "string" ? target : target.className;
369
+ if (!beforeDeleteHooks[className]) {
370
+ beforeDeleteHooks[className] = [];
371
+ Parse.Cloud.beforeDelete(className, async function beforeDeleteHookFunction(request) {
372
+ const sessionToken = request.user?.getSessionToken();
373
+ const newRequest = { ...request, sessionToken };
374
+ for (const fn of beforeDeleteHooks[className]) {
375
+ await fn(newRequest);
376
+ }
377
+ });
378
+ }
379
+ beforeDeleteHooks[className].push(callback);
380
+ }
381
+ exports.beforeDeleteHook = beforeDeleteHook;
382
+ const afterDeleteHooks = {};
383
+ function afterDeleteHook(target, callback) {
384
+ // @ts-ignore
385
+ const className = typeof target === "string" ? target : target.className;
386
+ if (!afterDeleteHooks[className]) {
387
+ afterDeleteHooks[className] = [];
388
+ Parse.Cloud.afterDelete(className, async function afterDeleteHookFunction(request) {
389
+ const sessionToken = request.user?.getSessionToken();
390
+ const newRequest = { ...request, sessionToken };
391
+ for (const fn of afterDeleteHooks[className]) {
392
+ await fn(newRequest);
393
+ }
394
+ });
395
+ }
396
+ afterDeleteHooks[className].push(callback);
397
+ }
398
+ exports.afterDeleteHook = afterDeleteHook;
399
+ async function autoloadCloudCode(path, regex = /^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$/) {
400
+ const fns = fs_1.default
401
+ .readdirSync(path)
402
+ .filter((filename) => filename.endsWith(".js"))
403
+ .map((filename) => filename.replace(".js", ""))
404
+ .filter((name) => regex.test(name));
405
+ for (const name of fns) {
406
+ const { init } = require((0, path_1.join)(path, name));
407
+ await init(name).catch((e) => console.error(e));
408
+ }
409
+ }
410
+ exports.autoloadCloudCode = autoloadCloudCode;
411
+ async function initAutoload() {
412
+ const path = config_1.config.get("AUTOLOAD_DIR");
413
+ if (path) {
414
+ await autoloadCloudCode((0, path_1.resolve)(process.cwd(), path));
415
+ }
416
+ }
417
+ exports.initAutoload = initAutoload;
418
+ function getFeatureForClassName(className) {
419
+ const map = featuremap_json_1.default;
420
+ return map[className] || "unknown";
421
+ }
422
+ function isFeatureEnabled(feature) {
423
+ switch (feature) {
424
+ case "CORE":
425
+ return config_1.config.getBoolean("FEATURE_CORE");
426
+ case "MONITORING":
427
+ return config_1.config.getBoolean("FEATURE_MONITORING");
428
+ case "BDE":
429
+ return config_1.config.getBoolean("FEATURE_BDE");
430
+ case "GTFS":
431
+ return config_1.config.getBoolean("FEATURE_GTFS");
432
+ case "KNOWLEDGE":
433
+ return config_1.config.getBoolean("FEATURE_KNOWLEDGE");
434
+ case "MAINTENANCE":
435
+ return config_1.config.getBoolean("FEATURE_MAINTENANCE");
436
+ case "MIAAS":
437
+ return config_1.config.getBoolean("FEATURE_MIAAS");
438
+ default:
439
+ return false;
440
+ }
441
+ }
442
+ function isClassEnabled(className) {
443
+ // if (!config.getBoolean("FEATURES_ENABLED")) return true;
444
+ const feature = getFeatureForClassName(className);
445
+ const enabled = isFeatureEnabled(feature);
446
+ return enabled;
447
+ }
448
+ function validateEmailTemplate(templateDir, template) {
449
+ const templatePath = (0, path_1.join)(templateDir, template);
450
+ if (!fs_1.default.existsSync(templateDir)) {
451
+ return false;
452
+ }
453
+ if (!fs_1.default.existsSync(templatePath)) {
454
+ return false;
455
+ }
456
+ return true;
457
+ }
458
+ function renderEmailTemplate(type, template, data, fallback) {
459
+ const fullTemplate = template + "." + type;
460
+ return validateEmailTemplate(emailTemplateDir, fullTemplate)
461
+ ? nunjucks_1.default.render(fullTemplate, data)
462
+ : fallback;
463
+ }