@synchronized-console/shared 2.25.7 → 2.31.14

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 (675) hide show
  1. package/dist/commonjs/acc/helpers/types.d.ts +46 -0
  2. package/dist/commonjs/acc/helpers/types.d.ts.map +1 -0
  3. package/dist/commonjs/acc/helpers/types.js +3 -0
  4. package/dist/commonjs/acc/helpers/types.js.map +1 -0
  5. package/dist/commonjs/acc/index.d.ts +2 -0
  6. package/dist/commonjs/acc/index.d.ts.map +1 -0
  7. package/dist/commonjs/acc/index.js +18 -0
  8. package/dist/commonjs/acc/index.js.map +1 -0
  9. package/dist/commonjs/authz/checks/dashboards.d.ts +5 -0
  10. package/dist/commonjs/authz/checks/dashboards.d.ts.map +1 -0
  11. package/dist/commonjs/authz/checks/dashboards.js +11 -0
  12. package/dist/commonjs/authz/checks/dashboards.js.map +1 -0
  13. package/dist/commonjs/authz/domain/authErrors.d.ts +98 -3
  14. package/dist/commonjs/authz/domain/authErrors.d.ts.map +1 -1
  15. package/dist/commonjs/authz/domain/authErrors.js +66 -3
  16. package/dist/commonjs/authz/domain/authErrors.js.map +1 -1
  17. package/dist/commonjs/authz/domain/automate/operations.d.ts +5 -0
  18. package/dist/commonjs/authz/domain/automate/operations.d.ts.map +1 -0
  19. package/dist/commonjs/authz/domain/automate/operations.js +3 -0
  20. package/dist/commonjs/authz/domain/automate/operations.js.map +1 -0
  21. package/dist/commonjs/authz/domain/automate/types.d.ts +10 -0
  22. package/dist/commonjs/authz/domain/automate/types.d.ts.map +1 -0
  23. package/dist/commonjs/authz/domain/automate/types.js +3 -0
  24. package/dist/commonjs/authz/domain/automate/types.js.map +1 -0
  25. package/dist/commonjs/authz/domain/context.d.ts +12 -0
  26. package/dist/commonjs/authz/domain/context.d.ts.map +1 -1
  27. package/dist/commonjs/authz/domain/dashboards/operations.d.ts +5 -0
  28. package/dist/commonjs/authz/domain/dashboards/operations.d.ts.map +1 -0
  29. package/dist/commonjs/authz/domain/dashboards/operations.js +3 -0
  30. package/dist/commonjs/authz/domain/dashboards/operations.js.map +1 -0
  31. package/dist/commonjs/authz/domain/dashboards/types.d.ts +7 -0
  32. package/dist/commonjs/authz/domain/dashboards/types.d.ts.map +1 -0
  33. package/dist/commonjs/authz/domain/dashboards/types.js +3 -0
  34. package/dist/commonjs/authz/domain/dashboards/types.js.map +1 -0
  35. package/dist/commonjs/authz/domain/loaders.d.ts +63 -45
  36. package/dist/commonjs/authz/domain/loaders.d.ts.map +1 -1
  37. package/dist/commonjs/authz/domain/loaders.js +27 -21
  38. package/dist/commonjs/authz/domain/loaders.js.map +1 -1
  39. package/dist/commonjs/authz/domain/savedViews/operations.d.ts +10 -0
  40. package/dist/commonjs/authz/domain/savedViews/operations.d.ts.map +1 -0
  41. package/dist/commonjs/authz/domain/savedViews/operations.js +3 -0
  42. package/dist/commonjs/authz/domain/savedViews/operations.js.map +1 -0
  43. package/dist/commonjs/authz/domain/savedViews/types.d.ts +26 -0
  44. package/dist/commonjs/authz/domain/savedViews/types.d.ts.map +1 -0
  45. package/dist/commonjs/authz/domain/savedViews/types.js +6 -0
  46. package/dist/commonjs/authz/domain/savedViews/types.js.map +1 -0
  47. package/dist/commonjs/authz/domain/workspaces/operations.d.ts +2 -1
  48. package/dist/commonjs/authz/domain/workspaces/operations.d.ts.map +1 -1
  49. package/dist/commonjs/authz/domain/workspaces/types.d.ts +3 -0
  50. package/dist/commonjs/authz/domain/workspaces/types.d.ts.map +1 -1
  51. package/dist/commonjs/authz/fragments/automate.d.ts +7 -0
  52. package/dist/commonjs/authz/fragments/automate.d.ts.map +1 -0
  53. package/dist/commonjs/authz/fragments/automate.js +22 -0
  54. package/dist/commonjs/authz/fragments/automate.js.map +1 -0
  55. package/dist/commonjs/authz/fragments/dashboards.d.ts +8 -0
  56. package/dist/commonjs/authz/fragments/dashboards.d.ts.map +1 -0
  57. package/dist/commonjs/authz/fragments/dashboards.js +48 -0
  58. package/dist/commonjs/authz/fragments/dashboards.js.map +1 -0
  59. package/dist/commonjs/authz/fragments/projects.d.ts +13 -1
  60. package/dist/commonjs/authz/fragments/projects.d.ts.map +1 -1
  61. package/dist/commonjs/authz/fragments/projects.js +25 -1
  62. package/dist/commonjs/authz/fragments/projects.js.map +1 -1
  63. package/dist/commonjs/authz/fragments/savedViews.d.ts +30 -0
  64. package/dist/commonjs/authz/fragments/savedViews.d.ts.map +1 -0
  65. package/dist/commonjs/authz/fragments/savedViews.js +122 -0
  66. package/dist/commonjs/authz/fragments/savedViews.js.map +1 -0
  67. package/dist/commonjs/authz/fragments/workspaces.d.ts +9 -1
  68. package/dist/commonjs/authz/fragments/workspaces.d.ts.map +1 -1
  69. package/dist/commonjs/authz/fragments/workspaces.js +47 -1
  70. package/dist/commonjs/authz/fragments/workspaces.js.map +1 -1
  71. package/dist/commonjs/authz/helpers/graphql.d.ts +1 -1
  72. package/dist/commonjs/authz/helpers/graphql.d.ts.map +1 -1
  73. package/dist/commonjs/authz/helpers/graphql.js +1 -1
  74. package/dist/commonjs/authz/helpers/graphql.js.map +1 -1
  75. package/dist/commonjs/authz/index.d.ts +1 -0
  76. package/dist/commonjs/authz/index.d.ts.map +1 -1
  77. package/dist/commonjs/authz/index.js +1 -0
  78. package/dist/commonjs/authz/index.js.map +1 -1
  79. package/dist/commonjs/authz/policies/automate/function/canEditFunction.d.ts +10 -0
  80. package/dist/commonjs/authz/policies/automate/function/canEditFunction.d.ts.map +1 -0
  81. package/dist/commonjs/authz/policies/automate/function/canEditFunction.js +19 -0
  82. package/dist/commonjs/authz/policies/automate/function/canEditFunction.js.map +1 -0
  83. package/dist/commonjs/authz/policies/dashboard/canCreateToken.d.ts +10 -0
  84. package/dist/commonjs/authz/policies/dashboard/canCreateToken.d.ts.map +1 -0
  85. package/dist/commonjs/authz/policies/dashboard/canCreateToken.js +45 -0
  86. package/dist/commonjs/authz/policies/dashboard/canCreateToken.js.map +1 -0
  87. package/dist/commonjs/authz/policies/dashboard/canDelete.d.ts +10 -0
  88. package/dist/commonjs/authz/policies/dashboard/canDelete.d.ts.map +1 -0
  89. package/dist/commonjs/authz/policies/dashboard/canDelete.js +45 -0
  90. package/dist/commonjs/authz/policies/dashboard/canDelete.js.map +1 -0
  91. package/dist/commonjs/authz/policies/dashboard/canEdit.d.ts +10 -0
  92. package/dist/commonjs/authz/policies/dashboard/canEdit.d.ts.map +1 -0
  93. package/dist/commonjs/authz/policies/dashboard/canEdit.js +43 -0
  94. package/dist/commonjs/authz/policies/dashboard/canEdit.js.map +1 -0
  95. package/dist/commonjs/authz/policies/dashboard/canRead.d.ts +10 -0
  96. package/dist/commonjs/authz/policies/dashboard/canRead.d.ts.map +1 -0
  97. package/dist/commonjs/authz/policies/dashboard/canRead.js +42 -0
  98. package/dist/commonjs/authz/policies/dashboard/canRead.js.map +1 -0
  99. package/dist/commonjs/authz/policies/index.d.ts +62 -1
  100. package/dist/commonjs/authz/policies/index.d.ts.map +1 -1
  101. package/dist/commonjs/authz/policies/index.js +52 -4
  102. package/dist/commonjs/authz/policies/index.js.map +1 -1
  103. package/dist/commonjs/authz/policies/project/canLoad.d.ts.map +1 -1
  104. package/dist/commonjs/authz/policies/project/canLoad.js +6 -0
  105. package/dist/commonjs/authz/policies/project/canLoad.js.map +1 -1
  106. package/dist/commonjs/authz/policies/project/canReadAccIntegrationSettings.d.ts +10 -0
  107. package/dist/commonjs/authz/policies/project/canReadAccIntegrationSettings.d.ts.map +1 -0
  108. package/dist/commonjs/authz/policies/project/canReadAccIntegrationSettings.js +35 -0
  109. package/dist/commonjs/authz/policies/project/canReadAccIntegrationSettings.js.map +1 -0
  110. package/dist/commonjs/authz/policies/project/canUpdateEmbedTokens.d.ts +10 -0
  111. package/dist/commonjs/authz/policies/project/canUpdateEmbedTokens.d.ts.map +1 -0
  112. package/dist/commonjs/authz/policies/project/canUpdateEmbedTokens.js +52 -0
  113. package/dist/commonjs/authz/policies/project/canUpdateEmbedTokens.js.map +1 -0
  114. package/dist/commonjs/authz/policies/project/savedViews/canCreate.d.ts +6 -0
  115. package/dist/commonjs/authz/policies/project/savedViews/canCreate.d.ts.map +1 -0
  116. package/dist/commonjs/authz/policies/project/savedViews/canCreate.js +31 -0
  117. package/dist/commonjs/authz/policies/project/savedViews/canCreate.js.map +1 -0
  118. package/dist/commonjs/authz/policies/project/savedViews/canCreateSavedViewGroupToken.d.ts +6 -0
  119. package/dist/commonjs/authz/policies/project/savedViews/canCreateSavedViewGroupToken.d.ts.map +1 -0
  120. package/dist/commonjs/authz/policies/project/savedViews/canCreateSavedViewGroupToken.js +61 -0
  121. package/dist/commonjs/authz/policies/project/savedViews/canCreateSavedViewGroupToken.js.map +1 -0
  122. package/dist/commonjs/authz/policies/project/savedViews/canEditDescription.d.ts +6 -0
  123. package/dist/commonjs/authz/policies/project/savedViews/canEditDescription.d.ts.map +1 -0
  124. package/dist/commonjs/authz/policies/project/savedViews/canEditDescription.js +14 -0
  125. package/dist/commonjs/authz/policies/project/savedViews/canEditDescription.js.map +1 -0
  126. package/dist/commonjs/authz/policies/project/savedViews/canEditTitle.d.ts +6 -0
  127. package/dist/commonjs/authz/policies/project/savedViews/canEditTitle.d.ts.map +1 -0
  128. package/dist/commonjs/authz/policies/project/savedViews/canEditTitle.js +14 -0
  129. package/dist/commonjs/authz/policies/project/savedViews/canEditTitle.js.map +1 -0
  130. package/dist/commonjs/authz/policies/project/savedViews/canMove.d.ts +6 -0
  131. package/dist/commonjs/authz/policies/project/savedViews/canMove.d.ts.map +1 -0
  132. package/dist/commonjs/authz/policies/project/savedViews/canMove.js +14 -0
  133. package/dist/commonjs/authz/policies/project/savedViews/canMove.js.map +1 -0
  134. package/dist/commonjs/authz/policies/project/savedViews/canRead.d.ts +11 -0
  135. package/dist/commonjs/authz/policies/project/savedViews/canRead.d.ts.map +1 -0
  136. package/dist/commonjs/authz/policies/project/savedViews/canRead.js +15 -0
  137. package/dist/commonjs/authz/policies/project/savedViews/canRead.js.map +1 -0
  138. package/dist/commonjs/authz/policies/project/savedViews/canSetAsHomeView.d.ts +6 -0
  139. package/dist/commonjs/authz/policies/project/savedViews/canSetAsHomeView.d.ts.map +1 -0
  140. package/dist/commonjs/authz/policies/project/savedViews/canSetAsHomeView.js +45 -0
  141. package/dist/commonjs/authz/policies/project/savedViews/canSetAsHomeView.js.map +1 -0
  142. package/dist/commonjs/authz/policies/project/savedViews/canUpdate.d.ts +6 -0
  143. package/dist/commonjs/authz/policies/project/savedViews/canUpdate.d.ts.map +1 -0
  144. package/dist/commonjs/authz/policies/project/savedViews/canUpdate.js +14 -0
  145. package/dist/commonjs/authz/policies/project/savedViews/canUpdate.js.map +1 -0
  146. package/dist/commonjs/authz/policies/project/savedViews/canUpdateGroup.d.ts +6 -0
  147. package/dist/commonjs/authz/policies/project/savedViews/canUpdateGroup.d.ts.map +1 -0
  148. package/dist/commonjs/authz/policies/project/savedViews/canUpdateGroup.js +14 -0
  149. package/dist/commonjs/authz/policies/project/savedViews/canUpdateGroup.js.map +1 -0
  150. package/dist/commonjs/authz/policies/workspace/canCreateDashboards.d.ts +10 -0
  151. package/dist/commonjs/authz/policies/workspace/canCreateDashboards.d.ts.map +1 -0
  152. package/dist/commonjs/authz/policies/workspace/canCreateDashboards.js +39 -0
  153. package/dist/commonjs/authz/policies/workspace/canCreateDashboards.js.map +1 -0
  154. package/dist/commonjs/authz/policies/workspace/canCreateWorkspace.d.ts +10 -0
  155. package/dist/commonjs/authz/policies/workspace/canCreateWorkspace.d.ts.map +1 -0
  156. package/dist/commonjs/authz/policies/workspace/canCreateWorkspace.js +51 -0
  157. package/dist/commonjs/authz/policies/workspace/canCreateWorkspace.js.map +1 -0
  158. package/dist/commonjs/authz/policies/workspace/canListDashboards.d.ts +10 -0
  159. package/dist/commonjs/authz/policies/workspace/canListDashboards.d.ts.map +1 -0
  160. package/dist/commonjs/authz/policies/workspace/canListDashboards.js +26 -0
  161. package/dist/commonjs/authz/policies/workspace/canListDashboards.js.map +1 -0
  162. package/dist/commonjs/authz/policies/workspace/canReadMemberEmail.d.ts +1 -1
  163. package/dist/commonjs/authz/policies/workspace/canReadMemberEmail.d.ts.map +1 -1
  164. package/dist/commonjs/authz/policies/workspace/canReadMemberEmail.js +1 -20
  165. package/dist/commonjs/authz/policies/workspace/canReadMemberEmail.js.map +1 -1
  166. package/dist/commonjs/authz/policies/workspace/{canUpdateEmbedOptions.d.ts → canUseWorkspacePlanFeature.d.ts} +13 -5
  167. package/dist/commonjs/authz/policies/workspace/canUseWorkspacePlanFeature.d.ts.map +1 -0
  168. package/dist/commonjs/authz/policies/workspace/canUseWorkspacePlanFeature.js +27 -0
  169. package/dist/commonjs/authz/policies/workspace/canUseWorkspacePlanFeature.js.map +1 -0
  170. package/dist/commonjs/automate/helpers/types.d.ts +313 -51
  171. package/dist/commonjs/automate/helpers/types.d.ts.map +1 -1
  172. package/dist/commonjs/automate/helpers/types.js +12 -2
  173. package/dist/commonjs/automate/helpers/types.js.map +1 -1
  174. package/dist/commonjs/blobs/index.d.ts +17 -0
  175. package/dist/commonjs/blobs/index.d.ts.map +1 -0
  176. package/dist/commonjs/blobs/index.js +114 -0
  177. package/dist/commonjs/blobs/index.js.map +1 -0
  178. package/dist/commonjs/core/constants.d.ts +4 -2
  179. package/dist/commonjs/core/constants.d.ts.map +1 -1
  180. package/dist/commonjs/core/constants.js +24 -4
  181. package/dist/commonjs/core/constants.js.map +1 -1
  182. package/dist/commonjs/core/helpers/encoding.d.ts +2 -0
  183. package/dist/commonjs/core/helpers/encoding.d.ts.map +1 -0
  184. package/dist/commonjs/core/helpers/encoding.js +15 -0
  185. package/dist/commonjs/core/helpers/encoding.js.map +1 -0
  186. package/dist/commonjs/core/helpers/error.d.ts +11 -0
  187. package/dist/commonjs/core/helpers/error.d.ts.map +1 -1
  188. package/dist/commonjs/core/helpers/error.js +60 -2
  189. package/dist/commonjs/core/helpers/error.js.map +1 -1
  190. package/dist/commonjs/core/helpers/url.d.ts +24 -0
  191. package/dist/commonjs/core/helpers/url.d.ts.map +1 -1
  192. package/dist/commonjs/core/helpers/url.js +30 -0
  193. package/dist/commonjs/core/helpers/url.js.map +1 -1
  194. package/dist/commonjs/core/helpers/utility.d.ts +16 -0
  195. package/dist/commonjs/core/helpers/utility.d.ts.map +1 -1
  196. package/dist/commonjs/core/helpers/utility.js +22 -1
  197. package/dist/commonjs/core/helpers/utility.js.map +1 -1
  198. package/dist/commonjs/core/index.d.ts +2 -0
  199. package/dist/commonjs/core/index.d.ts.map +1 -1
  200. package/dist/commonjs/core/index.js +2 -0
  201. package/dist/commonjs/core/index.js.map +1 -1
  202. package/dist/commonjs/core/utils/base64.d.ts +3 -0
  203. package/dist/commonjs/core/utils/base64.d.ts.map +1 -0
  204. package/dist/commonjs/core/utils/base64.js +25 -0
  205. package/dist/commonjs/core/utils/base64.js.map +1 -0
  206. package/dist/commonjs/environment/{multiRegionConfig.d.ts → db.d.ts} +54 -5
  207. package/dist/commonjs/environment/db.d.ts.map +1 -0
  208. package/dist/commonjs/environment/{multiRegionConfig.js → db.js} +45 -10
  209. package/dist/commonjs/environment/db.js.map +1 -0
  210. package/dist/commonjs/environment/featureFlags.d.ts +25 -0
  211. package/dist/commonjs/environment/featureFlags.d.ts.map +1 -0
  212. package/dist/commonjs/environment/featureFlags.js +6 -0
  213. package/dist/commonjs/environment/featureFlags.js.map +1 -0
  214. package/dist/commonjs/environment/index.d.ts +2 -15
  215. package/dist/commonjs/environment/index.d.ts.map +1 -1
  216. package/dist/commonjs/environment/index.js +44 -7
  217. package/dist/commonjs/environment/index.js.map +1 -1
  218. package/dist/commonjs/environment/node.d.ts +5 -0
  219. package/dist/commonjs/environment/node.d.ts.map +1 -0
  220. package/dist/commonjs/environment/node.js +15 -0
  221. package/dist/commonjs/environment/node.js.map +1 -0
  222. package/dist/commonjs/images/base64.d.ts +2 -0
  223. package/dist/commonjs/images/base64.d.ts.map +1 -0
  224. package/dist/commonjs/images/base64.js +19 -0
  225. package/dist/commonjs/images/base64.js.map +1 -0
  226. package/dist/commonjs/index.d.ts +1 -0
  227. package/dist/commonjs/index.d.ts.map +1 -1
  228. package/dist/commonjs/index.js +1 -0
  229. package/dist/commonjs/index.js.map +1 -1
  230. package/dist/commonjs/observability/index.d.ts.map +1 -1
  231. package/dist/commonjs/observability/index.js +19 -2
  232. package/dist/commonjs/observability/index.js.map +1 -1
  233. package/dist/commonjs/queue/config.d.ts +3 -0
  234. package/dist/commonjs/queue/config.d.ts.map +1 -1
  235. package/dist/commonjs/queue/config.js +14 -5
  236. package/dist/commonjs/queue/config.js.map +1 -1
  237. package/dist/commonjs/rich-text-editor/helpers/index.d.ts +13 -1
  238. package/dist/commonjs/rich-text-editor/helpers/index.d.ts.map +1 -1
  239. package/dist/commonjs/rich-text-editor/helpers/index.js +1 -0
  240. package/dist/commonjs/rich-text-editor/helpers/index.js.map +1 -1
  241. package/dist/commonjs/saved-views/helpers/defaultGroup.d.ts +23 -0
  242. package/dist/commonjs/saved-views/helpers/defaultGroup.d.ts.map +1 -0
  243. package/dist/commonjs/saved-views/helpers/defaultGroup.js +58 -0
  244. package/dist/commonjs/saved-views/helpers/defaultGroup.js.map +1 -0
  245. package/dist/commonjs/saved-views/index.d.ts +2 -0
  246. package/dist/commonjs/saved-views/index.d.ts.map +1 -0
  247. package/dist/commonjs/saved-views/index.js +18 -0
  248. package/dist/commonjs/saved-views/index.js.map +1 -0
  249. package/dist/commonjs/viewer/helpers/route.d.ts +42 -7
  250. package/dist/commonjs/viewer/helpers/route.d.ts.map +1 -1
  251. package/dist/commonjs/viewer/helpers/route.js +149 -38
  252. package/dist/commonjs/viewer/helpers/route.js.map +1 -1
  253. package/dist/commonjs/viewer/helpers/state.d.ts +59 -6
  254. package/dist/commonjs/viewer/helpers/state.d.ts.map +1 -1
  255. package/dist/commonjs/viewer/helpers/state.js +100 -23
  256. package/dist/commonjs/viewer/helpers/state.js.map +1 -1
  257. package/dist/commonjs/workers/fileimport/job.d.ts +85 -9
  258. package/dist/commonjs/workers/fileimport/job.d.ts.map +1 -1
  259. package/dist/commonjs/workers/fileimport/job.js +21 -10
  260. package/dist/commonjs/workers/fileimport/job.js.map +1 -1
  261. package/dist/commonjs/workers/previews/job.d.ts +37 -20
  262. package/dist/commonjs/workers/previews/job.d.ts.map +1 -1
  263. package/dist/commonjs/workers/previews/job.js +23 -2
  264. package/dist/commonjs/workers/previews/job.js.map +1 -1
  265. package/dist/commonjs/workspaces/helpers/features.d.ts +55 -5
  266. package/dist/commonjs/workspaces/helpers/features.d.ts.map +1 -1
  267. package/dist/commonjs/workspaces/helpers/features.js +180 -114
  268. package/dist/commonjs/workspaces/helpers/features.js.map +1 -1
  269. package/dist/commonjs/workspaces/helpers/plans.d.ts +1 -0
  270. package/dist/commonjs/workspaces/helpers/plans.d.ts.map +1 -1
  271. package/dist/commonjs/workspaces/helpers/plans.js.map +1 -1
  272. package/dist/esm/acc/helpers/types.d.ts +46 -0
  273. package/dist/esm/acc/helpers/types.d.ts.map +1 -0
  274. package/dist/esm/acc/helpers/types.js +2 -0
  275. package/dist/esm/acc/helpers/types.js.map +1 -0
  276. package/dist/esm/acc/index.d.ts +2 -0
  277. package/dist/esm/acc/index.d.ts.map +1 -0
  278. package/dist/esm/acc/index.js +2 -0
  279. package/dist/esm/acc/index.js.map +1 -0
  280. package/dist/esm/authz/checks/dashboards.d.ts +5 -0
  281. package/dist/esm/authz/checks/dashboards.d.ts.map +1 -0
  282. package/dist/esm/authz/checks/dashboards.js +7 -0
  283. package/dist/esm/authz/checks/dashboards.js.map +1 -0
  284. package/dist/esm/authz/domain/authErrors.d.ts +98 -3
  285. package/dist/esm/authz/domain/authErrors.d.ts.map +1 -1
  286. package/dist/esm/authz/domain/authErrors.js +65 -2
  287. package/dist/esm/authz/domain/authErrors.js.map +1 -1
  288. package/dist/esm/authz/domain/automate/operations.d.ts +5 -0
  289. package/dist/esm/authz/domain/automate/operations.d.ts.map +1 -0
  290. package/dist/esm/authz/domain/automate/operations.js +2 -0
  291. package/dist/esm/authz/domain/automate/operations.js.map +1 -0
  292. package/dist/esm/authz/domain/automate/types.d.ts +10 -0
  293. package/dist/esm/authz/domain/automate/types.d.ts.map +1 -0
  294. package/dist/esm/authz/domain/automate/types.js +2 -0
  295. package/dist/esm/authz/domain/automate/types.js.map +1 -0
  296. package/dist/esm/authz/domain/context.d.ts +12 -0
  297. package/dist/esm/authz/domain/context.d.ts.map +1 -1
  298. package/dist/esm/authz/domain/dashboards/operations.d.ts +5 -0
  299. package/dist/esm/authz/domain/dashboards/operations.d.ts.map +1 -0
  300. package/dist/esm/authz/domain/dashboards/operations.js +2 -0
  301. package/dist/esm/authz/domain/dashboards/operations.js.map +1 -0
  302. package/dist/esm/authz/domain/dashboards/types.d.ts +7 -0
  303. package/dist/esm/authz/domain/dashboards/types.d.ts.map +1 -0
  304. package/dist/esm/authz/domain/dashboards/types.js +2 -0
  305. package/dist/esm/authz/domain/dashboards/types.js.map +1 -0
  306. package/dist/esm/authz/domain/loaders.d.ts +63 -45
  307. package/dist/esm/authz/domain/loaders.d.ts.map +1 -1
  308. package/dist/esm/authz/domain/loaders.js +27 -21
  309. package/dist/esm/authz/domain/loaders.js.map +1 -1
  310. package/dist/esm/authz/domain/savedViews/operations.d.ts +10 -0
  311. package/dist/esm/authz/domain/savedViews/operations.d.ts.map +1 -0
  312. package/dist/esm/authz/domain/savedViews/operations.js +2 -0
  313. package/dist/esm/authz/domain/savedViews/operations.js.map +1 -0
  314. package/dist/esm/authz/domain/savedViews/types.d.ts +26 -0
  315. package/dist/esm/authz/domain/savedViews/types.d.ts.map +1 -0
  316. package/dist/esm/authz/domain/savedViews/types.js +3 -0
  317. package/dist/esm/authz/domain/savedViews/types.js.map +1 -0
  318. package/dist/esm/authz/domain/workspaces/operations.d.ts +2 -1
  319. package/dist/esm/authz/domain/workspaces/operations.d.ts.map +1 -1
  320. package/dist/esm/authz/domain/workspaces/types.d.ts +3 -0
  321. package/dist/esm/authz/domain/workspaces/types.d.ts.map +1 -1
  322. package/dist/esm/authz/fragments/automate.d.ts +7 -0
  323. package/dist/esm/authz/fragments/automate.d.ts.map +1 -0
  324. package/dist/esm/authz/fragments/automate.js +17 -0
  325. package/dist/esm/authz/fragments/automate.js.map +1 -0
  326. package/dist/esm/authz/fragments/dashboards.d.ts +8 -0
  327. package/dist/esm/authz/fragments/dashboards.d.ts.map +1 -0
  328. package/dist/esm/authz/fragments/dashboards.js +42 -0
  329. package/dist/esm/authz/fragments/dashboards.js.map +1 -0
  330. package/dist/esm/authz/fragments/projects.d.ts +13 -1
  331. package/dist/esm/authz/fragments/projects.d.ts.map +1 -1
  332. package/dist/esm/authz/fragments/projects.js +24 -1
  333. package/dist/esm/authz/fragments/projects.js.map +1 -1
  334. package/dist/esm/authz/fragments/savedViews.d.ts +30 -0
  335. package/dist/esm/authz/fragments/savedViews.d.ts.map +1 -0
  336. package/dist/esm/authz/fragments/savedViews.js +117 -0
  337. package/dist/esm/authz/fragments/savedViews.js.map +1 -0
  338. package/dist/esm/authz/fragments/workspaces.d.ts +9 -1
  339. package/dist/esm/authz/fragments/workspaces.d.ts.map +1 -1
  340. package/dist/esm/authz/fragments/workspaces.js +45 -1
  341. package/dist/esm/authz/fragments/workspaces.js.map +1 -1
  342. package/dist/esm/authz/helpers/graphql.d.ts +1 -1
  343. package/dist/esm/authz/helpers/graphql.d.ts.map +1 -1
  344. package/dist/esm/authz/helpers/graphql.js +1 -1
  345. package/dist/esm/authz/helpers/graphql.js.map +1 -1
  346. package/dist/esm/authz/index.d.ts +1 -0
  347. package/dist/esm/authz/index.d.ts.map +1 -1
  348. package/dist/esm/authz/index.js +1 -0
  349. package/dist/esm/authz/index.js.map +1 -1
  350. package/dist/esm/authz/policies/automate/function/canEditFunction.d.ts +10 -0
  351. package/dist/esm/authz/policies/automate/function/canEditFunction.d.ts.map +1 -0
  352. package/dist/esm/authz/policies/automate/function/canEditFunction.js +15 -0
  353. package/dist/esm/authz/policies/automate/function/canEditFunction.js.map +1 -0
  354. package/dist/esm/authz/policies/dashboard/canCreateToken.d.ts +10 -0
  355. package/dist/esm/authz/policies/dashboard/canCreateToken.d.ts.map +1 -0
  356. package/dist/esm/authz/policies/dashboard/canCreateToken.js +41 -0
  357. package/dist/esm/authz/policies/dashboard/canCreateToken.js.map +1 -0
  358. package/dist/esm/authz/policies/dashboard/canDelete.d.ts +10 -0
  359. package/dist/esm/authz/policies/dashboard/canDelete.d.ts.map +1 -0
  360. package/dist/esm/authz/policies/dashboard/canDelete.js +41 -0
  361. package/dist/esm/authz/policies/dashboard/canDelete.js.map +1 -0
  362. package/dist/esm/authz/policies/dashboard/canEdit.d.ts +10 -0
  363. package/dist/esm/authz/policies/dashboard/canEdit.d.ts.map +1 -0
  364. package/dist/esm/authz/policies/dashboard/canEdit.js +39 -0
  365. package/dist/esm/authz/policies/dashboard/canEdit.js.map +1 -0
  366. package/dist/esm/authz/policies/dashboard/canRead.d.ts +10 -0
  367. package/dist/esm/authz/policies/dashboard/canRead.d.ts.map +1 -0
  368. package/dist/esm/authz/policies/dashboard/canRead.js +38 -0
  369. package/dist/esm/authz/policies/dashboard/canRead.js.map +1 -0
  370. package/dist/esm/authz/policies/index.d.ts +62 -1
  371. package/dist/esm/authz/policies/index.d.ts.map +1 -1
  372. package/dist/esm/authz/policies/index.js +52 -4
  373. package/dist/esm/authz/policies/index.js.map +1 -1
  374. package/dist/esm/authz/policies/project/canLoad.d.ts.map +1 -1
  375. package/dist/esm/authz/policies/project/canLoad.js +6 -0
  376. package/dist/esm/authz/policies/project/canLoad.js.map +1 -1
  377. package/dist/esm/authz/policies/project/canReadAccIntegrationSettings.d.ts +10 -0
  378. package/dist/esm/authz/policies/project/canReadAccIntegrationSettings.d.ts.map +1 -0
  379. package/dist/esm/authz/policies/project/canReadAccIntegrationSettings.js +31 -0
  380. package/dist/esm/authz/policies/project/canReadAccIntegrationSettings.js.map +1 -0
  381. package/dist/esm/authz/policies/project/canUpdateEmbedTokens.d.ts +10 -0
  382. package/dist/esm/authz/policies/project/canUpdateEmbedTokens.d.ts.map +1 -0
  383. package/dist/esm/authz/policies/project/canUpdateEmbedTokens.js +48 -0
  384. package/dist/esm/authz/policies/project/canUpdateEmbedTokens.js.map +1 -0
  385. package/dist/esm/authz/policies/project/savedViews/canCreate.d.ts +6 -0
  386. package/dist/esm/authz/policies/project/savedViews/canCreate.d.ts.map +1 -0
  387. package/dist/esm/authz/policies/project/savedViews/canCreate.js +27 -0
  388. package/dist/esm/authz/policies/project/savedViews/canCreate.js.map +1 -0
  389. package/dist/esm/authz/policies/project/savedViews/canCreateSavedViewGroupToken.d.ts +6 -0
  390. package/dist/esm/authz/policies/project/savedViews/canCreateSavedViewGroupToken.d.ts.map +1 -0
  391. package/dist/esm/authz/policies/project/savedViews/canCreateSavedViewGroupToken.js +57 -0
  392. package/dist/esm/authz/policies/project/savedViews/canCreateSavedViewGroupToken.js.map +1 -0
  393. package/dist/esm/authz/policies/project/savedViews/canEditDescription.d.ts +6 -0
  394. package/dist/esm/authz/policies/project/savedViews/canEditDescription.d.ts.map +1 -0
  395. package/dist/esm/authz/policies/project/savedViews/canEditDescription.js +10 -0
  396. package/dist/esm/authz/policies/project/savedViews/canEditDescription.js.map +1 -0
  397. package/dist/esm/authz/policies/project/savedViews/canEditTitle.d.ts +6 -0
  398. package/dist/esm/authz/policies/project/savedViews/canEditTitle.d.ts.map +1 -0
  399. package/dist/esm/authz/policies/project/savedViews/canEditTitle.js +10 -0
  400. package/dist/esm/authz/policies/project/savedViews/canEditTitle.js.map +1 -0
  401. package/dist/esm/authz/policies/project/savedViews/canMove.d.ts +6 -0
  402. package/dist/esm/authz/policies/project/savedViews/canMove.d.ts.map +1 -0
  403. package/dist/esm/authz/policies/project/savedViews/canMove.js +10 -0
  404. package/dist/esm/authz/policies/project/savedViews/canMove.js.map +1 -0
  405. package/dist/esm/authz/policies/project/savedViews/canRead.d.ts +11 -0
  406. package/dist/esm/authz/policies/project/savedViews/canRead.d.ts.map +1 -0
  407. package/dist/esm/authz/policies/project/savedViews/canRead.js +11 -0
  408. package/dist/esm/authz/policies/project/savedViews/canRead.js.map +1 -0
  409. package/dist/esm/authz/policies/project/savedViews/canSetAsHomeView.d.ts +6 -0
  410. package/dist/esm/authz/policies/project/savedViews/canSetAsHomeView.d.ts.map +1 -0
  411. package/dist/esm/authz/policies/project/savedViews/canSetAsHomeView.js +41 -0
  412. package/dist/esm/authz/policies/project/savedViews/canSetAsHomeView.js.map +1 -0
  413. package/dist/esm/authz/policies/project/savedViews/canUpdate.d.ts +6 -0
  414. package/dist/esm/authz/policies/project/savedViews/canUpdate.d.ts.map +1 -0
  415. package/dist/esm/authz/policies/project/savedViews/canUpdate.js +10 -0
  416. package/dist/esm/authz/policies/project/savedViews/canUpdate.js.map +1 -0
  417. package/dist/esm/authz/policies/project/savedViews/canUpdateGroup.d.ts +6 -0
  418. package/dist/esm/authz/policies/project/savedViews/canUpdateGroup.d.ts.map +1 -0
  419. package/dist/esm/authz/policies/project/savedViews/canUpdateGroup.js +10 -0
  420. package/dist/esm/authz/policies/project/savedViews/canUpdateGroup.js.map +1 -0
  421. package/dist/esm/authz/policies/workspace/canCreateDashboards.d.ts +10 -0
  422. package/dist/esm/authz/policies/workspace/canCreateDashboards.d.ts.map +1 -0
  423. package/dist/esm/authz/policies/workspace/canCreateDashboards.js +35 -0
  424. package/dist/esm/authz/policies/workspace/canCreateDashboards.js.map +1 -0
  425. package/dist/esm/authz/policies/workspace/canCreateWorkspace.d.ts +10 -0
  426. package/dist/esm/authz/policies/workspace/canCreateWorkspace.d.ts.map +1 -0
  427. package/dist/esm/authz/policies/workspace/canCreateWorkspace.js +47 -0
  428. package/dist/esm/authz/policies/workspace/canCreateWorkspace.js.map +1 -0
  429. package/dist/esm/authz/policies/workspace/canListDashboards.d.ts +10 -0
  430. package/dist/esm/authz/policies/workspace/canListDashboards.d.ts.map +1 -0
  431. package/dist/esm/authz/policies/workspace/canListDashboards.js +22 -0
  432. package/dist/esm/authz/policies/workspace/canListDashboards.js.map +1 -0
  433. package/dist/esm/authz/policies/workspace/canReadMemberEmail.d.ts +1 -1
  434. package/dist/esm/authz/policies/workspace/canReadMemberEmail.d.ts.map +1 -1
  435. package/dist/esm/authz/policies/workspace/canReadMemberEmail.js +2 -21
  436. package/dist/esm/authz/policies/workspace/canReadMemberEmail.js.map +1 -1
  437. package/dist/esm/authz/policies/workspace/{canUpdateEmbedOptions.d.ts → canUseWorkspacePlanFeature.d.ts} +13 -5
  438. package/dist/esm/authz/policies/workspace/canUseWorkspacePlanFeature.d.ts.map +1 -0
  439. package/dist/esm/authz/policies/workspace/canUseWorkspacePlanFeature.js +23 -0
  440. package/dist/esm/authz/policies/workspace/canUseWorkspacePlanFeature.js.map +1 -0
  441. package/dist/esm/automate/helpers/types.d.ts +313 -51
  442. package/dist/esm/automate/helpers/types.d.ts.map +1 -1
  443. package/dist/esm/automate/helpers/types.js +11 -1
  444. package/dist/esm/automate/helpers/types.js.map +1 -1
  445. package/dist/esm/blobs/index.d.ts +17 -0
  446. package/dist/esm/blobs/index.d.ts.map +1 -0
  447. package/dist/esm/blobs/index.js +111 -0
  448. package/dist/esm/blobs/index.js.map +1 -0
  449. package/dist/esm/core/constants.d.ts +4 -2
  450. package/dist/esm/core/constants.d.ts.map +1 -1
  451. package/dist/esm/core/constants.js +24 -4
  452. package/dist/esm/core/constants.js.map +1 -1
  453. package/dist/esm/core/helpers/encoding.d.ts +2 -0
  454. package/dist/esm/core/helpers/encoding.d.ts.map +1 -0
  455. package/dist/esm/core/helpers/encoding.js +11 -0
  456. package/dist/esm/core/helpers/encoding.js.map +1 -0
  457. package/dist/esm/core/helpers/error.d.ts +11 -0
  458. package/dist/esm/core/helpers/error.d.ts.map +1 -1
  459. package/dist/esm/core/helpers/error.js +56 -1
  460. package/dist/esm/core/helpers/error.js.map +1 -1
  461. package/dist/esm/core/helpers/url.d.ts +24 -0
  462. package/dist/esm/core/helpers/url.d.ts.map +1 -1
  463. package/dist/esm/core/helpers/url.js +30 -0
  464. package/dist/esm/core/helpers/url.js.map +1 -1
  465. package/dist/esm/core/helpers/utility.d.ts +16 -0
  466. package/dist/esm/core/helpers/utility.d.ts.map +1 -1
  467. package/dist/esm/core/helpers/utility.js +19 -0
  468. package/dist/esm/core/helpers/utility.js.map +1 -1
  469. package/dist/esm/core/index.d.ts +2 -0
  470. package/dist/esm/core/index.d.ts.map +1 -1
  471. package/dist/esm/core/index.js +2 -0
  472. package/dist/esm/core/index.js.map +1 -1
  473. package/dist/esm/core/utils/base64.d.ts +3 -0
  474. package/dist/esm/core/utils/base64.d.ts.map +1 -0
  475. package/dist/esm/core/utils/base64.js +21 -0
  476. package/dist/esm/core/utils/base64.js.map +1 -0
  477. package/dist/esm/environment/{multiRegionConfig.d.ts → db.d.ts} +54 -5
  478. package/dist/esm/environment/db.d.ts.map +1 -0
  479. package/dist/esm/environment/{multiRegionConfig.js → db.js} +40 -7
  480. package/dist/esm/environment/db.js.map +1 -0
  481. package/dist/esm/environment/featureFlags.d.ts +25 -0
  482. package/dist/esm/environment/featureFlags.d.ts.map +1 -0
  483. package/dist/esm/environment/featureFlags.js +5 -0
  484. package/dist/esm/environment/featureFlags.js.map +1 -0
  485. package/dist/esm/environment/index.d.ts +2 -15
  486. package/dist/esm/environment/index.d.ts.map +1 -1
  487. package/dist/esm/environment/index.js +44 -7
  488. package/dist/esm/environment/index.js.map +1 -1
  489. package/dist/esm/environment/node.d.ts +5 -0
  490. package/dist/esm/environment/node.d.ts.map +1 -0
  491. package/dist/esm/environment/node.js +11 -0
  492. package/dist/esm/environment/node.js.map +1 -0
  493. package/dist/esm/images/base64.d.ts +2 -0
  494. package/dist/esm/images/base64.d.ts.map +1 -0
  495. package/dist/esm/images/base64.js +15 -0
  496. package/dist/esm/images/base64.js.map +1 -0
  497. package/dist/esm/index.d.ts +1 -0
  498. package/dist/esm/index.d.ts.map +1 -1
  499. package/dist/esm/index.js +1 -0
  500. package/dist/esm/index.js.map +1 -1
  501. package/dist/esm/observability/index.d.ts.map +1 -1
  502. package/dist/esm/observability/index.js +19 -2
  503. package/dist/esm/observability/index.js.map +1 -1
  504. package/dist/esm/queue/config.d.ts +3 -0
  505. package/dist/esm/queue/config.d.ts.map +1 -1
  506. package/dist/esm/queue/config.js +12 -4
  507. package/dist/esm/queue/config.js.map +1 -1
  508. package/dist/esm/rich-text-editor/helpers/index.d.ts +13 -1
  509. package/dist/esm/rich-text-editor/helpers/index.d.ts.map +1 -1
  510. package/dist/esm/rich-text-editor/helpers/index.js +1 -0
  511. package/dist/esm/rich-text-editor/helpers/index.js.map +1 -1
  512. package/dist/esm/saved-views/helpers/defaultGroup.d.ts +23 -0
  513. package/dist/esm/saved-views/helpers/defaultGroup.d.ts.map +1 -0
  514. package/dist/esm/saved-views/helpers/defaultGroup.js +51 -0
  515. package/dist/esm/saved-views/helpers/defaultGroup.js.map +1 -0
  516. package/dist/esm/saved-views/index.d.ts +2 -0
  517. package/dist/esm/saved-views/index.d.ts.map +1 -0
  518. package/dist/esm/saved-views/index.js +2 -0
  519. package/dist/esm/saved-views/index.js.map +1 -0
  520. package/dist/esm/viewer/helpers/route.d.ts +42 -7
  521. package/dist/esm/viewer/helpers/route.d.ts.map +1 -1
  522. package/dist/esm/viewer/helpers/route.js +140 -30
  523. package/dist/esm/viewer/helpers/route.js.map +1 -1
  524. package/dist/esm/viewer/helpers/state.d.ts +59 -6
  525. package/dist/esm/viewer/helpers/state.d.ts.map +1 -1
  526. package/dist/esm/viewer/helpers/state.js +97 -22
  527. package/dist/esm/viewer/helpers/state.js.map +1 -1
  528. package/dist/esm/workers/fileimport/job.d.ts +85 -9
  529. package/dist/esm/workers/fileimport/job.d.ts.map +1 -1
  530. package/dist/esm/workers/fileimport/job.js +20 -9
  531. package/dist/esm/workers/fileimport/job.js.map +1 -1
  532. package/dist/esm/workers/previews/job.d.ts +37 -20
  533. package/dist/esm/workers/previews/job.d.ts.map +1 -1
  534. package/dist/esm/workers/previews/job.js +20 -1
  535. package/dist/esm/workers/previews/job.js.map +1 -1
  536. package/dist/esm/workspaces/helpers/features.d.ts +55 -5
  537. package/dist/esm/workspaces/helpers/features.d.ts.map +1 -1
  538. package/dist/esm/workspaces/helpers/features.js +173 -113
  539. package/dist/esm/workspaces/helpers/features.js.map +1 -1
  540. package/dist/esm/workspaces/helpers/plans.d.ts +1 -0
  541. package/dist/esm/workspaces/helpers/plans.d.ts.map +1 -1
  542. package/dist/esm/workspaces/helpers/plans.js.map +1 -1
  543. package/package.json +110 -8
  544. package/src/acc/helpers/types.ts +42 -0
  545. package/src/acc/index.ts +1 -0
  546. package/src/authz/checks/dashboards.spec.ts +46 -0
  547. package/src/authz/checks/dashboards.ts +14 -0
  548. package/src/authz/domain/authErrors.ts +87 -2
  549. package/src/authz/domain/automate/operations.ts +5 -0
  550. package/src/authz/domain/automate/types.ts +9 -0
  551. package/src/authz/domain/context.ts +8 -0
  552. package/src/authz/domain/dashboards/operations.ts +3 -0
  553. package/src/authz/domain/dashboards/types.ts +6 -0
  554. package/src/authz/domain/loaders.ts +40 -24
  555. package/src/authz/domain/savedViews/operations.ts +11 -0
  556. package/src/authz/domain/savedViews/types.ts +25 -0
  557. package/src/authz/domain/workspaces/operations.ts +3 -1
  558. package/src/authz/domain/workspaces/types.ts +4 -0
  559. package/src/authz/fragments/automate.spec.ts +120 -0
  560. package/src/authz/fragments/automate.ts +36 -0
  561. package/src/authz/fragments/dashboards.ts +90 -0
  562. package/src/authz/fragments/projects.spec.ts +135 -10
  563. package/src/authz/fragments/projects.ts +53 -1
  564. package/src/authz/fragments/savedViews.spec.ts +551 -0
  565. package/src/authz/fragments/savedViews.ts +245 -0
  566. package/src/authz/fragments/workspaces.spec.ts +234 -7
  567. package/src/authz/fragments/workspaces.ts +84 -0
  568. package/src/authz/helpers/graphql.ts +2 -2
  569. package/src/authz/index.ts +1 -0
  570. package/src/authz/policies/automate/function/canEditFunction.spec.ts +87 -0
  571. package/src/authz/policies/automate/function/canEditFunction.ts +46 -0
  572. package/src/authz/policies/dashboard/canCreateToken.ts +89 -0
  573. package/src/authz/policies/dashboard/canDelete.ts +84 -0
  574. package/src/authz/policies/dashboard/canEdit.ts +79 -0
  575. package/src/authz/policies/dashboard/canRead.ts +83 -0
  576. package/src/authz/policies/index.spec.ts +13 -0
  577. package/src/authz/policies/index.ts +52 -4
  578. package/src/authz/policies/project/automation/canCreate.spec.ts +2 -1
  579. package/src/authz/policies/project/automation/canDelete.spec.ts +2 -1
  580. package/src/authz/policies/project/automation/canUpdate.spec.ts +2 -1
  581. package/src/authz/policies/project/canBroadcastActivity.spec.ts +2 -2
  582. package/src/authz/policies/project/canDelete.spec.ts +2 -2
  583. package/src/authz/policies/project/canLeave.spec.ts +2 -2
  584. package/src/authz/policies/project/canLoad.spec.ts +17 -1
  585. package/src/authz/policies/project/canLoad.ts +7 -0
  586. package/src/authz/policies/project/canMoveToWorkspace.spec.ts +6 -10
  587. package/src/authz/policies/project/canPublish.spec.ts +2 -1
  588. package/src/authz/policies/project/canRead.spec.ts +2 -3
  589. package/src/authz/policies/project/canReadAccIntegrationSettings.spec.ts +133 -0
  590. package/src/authz/policies/project/canReadAccIntegrationSettings.ts +87 -0
  591. package/src/authz/policies/project/canReadSettings.spec.ts +2 -2
  592. package/src/authz/policies/project/canReadWebhooks.spec.ts +2 -2
  593. package/src/authz/policies/project/canUpdate.spec.ts +2 -5
  594. package/src/authz/policies/project/canUpdateEmbedTokens.spec.ts +132 -0
  595. package/src/authz/policies/project/canUpdateEmbedTokens.ts +101 -0
  596. package/src/authz/policies/project/comment/canArchive.spec.ts +6 -5
  597. package/src/authz/policies/project/comment/canCreate.spec.ts +2 -2
  598. package/src/authz/policies/project/comment/canEdit.spec.ts +6 -5
  599. package/src/authz/policies/project/model/canDelete.spec.ts +6 -2
  600. package/src/authz/policies/project/model/canUpdate.spec.ts +2 -5
  601. package/src/authz/policies/project/savedViews/canCreate.spec.ts +186 -0
  602. package/src/authz/policies/project/savedViews/canCreate.ts +81 -0
  603. package/src/authz/policies/project/savedViews/canCreateSavedViewGroupToken.spec.ts +250 -0
  604. package/src/authz/policies/project/savedViews/canCreateSavedViewGroupToken.ts +117 -0
  605. package/src/authz/policies/project/savedViews/canEditDescription.spec.ts +206 -0
  606. package/src/authz/policies/project/savedViews/canEditDescription.ts +67 -0
  607. package/src/authz/policies/project/savedViews/canEditTitle.spec.ts +204 -0
  608. package/src/authz/policies/project/savedViews/canEditTitle.ts +67 -0
  609. package/src/authz/policies/project/savedViews/canMove.spec.ts +204 -0
  610. package/src/authz/policies/project/savedViews/canMove.ts +67 -0
  611. package/src/authz/policies/project/savedViews/canRead.ts +72 -0
  612. package/src/authz/policies/project/savedViews/canSetAsHomeView.spec.ts +248 -0
  613. package/src/authz/policies/project/savedViews/canSetAsHomeView.ts +108 -0
  614. package/src/authz/policies/project/savedViews/canUpdate.spec.ts +191 -0
  615. package/src/authz/policies/project/savedViews/canUpdate.ts +67 -0
  616. package/src/authz/policies/project/savedViews/canUpdateGroup.spec.ts +227 -0
  617. package/src/authz/policies/project/savedViews/canUpdateGroup.ts +63 -0
  618. package/src/authz/policies/project/version/canUpdate.spec.ts +6 -5
  619. package/src/authz/policies/workspace/canCreateDashboards.ts +71 -0
  620. package/src/authz/policies/workspace/canCreateWorkspace.spec.ts +380 -0
  621. package/src/authz/policies/workspace/canCreateWorkspace.ts +77 -0
  622. package/src/authz/policies/workspace/canListDashboards.ts +53 -0
  623. package/src/authz/policies/workspace/canReadMemberEmail.spec.ts +25 -36
  624. package/src/authz/policies/workspace/canReadMemberEmail.ts +11 -34
  625. package/src/authz/policies/workspace/canReceiveProjectsUpdatedMessage.spec.ts +2 -5
  626. package/src/authz/policies/workspace/{canUpdateEmbedOptions.spec.ts → canUseWorkspacePlanFeature.spec.ts} +40 -38
  627. package/src/authz/policies/workspace/canUseWorkspacePlanFeature.ts +69 -0
  628. package/src/automate/helpers/types.ts +17 -3
  629. package/src/blobs/index.ts +121 -0
  630. package/src/core/constants.ts +25 -4
  631. package/src/core/helpers/encoding.ts +12 -0
  632. package/src/core/helpers/error.spec.ts +215 -0
  633. package/src/core/helpers/error.ts +58 -1
  634. package/src/core/helpers/url.ts +33 -0
  635. package/src/core/helpers/utility.spec.ts +19 -1
  636. package/src/core/helpers/utility.ts +31 -0
  637. package/src/core/index.ts +2 -0
  638. package/src/core/utils/base64.spec.ts +31 -0
  639. package/src/core/utils/base64.ts +19 -0
  640. package/src/environment/db.spec.ts +48 -0
  641. package/src/environment/{multiRegionConfig.ts → db.ts} +62 -8
  642. package/src/environment/featureFlags.ts +25 -0
  643. package/src/environment/index.spec.ts +126 -0
  644. package/src/environment/index.ts +51 -24
  645. package/src/environment/node.ts +11 -0
  646. package/src/images/base64.spec.ts +42 -0
  647. package/src/images/base64.ts +15 -0
  648. package/src/index.ts +1 -0
  649. package/src/observability/index.ts +22 -2
  650. package/src/queue/config.ts +18 -6
  651. package/src/rich-text-editor/helpers/index.ts +15 -1
  652. package/src/saved-views/helpers/defaultGroup.spec.ts +12 -0
  653. package/src/saved-views/helpers/defaultGroup.ts +70 -0
  654. package/src/saved-views/index.ts +1 -0
  655. package/src/tests/fakes.ts +55 -4
  656. package/src/viewer/helpers/route.spec.ts +353 -0
  657. package/src/viewer/helpers/route.ts +180 -25
  658. package/src/viewer/helpers/state.spec.ts +252 -0
  659. package/src/viewer/helpers/state.ts +158 -27
  660. package/src/workers/fileimport/job.ts +40 -21
  661. package/src/workers/previews/job.ts +23 -1
  662. package/src/workspaces/helpers/features.spec.ts +99 -0
  663. package/src/workspaces/helpers/features.ts +215 -119
  664. package/src/workspaces/helpers/plans.ts +1 -0
  665. package/dist/commonjs/authz/policies/workspace/canUpdateEmbedOptions.d.ts.map +0 -1
  666. package/dist/commonjs/authz/policies/workspace/canUpdateEmbedOptions.js +0 -44
  667. package/dist/commonjs/authz/policies/workspace/canUpdateEmbedOptions.js.map +0 -1
  668. package/dist/commonjs/environment/multiRegionConfig.d.ts.map +0 -1
  669. package/dist/commonjs/environment/multiRegionConfig.js.map +0 -1
  670. package/dist/esm/authz/policies/workspace/canUpdateEmbedOptions.d.ts.map +0 -1
  671. package/dist/esm/authz/policies/workspace/canUpdateEmbedOptions.js +0 -40
  672. package/dist/esm/authz/policies/workspace/canUpdateEmbedOptions.js.map +0 -1
  673. package/dist/esm/environment/multiRegionConfig.d.ts.map +0 -1
  674. package/dist/esm/environment/multiRegionConfig.js.map +0 -1
  675. package/src/authz/policies/workspace/canUpdateEmbedOptions.ts +0 -89
@@ -0,0 +1,245 @@
1
+ import { err, ok } from 'true-myth/result'
2
+ import {
3
+ ProjectNoAccessError,
4
+ ProjectNotEnoughPermissionsError,
5
+ ProjectNotFoundError,
6
+ SavedViewGroupNotFoundError,
7
+ SavedViewNoAccessError,
8
+ SavedViewNotFoundError,
9
+ ServerNoAccessError,
10
+ ServerNoSessionError,
11
+ ServerNotEnoughPermissionsError,
12
+ UngroupedSavedViewGroupLockError,
13
+ WorkspaceNoAccessError,
14
+ WorkspaceNotEnoughPermissionsError,
15
+ WorkspacePlanNoFeatureAccessError,
16
+ WorkspaceReadOnlyError,
17
+ WorkspacesNotEnabledError,
18
+ WorkspaceSsoSessionNoAccessError
19
+ } from '../domain/authErrors.js'
20
+ import {
21
+ MaybeUserContext,
22
+ ProjectContext,
23
+ SavedViewContext,
24
+ SavedViewGroupContext
25
+ } from '../domain/context.js'
26
+ import { Loaders } from '../domain/loaders.js'
27
+ import { AuthPolicyEnsureFragment } from '../domain/policies.js'
28
+ import { SavedViewVisibility } from '../domain/savedViews/types.js'
29
+ import {
30
+ ensureCanUseProjectWorkspacePlanFeatureFragment,
31
+ ensureImplicitProjectMemberWithWriteAccessFragment
32
+ } from './projects.js'
33
+ import { Roles } from '../../core/constants.js'
34
+ import { WorkspacePlanFeatures } from '../../workspaces/index.js'
35
+ import { isUngroupedGroup } from '../../saved-views/index.js'
36
+ import { StringEnum, StringEnumValues, throwUncoveredError } from '../../core/index.js'
37
+
38
+ export const WriteTypes = StringEnum([
39
+ 'UpdateGeneral',
40
+ 'MoveView',
41
+ 'EditTitle',
42
+ 'EditDescription',
43
+ 'SetHomeView'
44
+ ])
45
+ export type WriteTypes = StringEnumValues<typeof WriteTypes>
46
+
47
+ /**
48
+ * Ensure the user can access the view
49
+ */
50
+ export const ensureCanAccessSavedViewFragment: AuthPolicyEnsureFragment<
51
+ | typeof Loaders.getSavedView
52
+ | typeof Loaders.getProject
53
+ | typeof Loaders.getEnv
54
+ | typeof Loaders.getServerRole
55
+ | typeof Loaders.getWorkspaceRole
56
+ | typeof Loaders.getWorkspace
57
+ | typeof Loaders.getWorkspacePlan
58
+ | typeof Loaders.getWorkspaceSsoProvider
59
+ | typeof Loaders.getWorkspaceSsoSession
60
+ | typeof Loaders.getAdminOverrideEnabled
61
+ | typeof Loaders.getProjectRole,
62
+ MaybeUserContext &
63
+ ProjectContext &
64
+ SavedViewContext & {
65
+ access: 'read' | WriteTypes
66
+ /**
67
+ * In some cases we want to just ignore a view being non-existant, instead of throwing
68
+ */
69
+ allowNonExistent?: boolean
70
+ },
71
+ InstanceType<
72
+ | typeof SavedViewNotFoundError
73
+ | typeof SavedViewNoAccessError
74
+ | typeof ProjectNotFoundError
75
+ | typeof ServerNoAccessError
76
+ | typeof ServerNoSessionError
77
+ | typeof ProjectNoAccessError
78
+ | typeof WorkspaceNoAccessError
79
+ | typeof WorkspaceSsoSessionNoAccessError
80
+ | typeof ServerNotEnoughPermissionsError
81
+ | typeof ProjectNotEnoughPermissionsError
82
+ | typeof WorkspaceNotEnoughPermissionsError
83
+ | typeof WorkspacesNotEnabledError
84
+ | typeof WorkspaceReadOnlyError
85
+ | typeof WorkspacePlanNoFeatureAccessError
86
+ >
87
+ > =
88
+ (loaders) =>
89
+ async ({ userId, projectId, savedViewId, access, allowNonExistent }) => {
90
+ const canUseSavedViews = await ensureCanUseProjectWorkspacePlanFeatureFragment(
91
+ loaders
92
+ )({
93
+ projectId,
94
+ feature: WorkspacePlanFeatures.SavedViews
95
+ })
96
+ if (canUseSavedViews.isErr) return err(canUseSavedViews.error)
97
+
98
+ const savedView = await loaders.getSavedView({ projectId, savedViewId })
99
+ if (!savedView) {
100
+ if (allowNonExistent) return ok()
101
+ return err(new SavedViewNotFoundError())
102
+ }
103
+ const isPublic = savedView.visibility === SavedViewVisibility.public
104
+ const isAuthor = savedView.authorId === userId
105
+
106
+ // Validate read access
107
+ if (access === 'read') {
108
+ if (isAuthor || isPublic) {
109
+ return ok()
110
+ } else {
111
+ return err(
112
+ new SavedViewNoAccessError({
113
+ message: 'You do not have permission to read this saved view.'
114
+ })
115
+ )
116
+ }
117
+ }
118
+
119
+ // Validate write access
120
+ // Check for write access to project first
121
+ const ensuredWriteAccess = await ensureImplicitProjectMemberWithWriteAccessFragment(
122
+ loaders
123
+ )({
124
+ userId,
125
+ projectId
126
+ })
127
+ if (ensuredWriteAccess.isErr) {
128
+ if (ensuredWriteAccess.error.code === ProjectNotEnoughPermissionsError.code)
129
+ return err(
130
+ new ProjectNotEnoughPermissionsError({
131
+ message:
132
+ "Your role on this project doesn't give you permission to update views."
133
+ })
134
+ )
135
+ return err(ensuredWriteAccess.error)
136
+ }
137
+
138
+ if (isAuthor) {
139
+ // authors can write whatever
140
+ return ok()
141
+ }
142
+
143
+ // Non-author project writers can make specific changes
144
+ switch (access) {
145
+ case WriteTypes.MoveView:
146
+ case WriteTypes.EditTitle:
147
+ case WriteTypes.EditDescription:
148
+ case WriteTypes.SetHomeView:
149
+ return ok()
150
+ case WriteTypes.UpdateGeneral:
151
+ return err(
152
+ new SavedViewNoAccessError({
153
+ message: 'You do not have permission to edit the view in this way'
154
+ })
155
+ )
156
+ default:
157
+ throwUncoveredError(access)
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Ensure the user can access the view group
163
+ */
164
+ export const ensureCanAccessSavedViewGroupFragment: AuthPolicyEnsureFragment<
165
+ | typeof Loaders.getSavedViewGroup
166
+ | typeof Loaders.getProject
167
+ | typeof Loaders.getEnv
168
+ | typeof Loaders.getServerRole
169
+ | typeof Loaders.getWorkspaceRole
170
+ | typeof Loaders.getWorkspace
171
+ | typeof Loaders.getWorkspacePlan
172
+ | typeof Loaders.getWorkspaceSsoProvider
173
+ | typeof Loaders.getWorkspaceSsoSession
174
+ | typeof Loaders.getProjectRole,
175
+ MaybeUserContext &
176
+ ProjectContext &
177
+ SavedViewGroupContext & {
178
+ access: 'read' | 'write'
179
+ },
180
+ InstanceType<
181
+ | typeof SavedViewGroupNotFoundError
182
+ | typeof ProjectNotFoundError
183
+ | typeof ServerNoAccessError
184
+ | typeof ServerNoSessionError
185
+ | typeof ProjectNoAccessError
186
+ | typeof WorkspaceNoAccessError
187
+ | typeof WorkspaceSsoSessionNoAccessError
188
+ | typeof ServerNotEnoughPermissionsError
189
+ | typeof ProjectNotEnoughPermissionsError
190
+ | typeof WorkspaceNotEnoughPermissionsError
191
+ | typeof WorkspacesNotEnabledError
192
+ | typeof WorkspaceReadOnlyError
193
+ | typeof WorkspacePlanNoFeatureAccessError
194
+ | typeof UngroupedSavedViewGroupLockError
195
+ >
196
+ > =
197
+ (loaders) =>
198
+ async ({ userId, projectId, savedViewGroupId, access }) => {
199
+ const canUseSavedViews = await ensureCanUseProjectWorkspacePlanFeatureFragment(
200
+ loaders
201
+ )({
202
+ projectId,
203
+ feature: WorkspacePlanFeatures.SavedViews
204
+ })
205
+ if (canUseSavedViews.isErr) return err(canUseSavedViews.error)
206
+
207
+ const savedViewGroup = await loaders.getSavedViewGroup({
208
+ projectId,
209
+ groupId: savedViewGroupId
210
+ })
211
+ if (!savedViewGroup) return err(new SavedViewGroupNotFoundError())
212
+
213
+ if (access === 'read') {
214
+ return ok() // read access available to everyone who has access to project
215
+ }
216
+
217
+ // Prevent default group updates (as it doesnt exist)
218
+ if (isUngroupedGroup(savedViewGroup.id)) {
219
+ return err(new UngroupedSavedViewGroupLockError())
220
+ }
221
+
222
+ // groups have no visibility (yet), so authors AND project owners can mutate
223
+ const isAuthor = savedViewGroup.authorId === userId
224
+ const expectedProjectRole = isAuthor ? Roles.Stream.Contributor : Roles.Stream.Owner
225
+
226
+ const ensuredWriteAccess = await ensureImplicitProjectMemberWithWriteAccessFragment(
227
+ loaders
228
+ )({
229
+ userId,
230
+ projectId,
231
+ role: expectedProjectRole
232
+ })
233
+ if (ensuredWriteAccess.isErr) {
234
+ if (ensuredWriteAccess.error.code === ProjectNotEnoughPermissionsError.code)
235
+ return err(
236
+ new ProjectNotEnoughPermissionsError({
237
+ message:
238
+ "Your role on this project doesn't give you permission to update view groups."
239
+ })
240
+ )
241
+ return err(ensuredWriteAccess.error)
242
+ }
243
+
244
+ return ok()
245
+ }
@@ -1,16 +1,35 @@
1
1
  import { describe, expect, it } from 'vitest'
2
2
  import {
3
3
  ensureWorkspaceRoleAndSessionFragment,
4
- ensureWorkspacesEnabledFragment
4
+ ensureWorkspacesEnabledFragment,
5
+ ensureUserIsWorkspaceAdminFragment,
6
+ ensureCanUseWorkspacePlanFeatureFragment
5
7
  } from './workspaces.js'
6
8
  import cryptoRandomString from 'crypto-random-string'
7
9
  import {
10
+ ServerNoAccessError,
11
+ ServerNoSessionError,
12
+ ServerNotEnoughPermissionsError,
8
13
  WorkspaceNoAccessError,
14
+ WorkspaceNotEnoughPermissionsError,
15
+ WorkspacePlanNoFeatureAccessError,
16
+ WorkspaceReadOnlyError,
9
17
  WorkspacesNotEnabledError,
10
18
  WorkspaceSsoSessionNoAccessError
11
19
  } from '../domain/authErrors.js'
12
20
  import { OverridesOf } from '../../tests/helpers/types.js'
13
21
  import { parseFeatureFlags } from '../../environment/index.js'
22
+ import { Roles } from '../../core/constants.js'
23
+ import {
24
+ getEnvFake,
25
+ getWorkspaceFake,
26
+ getWorkspacePlanFake
27
+ } from '../../tests/fakes.js'
28
+ import {
29
+ PaidWorkspacePlans,
30
+ PaidWorkspacePlanStatuses,
31
+ WorkspacePlanFeatures
32
+ } from '../../workspaces/index.js'
14
33
 
15
34
  describe('ensureWorkspaceRoleAndSessionFragment', () => {
16
35
  it('hides non existing workspaces behind a WorkspaceNoAccessError', async () => {
@@ -35,7 +54,7 @@ describe('ensureWorkspaceRoleAndSessionFragment', () => {
35
54
  })
36
55
  it('returns WorkspaceNoAccessError if the user does not have a workspace role', async () => {
37
56
  const result = await ensureWorkspaceRoleAndSessionFragment({
38
- getWorkspace: async () => ({
57
+ getWorkspace: getWorkspaceFake({
39
58
  id: 'aaa',
40
59
  slug: 'bbb'
41
60
  }),
@@ -56,7 +75,7 @@ describe('ensureWorkspaceRoleAndSessionFragment', () => {
56
75
  })
57
76
  it('returns ok w/o checking session if user is a workspace guest', async () => {
58
77
  const result = await ensureWorkspaceRoleAndSessionFragment({
59
- getWorkspace: async () => ({
78
+ getWorkspace: getWorkspaceFake({
60
79
  id: 'aaa',
61
80
  slug: 'bbb'
62
81
  }),
@@ -75,7 +94,7 @@ describe('ensureWorkspaceRoleAndSessionFragment', () => {
75
94
  })
76
95
  it('returns just(ok()) if user is a member and workspace has no SSO provider', async () => {
77
96
  const result = await ensureWorkspaceRoleAndSessionFragment({
78
- getWorkspace: async () => ({
97
+ getWorkspace: getWorkspaceFake({
79
98
  id: 'aaa',
80
99
  slug: 'bbb'
81
100
  }),
@@ -92,7 +111,7 @@ describe('ensureWorkspaceRoleAndSessionFragment', () => {
92
111
  })
93
112
  it('returns WorkspaceSsoSessionInvalidError if user does not have an SSO session', async () => {
94
113
  const result = ensureWorkspaceRoleAndSessionFragment({
95
- getWorkspace: async () => ({
114
+ getWorkspace: getWorkspaceFake({
96
115
  id: 'aaa',
97
116
  slug: 'bbb'
98
117
  }),
@@ -120,7 +139,7 @@ describe('ensureWorkspaceRoleAndSessionFragment', () => {
120
139
  validUntil.setDate(validUntil.getDate() - 1)
121
140
 
122
141
  const result = await ensureWorkspaceRoleAndSessionFragment({
123
- getWorkspace: async () => ({
142
+ getWorkspace: getWorkspaceFake({
124
143
  id: 'aaa',
125
144
  slug: 'bbb'
126
145
  }),
@@ -148,7 +167,7 @@ describe('ensureWorkspaceRoleAndSessionFragment', () => {
148
167
  validUntil.setDate(validUntil.getDate() + 100)
149
168
 
150
169
  const result = await ensureWorkspaceRoleAndSessionFragment({
151
- getWorkspace: async () => ({
170
+ getWorkspace: getWorkspaceFake({
152
171
  id: 'aaa',
153
172
  slug: 'bbb'
154
173
  }),
@@ -194,3 +213,211 @@ describe('ensureWorkspacesEnabledFragment', () => {
194
213
  })
195
214
  })
196
215
  })
216
+
217
+ describe('ensureUserIsWorkspaceAdminFragment', () => {
218
+ const buildEnsureUserIsWorkspaAdminFragment = (
219
+ overrides?: Partial<Parameters<typeof ensureUserIsWorkspaceAdminFragment>[0]>
220
+ ) => {
221
+ const workspaceId = cryptoRandomString({ length: 9 })
222
+
223
+ return ensureUserIsWorkspaceAdminFragment({
224
+ getEnv: async () =>
225
+ parseFeatureFlags({
226
+ FF_WORKSPACES_MODULE_ENABLED: 'true'
227
+ }),
228
+ getServerRole: async () => Roles.Server.Admin,
229
+ getWorkspace: getWorkspaceFake({
230
+ id: workspaceId,
231
+ slug: cryptoRandomString({ length: 9 })
232
+ }),
233
+ getWorkspaceRole: async () => Roles.Workspace.Admin,
234
+ getWorkspaceSsoProvider: async () => null,
235
+ getWorkspaceSsoSession: async () => null,
236
+ getWorkspacePlan: getWorkspacePlanFake({ workspaceId }),
237
+ ...overrides
238
+ })
239
+ }
240
+
241
+ const getPolicyArgs = () => ({
242
+ userId: cryptoRandomString({ length: 9 }),
243
+ workspaceId: cryptoRandomString({ length: 9 })
244
+ })
245
+ it('returns error if workspaces is not enabled', async () => {
246
+ const policy = buildEnsureUserIsWorkspaAdminFragment({
247
+ getEnv: async () => parseFeatureFlags({ FF_WORKSPACES_MODULE_ENABLED: 'false' })
248
+ })
249
+
250
+ const result = await policy({
251
+ ...getPolicyArgs(),
252
+ userId: undefined
253
+ })
254
+
255
+ expect(result).toBeAuthErrorResult({
256
+ code: WorkspacesNotEnabledError.code
257
+ })
258
+ })
259
+ it('returns error if user is not logged in', async () => {
260
+ const policy = buildEnsureUserIsWorkspaAdminFragment()
261
+
262
+ const result = await policy({
263
+ ...getPolicyArgs(),
264
+ userId: undefined
265
+ })
266
+
267
+ expect(result).toBeAuthErrorResult({
268
+ code: ServerNoSessionError.code
269
+ })
270
+ })
271
+
272
+ it('returns error if user is not found', async () => {
273
+ const policy = buildEnsureUserIsWorkspaAdminFragment({
274
+ getServerRole: async () => null
275
+ })
276
+
277
+ const result = await policy(getPolicyArgs())
278
+
279
+ expect(result).toBeAuthErrorResult({
280
+ code: ServerNoAccessError.code
281
+ })
282
+ })
283
+
284
+ it('returns error if user is a server guest', async () => {
285
+ const policy = buildEnsureUserIsWorkspaAdminFragment({
286
+ getServerRole: async () => Roles.Server.Guest
287
+ })
288
+
289
+ const result = await policy(getPolicyArgs())
290
+
291
+ expect(result).toBeAuthErrorResult({
292
+ code: ServerNotEnoughPermissionsError.code
293
+ })
294
+ })
295
+
296
+ it('returns error if workspace does not exist', async () => {
297
+ const policy = buildEnsureUserIsWorkspaAdminFragment({
298
+ getWorkspace: async () => null
299
+ })
300
+
301
+ const result = await policy(getPolicyArgs())
302
+
303
+ expect(result).toBeAuthErrorResult({
304
+ code: WorkspaceNoAccessError.code
305
+ })
306
+ })
307
+
308
+ it('returns error if user is not workspace admin', async () => {
309
+ const policy = buildEnsureUserIsWorkspaAdminFragment({
310
+ getWorkspaceRole: async () => Roles.Workspace.Member
311
+ })
312
+
313
+ const result = await policy(getPolicyArgs())
314
+
315
+ expect(result).toBeAuthErrorResult({
316
+ code: WorkspaceNotEnoughPermissionsError.code
317
+ })
318
+ })
319
+
320
+ it('returns ok if user is workspace admin', async () => {
321
+ const policy = buildEnsureUserIsWorkspaAdminFragment()
322
+
323
+ const result = await policy(getPolicyArgs())
324
+
325
+ expect(result).toBeAuthOKResult()
326
+ })
327
+ })
328
+
329
+ describe('ensureCanUseWorkspacePlanFeatureFragment', () => {
330
+ const buildSUT = (
331
+ overrides?: OverridesOf<typeof ensureCanUseWorkspacePlanFeatureFragment>
332
+ ) =>
333
+ ensureCanUseWorkspacePlanFeatureFragment({
334
+ getEnv: getEnvFake({
335
+ FF_WORKSPACES_MODULE_ENABLED: true,
336
+ FF_SAVED_VIEWS_ENABLED: true
337
+ }),
338
+ getWorkspacePlan: getWorkspacePlanFake({
339
+ name: PaidWorkspacePlans.Pro,
340
+ status: PaidWorkspacePlanStatuses.Valid
341
+ }),
342
+ ...overrides
343
+ })
344
+
345
+ it('succeeds w/ valid workspace w/ feature access', async () => {
346
+ const sut = buildSUT()
347
+
348
+ const result = await sut({
349
+ workspaceId: cryptoRandomString({ length: 10 }),
350
+ feature: WorkspacePlanFeatures.HideSynchronizedBranding
351
+ })
352
+
353
+ expect(result).toBeOKResult()
354
+ })
355
+
356
+ it('fails if workspaces disabled', async () => {
357
+ const sut = buildSUT({
358
+ getEnv: getEnvFake({
359
+ FF_WORKSPACES_MODULE_ENABLED: false
360
+ })
361
+ })
362
+
363
+ const result = await sut({
364
+ workspaceId: cryptoRandomString({ length: 10 }),
365
+ feature: WorkspacePlanFeatures.HideSynchronizedBranding
366
+ })
367
+
368
+ expect(result).toBeAuthErrorResult({
369
+ code: WorkspacesNotEnabledError.code
370
+ })
371
+ })
372
+
373
+ it('fails if workspace plan readonly', async () => {
374
+ const sut = buildSUT({
375
+ getWorkspacePlan: getWorkspacePlanFake({
376
+ name: PaidWorkspacePlans.Pro,
377
+ status: PaidWorkspacePlanStatuses.Canceled
378
+ })
379
+ })
380
+
381
+ const result = await sut({
382
+ workspaceId: cryptoRandomString({ length: 10 }),
383
+ feature: WorkspacePlanFeatures.HideSynchronizedBranding
384
+ })
385
+
386
+ expect(result).toBeAuthErrorResult({
387
+ code: WorkspaceReadOnlyError.code
388
+ })
389
+ })
390
+
391
+ it('fails w/o plan', async () => {
392
+ const sut = buildSUT({
393
+ getWorkspacePlan: async () => null
394
+ })
395
+
396
+ const result = await sut({
397
+ workspaceId: cryptoRandomString({ length: 10 }),
398
+ feature: WorkspacePlanFeatures.HideSynchronizedBranding
399
+ })
400
+
401
+ expect(result).toBeAuthErrorResult({
402
+ code: WorkspaceNoAccessError.code
403
+ })
404
+ })
405
+
406
+ it('it fails if plan doesnt have access to feature', async () => {
407
+ const sut = buildSUT({
408
+ getWorkspacePlan: getWorkspacePlanFake({
409
+ name: PaidWorkspacePlans.Team,
410
+ status: PaidWorkspacePlanStatuses.Valid
411
+ })
412
+ })
413
+
414
+ const result = await sut({
415
+ workspaceId: cryptoRandomString({ length: 10 }),
416
+ feature: WorkspacePlanFeatures.HideSynchronizedBranding
417
+ })
418
+
419
+ expect(result).toBeAuthErrorResult({
420
+ code: WorkspacePlanNoFeatureAccessError.code
421
+ })
422
+ })
423
+ })
@@ -7,10 +7,14 @@ import {
7
7
  import {
8
8
  PersonalProjectsLimitedError,
9
9
  ProjectNotFoundError,
10
+ ServerNoAccessError,
11
+ ServerNoSessionError,
12
+ ServerNotEnoughPermissionsError,
10
13
  WorkspaceLimitsReachedError,
11
14
  WorkspaceNoAccessError,
12
15
  WorkspaceNoEditorSeatError,
13
16
  WorkspaceNotEnoughPermissionsError,
17
+ WorkspacePlanNoFeatureAccessError,
14
18
  WorkspaceReadOnlyError,
15
19
  WorkspacesNotEnabledError,
16
20
  WorkspaceSsoSessionNoAccessError
@@ -25,6 +29,11 @@ import {
25
29
  } from '../domain/context.js'
26
30
  import { isWorkspacePlanStatusReadOnly } from '../../workspaces/helpers/plans.js'
27
31
  import { hasEditorSeat } from '../checks/workspaceSeat.js'
32
+ import { ensureMinimumServerRoleFragment } from './server.js'
33
+ import {
34
+ WorkspacePlanFeatures,
35
+ workspacePlanHasAccessToFeature
36
+ } from '../../workspaces/helpers/features.js'
28
37
 
29
38
  /**
30
39
  * Ensure user has a workspace role, and a valid SSO session (if SSO is configured)
@@ -303,3 +312,78 @@ export const ensureModelCanBeCreatedFragment: AuthPolicyEnsureFragment<
303
312
  return ok()
304
313
  }
305
314
  }
315
+
316
+ export const ensureUserIsWorkspaceAdminFragment: AuthPolicyEnsureFragment<
317
+ | typeof Loaders.getEnv
318
+ | typeof Loaders.getServerRole
319
+ | typeof Loaders.getWorkspace
320
+ | typeof Loaders.getWorkspaceRole
321
+ | typeof Loaders.getWorkspaceSsoProvider
322
+ | typeof Loaders.getWorkspaceSsoSession
323
+ | typeof Loaders.getWorkspacePlan,
324
+ WorkspaceContext & MaybeUserContext,
325
+ InstanceType<
326
+ | typeof WorkspaceNoAccessError
327
+ | typeof WorkspaceSsoSessionNoAccessError
328
+ | typeof WorkspacesNotEnabledError
329
+ | typeof ServerNoSessionError
330
+ | typeof ServerNoAccessError
331
+ | typeof ServerNotEnoughPermissionsError
332
+ | typeof WorkspaceNotEnoughPermissionsError
333
+ >
334
+ > =
335
+ (loaders) =>
336
+ async ({ userId, workspaceId }) => {
337
+ const ensuredWorkspacesEnabled = await ensureWorkspacesEnabledFragment(loaders)({})
338
+ if (ensuredWorkspacesEnabled.isErr) return err(ensuredWorkspacesEnabled.error)
339
+
340
+ const ensuredServerRole = await ensureMinimumServerRoleFragment(loaders)({
341
+ userId,
342
+ role: Roles.Server.User
343
+ })
344
+
345
+ if (ensuredServerRole.isErr) return err(ensuredServerRole.error)
346
+
347
+ const ensuredWorkspaceAccess = await ensureWorkspaceRoleAndSessionFragment(loaders)(
348
+ {
349
+ userId: userId!,
350
+ workspaceId,
351
+ role: Roles.Workspace.Admin
352
+ }
353
+ )
354
+ if (ensuredWorkspaceAccess.isErr) return err(ensuredWorkspaceAccess.error)
355
+ return ok()
356
+ }
357
+
358
+ /**
359
+ * Check if workspace has access to a specific feature
360
+ */
361
+ export const ensureCanUseWorkspacePlanFeatureFragment: AuthPolicyEnsureFragment<
362
+ typeof Loaders.getWorkspacePlan | typeof Loaders.getEnv,
363
+ WorkspaceContext & { feature: WorkspacePlanFeatures },
364
+ | InstanceType<typeof WorkspaceNoAccessError>
365
+ | InstanceType<typeof WorkspaceReadOnlyError>
366
+ | InstanceType<typeof WorkspacePlanNoFeatureAccessError>
367
+ | InstanceType<typeof WorkspacesNotEnabledError>
368
+ > =
369
+ (loaders) =>
370
+ async ({ workspaceId, feature }) => {
371
+ const ensuredWorkspacesEnabled = await ensureWorkspacesEnabledFragment(loaders)({})
372
+ if (ensuredWorkspacesEnabled.isErr) return err(ensuredWorkspacesEnabled.error)
373
+
374
+ const ensuredNotReadOnly = await ensureWorkspaceNotReadOnlyFragment(loaders)({
375
+ workspaceId
376
+ })
377
+ if (ensuredNotReadOnly.isErr) return err(ensuredNotReadOnly.error)
378
+
379
+ const workspacePlan = await loaders.getWorkspacePlan({ workspaceId })
380
+ if (!workspacePlan) return err(new WorkspaceNoAccessError())
381
+
382
+ const featureFlags = await loaders.getEnv()
383
+ const canUseFeature = workspacePlanHasAccessToFeature({
384
+ plan: workspacePlan.name,
385
+ feature,
386
+ featureFlags
387
+ })
388
+ return canUseFeature ? ok() : err(new WorkspacePlanNoFeatureAccessError())
389
+ }
@@ -6,7 +6,7 @@ export type GraphqlPermissionCheckResult = {
6
6
  authorized: boolean
7
7
  code: string
8
8
  message: string
9
- payload: unknown
9
+ payload: Record<string, unknown> | null
10
10
  }
11
11
 
12
12
  export const toGraphqlResult = (
@@ -25,7 +25,7 @@ export const toGraphqlResult = (
25
25
  authorized: false,
26
26
  code: error.code,
27
27
  message: error.message,
28
- payload: error.payload || null
28
+ payload: (error.payload || null) as Record<string, unknown> | null
29
29
  }
30
30
  }
31
31
  }
@@ -8,3 +8,4 @@ export * from './helpers/graphql.js'
8
8
  export * from './domain/authErrors.js'
9
9
  export { AuthPolicyResult } from './domain/policies.js'
10
10
  export { PersonalProjectsLimits } from './domain/projects/limits.js'
11
+ export * from './domain/workspaces/operations.js'