@budibase/backend-core 2.9.38 → 2.9.39-alpha.1

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 (494) hide show
  1. package/dist/index.js +3027 -3025
  2. package/dist/index.js.map +4 -4
  3. package/dist/index.js.meta.json +1 -1
  4. package/dist/package.json +5 -5
  5. package/dist/plugins.js +1 -1
  6. package/dist/plugins.js.map +2 -2
  7. package/dist/plugins.js.meta.json +1 -1
  8. package/dist/src/accounts/accounts.js +100 -0
  9. package/dist/src/accounts/accounts.js.map +7 -0
  10. package/dist/src/accounts/api.js +78 -0
  11. package/dist/src/accounts/api.js.map +7 -0
  12. package/dist/src/accounts/index.js +23 -0
  13. package/dist/src/accounts/index.js.map +7 -0
  14. package/dist/src/auth/auth.js +208 -0
  15. package/dist/src/auth/auth.js.map +7 -0
  16. package/dist/src/auth/index.js +23 -0
  17. package/dist/src/auth/index.js.map +7 -0
  18. package/dist/src/auth/tests/auth.spec.js +37 -0
  19. package/dist/src/auth/tests/auth.spec.js.map +7 -0
  20. package/dist/src/blacklist/blacklist.js +88 -0
  21. package/dist/src/blacklist/blacklist.js.map +7 -0
  22. package/dist/src/blacklist/index.js +23 -0
  23. package/dist/src/blacklist/index.js.map +7 -0
  24. package/dist/src/blacklist/tests/blacklist.spec.js +61 -0
  25. package/dist/src/blacklist/tests/blacklist.spec.js.map +7 -0
  26. package/dist/src/cache/appMetadata.js +86 -0
  27. package/dist/src/cache/appMetadata.js.map +7 -0
  28. package/dist/src/cache/base/index.js +102 -0
  29. package/dist/src/cache/base/index.js.map +7 -0
  30. package/dist/src/cache/generic.js +69 -0
  31. package/dist/src/cache/generic.js.map +7 -0
  32. package/dist/src/cache/index.js +51 -0
  33. package/dist/src/cache/index.js.map +7 -0
  34. package/dist/src/cache/tests/writethrough.spec.js +132 -0
  35. package/dist/src/cache/tests/writethrough.spec.js.map +7 -0
  36. package/dist/src/cache/user.js +99 -0
  37. package/dist/src/cache/user.js.map +7 -0
  38. package/dist/src/cache/writethrough.js +144 -0
  39. package/dist/src/cache/writethrough.js.map +7 -0
  40. package/dist/src/configs/configs.js +228 -0
  41. package/dist/src/configs/configs.js.map +7 -0
  42. package/dist/src/configs/index.js +23 -0
  43. package/dist/src/configs/index.js.map +7 -0
  44. package/dist/src/configs/tests/configs.spec.js +182 -0
  45. package/dist/src/configs/tests/configs.spec.js.map +7 -0
  46. package/dist/src/constants/db.js +107 -0
  47. package/dist/src/constants/db.js.map +7 -0
  48. package/dist/src/constants/index.js +25 -0
  49. package/dist/src/constants/index.js.map +7 -0
  50. package/dist/src/constants/misc.js +92 -0
  51. package/dist/src/constants/misc.js.map +7 -0
  52. package/dist/src/context/Context.js +36 -0
  53. package/dist/src/context/Context.js.map +7 -0
  54. package/dist/src/context/identity.js +87 -0
  55. package/dist/src/context/identity.js.map +7 -0
  56. package/dist/src/context/index.js +45 -0
  57. package/dist/src/context/index.js.map +7 -0
  58. package/dist/src/context/mainContext.js +320 -0
  59. package/dist/src/context/mainContext.js.map +7 -0
  60. package/dist/src/context/tests/index.spec.js +147 -0
  61. package/dist/src/context/tests/index.spec.js.map +7 -0
  62. package/dist/src/context/types.js +17 -0
  63. package/dist/src/context/types.js.map +7 -0
  64. package/dist/src/db/Replication.js +89 -0
  65. package/dist/src/db/Replication.js.map +7 -0
  66. package/dist/src/db/constants.js +39 -0
  67. package/dist/src/db/constants.js.map +7 -0
  68. package/dist/src/db/couch/DatabaseImpl.js +224 -0
  69. package/dist/src/db/couch/DatabaseImpl.js.map +7 -0
  70. package/dist/src/db/couch/connections.js +103 -0
  71. package/dist/src/db/couch/connections.js.map +7 -0
  72. package/dist/src/db/couch/index.js +44 -0
  73. package/dist/src/db/couch/index.js.map +7 -0
  74. package/dist/src/db/couch/pouchDB.js +118 -0
  75. package/dist/src/db/couch/pouchDB.js.map +7 -0
  76. package/dist/src/db/couch/pouchDump.js +2 -0
  77. package/dist/src/db/couch/pouchDump.js.map +7 -0
  78. package/dist/src/db/couch/utils.js +76 -0
  79. package/dist/src/db/couch/utils.js.map +7 -0
  80. package/dist/src/db/db.d.ts +1 -1
  81. package/dist/src/db/db.js +73 -0
  82. package/dist/src/db/db.js.map +7 -0
  83. package/dist/src/db/errors.js +43 -0
  84. package/dist/src/db/errors.js.map +7 -0
  85. package/dist/src/db/index.js +64 -0
  86. package/dist/src/db/index.js.map +7 -0
  87. package/dist/src/db/lucene.d.ts +2 -1
  88. package/dist/src/db/lucene.js +595 -0
  89. package/dist/src/db/lucene.js.map +7 -0
  90. package/dist/src/db/searchIndexes/index.js +23 -0
  91. package/dist/src/db/searchIndexes/index.js.map +7 -0
  92. package/dist/src/db/searchIndexes/searchIndexes.js +82 -0
  93. package/dist/src/db/searchIndexes/searchIndexes.js.map +7 -0
  94. package/dist/src/db/tests/index.spec.js +24 -0
  95. package/dist/src/db/tests/index.spec.js.map +7 -0
  96. package/dist/src/db/tests/lucene.spec.js +312 -0
  97. package/dist/src/db/tests/lucene.spec.js.map +7 -0
  98. package/dist/src/db/tests/pouch.spec.js +63 -0
  99. package/dist/src/db/tests/pouch.spec.js.map +7 -0
  100. package/dist/src/db/tests/utils.spec.js +50 -0
  101. package/dist/src/db/tests/utils.spec.js.map +7 -0
  102. package/dist/src/db/utils.d.ts +1 -1
  103. package/dist/src/db/utils.js +198 -0
  104. package/dist/src/db/utils.js.map +7 -0
  105. package/dist/src/db/views.js +223 -0
  106. package/dist/src/db/views.js.map +7 -0
  107. package/dist/src/docIds/conversions.js +83 -0
  108. package/dist/src/docIds/conversions.js.map +7 -0
  109. package/dist/src/docIds/ids.js +101 -0
  110. package/dist/src/docIds/ids.js.map +7 -0
  111. package/dist/src/docIds/index.js +25 -0
  112. package/dist/src/docIds/index.js.map +7 -0
  113. package/dist/src/docIds/newid.js +32 -0
  114. package/dist/src/docIds/newid.js.map +7 -0
  115. package/dist/src/docIds/params.js +136 -0
  116. package/dist/src/docIds/params.js.map +7 -0
  117. package/dist/src/docUpdates/index.js +61 -0
  118. package/dist/src/docUpdates/index.js.map +7 -0
  119. package/dist/src/environment.js +181 -0
  120. package/dist/src/environment.js.map +7 -0
  121. package/dist/src/errors/errors.js +126 -0
  122. package/dist/src/errors/errors.js.map +7 -0
  123. package/dist/src/errors/index.js +23 -0
  124. package/dist/src/errors/index.js.map +7 -0
  125. package/dist/src/events/analytics.js +42 -0
  126. package/dist/src/events/analytics.js.map +7 -0
  127. package/dist/src/events/asyncEvents/index.js +25 -0
  128. package/dist/src/events/asyncEvents/index.js.map +7 -0
  129. package/dist/src/events/asyncEvents/publisher.js +39 -0
  130. package/dist/src/events/asyncEvents/publisher.js.map +7 -0
  131. package/dist/src/events/asyncEvents/queue.js +42 -0
  132. package/dist/src/events/asyncEvents/queue.js.map +7 -0
  133. package/dist/src/events/backfill.js +172 -0
  134. package/dist/src/events/backfill.js.map +7 -0
  135. package/dist/src/events/documentId.js +51 -0
  136. package/dist/src/events/documentId.js.map +7 -0
  137. package/dist/src/events/events.js +63 -0
  138. package/dist/src/events/events.js.map +7 -0
  139. package/dist/src/events/identification.js +275 -0
  140. package/dist/src/events/identification.js.map +7 -0
  141. package/dist/src/events/index.js +62 -0
  142. package/dist/src/events/index.js.map +7 -0
  143. package/dist/src/events/processors/AnalyticsProcessor.js +76 -0
  144. package/dist/src/events/processors/AnalyticsProcessor.js.map +7 -0
  145. package/dist/src/events/processors/AuditLogsProcessor.js +97 -0
  146. package/dist/src/events/processors/AuditLogsProcessor.js.map +7 -0
  147. package/dist/src/events/processors/LoggingProcessor.js +58 -0
  148. package/dist/src/events/processors/LoggingProcessor.js.map +7 -0
  149. package/dist/src/events/processors/Processors.js +57 -0
  150. package/dist/src/events/processors/Processors.js.map +7 -0
  151. package/dist/src/events/processors/async/DocumentUpdateProcessor.js +53 -0
  152. package/dist/src/events/processors/async/DocumentUpdateProcessor.js.map +7 -0
  153. package/dist/src/events/processors/index.js +57 -0
  154. package/dist/src/events/processors/index.js.map +7 -0
  155. package/dist/src/events/processors/posthog/PosthogProcessor.js +126 -0
  156. package/dist/src/events/processors/posthog/PosthogProcessor.js.map +7 -0
  157. package/dist/src/events/processors/posthog/index.js +36 -0
  158. package/dist/src/events/processors/posthog/index.js.map +7 -0
  159. package/dist/src/events/processors/posthog/rateLimiting.js +105 -0
  160. package/dist/src/events/processors/posthog/rateLimiting.js.map +7 -0
  161. package/dist/src/events/processors/posthog/tests/PosthogProcessor.spec.js +154 -0
  162. package/dist/src/events/processors/posthog/tests/PosthogProcessor.spec.js.map +7 -0
  163. package/dist/src/events/processors/types.js +29 -0
  164. package/dist/src/events/processors/types.js.map +7 -0
  165. package/dist/src/events/publishers/account.js +49 -0
  166. package/dist/src/events/publishers/account.js.map +7 -0
  167. package/dist/src/events/publishers/app.js +145 -0
  168. package/dist/src/events/publishers/app.js.map +7 -0
  169. package/dist/src/events/publishers/auditLog.js +42 -0
  170. package/dist/src/events/publishers/auditLog.js.map +7 -0
  171. package/dist/src/events/publishers/auth.js +80 -0
  172. package/dist/src/events/publishers/auth.js.map +7 -0
  173. package/dist/src/events/publishers/automation.js +111 -0
  174. package/dist/src/events/publishers/automation.js.map +7 -0
  175. package/dist/src/events/publishers/backfill.js +92 -0
  176. package/dist/src/events/publishers/backfill.js.map +7 -0
  177. package/dist/src/events/publishers/backup.js +49 -0
  178. package/dist/src/events/publishers/backup.js.map +7 -0
  179. package/dist/src/events/publishers/datasource.js +59 -0
  180. package/dist/src/events/publishers/datasource.js.map +7 -0
  181. package/dist/src/events/publishers/email.js +38 -0
  182. package/dist/src/events/publishers/email.js.map +7 -0
  183. package/dist/src/events/publishers/environmentVariable.js +53 -0
  184. package/dist/src/events/publishers/environmentVariable.js.map +7 -0
  185. package/dist/src/events/publishers/group.js +105 -0
  186. package/dist/src/events/publishers/group.js.map +7 -0
  187. package/dist/src/events/publishers/index.js +108 -0
  188. package/dist/src/events/publishers/index.js.map +7 -0
  189. package/dist/src/events/publishers/installation.js +56 -0
  190. package/dist/src/events/publishers/installation.js.map +7 -0
  191. package/dist/src/events/publishers/layout.js +42 -0
  192. package/dist/src/events/publishers/layout.js.map +7 -0
  193. package/dist/src/events/publishers/license.js +78 -0
  194. package/dist/src/events/publishers/license.js.map +7 -0
  195. package/dist/src/events/publishers/org.js +53 -0
  196. package/dist/src/events/publishers/org.js.map +7 -0
  197. package/dist/src/events/publishers/plugin.js +61 -0
  198. package/dist/src/events/publishers/plugin.js.map +7 -0
  199. package/dist/src/events/publishers/query.js +85 -0
  200. package/dist/src/events/publishers/query.js.map +7 -0
  201. package/dist/src/events/publishers/role.js +71 -0
  202. package/dist/src/events/publishers/role.js.map +7 -0
  203. package/dist/src/events/publishers/rows.js +43 -0
  204. package/dist/src/events/publishers/rows.js.map +7 -0
  205. package/dist/src/events/publishers/screen.js +52 -0
  206. package/dist/src/events/publishers/screen.js.map +7 -0
  207. package/dist/src/events/publishers/serve.js +53 -0
  208. package/dist/src/events/publishers/serve.js.map +7 -0
  209. package/dist/src/events/publishers/table.js +79 -0
  210. package/dist/src/events/publishers/table.js.map +7 -0
  211. package/dist/src/events/publishers/user.js +191 -0
  212. package/dist/src/events/publishers/user.js.map +7 -0
  213. package/dist/src/events/publishers/view.js +102 -0
  214. package/dist/src/events/publishers/view.js.map +7 -0
  215. package/dist/src/{featureFlags → features}/index.d.ts +1 -0
  216. package/dist/src/features/index.js +105 -0
  217. package/dist/src/features/index.js.map +7 -0
  218. package/dist/src/features/installation.d.ts +1 -0
  219. package/dist/src/features/installation.js +42 -0
  220. package/dist/src/features/installation.js.map +7 -0
  221. package/dist/src/features/tests/featureFlags.spec.js +86 -0
  222. package/dist/src/features/tests/featureFlags.spec.js.map +7 -0
  223. package/dist/src/helpers.js +31 -0
  224. package/dist/src/helpers.js.map +7 -0
  225. package/dist/src/index.d.ts +2 -1
  226. package/dist/src/index.js +154 -0
  227. package/dist/src/index.js.map +7 -0
  228. package/dist/src/installation.js +139 -0
  229. package/dist/src/installation.js.map +7 -0
  230. package/dist/src/logging/alerts.js +49 -0
  231. package/dist/src/logging/alerts.js.map +7 -0
  232. package/dist/src/logging/correlation/correlation.js +41 -0
  233. package/dist/src/logging/correlation/correlation.js.map +7 -0
  234. package/dist/src/logging/correlation/index.js +23 -0
  235. package/dist/src/logging/correlation/index.js.map +7 -0
  236. package/dist/src/logging/correlation/middleware.js +37 -0
  237. package/dist/src/logging/correlation/middleware.js.map +7 -0
  238. package/dist/src/logging/index.js +48 -0
  239. package/dist/src/logging/index.js.map +7 -0
  240. package/dist/src/logging/pino/logger.js +197 -0
  241. package/dist/src/logging/pino/logger.js.map +7 -0
  242. package/dist/src/logging/pino/middleware.js +77 -0
  243. package/dist/src/logging/pino/middleware.js.map +7 -0
  244. package/dist/src/logging/system.js +110 -0
  245. package/dist/src/logging/system.js.map +7 -0
  246. package/dist/src/logging/tests/system.spec.js +59 -0
  247. package/dist/src/logging/tests/system.spec.js.map +7 -0
  248. package/dist/src/middleware/adminOnly.js +31 -0
  249. package/dist/src/middleware/adminOnly.js.map +7 -0
  250. package/dist/src/middleware/auditLog.js +27 -0
  251. package/dist/src/middleware/auditLog.js.map +7 -0
  252. package/dist/src/middleware/authenticated.js +178 -0
  253. package/dist/src/middleware/authenticated.js.map +7 -0
  254. package/dist/src/middleware/builderOnly.js +48 -0
  255. package/dist/src/middleware/builderOnly.js.map +7 -0
  256. package/dist/src/middleware/builderOrAdmin.js +48 -0
  257. package/dist/src/middleware/builderOrAdmin.js.map +7 -0
  258. package/dist/src/middleware/csrf.js +60 -0
  259. package/dist/src/middleware/csrf.js.map +7 -0
  260. package/dist/src/middleware/errorHandling.js +62 -0
  261. package/dist/src/middleware/errorHandling.js.map +7 -0
  262. package/dist/src/middleware/index.js +95 -0
  263. package/dist/src/middleware/index.js.map +7 -0
  264. package/dist/src/middleware/internalApi.js +39 -0
  265. package/dist/src/middleware/internalApi.js.map +7 -0
  266. package/dist/src/middleware/joi-validator.js +73 -0
  267. package/dist/src/middleware/joi-validator.js.map +7 -0
  268. package/dist/src/middleware/matchers.js +62 -0
  269. package/dist/src/middleware/matchers.js.map +7 -0
  270. package/dist/src/middleware/passport/datasource/google.js +103 -0
  271. package/dist/src/middleware/passport/datasource/google.js.map +7 -0
  272. package/dist/src/middleware/passport/local.js +73 -0
  273. package/dist/src/middleware/passport/local.js.map +7 -0
  274. package/dist/src/middleware/passport/sso/google.js +93 -0
  275. package/dist/src/middleware/passport/sso/google.js.map +7 -0
  276. package/dist/src/middleware/passport/sso/oidc.js +135 -0
  277. package/dist/src/middleware/passport/sso/oidc.js.map +7 -0
  278. package/dist/src/middleware/passport/sso/sso.js +149 -0
  279. package/dist/src/middleware/passport/sso/sso.js.map +7 -0
  280. package/dist/src/middleware/passport/sso/tests/google.spec.js +77 -0
  281. package/dist/src/middleware/passport/sso/tests/google.spec.js.map +7 -0
  282. package/dist/src/middleware/passport/sso/tests/oidc.spec.js +143 -0
  283. package/dist/src/middleware/passport/sso/tests/oidc.spec.js.map +7 -0
  284. package/dist/src/middleware/passport/sso/tests/sso.spec.js +167 -0
  285. package/dist/src/middleware/passport/sso/tests/sso.spec.js.map +7 -0
  286. package/dist/src/middleware/passport/utils.js +62 -0
  287. package/dist/src/middleware/passport/utils.js.map +7 -0
  288. package/dist/src/middleware/querystringToBody.js +45 -0
  289. package/dist/src/middleware/querystringToBody.js.map +7 -0
  290. package/dist/src/middleware/tenancy.js +46 -0
  291. package/dist/src/middleware/tenancy.js.map +7 -0
  292. package/dist/src/middleware/tests/builder.spec.js +169 -0
  293. package/dist/src/middleware/tests/builder.spec.js.map +7 -0
  294. package/dist/src/middleware/tests/matchers.spec.js +120 -0
  295. package/dist/src/middleware/tests/matchers.spec.js.map +7 -0
  296. package/dist/src/migrations/definitions.js +63 -0
  297. package/dist/src/migrations/definitions.js.map +7 -0
  298. package/dist/src/migrations/index.js +25 -0
  299. package/dist/src/migrations/index.js.map +7 -0
  300. package/dist/src/migrations/migrations.js +178 -0
  301. package/dist/src/migrations/migrations.js.map +7 -0
  302. package/dist/src/migrations/tests/migrations.spec.js +78 -0
  303. package/dist/src/migrations/tests/migrations.spec.js.map +7 -0
  304. package/dist/src/objectStore/buckets/app.js +65 -0
  305. package/dist/src/objectStore/buckets/app.js.map +7 -0
  306. package/dist/src/objectStore/buckets/global.js +63 -0
  307. package/dist/src/objectStore/buckets/global.js.map +7 -0
  308. package/dist/src/objectStore/buckets/index.js +27 -0
  309. package/dist/src/objectStore/buckets/index.js.map +7 -0
  310. package/dist/src/objectStore/buckets/plugins.js +101 -0
  311. package/dist/src/objectStore/buckets/plugins.js.map +7 -0
  312. package/dist/src/objectStore/buckets/tests/app.spec.js +171 -0
  313. package/dist/src/objectStore/buckets/tests/app.spec.js.map +7 -0
  314. package/dist/src/objectStore/buckets/tests/global.spec.js +87 -0
  315. package/dist/src/objectStore/buckets/tests/global.spec.js.map +7 -0
  316. package/dist/src/objectStore/buckets/tests/plugins.spec.js +123 -0
  317. package/dist/src/objectStore/buckets/tests/plugins.spec.js.map +7 -0
  318. package/dist/src/objectStore/cloudfront.js +74 -0
  319. package/dist/src/objectStore/cloudfront.js.map +7 -0
  320. package/dist/src/objectStore/index.js +27 -0
  321. package/dist/src/objectStore/index.js.map +7 -0
  322. package/dist/src/objectStore/objectStore.js +372 -0
  323. package/dist/src/objectStore/objectStore.js.map +7 -0
  324. package/dist/src/objectStore/utils.js +58 -0
  325. package/dist/src/objectStore/utils.js.map +7 -0
  326. package/dist/src/platform/index.js +45 -0
  327. package/dist/src/platform/index.js.map +7 -0
  328. package/dist/src/platform/platformDb.js +33 -0
  329. package/dist/src/platform/platformDb.js.map +7 -0
  330. package/dist/src/platform/tenants.js +123 -0
  331. package/dist/src/platform/tenants.js.map +7 -0
  332. package/dist/src/platform/tests/tenants.spec.js +46 -0
  333. package/dist/src/platform/tests/tenants.spec.js.map +7 -0
  334. package/dist/src/platform/users.js +104 -0
  335. package/dist/src/platform/users.js.map +7 -0
  336. package/dist/src/plugin/index.js +23 -0
  337. package/dist/src/plugin/index.js.map +7 -0
  338. package/dist/src/plugin/tests/validation.spec.js +97 -0
  339. package/dist/src/plugin/tests/validation.spec.js.map +7 -0
  340. package/dist/src/plugin/utils.js +153 -0
  341. package/dist/src/plugin/utils.js.map +7 -0
  342. package/dist/src/queue/constants.js +35 -0
  343. package/dist/src/queue/constants.js.map +7 -0
  344. package/dist/src/queue/inMemoryQueue.js +139 -0
  345. package/dist/src/queue/inMemoryQueue.js.map +7 -0
  346. package/dist/src/queue/index.js +25 -0
  347. package/dist/src/queue/index.js.map +7 -0
  348. package/dist/src/queue/listeners.js +177 -0
  349. package/dist/src/queue/listeners.js.map +7 -0
  350. package/dist/src/queue/queue.js +85 -0
  351. package/dist/src/queue/queue.js.map +7 -0
  352. package/dist/src/redis/index.js +48 -0
  353. package/dist/src/redis/index.js.map +7 -0
  354. package/dist/src/redis/init.js +128 -0
  355. package/dist/src/redis/init.js.map +7 -0
  356. package/dist/src/redis/redis.js +277 -0
  357. package/dist/src/redis/redis.js.map +7 -0
  358. package/dist/src/redis/redlockImpl.js +145 -0
  359. package/dist/src/redis/redlockImpl.js.map +7 -0
  360. package/dist/src/redis/utils.js +136 -0
  361. package/dist/src/redis/utils.js.map +7 -0
  362. package/dist/src/security/encryption.js +184 -0
  363. package/dist/src/security/encryption.js.map +7 -0
  364. package/dist/src/security/permissions.js +188 -0
  365. package/dist/src/security/permissions.js.map +7 -0
  366. package/dist/src/security/roles.d.ts +1 -12
  367. package/dist/src/security/roles.js +337 -0
  368. package/dist/src/security/roles.js.map +7 -0
  369. package/dist/src/security/sessions.js +135 -0
  370. package/dist/src/security/sessions.js.map +7 -0
  371. package/dist/src/security/tests/encryption.spec.js +51 -0
  372. package/dist/src/security/tests/encryption.spec.js.map +7 -0
  373. package/dist/src/security/tests/permissions.spec.js +154 -0
  374. package/dist/src/security/tests/permissions.spec.js.map +7 -0
  375. package/dist/src/security/tests/sessions.spec.js +33 -0
  376. package/dist/src/security/tests/sessions.spec.js.map +7 -0
  377. package/dist/src/tenancy/db.js +33 -0
  378. package/dist/src/tenancy/db.js.map +7 -0
  379. package/dist/src/tenancy/index.js +25 -0
  380. package/dist/src/tenancy/index.js.map +7 -0
  381. package/dist/src/tenancy/tenancy.js +129 -0
  382. package/dist/src/tenancy/tenancy.js.map +7 -0
  383. package/dist/src/tenancy/tests/tenancy.spec.js +154 -0
  384. package/dist/src/tenancy/tests/tenancy.spec.js.map +7 -0
  385. package/dist/src/timers/index.js +23 -0
  386. package/dist/src/timers/index.js.map +7 -0
  387. package/dist/src/timers/timers.js +51 -0
  388. package/dist/src/timers/timers.js.map +7 -0
  389. package/dist/src/users/db.d.ts +9 -1
  390. package/dist/src/users/db.js +381 -0
  391. package/dist/src/users/db.js.map +7 -0
  392. package/dist/src/users/events.js +152 -0
  393. package/dist/src/users/events.js.map +7 -0
  394. package/dist/src/users/index.js +36 -0
  395. package/dist/src/users/index.js.map +7 -0
  396. package/dist/src/users/lookup.js +110 -0
  397. package/dist/src/users/lookup.js.map +7 -0
  398. package/dist/src/users/users.js +257 -0
  399. package/dist/src/users/users.js.map +7 -0
  400. package/dist/src/users/utils.js +95 -0
  401. package/dist/src/users/utils.js.map +7 -0
  402. package/dist/src/utils/hashing.js +53 -0
  403. package/dist/src/utils/hashing.js.map +7 -0
  404. package/dist/src/utils/index.js +27 -0
  405. package/dist/src/utils/index.js.map +7 -0
  406. package/dist/src/utils/stringUtils.js +33 -0
  407. package/dist/src/utils/stringUtils.js.map +7 -0
  408. package/dist/src/utils/tests/utils.spec.js +165 -0
  409. package/dist/src/utils/tests/utils.spec.js.map +7 -0
  410. package/dist/src/utils/utils.js +207 -0
  411. package/dist/src/utils/utils.js.map +7 -0
  412. package/dist/tests/core/logging.js +57 -0
  413. package/dist/tests/core/logging.js.map +7 -0
  414. package/dist/tests/core/utilities/index.js +54 -0
  415. package/dist/tests/core/utilities/index.js.map +7 -0
  416. package/dist/tests/core/utilities/jestUtils.js +50 -0
  417. package/dist/tests/core/utilities/jestUtils.js.map +7 -0
  418. package/dist/tests/core/utilities/mocks/alerts.js +41 -0
  419. package/dist/tests/core/utilities/mocks/alerts.js.map +7 -0
  420. package/dist/tests/core/utilities/mocks/date.js +32 -0
  421. package/dist/tests/core/utilities/mocks/date.js.map +7 -0
  422. package/dist/tests/core/utilities/mocks/events.js +133 -0
  423. package/dist/tests/core/utilities/mocks/events.js.map +7 -0
  424. package/dist/tests/core/utilities/mocks/fetch.js +39 -0
  425. package/dist/tests/core/utilities/mocks/fetch.js.map +7 -0
  426. package/dist/tests/core/utilities/mocks/index.js +55 -0
  427. package/dist/tests/core/utilities/mocks/index.js.map +7 -0
  428. package/dist/tests/core/utilities/mocks/licenses.d.ts +2 -0
  429. package/dist/tests/core/utilities/mocks/licenses.js +145 -0
  430. package/dist/tests/core/utilities/mocks/licenses.js.map +7 -0
  431. package/dist/tests/core/utilities/mocks/posthog.js +9 -0
  432. package/dist/tests/core/utilities/mocks/posthog.js.map +7 -0
  433. package/dist/tests/core/utilities/structures/Chance.js +48 -0
  434. package/dist/tests/core/utilities/structures/Chance.js.map +7 -0
  435. package/dist/tests/core/utilities/structures/accounts.js +148 -0
  436. package/dist/tests/core/utilities/structures/accounts.js.map +7 -0
  437. package/dist/tests/core/utilities/structures/apps.js +47 -0
  438. package/dist/tests/core/utilities/structures/apps.js.map +7 -0
  439. package/dist/tests/core/utilities/structures/common.js +35 -0
  440. package/dist/tests/core/utilities/structures/common.js.map +7 -0
  441. package/dist/tests/core/utilities/structures/db.js +40 -0
  442. package/dist/tests/core/utilities/structures/db.js.map +7 -0
  443. package/dist/tests/core/utilities/structures/documents/index.js +23 -0
  444. package/dist/tests/core/utilities/structures/documents/index.js.map +7 -0
  445. package/dist/tests/core/utilities/structures/documents/platform/index.js +39 -0
  446. package/dist/tests/core/utilities/structures/documents/platform/index.js.map +7 -0
  447. package/dist/tests/core/utilities/structures/documents/platform/installation.js +48 -0
  448. package/dist/tests/core/utilities/structures/documents/platform/installation.js.map +7 -0
  449. package/dist/tests/core/utilities/structures/generator.js +40 -0
  450. package/dist/tests/core/utilities/structures/generator.js.map +7 -0
  451. package/dist/tests/core/utilities/structures/index.js +81 -0
  452. package/dist/tests/core/utilities/structures/index.js.map +7 -0
  453. package/dist/tests/core/utilities/structures/koa.js +42 -0
  454. package/dist/tests/core/utilities/structures/koa.js.map +7 -0
  455. package/dist/tests/core/utilities/structures/licenses.js +175 -0
  456. package/dist/tests/core/utilities/structures/licenses.js.map +7 -0
  457. package/dist/tests/core/utilities/structures/plugins.js +46 -0
  458. package/dist/tests/core/utilities/structures/plugins.js.map +7 -0
  459. package/dist/tests/core/utilities/structures/quotas.js +94 -0
  460. package/dist/tests/core/utilities/structures/quotas.js.map +7 -0
  461. package/dist/tests/core/utilities/structures/scim.js +90 -0
  462. package/dist/tests/core/utilities/structures/scim.js.map +7 -0
  463. package/dist/tests/core/utilities/structures/shared.js +46 -0
  464. package/dist/tests/core/utilities/structures/shared.js.map +7 -0
  465. package/dist/tests/core/utilities/structures/sso.js +144 -0
  466. package/dist/tests/core/utilities/structures/sso.js.map +7 -0
  467. package/dist/tests/core/utilities/structures/tenants.js +32 -0
  468. package/dist/tests/core/utilities/structures/tenants.js.map +7 -0
  469. package/dist/tests/core/utilities/structures/userGroups.js +36 -0
  470. package/dist/tests/core/utilities/structures/userGroups.js.map +7 -0
  471. package/dist/tests/core/utilities/structures/users.js +96 -0
  472. package/dist/tests/core/utilities/structures/users.js.map +7 -0
  473. package/dist/tests/core/utilities/testContainerUtils.js +100 -0
  474. package/dist/tests/core/utilities/testContainerUtils.js.map +7 -0
  475. package/dist/tests/core/utilities/utils/index.js +39 -0
  476. package/dist/tests/core/utilities/utils/index.js.map +7 -0
  477. package/dist/tests/core/utilities/utils/time.js +31 -0
  478. package/dist/tests/core/utilities/utils/time.js.map +7 -0
  479. package/dist/tests/extra/DBTestConfiguration.js +61 -0
  480. package/dist/tests/extra/DBTestConfiguration.js.map +7 -0
  481. package/dist/tests/extra/index.js +42 -0
  482. package/dist/tests/extra/index.js.map +7 -0
  483. package/dist/tests/extra/testEnv.js +106 -0
  484. package/dist/tests/extra/testEnv.js.map +7 -0
  485. package/dist/tests/index.js +23 -0
  486. package/dist/tests/index.js.map +7 -0
  487. package/dist/tests/jestEnv.js +8 -0
  488. package/dist/tests/jestEnv.js.map +7 -0
  489. package/dist/tests/jestSetup.js +41 -0
  490. package/dist/tests/jestSetup.js.map +7 -0
  491. package/package.json +5 -5
  492. package/dist/tests.js +0 -8476
  493. package/dist/tests.js.map +0 -7
  494. package/dist/tests.js.meta.json +0 -1
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var import_tests = require("../../../../../tests");
25
+ var import_extra = require("../../../../../tests/extra");
26
+ var import_errors = require("../../../../errors");
27
+ var sso = __toESM(require("../sso"));
28
+ var context = __toESM(require("../../../../context"));
29
+ var _users = __toESM(require("../../../../users"));
30
+ const mockDone = jest.fn();
31
+ const mockSaveUser = jest.fn();
32
+ jest.mock("../../../../users");
33
+ const users = jest.mocked(_users);
34
+ const getErrorMessage = () => {
35
+ return mockDone.mock.calls[0][2].message;
36
+ };
37
+ describe("sso", () => {
38
+ describe("authenticate", () => {
39
+ beforeEach(() => {
40
+ jest.clearAllMocks();
41
+ import_extra.testEnv.singleTenant();
42
+ });
43
+ describe("validation", () => {
44
+ const testValidation = async (details, message) => {
45
+ await sso.authenticate(details, false, mockDone, mockSaveUser);
46
+ expect(mockDone.mock.calls.length).toBe(1);
47
+ expect(getErrorMessage()).toContain(message);
48
+ };
49
+ it("user id fails", async () => {
50
+ const details = import_tests.structures.sso.authDetails();
51
+ details.userId = void 0;
52
+ await testValidation(details, "sso user id required");
53
+ });
54
+ it("email fails", async () => {
55
+ const details = import_tests.structures.sso.authDetails();
56
+ details.email = void 0;
57
+ await testValidation(details, "sso user email required");
58
+ });
59
+ });
60
+ function mockGetProfilePicture() {
61
+ import_tests.mocks.fetch.mockReturnValueOnce(
62
+ Promise.resolve({
63
+ status: 200,
64
+ headers: { get: () => "image/" }
65
+ })
66
+ );
67
+ }
68
+ describe("when the user doesn't exist", () => {
69
+ let user;
70
+ let details;
71
+ beforeEach(() => {
72
+ users.getById.mockImplementationOnce(() => {
73
+ throw new import_errors.HTTPError("", 404);
74
+ });
75
+ mockGetProfilePicture();
76
+ user = import_tests.structures.users.user();
77
+ delete user._rev;
78
+ delete user._id;
79
+ details = import_tests.structures.sso.authDetails(user);
80
+ details.userId = import_tests.structures.uuid();
81
+ });
82
+ describe("when a local account is required", () => {
83
+ it("returns an error message", async () => {
84
+ const details2 = import_tests.structures.sso.authDetails();
85
+ await sso.authenticate(details2, true, mockDone, mockSaveUser);
86
+ expect(mockDone.mock.calls.length).toBe(1);
87
+ expect(getErrorMessage()).toContain(
88
+ "Email does not yet exist. You must set up your local budibase account first."
89
+ );
90
+ });
91
+ });
92
+ describe("when a local account isn't required", () => {
93
+ it("creates and authenticates the user", async () => {
94
+ const ssoUser = import_tests.structures.users.ssoUser({ user, details });
95
+ mockSaveUser.mockReturnValueOnce(ssoUser);
96
+ await sso.authenticate(details, false, mockDone, mockSaveUser);
97
+ ssoUser.roles = {};
98
+ ssoUser._id = "us_" + details.userId;
99
+ delete ssoUser.password;
100
+ delete ssoUser._rev;
101
+ ssoUser.tenantId = context.getTenantId();
102
+ expect(mockSaveUser).toBeCalledWith(ssoUser, {
103
+ hashPassword: false,
104
+ requirePassword: false
105
+ });
106
+ expect(mockDone).toBeCalledWith(null, ssoUser);
107
+ });
108
+ });
109
+ });
110
+ describe("when the user exists", () => {
111
+ let existingUser;
112
+ let details;
113
+ beforeEach(() => {
114
+ existingUser = import_tests.structures.users.user();
115
+ existingUser._id = import_tests.structures.uuid();
116
+ details = import_tests.structures.sso.authDetails(existingUser);
117
+ mockGetProfilePicture();
118
+ });
119
+ describe("exists by email", () => {
120
+ beforeEach(() => {
121
+ users.getById.mockImplementationOnce(() => {
122
+ throw new import_errors.HTTPError("", 404);
123
+ });
124
+ users.getGlobalUserByEmail.mockReturnValueOnce(
125
+ Promise.resolve(existingUser)
126
+ );
127
+ });
128
+ it("syncs and authenticates the user", async () => {
129
+ const ssoUser = import_tests.structures.users.ssoUser({
130
+ user: existingUser,
131
+ details
132
+ });
133
+ mockSaveUser.mockReturnValueOnce(ssoUser);
134
+ await sso.authenticate(details, true, mockDone, mockSaveUser);
135
+ ssoUser.roles = existingUser.roles;
136
+ ssoUser._id = existingUser._id;
137
+ expect(mockSaveUser).toBeCalledWith(ssoUser, {
138
+ hashPassword: false,
139
+ requirePassword: false
140
+ });
141
+ expect(mockDone).toBeCalledWith(null, ssoUser);
142
+ });
143
+ });
144
+ describe("exists by id", () => {
145
+ beforeEach(() => {
146
+ users.getById.mockReturnValueOnce(Promise.resolve(existingUser));
147
+ });
148
+ it("syncs and authenticates the user", async () => {
149
+ const ssoUser = import_tests.structures.users.ssoUser({
150
+ user: existingUser,
151
+ details
152
+ });
153
+ mockSaveUser.mockReturnValueOnce(ssoUser);
154
+ await sso.authenticate(details, true, mockDone, mockSaveUser);
155
+ ssoUser.roles = existingUser.roles;
156
+ ssoUser._id = existingUser._id;
157
+ expect(mockSaveUser).toBeCalledWith(ssoUser, {
158
+ hashPassword: false,
159
+ requirePassword: false
160
+ });
161
+ expect(mockDone).toBeCalledWith(null, ssoUser);
162
+ });
163
+ });
164
+ });
165
+ });
166
+ });
167
+ //# sourceMappingURL=sso.spec.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/middleware/passport/sso/tests/sso.spec.ts"],
4
+ "sourcesContent": ["import { structures, mocks } from \"../../../../../tests\"\nimport { testEnv } from \"../../../../../tests/extra\"\nimport { SSOAuthDetails, User } from \"@budibase/types\"\n\nimport { HTTPError } from \"../../../../errors\"\nimport * as sso from \"../sso\"\nimport * as context from \"../../../../context\"\n\nconst mockDone = jest.fn()\nconst mockSaveUser = jest.fn()\n\njest.mock(\"../../../../users\")\nimport * as _users from \"../../../../users\"\nconst users = jest.mocked(_users)\n\nconst getErrorMessage = () => {\n return mockDone.mock.calls[0][2].message\n}\n\ndescribe(\"sso\", () => {\n describe(\"authenticate\", () => {\n beforeEach(() => {\n jest.clearAllMocks()\n testEnv.singleTenant()\n })\n\n describe(\"validation\", () => {\n const testValidation = async (\n details: SSOAuthDetails,\n message: string\n ) => {\n await sso.authenticate(details, false, mockDone, mockSaveUser)\n\n expect(mockDone.mock.calls.length).toBe(1)\n expect(getErrorMessage()).toContain(message)\n }\n\n it(\"user id fails\", async () => {\n const details = structures.sso.authDetails()\n details.userId = undefined!\n\n await testValidation(details, \"sso user id required\")\n })\n\n it(\"email fails\", async () => {\n const details = structures.sso.authDetails()\n details.email = undefined!\n\n await testValidation(details, \"sso user email required\")\n })\n })\n\n function mockGetProfilePicture() {\n mocks.fetch.mockReturnValueOnce(\n Promise.resolve({\n status: 200,\n headers: { get: () => \"image/\" },\n })\n )\n }\n\n describe(\"when the user doesn't exist\", () => {\n let user: User\n let details: SSOAuthDetails\n\n beforeEach(() => {\n users.getById.mockImplementationOnce(() => {\n throw new HTTPError(\"\", 404)\n })\n mockGetProfilePicture()\n\n user = structures.users.user()\n delete user._rev\n delete user._id\n\n details = structures.sso.authDetails(user)\n details.userId = structures.uuid()\n })\n\n describe(\"when a local account is required\", () => {\n it(\"returns an error message\", async () => {\n const details = structures.sso.authDetails()\n\n await sso.authenticate(details, true, mockDone, mockSaveUser)\n\n expect(mockDone.mock.calls.length).toBe(1)\n expect(getErrorMessage()).toContain(\n \"Email does not yet exist. You must set up your local budibase account first.\"\n )\n })\n })\n\n describe(\"when a local account isn't required\", () => {\n it(\"creates and authenticates the user\", async () => {\n const ssoUser = structures.users.ssoUser({ user, details })\n mockSaveUser.mockReturnValueOnce(ssoUser)\n\n await sso.authenticate(details, false, mockDone, mockSaveUser)\n\n // default roles for new user\n ssoUser.roles = {}\n\n // modified external id to match user format\n ssoUser._id = \"us_\" + details.userId\n\n // new sso user won't have a password\n delete ssoUser.password\n\n // new user isn't saved with rev\n delete ssoUser._rev\n\n // tenant id added\n ssoUser.tenantId = context.getTenantId()\n\n expect(mockSaveUser).toBeCalledWith(ssoUser, {\n hashPassword: false,\n requirePassword: false,\n })\n expect(mockDone).toBeCalledWith(null, ssoUser)\n })\n })\n })\n\n describe(\"when the user exists\", () => {\n let existingUser: User\n let details: SSOAuthDetails\n\n beforeEach(() => {\n existingUser = structures.users.user()\n existingUser._id = structures.uuid()\n details = structures.sso.authDetails(existingUser)\n mockGetProfilePicture()\n })\n\n describe(\"exists by email\", () => {\n beforeEach(() => {\n users.getById.mockImplementationOnce(() => {\n throw new HTTPError(\"\", 404)\n })\n users.getGlobalUserByEmail.mockReturnValueOnce(\n Promise.resolve(existingUser)\n )\n })\n\n it(\"syncs and authenticates the user\", async () => {\n const ssoUser = structures.users.ssoUser({\n user: existingUser,\n details,\n })\n mockSaveUser.mockReturnValueOnce(ssoUser)\n\n await sso.authenticate(details, true, mockDone, mockSaveUser)\n\n // roles preserved\n ssoUser.roles = existingUser.roles\n\n // existing id preserved\n ssoUser._id = existingUser._id\n\n expect(mockSaveUser).toBeCalledWith(ssoUser, {\n hashPassword: false,\n requirePassword: false,\n })\n expect(mockDone).toBeCalledWith(null, ssoUser)\n })\n })\n\n describe(\"exists by id\", () => {\n beforeEach(() => {\n users.getById.mockReturnValueOnce(Promise.resolve(existingUser))\n })\n\n it(\"syncs and authenticates the user\", async () => {\n const ssoUser = structures.users.ssoUser({\n user: existingUser,\n details,\n })\n mockSaveUser.mockReturnValueOnce(ssoUser)\n\n await sso.authenticate(details, true, mockDone, mockSaveUser)\n\n // roles preserved\n ssoUser.roles = existingUser.roles\n\n // existing id preserved\n ssoUser._id = existingUser._id\n\n expect(mockSaveUser).toBeCalledWith(ssoUser, {\n hashPassword: false,\n requirePassword: false,\n })\n expect(mockDone).toBeCalledWith(null, ssoUser)\n })\n })\n })\n })\n})\n"],
5
+ "mappings": "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",
6
+ "names": ["details"]
7
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var utils_exports = {};
30
+ __export(utils_exports, {
31
+ authError: () => authError,
32
+ ssoCallbackUrl: () => ssoCallbackUrl
33
+ });
34
+ module.exports = __toCommonJS(utils_exports);
35
+ var import_context = require("../../context");
36
+ var configs = __toESM(require("../../configs"));
37
+ function authError(done, message, err) {
38
+ return done(
39
+ err,
40
+ null,
41
+ // never return a user
42
+ { message }
43
+ );
44
+ }
45
+ async function ssoCallbackUrl(type, config) {
46
+ if (config && config.callbackURL) {
47
+ return config.callbackURL;
48
+ }
49
+ const settingsConfig = await configs.getSettingsConfig();
50
+ let callbackUrl = `/api/global/auth`;
51
+ if ((0, import_context.isMultiTenant)()) {
52
+ callbackUrl += `/${(0, import_context.getTenantId)()}`;
53
+ }
54
+ callbackUrl += `/${type}/callback`;
55
+ return `${settingsConfig.platformUrl}${callbackUrl}`;
56
+ }
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ authError,
60
+ ssoCallbackUrl
61
+ });
62
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/middleware/passport/utils.ts"],
4
+ "sourcesContent": ["import { getTenantId, isMultiTenant } from \"../../context\"\nimport * as configs from \"../../configs\"\nimport { ConfigType, GoogleInnerConfig } from \"@budibase/types\"\n\n/**\n * Utility to handle authentication errors.\n *\n * @param {*} done The passport callback.\n * @param {*} message Message that will be returned in the response body\n * @param {*} err (Optional) error that will be logged\n */\n\nexport function authError(done: Function, message: string, err?: any) {\n return done(\n err,\n null, // never return a user\n { message: message }\n )\n}\n\nexport async function ssoCallbackUrl(\n type: ConfigType,\n config?: GoogleInnerConfig\n) {\n // incase there is a callback URL from before\n if (config && (config as GoogleInnerConfig).callbackURL) {\n return (config as GoogleInnerConfig).callbackURL as string\n }\n const settingsConfig = await configs.getSettingsConfig()\n\n let callbackUrl = `/api/global/auth`\n if (isMultiTenant()) {\n callbackUrl += `/${getTenantId()}`\n }\n callbackUrl += `/${type}/callback`\n\n return `${settingsConfig.platformUrl}${callbackUrl}`\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA2C;AAC3C,cAAyB;AAWlB,SAAS,UAAU,MAAgB,SAAiB,KAAW;AACpE,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA,IACA,EAAE,QAAiB;AAAA,EACrB;AACF;AAEA,eAAsB,eACpB,MACA,QACA;AAEA,MAAI,UAAW,OAA6B,aAAa;AACvD,WAAQ,OAA6B;AAAA,EACvC;AACA,QAAM,iBAAiB,MAAM,QAAQ,kBAAkB;AAEvD,MAAI,cAAc;AAClB,UAAI,8BAAc,GAAG;AACnB,mBAAe,QAAI,4BAAY,CAAC;AAAA,EAClC;AACA,iBAAe,IAAI,IAAI;AAEvB,SAAO,GAAG,eAAe,WAAW,GAAG,WAAW;AACpD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var querystringToBody_exports = {};
20
+ __export(querystringToBody_exports, {
21
+ default: () => querystringToBody_default
22
+ });
23
+ module.exports = __toCommonJS(querystringToBody_exports);
24
+ function querystringToBody_default(ctx, next) {
25
+ const queryString = ctx.request.query?.query;
26
+ if (ctx.request.method.toLowerCase() !== "get") {
27
+ ctx.throw(
28
+ 500,
29
+ "Query to download middleware can only be used for get requests."
30
+ );
31
+ }
32
+ if (!queryString) {
33
+ return next();
34
+ }
35
+ const decoded = decodeURIComponent(queryString);
36
+ let json;
37
+ try {
38
+ json = JSON.parse(decoded);
39
+ } catch (err) {
40
+ return next();
41
+ }
42
+ ctx.request.body = json;
43
+ return next();
44
+ }
45
+ //# sourceMappingURL=querystringToBody.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/middleware/querystringToBody.ts"],
4
+ "sourcesContent": ["import { Ctx } from \"@budibase/types\"\n\n/**\n * Expects a standard \"query\" query string property which is the JSON body\n * of the request, which has to be sent via query string due to the requirement\n * of making an endpoint a GET request e.g. downloading a file stream.\n */\nexport default function (ctx: Ctx, next: any) {\n const queryString = ctx.request.query?.query as string | undefined\n if (ctx.request.method.toLowerCase() !== \"get\") {\n ctx.throw(\n 500,\n \"Query to download middleware can only be used for get requests.\"\n )\n }\n if (!queryString) {\n return next()\n }\n const decoded = decodeURIComponent(queryString)\n let json\n try {\n json = JSON.parse(decoded)\n } catch (err) {\n return next()\n }\n ctx.request.body = json\n return next()\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOe,SAAR,0BAAkB,KAAU,MAAW;AAC5C,QAAM,cAAc,IAAI,QAAQ,OAAO;AACvC,MAAI,IAAI,QAAQ,OAAO,YAAY,MAAM,OAAO;AAC9C,QAAI;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,aAAa;AAChB,WAAO,KAAK;AAAA,EACd;AACA,QAAM,UAAU,mBAAmB,WAAW;AAC9C,MAAI;AACJ,MAAI;AACF,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,SAAS,KAAK;AACZ,WAAO,KAAK;AAAA,EACd;AACA,MAAI,QAAQ,OAAO;AACnB,SAAO,KAAK;AACd;",
6
+ "names": []
7
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var tenancy_exports = {};
20
+ __export(tenancy_exports, {
21
+ default: () => tenancy_default
22
+ });
23
+ module.exports = __toCommonJS(tenancy_exports);
24
+ var import_context = require("../context");
25
+ var import_tenancy = require("../tenancy");
26
+ var import_matchers = require("./matchers");
27
+ var import_constants = require("../constants");
28
+ var import_types = require("@budibase/types");
29
+ function tenancy_default(allowQueryStringPatterns, noTenancyPatterns, opts = { noTenancyRequired: false }) {
30
+ const allowQsOptions = (0, import_matchers.buildMatcherRegex)(allowQueryStringPatterns);
31
+ const noTenancyOptions = (0, import_matchers.buildMatcherRegex)(noTenancyPatterns);
32
+ return async function(ctx, next) {
33
+ const allowNoTenant = opts.noTenancyRequired || !!(0, import_matchers.matches)(ctx, noTenancyOptions);
34
+ const tenantOpts = {
35
+ allowNoTenant
36
+ };
37
+ const allowQs = !!(0, import_matchers.matches)(ctx, allowQsOptions);
38
+ if (!allowQs) {
39
+ tenantOpts.excludeStrategies = [import_types.TenantResolutionStrategy.QUERY];
40
+ }
41
+ const tenantId = (0, import_tenancy.getTenantIDFromCtx)(ctx, tenantOpts);
42
+ ctx.set(import_constants.Header.TENANT_ID, tenantId);
43
+ return (0, import_context.doInTenant)(tenantId, next);
44
+ };
45
+ }
46
+ //# sourceMappingURL=tenancy.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/middleware/tenancy.ts"],
4
+ "sourcesContent": ["import { doInTenant } from \"../context\"\nimport { getTenantIDFromCtx } from \"../tenancy\"\nimport { buildMatcherRegex, matches } from \"./matchers\"\nimport { Header } from \"../constants\"\nimport {\n BBContext,\n EndpointMatcher,\n GetTenantIdOptions,\n TenantResolutionStrategy,\n} from \"@budibase/types\"\n\nexport default function (\n allowQueryStringPatterns: EndpointMatcher[],\n noTenancyPatterns: EndpointMatcher[],\n opts: { noTenancyRequired?: boolean } = { noTenancyRequired: false }\n) {\n const allowQsOptions = buildMatcherRegex(allowQueryStringPatterns)\n const noTenancyOptions = buildMatcherRegex(noTenancyPatterns)\n\n return async function (ctx: BBContext | any, next: any) {\n const allowNoTenant =\n opts.noTenancyRequired || !!matches(ctx, noTenancyOptions)\n const tenantOpts: GetTenantIdOptions = {\n allowNoTenant,\n }\n\n const allowQs = !!matches(ctx, allowQsOptions)\n if (!allowQs) {\n tenantOpts.excludeStrategies = [TenantResolutionStrategy.QUERY]\n }\n\n const tenantId = getTenantIDFromCtx(ctx, tenantOpts)\n ctx.set(Header.TENANT_ID, tenantId as string)\n return doInTenant(tenantId, next)\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA2B;AAC3B,qBAAmC;AACnC,sBAA2C;AAC3C,uBAAuB;AACvB,mBAKO;AAEQ,SAAR,gBACL,0BACA,mBACA,OAAwC,EAAE,mBAAmB,MAAM,GACnE;AACA,QAAM,qBAAiB,mCAAkB,wBAAwB;AACjE,QAAM,uBAAmB,mCAAkB,iBAAiB;AAE5D,SAAO,eAAgB,KAAsB,MAAW;AACtD,UAAM,gBACJ,KAAK,qBAAqB,CAAC,KAAC,yBAAQ,KAAK,gBAAgB;AAC3D,UAAM,aAAiC;AAAA,MACrC;AAAA,IACF;AAEA,UAAM,UAAU,CAAC,KAAC,yBAAQ,KAAK,cAAc;AAC7C,QAAI,CAAC,SAAS;AACZ,iBAAW,oBAAoB,CAAC,sCAAyB,KAAK;AAAA,IAChE;AAEA,UAAM,eAAW,mCAAmB,KAAK,UAAU;AACnD,QAAI,IAAI,wBAAO,WAAW,QAAkB;AAC5C,eAAO,2BAAW,UAAU,IAAI;AAAA,EAClC;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var import_adminOnly = __toESM(require("../adminOnly"));
25
+ var import_builderOnly = __toESM(require("../builderOnly"));
26
+ var import_builderOrAdmin = __toESM(require("../builderOrAdmin"));
27
+ var import_tests = require("../../../tests");
28
+ var import_types = require("@budibase/types");
29
+ var import_context = require("../../context");
30
+ var import_environment = __toESM(require("../../environment"));
31
+ import_environment.default._set("SERVICE_TYPE", import_types.ServiceType.APPS);
32
+ const appId = "app_aaa";
33
+ const basicUser = import_tests.structures.users.user();
34
+ const adminUser = import_tests.structures.users.adminUser();
35
+ const adminOnlyUser = import_tests.structures.users.adminOnlyUser();
36
+ const builderUser = import_tests.structures.users.builderUser();
37
+ const appBuilderUser = import_tests.structures.users.appBuilderUser(appId);
38
+ function buildUserCtx(user) {
39
+ return {
40
+ internal: false,
41
+ user,
42
+ throw: jest.fn()
43
+ };
44
+ }
45
+ function passed(throwFn, nextFn) {
46
+ expect(throwFn).not.toBeCalled();
47
+ expect(nextFn).toBeCalled();
48
+ }
49
+ function threw(throwFn) {
50
+ expect(throwFn).toBeCalled();
51
+ }
52
+ describe("adminOnly middleware", () => {
53
+ it("should allow admin user", () => {
54
+ const ctx = buildUserCtx(adminUser), next = jest.fn();
55
+ (0, import_adminOnly.default)(ctx, next);
56
+ passed(ctx.throw, next);
57
+ });
58
+ it("should not allow basic user", () => {
59
+ const ctx = buildUserCtx(basicUser), next = jest.fn();
60
+ (0, import_adminOnly.default)(ctx, next);
61
+ threw(ctx.throw);
62
+ });
63
+ it("should not allow builder user", () => {
64
+ const ctx = buildUserCtx(builderUser), next = jest.fn();
65
+ (0, import_adminOnly.default)(ctx, next);
66
+ threw(ctx.throw);
67
+ });
68
+ });
69
+ describe("builderOnly middleware", () => {
70
+ it("should allow builder user", () => {
71
+ const ctx = buildUserCtx(builderUser), next = jest.fn();
72
+ (0, import_builderOnly.default)(ctx, next);
73
+ passed(ctx.throw, next);
74
+ });
75
+ it("should allow app builder user", () => {
76
+ const ctx = buildUserCtx(appBuilderUser), next = jest.fn();
77
+ (0, import_context.doInAppContext)(appId, () => {
78
+ (0, import_builderOnly.default)(ctx, next);
79
+ });
80
+ passed(ctx.throw, next);
81
+ });
82
+ it("should allow admin and builder user", () => {
83
+ const ctx = buildUserCtx(adminUser), next = jest.fn();
84
+ (0, import_builderOnly.default)(ctx, next);
85
+ passed(ctx.throw, next);
86
+ });
87
+ it("should not allow admin user", () => {
88
+ const ctx = buildUserCtx(adminOnlyUser), next = jest.fn();
89
+ (0, import_builderOnly.default)(ctx, next);
90
+ threw(ctx.throw);
91
+ });
92
+ it("should not allow app builder user to different app", () => {
93
+ const ctx = buildUserCtx(appBuilderUser), next = jest.fn();
94
+ (0, import_context.doInAppContext)("app_bbb", () => {
95
+ (0, import_builderOnly.default)(ctx, next);
96
+ });
97
+ threw(ctx.throw);
98
+ });
99
+ it("should not allow basic user", () => {
100
+ const ctx = buildUserCtx(basicUser), next = jest.fn();
101
+ (0, import_builderOnly.default)(ctx, next);
102
+ threw(ctx.throw);
103
+ });
104
+ });
105
+ describe("builderOrAdmin middleware", () => {
106
+ it("should allow builder user", () => {
107
+ const ctx = buildUserCtx(builderUser), next = jest.fn();
108
+ (0, import_builderOrAdmin.default)(ctx, next);
109
+ passed(ctx.throw, next);
110
+ });
111
+ it("should allow builder and admin user", () => {
112
+ const ctx = buildUserCtx(adminUser), next = jest.fn();
113
+ (0, import_builderOrAdmin.default)(ctx, next);
114
+ passed(ctx.throw, next);
115
+ });
116
+ it("should allow admin user", () => {
117
+ const ctx = buildUserCtx(adminOnlyUser), next = jest.fn();
118
+ (0, import_builderOrAdmin.default)(ctx, next);
119
+ passed(ctx.throw, next);
120
+ });
121
+ it("should allow app builder user", () => {
122
+ const ctx = buildUserCtx(appBuilderUser), next = jest.fn();
123
+ (0, import_context.doInAppContext)(appId, () => {
124
+ (0, import_builderOrAdmin.default)(ctx, next);
125
+ });
126
+ passed(ctx.throw, next);
127
+ });
128
+ it("should not allow basic user", () => {
129
+ const ctx = buildUserCtx(basicUser), next = jest.fn();
130
+ (0, import_builderOrAdmin.default)(ctx, next);
131
+ threw(ctx.throw);
132
+ });
133
+ });
134
+ describe("check service difference", () => {
135
+ it("should not allow without app ID in apps", () => {
136
+ import_environment.default._set("SERVICE_TYPE", import_types.ServiceType.APPS);
137
+ const appId2 = "app_a";
138
+ const ctx = buildUserCtx({
139
+ ...basicUser,
140
+ builder: {
141
+ apps: [appId2]
142
+ }
143
+ });
144
+ const next = jest.fn();
145
+ (0, import_context.doInAppContext)(appId2, () => {
146
+ (0, import_builderOnly.default)(ctx, next);
147
+ });
148
+ passed(ctx.throw, next);
149
+ (0, import_context.doInAppContext)("app_b", () => {
150
+ (0, import_builderOnly.default)(ctx, next);
151
+ });
152
+ threw(ctx.throw);
153
+ });
154
+ it("should allow without app ID in worker", () => {
155
+ import_environment.default._set("SERVICE_TYPE", import_types.ServiceType.WORKER);
156
+ const ctx = buildUserCtx({
157
+ ...basicUser,
158
+ builder: {
159
+ apps: ["app_a"]
160
+ }
161
+ });
162
+ const next = jest.fn();
163
+ (0, import_context.doInAppContext)("app_b", () => {
164
+ (0, import_builderOnly.default)(ctx, next);
165
+ });
166
+ passed(ctx.throw, next);
167
+ });
168
+ });
169
+ //# sourceMappingURL=builder.spec.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/middleware/tests/builder.spec.ts"],
4
+ "sourcesContent": ["import adminOnly from \"../adminOnly\"\nimport builderOnly from \"../builderOnly\"\nimport builderOrAdmin from \"../builderOrAdmin\"\nimport { structures } from \"../../../tests\"\nimport { ContextUser, ServiceType } from \"@budibase/types\"\nimport { doInAppContext } from \"../../context\"\nimport env from \"../../environment\"\nenv._set(\"SERVICE_TYPE\", ServiceType.APPS)\n\nconst appId = \"app_aaa\"\nconst basicUser = structures.users.user()\nconst adminUser = structures.users.adminUser()\nconst adminOnlyUser = structures.users.adminOnlyUser()\nconst builderUser = structures.users.builderUser()\nconst appBuilderUser = structures.users.appBuilderUser(appId)\n\nfunction buildUserCtx(user: ContextUser) {\n return {\n internal: false,\n user,\n throw: jest.fn(),\n } as any\n}\n\nfunction passed(throwFn: jest.Func, nextFn: jest.Func) {\n expect(throwFn).not.toBeCalled()\n expect(nextFn).toBeCalled()\n}\n\nfunction threw(throwFn: jest.Func) {\n // cant check next, the throw function doesn't actually throw - so it still continues\n expect(throwFn).toBeCalled()\n}\n\ndescribe(\"adminOnly middleware\", () => {\n it(\"should allow admin user\", () => {\n const ctx = buildUserCtx(adminUser),\n next = jest.fn()\n adminOnly(ctx, next)\n passed(ctx.throw, next)\n })\n\n it(\"should not allow basic user\", () => {\n const ctx = buildUserCtx(basicUser),\n next = jest.fn()\n adminOnly(ctx, next)\n threw(ctx.throw)\n })\n\n it(\"should not allow builder user\", () => {\n const ctx = buildUserCtx(builderUser),\n next = jest.fn()\n adminOnly(ctx, next)\n threw(ctx.throw)\n })\n})\n\ndescribe(\"builderOnly middleware\", () => {\n it(\"should allow builder user\", () => {\n const ctx = buildUserCtx(builderUser),\n next = jest.fn()\n builderOnly(ctx, next)\n passed(ctx.throw, next)\n })\n\n it(\"should allow app builder user\", () => {\n const ctx = buildUserCtx(appBuilderUser),\n next = jest.fn()\n doInAppContext(appId, () => {\n builderOnly(ctx, next)\n })\n passed(ctx.throw, next)\n })\n\n it(\"should allow admin and builder user\", () => {\n const ctx = buildUserCtx(adminUser),\n next = jest.fn()\n builderOnly(ctx, next)\n passed(ctx.throw, next)\n })\n\n it(\"should not allow admin user\", () => {\n const ctx = buildUserCtx(adminOnlyUser),\n next = jest.fn()\n builderOnly(ctx, next)\n threw(ctx.throw)\n })\n\n it(\"should not allow app builder user to different app\", () => {\n const ctx = buildUserCtx(appBuilderUser),\n next = jest.fn()\n doInAppContext(\"app_bbb\", () => {\n builderOnly(ctx, next)\n })\n threw(ctx.throw)\n })\n\n it(\"should not allow basic user\", () => {\n const ctx = buildUserCtx(basicUser),\n next = jest.fn()\n builderOnly(ctx, next)\n threw(ctx.throw)\n })\n})\n\ndescribe(\"builderOrAdmin middleware\", () => {\n it(\"should allow builder user\", () => {\n const ctx = buildUserCtx(builderUser),\n next = jest.fn()\n builderOrAdmin(ctx, next)\n passed(ctx.throw, next)\n })\n\n it(\"should allow builder and admin user\", () => {\n const ctx = buildUserCtx(adminUser),\n next = jest.fn()\n builderOrAdmin(ctx, next)\n passed(ctx.throw, next)\n })\n\n it(\"should allow admin user\", () => {\n const ctx = buildUserCtx(adminOnlyUser),\n next = jest.fn()\n builderOrAdmin(ctx, next)\n passed(ctx.throw, next)\n })\n\n it(\"should allow app builder user\", () => {\n const ctx = buildUserCtx(appBuilderUser),\n next = jest.fn()\n doInAppContext(appId, () => {\n builderOrAdmin(ctx, next)\n })\n passed(ctx.throw, next)\n })\n\n it(\"should not allow basic user\", () => {\n const ctx = buildUserCtx(basicUser),\n next = jest.fn()\n builderOrAdmin(ctx, next)\n threw(ctx.throw)\n })\n})\n\ndescribe(\"check service difference\", () => {\n it(\"should not allow without app ID in apps\", () => {\n env._set(\"SERVICE_TYPE\", ServiceType.APPS)\n const appId = \"app_a\"\n const ctx = buildUserCtx({\n ...basicUser,\n builder: {\n apps: [appId],\n },\n })\n const next = jest.fn()\n doInAppContext(appId, () => {\n builderOnly(ctx, next)\n })\n passed(ctx.throw, next)\n doInAppContext(\"app_b\", () => {\n builderOnly(ctx, next)\n })\n threw(ctx.throw)\n })\n\n it(\"should allow without app ID in worker\", () => {\n env._set(\"SERVICE_TYPE\", ServiceType.WORKER)\n const ctx = buildUserCtx({\n ...basicUser,\n builder: {\n apps: [\"app_a\"],\n },\n })\n const next = jest.fn()\n doInAppContext(\"app_b\", () => {\n builderOnly(ctx, next)\n })\n passed(ctx.throw, next)\n })\n})\n"],
5
+ "mappings": "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",
6
+ "names": ["env", "adminOnly", "builderOnly", "builderOrAdmin", "appId"]
7
+ }