83 lines
2.0 KiB
TypeScript
83 lines
2.0 KiB
TypeScript
import { App, AppSearch, Table, TableSearch } from "../definitions"
|
|
import getConfig from "next/config"
|
|
|
|
const { serverRuntimeConfig } = getConfig()
|
|
const apiKey = serverRuntimeConfig["apiKey"]
|
|
const appName = serverRuntimeConfig["appName"]
|
|
const host = serverRuntimeConfig["host"]
|
|
|
|
let APP: App | null = null
|
|
let TABLES: { [key: string]: Table } = {}
|
|
|
|
export async function makeCall(
|
|
method: string,
|
|
url: string,
|
|
opts?: { body?: any; appId?: string }
|
|
): Promise<any> {
|
|
const fetchOpts: any = {
|
|
method,
|
|
headers: {
|
|
"x-budibase-api-key": apiKey,
|
|
},
|
|
}
|
|
if (opts?.appId) {
|
|
fetchOpts.headers["x-budibase-app-id"] = opts.appId
|
|
}
|
|
if (opts?.body) {
|
|
fetchOpts.body =
|
|
typeof opts.body !== "string" ? JSON.stringify(opts.body) : opts.body
|
|
fetchOpts.headers["Content-Type"] = "application/json"
|
|
}
|
|
const finalUrl = `${host}/api/public/v1/${url}`
|
|
const response = await fetch(finalUrl, fetchOpts)
|
|
if (response.ok) {
|
|
return response.json()
|
|
} else {
|
|
const error = await response.text()
|
|
console.error("Budibase server error - ", error)
|
|
throw new Error(error)
|
|
}
|
|
}
|
|
|
|
export async function getApp(): Promise<App> {
|
|
if (APP) {
|
|
return APP
|
|
}
|
|
const apps: AppSearch = await makeCall("post", "applications/search", {
|
|
body: {
|
|
name: appName,
|
|
},
|
|
})
|
|
const app = apps.data.find((app: App) => app.name === appName)
|
|
if (!app) {
|
|
throw new Error(
|
|
"Could not find app, please make sure app name in config is correct."
|
|
)
|
|
}
|
|
APP = app
|
|
return app
|
|
}
|
|
|
|
export async function findTable(
|
|
appId: string,
|
|
tableName: string
|
|
): Promise<Table> {
|
|
if (TABLES[tableName]) {
|
|
return TABLES[tableName]
|
|
}
|
|
const tables: TableSearch = await makeCall("post", "tables/search", {
|
|
body: {
|
|
name: tableName,
|
|
},
|
|
appId,
|
|
})
|
|
const table = tables.data.find((table: Table) => table.name === tableName)
|
|
if (!table) {
|
|
throw new Error(
|
|
"Could not find table, please make sure your app is configured with the Postgres datasource correctly."
|
|
)
|
|
}
|
|
TABLES[tableName] = table
|
|
return table
|
|
}
|