commit
12bd6c60a4
|
@ -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:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"version": "1.2.28-alpha.1",
|
"version": "1.2.30",
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"packages": [
|
"packages": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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()
|
|
|
@ -1 +0,0 @@
|
||||||
export * from "./BBEventEmitter"
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -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()
|
||||||
})
|
})
|
||||||
|
|
||||||
$: {
|
$: {
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 },
|
||||||
|
})
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
|
@ -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()
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
},
|
},
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
export * from "./web"
|
|
@ -0,0 +1,9 @@
|
||||||
|
export enum PingSource {
|
||||||
|
BUILDER = "builder",
|
||||||
|
APP = "app",
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AnalyticsPingRequest {
|
||||||
|
source: PingSource
|
||||||
|
timezone: string
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
export * from "./analytics"
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue