Merge pull request #7204 from Budibase/merge-master

Merge master
This commit is contained in:
Rory Powell 2022-08-10 15:44:38 +01:00 committed by GitHub
commit 12bd6c60a4
37 changed files with 222 additions and 176 deletions

View File

@ -75,7 +75,7 @@ services:
ports: ports:
- "${MAIN_PORT}:10000" - "${MAIN_PORT}:10000"
container_name: bbproxy container_name: bbproxy
image: proxy-service image: budibase/proxy
environment: environment:
- PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND=10 - PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND=10
depends_on: depends_on:

View File

@ -1,5 +1,5 @@
{ {
"version": "1.2.28-alpha.1", "version": "1.2.30",
"npmClient": "yarn", "npmClient": "yarn",
"packages": [ "packages": [
"packages/*" "packages/*"

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/backend-core", "name": "@budibase/backend-core",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"description": "Budibase backend core libraries used in server and worker", "description": "Budibase backend core libraries used in server and worker",
"main": "dist/src/index.js", "main": "dist/src/index.js",
"types": "dist/src/index.d.ts", "types": "dist/src/index.d.ts",
@ -20,7 +20,7 @@
"test:watch": "jest --watchAll" "test:watch": "jest --watchAll"
}, },
"dependencies": { "dependencies": {
"@budibase/types": "1.2.28-alpha.1", "@budibase/types": "^1.2.30",
"@techpass/passport-openidconnect": "0.3.2", "@techpass/passport-openidconnect": "0.3.2",
"aws-sdk": "2.1030.0", "aws-sdk": "2.1030.0",
"bcrypt": "5.0.1", "bcrypt": "5.0.1",

View File

@ -1,27 +0,0 @@
import { EventEmitter } from "events"
import * as context from "../../context"
import { Identity, Event } from "@budibase/types"
export interface EmittedEvent {
tenantId: string
identity: Identity
appId: string | undefined
properties: any
}
class BBEventEmitter extends EventEmitter {
emitEvent(event: Event, properties: any, identity: Identity) {
const tenantId = context.getTenantId()
const appId = context.getAppId()
const emittedEvent: EmittedEvent = {
tenantId,
identity,
appId,
properties,
}
this.emit(event, emittedEvent)
}
}
export const emitter = new BBEventEmitter()

View File

@ -1 +0,0 @@
export * from "./BBEventEmitter"

View File

@ -2,41 +2,6 @@ import { Event } from "@budibase/types"
import { processors } from "./processors" import { processors } from "./processors"
import * as identification from "./identification" import * as identification from "./identification"
import * as backfill from "./backfill" import * as backfill from "./backfill"
import { emitter, EmittedEvent } from "./emit"
import * as context from "../context"
import * as logging from "../logging"
const USE_EMITTER: any[] = [
Event.SERVED_BUILDER,
Event.SERVED_APP,
Event.SERVED_APP_PREVIEW,
]
for (let event of USE_EMITTER) {
emitter.on(event, async (props: EmittedEvent) => {
try {
await context.doInTenant(props.tenantId, async () => {
if (props.appId) {
await context.doInAppContext(props.appId, async () => {
await processors.processEvent(
event as Event,
props.identity,
props.properties
)
})
} else {
await processors.processEvent(
event as Event,
props.identity,
props.properties
)
}
})
} catch (e) {
logging.logAlert(`Unable to process async event ${event}`, e)
}
})
}
export const publishEvent = async ( export const publishEvent = async (
event: Event, event: Event,
@ -46,11 +11,6 @@ export const publishEvent = async (
// in future this should use async events via a distributed queue. // in future this should use async events via a distributed queue.
const identity = await identification.getCurrentIdentity() const identity = await identification.getCurrentIdentity()
if (USE_EMITTER.includes(event)) {
emitter.emitEvent(event, properties, identity)
return
}
const backfilling = await backfill.isBackfillingEvent(event) const backfilling = await backfill.isBackfillingEvent(event)
// no backfill - send the event and exit // no backfill - send the event and exit
if (!backfilling) { if (!backfilling) {

View File

@ -7,22 +7,26 @@ import {
AppServedEvent, AppServedEvent,
} from "@budibase/types" } from "@budibase/types"
export async function servedBuilder() { export async function servedBuilder(timezone: string) {
const properties: BuilderServedEvent = {} const properties: BuilderServedEvent = {
timezone,
}
await publishEvent(Event.SERVED_BUILDER, properties) await publishEvent(Event.SERVED_BUILDER, properties)
} }
export async function servedApp(app: App) { export async function servedApp(app: App, timezone: string) {
const properties: AppServedEvent = { const properties: AppServedEvent = {
appVersion: app.version, appVersion: app.version,
timezone,
} }
await publishEvent(Event.SERVED_APP, properties) await publishEvent(Event.SERVED_APP, properties)
} }
export async function servedAppPreview(app: App) { export async function servedAppPreview(app: App, timezone: string) {
const properties: AppPreviewServedEvent = { const properties: AppPreviewServedEvent = {
appId: app.appId, appId: app.appId,
appVersion: app.version, appVersion: app.version,
timezone,
} }
await publishEvent(Event.SERVED_APP_PREVIEW, properties) await publishEvent(Event.SERVED_APP_PREVIEW, properties)
} }

View File

@ -1,7 +1,7 @@
{ {
"name": "@budibase/bbui", "name": "@budibase/bbui",
"description": "A UI solution used in the different Budibase projects.", "description": "A UI solution used in the different Budibase projects.",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"license": "MPL-2.0", "license": "MPL-2.0",
"svelte": "src/index.js", "svelte": "src/index.js",
"module": "dist/bbui.es.js", "module": "dist/bbui.es.js",
@ -38,7 +38,7 @@
], ],
"dependencies": { "dependencies": {
"@adobe/spectrum-css-workflow-icons": "^1.2.1", "@adobe/spectrum-css-workflow-icons": "^1.2.1",
"@budibase/string-templates": "1.2.28-alpha.1", "@budibase/string-templates": "^1.2.30",
"@spectrum-css/actionbutton": "^1.0.1", "@spectrum-css/actionbutton": "^1.0.1",
"@spectrum-css/actiongroup": "^1.0.1", "@spectrum-css/actiongroup": "^1.0.1",
"@spectrum-css/avatar": "^3.0.2", "@spectrum-css/avatar": "^3.0.2",

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/builder", "name": "@budibase/builder",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"scripts": { "scripts": {
@ -69,10 +69,10 @@
} }
}, },
"dependencies": { "dependencies": {
"@budibase/bbui": "1.2.28-alpha.1", "@budibase/bbui": "^1.2.30",
"@budibase/client": "1.2.28-alpha.1", "@budibase/client": "^1.2.30",
"@budibase/frontend-core": "1.2.28-alpha.1", "@budibase/frontend-core": "^1.2.30",
"@budibase/string-templates": "1.2.28-alpha.1", "@budibase/string-templates": "^1.2.30",
"@sentry/browser": "5.19.1", "@sentry/browser": "5.19.1",
"@spectrum-css/page": "^3.0.1", "@spectrum-css/page": "^3.0.1",
"@spectrum-css/vars": "^3.0.1", "@spectrum-css/vars": "^3.0.1",

View File

@ -3,6 +3,7 @@
import { datasources, integrations, queries } from "stores/backend" import { datasources, integrations, queries } from "stores/backend"
import BindingBuilder from "components/integration/QueryBindingBuilder.svelte" import BindingBuilder from "components/integration/QueryBindingBuilder.svelte"
import IntegrationQueryEditor from "components/integration/index.svelte" import IntegrationQueryEditor from "components/integration/index.svelte"
import { IntegrationTypes } from "constants/backend"
export let parameters export let parameters
export let bindings = [] export let bindings = []
@ -11,6 +12,12 @@
$: datasource = $datasources.list.find( $: datasource = $datasources.list.find(
ds => ds._id === parameters.datasourceId ds => ds._id === parameters.datasourceId
) )
// Executequery action just works on PostgreSQL and MongoDB datasources
$: executeQueryDatasources = $datasources.list.filter(
x =>
x.source === IntegrationTypes.POSTGRES ||
x.source === IntegrationTypes.MONGODB
)
function fetchQueryDefinition(query) { function fetchQueryDefinition(query) {
const source = $datasources.list.find( const source = $datasources.list.find(
@ -24,7 +31,7 @@
<Select <Select
label="Datasource" label="Datasource"
bind:value={parameters.datasourceId} bind:value={parameters.datasourceId}
options={$datasources.list} options={executeQueryDatasources}
getOptionLabel={source => source.name} getOptionLabel={source => source.name}
getOptionValue={source => source._id} getOptionValue={source => source._id}
/> />

View File

@ -3,6 +3,7 @@
import { admin, auth } from "stores/portal" import { admin, auth } from "stores/portal"
import { onMount } from "svelte" import { onMount } from "svelte"
import { CookieUtils, Constants } from "@budibase/frontend-core" import { CookieUtils, Constants } from "@budibase/frontend-core"
import { API } from "api"
let loaded = false let loaded = false
@ -53,6 +54,9 @@
await auth.setOrganisation(urlTenantId) await auth.setOrganisation(urlTenantId)
} }
} }
async function analyticsPing() {
await API.analyticsPing({ source: "builder" })
}
onMount(async () => { onMount(async () => {
try { try {
@ -73,6 +77,9 @@
// being logged in // being logged in
} }
loaded = true loaded = true
// lastly
await analyticsPing()
}) })
$: { $: {

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/cli", "name": "@budibase/cli",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"description": "Budibase CLI, for developers, self hosting and migrations.", "description": "Budibase CLI, for developers, self hosting and migrations.",
"main": "src/index.js", "main": "src/index.js",
"bin": { "bin": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/client", "name": "@budibase/client",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"license": "MPL-2.0", "license": "MPL-2.0",
"module": "dist/budibase-client.js", "module": "dist/budibase-client.js",
"main": "dist/budibase-client.js", "main": "dist/budibase-client.js",
@ -19,9 +19,9 @@
"dev:builder": "rollup -cw" "dev:builder": "rollup -cw"
}, },
"dependencies": { "dependencies": {
"@budibase/bbui": "1.2.28-alpha.1", "@budibase/bbui": "^1.2.30",
"@budibase/frontend-core": "1.2.28-alpha.1", "@budibase/frontend-core": "^1.2.30",
"@budibase/string-templates": "1.2.28-alpha.1", "@budibase/string-templates": "^1.2.30",
"@spectrum-css/button": "^3.0.3", "@spectrum-css/button": "^3.0.3",
"@spectrum-css/card": "^3.0.3", "@spectrum-css/card": "^3.0.3",
"@spectrum-css/divider": "^1.0.3", "@spectrum-css/divider": "^1.0.3",

View File

@ -83,6 +83,8 @@
dataLoaded = true dataLoaded = true
if (get(builderStore).inBuilder) { if (get(builderStore).inBuilder) {
builderStore.actions.notifyLoaded() builderStore.actions.notifyLoaded()
} else {
builderStore.actions.analyticsPing({ source: "app" })
} }
}) })
</script> </script>

View File

@ -1,4 +1,5 @@
import { writable, get } from "svelte/store" import { writable, get } from "svelte/store"
import { API } from "api"
import { devToolsStore } from "./devTools.js" import { devToolsStore } from "./devTools.js"
const dispatchEvent = (type, data = {}) => { const dispatchEvent = (type, data = {}) => {
@ -48,6 +49,13 @@ const createBuilderStore = () => {
notifyLoaded: () => { notifyLoaded: () => {
dispatchEvent("preview-loaded") dispatchEvent("preview-loaded")
}, },
analyticsPing: async () => {
try {
await API.analyticsPing({ source: "app" })
} catch (error) {
// Do nothing
}
},
moveComponent: (componentId, destinationComponentId, mode) => { moveComponent: (componentId, destinationComponentId, mode) => {
dispatchEvent("move-component", { dispatchEvent("move-component", {
componentId, componentId,

View File

@ -1,12 +1,12 @@
{ {
"name": "@budibase/frontend-core", "name": "@budibase/frontend-core",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"description": "Budibase frontend core libraries used in builder and client", "description": "Budibase frontend core libraries used in builder and client",
"author": "Budibase", "author": "Budibase",
"license": "MPL-2.0", "license": "MPL-2.0",
"svelte": "src/index.js", "svelte": "src/index.js",
"dependencies": { "dependencies": {
"@budibase/bbui": "1.2.28-alpha.1", "@budibase/bbui": "^1.2.30",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"svelte": "^3.46.2" "svelte": "^3.46.2"
} }

View File

@ -7,4 +7,11 @@ export const buildAnalyticsEndpoints = API => ({
url: "/api/bbtel", url: "/api/bbtel",
}) })
}, },
analyticsPing: async ({ source }) => {
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone
return await API.post({
url: "/api/bbtel/ping",
body: { source, timezone },
})
},
}) })

View File

@ -1,7 +1,7 @@
{ {
"name": "@budibase/server", "name": "@budibase/server",
"email": "hi@budibase.com", "email": "hi@budibase.com",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"description": "Budibase Web Server", "description": "Budibase Web Server",
"main": "src/index.ts", "main": "src/index.ts",
"repository": { "repository": {
@ -77,11 +77,11 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"@apidevtools/swagger-parser": "10.0.3", "@apidevtools/swagger-parser": "10.0.3",
"@budibase/backend-core": "1.2.28-alpha.1", "@budibase/backend-core": "^1.2.30",
"@budibase/client": "1.2.28-alpha.1", "@budibase/client": "^1.2.30",
"@budibase/pro": "1.2.28-alpha.1", "@budibase/pro": "1.2.30",
"@budibase/string-templates": "1.2.28-alpha.1", "@budibase/string-templates": "^1.2.30",
"@budibase/types": "1.2.28-alpha.1", "@budibase/types": "^1.2.30",
"@bull-board/api": "3.7.0", "@bull-board/api": "3.7.0",
"@bull-board/koa": "3.9.4", "@bull-board/koa": "3.9.4",
"@elastic/elasticsearch": "7.10.0", "@elastic/elasticsearch": "7.10.0",

View File

@ -1,4 +1,7 @@
import { events } from "@budibase/backend-core" import { events } from "@budibase/backend-core"
import { AnalyticsPingRequest, PingSource } from "@budibase/types"
import { DocumentTypes, isDevAppID } from "../../db/utils"
import { context } from "@budibase/backend-core"
export const isEnabled = async (ctx: any) => { export const isEnabled = async (ctx: any) => {
const enabled = await events.analytics.enabled() const enabled = await events.analytics.enabled()
@ -6,3 +9,27 @@ export const isEnabled = async (ctx: any) => {
enabled, enabled,
} }
} }
export const ping = async (ctx: any) => {
const body = ctx.request.body as AnalyticsPingRequest
switch (body.source) {
case PingSource.APP: {
const db = context.getAppDB({ skip_setup: true })
const appInfo = await db.get(DocumentTypes.APP_METADATA)
let appId = context.getAppId()
if (isDevAppID(appId)) {
await events.serve.servedAppPreview(appInfo, body.timezone)
} else {
await events.serve.servedApp(appInfo, body.timezone)
}
break
}
case PingSource.BUILDER: {
await events.serve.servedBuilder(body.timezone)
break
}
}
ctx.status = 200
}

View File

@ -14,11 +14,10 @@ const env = require("../../../environment")
const { clientLibraryPath } = require("../../../utilities") const { clientLibraryPath } = require("../../../utilities")
const { upload } = require("../../../utilities/fileSystem") const { upload } = require("../../../utilities/fileSystem")
const { attachmentsRelativeURL } = require("../../../utilities") const { attachmentsRelativeURL } = require("../../../utilities")
const { DocumentTypes, isDevAppID } = require("../../../db/utils") const { DocumentTypes } = require("../../../db/utils")
const { getAppDB, getAppId } = require("@budibase/backend-core/context") const { getAppDB, getAppId } = require("@budibase/backend-core/context")
const { setCookie, clearCookie } = require("@budibase/backend-core/utils") const { setCookie, clearCookie } = require("@budibase/backend-core/utils")
const AWS = require("aws-sdk") const AWS = require("aws-sdk")
import { events } from "@budibase/backend-core"
const fs = require("fs") const fs = require("fs")
const { const {
@ -75,9 +74,6 @@ export const toggleBetaUiFeature = async function (ctx: any) {
export const serveBuilder = async function (ctx: any) { export const serveBuilder = async function (ctx: any) {
const builderPath = resolve(TOP_LEVEL_PATH, "builder") const builderPath = resolve(TOP_LEVEL_PATH, "builder")
await send(ctx, ctx.file, { root: builderPath }) await send(ctx, ctx.file, { root: builderPath })
if (ctx.file === "index.html") {
await events.serve.servedBuilder()
}
} }
export const uploadFile = async function (ctx: any) { export const uploadFile = async function (ctx: any) {
@ -126,12 +122,6 @@ export const serveApp = async function (ctx: any) {
// just return the app info for jest to assert on // just return the app info for jest to assert on
ctx.body = appInfo ctx.body = appInfo
} }
if (isDevAppID(appInfo.appId)) {
await events.serve.servedAppPreview(appInfo)
} else {
await events.serve.servedApp(appInfo)
}
} }
export const serveClientLibrary = async function (ctx: any) { export const serveClientLibrary = async function (ctx: any) {

View File

@ -4,5 +4,6 @@ const controller = require("../controllers/analytics")
const router = Router() const router = Router()
router.get("/api/bbtel", controller.isEnabled) router.get("/api/bbtel", controller.isEnabled)
router.post("/api/bbtel/ping", controller.ping)
module.exports = router module.exports = router

View File

@ -0,0 +1,59 @@
const setup = require("./utilities")
const { events, constants, db } = require("@budibase/backend-core")
describe("/static", () => {
let request = setup.getRequest()
let config = setup.getConfig()
let app
const timezone = "Europe/London"
afterAll(setup.afterAll)
beforeEach(async () => {
app = await config.init()
jest.clearAllMocks()
})
describe("/ping", () => {
it("should ping from builder", async () => {
await request
.post("/api/bbtel/ping")
.send({source: "builder", timezone})
.set(config.defaultHeaders())
.expect(200)
expect(events.serve.servedBuilder).toBeCalledTimes(1)
expect(events.serve.servedBuilder).toBeCalledWith(timezone)
expect(events.serve.servedApp).not.toBeCalled()
expect(events.serve.servedAppPreview).not.toBeCalled()
})
it("should ping from app preview", async () => {
await request
.post("/api/bbtel/ping")
.send({source: "app", timezone})
.set(config.defaultHeaders())
.expect(200)
expect(events.serve.servedAppPreview).toBeCalledTimes(1)
expect(events.serve.servedAppPreview).toBeCalledWith(config.getApp(), timezone)
expect(events.serve.servedApp).not.toBeCalled()
})
it("should ping from app", async () => {
const headers = config.defaultHeaders()
headers[constants.Headers.APP_ID] = config.prodAppId
await request
.post("/api/bbtel/ping")
.send({source: "app", timezone})
.set(headers)
.expect(200)
expect(events.serve.servedApp).toBeCalledTimes(1)
expect(events.serve.servedApp).toBeCalledWith(config.getProdApp(), timezone)
expect(events.serve.servedAppPreview).not.toBeCalled()
})
})
})

View File

@ -36,7 +36,6 @@ describe("/static", () => {
.expect(200) .expect(200)
expect(res.text).toContain("<title>Budibase</title>") expect(res.text).toContain("<title>Budibase</title>")
expect(events.serve.servedBuilder).toBeCalledTimes(1)
}) })
}) })
@ -56,9 +55,6 @@ describe("/static", () => {
.expect(200) .expect(200)
expect(res.body.appId).toBe(config.prodAppId) expect(res.body.appId).toBe(config.prodAppId)
expect(events.serve.servedApp).toBeCalledTimes(1)
expect(events.serve.servedApp).toBeCalledWith(res.body)
expect(events.serve.servedAppPreview).not.toBeCalled()
}) })
it("should serve the app by url", async () => { it("should serve the app by url", async () => {
@ -71,9 +67,6 @@ describe("/static", () => {
.expect(200) .expect(200)
expect(res.body.appId).toBe(config.prodAppId) expect(res.body.appId).toBe(config.prodAppId)
expect(events.serve.servedApp).toBeCalledTimes(1)
expect(events.serve.servedApp).toBeCalledWith(res.body)
expect(events.serve.servedAppPreview).not.toBeCalled()
}) })
it("should serve the app preview by id", async () => { it("should serve the app preview by id", async () => {
@ -83,9 +76,6 @@ describe("/static", () => {
.expect(200) .expect(200)
expect(res.body.appId).toBe(config.appId) expect(res.body.appId).toBe(config.appId)
expect(events.serve.servedAppPreview).toBeCalledTimes(1)
expect(events.serve.servedAppPreview).toBeCalledWith(res.body)
expect(events.serve.servedApp).not.toBeCalled()
}) })
}) })

View File

@ -64,6 +64,11 @@ module AirtableModule {
customisable: true, customisable: true,
fields: { fields: {
id: { id: {
display: "Record ID",
type: DatasourceFieldTypes.STRING,
required: true,
},
table: {
type: DatasourceFieldTypes.STRING, type: DatasourceFieldTypes.STRING,
required: true, required: true,
}, },

View File

@ -48,7 +48,7 @@ describe("Airtable Integration", () => {
it("calls the update method with the correct params", async () => { it("calls the update method with the correct params", async () => {
const response = await config.integration.update({ const response = await config.integration.update({
table: "test", table: "table",
id: "123", id: "123",
json: { json: {
name: "test" name: "test"

View File

@ -25,6 +25,7 @@ const newid = require("../../db/newid")
const context = require("@budibase/backend-core/context") const context = require("@budibase/backend-core/context")
const { generateDevInfoID, SEPARATOR } = require("@budibase/backend-core/db") const { generateDevInfoID, SEPARATOR } = require("@budibase/backend-core/db")
const { encrypt } = require("@budibase/backend-core/encryption") const { encrypt } = require("@budibase/backend-core/encryption")
const { DocumentTypes } = require("../../db/utils")
const GLOBAL_USER_ID = "us_uuid1" const GLOBAL_USER_ID = "us_uuid1"
const EMAIL = "babs@babs.com" const EMAIL = "babs@babs.com"
@ -53,6 +54,10 @@ class TestConfiguration {
return this.app return this.app
} }
getProdApp() {
return this.prodApp
}
getAppId() { getAppId() {
return this.appId return this.appId
} }
@ -106,19 +111,11 @@ class TestConfiguration {
// UTILS // UTILS
async _req(body, params, controlFunc, opts = { prodApp: false }) { async _req(body, params, controlFunc) {
// create a fake request ctx // create a fake request ctx
const request = {} const request = {}
const appId = this.appId
// set the app id
let appId
if (opts.prodApp) {
appId = this.prodAppId
} else {
appId = this.appId
}
request.appId = appId request.appId = appId
// fake cookies, we don't need them // fake cookies, we don't need them
request.cookies = { set: () => {}, get: () => {} } request.cookies = { set: () => {}, get: () => {} }
request.config = { jwtSecret: env.JWT_SECRET } request.config = { jwtSecret: env.JWT_SECRET }
@ -344,14 +341,10 @@ class TestConfiguration {
await this._req(null, null, controllers.deploy.deployApp) await this._req(null, null, controllers.deploy.deployApp)
const prodAppId = this.getAppId().replace("_dev", "") const prodAppId = this.getAppId().replace("_dev", "")
this.prodAppId = prodAppId this.prodAppId = prodAppId
return context.doInAppContext(prodAppId, async () => { return context.doInAppContext(prodAppId, async () => {
const appPackage = await this._req( const db = context.getProdAppDB()
null, return await db.get(DocumentTypes.APP_METADATA)
{ appId: prodAppId },
controllers.app.fetchAppPackage,
{ prodApp: true }
)
return appPackage.application
}) })
} }

View File

@ -1094,19 +1094,18 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@budibase/backend-core@1.2.28-alpha.1": "@budibase/backend-core@1.2.30":
version "1.2.28-alpha.1" version "1.2.30"
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.2.28-alpha.1.tgz#8dbed2df0098fa2361834ca9e95af686f9db0c9c" resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.2.30.tgz#7683406573d2be9c2cd8a25fc4c1bc9de8cb2523"
integrity sha512-7mVl7jPtWZ6spVvAicF/kFMn0Io8GBY4LHmv+D/SWngbT8ATtcQHMlcBvg404ulevCJQBs4DaMweFnZsCvAyNA== integrity sha512-SoF+tKksdalUGB2EFyei86Y9aHGGE1yF8IG6Ex1G0vdajIE7+vEhKgxuACyfzPilptCor6m0pwfK6trtL4rd9w==
dependencies: dependencies:
"@budibase/types" "1.2.28-alpha.1" "@budibase/types" "^1.2.30"
"@techpass/passport-openidconnect" "0.3.2" "@techpass/passport-openidconnect" "0.3.2"
aws-sdk "2.1030.0" aws-sdk "2.1030.0"
bcrypt "5.0.1" bcrypt "5.0.1"
dotenv "16.0.1" dotenv "16.0.1"
emitter-listener "1.1.2" emitter-listener "1.1.2"
ioredis "4.28.0" ioredis "4.28.0"
joi "17.6.0"
jsonwebtoken "8.5.1" jsonwebtoken "8.5.1"
koa-passport "4.1.4" koa-passport "4.1.4"
lodash "4.17.21" lodash "4.17.21"
@ -1178,13 +1177,13 @@
svelte-flatpickr "^3.2.3" svelte-flatpickr "^3.2.3"
svelte-portal "^1.0.0" svelte-portal "^1.0.0"
"@budibase/pro@1.2.28-alpha.1": "@budibase/pro@1.2.30":
version "1.2.28-alpha.1" version "1.2.30"
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.2.28-alpha.1.tgz#9fa6ac9ebd40b10cca63dba4d3fe0c5063bf4aac" resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.2.30.tgz#ee498cf776da17cbbf7af43882e4283fc2c9fd92"
integrity sha512-6DzX2506wBDGKNp6/0tT6FpHLYKub0XyIM99FM/GHwccsUTZ3zRJ1NNHxBw2X2ahQ8ZT0Zcz533xNhb5vx0mGw== integrity sha512-avBjS97zPoAxHDwcrt0zdxZajgaqeS5242NRqirLi07q91yODZBV8tSeh0nPopR8feMuoCDqKV1txm8/ciStnQ==
dependencies: dependencies:
"@budibase/backend-core" "1.2.28-alpha.1" "@budibase/backend-core" "1.2.30"
"@budibase/types" "1.2.28-alpha.1" "@budibase/types" "1.2.30"
"@koa/router" "8.0.8" "@koa/router" "8.0.8"
joi "17.6.0" joi "17.6.0"
node-fetch "^2.6.1" node-fetch "^2.6.1"
@ -1207,10 +1206,10 @@
svelte-apexcharts "^1.0.2" svelte-apexcharts "^1.0.2"
svelte-flatpickr "^3.1.0" svelte-flatpickr "^3.1.0"
"@budibase/types@1.2.28-alpha.1": "@budibase/types@1.2.30", "@budibase/types@^1.2.30":
version "1.2.28-alpha.1" version "1.2.30"
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.2.28-alpha.1.tgz#2de2546d60b86ff6a14ddf3a6cd0de194d833c3c" resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.2.30.tgz#5b94fceabf6abb2b7f5aed2f3aca9fcce9b17fd2"
integrity sha512-2FUGUHVGwcdBmMdZgBdeBuhCn4L8oqUgqsAki0hD46YeLEtx/gPVHb14/Mk6kfafmcyUuoa2KJs0S8YYi3uMkw== integrity sha512-gezzb1WDsePlLWL13Q0I2a+ZwWAmcnAYCnY/dz/bNIrIFli+Svlnx/wbsehAn43MBtMDnLpaquuFJ3VVszTdSw==
"@bull-board/api@3.7.0": "@bull-board/api@3.7.0":
version "3.7.0" version "3.7.0"

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/string-templates", "name": "@budibase/string-templates",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"description": "Handlebars wrapper for Budibase templating.", "description": "Handlebars wrapper for Budibase templating.",
"main": "src/index.cjs", "main": "src/index.cjs",
"module": "dist/bundle.mjs", "module": "dist/bundle.mjs",

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/types", "name": "@budibase/types",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"description": "Budibase types", "description": "Budibase types",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",

View File

@ -0,0 +1 @@
export * from "./web"

View File

@ -0,0 +1,9 @@
export enum PingSource {
BUILDER = "builder",
APP = "app",
}
export interface AnalyticsPingRequest {
source: PingSource
timezone: string
}

View File

@ -0,0 +1 @@
export * from "./analytics"

View File

@ -2,3 +2,4 @@ export * from "./documents"
export * from "./sdk/events" export * from "./sdk/events"
export * from "./sdk/licensing" export * from "./sdk/licensing"
export * from "./sdk" export * from "./sdk"
export * from "./api"

View File

@ -1,11 +1,15 @@
import { BaseEvent } from "./event" import { BaseEvent } from "./event"
export interface BuilderServedEvent extends BaseEvent {} export interface BuilderServedEvent extends BaseEvent {
timezone: string
}
export interface AppServedEvent extends BaseEvent { export interface AppServedEvent extends BaseEvent {
appVersion: string appVersion: string
timezone: string
} }
export interface AppPreviewServedEvent extends BaseEvent { export interface AppPreviewServedEvent extends BaseEvent {
appVersion: string appVersion: string
timezone: string
} }

View File

@ -1,7 +1,7 @@
{ {
"name": "@budibase/worker", "name": "@budibase/worker",
"email": "hi@budibase.com", "email": "hi@budibase.com",
"version": "1.2.28-alpha.1", "version": "1.2.30",
"description": "Budibase background service", "description": "Budibase background service",
"main": "src/index.ts", "main": "src/index.ts",
"repository": { "repository": {
@ -35,10 +35,10 @@
"author": "Budibase", "author": "Budibase",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"@budibase/backend-core": "1.2.28-alpha.1", "@budibase/backend-core": "^1.2.30",
"@budibase/pro": "1.2.28-alpha.1", "@budibase/pro": "1.2.30",
"@budibase/string-templates": "1.2.28-alpha.1", "@budibase/string-templates": "^1.2.30",
"@budibase/types": "1.2.28-alpha.1", "@budibase/types": "^1.2.30",
"@koa/router": "8.0.8", "@koa/router": "8.0.8",
"@sentry/node": "6.17.7", "@sentry/node": "6.17.7",
"@techpass/passport-openidconnect": "0.3.2", "@techpass/passport-openidconnect": "0.3.2",

View File

@ -291,19 +291,18 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@budibase/backend-core@1.2.28-alpha.1": "@budibase/backend-core@1.2.30":
version "1.2.28-alpha.1" version "1.2.30"
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.2.28-alpha.1.tgz#8dbed2df0098fa2361834ca9e95af686f9db0c9c" resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.2.30.tgz#7683406573d2be9c2cd8a25fc4c1bc9de8cb2523"
integrity sha512-7mVl7jPtWZ6spVvAicF/kFMn0Io8GBY4LHmv+D/SWngbT8ATtcQHMlcBvg404ulevCJQBs4DaMweFnZsCvAyNA== integrity sha512-SoF+tKksdalUGB2EFyei86Y9aHGGE1yF8IG6Ex1G0vdajIE7+vEhKgxuACyfzPilptCor6m0pwfK6trtL4rd9w==
dependencies: dependencies:
"@budibase/types" "1.2.28-alpha.1" "@budibase/types" "^1.2.30"
"@techpass/passport-openidconnect" "0.3.2" "@techpass/passport-openidconnect" "0.3.2"
aws-sdk "2.1030.0" aws-sdk "2.1030.0"
bcrypt "5.0.1" bcrypt "5.0.1"
dotenv "16.0.1" dotenv "16.0.1"
emitter-listener "1.1.2" emitter-listener "1.1.2"
ioredis "4.28.0" ioredis "4.28.0"
joi "17.6.0"
jsonwebtoken "8.5.1" jsonwebtoken "8.5.1"
koa-passport "4.1.4" koa-passport "4.1.4"
lodash "4.17.21" lodash "4.17.21"
@ -325,21 +324,21 @@
uuid "8.3.2" uuid "8.3.2"
zlib "1.0.5" zlib "1.0.5"
"@budibase/pro@1.2.28-alpha.1": "@budibase/pro@1.2.30":
version "1.2.28-alpha.1" version "1.2.30"
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.2.28-alpha.1.tgz#9fa6ac9ebd40b10cca63dba4d3fe0c5063bf4aac" resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.2.30.tgz#ee498cf776da17cbbf7af43882e4283fc2c9fd92"
integrity sha512-6DzX2506wBDGKNp6/0tT6FpHLYKub0XyIM99FM/GHwccsUTZ3zRJ1NNHxBw2X2ahQ8ZT0Zcz533xNhb5vx0mGw== integrity sha512-avBjS97zPoAxHDwcrt0zdxZajgaqeS5242NRqirLi07q91yODZBV8tSeh0nPopR8feMuoCDqKV1txm8/ciStnQ==
dependencies: dependencies:
"@budibase/backend-core" "1.2.28-alpha.1" "@budibase/backend-core" "1.2.30"
"@budibase/types" "1.2.28-alpha.1" "@budibase/types" "1.2.30"
"@koa/router" "8.0.8" "@koa/router" "8.0.8"
joi "17.6.0" joi "17.6.0"
node-fetch "^2.6.1" node-fetch "^2.6.1"
"@budibase/types@1.2.28-alpha.1": "@budibase/types@1.2.30", "@budibase/types@^1.2.30":
version "1.2.28-alpha.1" version "1.2.30"
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.2.28-alpha.1.tgz#2de2546d60b86ff6a14ddf3a6cd0de194d833c3c" resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.2.30.tgz#5b94fceabf6abb2b7f5aed2f3aca9fcce9b17fd2"
integrity sha512-2FUGUHVGwcdBmMdZgBdeBuhCn4L8oqUgqsAki0hD46YeLEtx/gPVHb14/Mk6kfafmcyUuoa2KJs0S8YYi3uMkw== integrity sha512-gezzb1WDsePlLWL13Q0I2a+ZwWAmcnAYCnY/dz/bNIrIFli+Svlnx/wbsehAn43MBtMDnLpaquuFJ3VVszTdSw==
"@cspotcode/source-map-consumer@0.8.0": "@cspotcode/source-map-consumer@0.8.0":
version "0.8.0" version "0.8.0"