Merge branch 'develop' into api-tests-user-management
This commit is contained in:
commit
327c09c972
|
@ -4,6 +4,9 @@ metadata:
|
|||
annotations:
|
||||
kompose.cmd: kompose convert
|
||||
kompose.version: 1.21.0 (992df58d8)
|
||||
{{ if .Values.globals.logAnnotations }}
|
||||
{{ toYaml .Values.globals.logAnnotations | indent 4 }}
|
||||
{{ end }}
|
||||
creationTimestamp: null
|
||||
labels:
|
||||
io.kompose.service: app-service
|
||||
|
|
|
@ -4,6 +4,9 @@ metadata:
|
|||
annotations:
|
||||
kompose.cmd: kompose convert
|
||||
kompose.version: 1.21.0 (992df58d8)
|
||||
{{ if .Values.globals.logAnnotations }}
|
||||
{{ toYaml .Values.globals.logAnnotations | indent 4 }}
|
||||
{{ end }}
|
||||
creationTimestamp: null
|
||||
labels:
|
||||
app.kubernetes.io/name: budibase-proxy
|
||||
|
|
|
@ -4,6 +4,9 @@ metadata:
|
|||
annotations:
|
||||
kompose.cmd: kompose convert
|
||||
kompose.version: 1.21.0 (992df58d8)
|
||||
{{ if .Values.globals.logAnnotations }}
|
||||
{{ toYaml .Values.globals.logAnnotations | indent 4 }}
|
||||
{{ end }}
|
||||
creationTimestamp: null
|
||||
labels:
|
||||
io.kompose.service: worker-service
|
||||
|
|
|
@ -22,6 +22,12 @@ serviceAccount:
|
|||
|
||||
podAnnotations: {}
|
||||
|
||||
# logAnnotations:
|
||||
# co.elastic.logs/multiline.type: pattern
|
||||
# co.elastic.logs/multiline.pattern: '^[[:space:]]'
|
||||
# co.elastic.logs/multiline.negate: false
|
||||
# co.elastic.logs/multiline.match: after
|
||||
|
||||
podSecurityContext:
|
||||
{}
|
||||
# fsGroup: 2000
|
||||
|
|
|
@ -61,7 +61,8 @@ ADD hosting/single/nginx/nginx.conf /etc/nginx
|
|||
ADD hosting/single/nginx/nginx-default-site.conf /etc/nginx/sites-enabled/default
|
||||
RUN mkdir -p /var/log/nginx && \
|
||||
touch /var/log/nginx/error.log && \
|
||||
touch /var/run/nginx.pid
|
||||
touch /var/run/nginx.pid && \
|
||||
usermod -a -G tty www-data
|
||||
|
||||
WORKDIR /
|
||||
RUN mkdir -p scripts/integrations/oracle
|
||||
|
|
|
@ -2,7 +2,8 @@ server {
|
|||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
server_name _;
|
||||
|
||||
error_log /dev/stderr warn;
|
||||
access_log /dev/stdout main;
|
||||
client_max_body_size 1000m;
|
||||
ignore_invalid_headers off;
|
||||
proxy_buffering off;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
user www-data www-data;
|
||||
error_log /var/log/nginx/error.log;
|
||||
error_log /dev/stderr warn;
|
||||
pid /var/run/nginx.pid;
|
||||
worker_processes auto;
|
||||
worker_rlimit_nofile 8192;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"npmClient": "yarn",
|
||||
"packages": [
|
||||
"packages/*"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@budibase/backend-core",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"description": "Budibase backend core libraries used in server and worker",
|
||||
"main": "dist/src/index.js",
|
||||
"types": "dist/src/index.d.ts",
|
||||
|
@ -20,7 +20,7 @@
|
|||
"test:watch": "jest --watchAll"
|
||||
},
|
||||
"dependencies": {
|
||||
"@budibase/types": "2.1.43-alpha.5",
|
||||
"@budibase/types": "2.1.43-alpha.9",
|
||||
"@shopify/jest-koa-mocks": "5.0.1",
|
||||
"@techpass/passport-openidconnect": "0.3.2",
|
||||
"aws-sdk": "2.1030.0",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "@budibase/bbui",
|
||||
"description": "A UI solution used in the different Budibase projects.",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"license": "MPL-2.0",
|
||||
"svelte": "src/index.js",
|
||||
"module": "dist/bbui.es.js",
|
||||
|
@ -38,7 +38,7 @@
|
|||
],
|
||||
"dependencies": {
|
||||
"@adobe/spectrum-css-workflow-icons": "^1.2.1",
|
||||
"@budibase/string-templates": "2.1.43-alpha.5",
|
||||
"@budibase/string-templates": "2.1.43-alpha.9",
|
||||
"@spectrum-css/actionbutton": "^1.0.1",
|
||||
"@spectrum-css/actiongroup": "^1.0.1",
|
||||
"@spectrum-css/avatar": "^3.0.2",
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
height: 100%;
|
||||
width: 100%;
|
||||
opacity: 0;
|
||||
background-color: var(--spectrum-global-color-gray-300) !important;
|
||||
background-color: var(--spectrum-global-color-gray-200) !important;
|
||||
border-radius: 7px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
@ -31,8 +31,8 @@
|
|||
background-image: linear-gradient(
|
||||
90deg,
|
||||
rgba(255, 255, 255, 0) 0,
|
||||
rgba(255, 255, 255, 0.2) 20%,
|
||||
rgba(255, 255, 255, 0.5) 60%,
|
||||
rgba(255, 255, 255, 0.15) 20%,
|
||||
rgba(255, 255, 255, 0.3) 60%,
|
||||
rgba(255, 255, 255, 0)
|
||||
);
|
||||
animation: shimmer 2s infinite;
|
||||
|
@ -44,7 +44,7 @@
|
|||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
opacity: 0.75;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2,20 +2,20 @@ import filterTests from "../../support/filterTests"
|
|||
const interact = require('../../support/interact')
|
||||
|
||||
filterTests(["smoke", "all"], () => {
|
||||
context("User Management", () => {
|
||||
xcontext("User Management", () => {
|
||||
before(() => {
|
||||
cy.login()
|
||||
cy.deleteApp("Cypress Tests")
|
||||
cy.createApp("Cypress Tests", false)
|
||||
})
|
||||
|
||||
it("should create a user via basic onboarding", () => {
|
||||
xit("should create a user via basic onboarding", () => {
|
||||
cy.visit(`${Cypress.config().baseUrl}/builder`, { timeout: 5000})
|
||||
cy.createUser("bbuser@test.com")
|
||||
cy.get(interact.SPECTRUM_TABLE).should("contain", "bbuser")
|
||||
})
|
||||
|
||||
it("should confirm App User role for a New User", () => {
|
||||
xit("should confirm App User role for a New User", () => {
|
||||
cy.contains("bbuser").click()
|
||||
cy.get(".spectrum-Form-itemField").eq(3).should('contain', 'App User')
|
||||
|
||||
|
@ -166,7 +166,7 @@ filterTests(["smoke", "all"], () => {
|
|||
})
|
||||
})
|
||||
|
||||
it("Should edit user details within user details page", () => {
|
||||
xit("Should edit user details within user details page", () => {
|
||||
// Add First name
|
||||
cy.get(interact.FIELD, { timeout: 1000 }).eq(1).within(() => {
|
||||
cy.wait(500)
|
||||
|
@ -190,7 +190,7 @@ filterTests(["smoke", "all"], () => {
|
|||
})
|
||||
})
|
||||
|
||||
it("should reset the users password", () => {
|
||||
xit("should reset the users password", () => {
|
||||
cy.get(".title").within(() => {
|
||||
cy.get(interact.SPECTRUM_ICON).click({ force: true })
|
||||
})
|
||||
|
@ -230,7 +230,7 @@ filterTests(["smoke", "all"], () => {
|
|||
cy.login()
|
||||
})
|
||||
|
||||
it("should delete a user", () => {
|
||||
xit("should delete a user", () => {
|
||||
cy.deleteUser("bbuser@test.com")
|
||||
cy.get(interact.SPECTRUM_TABLE, { timeout: 4000 }).should("not.have.text", "bbuser")
|
||||
})
|
||||
|
|
|
@ -140,7 +140,8 @@ filterTests(["all"], () => {
|
|||
})
|
||||
|
||||
cy.visit(`${Cypress.config().baseUrl}/builder`)
|
||||
cy.get(".appTable .app-row-actions button")
|
||||
cy.wait(1000)
|
||||
cy.get(".appTable .app-row-actions button", { timeout: 10000 })
|
||||
.contains("Manage")
|
||||
.eq(0)
|
||||
.click({ force: true })
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@budibase/builder",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"license": "GPL-3.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
@ -71,10 +71,10 @@
|
|||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@budibase/bbui": "2.1.43-alpha.5",
|
||||
"@budibase/client": "2.1.43-alpha.5",
|
||||
"@budibase/frontend-core": "2.1.43-alpha.5",
|
||||
"@budibase/string-templates": "2.1.43-alpha.5",
|
||||
"@budibase/bbui": "2.1.43-alpha.9",
|
||||
"@budibase/client": "2.1.43-alpha.9",
|
||||
"@budibase/frontend-core": "2.1.43-alpha.9",
|
||||
"@budibase/string-templates": "2.1.43-alpha.9",
|
||||
"@sentry/browser": "5.19.1",
|
||||
"@spectrum-css/page": "^3.0.1",
|
||||
"@spectrum-css/vars": "^3.0.1",
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@budibase/cli",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"description": "Budibase CLI, for developers, self hosting and migrations.",
|
||||
"main": "src/index.js",
|
||||
"bin": {
|
||||
|
@ -26,9 +26,9 @@
|
|||
"outputPath": "build"
|
||||
},
|
||||
"dependencies": {
|
||||
"@budibase/backend-core": "2.1.43-alpha.5",
|
||||
"@budibase/string-templates": "2.1.43-alpha.5",
|
||||
"@budibase/types": "2.1.43-alpha.5",
|
||||
"@budibase/backend-core": "2.1.43-alpha.9",
|
||||
"@budibase/string-templates": "2.1.43-alpha.9",
|
||||
"@budibase/types": "2.1.43-alpha.9",
|
||||
"axios": "0.21.2",
|
||||
"chalk": "4.1.0",
|
||||
"cli-progress": "3.11.2",
|
||||
|
|
|
@ -2598,6 +2598,7 @@
|
|||
]
|
||||
},
|
||||
"passwordfield": {
|
||||
"skeleton": false,
|
||||
"name": "Password Field",
|
||||
"icon": "LockClosed",
|
||||
"styles": [
|
||||
|
@ -3066,6 +3067,7 @@
|
|||
]
|
||||
},
|
||||
"longformfield": {
|
||||
"skeleton": false,
|
||||
"name": "Long Form Field",
|
||||
"icon": "TextAlignLeft",
|
||||
"styles": [
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@budibase/client",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"license": "MPL-2.0",
|
||||
"module": "dist/budibase-client.js",
|
||||
"main": "dist/budibase-client.js",
|
||||
|
@ -19,9 +19,9 @@
|
|||
"dev:builder": "rollup -cw"
|
||||
},
|
||||
"dependencies": {
|
||||
"@budibase/bbui": "2.1.43-alpha.5",
|
||||
"@budibase/frontend-core": "2.1.43-alpha.5",
|
||||
"@budibase/string-templates": "2.1.43-alpha.5",
|
||||
"@budibase/bbui": "2.1.43-alpha.9",
|
||||
"@budibase/frontend-core": "2.1.43-alpha.9",
|
||||
"@budibase/string-templates": "2.1.43-alpha.9",
|
||||
"@spectrum-css/button": "^3.0.3",
|
||||
"@spectrum-css/card": "^3.0.3",
|
||||
"@spectrum-css/divider": "^1.0.3",
|
||||
|
|
|
@ -57,7 +57,9 @@
|
|||
class="side-panel"
|
||||
class:open
|
||||
>
|
||||
<slot />
|
||||
{#if $sidePanelStore.open}
|
||||
<slot />
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
const context = getContext("context")
|
||||
const { API, fetchDatasourceSchema } = getContext("sdk")
|
||||
|
||||
let loaded = false
|
||||
let schema
|
||||
let table
|
||||
|
||||
|
@ -56,32 +55,30 @@
|
|||
}
|
||||
const res = await fetchDatasourceSchema(dataSource)
|
||||
schema = res || {}
|
||||
if (!loaded) {
|
||||
loaded = true
|
||||
}
|
||||
}
|
||||
|
||||
$: initialValues = getInitialValues(actionType, dataSource, $context)
|
||||
$: resetKey = Helpers.hashString(
|
||||
JSON.stringify(initialValues) + JSON.stringify(dataSource) + disabled
|
||||
!!schema +
|
||||
JSON.stringify(initialValues) +
|
||||
JSON.stringify(dataSource) +
|
||||
disabled
|
||||
)
|
||||
</script>
|
||||
|
||||
{#if loaded}
|
||||
{#key resetKey}
|
||||
<InnerForm
|
||||
{dataSource}
|
||||
{theme}
|
||||
{size}
|
||||
{disabled}
|
||||
{actionType}
|
||||
{schema}
|
||||
{table}
|
||||
{initialValues}
|
||||
{disableValidation}
|
||||
{editAutoColumns}
|
||||
>
|
||||
<slot />
|
||||
</InnerForm>
|
||||
{/key}
|
||||
{/if}
|
||||
{#key resetKey}
|
||||
<InnerForm
|
||||
{dataSource}
|
||||
{theme}
|
||||
{size}
|
||||
{disabled}
|
||||
{actionType}
|
||||
{schema}
|
||||
{table}
|
||||
{initialValues}
|
||||
{disableValidation}
|
||||
{editAutoColumns}
|
||||
>
|
||||
<slot />
|
||||
</InnerForm>
|
||||
{/key}
|
||||
|
|
|
@ -11,18 +11,25 @@ export const createSidePanelStore = () => {
|
|||
open: $store.contentId != null,
|
||||
}
|
||||
})
|
||||
let timeout
|
||||
|
||||
const open = id => {
|
||||
clearTimeout(timeout)
|
||||
store.update(state => {
|
||||
state.contentId = id
|
||||
return state
|
||||
})
|
||||
}
|
||||
|
||||
// Delay closing by 50ms to avoid toggling visibility when cycling though
|
||||
// records
|
||||
const close = () => {
|
||||
store.update(state => {
|
||||
state.contentId = null
|
||||
return state
|
||||
})
|
||||
timeout = setTimeout(() => {
|
||||
store.update(state => {
|
||||
state.contentId = null
|
||||
return state
|
||||
})
|
||||
}, 50)
|
||||
}
|
||||
|
||||
return {
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "@budibase/frontend-core",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"description": "Budibase frontend core libraries used in builder and client",
|
||||
"author": "Budibase",
|
||||
"license": "MPL-2.0",
|
||||
"svelte": "src/index.js",
|
||||
"dependencies": {
|
||||
"@budibase/bbui": "2.1.43-alpha.5",
|
||||
"@budibase/bbui": "2.1.43-alpha.9",
|
||||
"lodash": "^4.17.21",
|
||||
"svelte": "^3.46.2"
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@budibase/sdk",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"description": "Budibase Public API SDK",
|
||||
"author": "Budibase",
|
||||
"license": "MPL-2.0",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "@budibase/server",
|
||||
"email": "hi@budibase.com",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"description": "Budibase Web Server",
|
||||
"main": "src/index.ts",
|
||||
"repository": {
|
||||
|
@ -43,11 +43,11 @@
|
|||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"@apidevtools/swagger-parser": "10.0.3",
|
||||
"@budibase/backend-core": "2.1.43-alpha.5",
|
||||
"@budibase/client": "2.1.43-alpha.5",
|
||||
"@budibase/pro": "2.1.43-alpha.5",
|
||||
"@budibase/string-templates": "2.1.43-alpha.5",
|
||||
"@budibase/types": "2.1.43-alpha.5",
|
||||
"@budibase/backend-core": "2.1.43-alpha.9",
|
||||
"@budibase/client": "2.1.43-alpha.9",
|
||||
"@budibase/pro": "2.1.43-alpha.9",
|
||||
"@budibase/string-templates": "2.1.43-alpha.9",
|
||||
"@budibase/types": "2.1.43-alpha.9",
|
||||
"@bull-board/api": "3.7.0",
|
||||
"@bull-board/koa": "3.9.4",
|
||||
"@elastic/elasticsearch": "7.10.0",
|
||||
|
|
|
@ -26,7 +26,6 @@ import {
|
|||
} from "@budibase/backend-core"
|
||||
import { USERS_TABLE_SCHEMA } from "../../constants"
|
||||
import { buildDefaultDocs } from "../../db/defaultData/datasource_bb_default"
|
||||
|
||||
import { removeAppFromUserRoles } from "../../utilities/workerRequests"
|
||||
import {
|
||||
clientLibraryPath,
|
||||
|
@ -39,18 +38,22 @@ import {
|
|||
backupClientLibrary,
|
||||
revertClientLibrary,
|
||||
} from "../../utilities/fileSystem/clientLibrary"
|
||||
import { syncGlobalUsers } from "./user"
|
||||
import { cleanupAutomations } from "../../automations/utils"
|
||||
import { checkAppMetadata } from "../../automations/logging"
|
||||
import { getUniqueRows } from "../../utilities/usageQuota/rows"
|
||||
import { quotas, groups } from "@budibase/pro"
|
||||
import { App, Layout, Screen, MigrationType } from "@budibase/types"
|
||||
import {
|
||||
App,
|
||||
Layout,
|
||||
Screen,
|
||||
MigrationType,
|
||||
BBContext,
|
||||
Database,
|
||||
} from "@budibase/types"
|
||||
import { BASE_LAYOUT_PROP_IDS } from "../../constants/layouts"
|
||||
import { enrichPluginURLs } from "../../utilities/plugins"
|
||||
import sdk from "../../sdk"
|
||||
|
||||
const URL_REGEX_SLASH = /\/|\\/g
|
||||
|
||||
// utility function, need to do away with this
|
||||
async function getLayouts() {
|
||||
const db = context.getAppDB()
|
||||
|
@ -74,29 +77,18 @@ async function getScreens() {
|
|||
).rows.map((row: any) => row.doc)
|
||||
}
|
||||
|
||||
function getUserRoleId(ctx: any) {
|
||||
return !ctx.user.role || !ctx.user.role._id
|
||||
function getUserRoleId(ctx: BBContext) {
|
||||
return !ctx.user?.role || !ctx.user.role._id
|
||||
? roles.BUILTIN_ROLE_IDS.PUBLIC
|
||||
: ctx.user.role._id
|
||||
}
|
||||
|
||||
export const getAppUrl = (ctx: any) => {
|
||||
// construct the url
|
||||
let url
|
||||
if (ctx.request.body.url) {
|
||||
// if the url is provided, use that
|
||||
url = encodeURI(ctx.request.body.url)
|
||||
} else if (ctx.request.body.name) {
|
||||
// otherwise use the name
|
||||
url = encodeURI(`${ctx.request.body.name}`)
|
||||
}
|
||||
if (url) {
|
||||
url = `/${url.replace(URL_REGEX_SLASH, "")}`.toLowerCase()
|
||||
}
|
||||
return url
|
||||
}
|
||||
|
||||
const checkAppUrl = (ctx: any, apps: any, url: any, currentAppId?: string) => {
|
||||
function checkAppUrl(
|
||||
ctx: BBContext,
|
||||
apps: App[],
|
||||
url: string,
|
||||
currentAppId?: string
|
||||
) {
|
||||
if (currentAppId) {
|
||||
apps = apps.filter((app: any) => app.appId !== currentAppId)
|
||||
}
|
||||
|
@ -105,12 +97,12 @@ const checkAppUrl = (ctx: any, apps: any, url: any, currentAppId?: string) => {
|
|||
}
|
||||
}
|
||||
|
||||
const checkAppName = (
|
||||
ctx: any,
|
||||
apps: any,
|
||||
name: any,
|
||||
function checkAppName(
|
||||
ctx: BBContext,
|
||||
apps: App[],
|
||||
name: string,
|
||||
currentAppId?: string
|
||||
) => {
|
||||
) {
|
||||
// TODO: Replace with Joi
|
||||
if (!name) {
|
||||
ctx.throw(400, "Name is required")
|
||||
|
@ -165,14 +157,14 @@ async function createInstance(template: any, includeSampleData: boolean) {
|
|||
return { _id: appId }
|
||||
}
|
||||
|
||||
const addDefaultTables = async (db: any) => {
|
||||
async function addDefaultTables(db: Database) {
|
||||
const defaultDbDocs = buildDefaultDocs()
|
||||
|
||||
// add in the default db data docs - tables, datasource, rows and links
|
||||
await db.bulkDocs([...defaultDbDocs])
|
||||
}
|
||||
|
||||
export const fetch = async (ctx: any) => {
|
||||
export async function fetch(ctx: BBContext) {
|
||||
const dev = ctx.query && ctx.query.status === AppStatus.DEV
|
||||
const all = ctx.query && ctx.query.status === AppStatus.ALL
|
||||
const apps = (await dbCore.getAllApps({ dev, all })) as App[]
|
||||
|
@ -197,7 +189,7 @@ export const fetch = async (ctx: any) => {
|
|||
ctx.body = await checkAppMetadata(apps)
|
||||
}
|
||||
|
||||
export const fetchAppDefinition = async (ctx: any) => {
|
||||
export async function fetchAppDefinition(ctx: BBContext) {
|
||||
const layouts = await getLayouts()
|
||||
const userRoleId = getUserRoleId(ctx)
|
||||
const accessController = new roles.AccessController()
|
||||
|
@ -212,7 +204,7 @@ export const fetchAppDefinition = async (ctx: any) => {
|
|||
}
|
||||
}
|
||||
|
||||
export const fetchAppPackage = async (ctx: any) => {
|
||||
export async function fetchAppPackage(ctx: BBContext) {
|
||||
const db = context.getAppDB()
|
||||
let application = await db.get(DocumentType.APP_METADATA)
|
||||
const layouts = await getLayouts()
|
||||
|
@ -222,7 +214,7 @@ export const fetchAppPackage = async (ctx: any) => {
|
|||
application.usedPlugins = enrichPluginURLs(application.usedPlugins)
|
||||
|
||||
// Only filter screens if the user is not a builder
|
||||
if (!(ctx.user.builder && ctx.user.builder.global)) {
|
||||
if (!(ctx.user?.builder && ctx.user.builder.global)) {
|
||||
const userRoleId = getUserRoleId(ctx)
|
||||
const accessController = new roles.AccessController()
|
||||
screens = await accessController.checkScreensAccess(screens, userRoleId)
|
||||
|
@ -236,11 +228,12 @@ export const fetchAppPackage = async (ctx: any) => {
|
|||
}
|
||||
}
|
||||
|
||||
const performAppCreate = async (ctx: any) => {
|
||||
const apps = await dbCore.getAllApps({ dev: true })
|
||||
const name = ctx.request.body.name
|
||||
async function performAppCreate(ctx: BBContext) {
|
||||
const apps = (await dbCore.getAllApps({ dev: true })) as App[]
|
||||
const name = ctx.request.body.name,
|
||||
possibleUrl = ctx.request.body.url
|
||||
checkAppName(ctx, apps, name)
|
||||
const url = getAppUrl(ctx)
|
||||
const url = sdk.applications.getAppUrl({ name, url: possibleUrl })
|
||||
checkAppUrl(ctx, apps, url)
|
||||
|
||||
const { useTemplate, templateKey, templateString } = ctx.request.body
|
||||
|
@ -331,7 +324,7 @@ const performAppCreate = async (ctx: any) => {
|
|||
return newApplication
|
||||
}
|
||||
|
||||
const creationEvents = async (request: any, app: App) => {
|
||||
async function creationEvents(request: any, app: App) {
|
||||
let creationFns: ((app: App) => Promise<void>)[] = []
|
||||
|
||||
const body = request.body
|
||||
|
@ -356,7 +349,7 @@ const creationEvents = async (request: any, app: App) => {
|
|||
}
|
||||
}
|
||||
|
||||
const appPostCreate = async (ctx: any, app: App) => {
|
||||
async function appPostCreate(ctx: BBContext, app: App) {
|
||||
const tenantId = tenancy.getTenantId()
|
||||
await migrations.backPopulateMigrations({
|
||||
type: MigrationType.APP,
|
||||
|
@ -377,7 +370,7 @@ const appPostCreate = async (ctx: any, app: App) => {
|
|||
if (err.code && err.code === errors.codes.USAGE_LIMIT_EXCEEDED) {
|
||||
// this import resulted in row usage exceeding the quota
|
||||
// delete the app
|
||||
// skip pre and post steps as no rows have been added to quotas yet
|
||||
// skip pre- and post-steps as no rows have been added to quotas yet
|
||||
ctx.params.appId = app.appId
|
||||
await destroyApp(ctx)
|
||||
}
|
||||
|
@ -387,7 +380,7 @@ const appPostCreate = async (ctx: any, app: App) => {
|
|||
}
|
||||
}
|
||||
|
||||
export const create = async (ctx: any) => {
|
||||
export async function create(ctx: BBContext) {
|
||||
const newApplication = await quotas.addApp(() => performAppCreate(ctx))
|
||||
await appPostCreate(ctx, newApplication)
|
||||
await cache.bustCache(cache.CacheKey.CHECKLIST)
|
||||
|
@ -397,14 +390,15 @@ export const create = async (ctx: any) => {
|
|||
|
||||
// This endpoint currently operates as a PATCH rather than a PUT
|
||||
// Thus name and url fields are handled only if present
|
||||
export const update = async (ctx: any) => {
|
||||
const apps = await dbCore.getAllApps({ dev: true })
|
||||
export async function update(ctx: BBContext) {
|
||||
const apps = (await dbCore.getAllApps({ dev: true })) as App[]
|
||||
// validation
|
||||
const name = ctx.request.body.name
|
||||
const name = ctx.request.body.name,
|
||||
possibleUrl = ctx.request.body.url
|
||||
if (name) {
|
||||
checkAppName(ctx, apps, name, ctx.params.appId)
|
||||
}
|
||||
const url = getAppUrl(ctx)
|
||||
const url = sdk.applications.getAppUrl({ name, url: possibleUrl })
|
||||
if (url) {
|
||||
checkAppUrl(ctx, apps, url, ctx.params.appId)
|
||||
ctx.request.body.url = url
|
||||
|
@ -416,7 +410,7 @@ export const update = async (ctx: any) => {
|
|||
ctx.body = app
|
||||
}
|
||||
|
||||
export const updateClient = async (ctx: any) => {
|
||||
export async function updateClient(ctx: BBContext) {
|
||||
// Get current app version
|
||||
const db = context.getAppDB()
|
||||
const application = await db.get(DocumentType.APP_METADATA)
|
||||
|
@ -440,7 +434,7 @@ export const updateClient = async (ctx: any) => {
|
|||
ctx.body = app
|
||||
}
|
||||
|
||||
export const revertClient = async (ctx: any) => {
|
||||
export async function revertClient(ctx: BBContext) {
|
||||
// Check app can be reverted
|
||||
const db = context.getAppDB()
|
||||
const application = await db.get(DocumentType.APP_METADATA)
|
||||
|
@ -466,12 +460,15 @@ export const revertClient = async (ctx: any) => {
|
|||
ctx.body = app
|
||||
}
|
||||
|
||||
const destroyApp = async (ctx: any) => {
|
||||
async function destroyApp(ctx: BBContext) {
|
||||
let appId = ctx.params.appId
|
||||
let isUnpublish = ctx.query && ctx.query.unpublish
|
||||
|
||||
if (isUnpublish) {
|
||||
appId = dbCore.getProdAppID(appId)
|
||||
const devAppId = dbCore.getDevAppID(appId)
|
||||
// sync before removing the published app
|
||||
await sdk.applications.syncApp(devAppId)
|
||||
}
|
||||
|
||||
const db = isUnpublish ? context.getProdAppDB() : context.getAppDB()
|
||||
|
@ -501,12 +498,12 @@ const destroyApp = async (ctx: any) => {
|
|||
return result
|
||||
}
|
||||
|
||||
const preDestroyApp = async (ctx: any) => {
|
||||
async function preDestroyApp(ctx: BBContext) {
|
||||
const { rows } = await getUniqueRows([ctx.params.appId])
|
||||
ctx.rowCount = rows.length
|
||||
}
|
||||
|
||||
const postDestroyApp = async (ctx: any) => {
|
||||
async function postDestroyApp(ctx: BBContext) {
|
||||
const rowCount = ctx.rowCount
|
||||
await groups.cleanupApp(ctx.params.appId)
|
||||
if (rowCount) {
|
||||
|
@ -514,7 +511,7 @@ const postDestroyApp = async (ctx: any) => {
|
|||
}
|
||||
}
|
||||
|
||||
export const destroy = async (ctx: any) => {
|
||||
export async function destroy(ctx: BBContext) {
|
||||
await preDestroyApp(ctx)
|
||||
const result = await destroyApp(ctx)
|
||||
await postDestroyApp(ctx)
|
||||
|
@ -522,62 +519,16 @@ export const destroy = async (ctx: any) => {
|
|||
ctx.body = result
|
||||
}
|
||||
|
||||
export const sync = async (ctx: any, next: any) => {
|
||||
if (env.DISABLE_AUTO_PROD_APP_SYNC) {
|
||||
ctx.status = 200
|
||||
ctx.body = {
|
||||
message:
|
||||
"App sync disabled. You can reenable with the DISABLE_AUTO_PROD_APP_SYNC environment variable.",
|
||||
}
|
||||
return next()
|
||||
}
|
||||
|
||||
export async function sync(ctx: BBContext) {
|
||||
const appId = ctx.params.appId
|
||||
if (!dbCore.isDevAppID(appId)) {
|
||||
ctx.throw(400, "This action cannot be performed for production apps")
|
||||
}
|
||||
|
||||
// replicate prod to dev
|
||||
const prodAppId = dbCore.getProdAppID(appId)
|
||||
|
||||
// specific case, want to make sure setup is skipped
|
||||
const prodDb = context.getProdAppDB({ skip_setup: true })
|
||||
const exists = await prodDb.exists()
|
||||
if (!exists) {
|
||||
// the database doesn't exist. Don't replicate
|
||||
ctx.status = 200
|
||||
ctx.body = {
|
||||
message: "App sync not required, app not deployed.",
|
||||
}
|
||||
return next()
|
||||
}
|
||||
|
||||
const replication = new dbCore.Replication({
|
||||
source: prodAppId,
|
||||
target: appId,
|
||||
})
|
||||
let error
|
||||
try {
|
||||
await replication.replicate(replication.appReplicateOpts())
|
||||
} catch (err) {
|
||||
error = err
|
||||
} finally {
|
||||
await replication.close()
|
||||
}
|
||||
|
||||
// sync the users
|
||||
await syncGlobalUsers()
|
||||
|
||||
if (error) {
|
||||
ctx.throw(400, error)
|
||||
} else {
|
||||
ctx.body = {
|
||||
message: "App sync completed successfully.",
|
||||
}
|
||||
ctx.body = await sdk.applications.syncApp(appId)
|
||||
} catch (err: any) {
|
||||
ctx.throw(err.status || 400, err.message)
|
||||
}
|
||||
}
|
||||
|
||||
export const updateAppPackage = async (appPackage: any, appId: any) => {
|
||||
export async function updateAppPackage(appPackage: any, appId: any) {
|
||||
return context.doInAppContext(appId, async () => {
|
||||
const db = context.getAppDB()
|
||||
const application = await db.get(DocumentType.APP_METADATA)
|
||||
|
@ -598,7 +549,7 @@ export const updateAppPackage = async (appPackage: any, appId: any) => {
|
|||
})
|
||||
}
|
||||
|
||||
const migrateAppNavigation = async () => {
|
||||
async function migrateAppNavigation() {
|
||||
const db = context.getAppDB()
|
||||
const existing: App = await db.get(DocumentType.APP_METADATA)
|
||||
const layouts: Layout[] = await getLayouts()
|
||||
|
|
|
@ -22,6 +22,7 @@ async function createApp(appName: string, appDirectory: string) {
|
|||
},
|
||||
},
|
||||
}
|
||||
// @ts-ignore
|
||||
return create(ctx)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
import {
|
||||
generateUserMetadataID,
|
||||
getUserMetadataParams,
|
||||
generateUserFlagID,
|
||||
} from "../../db/utils"
|
||||
import { generateUserMetadataID, generateUserFlagID } from "../../db/utils"
|
||||
import { InternalTables } from "../../db/utils"
|
||||
import { getGlobalUsers, getRawGlobalUser } from "../../utilities/global"
|
||||
import { getFullUser } from "../../utilities/users"
|
||||
import { isEqual } from "lodash"
|
||||
import {
|
||||
context,
|
||||
constants,
|
||||
|
@ -14,59 +9,7 @@ import {
|
|||
db as dbCore,
|
||||
} from "@budibase/backend-core"
|
||||
import { BBContext, User } from "@budibase/types"
|
||||
|
||||
async function rawMetadata() {
|
||||
const db = context.getAppDB()
|
||||
return (
|
||||
await db.allDocs(
|
||||
getUserMetadataParams(null, {
|
||||
include_docs: true,
|
||||
})
|
||||
)
|
||||
).rows.map(row => row.doc)
|
||||
}
|
||||
|
||||
function combineMetadataAndUser(user: any, metadata: any) {
|
||||
// skip users with no access
|
||||
if (user.roleId === rolesCore.BUILTIN_ROLE_IDS.PUBLIC) {
|
||||
return null
|
||||
}
|
||||
delete user._rev
|
||||
const metadataId = generateUserMetadataID(user._id)
|
||||
const newDoc = {
|
||||
...user,
|
||||
_id: metadataId,
|
||||
tableId: InternalTables.USER_METADATA,
|
||||
}
|
||||
const found = Array.isArray(metadata)
|
||||
? metadata.find(doc => doc._id === metadataId)
|
||||
: metadata
|
||||
// copy rev over for the purposes of equality check
|
||||
if (found) {
|
||||
newDoc._rev = found._rev
|
||||
}
|
||||
if (found == null || !isEqual(newDoc, found)) {
|
||||
return {
|
||||
...found,
|
||||
...newDoc,
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export async function syncGlobalUsers() {
|
||||
// sync user metadata
|
||||
const db = context.getAppDB()
|
||||
const [users, metadata] = await Promise.all([getGlobalUsers(), rawMetadata()])
|
||||
const toWrite = []
|
||||
for (let user of users) {
|
||||
const combined = await combineMetadataAndUser(user, metadata)
|
||||
if (combined) {
|
||||
toWrite.push(combined)
|
||||
}
|
||||
}
|
||||
await db.bulkDocs(toWrite)
|
||||
}
|
||||
import sdk from "../../sdk"
|
||||
|
||||
export async function syncUser(ctx: BBContext) {
|
||||
let deleting = false,
|
||||
|
@ -123,7 +66,7 @@ export async function syncUser(ctx: BBContext) {
|
|||
metadata.roleId = roleId
|
||||
}
|
||||
let combined = !deleting
|
||||
? combineMetadataAndUser(user, metadata)
|
||||
? sdk.users.combineMetadataAndUser(user, metadata)
|
||||
: {
|
||||
...metadata,
|
||||
status: constants.UserStatus.INACTIVE,
|
||||
|
@ -143,7 +86,7 @@ export async function syncUser(ctx: BBContext) {
|
|||
|
||||
export async function fetchMetadata(ctx: BBContext) {
|
||||
const global = await getGlobalUsers()
|
||||
const metadata = await rawMetadata()
|
||||
const metadata = await sdk.users.rawUserMetadata()
|
||||
const users = []
|
||||
for (let user of global) {
|
||||
// find the metadata that matches up to the global ID
|
||||
|
|
|
@ -17,7 +17,6 @@ const {
|
|||
checkBuilderEndpoint,
|
||||
} = require("./utilities/TestFunctions")
|
||||
const setup = require("./utilities")
|
||||
const { basicScreen, basicLayout } = setup.structures
|
||||
const { AppStatus } = require("../../../db/utils")
|
||||
const { events } = require("@budibase/backend-core")
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { db as dbCore } from "@budibase/backend-core"
|
||||
import { getAppUrl } from "../../api/controllers/application"
|
||||
import sdk from "../../sdk"
|
||||
|
||||
/**
|
||||
* Date:
|
||||
|
@ -20,14 +20,7 @@ export const run = async (appDb: any) => {
|
|||
}
|
||||
|
||||
if (!metadata.url) {
|
||||
const context = {
|
||||
request: {
|
||||
body: {
|
||||
name: metadata.name,
|
||||
},
|
||||
},
|
||||
}
|
||||
metadata.url = getAppUrl(context)
|
||||
metadata.url = sdk.applications.getAppUrl({ name: metadata.name })
|
||||
console.log(`Adding url to app: ${metadata.url}`)
|
||||
await appDb.put(metadata)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
import * as sync from "./sync"
|
||||
import * as utils from "./utils"
|
||||
|
||||
export default {
|
||||
...sync,
|
||||
...utils,
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
import env from "../../../environment"
|
||||
import { db as dbCore, context } from "@budibase/backend-core"
|
||||
import sdk from "../../"
|
||||
|
||||
export async function syncApp(appId: string) {
|
||||
if (env.DISABLE_AUTO_PROD_APP_SYNC) {
|
||||
return {
|
||||
message:
|
||||
"App sync disabled. You can reenable with the DISABLE_AUTO_PROD_APP_SYNC environment variable.",
|
||||
}
|
||||
}
|
||||
|
||||
if (dbCore.isProdAppID(appId)) {
|
||||
throw new Error("This action cannot be performed for production apps")
|
||||
}
|
||||
|
||||
// replicate prod to dev
|
||||
const prodAppId = dbCore.getProdAppID(appId)
|
||||
|
||||
// specific case, want to make sure setup is skipped
|
||||
const prodDb = context.getProdAppDB({ skip_setup: true })
|
||||
const exists = await prodDb.exists()
|
||||
if (!exists) {
|
||||
// the database doesn't exist. Don't replicate
|
||||
return {
|
||||
message: "App sync not required, app not deployed.",
|
||||
}
|
||||
}
|
||||
|
||||
const replication = new dbCore.Replication({
|
||||
source: prodAppId,
|
||||
target: appId,
|
||||
})
|
||||
let error
|
||||
try {
|
||||
await replication.replicate(replication.appReplicateOpts())
|
||||
} catch (err) {
|
||||
error = err
|
||||
} finally {
|
||||
await replication.close()
|
||||
}
|
||||
|
||||
// sync the users
|
||||
await sdk.users.syncGlobalUsers()
|
||||
|
||||
if (error) {
|
||||
throw error
|
||||
} else {
|
||||
return {
|
||||
message: "App sync completed successfully.",
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
const URL_REGEX_SLASH = /\/|\\/g
|
||||
|
||||
export function getAppUrl(opts?: { name?: string; url?: string }) {
|
||||
// construct the url
|
||||
let url
|
||||
if (opts?.url) {
|
||||
// if the url is provided, use that
|
||||
url = encodeURI(opts?.url)
|
||||
} else if (opts?.name) {
|
||||
// otherwise use the name
|
||||
url = encodeURI(`${opts?.name}`)
|
||||
}
|
||||
if (url) {
|
||||
url = `/${url.replace(URL_REGEX_SLASH, "")}`.toLowerCase()
|
||||
}
|
||||
return url as string
|
||||
}
|
|
@ -1,15 +1,16 @@
|
|||
import { default as backups } from "./app/backups"
|
||||
import { default as tables } from "./app/tables"
|
||||
import { default as automations } from "./app/automations"
|
||||
import { default as applications } from "./app/applications"
|
||||
import { default as users } from "./users"
|
||||
|
||||
const sdk = {
|
||||
backups,
|
||||
tables,
|
||||
automations,
|
||||
applications,
|
||||
users,
|
||||
}
|
||||
|
||||
// default export for TS
|
||||
export default sdk
|
||||
|
||||
// default export for JS
|
||||
module.exports = sdk
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
import * as utils from "./utils"
|
||||
|
||||
export default {
|
||||
...utils,
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
import { getGlobalUsers } from "../../utilities/global"
|
||||
import { context, roles as rolesCore } from "@budibase/backend-core"
|
||||
import {
|
||||
generateUserMetadataID,
|
||||
getUserMetadataParams,
|
||||
InternalTables,
|
||||
} from "../../db/utils"
|
||||
import { isEqual } from "lodash"
|
||||
|
||||
export function combineMetadataAndUser(user: any, metadata: any) {
|
||||
// skip users with no access
|
||||
if (user.roleId === rolesCore.BUILTIN_ROLE_IDS.PUBLIC) {
|
||||
return null
|
||||
}
|
||||
delete user._rev
|
||||
const metadataId = generateUserMetadataID(user._id)
|
||||
const newDoc = {
|
||||
...user,
|
||||
_id: metadataId,
|
||||
tableId: InternalTables.USER_METADATA,
|
||||
}
|
||||
const found = Array.isArray(metadata)
|
||||
? metadata.find(doc => doc._id === metadataId)
|
||||
: metadata
|
||||
// copy rev over for the purposes of equality check
|
||||
if (found) {
|
||||
newDoc._rev = found._rev
|
||||
}
|
||||
if (found == null || !isEqual(newDoc, found)) {
|
||||
return {
|
||||
...found,
|
||||
...newDoc,
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export async function rawUserMetadata() {
|
||||
const db = context.getAppDB()
|
||||
return (
|
||||
await db.allDocs(
|
||||
getUserMetadataParams(null, {
|
||||
include_docs: true,
|
||||
})
|
||||
)
|
||||
).rows.map(row => row.doc)
|
||||
}
|
||||
|
||||
export async function syncGlobalUsers() {
|
||||
// sync user metadata
|
||||
const db = context.getAppDB()
|
||||
const [users, metadata] = await Promise.all([
|
||||
getGlobalUsers(),
|
||||
rawUserMetadata(),
|
||||
])
|
||||
const toWrite = []
|
||||
for (let user of users) {
|
||||
const combined = await combineMetadataAndUser(user, metadata)
|
||||
if (combined) {
|
||||
toWrite.push(combined)
|
||||
}
|
||||
}
|
||||
await db.bulkDocs(toWrite)
|
||||
}
|
|
@ -1273,12 +1273,12 @@
|
|||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
||||
|
||||
"@budibase/backend-core@2.1.43-alpha.5":
|
||||
version "2.1.43-alpha.5"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.1.43-alpha.5.tgz#111b460861f41a16b0003c9fe26837fc34e31851"
|
||||
integrity sha512-JIP2LQZeqOVtcLWxSdEVIsLX6DwWGxIbHiM6fQFuzjnwY79SRUyKKcT2AJZBkjktvNQpFTReM9vxHJbVwvTSqg==
|
||||
"@budibase/backend-core@2.1.43-alpha.9":
|
||||
version "2.1.43-alpha.9"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.1.43-alpha.9.tgz#c2e59c710390a0816e6a77f2444f378cc1843cd2"
|
||||
integrity sha512-tkRV2noQ8GMuJmCh0TQAbmwOXH2HdFxnD8aNHuBMxbWEVCF3ICydozr1i+zCGnGQCtYVCtk1bgedPUwtDkvB7Q==
|
||||
dependencies:
|
||||
"@budibase/types" "2.1.43-alpha.5"
|
||||
"@budibase/types" "2.1.43-alpha.9"
|
||||
"@shopify/jest-koa-mocks" "5.0.1"
|
||||
"@techpass/passport-openidconnect" "0.3.2"
|
||||
aws-sdk "2.1030.0"
|
||||
|
@ -1360,13 +1360,13 @@
|
|||
svelte-flatpickr "^3.2.3"
|
||||
svelte-portal "^1.0.0"
|
||||
|
||||
"@budibase/pro@2.1.43-alpha.5":
|
||||
version "2.1.43-alpha.5"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.1.43-alpha.5.tgz#7ba1b2002f701dab665877a9481e51af28efe05e"
|
||||
integrity sha512-lKcWWquxLkJ+BhWah6zn/OnmstZvwr73HiNkJkUkd5f8plw8by6KMfyfPoyAAivjDuNzF+oOlXVZnX/IbTfCIg==
|
||||
"@budibase/pro@2.1.43-alpha.9":
|
||||
version "2.1.43-alpha.9"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.1.43-alpha.9.tgz#60756ded5eb190cbe3cbc74fc18614021a74afaf"
|
||||
integrity sha512-ibmQO3MqllynwqMsQcfUPyZ9gJdgiLMOZXnq7rFsyKgGsPtddgb2M3hMROGS6wGQ4osqp1cShg5MykstTpL6HA==
|
||||
dependencies:
|
||||
"@budibase/backend-core" "2.1.43-alpha.5"
|
||||
"@budibase/types" "2.1.43-alpha.5"
|
||||
"@budibase/backend-core" "2.1.43-alpha.9"
|
||||
"@budibase/types" "2.1.43-alpha.9"
|
||||
"@koa/router" "8.0.8"
|
||||
bull "4.10.1"
|
||||
joi "17.6.0"
|
||||
|
@ -1390,10 +1390,10 @@
|
|||
svelte-apexcharts "^1.0.2"
|
||||
svelte-flatpickr "^3.1.0"
|
||||
|
||||
"@budibase/types@2.1.43-alpha.5":
|
||||
version "2.1.43-alpha.5"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.1.43-alpha.5.tgz#b713dc5b8c9023ba5a0eeb5c781f972444a98a9e"
|
||||
integrity sha512-7KYhAliJb9lLcFuYA26h2nb2z6WmBEI5d2W5mAwlCD78mtL9G1ofxabbZ/egc+OGMDDa6AAS/7R5zpEgueKyyw==
|
||||
"@budibase/types@2.1.43-alpha.9":
|
||||
version "2.1.43-alpha.9"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.1.43-alpha.9.tgz#6b677230232efc29bb26d34e073033838632031e"
|
||||
integrity sha512-PAI+rTGEvxfOKhvvf/18bc2uR69k1n3qvX+KFzGqcGj0f1PglPz8+/9R4nW/kT2kSVPkT7SN7M5ILsuZnd6jjQ==
|
||||
|
||||
"@bull-board/api@3.7.0":
|
||||
version "3.7.0"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@budibase/string-templates",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"description": "Handlebars wrapper for Budibase templating.",
|
||||
"main": "src/index.cjs",
|
||||
"module": "dist/bundle.mjs",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@budibase/types",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"description": "Budibase types",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "@budibase/worker",
|
||||
"email": "hi@budibase.com",
|
||||
"version": "2.1.43-alpha.5",
|
||||
"version": "2.1.43-alpha.9",
|
||||
"description": "Budibase background service",
|
||||
"main": "src/index.ts",
|
||||
"repository": {
|
||||
|
@ -36,10 +36,10 @@
|
|||
"author": "Budibase",
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"@budibase/backend-core": "2.1.43-alpha.5",
|
||||
"@budibase/pro": "2.1.43-alpha.5",
|
||||
"@budibase/string-templates": "2.1.43-alpha.5",
|
||||
"@budibase/types": "2.1.43-alpha.5",
|
||||
"@budibase/backend-core": "2.1.43-alpha.9",
|
||||
"@budibase/pro": "2.1.43-alpha.9",
|
||||
"@budibase/string-templates": "2.1.43-alpha.9",
|
||||
"@budibase/types": "2.1.43-alpha.9",
|
||||
"@koa/router": "8.0.8",
|
||||
"@sentry/node": "6.17.7",
|
||||
"@techpass/passport-openidconnect": "0.3.2",
|
||||
|
|
|
@ -470,12 +470,12 @@
|
|||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
||||
|
||||
"@budibase/backend-core@2.1.43-alpha.5":
|
||||
version "2.1.43-alpha.5"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.1.43-alpha.5.tgz#111b460861f41a16b0003c9fe26837fc34e31851"
|
||||
integrity sha512-JIP2LQZeqOVtcLWxSdEVIsLX6DwWGxIbHiM6fQFuzjnwY79SRUyKKcT2AJZBkjktvNQpFTReM9vxHJbVwvTSqg==
|
||||
"@budibase/backend-core@2.1.43-alpha.9":
|
||||
version "2.1.43-alpha.9"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.1.43-alpha.9.tgz#c2e59c710390a0816e6a77f2444f378cc1843cd2"
|
||||
integrity sha512-tkRV2noQ8GMuJmCh0TQAbmwOXH2HdFxnD8aNHuBMxbWEVCF3ICydozr1i+zCGnGQCtYVCtk1bgedPUwtDkvB7Q==
|
||||
dependencies:
|
||||
"@budibase/types" "2.1.43-alpha.5"
|
||||
"@budibase/types" "2.1.43-alpha.9"
|
||||
"@shopify/jest-koa-mocks" "5.0.1"
|
||||
"@techpass/passport-openidconnect" "0.3.2"
|
||||
aws-sdk "2.1030.0"
|
||||
|
@ -507,22 +507,22 @@
|
|||
uuid "8.3.2"
|
||||
zlib "1.0.5"
|
||||
|
||||
"@budibase/pro@2.1.43-alpha.5":
|
||||
version "2.1.43-alpha.5"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.1.43-alpha.5.tgz#7ba1b2002f701dab665877a9481e51af28efe05e"
|
||||
integrity sha512-lKcWWquxLkJ+BhWah6zn/OnmstZvwr73HiNkJkUkd5f8plw8by6KMfyfPoyAAivjDuNzF+oOlXVZnX/IbTfCIg==
|
||||
"@budibase/pro@2.1.43-alpha.9":
|
||||
version "2.1.43-alpha.9"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.1.43-alpha.9.tgz#60756ded5eb190cbe3cbc74fc18614021a74afaf"
|
||||
integrity sha512-ibmQO3MqllynwqMsQcfUPyZ9gJdgiLMOZXnq7rFsyKgGsPtddgb2M3hMROGS6wGQ4osqp1cShg5MykstTpL6HA==
|
||||
dependencies:
|
||||
"@budibase/backend-core" "2.1.43-alpha.5"
|
||||
"@budibase/types" "2.1.43-alpha.5"
|
||||
"@budibase/backend-core" "2.1.43-alpha.9"
|
||||
"@budibase/types" "2.1.43-alpha.9"
|
||||
"@koa/router" "8.0.8"
|
||||
bull "4.10.1"
|
||||
joi "17.6.0"
|
||||
node-fetch "^2.6.1"
|
||||
|
||||
"@budibase/types@2.1.43-alpha.5":
|
||||
version "2.1.43-alpha.5"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.1.43-alpha.5.tgz#b713dc5b8c9023ba5a0eeb5c781f972444a98a9e"
|
||||
integrity sha512-7KYhAliJb9lLcFuYA26h2nb2z6WmBEI5d2W5mAwlCD78mtL9G1ofxabbZ/egc+OGMDDa6AAS/7R5zpEgueKyyw==
|
||||
"@budibase/types@2.1.43-alpha.9":
|
||||
version "2.1.43-alpha.9"
|
||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.1.43-alpha.9.tgz#6b677230232efc29bb26d34e073033838632031e"
|
||||
integrity sha512-PAI+rTGEvxfOKhvvf/18bc2uR69k1n3qvX+KFzGqcGj0f1PglPz8+/9R4nW/kT2kSVPkT7SN7M5ILsuZnd6jjQ==
|
||||
|
||||
"@cspotcode/source-map-support@^0.8.0":
|
||||
version "0.8.1"
|
||||
|
|
Loading…
Reference in New Issue