@budibase/server 2.7.16-alpha.0 → 2.7.18
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.
- package/builder/assets/{index.55a50076.js → index.8b4ed657.js} +342 -342
- package/builder/assets/{index.2e9069f3.css → index.d9b46807.css} +1 -1
- package/builder/bblogo.png +0 -0
- package/builder/fonts/remixicon.css +2317 -0
- package/builder/fonts/remixicon.eot +0 -0
- package/builder/fonts/remixicon.less +2319 -0
- package/builder/fonts/remixicon.svg +6835 -0
- package/builder/fonts/remixicon.symbol.svg +11356 -0
- package/builder/fonts/remixicon.ttf +0 -0
- package/builder/fonts/remixicon.woff +0 -0
- package/builder/fonts/remixicon.woff2 +0 -0
- package/builder/fonts/source-sans-pro/200-italic.css +69 -0
- package/builder/fonts/source-sans-pro/200.css +69 -0
- package/builder/fonts/source-sans-pro/300-italic.css +69 -0
- package/builder/fonts/source-sans-pro/300.css +69 -0
- package/builder/fonts/source-sans-pro/400-italic.css +69 -0
- package/builder/fonts/source-sans-pro/400.css +69 -0
- package/builder/fonts/source-sans-pro/600-italic.css +69 -0
- package/builder/fonts/source-sans-pro/600.css +69 -0
- package/builder/fonts/source-sans-pro/700-italic.css +69 -0
- package/builder/fonts/source-sans-pro/700.css +69 -0
- package/builder/fonts/source-sans-pro/900-italic.css +69 -0
- package/builder/fonts/source-sans-pro/900.css +69 -0
- package/builder/fonts/source-sans-pro/CHANGELOG.md +2 -0
- package/builder/fonts/source-sans-pro/LICENSE +93 -0
- package/builder/fonts/source-sans-pro/README.md +47 -0
- package/builder/fonts/source-sans-pro/cyrillic-200-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-200.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-300-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-300.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-400-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-400.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-600-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-600.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-700-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-700.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-900-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-900.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-200-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-200.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-300-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-300.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-400-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-400.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-600-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-600.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-700-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-700.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-900-italic.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-900.css +8 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext-italic.css +53 -0
- package/builder/fonts/source-sans-pro/cyrillic-ext.css +53 -0
- package/builder/fonts/source-sans-pro/cyrillic-italic.css +53 -0
- package/builder/fonts/source-sans-pro/cyrillic.css +53 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-200-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-200-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-200-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-200-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-300-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-300-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-300-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-300-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-400-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-400-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-400-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-400-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-600-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-600-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-600-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-600-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-700-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-700-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-700-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-700-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-900-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-900-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-900-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-900-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-200-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-200-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-200-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-200-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-300-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-300-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-300-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-300-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-400-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-400-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-400-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-400-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-600-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-600-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-600-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-600-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-700-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-700-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-700-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-700-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-900-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-900-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-900-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-cyrillic-ext-900-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-200-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-200-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-200-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-200-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-300-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-300-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-300-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-300-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-400-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-400-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-400-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-400-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-600-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-600-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-600-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-600-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-700-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-700-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-700-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-700-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-900-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-900-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-900-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-900-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-200-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-200-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-200-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-200-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-300-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-300-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-300-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-300-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-400-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-400-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-400-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-400-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-600-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-600-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-600-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-600-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-700-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-700-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-700-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-700-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-900-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-900-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-900-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-greek-ext-900-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-200-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-200-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-200-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-200-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-300-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-300-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-300-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-300-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-400-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-400-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-400-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-400-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-600-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-600-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-600-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-600-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-700-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-700-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-700-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-700-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-900-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-900-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-900-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-900-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-200-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-200-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-200-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-200-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-300-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-300-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-300-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-300-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-400-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-400-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-400-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-400-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-600-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-600-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-600-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-600-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-700-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-700-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-700-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-700-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-900-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-900-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-900-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-latin-ext-900-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-200-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-200-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-200-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-200-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-300-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-300-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-300-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-300-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-400-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-400-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-400-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-400-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-600-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-600-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-600-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-600-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-700-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-700-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-700-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-700-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-900-italic.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-900-italic.woff2 +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-900-normal.woff +0 -0
- package/builder/fonts/source-sans-pro/files/source-sans-pro-vietnamese-900-normal.woff2 +0 -0
- package/builder/fonts/source-sans-pro/greek-200-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-200.css +8 -0
- package/builder/fonts/source-sans-pro/greek-300-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-300.css +8 -0
- package/builder/fonts/source-sans-pro/greek-400-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-400.css +8 -0
- package/builder/fonts/source-sans-pro/greek-600-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-600.css +8 -0
- package/builder/fonts/source-sans-pro/greek-700-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-700.css +8 -0
- package/builder/fonts/source-sans-pro/greek-900-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-900.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-200-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-200.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-300-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-300.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-400-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-400.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-600-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-600.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-700-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-700.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-900-italic.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-900.css +8 -0
- package/builder/fonts/source-sans-pro/greek-ext-italic.css +53 -0
- package/builder/fonts/source-sans-pro/greek-ext.css +53 -0
- package/builder/fonts/source-sans-pro/greek-italic.css +53 -0
- package/builder/fonts/source-sans-pro/greek.css +53 -0
- package/builder/fonts/source-sans-pro/index.css +69 -0
- package/builder/fonts/source-sans-pro/latin-200-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-200.css +8 -0
- package/builder/fonts/source-sans-pro/latin-300-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-300.css +8 -0
- package/builder/fonts/source-sans-pro/latin-400-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-400.css +8 -0
- package/builder/fonts/source-sans-pro/latin-600-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-600.css +8 -0
- package/builder/fonts/source-sans-pro/latin-700-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-700.css +8 -0
- package/builder/fonts/source-sans-pro/latin-900-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-900.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-200-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-200.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-300-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-300.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-400-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-400.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-600-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-600.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-700-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-700.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-900-italic.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-900.css +8 -0
- package/builder/fonts/source-sans-pro/latin-ext-italic.css +53 -0
- package/builder/fonts/source-sans-pro/latin-ext.css +53 -0
- package/builder/fonts/source-sans-pro/latin-italic.css +53 -0
- package/builder/fonts/source-sans-pro/latin.css +53 -0
- package/builder/fonts/source-sans-pro/metadata.json +27 -0
- package/builder/fonts/source-sans-pro/package.json +30 -0
- package/builder/fonts/source-sans-pro/scss/metadata.scss +22 -0
- package/builder/fonts/source-sans-pro/scss/mixins.scss +184 -0
- package/builder/fonts/source-sans-pro/unicode.json +9 -0
- package/builder/fonts/source-sans-pro/vietnamese-200-italic.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-200.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-300-italic.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-300.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-400-italic.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-400.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-600-italic.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-600.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-700-italic.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-700.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-900-italic.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-900.css +8 -0
- package/builder/fonts/source-sans-pro/vietnamese-italic.css +53 -0
- package/builder/fonts/source-sans-pro/vietnamese.css +53 -0
- package/builder/index.html +6 -5
- package/dist/{BudibaseApp-Y5NZEDTC.svelte → BudibaseApp-6SC4MY4W.svelte} +6 -11
- package/dist/automation.js +655 -862
- package/dist/automation.js.map +3 -3
- package/dist/index.js +970 -1185
- package/dist/index.js.map +3 -3
- package/dist/preview.hbs +4 -10
- package/dist/query.js +842 -998
- package/dist/query.js.map +3 -3
- package/package.json +11 -11
- package/src/api/controllers/backup.ts +8 -22
- package/src/api/controllers/datasource.ts +24 -41
- package/src/api/controllers/role.ts +5 -5
- package/src/api/controllers/routing.ts +3 -3
- package/src/api/controllers/row/ExternalRequest.ts +5 -1
- package/src/api/controllers/static/templates/BudibaseApp.svelte +6 -11
- package/src/api/controllers/static/templates/preview.hbs +4 -10
- package/src/api/routes/backup.ts +1 -1
- package/src/api/routes/tests/backup.spec.ts +2 -18
- package/src/automations/steps/sendSmtpEmail.ts +4 -55
- package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
- package/src/events/docUpdates/syncUsers.ts +0 -4
- package/src/integrations/googlesheets.ts +18 -35
- package/src/integrations/mongodb.ts +2 -4
- package/src/integrations/mysql.ts +7 -2
- package/src/integrations/postgres.ts +1 -2
- package/src/integrations/tests/mysql.spec.ts +19 -1
- package/src/integrations/utils.ts +24 -0
- package/src/middleware/currentapp.ts +1 -1
- package/src/sdk/app/backups/exports.ts +5 -33
- package/src/sdk/app/backups/imports.ts +1 -21
- package/src/sdk/app/datasources/datasources.ts +0 -1
- package/src/utilities/workerRequests.ts +9 -20
- package/src/automations/tests/sendSmtpEmail.spec.ts +0 -74
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ConnectionInfo,
|
|
3
|
-
Datasource,
|
|
4
3
|
DatasourceFeature,
|
|
5
4
|
DatasourceFieldType,
|
|
6
5
|
DatasourcePlus,
|
|
@@ -20,15 +19,13 @@ import { OAuth2Client } from "google-auth-library"
|
|
|
20
19
|
import { buildExternalTableId, finaliseExternalTables } from "./utils"
|
|
21
20
|
import { GoogleSpreadsheet, GoogleSpreadsheetRow } from "google-spreadsheet"
|
|
22
21
|
import fetch from "node-fetch"
|
|
23
|
-
import {
|
|
24
|
-
import { dataFilters
|
|
22
|
+
import { configs, HTTPError } from "@budibase/backend-core"
|
|
23
|
+
import { dataFilters } from "@budibase/shared-core"
|
|
25
24
|
import { GOOGLE_SHEETS_PRIMARY_KEY } from "../constants"
|
|
26
|
-
import sdk from "../sdk"
|
|
27
25
|
|
|
28
26
|
interface GoogleSheetsConfig {
|
|
29
27
|
spreadsheetId: string
|
|
30
28
|
auth: OAuthClientConfig
|
|
31
|
-
continueSetupId?: string
|
|
32
29
|
}
|
|
33
30
|
|
|
34
31
|
interface OAuthClientConfig {
|
|
@@ -75,7 +72,7 @@ const SCHEMA: Integration = {
|
|
|
75
72
|
},
|
|
76
73
|
datasource: {
|
|
77
74
|
spreadsheetId: {
|
|
78
|
-
display: "
|
|
75
|
+
display: "Google Sheet URL",
|
|
79
76
|
type: DatasourceFieldType.STRING,
|
|
80
77
|
required: true,
|
|
81
78
|
},
|
|
@@ -210,8 +207,6 @@ class GoogleSheetsIntegration implements DatasourcePlus {
|
|
|
210
207
|
|
|
211
208
|
async connect() {
|
|
212
209
|
try {
|
|
213
|
-
await setupCreationAuth(this.config)
|
|
214
|
-
|
|
215
210
|
// Initialise oAuth client
|
|
216
211
|
let googleConfig = await configs.getGoogleDatasourceConfig()
|
|
217
212
|
if (!googleConfig) {
|
|
@@ -274,24 +269,24 @@ class GoogleSheetsIntegration implements DatasourcePlus {
|
|
|
274
269
|
}
|
|
275
270
|
|
|
276
271
|
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
|
|
272
|
+
// not fully configured yet
|
|
273
|
+
if (!this.config.auth) {
|
|
274
|
+
return
|
|
275
|
+
}
|
|
277
276
|
await this.connect()
|
|
278
277
|
const sheets = this.client.sheetsByIndex
|
|
279
278
|
const tables: Record<string, Table> = {}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
)
|
|
292
|
-
},
|
|
293
|
-
10
|
|
294
|
-
)
|
|
279
|
+
for (let sheet of sheets) {
|
|
280
|
+
// must fetch rows to determine schema
|
|
281
|
+
await sheet.getRows()
|
|
282
|
+
|
|
283
|
+
const id = buildExternalTableId(datasourceId, sheet.title)
|
|
284
|
+
tables[sheet.title] = this.getTableSchema(
|
|
285
|
+
sheet.title,
|
|
286
|
+
sheet.headerValues,
|
|
287
|
+
id
|
|
288
|
+
)
|
|
289
|
+
}
|
|
295
290
|
const final = finaliseExternalTables(tables, entities)
|
|
296
291
|
this.tables = final.tables
|
|
297
292
|
this.schemaErrors = final.errors
|
|
@@ -571,18 +566,6 @@ class GoogleSheetsIntegration implements DatasourcePlus {
|
|
|
571
566
|
}
|
|
572
567
|
}
|
|
573
568
|
|
|
574
|
-
export async function setupCreationAuth(datasouce: GoogleSheetsConfig) {
|
|
575
|
-
if (datasouce.continueSetupId) {
|
|
576
|
-
const appId = context.getAppId()
|
|
577
|
-
const tokens = await cache.get(
|
|
578
|
-
`datasource:creation:${appId}:google:${datasouce.continueSetupId}`
|
|
579
|
-
)
|
|
580
|
-
|
|
581
|
-
datasouce.auth = tokens.tokens
|
|
582
|
-
delete datasouce.continueSetupId
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
|
|
586
569
|
export default {
|
|
587
570
|
schema: SCHEMA,
|
|
588
571
|
integration: GoogleSheetsIntegration,
|
|
@@ -351,7 +351,7 @@ const SCHEMA: Integration = getSchema()
|
|
|
351
351
|
|
|
352
352
|
class MongoIntegration implements IntegrationBase {
|
|
353
353
|
private config: MongoDBConfig
|
|
354
|
-
private client:
|
|
354
|
+
private client: any
|
|
355
355
|
|
|
356
356
|
constructor(config: MongoDBConfig) {
|
|
357
357
|
this.config = config
|
|
@@ -372,8 +372,6 @@ class MongoIntegration implements IntegrationBase {
|
|
|
372
372
|
response.connected = true
|
|
373
373
|
} catch (e: any) {
|
|
374
374
|
response.error = e.message as string
|
|
375
|
-
} finally {
|
|
376
|
-
await this.client.close()
|
|
377
375
|
}
|
|
378
376
|
return response
|
|
379
377
|
}
|
|
@@ -382,7 +380,7 @@ class MongoIntegration implements IntegrationBase {
|
|
|
382
380
|
return this.client.connect()
|
|
383
381
|
}
|
|
384
382
|
|
|
385
|
-
createObjectIds(json: any) {
|
|
383
|
+
createObjectIds(json: any): object {
|
|
386
384
|
const self = this
|
|
387
385
|
function interpolateObjectIds(json: any) {
|
|
388
386
|
for (let field of Object.keys(json)) {
|
|
@@ -91,7 +91,7 @@ const SCHEMA: Integration = {
|
|
|
91
91
|
},
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
function bindingTypeCoerce(bindings: any[]) {
|
|
94
|
+
export function bindingTypeCoerce(bindings: any[]) {
|
|
95
95
|
for (let i = 0; i < bindings.length; i++) {
|
|
96
96
|
const binding = bindings[i]
|
|
97
97
|
if (typeof binding !== "string") {
|
|
@@ -109,7 +109,12 @@ function bindingTypeCoerce(bindings: any[]) {
|
|
|
109
109
|
dayjs(binding).isValid() &&
|
|
110
110
|
!binding.includes(",")
|
|
111
111
|
) {
|
|
112
|
-
|
|
112
|
+
let value: any
|
|
113
|
+
value = new Date(binding)
|
|
114
|
+
if (isNaN(value)) {
|
|
115
|
+
value = binding
|
|
116
|
+
}
|
|
117
|
+
bindings[i] = value
|
|
113
118
|
}
|
|
114
119
|
}
|
|
115
120
|
return bindings
|
|
@@ -322,8 +322,7 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
|
|
|
322
322
|
await this.openConnection()
|
|
323
323
|
const columnsResponse: { rows: PostgresColumn[] } =
|
|
324
324
|
await this.client.query(this.COLUMNS_SQL)
|
|
325
|
-
|
|
326
|
-
return [...new Set(names)]
|
|
325
|
+
return columnsResponse.rows.map(row => row.table_name)
|
|
327
326
|
} finally {
|
|
328
327
|
await this.closeConnection()
|
|
329
328
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { default as MySQLIntegration } from "../mysql"
|
|
1
|
+
import { default as MySQLIntegration, bindingTypeCoerce } from "../mysql"
|
|
2
2
|
jest.mock("mysql2")
|
|
3
3
|
|
|
4
4
|
class TestConfiguration {
|
|
@@ -131,3 +131,21 @@ describe("MySQL Integration", () => {
|
|
|
131
131
|
})
|
|
132
132
|
})
|
|
133
133
|
})
|
|
134
|
+
|
|
135
|
+
describe("bindingTypeCoercion", () => {
|
|
136
|
+
it("shouldn't coerce something that looks like a date", () => {
|
|
137
|
+
const response = bindingTypeCoerce(["202205-1500"])
|
|
138
|
+
expect(response[0]).toBe("202205-1500")
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
it("should coerce an actual date", () => {
|
|
142
|
+
const date = new Date("2023-06-13T14:24:22.620Z")
|
|
143
|
+
const response = bindingTypeCoerce(["2023-06-13T14:24:22.620Z"])
|
|
144
|
+
expect(response[0]).toEqual(date)
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
it("should coerce numbers", () => {
|
|
148
|
+
const response = bindingTypeCoerce(["0"])
|
|
149
|
+
expect(response[0]).toEqual(0)
|
|
150
|
+
})
|
|
151
|
+
})
|
|
@@ -328,3 +328,27 @@ export function finaliseExternalTables(
|
|
|
328
328
|
.reduce((r, [k, v]) => ({ ...r, [k]: v }), {})
|
|
329
329
|
return { tables: finalTables, errors }
|
|
330
330
|
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Checks if the provided input is an object, but specifically not a date type object.
|
|
334
|
+
* Used during coercion of types and relationship handling, dates are considered valid
|
|
335
|
+
* and can be used as a display field, but objects and arrays cannot.
|
|
336
|
+
* @param testValue an unknown type which this function will attempt to extract
|
|
337
|
+
* a valid primary display string from.
|
|
338
|
+
*/
|
|
339
|
+
export function getPrimaryDisplay(testValue: unknown): string | undefined {
|
|
340
|
+
if (testValue instanceof Date) {
|
|
341
|
+
return testValue.toISOString()
|
|
342
|
+
}
|
|
343
|
+
if (
|
|
344
|
+
Array.isArray(testValue) &&
|
|
345
|
+
testValue[0] &&
|
|
346
|
+
typeof testValue[0] !== "object"
|
|
347
|
+
) {
|
|
348
|
+
return testValue.join(", ")
|
|
349
|
+
}
|
|
350
|
+
if (typeof testValue === "object") {
|
|
351
|
+
return undefined
|
|
352
|
+
}
|
|
353
|
+
return testValue as string
|
|
354
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { db as dbCore,
|
|
1
|
+
import { db as dbCore, objectStore } from "@budibase/backend-core"
|
|
2
2
|
import { budibaseTempDir } from "../../../utilities/budibaseDir"
|
|
3
3
|
import { streamFile, createTempFolder } from "../../../utilities/fileSystem"
|
|
4
4
|
import { ObjectStoreBuckets } from "../../../constants"
|
|
@@ -18,8 +18,7 @@ import { join } from "path"
|
|
|
18
18
|
import env from "../../../environment"
|
|
19
19
|
|
|
20
20
|
const uuid = require("uuid/v4")
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const tar = require("tar")
|
|
23
22
|
const MemoryStream = require("memorystream")
|
|
24
23
|
|
|
25
24
|
interface DBDumpOpts {
|
|
@@ -31,18 +30,16 @@ interface ExportOpts extends DBDumpOpts {
|
|
|
31
30
|
tar?: boolean
|
|
32
31
|
excludeRows?: boolean
|
|
33
32
|
excludeLogs?: boolean
|
|
34
|
-
encryptPassword?: string
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
function tarFilesToTmp(tmpDir: string, files: string[]) {
|
|
38
|
-
const
|
|
39
|
-
const exportFile = join(budibaseTempDir(), fileName)
|
|
36
|
+
const exportFile = join(budibaseTempDir(), `${uuid()}.tar.gz`)
|
|
40
37
|
tar.create(
|
|
41
38
|
{
|
|
42
39
|
sync: true,
|
|
43
40
|
gzip: true,
|
|
44
41
|
file: exportFile,
|
|
45
|
-
|
|
42
|
+
recursive: true,
|
|
46
43
|
cwd: tmpDir,
|
|
47
44
|
},
|
|
48
45
|
files
|
|
@@ -127,7 +124,6 @@ export async function exportApp(appId: string, config?: ExportOpts) {
|
|
|
127
124
|
)
|
|
128
125
|
}
|
|
129
126
|
}
|
|
130
|
-
|
|
131
127
|
const downloadedPath = join(tmpPath, appPath)
|
|
132
128
|
if (fs.existsSync(downloadedPath)) {
|
|
133
129
|
const allFiles = fs.readdirSync(downloadedPath)
|
|
@@ -145,27 +141,12 @@ export async function exportApp(appId: string, config?: ExportOpts) {
|
|
|
145
141
|
filter: defineFilter(config?.excludeRows, config?.excludeLogs),
|
|
146
142
|
exportPath: dbPath,
|
|
147
143
|
})
|
|
148
|
-
|
|
149
|
-
if (config?.encryptPassword) {
|
|
150
|
-
for (let file of fs.readdirSync(tmpPath)) {
|
|
151
|
-
const path = join(tmpPath, file)
|
|
152
|
-
|
|
153
|
-
await encryption.encryptFile(
|
|
154
|
-
{ dir: tmpPath, filename: file },
|
|
155
|
-
config.encryptPassword
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
fs.rmSync(path)
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
144
|
// if tar requested, return where the tarball is
|
|
163
145
|
if (config?.tar) {
|
|
164
146
|
// now the tmpPath contains both the DB export and attachments, tar this
|
|
165
147
|
const tarPath = tarFilesToTmp(tmpPath, fs.readdirSync(tmpPath))
|
|
166
148
|
// cleanup the tmp export files as tarball returned
|
|
167
149
|
fs.rmSync(tmpPath, { recursive: true, force: true })
|
|
168
|
-
|
|
169
150
|
return tarPath
|
|
170
151
|
}
|
|
171
152
|
// tar not requested, turn the directory where export is
|
|
@@ -180,20 +161,11 @@ export async function exportApp(appId: string, config?: ExportOpts) {
|
|
|
180
161
|
* @param {boolean} excludeRows Flag to state whether the export should include data.
|
|
181
162
|
* @returns {*} a readable stream of the backup which is written in real time
|
|
182
163
|
*/
|
|
183
|
-
export async function streamExportApp({
|
|
184
|
-
appId,
|
|
185
|
-
excludeRows,
|
|
186
|
-
encryptPassword,
|
|
187
|
-
}: {
|
|
188
|
-
appId: string
|
|
189
|
-
excludeRows: boolean
|
|
190
|
-
encryptPassword?: string
|
|
191
|
-
}) {
|
|
164
|
+
export async function streamExportApp(appId: string, excludeRows: boolean) {
|
|
192
165
|
const tmpPath = await exportApp(appId, {
|
|
193
166
|
excludeRows,
|
|
194
167
|
excludeLogs: true,
|
|
195
168
|
tar: true,
|
|
196
|
-
encryptPassword,
|
|
197
169
|
})
|
|
198
170
|
return streamFile(tmpPath)
|
|
199
171
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { db as dbCore,
|
|
1
|
+
import { db as dbCore, objectStore } from "@budibase/backend-core"
|
|
2
2
|
import { Database, Row } from "@budibase/types"
|
|
3
3
|
import { getAutomationParams, TABLE_ROW_PREFIX } from "../../../db/utils"
|
|
4
4
|
import { budibaseTempDir } from "../../../utilities/budibaseDir"
|
|
@@ -20,7 +20,6 @@ type TemplateType = {
|
|
|
20
20
|
file?: {
|
|
21
21
|
type: string
|
|
22
22
|
path: string
|
|
23
|
-
password?: string
|
|
24
23
|
}
|
|
25
24
|
key?: string
|
|
26
25
|
}
|
|
@@ -124,22 +123,6 @@ export function untarFile(file: { path: string }) {
|
|
|
124
123
|
return tmpPath
|
|
125
124
|
}
|
|
126
125
|
|
|
127
|
-
async function decryptFiles(path: string, password: string) {
|
|
128
|
-
try {
|
|
129
|
-
for (let file of fs.readdirSync(path)) {
|
|
130
|
-
const inputPath = join(path, file)
|
|
131
|
-
const outputPath = inputPath.replace(/\.enc$/, "")
|
|
132
|
-
await encryption.decryptFile(inputPath, outputPath, password)
|
|
133
|
-
fs.rmSync(inputPath)
|
|
134
|
-
}
|
|
135
|
-
} catch (err: any) {
|
|
136
|
-
if (err.message === "incorrect header check") {
|
|
137
|
-
throw new Error("File cannot be imported")
|
|
138
|
-
}
|
|
139
|
-
throw err
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
126
|
export function getGlobalDBFile(tmpPath: string) {
|
|
144
127
|
return fs.readFileSync(join(tmpPath, GLOBAL_DB_EXPORT_FILE), "utf8")
|
|
145
128
|
}
|
|
@@ -160,9 +143,6 @@ export async function importApp(
|
|
|
160
143
|
template.file && fs.lstatSync(template.file.path).isDirectory()
|
|
161
144
|
if (template.file && (isTar || isDirectory)) {
|
|
162
145
|
const tmpPath = isTar ? untarFile(template.file) : template.file.path
|
|
163
|
-
if (isTar && template.file.password) {
|
|
164
|
-
await decryptFiles(tmpPath, template.file.password)
|
|
165
|
-
}
|
|
166
146
|
const contents = fs.readdirSync(tmpPath)
|
|
167
147
|
// have to handle object import
|
|
168
148
|
if (contents.length) {
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
env as coreEnv,
|
|
10
10
|
} from "@budibase/backend-core"
|
|
11
11
|
import { updateAppRole } from "./global"
|
|
12
|
-
import { BBContext, User
|
|
12
|
+
import { BBContext, User } from "@budibase/types"
|
|
13
13
|
|
|
14
14
|
export function request(ctx?: BBContext, request?: any) {
|
|
15
15
|
if (!request.headers) {
|
|
@@ -65,25 +65,15 @@ async function checkResponse(
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
// have to pass in the tenant ID as this could be coming from an automation
|
|
68
|
-
export async function sendSmtpEmail(
|
|
69
|
-
to,
|
|
70
|
-
from,
|
|
71
|
-
subject,
|
|
72
|
-
contents,
|
|
73
|
-
cc,
|
|
74
|
-
bcc,
|
|
75
|
-
automation,
|
|
76
|
-
invite,
|
|
77
|
-
}: {
|
|
78
|
-
to: string
|
|
79
|
-
from: string
|
|
80
|
-
subject: string
|
|
81
|
-
contents: string
|
|
82
|
-
cc: string
|
|
83
|
-
bcc: string
|
|
68
|
+
export async function sendSmtpEmail(
|
|
69
|
+
to: string,
|
|
70
|
+
from: string,
|
|
71
|
+
subject: string,
|
|
72
|
+
contents: string,
|
|
73
|
+
cc: string,
|
|
74
|
+
bcc: string,
|
|
84
75
|
automation: boolean
|
|
85
|
-
|
|
86
|
-
}) {
|
|
76
|
+
) {
|
|
87
77
|
// tenant ID will be set in header
|
|
88
78
|
const response = await fetch(
|
|
89
79
|
checkSlashesInUrl(env.WORKER_URL + `/api/global/email/send`),
|
|
@@ -98,7 +88,6 @@ export async function sendSmtpEmail({
|
|
|
98
88
|
bcc,
|
|
99
89
|
purpose: "custom",
|
|
100
90
|
automation,
|
|
101
|
-
invite,
|
|
102
91
|
},
|
|
103
92
|
})
|
|
104
93
|
)
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import * as workerRequests from "../../utilities/workerRequests"
|
|
2
|
-
|
|
3
|
-
jest.mock("../../utilities/workerRequests", () => ({
|
|
4
|
-
sendSmtpEmail: jest.fn(),
|
|
5
|
-
}))
|
|
6
|
-
|
|
7
|
-
function generateResponse(to: string, from: string) {
|
|
8
|
-
return {
|
|
9
|
-
success: true,
|
|
10
|
-
response: {
|
|
11
|
-
accepted: [to],
|
|
12
|
-
envelope: {
|
|
13
|
-
from: from,
|
|
14
|
-
to: [to],
|
|
15
|
-
},
|
|
16
|
-
message: `Email sent to ${to}.`,
|
|
17
|
-
},
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const setup = require("./utilities")
|
|
22
|
-
|
|
23
|
-
describe("test the outgoing webhook action", () => {
|
|
24
|
-
let inputs
|
|
25
|
-
let config = setup.getConfig()
|
|
26
|
-
beforeAll(async () => {
|
|
27
|
-
await config.init()
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
afterAll(setup.afterAll)
|
|
31
|
-
|
|
32
|
-
it("should be able to run the action", async () => {
|
|
33
|
-
jest
|
|
34
|
-
.spyOn(workerRequests, "sendSmtpEmail")
|
|
35
|
-
.mockImplementationOnce(async () =>
|
|
36
|
-
generateResponse("user1@test.com", "admin@test.com")
|
|
37
|
-
)
|
|
38
|
-
const invite = {
|
|
39
|
-
startTime: new Date(),
|
|
40
|
-
endTime: new Date(),
|
|
41
|
-
summary: "summary",
|
|
42
|
-
location: "location",
|
|
43
|
-
url: "url",
|
|
44
|
-
}
|
|
45
|
-
inputs = {
|
|
46
|
-
to: "user1@test.com",
|
|
47
|
-
from: "admin@test.com",
|
|
48
|
-
subject: "hello",
|
|
49
|
-
contents: "testing",
|
|
50
|
-
cc: "cc",
|
|
51
|
-
bcc: "bcc",
|
|
52
|
-
addInvite: true,
|
|
53
|
-
...invite,
|
|
54
|
-
}
|
|
55
|
-
let resp = generateResponse(inputs.to, inputs.from)
|
|
56
|
-
const res = await setup.runStep(
|
|
57
|
-
setup.actions.SEND_EMAIL_SMTP.stepId,
|
|
58
|
-
inputs
|
|
59
|
-
)
|
|
60
|
-
expect(res.response).toEqual(resp)
|
|
61
|
-
expect(res.success).toEqual(true)
|
|
62
|
-
expect(workerRequests.sendSmtpEmail).toHaveBeenCalledTimes(1)
|
|
63
|
-
expect(workerRequests.sendSmtpEmail).toHaveBeenCalledWith({
|
|
64
|
-
to: "user1@test.com",
|
|
65
|
-
from: "admin@test.com",
|
|
66
|
-
subject: "hello",
|
|
67
|
-
contents: "testing",
|
|
68
|
-
cc: "cc",
|
|
69
|
-
bcc: "bcc",
|
|
70
|
-
invite,
|
|
71
|
-
automation: true,
|
|
72
|
-
})
|
|
73
|
-
})
|
|
74
|
-
})
|