@budibase/backend-core 2.9.40-alpha.6 → 2.10.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 (252) hide show
  1. package/dist/index.js +5 -4
  2. package/dist/index.js.map +2 -2
  3. package/dist/index.js.meta.json +1 -1
  4. package/dist/package.json +6 -6
  5. package/dist/src/cache/appMetadata.js +1 -1
  6. package/dist/src/cache/appMetadata.js.map +1 -1
  7. package/dist/src/constants/misc.d.ts +0 -2
  8. package/dist/src/constants/misc.js +0 -2
  9. package/dist/src/constants/misc.js.map +1 -1
  10. package/dist/src/environment.js +5 -4
  11. package/dist/src/environment.js.map +1 -1
  12. package/dist/src/logging/system.d.ts +1 -1
  13. package/dist/src/timers/timers.d.ts +1 -1
  14. package/package.json +6 -6
  15. package/src/accounts/accounts.ts +82 -0
  16. package/src/accounts/api.ts +59 -0
  17. package/src/accounts/index.ts +1 -0
  18. package/src/auth/auth.ts +208 -0
  19. package/src/auth/index.ts +1 -0
  20. package/src/auth/tests/auth.spec.ts +14 -0
  21. package/src/blacklist/blacklist.ts +54 -0
  22. package/src/blacklist/index.ts +1 -0
  23. package/src/blacklist/tests/blacklist.spec.ts +46 -0
  24. package/src/cache/appMetadata.ts +88 -0
  25. package/src/cache/base/index.ts +92 -0
  26. package/src/cache/generic.ts +30 -0
  27. package/src/cache/index.ts +5 -0
  28. package/src/cache/tests/writethrough.spec.ts +138 -0
  29. package/src/cache/user.ts +83 -0
  30. package/src/cache/writethrough.ts +133 -0
  31. package/src/configs/configs.ts +257 -0
  32. package/src/configs/index.ts +1 -0
  33. package/src/configs/tests/configs.spec.ts +184 -0
  34. package/src/constants/db.ts +63 -0
  35. package/src/constants/index.ts +2 -0
  36. package/src/constants/misc.ts +50 -0
  37. package/src/context/Context.ts +14 -0
  38. package/src/context/identity.ts +58 -0
  39. package/src/context/index.ts +3 -0
  40. package/src/context/mainContext.ts +310 -0
  41. package/src/context/tests/index.spec.ts +147 -0
  42. package/src/context/types.ts +11 -0
  43. package/src/db/Replication.ts +84 -0
  44. package/src/db/constants.ts +10 -0
  45. package/src/db/couch/DatabaseImpl.ts +238 -0
  46. package/src/db/couch/connections.ts +77 -0
  47. package/src/db/couch/index.ts +5 -0
  48. package/src/db/couch/pouchDB.ts +97 -0
  49. package/src/db/couch/pouchDump.ts +0 -0
  50. package/src/db/couch/utils.ts +50 -0
  51. package/src/db/db.ts +43 -0
  52. package/src/db/errors.ts +14 -0
  53. package/src/db/index.ts +12 -0
  54. package/src/db/lucene.ts +750 -0
  55. package/src/db/searchIndexes/index.ts +1 -0
  56. package/src/db/searchIndexes/searchIndexes.ts +62 -0
  57. package/src/db/tests/index.spec.js +25 -0
  58. package/src/db/tests/lucene.spec.ts +368 -0
  59. package/src/db/tests/pouch.spec.js +62 -0
  60. package/src/db/tests/utils.spec.ts +63 -0
  61. package/src/db/utils.ts +207 -0
  62. package/src/db/views.ts +241 -0
  63. package/src/docIds/conversions.ts +59 -0
  64. package/src/docIds/ids.ts +113 -0
  65. package/src/docIds/index.ts +2 -0
  66. package/src/docIds/newid.ts +5 -0
  67. package/src/docIds/params.ts +174 -0
  68. package/src/docUpdates/index.ts +29 -0
  69. package/src/environment.ts +201 -0
  70. package/src/errors/errors.ts +119 -0
  71. package/src/errors/index.ts +1 -0
  72. package/src/events/analytics.ts +6 -0
  73. package/src/events/asyncEvents/index.ts +2 -0
  74. package/src/events/asyncEvents/publisher.ts +12 -0
  75. package/src/events/asyncEvents/queue.ts +22 -0
  76. package/src/events/backfill.ts +183 -0
  77. package/src/events/documentId.ts +56 -0
  78. package/src/events/events.ts +40 -0
  79. package/src/events/identification.ts +310 -0
  80. package/src/events/index.ts +14 -0
  81. package/src/events/processors/AnalyticsProcessor.ts +64 -0
  82. package/src/events/processors/AuditLogsProcessor.ts +93 -0
  83. package/src/events/processors/LoggingProcessor.ts +37 -0
  84. package/src/events/processors/Processors.ts +52 -0
  85. package/src/events/processors/async/DocumentUpdateProcessor.ts +43 -0
  86. package/src/events/processors/index.ts +19 -0
  87. package/src/events/processors/posthog/PosthogProcessor.ts +118 -0
  88. package/src/events/processors/posthog/index.ts +2 -0
  89. package/src/events/processors/posthog/rateLimiting.ts +106 -0
  90. package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +168 -0
  91. package/src/events/processors/types.ts +1 -0
  92. package/src/events/publishers/account.ts +35 -0
  93. package/src/events/publishers/app.ts +155 -0
  94. package/src/events/publishers/auditLog.ts +26 -0
  95. package/src/events/publishers/auth.ts +73 -0
  96. package/src/events/publishers/automation.ts +110 -0
  97. package/src/events/publishers/backfill.ts +74 -0
  98. package/src/events/publishers/backup.ts +42 -0
  99. package/src/events/publishers/datasource.ts +48 -0
  100. package/src/events/publishers/email.ts +17 -0
  101. package/src/events/publishers/environmentVariable.ts +38 -0
  102. package/src/events/publishers/group.ts +99 -0
  103. package/src/events/publishers/index.ts +24 -0
  104. package/src/events/publishers/installation.ts +38 -0
  105. package/src/events/publishers/layout.ts +26 -0
  106. package/src/events/publishers/license.ts +84 -0
  107. package/src/events/publishers/org.ts +37 -0
  108. package/src/events/publishers/plugin.ts +47 -0
  109. package/src/events/publishers/query.ts +88 -0
  110. package/src/events/publishers/role.ts +62 -0
  111. package/src/events/publishers/rows.ts +29 -0
  112. package/src/events/publishers/screen.ts +36 -0
  113. package/src/events/publishers/serve.ts +43 -0
  114. package/src/events/publishers/table.ts +70 -0
  115. package/src/events/publishers/user.ts +202 -0
  116. package/src/events/publishers/view.ts +107 -0
  117. package/src/features/index.ts +78 -0
  118. package/src/features/installation.ts +17 -0
  119. package/src/features/tests/featureFlags.spec.ts +85 -0
  120. package/src/helpers.ts +9 -0
  121. package/src/index.ts +54 -0
  122. package/src/installation.ts +107 -0
  123. package/src/logging/alerts.ts +26 -0
  124. package/src/logging/correlation/correlation.ts +13 -0
  125. package/src/logging/correlation/index.ts +1 -0
  126. package/src/logging/correlation/middleware.ts +17 -0
  127. package/src/logging/index.ts +4 -0
  128. package/src/logging/pino/logger.ts +232 -0
  129. package/src/logging/pino/middleware.ts +45 -0
  130. package/src/logging/system.ts +81 -0
  131. package/src/logging/tests/system.spec.ts +61 -0
  132. package/src/middleware/adminOnly.ts +9 -0
  133. package/src/middleware/auditLog.ts +6 -0
  134. package/src/middleware/authenticated.ts +193 -0
  135. package/src/middleware/builderOnly.ts +21 -0
  136. package/src/middleware/builderOrAdmin.ts +21 -0
  137. package/src/middleware/csrf.ts +81 -0
  138. package/src/middleware/errorHandling.ts +29 -0
  139. package/src/middleware/index.ts +21 -0
  140. package/src/middleware/internalApi.ts +23 -0
  141. package/src/middleware/joi-validator.ts +45 -0
  142. package/src/middleware/matchers.ts +47 -0
  143. package/src/middleware/passport/datasource/google.ts +95 -0
  144. package/src/middleware/passport/local.ts +54 -0
  145. package/src/middleware/passport/sso/google.ts +77 -0
  146. package/src/middleware/passport/sso/oidc.ts +154 -0
  147. package/src/middleware/passport/sso/sso.ts +165 -0
  148. package/src/middleware/passport/sso/tests/google.spec.ts +67 -0
  149. package/src/middleware/passport/sso/tests/oidc.spec.ts +152 -0
  150. package/src/middleware/passport/sso/tests/sso.spec.ts +197 -0
  151. package/src/middleware/passport/utils.ts +38 -0
  152. package/src/middleware/querystringToBody.ts +28 -0
  153. package/src/middleware/tenancy.ts +36 -0
  154. package/src/middleware/tests/builder.spec.ts +180 -0
  155. package/src/middleware/tests/matchers.spec.ts +134 -0
  156. package/src/migrations/definitions.ts +40 -0
  157. package/src/migrations/index.ts +2 -0
  158. package/src/migrations/migrations.ts +191 -0
  159. package/src/migrations/tests/__snapshots__/migrations.spec.ts.snap +11 -0
  160. package/src/migrations/tests/migrations.spec.ts +64 -0
  161. package/src/objectStore/buckets/app.ts +40 -0
  162. package/src/objectStore/buckets/global.ts +29 -0
  163. package/src/objectStore/buckets/index.ts +3 -0
  164. package/src/objectStore/buckets/plugins.ts +71 -0
  165. package/src/objectStore/buckets/tests/app.spec.ts +171 -0
  166. package/src/objectStore/buckets/tests/global.spec.ts +74 -0
  167. package/src/objectStore/buckets/tests/plugins.spec.ts +111 -0
  168. package/src/objectStore/cloudfront.ts +41 -0
  169. package/src/objectStore/index.ts +3 -0
  170. package/src/objectStore/objectStore.ts +440 -0
  171. package/src/objectStore/utils.ts +27 -0
  172. package/src/platform/index.ts +3 -0
  173. package/src/platform/platformDb.ts +6 -0
  174. package/src/platform/tenants.ts +101 -0
  175. package/src/platform/tests/tenants.spec.ts +26 -0
  176. package/src/platform/users.ts +90 -0
  177. package/src/plugin/index.ts +1 -0
  178. package/src/plugin/tests/validation.spec.ts +83 -0
  179. package/src/plugin/utils.ts +156 -0
  180. package/src/queue/constants.ts +6 -0
  181. package/src/queue/inMemoryQueue.ts +141 -0
  182. package/src/queue/index.ts +2 -0
  183. package/src/queue/listeners.ts +195 -0
  184. package/src/queue/queue.ts +54 -0
  185. package/src/redis/index.ts +6 -0
  186. package/src/redis/init.ts +86 -0
  187. package/src/redis/redis.ts +308 -0
  188. package/src/redis/redlockImpl.ts +139 -0
  189. package/src/redis/utils.ts +117 -0
  190. package/src/security/encryption.ts +179 -0
  191. package/src/security/permissions.ts +158 -0
  192. package/src/security/roles.ts +389 -0
  193. package/src/security/sessions.ts +120 -0
  194. package/src/security/tests/encryption.spec.ts +31 -0
  195. package/src/security/tests/permissions.spec.ts +145 -0
  196. package/src/security/tests/sessions.spec.ts +12 -0
  197. package/src/tenancy/db.ts +6 -0
  198. package/src/tenancy/index.ts +2 -0
  199. package/src/tenancy/tenancy.ts +140 -0
  200. package/src/tenancy/tests/tenancy.spec.ts +184 -0
  201. package/src/timers/index.ts +1 -0
  202. package/src/timers/timers.ts +22 -0
  203. package/src/users/db.ts +484 -0
  204. package/src/users/events.ts +176 -0
  205. package/src/users/index.ts +4 -0
  206. package/src/users/lookup.ts +102 -0
  207. package/src/users/users.ts +276 -0
  208. package/src/users/utils.ts +55 -0
  209. package/src/utils/hashing.ts +14 -0
  210. package/src/utils/index.ts +3 -0
  211. package/src/utils/stringUtils.ts +8 -0
  212. package/src/utils/tests/utils.spec.ts +191 -0
  213. package/src/utils/utils.ts +239 -0
  214. package/tests/core/logging.ts +34 -0
  215. package/tests/core/utilities/index.ts +6 -0
  216. package/tests/core/utilities/jestUtils.ts +30 -0
  217. package/tests/core/utilities/mocks/alerts.ts +3 -0
  218. package/tests/core/utilities/mocks/date.ts +2 -0
  219. package/tests/core/utilities/mocks/events.ts +131 -0
  220. package/tests/core/utilities/mocks/fetch.ts +17 -0
  221. package/tests/core/utilities/mocks/index.ts +10 -0
  222. package/tests/core/utilities/mocks/licenses.ts +115 -0
  223. package/tests/core/utilities/mocks/posthog.ts +7 -0
  224. package/tests/core/utilities/structures/Chance.ts +20 -0
  225. package/tests/core/utilities/structures/accounts.ts +115 -0
  226. package/tests/core/utilities/structures/apps.ts +21 -0
  227. package/tests/core/utilities/structures/common.ts +7 -0
  228. package/tests/core/utilities/structures/db.ts +12 -0
  229. package/tests/core/utilities/structures/documents/index.ts +1 -0
  230. package/tests/core/utilities/structures/documents/platform/index.ts +1 -0
  231. package/tests/core/utilities/structures/documents/platform/installation.ts +12 -0
  232. package/tests/core/utilities/structures/generator.ts +2 -0
  233. package/tests/core/utilities/structures/index.ts +15 -0
  234. package/tests/core/utilities/structures/koa.ts +16 -0
  235. package/tests/core/utilities/structures/licenses.ts +167 -0
  236. package/tests/core/utilities/structures/plugins.ts +19 -0
  237. package/tests/core/utilities/structures/quotas.ts +67 -0
  238. package/tests/core/utilities/structures/scim.ts +80 -0
  239. package/tests/core/utilities/structures/shared.ts +19 -0
  240. package/tests/core/utilities/structures/sso.ts +119 -0
  241. package/tests/core/utilities/structures/tenants.ts +5 -0
  242. package/tests/core/utilities/structures/userGroups.ts +10 -0
  243. package/tests/core/utilities/structures/users.ts +73 -0
  244. package/tests/core/utilities/testContainerUtils.ts +85 -0
  245. package/tests/core/utilities/utils/index.ts +1 -0
  246. package/tests/core/utilities/utils/time.ts +3 -0
  247. package/tests/extra/DBTestConfiguration.ts +36 -0
  248. package/tests/extra/index.ts +2 -0
  249. package/tests/extra/testEnv.ts +95 -0
  250. package/tests/index.ts +1 -0
  251. package/tests/jestEnv.ts +6 -0
  252. package/tests/jestSetup.ts +28 -0
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@budibase/backend-core",
3
- "version": "2.9.40-alpha.6",
3
+ "version": "2.10.1",
4
4
  "description": "Budibase backend core libraries used in server and worker",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -23,8 +23,8 @@
23
23
  "dependencies": {
24
24
  "@budibase/nano": "10.1.2",
25
25
  "@budibase/pouchdb-replication-stream": "1.2.10",
26
- "@budibase/shared-core": "2.9.40-alpha.6",
27
- "@budibase/types": "2.9.40-alpha.6",
26
+ "@budibase/shared-core": "2.10.1",
27
+ "@budibase/types": "2.10.1",
28
28
  "@techpass/passport-openidconnect": "0.3.2",
29
29
  "aws-cloudfront-sign": "2.2.0",
30
30
  "aws-sdk": "2.1030.0",
@@ -68,8 +68,8 @@
68
68
  "@types/jest": "29.5.3",
69
69
  "@types/koa": "2.13.4",
70
70
  "@types/lodash": "4.14.180",
71
- "@types/node": "18.17.0",
72
- "@types/node-fetch": "2.6.4",
71
+ "@types/node": "14.18.20",
72
+ "@types/node-fetch": "2.6.1",
73
73
  "@types/pouchdb": "6.4.0",
74
74
  "@types/redlock": "4.0.3",
75
75
  "@types/semver": "7.3.7",
@@ -104,5 +104,5 @@
104
104
  }
105
105
  }
106
106
  },
107
- "gitHead": "c12bc9b18283092a1fdf3a8e60919592c4d9666d"
107
+ "gitHead": "8f5a104e9d1e6edc2ed58bf0ca16a2aec8980be8"
108
108
  }
@@ -59,7 +59,7 @@ function getAppMetadata(appId) {
59
59
  throw err;
60
60
  }
61
61
  }
62
- // needed for some scenarios where the caching happens
62
+ // needed for cypress/some scenarios where the caching happens
63
63
  // so quickly the requests can get slightly out of sync
64
64
  // might store its invalid just before it stores its valid
65
65
  if (isInvalid(metadata)) {
@@ -1 +1 @@
1
- {"version":3,"file":"appMetadata.js","sourceRoot":"","sources":["../../../src/cache/appMetadata.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA4C;AAC5C,8BAA8C;AAG9C,IAAY,QAEX;AAFD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;AACrB,CAAC,EAFW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAEnB;AAMD,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B;;GAEG;AACH,SAAe,cAAc,CAAC,KAAa;;QACzC,OAAO,IAAA,aAAQ,EACb,KAAK,EACL,CAAC,EAAY,EAAE,EAAE;YACf,OAAO,EAAE,CAAC,GAAG,CAAC,iBAAY,CAAC,YAAY,CAAC,CAAA;QAC1C,CAAC,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAA;IACH,CAAC;CAAA;AAED,SAAS,SAAS,CAAC,QAA4B;IAC7C,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAA;AACzD,CAAC;AAED;;;;;;GAMG;AACH,SAAsB,cAAc,CAAC,KAAa;;QAChD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAY,GAAE,CAAA;QACnC,YAAY;QACZ,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,MAAM,GAAuB,cAAc,CAAA;YAC/C,IAAI;gBACF,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAA;aACvC;YAAC,OAAO,GAAQ,EAAE;gBACjB,qDAAqD;gBACrD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;oBAC7B,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAA;oBACtC,8DAA8D;oBAC9D,0EAA0E;oBAC1E,MAAM,GAAG,SAAS,CAAA;iBACnB;qBAAM;oBACL,MAAM,GAAG,CAAA;iBACV;aACF;YACD,sDAAsD;YACtD,uDAAuD;YACvD,0DAA0D;YAC1D,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;gBACvB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACpC,IAAI,IAAI,EAAE;oBACR,QAAQ,GAAG,IAAI,CAAA;iBAChB;aACF;YACD,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;SAC5C;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;CAAA;AAhCD,wCAgCC;AAED;;;;;GAKG;AACH,SAAsB,qBAAqB,CAAC,KAAa,EAAE,WAAiB;;QAC1E,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,0CAA0C,CAAA;SACjD;QACD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAY,GAAE,CAAA;QACnC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,WAAW,EAAE;YACf,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;SACvD;IACH,CAAC;CAAA;AATD,sDASC"}
1
+ {"version":3,"file":"appMetadata.js","sourceRoot":"","sources":["../../../src/cache/appMetadata.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA4C;AAC5C,8BAA8C;AAG9C,IAAY,QAEX;AAFD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;AACrB,CAAC,EAFW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAEnB;AAMD,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B;;GAEG;AACH,SAAe,cAAc,CAAC,KAAa;;QACzC,OAAO,IAAA,aAAQ,EACb,KAAK,EACL,CAAC,EAAY,EAAE,EAAE;YACf,OAAO,EAAE,CAAC,GAAG,CAAC,iBAAY,CAAC,YAAY,CAAC,CAAA;QAC1C,CAAC,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAA;IACH,CAAC;CAAA;AAED,SAAS,SAAS,CAAC,QAA4B;IAC7C,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAA;AACzD,CAAC;AAED;;;;;;GAMG;AACH,SAAsB,cAAc,CAAC,KAAa;;QAChD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAY,GAAE,CAAA;QACnC,YAAY;QACZ,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,MAAM,GAAuB,cAAc,CAAA;YAC/C,IAAI;gBACF,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAA;aACvC;YAAC,OAAO,GAAQ,EAAE;gBACjB,qDAAqD;gBACrD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;oBAC7B,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAA;oBACtC,8DAA8D;oBAC9D,0EAA0E;oBAC1E,MAAM,GAAG,SAAS,CAAA;iBACnB;qBAAM;oBACL,MAAM,GAAG,CAAA;iBACV;aACF;YACD,8DAA8D;YAC9D,uDAAuD;YACvD,0DAA0D;YAC1D,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;gBACvB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACpC,IAAI,IAAI,EAAE;oBACR,QAAQ,GAAG,IAAI,CAAA;iBAChB;aACF;YACD,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;SAC5C;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;CAAA;AAhCD,wCAgCC;AAED;;;;;GAKG;AACH,SAAsB,qBAAqB,CAAC,KAAa,EAAE,WAAiB;;QAC1E,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,0CAA0C,CAAA;SACjD;QACD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAY,GAAE,CAAA;QACnC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,WAAW,EAAE;YACf,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;SACvD;IACH,CAAC;CAAA;AATD,sDASC"}
@@ -20,8 +20,6 @@ export declare enum Header {
20
20
  TENANT_ID = "x-budibase-tenant-id",
21
21
  VERIFICATION_CODE = "x-budibase-verification-code",
22
22
  RETURN_VERIFICATION_CODE = "x-budibase-return-verification-code",
23
- RESET_PASSWORD_CODE = "x-budibase-reset-password-code",
24
- RETURN_RESET_PASSWORD_CODE = "x-budibase-return-reset-password-code",
25
23
  TOKEN = "x-budibase-token",
26
24
  CSRF_TOKEN = "x-csrf-token",
27
25
  CORRELATION_ID = "x-budibase-correlation-id",
@@ -26,8 +26,6 @@ var Header;
26
26
  Header["TENANT_ID"] = "x-budibase-tenant-id";
27
27
  Header["VERIFICATION_CODE"] = "x-budibase-verification-code";
28
28
  Header["RETURN_VERIFICATION_CODE"] = "x-budibase-return-verification-code";
29
- Header["RESET_PASSWORD_CODE"] = "x-budibase-reset-password-code";
30
- Header["RETURN_RESET_PASSWORD_CODE"] = "x-budibase-return-reset-password-code";
31
29
  Header["TOKEN"] = "x-budibase-token";
32
30
  Header["CSRF_TOKEN"] = "x-csrf-token";
33
31
  Header["CORRELATION_ID"] = "x-budibase-correlation-id";
@@ -1 +1 @@
1
- {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/constants/misc.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,mCAAqB,CAAA;AACvB,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB;AAED,IAAY,MAMX;AAND,WAAY,MAAM;IAChB,gCAAsB,CAAA;IACtB,gCAAsB,CAAA;IACtB,2DAAiD,CAAA;IACjD,oDAA0C,CAAA;IAC1C,8CAAoC,CAAA;AACtC,CAAC,EANW,MAAM,GAAN,cAAM,KAAN,cAAM,QAMjB;AAED,IAAY,MAiBX;AAjBD,WAAY,MAAM;IAChB,wCAA8B,CAAA;IAC9B,gDAAsC,CAAA;IACtC,4CAAkC,CAAA;IAClC,sCAA4B,CAAA;IAC5B,8CAAoC,CAAA;IACpC,kCAAwB,CAAA;IACxB,0CAAgC,CAAA;IAChC,4CAAkC,CAAA;IAClC,4DAAkD,CAAA;IAClD,0EAAgE,CAAA;IAChE,gEAAsD,CAAA;IACtD,8EAAoE,CAAA;IACpE,oCAA0B,CAAA;IAC1B,qCAA2B,CAAA;IAC3B,sDAA4C,CAAA;IAC5C,yCAA+B,CAAA;AACjC,CAAC,EAjBW,MAAM,GAAN,cAAM,KAAN,cAAM,QAiBjB;AAED,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,6BAAe,CAAA;IACf,6BAAe,CAAA;IACf,iCAAmB,CAAA;IACnB,qDAAuC,CAAA;AACzC,CAAC,EALW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAKrB;AAED,IAAY,MAQX;AARD,WAAY,MAAM;IAChB,+BAAqB,CAAA;IACrB,6BAAmB,CAAA;IACnB,uBAAa,CAAA;IACb,2BAAiB,CAAA;IACjB,uBAAa,CAAA;IACb,mCAAyB,CAAA;IACzB,uBAAa,CAAA;AACf,CAAC,EARW,MAAM,GAAN,cAAM,KAAN,cAAM,QAQjB;AAEY,QAAA,cAAc,GAAG,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,CAAA;AACzC,QAAA,cAAc,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAA;AACxC,QAAA,iBAAiB,GAAG,SAAS,CAAA"}
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/constants/misc.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,mCAAqB,CAAA;AACvB,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB;AAED,IAAY,MAMX;AAND,WAAY,MAAM;IAChB,gCAAsB,CAAA;IACtB,gCAAsB,CAAA;IACtB,2DAAiD,CAAA;IACjD,oDAA0C,CAAA;IAC1C,8CAAoC,CAAA;AACtC,CAAC,EANW,MAAM,GAAN,cAAM,KAAN,cAAM,QAMjB;AAED,IAAY,MAeX;AAfD,WAAY,MAAM;IAChB,wCAA8B,CAAA;IAC9B,gDAAsC,CAAA;IACtC,4CAAkC,CAAA;IAClC,sCAA4B,CAAA;IAC5B,8CAAoC,CAAA;IACpC,kCAAwB,CAAA;IACxB,0CAAgC,CAAA;IAChC,4CAAkC,CAAA;IAClC,4DAAkD,CAAA;IAClD,0EAAgE,CAAA;IAChE,oCAA0B,CAAA;IAC1B,qCAA2B,CAAA;IAC3B,sDAA4C,CAAA;IAC5C,yCAA+B,CAAA;AACjC,CAAC,EAfW,MAAM,GAAN,cAAM,KAAN,cAAM,QAejB;AAED,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,6BAAe,CAAA;IACf,6BAAe,CAAA;IACf,iCAAmB,CAAA;IACnB,qDAAuC,CAAA;AACzC,CAAC,EALW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAKrB;AAED,IAAY,MAQX;AARD,WAAY,MAAM;IAChB,+BAAqB,CAAA;IACrB,6BAAmB,CAAA;IACnB,uBAAa,CAAA;IACb,2BAAiB,CAAA;IACjB,uBAAa,CAAA;IACb,mCAAyB,CAAA;IACzB,uBAAa,CAAA;AACf,CAAC,EARW,MAAM,GAAN,cAAM,KAAN,cAAM,QAQjB;AAEY,QAAA,cAAc,GAAG,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,CAAA;AACzC,QAAA,cAAc,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAA;AACxC,QAAA,iBAAiB,GAAG,SAAS,CAAA"}
@@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const fs_1 = require("fs");
4
4
  const types_1 = require("@budibase/types");
5
5
  function isTest() {
6
- return isJest();
6
+ return isCypress() || isJest();
7
7
  }
8
8
  function isJest() {
9
- return (process.env.NODE_ENV === "jest" ||
10
- (process.env.JEST_WORKER_ID != null &&
11
- process.env.JEST_WORKER_ID !== "null"));
9
+ return !!(process.env.NODE_ENV === "jest" || process.env.JEST_WORKER_ID);
10
+ }
11
+ function isCypress() {
12
+ return process.env.NODE_ENV === "cypress";
12
13
  }
13
14
  function isDev() {
14
15
  return process.env.NODE_ENV !== "production";
@@ -1 +1 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":";;AAAA,2BAA6C;AAC7C,2CAA6C;AAE7C,SAAS,MAAM;IACb,OAAO,MAAM,EAAE,CAAA;AACjB,CAAC;AAED,SAAS,MAAM;IACb,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM;QAC/B,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI;YACjC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,CAAC,CACzC,CAAA;AACH,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;AAC9C,CAAC;AAED,IAAI,MAAM,GAAG,KAAK,CAAA;AAClB,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IAC1B,MAAM,GAAG,IAAI,CAAA;CACd;AAED,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,sBAAsB;IAC5B,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACnB,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;AAE5D,SAAS,mBAAmB;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB;QACnC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAChC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA,CAAC,+CAA+C;AAC5E,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE;QAC1C,2CAA2C;QAC3C,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;AACjC,CAAC;AAED,SAAS,oBAAoB;IAI3B,SAAS,mBAAmB,CAC1B,QAAgB,EAChB,UAAkB;QAElB,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAA;QAC5C,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE;YACxB,OAAO,QAAQ,CAAA;SAChB;QAED,MAAM,SAAS,GAAG,GAAG,UAAU,KAAK,CAAA;QACpC,IAAI,SAAS,KAAK,UAAU,EAAE;YAC5B,yBAAyB;YACzB,OAAO,IAAI,CAAA;SACZ;QAED,OAAO,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACjD,CAAC;IAED,IAAI;QACF,MAAM,eAAe,GAAG,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC1E,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,eAAgB,EAAE,OAAO,CAAC,CAAA;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACzC,OAAO;YACL,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,YAAY,EAAE,aAAa,CAAC,IAAI;SACjC,CAAA;KACF;IAAC,WAAM;QACN,+EAA+E;QAC/E,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;KACzC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,WAAW,CAAC,YAAY,KAAK,mBAAW,CAAC,MAAM,CAAA;AACxD,CAAC;AAED,SAAS,MAAM;IACb,OAAO,WAAW,CAAC,YAAY,KAAK,mBAAW,CAAC,IAAI,CAAA;AACtD,CAAC;AAED,MAAM,WAAW,iCACf,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM,EACN,MAAM,EAAE,GAAG,EAAE;QACX,OAAO,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC,EACD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAClC,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EACpD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAC1C,kBAAkB,EAAE,mBAAmB,EAAE,EACzC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,uBAAuB,EACjE,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAC5C,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAChD,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EACtD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EACpC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,gBAAgB,EACpD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAC1C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAC5C,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAClC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,EAC7C,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAChE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,kBAAkB,EAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,8BAA8B,EAClE,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,EAChE,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAC1D,WAAW,EAAE,UAAU,EACvB,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,EAC5C,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EACtD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAC1C,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAChE,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAC9D,mBAAmB,EACjB,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,iBAAiB,CAAC,OAAO,EAC9D,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,iBAAiB,CAAC,IAAI,EACxE,qBAAqB,EACnB,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,iBAAiB,CAAC,SAAS,EAClE,kBAAkB,EAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,iBAAiB,CAAC,MAAM,EAC5D,kBAAkB,EAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,iBAAiB,CAAC,OAAO,EAC7D,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,EACxC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAClC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAC5C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU,EAC1C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,EAC1C,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EACxD,sBAAsB,EACpB,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,gBAAgB,EACxD,YAAY,EAAE,WAAW,EAAE,EAC3B,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;IAC9D,OAAO;IACP,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EACxD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAChD,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAChD,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EACpD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,YAAY,EAAE,SAAS;IACvB;;;;OAIG;IACH,2BAA2B,EAAE,UAAU;QACrC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACzC,CAAC,CAAC,KAAK,IACN,oBAAoB,EAAE,KACzB,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EACpD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EACtC,IAAI,CAAC,GAAQ,EAAE,KAAU;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,aAAa;QACb,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAC1B,CAAC,EACD,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,KAAK,GAChE,CAAA;AAED,+CAA+C;AAC/C,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;IACpD,iEAAiE;IACjE,IAAI,KAAK,KAAK,GAAG,EAAE;QACjB,aAAa;QACb,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;KACrB;IACD,qEAAqE;IACrE,IAAI,KAAK,KAAK,OAAO,EAAE;QACrB,aAAa;QACb,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;KACrB;CACF;AAED,kBAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":";;AAAA,2BAA6C;AAC7C,2CAA6C;AAE7C,SAAS,MAAM;IACb,OAAO,SAAS,EAAE,IAAI,MAAM,EAAE,CAAA;AAChC,CAAC;AAED,SAAS,MAAM;IACb,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;AAC1E,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAA;AAC3C,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;AAC9C,CAAC;AAED,IAAI,MAAM,GAAG,KAAK,CAAA;AAClB,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IAC1B,MAAM,GAAG,IAAI,CAAA;CACd;AAED,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,sBAAsB;IAC5B,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACnB,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;AAE5D,SAAS,mBAAmB;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB;QACnC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAChC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA,CAAC,+CAA+C;AAC5E,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE;QAC1C,2CAA2C;QAC3C,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;AACjC,CAAC;AAED,SAAS,oBAAoB;IAI3B,SAAS,mBAAmB,CAC1B,QAAgB,EAChB,UAAkB;QAElB,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAA;QAC5C,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE;YACxB,OAAO,QAAQ,CAAA;SAChB;QAED,MAAM,SAAS,GAAG,GAAG,UAAU,KAAK,CAAA;QACpC,IAAI,SAAS,KAAK,UAAU,EAAE;YAC5B,yBAAyB;YACzB,OAAO,IAAI,CAAA;SACZ;QAED,OAAO,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACjD,CAAC;IAED,IAAI;QACF,MAAM,eAAe,GAAG,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC1E,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,eAAgB,EAAE,OAAO,CAAC,CAAA;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACzC,OAAO;YACL,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,YAAY,EAAE,aAAa,CAAC,IAAI;SACjC,CAAA;KACF;IAAC,WAAM;QACN,+EAA+E;QAC/E,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;KACzC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,WAAW,CAAC,YAAY,KAAK,mBAAW,CAAC,MAAM,CAAA;AACxD,CAAC;AAED,SAAS,MAAM;IACb,OAAO,WAAW,CAAC,YAAY,KAAK,mBAAW,CAAC,IAAI,CAAA;AACtD,CAAC;AAED,MAAM,WAAW,iCACf,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM,EACN,MAAM,EAAE,GAAG,EAAE;QACX,OAAO,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC,EACD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAClC,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EACpD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAC1C,kBAAkB,EAAE,mBAAmB,EAAE,EACzC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,uBAAuB,EACjE,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAC5C,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAChD,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EACtD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EACpC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,gBAAgB,EACpD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAC1C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAC5C,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAClC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,EAC7C,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAChE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,kBAAkB,EAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,8BAA8B,EAClE,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,EAChE,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAC1D,WAAW,EAAE,UAAU,EACvB,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,EAC5C,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC9C,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EACtD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAC1C,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAChE,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAC9D,mBAAmB,EACjB,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,iBAAiB,CAAC,OAAO,EAC9D,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,iBAAiB,CAAC,IAAI,EACxE,qBAAqB,EACnB,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,iBAAiB,CAAC,SAAS,EAClE,kBAAkB,EAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,iBAAiB,CAAC,MAAM,EAC5D,kBAAkB,EAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,iBAAiB,CAAC,OAAO,EAC7D,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,EACxC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAClC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAC5C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU,EAC1C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,EAC1C,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EACxD,sBAAsB,EACpB,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,gBAAgB,EACxD,YAAY,EAAE,WAAW,EAAE,EAC3B,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;IAC9D,OAAO;IACP,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EACxD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAChD,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAChD,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EACpD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EACxC,YAAY,EAAE,SAAS;IACvB;;;;OAIG;IACH,2BAA2B,EAAE,UAAU;QACrC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACzC,CAAC,CAAC,KAAK,IACN,oBAAoB,EAAE,KACzB,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EACpD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EACtC,IAAI,CAAC,GAAQ,EAAE,KAAU;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,aAAa;QACb,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAC1B,CAAC,EACD,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,KAAK,GAChE,CAAA;AAED,+CAA+C;AAC/C,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;IACpD,iEAAiE;IACjE,IAAI,KAAK,KAAK,GAAG,EAAE;QACjB,aAAa;QACb,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;KACrB;IACD,qEAAqE;IACrE,IAAI,KAAK,KAAK,OAAO,EAAE;QACrB,aAAa;QACb,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;KACrB;CACF;AAED,kBAAe,WAAW,CAAA"}
@@ -1,5 +1,5 @@
1
- /// <reference types="pouchdb-core" />
2
1
  /// <reference types="node" />
2
+ /// <reference types="pouchdb-core" />
3
3
  import * as rfs from "rotating-file-stream";
4
4
  export declare function getSingleFileMaxSizeInfo(totalMaxSize: string): {
5
5
  size: string;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="node" />
2
- export declare function set(callback: () => any, period: number): NodeJS.Timer;
2
+ export declare function set(callback: () => any, period: number): NodeJS.Timeout;
3
3
  export declare function clear(interval: NodeJS.Timeout): void;
4
4
  export declare function cleanup(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@budibase/backend-core",
3
- "version": "2.9.40-alpha.6",
3
+ "version": "2.10.1",
4
4
  "description": "Budibase backend core libraries used in server and worker",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -23,8 +23,8 @@
23
23
  "dependencies": {
24
24
  "@budibase/nano": "10.1.2",
25
25
  "@budibase/pouchdb-replication-stream": "1.2.10",
26
- "@budibase/shared-core": "2.9.40-alpha.6",
27
- "@budibase/types": "2.9.40-alpha.6",
26
+ "@budibase/shared-core": "2.10.1",
27
+ "@budibase/types": "2.10.1",
28
28
  "@techpass/passport-openidconnect": "0.3.2",
29
29
  "aws-cloudfront-sign": "2.2.0",
30
30
  "aws-sdk": "2.1030.0",
@@ -68,8 +68,8 @@
68
68
  "@types/jest": "29.5.3",
69
69
  "@types/koa": "2.13.4",
70
70
  "@types/lodash": "4.14.180",
71
- "@types/node": "18.17.0",
72
- "@types/node-fetch": "2.6.4",
71
+ "@types/node": "14.18.20",
72
+ "@types/node-fetch": "2.6.1",
73
73
  "@types/pouchdb": "6.4.0",
74
74
  "@types/redlock": "4.0.3",
75
75
  "@types/semver": "7.3.7",
@@ -104,5 +104,5 @@
104
104
  }
105
105
  }
106
106
  },
107
- "gitHead": "c12bc9b18283092a1fdf3a8e60919592c4d9666d"
107
+ "gitHead": "8f5a104e9d1e6edc2ed58bf0ca16a2aec8980be8"
108
108
  }
@@ -0,0 +1,82 @@
1
+ import API from "./api"
2
+ import env from "../environment"
3
+ import { Header } from "../constants"
4
+ import { CloudAccount, HealthStatusResponse } from "@budibase/types"
5
+
6
+ const api = new API(env.ACCOUNT_PORTAL_URL)
7
+
8
+ /**
9
+ * This client is intended to be used in a cloud hosted deploy only.
10
+ * Rather than relying on each consumer to perform the necessary environmental checks
11
+ * we use the following check to exit early with a undefined response which should be
12
+ * handled by the caller.
13
+ */
14
+ const EXIT_EARLY = env.SELF_HOSTED || env.DISABLE_ACCOUNT_PORTAL
15
+
16
+ export const getAccount = async (
17
+ email: string
18
+ ): Promise<CloudAccount | undefined> => {
19
+ if (EXIT_EARLY) {
20
+ return
21
+ }
22
+ const payload = {
23
+ email,
24
+ }
25
+ const response = await api.post(`/api/accounts/search`, {
26
+ body: payload,
27
+ headers: {
28
+ [Header.API_KEY]: env.ACCOUNT_PORTAL_API_KEY,
29
+ },
30
+ })
31
+
32
+ if (response.status !== 200) {
33
+ throw new Error(`Error getting account by email ${email}`)
34
+ }
35
+
36
+ const json: CloudAccount[] = await response.json()
37
+ return json[0]
38
+ }
39
+
40
+ export const getAccountByTenantId = async (
41
+ tenantId: string
42
+ ): Promise<CloudAccount | undefined> => {
43
+ if (EXIT_EARLY) {
44
+ return
45
+ }
46
+ const payload = {
47
+ tenantId,
48
+ }
49
+ const response = await api.post(`/api/accounts/search`, {
50
+ body: payload,
51
+ headers: {
52
+ [Header.API_KEY]: env.ACCOUNT_PORTAL_API_KEY,
53
+ },
54
+ })
55
+
56
+ if (response.status !== 200) {
57
+ throw new Error(`Error getting account by tenantId ${tenantId}`)
58
+ }
59
+
60
+ const json: CloudAccount[] = await response.json()
61
+ return json[0]
62
+ }
63
+
64
+ export const getStatus = async (): Promise<
65
+ HealthStatusResponse | undefined
66
+ > => {
67
+ if (EXIT_EARLY) {
68
+ return
69
+ }
70
+ const response = await api.get(`/api/status`, {
71
+ headers: {
72
+ [Header.API_KEY]: env.ACCOUNT_PORTAL_API_KEY,
73
+ },
74
+ })
75
+ const json = await response.json()
76
+
77
+ if (response.status !== 200) {
78
+ throw new Error(`Error getting status`)
79
+ }
80
+
81
+ return json
82
+ }
@@ -0,0 +1,59 @@
1
+ import fetch from "node-fetch"
2
+ import * as logging from "../logging"
3
+
4
+ export default class API {
5
+ host: string
6
+
7
+ constructor(host: string) {
8
+ this.host = host
9
+ }
10
+
11
+ async apiCall(method: string, url: string, options?: any) {
12
+ if (!options.headers) {
13
+ options.headers = {}
14
+ }
15
+
16
+ if (!options.headers["Content-Type"]) {
17
+ options.headers = {
18
+ "Content-Type": "application/json",
19
+ Accept: "application/json",
20
+ ...options.headers,
21
+ }
22
+ }
23
+
24
+ let json = options.headers["Content-Type"] === "application/json"
25
+
26
+ // add x-budibase-correlation-id header
27
+ logging.correlation.setHeader(options.headers)
28
+
29
+ const requestOptions = {
30
+ method: method,
31
+ body: json ? JSON.stringify(options.body) : options.body,
32
+ headers: options.headers,
33
+ // TODO: See if this is necessary
34
+ credentials: "include",
35
+ }
36
+
37
+ return await fetch(`${this.host}${url}`, requestOptions)
38
+ }
39
+
40
+ async post(url: string, options?: any) {
41
+ return this.apiCall("POST", url, options)
42
+ }
43
+
44
+ async get(url: string, options?: any) {
45
+ return this.apiCall("GET", url, options)
46
+ }
47
+
48
+ async patch(url: string, options?: any) {
49
+ return this.apiCall("PATCH", url, options)
50
+ }
51
+
52
+ async del(url: string, options?: any) {
53
+ return this.apiCall("DELETE", url, options)
54
+ }
55
+
56
+ async put(url: string, options?: any) {
57
+ return this.apiCall("PUT", url, options)
58
+ }
59
+ }
@@ -0,0 +1 @@
1
+ export * from "./accounts"
@@ -0,0 +1,208 @@
1
+ const _passport = require("koa-passport")
2
+ const LocalStrategy = require("passport-local").Strategy
3
+ import { getGlobalDB } from "../context"
4
+ import { Cookie } from "../constants"
5
+ import { getSessionsForUser, invalidateSessions } from "../security/sessions"
6
+ import {
7
+ authenticated,
8
+ csrf,
9
+ google,
10
+ local,
11
+ oidc,
12
+ tenancy,
13
+ } from "../middleware"
14
+ import * as userCache from "../cache/user"
15
+ import { invalidateUser } from "../cache/user"
16
+ import {
17
+ ConfigType,
18
+ GoogleInnerConfig,
19
+ OIDCInnerConfig,
20
+ PlatformLogoutOpts,
21
+ SSOProviderType,
22
+ } from "@budibase/types"
23
+ import * as events from "../events"
24
+ import * as configs from "../configs"
25
+ import { clearCookie, getCookie } from "../utils"
26
+ import { ssoSaveUserNoOp } from "../middleware/passport/sso/sso"
27
+
28
+ const refresh = require("passport-oauth2-refresh")
29
+ export {
30
+ auditLog,
31
+ authError,
32
+ internalApi,
33
+ ssoCallbackUrl,
34
+ adminOnly,
35
+ builderOnly,
36
+ builderOrAdmin,
37
+ joiValidator,
38
+ google,
39
+ oidc,
40
+ } from "../middleware"
41
+ export const buildAuthMiddleware = authenticated
42
+ export const buildTenancyMiddleware = tenancy
43
+ export const buildCsrfMiddleware = csrf
44
+ export const passport = _passport
45
+ export const jwt = require("jsonwebtoken")
46
+
47
+ // Strategies
48
+ _passport.use(new LocalStrategy(local.options, local.authenticate))
49
+
50
+ async function refreshOIDCAccessToken(
51
+ chosenConfig: OIDCInnerConfig,
52
+ refreshToken: string
53
+ ): Promise<RefreshResponse> {
54
+ const callbackUrl = await oidc.getCallbackUrl()
55
+ let enrichedConfig: any
56
+ let strategy: any
57
+
58
+ try {
59
+ enrichedConfig = await oidc.fetchStrategyConfig(chosenConfig, callbackUrl)
60
+ if (!enrichedConfig) {
61
+ throw new Error("OIDC Config contents invalid")
62
+ }
63
+ strategy = await oidc.strategyFactory(enrichedConfig, ssoSaveUserNoOp)
64
+ } catch (err) {
65
+ console.error(err)
66
+ throw new Error("Could not refresh OAuth Token")
67
+ }
68
+
69
+ refresh.use(strategy, {
70
+ setRefreshOAuth2() {
71
+ return strategy._getOAuth2Client(enrichedConfig)
72
+ },
73
+ })
74
+
75
+ return new Promise(resolve => {
76
+ refresh.requestNewAccessToken(
77
+ ConfigType.OIDC,
78
+ refreshToken,
79
+ (err: any, accessToken: string, refreshToken: any, params: any) => {
80
+ resolve({ err, accessToken, refreshToken, params })
81
+ }
82
+ )
83
+ })
84
+ }
85
+
86
+ async function refreshGoogleAccessToken(
87
+ config: GoogleInnerConfig,
88
+ refreshToken: any
89
+ ): Promise<RefreshResponse> {
90
+ let callbackUrl = await google.getCallbackUrl(config)
91
+
92
+ let strategy
93
+ try {
94
+ strategy = await google.strategyFactory(
95
+ config,
96
+ callbackUrl,
97
+ ssoSaveUserNoOp
98
+ )
99
+ } catch (err: any) {
100
+ console.error(err)
101
+ throw new Error(
102
+ `Error constructing OIDC refresh strategy: message=${err.message}`
103
+ )
104
+ }
105
+
106
+ refresh.use(strategy)
107
+
108
+ return new Promise(resolve => {
109
+ refresh.requestNewAccessToken(
110
+ ConfigType.GOOGLE,
111
+ refreshToken,
112
+ (err: any, accessToken: string, refreshToken: string, params: any) => {
113
+ resolve({ err, accessToken, refreshToken, params })
114
+ }
115
+ )
116
+ })
117
+ }
118
+
119
+ interface RefreshResponse {
120
+ err?: {
121
+ data?: string
122
+ }
123
+ accessToken?: string
124
+ refreshToken?: string
125
+ params?: any
126
+ }
127
+
128
+ export async function refreshOAuthToken(
129
+ refreshToken: string,
130
+ providerType: SSOProviderType,
131
+ configId?: string
132
+ ): Promise<RefreshResponse> {
133
+ switch (providerType) {
134
+ case SSOProviderType.OIDC:
135
+ if (!configId) {
136
+ return { err: { data: "OIDC config id not provided" } }
137
+ }
138
+ const oidcConfig = await configs.getOIDCConfigById(configId)
139
+ if (!oidcConfig) {
140
+ return { err: { data: "OIDC configuration not found" } }
141
+ }
142
+ return refreshOIDCAccessToken(oidcConfig, refreshToken)
143
+ case SSOProviderType.GOOGLE:
144
+ let googleConfig = await configs.getGoogleConfig()
145
+ if (!googleConfig) {
146
+ return { err: { data: "Google configuration not found" } }
147
+ }
148
+ return refreshGoogleAccessToken(googleConfig, refreshToken)
149
+ }
150
+ }
151
+
152
+ // TODO: Refactor to use user save function instead to prevent the need for
153
+ // manually saving and invalidating on callback
154
+ export async function updateUserOAuth(userId: string, oAuthConfig: any) {
155
+ const details = {
156
+ accessToken: oAuthConfig.accessToken,
157
+ refreshToken: oAuthConfig.refreshToken,
158
+ }
159
+
160
+ try {
161
+ const db = getGlobalDB()
162
+ const dbUser = await db.get<any>(userId)
163
+
164
+ //Do not overwrite the refresh token if a valid one is not provided.
165
+ if (typeof details.refreshToken !== "string") {
166
+ delete details.refreshToken
167
+ }
168
+
169
+ dbUser.oauth2 = {
170
+ ...dbUser.oauth2,
171
+ ...details,
172
+ }
173
+
174
+ await db.put(dbUser)
175
+
176
+ await invalidateUser(userId)
177
+ } catch (e) {
178
+ console.error("Could not update OAuth details for current user", e)
179
+ }
180
+ }
181
+
182
+ /**
183
+ * Logs a user out from budibase. Re-used across account portal and builder.
184
+ */
185
+ export async function platformLogout(opts: PlatformLogoutOpts) {
186
+ const ctx = opts.ctx
187
+ const userId = opts.userId
188
+ const keepActiveSession = opts.keepActiveSession
189
+
190
+ if (!ctx) throw new Error("Koa context must be supplied to logout.")
191
+
192
+ const currentSession = getCookie(ctx, Cookie.Auth)
193
+ let sessions = await getSessionsForUser(userId)
194
+
195
+ if (keepActiveSession) {
196
+ sessions = sessions.filter(
197
+ session => session.sessionId !== currentSession.sessionId
198
+ )
199
+ } else {
200
+ // clear cookies
201
+ clearCookie(ctx, Cookie.Auth)
202
+ }
203
+
204
+ const sessionIds = sessions.map(({ sessionId }) => sessionId)
205
+ await invalidateSessions(userId, { sessionIds, reason: "logout" })
206
+ await events.auth.logout(ctx.user?.email)
207
+ await userCache.invalidateUser(userId)
208
+ }
@@ -0,0 +1 @@
1
+ export * from "./auth"
@@ -0,0 +1,14 @@
1
+ import { structures } from "../../../tests"
2
+ import { testEnv } from "../../../tests/extra"
3
+ import * as auth from "../auth"
4
+ import * as events from "../../events"
5
+
6
+ describe("platformLogout", () => {
7
+ it("should call platform logout", async () => {
8
+ await testEnv.withTenant(async () => {
9
+ const ctx = structures.koa.newContext()
10
+ await auth.platformLogout({ ctx, userId: "test" })
11
+ expect(events.auth.logout).toBeCalledTimes(1)
12
+ })
13
+ })
14
+ })
@@ -0,0 +1,54 @@
1
+ import dns from "dns"
2
+ import net from "net"
3
+ import env from "../environment"
4
+ import { promisify } from "util"
5
+
6
+ let blackListArray: string[] | undefined
7
+ const performLookup = promisify(dns.lookup)
8
+
9
+ async function lookup(address: string): Promise<string[]> {
10
+ if (!net.isIP(address)) {
11
+ // need this for URL parsing simply
12
+ if (!address.startsWith("http")) {
13
+ address = `https://${address}`
14
+ }
15
+ address = new URL(address).hostname
16
+ }
17
+ const addresses = await performLookup(address, {
18
+ all: true,
19
+ })
20
+ return addresses.map(addr => addr.address)
21
+ }
22
+
23
+ export async function refreshBlacklist() {
24
+ const blacklist = env.BLACKLIST_IPS
25
+ const list = blacklist?.split(",") || []
26
+ let final: string[] = []
27
+ for (let addr of list) {
28
+ const trimmed = addr.trim()
29
+ if (!net.isIP(trimmed)) {
30
+ const addresses = await lookup(trimmed)
31
+ final = final.concat(addresses)
32
+ } else {
33
+ final.push(trimmed)
34
+ }
35
+ }
36
+ blackListArray = final
37
+ }
38
+
39
+ export async function isBlacklisted(address: string): Promise<boolean> {
40
+ if (!blackListArray) {
41
+ await refreshBlacklist()
42
+ }
43
+ if (blackListArray?.length === 0) {
44
+ return false
45
+ }
46
+ // no need for DNS
47
+ let ips: string[]
48
+ if (!net.isIP(address)) {
49
+ ips = await lookup(address)
50
+ } else {
51
+ ips = [address]
52
+ }
53
+ return !!blackListArray?.find(addr => ips.includes(addr))
54
+ }
@@ -0,0 +1 @@
1
+ export * from "./blacklist"
@@ -0,0 +1,46 @@
1
+ import { refreshBlacklist, isBlacklisted } from ".."
2
+ import env from "../../environment"
3
+
4
+ describe("blacklist", () => {
5
+ beforeAll(async () => {
6
+ env._set(
7
+ "BLACKLIST_IPS",
8
+ "www.google.com,192.168.1.1, 1.1.1.1,2.2.2.2/something"
9
+ )
10
+ await refreshBlacklist()
11
+ })
12
+
13
+ it("should blacklist 192.168.1.1", async () => {
14
+ expect(await isBlacklisted("192.168.1.1")).toBe(true)
15
+ })
16
+
17
+ it("should allow 192.168.1.2", async () => {
18
+ expect(await isBlacklisted("192.168.1.2")).toBe(false)
19
+ })
20
+
21
+ it("should blacklist www.google.com", async () => {
22
+ expect(await isBlacklisted("www.google.com")).toBe(true)
23
+ })
24
+
25
+ it("should handle a complex domain", async () => {
26
+ expect(
27
+ await isBlacklisted("https://www.google.com/derp/?something=1")
28
+ ).toBe(true)
29
+ })
30
+
31
+ it("should allow www.microsoft.com", async () => {
32
+ expect(await isBlacklisted("www.microsoft.com")).toBe(false)
33
+ })
34
+
35
+ it("should blacklist an IP that needed trimming", async () => {
36
+ expect(await isBlacklisted("1.1.1.1")).toBe(true)
37
+ })
38
+
39
+ it("should blacklist 1.1.1.1/something", async () => {
40
+ expect(await isBlacklisted("1.1.1.1/something")).toBe(true)
41
+ })
42
+
43
+ it("should blacklist 2.2.2.2", async () => {
44
+ expect(await isBlacklisted("2.2.2.2")).toBe(true)
45
+ })
46
+ })