@stamhoofd/structures 2.1.1 → 2.1.3

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 (349) hide show
  1. package/dist/index.d.ts +19 -11
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +20 -11
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/Document.d.ts +11 -4
  6. package/dist/src/Document.d.ts.map +1 -1
  7. package/dist/src/Document.js +57 -7
  8. package/dist/src/Document.js.map +1 -1
  9. package/dist/src/Group.d.ts +10 -17
  10. package/dist/src/Group.d.ts.map +1 -1
  11. package/dist/src/Group.js +25 -22
  12. package/dist/src/Group.js.map +1 -1
  13. package/dist/src/GroupCategory.d.ts +11 -10
  14. package/dist/src/GroupCategory.d.ts.map +1 -1
  15. package/dist/src/GroupCategory.js +19 -36
  16. package/dist/src/GroupCategory.js.map +1 -1
  17. package/dist/src/GroupSettings.d.ts +11 -0
  18. package/dist/src/GroupSettings.d.ts.map +1 -1
  19. package/dist/src/GroupSettings.js +13 -0
  20. package/dist/src/GroupSettings.js.map +1 -1
  21. package/dist/src/Organization.d.ts +22 -12
  22. package/dist/src/Organization.d.ts.map +1 -1
  23. package/dist/src/Organization.js +38 -44
  24. package/dist/src/Organization.js.map +1 -1
  25. package/dist/src/OrganizationMetaData.d.ts +18 -1
  26. package/dist/src/OrganizationMetaData.d.ts.map +1 -1
  27. package/dist/src/OrganizationMetaData.js +23 -0
  28. package/dist/src/OrganizationMetaData.js.map +1 -1
  29. package/dist/src/Permissions.d.ts +134 -29
  30. package/dist/src/Permissions.d.ts.map +1 -1
  31. package/dist/src/Permissions.js +534 -115
  32. package/dist/src/Permissions.js.map +1 -1
  33. package/dist/src/Platform.d.ts +26 -1
  34. package/dist/src/Platform.d.ts.map +1 -1
  35. package/dist/src/Platform.js +72 -4
  36. package/dist/src/Platform.js.map +1 -1
  37. package/dist/src/RegistrationPeriod.d.ts +12 -1
  38. package/dist/src/RegistrationPeriod.d.ts.map +1 -1
  39. package/dist/src/RegistrationPeriod.js +21 -0
  40. package/dist/src/RegistrationPeriod.js.map +1 -1
  41. package/dist/src/User.d.ts +6 -3
  42. package/dist/src/User.d.ts.map +1 -1
  43. package/dist/src/User.js +52 -2
  44. package/dist/src/User.js.map +1 -1
  45. package/dist/src/Version.d.ts +1 -1
  46. package/dist/src/Version.js +1 -1
  47. package/dist/src/admin/OrganizationSummary.js +1 -1
  48. package/dist/src/admin/OrganizationSummary.js.map +1 -1
  49. package/dist/src/billing/STPackage.js +2 -2
  50. package/dist/src/billing/STPackage.js.map +1 -1
  51. package/dist/src/billing/STPackageBundle.js +2 -2
  52. package/dist/src/billing/STPackageBundle.js.map +1 -1
  53. package/dist/src/endpoints/RegisterResponse.d.ts +2 -2
  54. package/dist/src/endpoints/RegisterResponse.d.ts.map +1 -1
  55. package/dist/src/endpoints/RegisterResponse.js +2 -3
  56. package/dist/src/endpoints/RegisterResponse.js.map +1 -1
  57. package/dist/src/filters/PropertyFilter.d.ts +13 -10
  58. package/dist/src/filters/PropertyFilter.d.ts.map +1 -1
  59. package/dist/src/filters/PropertyFilter.js +35 -22
  60. package/dist/src/filters/PropertyFilter.js.map +1 -1
  61. package/dist/src/filters/new/FilteredRequest.d.ts +4 -1
  62. package/dist/src/filters/new/FilteredRequest.d.ts.map +1 -1
  63. package/dist/src/filters/new/FilteredRequest.js +18 -5
  64. package/dist/src/filters/new/FilteredRequest.js.map +1 -1
  65. package/dist/src/filters/new/InMemoryFilter.d.ts +7 -7
  66. package/dist/src/filters/new/InMemoryFilter.d.ts.map +1 -1
  67. package/dist/src/filters/new/InMemoryFilter.js +143 -49
  68. package/dist/src/filters/new/InMemoryFilter.js.map +1 -1
  69. package/dist/src/filters/new/Sorters.d.ts.map +1 -1
  70. package/dist/src/filters/new/Sorters.js +0 -2
  71. package/dist/src/filters/new/Sorters.js.map +1 -1
  72. package/dist/src/filters/new/StamhoofdFilter.d.ts +6 -3
  73. package/dist/src/filters/new/StamhoofdFilter.d.ts.map +1 -1
  74. package/dist/src/filters/new/StamhoofdFilter.js +11 -0
  75. package/dist/src/filters/new/StamhoofdFilter.js.map +1 -1
  76. package/dist/src/grouping/PaginatedResponse.d.ts +6 -6
  77. package/dist/src/grouping/PaginatedResponse.d.ts.map +1 -1
  78. package/dist/src/grouping/PaginatedResponse.js +3 -2
  79. package/dist/src/grouping/PaginatedResponse.js.map +1 -1
  80. package/dist/src/members/EmergencyContact.d.ts +1 -0
  81. package/dist/src/members/EmergencyContact.d.ts.map +1 -1
  82. package/dist/src/members/EmergencyContact.js +6 -1
  83. package/dist/src/members/EmergencyContact.js.map +1 -1
  84. package/dist/src/members/Member.d.ts +0 -10
  85. package/dist/src/members/Member.d.ts.map +1 -1
  86. package/dist/src/members/Member.js +0 -18
  87. package/dist/src/members/Member.js.map +1 -1
  88. package/dist/src/members/MemberDetails.d.ts +14 -35
  89. package/dist/src/members/MemberDetails.d.ts.map +1 -1
  90. package/dist/src/members/MemberDetails.js +137 -274
  91. package/dist/src/members/MemberDetails.js.map +1 -1
  92. package/dist/src/members/MemberWithRegistrations.d.ts +11 -17
  93. package/dist/src/members/MemberWithRegistrations.d.ts.map +1 -1
  94. package/dist/src/members/MemberWithRegistrations.js +9 -197
  95. package/dist/src/members/MemberWithRegistrations.js.map +1 -1
  96. package/dist/src/members/OrganizationRecordsConfiguration.d.ts +10 -48
  97. package/dist/src/members/OrganizationRecordsConfiguration.d.ts.map +1 -1
  98. package/dist/src/members/OrganizationRecordsConfiguration.js +8 -161
  99. package/dist/src/members/OrganizationRecordsConfiguration.js.map +1 -1
  100. package/dist/src/members/PlatformMember.d.ts +6 -6
  101. package/dist/src/members/PlatformMember.d.ts.map +1 -1
  102. package/dist/src/members/PlatformMember.js +17 -14
  103. package/dist/src/members/PlatformMember.js.map +1 -1
  104. package/dist/src/members/Registration.d.ts +4 -1
  105. package/dist/src/members/Registration.d.ts.map +1 -1
  106. package/dist/src/members/Registration.js +11 -2
  107. package/dist/src/members/Registration.js.map +1 -1
  108. package/dist/src/members/RegistrationWithMember.d.ts +0 -2
  109. package/dist/src/members/RegistrationWithMember.d.ts.map +1 -1
  110. package/dist/src/members/RegistrationWithMember.js +0 -4
  111. package/dist/src/members/RegistrationWithMember.js.map +1 -1
  112. package/dist/src/members/checkout/RegisterCartPriceCalculator.test.js +109 -63
  113. package/dist/src/members/checkout/RegisterCartPriceCalculator.test.js.map +1 -1
  114. package/dist/src/members/checkout/RegisterCheckout.d.ts +98 -17
  115. package/dist/src/members/checkout/RegisterCheckout.d.ts.map +1 -1
  116. package/dist/src/members/checkout/RegisterCheckout.js +545 -22
  117. package/dist/src/members/checkout/RegisterCheckout.js.map +1 -1
  118. package/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts +1 -1
  119. package/dist/src/members/records/RecordCategory.d.ts +17 -16
  120. package/dist/src/members/records/RecordCategory.d.ts.map +1 -1
  121. package/dist/src/members/records/RecordCategory.js +38 -179
  122. package/dist/src/members/records/RecordCategory.js.map +1 -1
  123. package/dist/src/members/records/RecordConfigurationFactory.d.ts.map +1 -1
  124. package/dist/src/members/records/RecordConfigurationFactory.js +62 -45
  125. package/dist/src/members/records/RecordConfigurationFactory.js.map +1 -1
  126. package/dist/src/members/records/RecordFactory.d.ts.map +1 -1
  127. package/dist/src/members/records/RecordFactory.js +6 -12
  128. package/dist/src/members/records/RecordFactory.js.map +1 -1
  129. package/dist/src/members/records/RecordSettings.d.ts +2 -1
  130. package/dist/src/members/records/RecordSettings.d.ts.map +1 -1
  131. package/dist/src/members/records/RecordSettings.js +13 -4
  132. package/dist/src/members/records/RecordSettings.js.map +1 -1
  133. package/dist/src/webshops/Checkout.d.ts +11 -8
  134. package/dist/src/webshops/Checkout.d.ts.map +1 -1
  135. package/dist/src/webshops/Checkout.js +29 -71
  136. package/dist/src/webshops/Checkout.js.map +1 -1
  137. package/dist/src/webshops/TransferSettings.d.ts +1 -1
  138. package/dist/src/webshops/TransferSettings.d.ts.map +1 -1
  139. package/dist/src/webshops/TransferSettings.js +5 -8
  140. package/dist/src/webshops/TransferSettings.js.map +1 -1
  141. package/dist/src/webshops/Webshop.js +2 -2
  142. package/dist/src/webshops/Webshop.js.map +1 -1
  143. package/dist/src/webshops/WebshopMetaData.d.ts +8 -0
  144. package/dist/src/webshops/WebshopMetaData.d.ts.map +1 -1
  145. package/dist/src/webshops/WebshopMetaData.js +9 -1
  146. package/dist/src/webshops/WebshopMetaData.js.map +1 -1
  147. package/esm/dist/index.d.ts +19 -11
  148. package/esm/dist/index.d.ts.map +1 -1
  149. package/esm/dist/index.js +20 -11
  150. package/esm/dist/index.js.map +1 -1
  151. package/esm/dist/src/Document.d.ts +11 -4
  152. package/esm/dist/src/Document.d.ts.map +1 -1
  153. package/esm/dist/src/Document.js +57 -7
  154. package/esm/dist/src/Document.js.map +1 -1
  155. package/esm/dist/src/Group.d.ts +10 -17
  156. package/esm/dist/src/Group.d.ts.map +1 -1
  157. package/esm/dist/src/Group.js +26 -23
  158. package/esm/dist/src/Group.js.map +1 -1
  159. package/esm/dist/src/GroupCategory.d.ts +11 -10
  160. package/esm/dist/src/GroupCategory.d.ts.map +1 -1
  161. package/esm/dist/src/GroupCategory.js +20 -37
  162. package/esm/dist/src/GroupCategory.js.map +1 -1
  163. package/esm/dist/src/GroupSettings.d.ts +11 -0
  164. package/esm/dist/src/GroupSettings.d.ts.map +1 -1
  165. package/esm/dist/src/GroupSettings.js +13 -0
  166. package/esm/dist/src/GroupSettings.js.map +1 -1
  167. package/esm/dist/src/Organization.d.ts +22 -12
  168. package/esm/dist/src/Organization.d.ts.map +1 -1
  169. package/esm/dist/src/Organization.js +39 -45
  170. package/esm/dist/src/Organization.js.map +1 -1
  171. package/esm/dist/src/OrganizationMetaData.d.ts +18 -1
  172. package/esm/dist/src/OrganizationMetaData.d.ts.map +1 -1
  173. package/esm/dist/src/OrganizationMetaData.js +23 -0
  174. package/esm/dist/src/OrganizationMetaData.js.map +1 -1
  175. package/esm/dist/src/Permissions.d.ts +134 -29
  176. package/esm/dist/src/Permissions.d.ts.map +1 -1
  177. package/esm/dist/src/Permissions.js +529 -113
  178. package/esm/dist/src/Permissions.js.map +1 -1
  179. package/esm/dist/src/Platform.d.ts +26 -1
  180. package/esm/dist/src/Platform.d.ts.map +1 -1
  181. package/esm/dist/src/Platform.js +70 -4
  182. package/esm/dist/src/Platform.js.map +1 -1
  183. package/esm/dist/src/RegistrationPeriod.d.ts +12 -1
  184. package/esm/dist/src/RegistrationPeriod.d.ts.map +1 -1
  185. package/esm/dist/src/RegistrationPeriod.js +21 -0
  186. package/esm/dist/src/RegistrationPeriod.js.map +1 -1
  187. package/esm/dist/src/User.d.ts +6 -3
  188. package/esm/dist/src/User.d.ts.map +1 -1
  189. package/esm/dist/src/User.js +52 -2
  190. package/esm/dist/src/User.js.map +1 -1
  191. package/esm/dist/src/Version.d.ts +1 -1
  192. package/esm/dist/src/Version.js +1 -1
  193. package/esm/dist/src/admin/OrganizationSummary.js +1 -1
  194. package/esm/dist/src/admin/OrganizationSummary.js.map +1 -1
  195. package/esm/dist/src/billing/STPackage.js +2 -2
  196. package/esm/dist/src/billing/STPackage.js.map +1 -1
  197. package/esm/dist/src/billing/STPackageBundle.js +2 -2
  198. package/esm/dist/src/billing/STPackageBundle.js.map +1 -1
  199. package/esm/dist/src/endpoints/RegisterResponse.d.ts +2 -2
  200. package/esm/dist/src/endpoints/RegisterResponse.d.ts.map +1 -1
  201. package/esm/dist/src/endpoints/RegisterResponse.js +2 -3
  202. package/esm/dist/src/endpoints/RegisterResponse.js.map +1 -1
  203. package/esm/dist/src/filters/PropertyFilter.d.ts +13 -10
  204. package/esm/dist/src/filters/PropertyFilter.d.ts.map +1 -1
  205. package/esm/dist/src/filters/PropertyFilter.js +36 -23
  206. package/esm/dist/src/filters/PropertyFilter.js.map +1 -1
  207. package/esm/dist/src/filters/new/FilteredRequest.d.ts +4 -1
  208. package/esm/dist/src/filters/new/FilteredRequest.d.ts.map +1 -1
  209. package/esm/dist/src/filters/new/FilteredRequest.js +18 -6
  210. package/esm/dist/src/filters/new/FilteredRequest.js.map +1 -1
  211. package/esm/dist/src/filters/new/InMemoryFilter.d.ts +7 -7
  212. package/esm/dist/src/filters/new/InMemoryFilter.d.ts.map +1 -1
  213. package/esm/dist/src/filters/new/InMemoryFilter.js +142 -49
  214. package/esm/dist/src/filters/new/InMemoryFilter.js.map +1 -1
  215. package/esm/dist/src/filters/new/Sorters.d.ts.map +1 -1
  216. package/esm/dist/src/filters/new/Sorters.js +0 -2
  217. package/esm/dist/src/filters/new/Sorters.js.map +1 -1
  218. package/esm/dist/src/filters/new/StamhoofdFilter.d.ts +6 -3
  219. package/esm/dist/src/filters/new/StamhoofdFilter.d.ts.map +1 -1
  220. package/esm/dist/src/filters/new/StamhoofdFilter.js +9 -1
  221. package/esm/dist/src/filters/new/StamhoofdFilter.js.map +1 -1
  222. package/esm/dist/src/grouping/PaginatedResponse.d.ts +6 -6
  223. package/esm/dist/src/grouping/PaginatedResponse.d.ts.map +1 -1
  224. package/esm/dist/src/grouping/PaginatedResponse.js +3 -2
  225. package/esm/dist/src/grouping/PaginatedResponse.js.map +1 -1
  226. package/esm/dist/src/members/EmergencyContact.d.ts +1 -0
  227. package/esm/dist/src/members/EmergencyContact.d.ts.map +1 -1
  228. package/esm/dist/src/members/EmergencyContact.js +6 -1
  229. package/esm/dist/src/members/EmergencyContact.js.map +1 -1
  230. package/esm/dist/src/members/Member.d.ts +0 -10
  231. package/esm/dist/src/members/Member.d.ts.map +1 -1
  232. package/esm/dist/src/members/Member.js +1 -19
  233. package/esm/dist/src/members/Member.js.map +1 -1
  234. package/esm/dist/src/members/MemberDetails.d.ts +14 -35
  235. package/esm/dist/src/members/MemberDetails.d.ts.map +1 -1
  236. package/esm/dist/src/members/MemberDetails.js +139 -276
  237. package/esm/dist/src/members/MemberDetails.js.map +1 -1
  238. package/esm/dist/src/members/MemberWithRegistrations.d.ts +11 -17
  239. package/esm/dist/src/members/MemberWithRegistrations.d.ts.map +1 -1
  240. package/esm/dist/src/members/MemberWithRegistrations.js +9 -197
  241. package/esm/dist/src/members/MemberWithRegistrations.js.map +1 -1
  242. package/esm/dist/src/members/OrganizationRecordsConfiguration.d.ts +10 -48
  243. package/esm/dist/src/members/OrganizationRecordsConfiguration.d.ts.map +1 -1
  244. package/esm/dist/src/members/OrganizationRecordsConfiguration.js +8 -160
  245. package/esm/dist/src/members/OrganizationRecordsConfiguration.js.map +1 -1
  246. package/esm/dist/src/members/PlatformMember.d.ts +6 -6
  247. package/esm/dist/src/members/PlatformMember.d.ts.map +1 -1
  248. package/esm/dist/src/members/PlatformMember.js +17 -14
  249. package/esm/dist/src/members/PlatformMember.js.map +1 -1
  250. package/esm/dist/src/members/Registration.d.ts +4 -1
  251. package/esm/dist/src/members/Registration.d.ts.map +1 -1
  252. package/esm/dist/src/members/Registration.js +11 -2
  253. package/esm/dist/src/members/Registration.js.map +1 -1
  254. package/esm/dist/src/members/RegistrationWithMember.d.ts +0 -2
  255. package/esm/dist/src/members/RegistrationWithMember.d.ts.map +1 -1
  256. package/esm/dist/src/members/RegistrationWithMember.js +0 -4
  257. package/esm/dist/src/members/RegistrationWithMember.js.map +1 -1
  258. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.js +109 -63
  259. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.js.map +1 -1
  260. package/esm/dist/src/members/checkout/RegisterCheckout.d.ts +98 -17
  261. package/esm/dist/src/members/checkout/RegisterCheckout.d.ts.map +1 -1
  262. package/esm/dist/src/members/checkout/RegisterCheckout.js +539 -20
  263. package/esm/dist/src/members/checkout/RegisterCheckout.js.map +1 -1
  264. package/esm/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts +1 -1
  265. package/esm/dist/src/members/records/RecordCategory.d.ts +17 -16
  266. package/esm/dist/src/members/records/RecordCategory.d.ts.map +1 -1
  267. package/esm/dist/src/members/records/RecordCategory.js +39 -179
  268. package/esm/dist/src/members/records/RecordCategory.js.map +1 -1
  269. package/esm/dist/src/members/records/RecordConfigurationFactory.d.ts.map +1 -1
  270. package/esm/dist/src/members/records/RecordConfigurationFactory.js +63 -46
  271. package/esm/dist/src/members/records/RecordConfigurationFactory.js.map +1 -1
  272. package/esm/dist/src/members/records/RecordFactory.d.ts.map +1 -1
  273. package/esm/dist/src/members/records/RecordFactory.js +6 -12
  274. package/esm/dist/src/members/records/RecordFactory.js.map +1 -1
  275. package/esm/dist/src/members/records/RecordSettings.d.ts +2 -1
  276. package/esm/dist/src/members/records/RecordSettings.d.ts.map +1 -1
  277. package/esm/dist/src/members/records/RecordSettings.js +13 -4
  278. package/esm/dist/src/members/records/RecordSettings.js.map +1 -1
  279. package/esm/dist/src/webshops/Checkout.d.ts +11 -8
  280. package/esm/dist/src/webshops/Checkout.d.ts.map +1 -1
  281. package/esm/dist/src/webshops/Checkout.js +30 -72
  282. package/esm/dist/src/webshops/Checkout.js.map +1 -1
  283. package/esm/dist/src/webshops/TransferSettings.d.ts +1 -1
  284. package/esm/dist/src/webshops/TransferSettings.d.ts.map +1 -1
  285. package/esm/dist/src/webshops/TransferSettings.js +1 -4
  286. package/esm/dist/src/webshops/TransferSettings.js.map +1 -1
  287. package/esm/dist/src/webshops/Webshop.js +2 -2
  288. package/esm/dist/src/webshops/Webshop.js.map +1 -1
  289. package/esm/dist/src/webshops/WebshopMetaData.d.ts +8 -0
  290. package/esm/dist/src/webshops/WebshopMetaData.d.ts.map +1 -1
  291. package/esm/dist/src/webshops/WebshopMetaData.js +9 -1
  292. package/esm/dist/src/webshops/WebshopMetaData.js.map +1 -1
  293. package/package.json +2 -2
  294. package/dist/src/grouping/KeychainedMembers.d.ts +0 -14
  295. package/dist/src/grouping/KeychainedMembers.d.ts.map +0 -1
  296. package/dist/src/grouping/KeychainedMembers.js +0 -27
  297. package/dist/src/grouping/KeychainedMembers.js.map +0 -1
  298. package/dist/src/grouping/KeychainedResponse.d.ts +0 -25
  299. package/dist/src/grouping/KeychainedResponse.d.ts.map +0 -1
  300. package/dist/src/grouping/KeychainedResponse.js +0 -38
  301. package/dist/src/grouping/KeychainedResponse.js.map +0 -1
  302. package/dist/src/members/EncryptedMemberWithRegistrations.d.ts +0 -8
  303. package/dist/src/members/EncryptedMemberWithRegistrations.d.ts.map +0 -1
  304. package/dist/src/members/EncryptedMemberWithRegistrations.js +0 -18
  305. package/dist/src/members/EncryptedMemberWithRegistrations.js.map +0 -1
  306. package/dist/src/members/checkout/RegisterCart.d.ts +0 -49
  307. package/dist/src/members/checkout/RegisterCart.d.ts.map +0 -1
  308. package/dist/src/members/checkout/RegisterCart.js +0 -207
  309. package/dist/src/members/checkout/RegisterCart.js.map +0 -1
  310. package/dist/src/members/checkout/RegisterCartPriceCalculator.d.ts +0 -41
  311. package/dist/src/members/checkout/RegisterCartPriceCalculator.d.ts.map +0 -1
  312. package/dist/src/members/checkout/RegisterCartPriceCalculator.js +0 -352
  313. package/dist/src/members/checkout/RegisterCartPriceCalculator.js.map +0 -1
  314. package/dist/src/members/checkout/RegisterCartValidator.d.ts +0 -35
  315. package/dist/src/members/checkout/RegisterCartValidator.d.ts.map +0 -1
  316. package/dist/src/members/checkout/RegisterCartValidator.js +0 -345
  317. package/dist/src/members/checkout/RegisterCartValidator.js.map +0 -1
  318. package/dist/src/members/checkout/RegisterItem.d.ts +0 -59
  319. package/dist/src/members/checkout/RegisterItem.d.ts.map +0 -1
  320. package/dist/src/members/checkout/RegisterItem.js +0 -148
  321. package/dist/src/members/checkout/RegisterItem.js.map +0 -1
  322. package/esm/dist/src/grouping/KeychainedMembers.d.ts +0 -14
  323. package/esm/dist/src/grouping/KeychainedMembers.d.ts.map +0 -1
  324. package/esm/dist/src/grouping/KeychainedMembers.js +0 -23
  325. package/esm/dist/src/grouping/KeychainedMembers.js.map +0 -1
  326. package/esm/dist/src/grouping/KeychainedResponse.d.ts +0 -25
  327. package/esm/dist/src/grouping/KeychainedResponse.d.ts.map +0 -1
  328. package/esm/dist/src/grouping/KeychainedResponse.js +0 -33
  329. package/esm/dist/src/grouping/KeychainedResponse.js.map +0 -1
  330. package/esm/dist/src/members/EncryptedMemberWithRegistrations.d.ts +0 -8
  331. package/esm/dist/src/members/EncryptedMemberWithRegistrations.d.ts.map +0 -1
  332. package/esm/dist/src/members/EncryptedMemberWithRegistrations.js +0 -14
  333. package/esm/dist/src/members/EncryptedMemberWithRegistrations.js.map +0 -1
  334. package/esm/dist/src/members/checkout/RegisterCart.d.ts +0 -49
  335. package/esm/dist/src/members/checkout/RegisterCart.d.ts.map +0 -1
  336. package/esm/dist/src/members/checkout/RegisterCart.js +0 -202
  337. package/esm/dist/src/members/checkout/RegisterCart.js.map +0 -1
  338. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.d.ts +0 -41
  339. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.d.ts.map +0 -1
  340. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.js +0 -347
  341. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.js.map +0 -1
  342. package/esm/dist/src/members/checkout/RegisterCartValidator.d.ts +0 -35
  343. package/esm/dist/src/members/checkout/RegisterCartValidator.d.ts.map +0 -1
  344. package/esm/dist/src/members/checkout/RegisterCartValidator.js +0 -341
  345. package/esm/dist/src/members/checkout/RegisterCartValidator.js.map +0 -1
  346. package/esm/dist/src/members/checkout/RegisterItem.d.ts +0 -59
  347. package/esm/dist/src/members/checkout/RegisterItem.d.ts.map +0 -1
  348. package/esm/dist/src/members/checkout/RegisterItem.js +0 -142
  349. package/esm/dist/src/members/checkout/RegisterItem.js.map +0 -1
@@ -1,7 +1,10 @@
1
1
  import { __decorate } from "tslib";
2
- import { AnyDecoder, ArrayDecoder, AutoEncoder, BooleanDecoder, EnumDecoder, field, MapDecoder, StringDecoder } from '@simonbackx/simple-encoding';
2
+ import { AnyDecoder, ArrayDecoder, AutoEncoder, BooleanDecoder, EnumDecoder, field, MapDecoder, PatchMap, StringDecoder } from '@simonbackx/simple-encoding';
3
3
  import { Formatter } from '@stamhoofd/utility';
4
4
  import { v4 as uuidv4 } from "uuid";
5
+ /**
6
+ * PermissionLevels are used to grant permissions to specific resources or system wide
7
+ */
5
8
  export var PermissionLevel;
6
9
  (function (PermissionLevel) {
7
10
  /** No access */
@@ -13,6 +16,95 @@ export var PermissionLevel;
13
16
  /** Full access */
14
17
  PermissionLevel["Full"] = "Full";
15
18
  })(PermissionLevel || (PermissionLevel = {}));
19
+ /**
20
+ * More granular access rights to specific things in the system
21
+ */
22
+ export var AccessRight;
23
+ (function (AccessRight) {
24
+ // Platform level permissions
25
+ /**
26
+ * Allows the user to log in as a full-access admin to a specific organization
27
+ */
28
+ AccessRight["PlatformLoginAs"] = "PlatformLoginAs";
29
+ // Organization level permissions
30
+ AccessRight["OrganizationCreateWebshops"] = "OrganizationCreateWebshops";
31
+ AccessRight["OrganizationManagePayments"] = "OrganizationManagePayments";
32
+ AccessRight["OrganizationFinanceDirector"] = "OrganizationFinanceDirector";
33
+ AccessRight["OrganizationCreateGroups"] = "OrganizationCreateGroups";
34
+ // Member data access rights
35
+ // Note: in order to read or write any data at all, a user first needs to have normal resource access to a group, category or organization
36
+ // So general data (name, birthday, gender, address, email, parents, emergency contacts) access can be controlled in that way (this doesn't have a separate access right).
37
+ AccessRight["MemberReadFinancialData"] = "MemberReadFinancialData";
38
+ AccessRight["MemberWriteFinancialData"] = "MemberWriteFinancialData";
39
+ // Webshop level permissions
40
+ AccessRight["WebshopScanTickets"] = "WebshopScanTickets";
41
+ })(AccessRight || (AccessRight = {}));
42
+ export class AccessRightHelper {
43
+ static getName(right) {
44
+ switch (right) {
45
+ case AccessRight.PlatformLoginAs: return 'Inloggen als hoofdbeheerder';
46
+ case AccessRight.OrganizationFinanceDirector: return 'Toegang tot volledige boekhouding';
47
+ case AccessRight.OrganizationManagePayments: return 'Overschrijvingen beheren';
48
+ case AccessRight.OrganizationCreateWebshops: return 'Webshops maken';
49
+ case AccessRight.OrganizationCreateGroups: return 'Groepen maken';
50
+ case AccessRight.WebshopScanTickets: return 'Tickets scannen';
51
+ // Member data
52
+ case AccessRight.MemberReadFinancialData: return 'Bekijk rekening leden';
53
+ case AccessRight.MemberWriteFinancialData: return 'Bewerk rekening leden';
54
+ }
55
+ }
56
+ static getNameShort(right) {
57
+ switch (right) {
58
+ case AccessRight.PlatformLoginAs: return 'Inloggen';
59
+ case AccessRight.OrganizationFinanceDirector: return 'Boekhouding';
60
+ case AccessRight.OrganizationManagePayments: return 'Overschrijvingen';
61
+ case AccessRight.OrganizationCreateWebshops: return 'Maken';
62
+ case AccessRight.OrganizationCreateGroups: return 'Maken';
63
+ case AccessRight.WebshopScanTickets: return 'Scannen';
64
+ // Member data
65
+ case AccessRight.MemberReadFinancialData: return 'Lidgeld bekijken';
66
+ case AccessRight.MemberWriteFinancialData: return 'Lidgeld bewerken';
67
+ }
68
+ }
69
+ static getDescription(right) {
70
+ switch (right) {
71
+ case AccessRight.PlatformLoginAs: return 'inloggen als hoofdbeheerder';
72
+ case AccessRight.OrganizationFinanceDirector: return 'volledige boekhouding';
73
+ case AccessRight.OrganizationManagePayments: return 'overschrijvingen';
74
+ case AccessRight.OrganizationCreateWebshops: return 'webshops maken';
75
+ case AccessRight.OrganizationCreateGroups: return 'groepen maken';
76
+ case AccessRight.WebshopScanTickets: return 'scannen van tickets';
77
+ // Member data
78
+ case AccessRight.MemberReadFinancialData: return 'Openstaande bedragen bekijken';
79
+ case AccessRight.MemberWriteFinancialData: return 'Openstaande bedragen bewerken';
80
+ }
81
+ }
82
+ /**
83
+ * If a user has a certain permission level, automatically grant the specific access right
84
+ * By default only full permissions gives all access rights, but you can tweak it:
85
+ * E.g., give webshop scan rights if you also have write access to that webshop
86
+ */
87
+ static autoGrantRightForLevel(right) {
88
+ switch (right) {
89
+ case AccessRight.WebshopScanTickets: return PermissionLevel.Write;
90
+ case AccessRight.OrganizationCreateGroups: return null; // Not included in full access
91
+ }
92
+ return PermissionLevel.Full;
93
+ }
94
+ /**
95
+ * Automatically grant a user access rights if they have a certain right
96
+ */
97
+ static autoInheritFrom(right) {
98
+ switch (right) {
99
+ // Finance director also has manage payments permissions automatically
100
+ case AccessRight.OrganizationManagePayments: return [AccessRight.OrganizationFinanceDirector];
101
+ // Finance director also can view and edit member financial data
102
+ case AccessRight.MemberReadFinancialData: return [AccessRight.OrganizationFinanceDirector];
103
+ case AccessRight.MemberWriteFinancialData: return [AccessRight.OrganizationFinanceDirector];
104
+ }
105
+ return [];
106
+ }
107
+ }
16
108
  export function getPermissionLevelNumber(level) {
17
109
  switch (level) {
18
110
  case PermissionLevel.None: return 0;
@@ -25,6 +117,18 @@ export function getPermissionLevelNumber(level) {
25
117
  }
26
118
  }
27
119
  }
120
+ export function getPermissionLevelName(level) {
121
+ switch (level) {
122
+ case PermissionLevel.None: return 'Geen basistoegang';
123
+ case PermissionLevel.Read: return 'Lezen';
124
+ case PermissionLevel.Write: return 'Bewerken';
125
+ case PermissionLevel.Full: return 'Volledige toegang';
126
+ default: {
127
+ const l = level; // will throw compile error if new levels are added without editing this method
128
+ throw new Error("Unknown permission level " + l);
129
+ }
130
+ }
131
+ }
28
132
  export class PermissionRole extends AutoEncoder {
29
133
  constructor() {
30
134
  super(...arguments);
@@ -37,31 +141,108 @@ __decorate([
37
141
  __decorate([
38
142
  field({ decoder: StringDecoder })
39
143
  ], PermissionRole.prototype, "name", void 0);
40
- export class PermissionRoleDetailed extends PermissionRole {
144
+ /**
145
+ * More granular access rights to specific things in the system
146
+ */
147
+ export var PermissionsResourceType;
148
+ (function (PermissionsResourceType) {
149
+ PermissionsResourceType["Webshops"] = "Webshops";
150
+ PermissionsResourceType["Groups"] = "Groups";
151
+ PermissionsResourceType["GroupCategories"] = "GroupCategories";
152
+ PermissionsResourceType["OrganizationTags"] = "OrganizationTags";
153
+ PermissionsResourceType["RecordCategories"] = "RecordCategory";
154
+ })(PermissionsResourceType || (PermissionsResourceType = {}));
155
+ export function getPermissionResourceTypeName(type, plural = true) {
156
+ switch (type) {
157
+ case PermissionsResourceType.Webshops: return plural ? 'webshops' : 'webshop';
158
+ case PermissionsResourceType.Groups: return plural ? 'inschrijvingsgroepen' : 'inschrijvingsgroep';
159
+ case PermissionsResourceType.GroupCategories: return plural ? 'categorieën' : 'categorie';
160
+ case PermissionsResourceType.OrganizationTags: return plural ? 'tags' : 'tag';
161
+ case PermissionsResourceType.RecordCategories: return plural ? 'vragenlijsten' : 'vragenlijst';
162
+ }
163
+ }
164
+ /**
165
+ * More granular access rights to specific things in the system
166
+ */
167
+ export class ResourcePermissions extends AutoEncoder {
41
168
  constructor() {
42
169
  super(...arguments);
43
170
  /**
44
- * Generic access to all resources
171
+ * This is a cache so we can display the role description without fetching all resources
45
172
  */
46
- this.level = PermissionLevel.None;
47
- // Todo: all these flag based permissions should move to a flag list
48
- // so it is easier to add more permission levels in the future.
49
- // also, permission flags should be prefixed with either organization or platform (e.g. managing invoices of the platform vs managing finances of all organizations)
173
+ this.resourceName = "";
50
174
  /**
51
- * Access to open transfers
175
+ * Setting it to full gives all possible permissions for the resource
176
+ * Read/Write depends on resource
52
177
  */
53
- this.managePayments = false;
178
+ this.level = PermissionLevel.None;
54
179
  /**
55
- * Full payments access
180
+ * More granular permissions related to this resource
56
181
  */
57
- this.financeDirector = false;
182
+ this.accessRights = [];
183
+ }
184
+ hasAccess(level) {
185
+ return getPermissionLevelNumber(this.level) >= getPermissionLevelNumber(level);
186
+ }
187
+ hasAccessRight(right) {
188
+ const gl = AccessRightHelper.autoGrantRightForLevel(right);
189
+ return (gl && this.hasAccess(gl)) || this.accessRights.includes(right);
190
+ }
191
+ createInsertPatch(type, resourceId, roleOrPermissions) {
192
+ const patch = roleOrPermissions.static.patch({});
193
+ // First check if we need to insert the type
194
+ if (roleOrPermissions.resources.get(type)) {
195
+ // We need to patch
196
+ const p = new PatchMap();
197
+ p.set(resourceId, this);
198
+ patch.resources.set(type, p);
199
+ }
200
+ else {
201
+ // No resources with this type yet
202
+ const p = new Map();
203
+ p.set(resourceId, this);
204
+ patch.resources.set(type, p);
205
+ }
206
+ return patch;
207
+ }
208
+ merge(other) {
209
+ const p = new ResourcePermissions();
210
+ p.level = this.level;
211
+ p.accessRights = this.accessRights.slice();
212
+ if (getPermissionLevelNumber(other.level) > getPermissionLevelNumber(p.level)) {
213
+ p.level = other.level;
214
+ }
215
+ for (const right of other.accessRights) {
216
+ if (!p.accessRights.includes(right)) {
217
+ p.accessRights.push(right);
218
+ }
219
+ }
220
+ return p;
221
+ }
222
+ }
223
+ __decorate([
224
+ field({ decoder: StringDecoder, field: 'n' })
225
+ ], ResourcePermissions.prototype, "resourceName", void 0);
226
+ __decorate([
227
+ field({ decoder: new EnumDecoder(PermissionLevel), field: "l" })
228
+ ], ResourcePermissions.prototype, "level", void 0);
229
+ __decorate([
230
+ field({ decoder: new ArrayDecoder(new EnumDecoder(AccessRight)), field: "r" })
231
+ ], ResourcePermissions.prototype, "accessRights", void 0);
232
+ export class PermissionRoleDetailed extends PermissionRole {
233
+ constructor() {
234
+ super(...arguments);
58
235
  /**
59
- * Can create new webshops = write
236
+ * Generic access to all resources
60
237
  */
61
- this.createWebshops = false;
238
+ this.level = PermissionLevel.None;
239
+ this.accessRights = [];
240
+ this.resources = new Map();
241
+ this.legacyManagePayments = false;
242
+ this.legacyFinanceDirector = false;
243
+ this.legacyCreateWebshops = false;
62
244
  }
63
- getDescription(webshops, groups) {
64
- var _a;
245
+ getDescription() {
65
246
  const stack = [];
66
247
  if (this.level === PermissionLevel.Read) {
67
248
  stack.push("alles lezen");
@@ -72,58 +253,131 @@ export class PermissionRoleDetailed extends PermissionRole {
72
253
  if (this.level === PermissionLevel.Full) {
73
254
  stack.push("alles");
74
255
  }
75
- if (this.financeDirector) {
76
- stack.push("volledige boekhouding");
256
+ for (const right of this.accessRights) {
257
+ stack.push(AccessRightHelper.getDescription(right));
77
258
  }
78
- else if (this.managePayments) {
79
- stack.push("overschrijvingen");
259
+ for (const [type, resources] of this.resources) {
260
+ let count = 0;
261
+ if (resources.has('')) {
262
+ stack.push("alle " + getPermissionResourceTypeName(type, true));
263
+ continue;
264
+ }
265
+ for (const resource of resources.values()) {
266
+ if (resource.hasAccess(PermissionLevel.Read) || resource.accessRights.length > 0) {
267
+ count += 1;
268
+ }
269
+ }
270
+ if (count > 0) {
271
+ stack.push(count + " " + getPermissionResourceTypeName(type, count > 1));
272
+ }
80
273
  }
81
- if (this.createWebshops) {
82
- stack.push("webshops maken");
274
+ if (stack.length === 0) {
275
+ return "geen toegang";
83
276
  }
84
- let webshopCount = 0;
85
- for (const webshop of webshops) {
86
- if (webshop.privateMeta.permissions.roleHasAccess(this)) {
87
- webshopCount++;
88
- continue;
277
+ return Formatter.capitalizeFirstLetter(Formatter.joinLast(stack, ', ', ' en '));
278
+ }
279
+ hasAccess(level) {
280
+ return getPermissionLevelNumber(this.level) >= getPermissionLevelNumber(level);
281
+ }
282
+ hasAccessRight(right) {
283
+ const gl = AccessRightHelper.autoGrantRightForLevel(right);
284
+ if ((gl && this.hasAccess(gl)) || this.accessRights.includes(right)) {
285
+ return true;
286
+ }
287
+ const autoInherit = AccessRightHelper.autoInheritFrom(right);
288
+ for (const r of autoInherit) {
289
+ if (this.hasAccessRight(r)) {
290
+ return true;
89
291
  }
90
- if (webshop.privateMeta.scanPermissions.roleHasAccess(this)) {
91
- webshopCount++;
92
- continue;
292
+ }
293
+ return false;
294
+ }
295
+ getResourcePermissions(type, id) {
296
+ const resource = this.resources.get(type);
297
+ if (!resource) {
298
+ return null;
299
+ }
300
+ const rInstance = resource.get(id);
301
+ const allInstance = resource.get('');
302
+ if (!rInstance) {
303
+ if (allInstance) {
304
+ return allInstance;
93
305
  }
306
+ return null;
94
307
  }
95
- if (webshopCount > 0) {
96
- stack.push(webshopCount + " webshop" + (webshopCount > 1 ? "s" : ""));
308
+ if (allInstance) {
309
+ return rInstance.merge(allInstance);
97
310
  }
98
- let groupCount = 0;
99
- for (const group of groups) {
100
- if ((_a = group.privateSettings) === null || _a === void 0 ? void 0 : _a.permissions.roleHasAccess(this)) {
101
- groupCount++;
102
- continue;
311
+ return rInstance;
312
+ }
313
+ getMergedResourcePermissions(type, id) {
314
+ var _a;
315
+ let base = this.getResourcePermissions(type, id);
316
+ if (getPermissionLevelNumber(this.level) > getPermissionLevelNumber((_a = base === null || base === void 0 ? void 0 : base.level) !== null && _a !== void 0 ? _a : PermissionLevel.None)) {
317
+ if (!base) {
318
+ base = ResourcePermissions.create({ level: this.level });
103
319
  }
320
+ base.level = this.level;
104
321
  }
105
- if (groupCount > 0) {
106
- stack.push(groupCount + " groep" + (groupCount > 1 ? "en" : ""));
322
+ return base;
323
+ }
324
+ hasResourceAccess(type, id, level) {
325
+ var _a, _b;
326
+ if (this.hasAccess(level)) {
327
+ return true;
107
328
  }
108
- if (stack.length === 0) {
109
- return "geen toegang";
329
+ return (_b = (_a = this.getResourcePermissions(type, id)) === null || _a === void 0 ? void 0 : _a.hasAccess(level)) !== null && _b !== void 0 ? _b : false;
330
+ }
331
+ hasResourceAccessRight(type, id, right) {
332
+ var _a, _b;
333
+ if (this.hasAccessRight(right)) {
334
+ return true;
110
335
  }
111
- return Formatter.capitalizeFirstLetter(Formatter.joinLast(stack, ', ', ' en '));
336
+ return (_b = (_a = this.getResourcePermissions(type, id)) === null || _a === void 0 ? void 0 : _a.hasAccessRight(right)) !== null && _b !== void 0 ? _b : false;
112
337
  }
113
338
  }
114
339
  __decorate([
115
340
  field({ decoder: new EnumDecoder(PermissionLevel), version: 201 })
116
341
  ], PermissionRoleDetailed.prototype, "level", void 0);
117
342
  __decorate([
118
- field({ decoder: BooleanDecoder })
119
- ], PermissionRoleDetailed.prototype, "managePayments", void 0);
343
+ field({
344
+ decoder: new ArrayDecoder(new EnumDecoder(AccessRight)),
345
+ version: 246,
346
+ upgrade: function () {
347
+ const base = [];
348
+ if (this.legacyManagePayments) {
349
+ base.push(AccessRight.OrganizationManagePayments);
350
+ }
351
+ if (this.legacyFinanceDirector) {
352
+ base.push(AccessRight.OrganizationFinanceDirector);
353
+ }
354
+ if (this.legacyCreateWebshops) {
355
+ base.push(AccessRight.OrganizationCreateWebshops);
356
+ }
357
+ return base;
358
+ }
359
+ })
360
+ ], PermissionRoleDetailed.prototype, "accessRights", void 0);
120
361
  __decorate([
121
- field({ decoder: BooleanDecoder, version: 199 })
122
- ], PermissionRoleDetailed.prototype, "financeDirector", void 0);
362
+ field({
363
+ decoder: new MapDecoder(new EnumDecoder(PermissionsResourceType), new MapDecoder(
364
+ // ID
365
+ StringDecoder, ResourcePermissions)),
366
+ version: 248
367
+ })
368
+ ], PermissionRoleDetailed.prototype, "resources", void 0);
123
369
  __decorate([
124
- field({ decoder: BooleanDecoder })
125
- ], PermissionRoleDetailed.prototype, "createWebshops", void 0);
370
+ field({ decoder: BooleanDecoder, field: 'managePayments', optional: true })
371
+ ], PermissionRoleDetailed.prototype, "legacyManagePayments", void 0);
372
+ __decorate([
373
+ field({ decoder: BooleanDecoder, version: 199, field: 'financeDirector', optional: true })
374
+ ], PermissionRoleDetailed.prototype, "legacyFinanceDirector", void 0);
375
+ __decorate([
376
+ field({ decoder: BooleanDecoder, field: 'createWebshops', optional: true })
377
+ ], PermissionRoleDetailed.prototype, "legacyCreateWebshops", void 0);
126
378
  /**
379
+ * @deprecated
380
+ * Use resource types
127
381
  * Give access to a given resouce based by the roles of a user
128
382
  */
129
383
  export class PermissionsByRole extends AutoEncoder {
@@ -133,11 +387,8 @@ export class PermissionsByRole extends AutoEncoder {
133
387
  this.write = [];
134
388
  this.full = [];
135
389
  }
136
- /**
137
- * Whetever a given user has access to the members in this group.
138
- */
139
- getPermissionLevel(permissions, allRoles) {
140
- if (permissions.hasFullAccess(allRoles)) {
390
+ getPermissionLevel(permissions) {
391
+ if (permissions.hasFullAccess()) {
141
392
  return PermissionLevel.Full;
142
393
  }
143
394
  for (const role of this.full) {
@@ -145,7 +396,7 @@ export class PermissionsByRole extends AutoEncoder {
145
396
  return PermissionLevel.Full;
146
397
  }
147
398
  }
148
- if (permissions.hasWriteAccess(allRoles)) {
399
+ if (permissions.hasWriteAccess()) {
149
400
  return PermissionLevel.Write;
150
401
  }
151
402
  for (const role of this.write) {
@@ -153,7 +404,7 @@ export class PermissionsByRole extends AutoEncoder {
153
404
  return PermissionLevel.Write;
154
405
  }
155
406
  }
156
- if (permissions.hasReadAccess(allRoles)) {
407
+ if (permissions.hasReadAccess()) {
157
408
  return PermissionLevel.Read;
158
409
  }
159
410
  for (const role of this.read) {
@@ -184,23 +435,23 @@ export class PermissionsByRole extends AutoEncoder {
184
435
  }
185
436
  return PermissionLevel.None;
186
437
  }
187
- hasAccess(permissions, allRoles, level) {
438
+ hasAccess(permissions, level) {
188
439
  if (!permissions) {
189
440
  return false;
190
441
  }
191
- return getPermissionLevelNumber(this.getPermissionLevel(permissions, allRoles)) >= getPermissionLevelNumber(level);
442
+ return getPermissionLevelNumber(this.getPermissionLevel(permissions)) >= getPermissionLevelNumber(level);
192
443
  }
193
444
  roleHasAccess(role, level = PermissionLevel.Read) {
194
445
  return getPermissionLevelNumber(this.getRolePermissionLevel(role)) >= getPermissionLevelNumber(level);
195
446
  }
196
- hasFullAccess(permissions, allRoles) {
197
- return this.hasAccess(permissions, allRoles, PermissionLevel.Full);
447
+ hasFullAccess(permissions) {
448
+ return this.hasAccess(permissions, PermissionLevel.Full);
198
449
  }
199
- hasWriteAccess(permissions, allRoles) {
200
- return this.hasAccess(permissions, allRoles, PermissionLevel.Write);
450
+ hasWriteAccess(permissions) {
451
+ return this.hasAccess(permissions, PermissionLevel.Write);
201
452
  }
202
- hasReadAccess(permissions, allRoles) {
203
- return this.hasAccess(permissions, allRoles, PermissionLevel.Read);
453
+ hasReadAccess(permissions) {
454
+ return this.hasAccess(permissions, PermissionLevel.Read);
204
455
  }
205
456
  }
206
457
  __decorate([
@@ -225,7 +476,18 @@ export class Permissions extends AutoEncoder {
225
476
  */
226
477
  this.groups = [];
227
478
  this.roles = [];
479
+ /**
480
+ * Mostly for temporary access
481
+ */
482
+ this.resources = new Map();
228
483
  }
484
+ hasRole(role) {
485
+ return this.roles.find(r => r.id === role.id) !== undefined;
486
+ }
487
+ /**
488
+ * @deprecated
489
+ * Use LoadedPermissions
490
+ */
229
491
  hasAccess(allRoles, level) {
230
492
  if (getPermissionLevelNumber(this.level) >= getPermissionLevelNumber(level)) {
231
493
  // Someone with read / write access for the whole organization, also the same access for each group
@@ -243,19 +505,32 @@ export class Permissions extends AutoEncoder {
243
505
  }
244
506
  return false;
245
507
  }
508
+ /**
509
+ * @deprecated
510
+ * Use LoadedPermissions
511
+ */
246
512
  hasReadAccess(allRoles) {
247
513
  return this.hasAccess(allRoles, PermissionLevel.Read);
248
514
  }
515
+ /**
516
+ * @deprecated
517
+ * Use LoadedPermissions
518
+ */
249
519
  hasWriteAccess(allRoles) {
250
520
  return this.hasAccess(allRoles, PermissionLevel.Write);
251
521
  }
522
+ /**
523
+ * @deprecated
524
+ * Use LoadedPermissions
525
+ */
252
526
  hasFullAccess(allRoles) {
253
527
  return this.hasAccess(allRoles, PermissionLevel.Full);
254
528
  }
255
529
  /**
256
- * @param roles All available roles of the organizatino (to query)
530
+ * @deprecated
531
+ * Use LoadedPermissions
257
532
  */
258
- canCreateWebshops(allRoles) {
533
+ hasAccessRight(right, allRoles) {
259
534
  if (this.hasFullAccess(allRoles)) {
260
535
  return true;
261
536
  }
@@ -265,51 +540,31 @@ export class Permissions extends AutoEncoder {
265
540
  // Deleted role
266
541
  continue;
267
542
  }
268
- if (f.createWebshops) {
543
+ if (f.hasAccessRight(right)) {
269
544
  return true;
270
545
  }
271
546
  }
272
547
  return false;
273
548
  }
274
549
  /**
550
+ * @deprecated
551
+ * @param roles All available roles of the organizatino (to query)
552
+ */
553
+ canCreateWebshops(allRoles) {
554
+ return this.hasAccessRight(AccessRight.OrganizationCreateWebshops, allRoles);
555
+ }
556
+ /**
557
+ * @deprecated
275
558
  * @param roles All available roles of the organizatino (to query)
276
559
  */
277
560
  canManagePayments(allRoles) {
278
- if (this.hasFullAccess(allRoles)) {
279
- return true;
280
- }
281
- for (const r of this.roles) {
282
- const f = allRoles.find(rr => r.id === rr.id);
283
- if (!f) {
284
- // Deleted role
285
- continue;
286
- }
287
- if (f.financeDirector) {
288
- return true;
289
- }
290
- if (f.managePayments) {
291
- return true;
292
- }
293
- }
294
- return false;
561
+ return this.hasAccessRight(AccessRight.OrganizationManagePayments, allRoles) || this.hasAccessRight(AccessRight.OrganizationFinanceDirector, allRoles);
295
562
  }
296
563
  /**
564
+ * @deprecated
297
565
  */
298
566
  hasFinanceAccess(allRoles) {
299
- if (this.hasFullAccess(allRoles)) {
300
- return true;
301
- }
302
- for (const r of this.roles) {
303
- const f = allRoles.find(rr => r.id === rr.id);
304
- if (!f) {
305
- // Deleted role
306
- continue;
307
- }
308
- if (f.financeDirector) {
309
- return true;
310
- }
311
- }
312
- return false;
567
+ return this.hasAccessRight(AccessRight.OrganizationFinanceDirector, allRoles);
313
568
  }
314
569
  add(other) {
315
570
  if (getPermissionLevelNumber(this.level) < getPermissionLevelNumber(other.level)) {
@@ -331,26 +586,187 @@ __decorate([
331
586
  __decorate([
332
587
  field({ decoder: new ArrayDecoder(PermissionRole), version: 60 })
333
588
  ], Permissions.prototype, "roles", void 0);
334
- export class UserPermissions extends AutoEncoder {
335
- constructor() {
336
- super(...arguments);
337
- this.globalPermissions = Permissions.create({});
338
- this.organizationPermissions = new Map();
339
- }
340
- }
341
589
  __decorate([
342
- field({ decoder: Permissions })
343
- ], UserPermissions.prototype, "globalPermissions", void 0);
344
- __decorate([
345
- field({ decoder: new MapDecoder(StringDecoder, Permissions) })
346
- ], UserPermissions.prototype, "organizationPermissions", void 0);
590
+ field({
591
+ decoder: new MapDecoder(new EnumDecoder(PermissionsResourceType), new MapDecoder(
592
+ // ID
593
+ StringDecoder, ResourcePermissions)),
594
+ version: 249
595
+ })
596
+ ], Permissions.prototype, "resources", void 0);
347
597
  /**
348
- * Convenience class to combine both roles of an organization, platform and the permissions of a user.
349
- * This helps with checking permissions.
598
+ * Identical to Permissions but with detailed roles, loaded from the organization or platform
350
599
  */
351
- export class FilledUserPermissions {
352
- constructor(userPermissions, allRoles) {
353
- // todo
600
+ export class LoadedPermissions {
601
+ constructor(data) {
602
+ this.level = PermissionLevel.None;
603
+ this.roles = [];
604
+ this.resources = new Map();
605
+ Object.assign(this, data);
606
+ }
607
+ static create(data) {
608
+ return new LoadedPermissions(data);
609
+ }
610
+ static from(permissions, allRoles) {
611
+ return this.create({
612
+ level: permissions.level,
613
+ roles: permissions.roles.flatMap(role => {
614
+ const d = allRoles.find(a => a.id === role.id);
615
+ if (d) {
616
+ return [d];
617
+ }
618
+ return [];
619
+ }),
620
+ resources: permissions.resources
621
+ });
622
+ }
623
+ getResourcePermissions(type, id) {
624
+ const resource = this.resources.get(type);
625
+ if (!resource) {
626
+ return null;
627
+ }
628
+ const rInstance = resource.get(id);
629
+ const allInstance = resource.get('');
630
+ if (!rInstance) {
631
+ if (allInstance) {
632
+ return allInstance;
633
+ }
634
+ return null;
635
+ }
636
+ if (allInstance) {
637
+ return rInstance.merge(allInstance);
638
+ }
639
+ return rInstance;
640
+ }
641
+ getMergedResourcePermissions(type, id) {
642
+ var _a;
643
+ let base = this.getResourcePermissions(type, id);
644
+ for (const role of this.roles) {
645
+ const r = role.getMergedResourcePermissions(type, id);
646
+ if (r) {
647
+ if (base) {
648
+ base.merge(r);
649
+ }
650
+ else {
651
+ base = r;
652
+ }
653
+ }
654
+ }
655
+ if (getPermissionLevelNumber(this.level) > getPermissionLevelNumber((_a = base === null || base === void 0 ? void 0 : base.level) !== null && _a !== void 0 ? _a : PermissionLevel.None)) {
656
+ if (!base) {
657
+ base = ResourcePermissions.create({ level: this.level });
658
+ }
659
+ base.level = this.level;
660
+ }
661
+ return base;
662
+ }
663
+ hasRole(role) {
664
+ return this.roles.find(r => r.id === role.id) !== undefined;
665
+ }
666
+ hasAccess(level) {
667
+ if (getPermissionLevelNumber(this.level) >= getPermissionLevelNumber(level)) {
668
+ // Someone with read / write access for the whole organization, also the same access for each group
669
+ return true;
670
+ }
671
+ for (const f of this.roles) {
672
+ if (f.hasAccess(level)) {
673
+ return true;
674
+ }
675
+ }
676
+ return false;
677
+ }
678
+ hasResourceAccess(type, id, level) {
679
+ var _a, _b;
680
+ if (this.hasAccess(level)) {
681
+ return true;
682
+ }
683
+ if ((_b = (_a = this.getResourcePermissions(type, id)) === null || _a === void 0 ? void 0 : _a.hasAccess(level)) !== null && _b !== void 0 ? _b : false) {
684
+ return true;
685
+ }
686
+ for (const r of this.roles) {
687
+ if (r.hasResourceAccess(type, id, level)) {
688
+ return true;
689
+ }
690
+ }
691
+ return false;
692
+ }
693
+ hasResourceAccessRight(type, id, right) {
694
+ var _a, _b;
695
+ if (this.hasAccessRight(right)) {
696
+ return true;
697
+ }
698
+ if ((_b = (_a = this.getResourcePermissions(type, id)) === null || _a === void 0 ? void 0 : _a.hasAccessRight(right)) !== null && _b !== void 0 ? _b : false) {
699
+ return true;
700
+ }
701
+ for (const r of this.roles) {
702
+ if (r.hasResourceAccessRight(type, id, right)) {
703
+ return true;
704
+ }
705
+ }
706
+ const autoInherit = AccessRightHelper.autoInheritFrom(right);
707
+ for (const r of autoInherit) {
708
+ if (this.hasResourceAccessRight(type, id, r)) {
709
+ return true;
710
+ }
711
+ }
712
+ return false;
713
+ }
714
+ hasReadAccess() {
715
+ return this.hasAccess(PermissionLevel.Read);
716
+ }
717
+ hasWriteAccess() {
718
+ return this.hasAccess(PermissionLevel.Write);
719
+ }
720
+ hasFullAccess() {
721
+ return this.hasAccess(PermissionLevel.Full);
722
+ }
723
+ hasAccessRight(right) {
724
+ const gl = AccessRightHelper.autoGrantRightForLevel(right);
725
+ if (gl && this.hasAccess(gl)) {
726
+ return true;
727
+ }
728
+ for (const f of this.roles) {
729
+ if (f.hasAccessRight(right)) {
730
+ return true;
731
+ }
732
+ }
733
+ const autoInherit = AccessRightHelper.autoInheritFrom(right);
734
+ for (const r of autoInherit) {
735
+ if (this.hasAccessRight(r)) {
736
+ return true;
737
+ }
738
+ }
739
+ return false;
740
+ }
741
+ merge(other) {
742
+ const p = LoadedPermissions.create({});
743
+ p.level = this.level;
744
+ p.roles = this.roles.slice();
745
+ p.resources = new Map(this.resources);
746
+ if (getPermissionLevelNumber(other.level) > getPermissionLevelNumber(p.level)) {
747
+ p.level = other.level;
748
+ }
749
+ for (const [type, r] of other.resources) {
750
+ for (const [id, resource] of r) {
751
+ if (!p.resources.has(type)) {
752
+ p.resources.set(type, new Map());
753
+ }
754
+ const current = p.resources.get(type).get(id);
755
+ if (!current) {
756
+ p.resources.get(type).set(id, resource);
757
+ }
758
+ else {
759
+ p.resources.get(type).set(id, current.merge(resource));
760
+ }
761
+ }
762
+ }
763
+ for (const role of other.roles) {
764
+ const current = p.roles.find(r => r.id === role.id);
765
+ if (!current) {
766
+ p.roles.push(role);
767
+ }
768
+ }
769
+ return p;
354
770
  }
355
771
  }
356
772
  //# sourceMappingURL=Permissions.js.map