@budibase/server 3.31.6 → 3.31.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/automation.js +1 -1
- package/dist/automation.js.map +1 -1
- package/dist/index.js +229 -229
- package/dist/index.js.map +2 -2
- package/dist/query.js +1 -1
- package/dist/query.js.map +1 -1
- package/package.json +2 -2
- package/src/api/controllers/static/index.ts +9 -2
- package/src/middleware/utils.ts +7 -12
package/dist/automation.js
CHANGED
|
@@ -671,7 +671,7 @@ Example: return $("Score") + $("Weight")
|
|
|
671
671
|
2. If it's a ticketing system, there may be more tickets than users, and some users may have submitted several tickets.
|
|
672
672
|
3. In a CRM, there are fewer users than customers, and customers may have many deals.
|
|
673
673
|
4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}o(P5,"tableDataStructuredOutput");var N5=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Tv.default.trace("llm.getTableStructure",async()=>{let r=await this.promptForStructuredOutput(T5().addUserMessage(t),x5,"Error generating tables");return O5(r)}),generateAIColumns:(t,r)=>Tv.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Tv.default.trace("llm.generateData",async()=>this.promptForStructuredOutput(A5().addUserMessage(t),P5(r),"Error generating data"))};this.aiModel=t,this.delegates=r}static{o(this,"TableGeneration")}static async init(t,r){if(!t)throw new V("LLM not available",422);return new e(t,r)}async generate(t,r,n){return Tv.default.trace("tableGeneration.generate",async i=>{let s=await this.generateTables(t,r,n);return i.addTags({table_count:s.length}),s})}async generateTables(t,r,n){n?.("Generating table schema...");let i=await this.llmFunctions.getTableStructure(t);n?.("Generating AI columns and sample data...");let[s,a]=await Promise.all([this.llmFunctions.generateAIColumns(t,i),this.llmFunctions.generateData(t,i)]);n?.("Creating tables...");let u=await this.delegates.generateTablesDelegate(I5(i,s));return n?.("Populating rows..."),await this.delegates.generateDataDelegate(a,r,We.toMap("name",i)),n?.("Finalizing..."),u}async generateAIColumns(t,r){return this.promptForStructuredOutput(v5().addUserMessage(`This is the initial user prompt that generated the given schema:
|
|
674
|
-
"${t}"`),D5(r),"Error generating columns")}async promptForStructuredOutput(t,r,n){let i=this.aiModel.providerOptions?.(!1),s=o(async a=>(0,vL.generateText)({model:this.aiModel.chat,messages:this.toModelMessages(t.messages),output:vL.Output.object({schema:r}),providerOptions:a}),"run");try{return(await R5({providerOptions:i,run:s})).output}catch(a){let u=[n,this.getErrorMessage(a)].filter(Boolean).join(": ");throw new V(u,500)}}getErrorMessage(t){if(!t||typeof t!="object")return String(t);let r=t;return typeof r.message=="string"?r.message:String(t)}toModelMessages(t){return t.map(r=>{if(typeof r.content!="string")throw new V("AI message content must be a string",422);return{role:r.role,content:r.content}})}};var Pc=W(require("dd-trace")),vA=require("lodash/fp");var bWe=W(require("node-fetch"));var c9t=W(require("lodash/cloneDeep")),Av=require("path");L._set("SERVICE_TYPE","apps");var Pje=process.env.TOP_LEVEL_PATH||process.env.SERVER_TOP_LEVEL_PATH||(0,Av.resolve)((0,Av.join)(__dirname,"..","..","..")),Dje=!1;!Dje&&L.isDev()&&!L.isTest()&&(require("dotenv").config({path:(0,Av.join)(Pje,".env")}),Dje=!0);function ca(e){if(e)return parseInt(e)}o(ca,"parseIntSafe");var Yi={QUERY_THREAD_TIMEOUT:15e3,AUTOMATION_THREAD_TIMEOUT:12e4,AUTOMATION_MAX_ITERATIONS:200,JS_PER_EXECUTION_TIME_LIMIT_MS:1500,TEMPLATE_REPOSITORY:"app",PLUGINS_DIR:"/plugins",FORKED_PROCESS_NAME:"main",JS_RUNNER_MEMORY_LIMIT:64,RECAPTCHA_SESSION_SECONDS:1800,AUTOMATION_MAX_NESTED_LOOPS:3,AUTOMATION_MAX_STORED_LOOP_RESULTS:50,AUTOMATION_MAX_LOG_SIZE_MB:5},L5=ca(process.env.QUERY_THREAD_TIMEOUT)||Yi.QUERY_THREAD_TIMEOUT,l9t=L5>Yi.AUTOMATION_THREAD_TIMEOUT?L5:Yi.AUTOMATION_THREAD_TIMEOUT,vv={APP_FEATURES:process.env.APP_FEATURES,PORT:process.env.APP_PORT||process.env.APPS_PORT||process.env.PORT,COUCH_DB_URL:process.env.COUCH_DB_URL,COUCH_DB_SQL_URL:process.env.COUCH_DB_SQL_URL,MINIO_URL:process.env.MINIO_URL,WORKER_URL:process.env.WORKER_URL,AWS_REGION:process.env.AWS_REGION,AWS_SESSION_TOKEN:process.env.AWS_SESSION_TOKEN,MINIO_ACCESS_KEY:process.env.MINIO_ACCESS_KEY,MINIO_SECRET_KEY:process.env.MINIO_SECRET_KEY,REDIS_URL:process.env.REDIS_URL,REDIS_PASSWORD:process.env.REDIS_PASSWORD,REDIS_CLUSTERED:process.env.REDIS_CLUSTERED,CLUSTER_MODE:process.env.CLUSTER_MODE,API_REQ_LIMIT_PER_SEC:process.env.API_REQ_LIMIT_PER_SEC,GOOGLE_CLIENT_ID:process.env.GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:process.env.GOOGLE_CLIENT_SECRET,ATLASSIAN_API_TOKEN:process.env.ATLASSIAN_API_TOKEN,ATLASSIAN_EMAIL:process.env.ATLASSIAN_EMAIL,ATLASSIAN_BASE_URL:process.env.ATLASSIAN_BASE_URL,BAMBOOHR_API_KEY:process.env.BAMBOOHR_API_KEY,BAMBOOHR_SUBDOMAIN:process.env.BAMBOOHR_SUBDOMAIN,NODE_ENV:process.env.NODE_ENV,JEST_WORKER_ID:process.env.JEST_WORKER_ID,BUDIBASE_ENVIRONMENT:process.env.BUDIBASE_ENVIRONMENT,DISABLE_ACCOUNT_PORTAL:process.env.DISABLE_ACCOUNT_PORTAL,TEMPLATE_REPOSITORY:process.env.TEMPLATE_REPOSITORY||Yi.TEMPLATE_REPOSITORY,DISABLE_AUTO_PROD_APP_SYNC:process.env.DISABLE_AUTO_PROD_APP_SYNC,SESSION_UPDATE_PERIOD:process.env.SESSION_UPDATE_PERIOD,RECAPTCHA_SITE_KEY:process.env.RECAPTCHA_SITE_KEY,RECAPTCHA_SESSION_SECONDS:process.env.RECAPTCHA_SESSION_SECONDS||Yi.RECAPTCHA_SESSION_SECONDS,APPS_SERVICE:process.env.APPS_SERVICE,SALT_ROUNDS:process.env.SALT_ROUNDS,LOGGER:process.env.LOGGER,ACCOUNT_PORTAL_URL:process.env.ACCOUNT_PORTAL_URL,INTERNAL_ACCOUNT_PORTAL_URL:process.env.INTERNAL_ACCOUNT_PORTAL_URL||process.env.ACCOUNT_PORTAL_URL,AUTOMATION_MAX_ITERATIONS:ca(process.env.AUTOMATION_MAX_ITERATIONS)||Yi.AUTOMATION_MAX_ITERATIONS,DYNAMO_ENDPOINT:process.env.DYNAMO_ENDPOINT,QUERY_THREAD_TIMEOUT:L5,AUTOMATION_THREAD_TIMEOUT:ca(process.env.AUTOMATION_THREAD_TIMEOUT)||l9t,AUTOMATION_MAX_NESTED_LOOPS:ca(process.env.AUTOMATION_MAX_NESTED_LOOPS)||Yi.AUTOMATION_MAX_NESTED_LOOPS,AUTOMATION_MAX_STORED_LOOP_RESULTS:ca(process.env.AUTOMATION_MAX_STORED_LOOP_RESULTS)||Yi.AUTOMATION_MAX_STORED_LOOP_RESULTS,AUTOMATION_MAX_LOG_SIZE_MB:ca(process.env.AUTOMATION_MAX_LOG_SIZE_MB)||Yi.AUTOMATION_MAX_LOG_SIZE_MB,PLUGINS_DIR:process.env.PLUGINS_DIR||Yi.PLUGINS_DIR,MAX_IMPORT_SIZE_MB:process.env.MAX_IMPORT_SIZE_MB,SESSION_EXPIRY_SECONDS:process.env.SESSION_EXPIRY_SECONDS,XSS_SAFE_MODE:process.env.XSS_SAFE_MODE,SQL_MAX_ROWS:process.env.SQL_MAX_ROWS,SQL_LOGGING_ENABLE:process.env.SQL_LOGGING_ENABLE,SQL_ALIASING_DISABLE:process.env.SQL_ALIASING_DISABLE,ALLOW_DEV_AUTOMATIONS:process.env.ALLOW_DEV_AUTOMATIONS,DISABLE_THREADING:process.env.DISABLE_THREADING,DISABLE_AUTOMATION_LOGS:process.env.DISABLE_AUTOMATION_LOGS,DISABLE_RATE_LIMITING:process.env.DISABLE_RATE_LIMITING,DISABLE_WORKSPACE_MIGRATIONS:process.env.SKIP_WORKSPACE_MIGRATIONS||!1,MULTI_TENANCY:process.env.MULTI_TENANCY,ENABLE_ANALYTICS:process.env.ENABLE_ANALYTICS,SELF_HOSTED:process.env.SELF_HOSTED,HTTP_MB_LIMIT:process.env.HTTP_MB_LIMIT,HTTP_SERVER_TIMEOUT_MS:process.env.HTTP_SERVER_TIMEOUT_MS,HTTP_HEADERS_TIMEOUT_MS:process.env.HTTP_HEADERS_TIMEOUT_MS,HTTP_REQUEST_TIMEOUT_MS:process.env.HTTP_REQUEST_TIMEOUT_MS,HTTP_KEEPALIVE_TIMEOUT_MS:process.env.HTTP_KEEPALIVE_TIMEOUT_MS,FORKED_PROCESS_NAME:process.env.FORKED_PROCESS_NAME||Yi.FORKED_PROCESS_NAME,JS_PER_INVOCATION_TIMEOUT_MS:ca(process.env.JS_PER_EXECUTION_TIME_LIMIT_MS)||Yi.JS_PER_EXECUTION_TIME_LIMIT_MS,JS_PER_REQUEST_TIMEOUT_MS:ca(process.env.JS_PER_REQUEST_TIME_LIMIT_MS),TOP_LEVEL_PATH:Pje,APP_MIGRATION_TIMEOUT:ca(process.env.APP_MIGRATION_TIMEOUT),JS_RUNNER_MEMORY_LIMIT:ca(process.env.JS_RUNNER_MEMORY_LIMIT)||Yi.JS_RUNNER_MEMORY_LIMIT,LOG_JS_ERRORS:process.env.LOG_JS_ERRORS,DISABLE_USER_SYNC:process.env.DISABLE_USER_SYNC,ENABLE_PLUGIN_GH_ORIGIN_BACKFILL:process.env.ENABLE_PLUGIN_GH_ORIGIN_BACKFILL??"true",SYNC_MIGRATION_CHECKS_MS:ca(process.env.SYNC_MIGRATION_CHECKS_MS)||5e3,SKIP_MIGRATION_LOCKS_IN_TESTS:process.env.SKIP_MIGRATION_LOCKS_IN_TESTS??!0,REST_REJECT_UNAUTHORIZED:process.env.REST_REJECT_UNAUTHORIZED!=="false",UPLOAD_APPS_FILES_ON_TEST:process.env.UPLOAD_APPS_FILES_ON_TEST,LITELLM_PORT:process.env.LITELLM_PORT||"4000",LITELLM_URL:process.env.LITELLM_URL||`http://localhost:${process.env.LITELLM_PORT||"4000"}`,LITELLM_MASTER_KEY:process.env.LITELLM_MASTER_KEY,BBAI_LITELLM_KEY:process.env.BBAI_LITELLM_KEY,TABLE_GENERATION_TIMEOUT_MS:process.env.TABLE_GENERATION_TIMEOUT_MS||"240000",CLIENT_ID:process.env.CLIENT_ID,_set(e,t){process.env[e]=t,vv[e]=t,Nje()},isTest:L.isTest,isJest:L.isJest,isDev:L.isDev,isProd:()=>!L.isDev(),isInThread:()=>process.env.FORKED_PROCESS,getDefaults:()=>Yi};function Nje(){for(let[e,t]of Object.entries(vv))t==="0"&&(vv[e]=0),t==="false"&&(vv[e]=0)}o(Nje,"cleanVariables");Nje();var ne=vv;var Ky=W(require("fs")),Bje=W(require("node-fetch")),zy=W(require("path")),qje=require("stream"),jje=require("util"),Wje=W(require("uuid"));var Lje=ne.AWS_REGION?ne.AWS_REGION:"eu-west-1";var k5=[["json","array"],["string","options","longform","barcodeqr"],["boolean","number"]],M5=k5.reduce((e,t)=>e?e.concat(t):t);var kje={_id:"ta_users",type:"table",sourceId:Pn,sourceType:"internal",views:{},name:"Users",schema:{email:{type:"string",constraints:{type:"string",email:!0,length:{maximum:""},presence:!0},name:"email"},firstName:{name:"firstName",type:"string",constraints:{type:"string",presence:!1}},lastName:{name:"lastName",type:"string",constraints:{type:"string",presence:!1}},roleId:{name:"roleId",type:"options",constraints:{type:"string",presence:!1,inclusion:Object.values(_t.BUILTIN_ROLE_IDS)}},status:{name:"status",type:"options",constraints:{type:"string",presence:!1,inclusion:Object.values(ot.UserStatus)}}},primaryDisplay:"email"};var AL={read:"get",create:"post",update:"put",patch:"patch",delete:"delete"},U5=(n=>(n.ID="_id",n.REV="_rev",n.TABLE_ID="tableId",n))(U5||{}),hr=ge.ObjectStoreBuckets,Mje=5,Rv="rowNumber",F5=ot.DEFAULT_JOBS_TABLE_ID,Uje=ot.DEFAULT_INVENTORY_TABLE_ID,Fje=ot.DEFAULT_EXPENSES_TABLE_ID,B5=ot.DEFAULT_EMPLOYEE_TABLE_ID,Qy=ot.DEFAULT_BB_DATASOURCE_ID;function $je(){let e=zy.default.join(ge.budibaseTempDir(),"ai-downloads");return Ky.default.existsSync(e)||Ky.default.mkdirSync(e),e}o($je,"getTmpPath");async function Gje(e){try{let t=await(0,Bje.default)(e),r=[...t.url.split(".")].pop().split("?")[0],n=zy.default.resolve($je(),`${Wje.v4()}${r}`),i=Ky.default.createWriteStream(n,{flags:"wx"});await(0,jje.promisify)(qje.pipeline)(t.body,i);let s=zy.default.basename(n),a=`${C.getProdWorkspaceId()}/attachments/${s}`,u=await ge.upload({bucket:hr.APPS,filename:a,path:n,type:"image/jpeg"});return{size:i.bytesWritten,name:s,url:await ge.getAppFileUrl(a),extension:r,key:u.Key}}catch(t){console.error("Error downloading file",t);return}}o(Gje,"uploadUrl");async function Vje(e){let t=zy.default.resolve($je(),`${e.fileName}${e.extension}`);Ky.default.writeFileSync(t,e.content);let r=zy.default.basename(t),n=`${C.getProdWorkspaceId()}/attachments/${r}`,i=await ge.upload({bucket:hr.APPS,filename:n,path:t,type:"text/plain"});return{size:Ky.default.readFileSync(t).byteLength,name:r,url:await ge.getAppFileUrl(n),extension:e.extension,key:i.Key}}o(Vje,"uploadFile");var{getDispatcher:Hje}=Je;var H5=W(require("dayjs")),fWe=W(require("dayjs/plugin/customParseFormat"));var Yy=Je.newid;var Qje={_id:Pn,type:F.BUDIBASE_DATASOURCE_TYPE,name:"Budibase DB",source:"BUDIBASE",config:{}},Et=F.SEPARATOR,Qtn=F.StaticDatabases,Kje=F.WORKSPACE_PREFIX,f9t=F.WORKSPACE_DEV_PREFIX,q5=F.isDevWorkspaceID,Sf=F.isProdWorkspaceID,RL=`ro${Et}${F.InternalTable.USER_METADATA}${Et}`,zje=`li${Et}${F.InternalTable.USER_METADATA}${Et}`,Yje=`ro${Et}ta`,Jje=`log_au${Et}`,Tc=F.ViewName,$t=F.InternalTable,Xje=F.UNICODE_MAX,Ktn=F.generateWorkspaceID,ztn=F.getDevWorkspaceID,Ytn=F.generateRoleID,Zje=F.getRoleParams,Ov=F.getQueryIndex,Ef=F.getDocParams,tn=F.getRowParams,eWe=F.generateRowID,OL=F.getUserMetadataParams,Jy=F.generateUserMetadataID,Xy=F.getGlobalIDFromUserMetadataID;function Tf(e,t={}){return Ef("ta",e,t)}o(Tf,"getTableParams");function j5(){return F.generateTableID()}o(j5,"generateTableID");function vc(e,t={}){return Ef("au",e,t)}o(vc,"getAutomationParams");function tWe(){return`au${Et}${Yy()}`}o(tWe,"generateAutomationID");function rWe(e,t,r,n,i,s){let a=`${Et}${e}${Et}${t}`,u=`${Et}${r}${Et}${n}`,c=`${Et}${i}${Et}${s}`;return`li${a}${u}${c}`}o(rWe,"generateLinkID");function d9t(e={}){return Ef("li",null,e)}o(d9t,"getLinkParams");async function nWe(){return(await C.getWorkspaceDB().allDocs(d9t({include_docs:!0}))).rows.map(r=>r.doc)}o(nWe,"allLinkDocs");function iWe(){return`screen${Et}${Yy()}`}o(iWe,"generateScreenID");function oWe(e,t={}){return Ef("screen",e,t)}o(oWe,"getScreenParams");function sWe(){return`wh${Et}${Yy()}`}o(sWe,"generateWebhookID");function aWe({plus:e=!1}={}){return`${e?"datasource_plus":"datasource"}${Et}${Yy()}`}o(aWe,"generateDatasourceID");function Iv(e,t={}){return Ef("datasource",e,t)}o(Iv,"getDatasourceParams");function W5(e){return`query${Et}${e}${Et}${Yy()}`}o(W5,"generateQueryID");function uWe(e){return`meta_au${Et}${e}`}o(uWe,"generateAutomationMetadataID");function $5(e,t={}){return e==null?Ef("query",null,t):Ef("query",`${e}${Et}`,t)}o($5,"getQueryParams");function IL(e,t){return`metadata${Et}${e}${Et}${t}`}o(IL,"generateMetadataID");function Cv(e){return`view${Et}${e}`}o(Cv,"generateMemoryViewID");function cWe(e={}){return Ef("view",null,e)}o(cWe,"getMemoryViewParams");function vf(e,t){let r=e>t?e:t,n=e>t?t:e;return`${r}${Et}${n}`}o(vf,"generateJunctionTableID");function CL(e){return`view${Et}${e}${Et}${Yy()}`}o(CL,"generateViewID");function Af(e){return e.type==="link"}o(Af,"isRelationshipColumn");function G5(e){return e.type==="ai"}o(G5,"isAIColumn");function xL(e){return`ra${Et}${e}`}o(xL,"generateRowActionsID");function lWe(e){return e.replace(new RegExp(`^ra${Et}`),"")}o(lWe,"extractTableIdFromRowActionsID");H5.default.extend(fWe.default);function dWe(e){return new Promise(t=>setTimeout(t,e))}o(dWe,"wait");var rrn=ne.isDev,pWe=/^[+-]?([0-9]*[.])?[0-9]+$/g,p9t=["MM/DD/YYYY","MM/DD/YY","DD/MM/YYYY","DD/MM/YY","YYYY/MM/DD","YYYY-MM-DD","YYYY-MM-DDTHH:mm","YYYY-MM-DDTHH:mm:ss","YYYY-MM-DDTHH:mm:ss[Z]","YYYY-MM-DDTHH:mm:ss.SSS[Z]"];function hWe(e){for(let t of p9t)if((0,H5.default)(e,t,!0).isValid())return!0;return!1}o(hWe,"isDate");function mWe(e,t){let r=e.indexOf(t);return r!==-1&&e.splice(r,1),e}o(mWe,"removeFromArray");function gWe(e){return e.replace(/(https?:\/\/)|(\/)+/g,"$1$2")}o(gWe,"checkSlashesInUrl");async function DL(e,t){let r=C.getWorkspaceDB(),n=IL(e,t),i=await r.tryGet(n);i&&await r.remove(i)}o(DL,"deleteEntityMetadata");function yWe(e){return e.replace(/[\\]/g,"\\\\").replace(/[\b]/g,"\\b").replace(/[\f]/g,"\\f").replace(/[\n]/g,"\\n").replace(/[\r]/g,"\\r").replace(/[\t]/g,"\\t")}o(yWe,"escapeDangerousCharacters");function h9t(e){let t={},r={method:e.method},n=e.ctx;if(!n&&L.INTERNAL_API_KEY)t[ot.Header.API_KEY]=L.INTERNAL_API_KEY;else if(n&&n.headers){for(let a of Object.values(ot.Header)){let u=n.headers[a];u!==void 0&&(t[a]=Array.isArray(u)?u[0]:u)}let i=n.headers[ot.Header.COOKIE],s=n.headers[ot.Header.API_KEY];i?t[ot.Header.COOKIE]=i:s&&(t[ot.Header.API_KEY]=Array.isArray(s)?s[0]:s)}return Ee.isTenantIdSet()&&(t[ot.Header.TENANT_ID]=Ee.getTenantId()),e.body&&Object.keys(e.body).length>0&&(t["Content-Type"]="application/json",r.body=JSON.stringify(e.body)),Ne.correlation.setHeader(t),r.headers=t,r}o(h9t,"createRequest");async function m9t(e,t,{ctx:r}={}){if(e.status>=300){let n;if(e.headers.get("content-type")?.includes("json")){let s=await e.json();n=s.message??JSON.stringify(s)}else n=await e.text();let i=`Unable to ${t} - ${n}`;if(r)r.throw(e.status||500,i);else throw i}return e.json()}o(m9t,"checkResponse");async function _We({to:e,from:t,replyTo:r,subject:n,contents:i,cc:s,bcc:a,automation:u,invite:c,attachments:l}){let f={email:e,from:t,replyTo:r,contents:i,subject:n,cc:s,bcc:a,purpose:"custom",automation:u,invite:c,attachments:l},d=await(0,bWe.default)(gWe(ne.WORKER_URL+"/api/global/email/send"),h9t({method:"POST",body:f}));return await m9t(d,"send email")}o(_We,"sendSmtpEmail");var iM=require("lodash"),x4e=W(require("path")),D4e=W(require("uuid"));var X5={};$(X5,{init:()=>b9t,revertDevChanges:()=>wWe});var K5={};$(K5,{getAppUrl:()=>y9t,isWorkspacePublished:()=>Q5});var g9t=/\/|\\/g;function y9t(e){let t;return e?.url?t=encodeURI(e?.url):e?.name&&(t=encodeURI(`${e?.name}`)),t&&(t=`/${t.replace(g9t,"")}`.toLowerCase()),t}o(y9t,"getAppUrl");async function Q5(e){return F.isDevWorkspaceID(e)&&(e=F.getProdWorkspaceID(e)),!!(await F.getWorkspacesByIDs([e])).length}o(Q5,"isWorkspacePublished");var z5,Y5=class extends Xr.QueuedProcessor{constructor(){super(Xr.JobQueue.DEV_REVERT_PROCESSOR,{maxAttempts:3,removeOnFail:!1,removeOnComplete:!1,maxStalledCount:3,waitForCompletionMs:1e4});this.processFn=async r=>await C.doInWorkspaceContext(r.appId,()=>this.revertApp(r))}static{o(this,"DevRevertProcessor")}async revertApp(r){let{appId:n}=r,i=F.getProdWorkspaceID(n),s=C.getProdWorkspaceDB({skip_setup:!0});if(!await Q5(i))throw new Xr.UnretriableError("App must be deployed to be reverted.");let u=await s.get("deployments");if(!u.history||Object.keys(u.history).length===0)throw new Xr.UnretriableError("No deployments for app");let c=new F.Replication({source:i,target:n});try{await c.rollback();let l=C.getWorkspaceDB(),f=await l.get("app_metadata");return f.appId=n,f.instance._id=n,await l.put(f),await Ue.workspace.invalidateWorkspaceMetadata(n),await Le.app.reverted(f),{message:"Reverted changes successfully."}}catch(l){throw new Error(`Unable to revert. ${l}`,{cause:l})}finally{await c.close()}}};function J5(){return z5||(z5=new Y5),z5}o(J5,"devRevertProcessor");async function wWe(e){return await J5().execute(e)}o(wWe,"revertDevChanges");var b9t=o(async()=>{J5()},"init");var hY={};$(hY,{backfillPluginOrigins:()=>bXt,enrichUsedPluginSvelteMajors:()=>wXt,fetch:()=>mXt,normaliseGithubUrl:()=>w$e,parseGithubRepo:()=>gXt,processUploaded:()=>_Xt});var AWe=require("path");var ru=ge.budibaseTempDir;var xv=W(require("fs"));var Z5=require("path");var EWe=W(require("tar")),_9t=require("uuid");var PL=ne.TOP_LEVEL_PATH,qrn=(0,Z5.join)(PL,"packages","server");var SWe=o(e=>xv.default.createReadStream(e),"streamFile"),TWe=o(e=>{let t=(0,Z5.join)(ru(),e);try{xv.default.existsSync(t)&&xv.default.rmSync(t,{recursive:!0,force:!0}),xv.default.mkdirSync(t)}catch(r){throw new Error(`Path cannot be created: ${r.message}`)}return t},"createTempFolder"),vWe=o(async(e,t)=>{await EWe.extract({file:e,C:t})},"extractTarball");var ann=(0,AWe.join)(PL,"node_modules");var la=W(require("fs")),Zy=require("path");var RWe=W(require("stream"));var w9t=(0,Zy.join)(ru(),"datasource"),E9t=(0,Zy.join)(ru(),"automation"),OWe=o(async e=>{let t,r;try{if(t=JSON.parse(la.default.readFileSync((0,Zy.join)(e,"package.json"),"utf8")),r=JSON.parse(la.default.readFileSync((0,Zy.join)(e,"schema.json"),"utf8")),!t.name)throw new Error("package.json is missing 'name'.");if(!t.version)throw new Error("package.json is missing 'version'.");if(!t.description)throw new Error("package.json is missing 'description'.")}catch(n){throw new Error(`Unable to process schema.json/package.json in plugin. ${n.message}`,{cause:n})}return{metadata:{package:t,schema:r},directory:e}},"getPluginMetadata");async function IWe(e,t){let r=t.schema?.hash;la.default.existsSync(e)||la.default.mkdirSync(e);let n=(0,Zy.join)(e,t.name),i=`${n}.bbmetadata`;if(la.default.existsSync(n)){if(la.default.readFileSync(i,"utf8")===r)return require(n);console.log(`Updating plugin: ${t.name}`),delete require.cache[require.resolve(n)],la.default.unlinkSync(n)}let s=ge.getPluginJSKey(t),a=await ge.retrieve(ge.ObjectStoreBuckets.PLUGINS,s);return a instanceof RWe.default.Readable?a.pipe(la.default.createWriteStream(n)):la.default.writeFileSync(n,a),la.default.writeFileSync(i,r),require(n)}o(IWe,"getPluginImpl");var CWe=o(async e=>IWe(w9t,e),"getDatasourcePlugin"),xWe=o(async e=>IWe(E9t,e),"getAutomationPlugin");var DWe=o(async(e,t)=>{let n=`https://prod-budi-templates.s3-eu-west-1.amazonaws.com/templates/${e}/${t}.tar.gz`;return ge.downloadTarball(n,hr.TEMPLATES,e)},"downloadTemplate");async function PWe(e){if(!e.name||!e.path)throw new Error("File is not valid - cannot upload.");if(!e.name.endsWith(".tar.gz"))throw new Error("Plugin must be compressed into a gzipped tarball.");let t=TWe(e.name.split(".tar.gz")[0]);return await vWe(e.path,t),await OWe(t)}o(PWe,"fileUpload");var O9t=require("socket.io"),I9t=require("koa-useragent");var C9t=require("@socket.io/redis-adapter");var Dnn=typeof ne.RECAPTCHA_SESSION_SECONDS=="string"?parseInt(ne.RECAPTCHA_SESSION_SECONDS):ne.RECAPTCHA_SESSION_SECONDS,S9t;var T9t;async function NWe(e){return await S9t.bulkGet(e)}o(NWe,"getLocksById");async function eY(e){let t=await T9t?.get(e);return!!(t&&t.testing)}o(eY,"checkTestFlag");var x9t=require("uuid");var v9t=W(require("cookies"));var uin=new RegExp(["webhooks/trigger","webhooks/schema","webhooks/discord","webhooks/ms-teams","webhooks/slack"].join("|"));var win=cf.buildCsrfMiddleware();var pXt=require("koa-useragent");var tY=W(require("fs")),NL=require("lodash"),UWe=require("stream/promises"),FWe=W(require("tmp")),BWe=require("uuid"),qWe=require("xml2js");function N9t(e){return["string","number","boolean","datetime","json","bigint","options"].includes(e)}o(N9t,"isPrimitiveType");var L9t={integer:"number",int:"number",decimal:"number",smallint:"number",tinyint:"number",real:"number",float:"number",numeric:"number",mediumint:"number",dec:"number",double:"number",fixed:"number","double precision":"number",number:"number",binary_float:"number",binary_double:"number",money:"number",smallmoney:"number"},k9t={timestamp:"datetime",time:"datetime",datetime:"datetime",smalldatetime:"datetime",date:"datetime"},M9t=["date"],U9t=["time","time without time zone","time with time zone"],F9t={varchar:"string",char:"string",nchar:"string",nvarchar:"string",ntext:"string",enum:"string",blob:"string",long:"string",text:"string",array:"string"},B9t={boolean:"boolean",bit:"boolean"},q9t={"user-defined":"options"},j9t={json:"json",bigint:"bigint",enum:"options"},W9t={...L9t,...k9t,...F9t,...B9t,...j9t,...q9t},MWe={citext:"string"},Pt=He.utils.isExternalTableID,$9t=He.utils.isExternalTable,Ji=He.utils.buildExternalTableId,mr=He.utils.breakExternalTableId,LL=He.utils.generateRowIdField,jWe=He.utils.isRowId,WWe=He.utils.convertRowId,Cn=He.utils.breakRowIdField,$We=He.utils.isValidFilter,G9t=ne.isProd()&&!ne.SELF_HOSTED,V9t=ne.isProd()&&ne.SELF_HOSTED,fi=V9t?"host.docker.internal":G9t?"":"localhost";function Rf(e){let{externalType:t,autocolumn:r,name:n,presence:i,options:s,userDefinedType:a}=e,u="string",c=t.toLowerCase(),l=[];if(c.startsWith("enum"))l.push({external:"enum",internal:"options"});else if(c==="array"&&a&&(a.toLowerCase().includes("json")||a.toLowerCase().includes("jsonb")))l.push({external:a.toLowerCase(),internal:"json"});else if(a&&a in MWe)u=MWe[a];else for(let[d,p]of Object.entries(W9t))c.includes(d)&&l.push({external:d,internal:p});l.length>0&&(u=l.reduce((d,p)=>d.external.length>=p.external.length?d:p).internal);let f;return u==="options"?f={type:u,externalType:t,autocolumn:r,name:n,constraints:{presence:i,inclusion:s??[]}}:f={type:u,externalType:t,autocolumn:r,name:n,constraints:{presence:i}},f.type==="datetime"&&(f.dateOnly=M9t.includes(c),f.timeOnly=U9t.includes(c)||c.startsWith("time(")),f.type==="string"&&c==="array"&&(f.subtype="array"),f}o(Rf,"generateColumnDefinition");function Br(e){return typeof e=="string"?{sql:e}:e}o(Br,"getSqlQuery");function Of(e){return fe.isSQL(e)}o(Of,"isSQL");function H9t(e,t,r,n){if(r&&r[e]){r[e]?.primaryDisplay&&(t.primaryDisplay=r[e].primaryDisplay),r[e]?.created&&(t.created=r[e]?.created),r[e]?.constrained&&(t.constrained=r[e]?.constrained),t.views=r[e].views;let i=r[e].schema;for(let s in i){if(!Object.prototype.hasOwnProperty.call(i,s))continue;let a=i[s],u=a?.type,c=t.schema[s]?.type,l=o((...d)=>N9t(c)&&t.schema[s]&&d.includes(c),"keepIfType"),f=!1;switch(u){case"formula":case"ai":case"auto":case"internal":f=!0;break;case"link":f=u==="link"&&n.includes(a.tableId);break;case"string":case"options":case"longform":case"barcodeqr":f=l("string");break;case"number":case"boolean":f=l("boolean","number");break;case"array":case"attachment":case"attachment_single":case"signature_single":case"json":case"bb_reference":case"bb_reference_single":f=l("json","string");break;case"datetime":f=l("datetime","string");break;case"bigint":f=l("bigint","number");break;default:We.unreachable(u)}if(f){let d=t.schema[s];if(t.schema[s]={...(0,NL.merge)((0,NL.cloneDeep)(d),i[s]),externalType:i[s].externalType||d?.externalType,autocolumn:d?.autocolumn},d?.constraints){let p=d.constraints,h=t.schema[s].constraints;t.schema[s].constraints={...t.schema[s].constraints,inclusion:p.inclusion?.length?p.inclusion:h?.inclusion},p.presence?t.schema[s].constraints.presence=p.presence:h?.presence===!0&&delete t.schema[s].constraints?.presence}}}}return t}o(H9t,"copyExistingPropsOver");function nu(e,t){let r={},n=Object.values(e).map(i=>i._id);for(let[i,s]of Object.entries(e))r[i]=H9t(i,s,t,n);return Object.entries(r).sort(([i],[s])=>i.localeCompare(s)).reduce((i,[s,a])=>({...i,[s]:a}),{})}o(nu,"finaliseExternalTables");function iu(e){let t=Object.values(U5),r={};for(let[n,i]of Object.entries(e))(!i.primary||i.primary.length===0)&&(r[n]="Table must have a primary key."),Object.keys(i.schema).find(a=>t.includes(a))&&(r[n]="Table contains invalid columns.");return r}o(iu,"checkExternalTables");async function GWe(e){let t=await(0,qWe.parseStringPromise)(e,{explicitArray:!1,trim:!0,explicitRoot:!1})||{},r=Object.keys(t);return r.length===1&&Array.isArray(t[r[0]])&&(t=t[r[0]]),{data:t,rawXml:e}}o(GWe,"handleXml");async function VWe(e,t,r){let n,i=0,s=t.includes(".")?t.split(".").slice(1).join("."):"",a=`${(0,BWe.v4)()}.${s}`,u=`${C.getProdWorkspaceId()}/${a}`,c=ge.ObjectStoreBuckets.TEMP,l=FWe.default.fileSync();try{if(await(0,UWe.pipeline)(e.body,tY.default.createWriteStream(l.name)),e.body){let f=e.headers.get("content-length");f&&(i=parseInt(f,10));let d=await ge.streamUpload({bucket:c,filename:u,stream:tY.default.createReadStream(l.name),ttl:1,type:e.headers["content-type"]});!i&&d.ContentLength&&(i=d.ContentLength)}return n=await ge.getPresignedUrl(c,u),{data:{size:i,name:a,url:n,extension:s,key:u},info:{code:e.status,size:fe.formatBytes(i.toString()),time:`${Math.round(performance.now()-r)}ms`}}}finally{l.removeCallback()}}o(VWe,"handleFileResponse");function Dv({row:e,tableName:t,fieldName:r,isLinked:n}){let i=e[`${t}.${r}`];return i==null&&!n&&(i=e[r]),i}o(Dv,"extractFieldValue");function HWe(e,t){return Dv({row:e,tableName:t._id,fieldName:"_id",isLinked:!1})}o(HWe,"getInternalRowId");function Ac(e,t,r=!1){let n=t.primary;if(!e||!n)return"";let i=[];for(let s of n){let a=Dv({row:e,tableName:t.name,fieldName:s,isLinked:r});a!=null&&i.push(a)}return i.length===0?"":LL(i)}o(Ac,"generateIdForRow");function Q9t(e,t){for(let[r,n]of Object.entries(t.schema))if(UA.includes(n.type)&&typeof e[r]=="string")try{e[r]=JSON.parse(e[r])}catch{fe.schema.isDeprecatedSingleUserColumn(n)||delete e[r]}return e}o(Q9t,"fixJsonTypes");async function rY({row:e,source:t,tables:r,isLinked:n,sqs:i}){let s,a=!1;P.views.isView(t)?(s=await P.views.getTable(t.id),a=fe.views.isCalculationView(t)):s=t;let u={};for(let l of Object.keys(s.schema)){let f=Dv({row:e,tableName:s.name,fieldName:l,isLinked:n});f instanceof Buffer?f=f.toString():f!=null&&(u[l]=f)}if(P.views.isView(t))for(let l of Object.keys(fe.views.calculationFields(t)))u[l]=e[l];let c=Object.keys(s.schema);if(!i&&!a)u._id=Ac(e,s,n),u.tableId=s._id,u._rev=BX,c=c.concat(no);else if(!a){c=c.concat(no);for(let l of[...Hr,...c])u[l]=Dv({row:e,tableName:s._id,fieldName:l,isLinked:n})}for(let l of c){let f=s.schema[l];if(f?.type!=="link")continue;let d=r.find(m=>m._id===f.tableId);if(!d)continue;let p=Dv({row:e,tableName:s._id,fieldName:l,isLinked:n}),h=Array.isArray(p)?p:typeof p=="string"?JSON.parse(p):void 0;if(h&&Array.isArray(h)){u[l]=h;let m=d.primaryDisplay||d.primary[0];u[l]=(await Promise.all(u[l].map(g=>rY({row:g,source:d,tables:r,isLinked:!1,sqs:i})))).sort((g,y)=>{let b=g?.[m],w=y?.[m];if(b){if(!w)return-1}else return 1;return b.localeCompare?b.localeCompare(w):b-w})}}return Q9t(u,s)}o(rY,"basicProcessing");function Pv(e){return!!e.through}o(Pv,"isManyToMany");function QWe(e,t){let r=[];for(let[n,i]of Object.entries(e.schema)){if(i.type!=="link"||!i.tableId)continue;let{tableName:s}=mr(i.tableId);if(!t[s])continue;let a=t[s];if(!e.primary||!a.primary)continue;let u={tableName:s,column:n};if(Pv(i)&&i.through){let{tableName:c}=mr(i.through);u.through=c,u.from=i.throughTo||e.primary[0],u.to=i.throughFrom||a.primary[0],u.fromPrimary=e.primary[0],u.toPrimary=a.primary[0]}else(MA(i)||kA(i))&&(u.from=i.foreignKey||e.primary[0],u.to=i.fieldName);r.push(u)}return r}o(QWe,"buildExternalRelationships");function KWe(e,t){let r=[],n=Object.values(e.schema).filter(s=>s.type==="link"),i=e._id;for(let s of n){if(s.type!=="link")continue;let a=s.tableId,u=vf(i,a),c=i>a;t.find(l=>l._id===a)&&r.push({through:u,column:s.name,tableName:a,fromPrimary:"_id",to:c?"doc2.rowId":"doc1.rowId",from:c?"doc1.rowId":"doc2.rowId",toPrimary:"_id"})}return r}o(KWe,"buildInternalRelationships");async function zWe(e,t,r){let{relationships:n}=r||{},i=["link","formula","ai"];function s(d,p=[]){return Object.entries(d.schema).filter(([h,m])=>!i.includes(m.type)&&!p.find(g=>g===h)).map(([h])=>h)}o(s,"extractRealFields");function a(d,p=[]){let h=[];return d.primary&&h.push(...d.primary),d.primaryDisplay&&h.push(d.primaryDisplay),He.utils.isExternalTable(d)||h.push(...Hr),h.filter(m=>!p.find(g=>g===m)&&d.schema[m]&&!i.includes(d.schema[m].type))}o(a,"getRequiredFields");let u=[],c=P.views.isView(e),l;c?(l=await P.views.getTable(e.id),u=Object.keys(fe.views.basicFields(e)).filter(d=>l.schema[d].type!=="link")):(l=e,u=s(e).filter(d=>l.schema[d].visible!==!1));let f=(c?u:Object.keys(l.schema)).some(d=>l.schema[d]?.type==="formula");f&&(u=s(l)),(!c||!fe.views.isCalculationView(e))&&u.push(...a({...l,primaryDisplay:e.primaryDisplay||l.primaryDisplay},u)),u=u.map(d=>`${l.name}.${d}`);for(let d of Object.values(l.schema)){if(d.type!=="link"||!n||!d.tableId||c&&(!e.schema?.[d.name]||!fe.views.isVisible(e.schema[d.name]))&&!f)continue;let{tableName:p}=mr(d.tableId),h=t[p];if(!h)continue;let m=new Set;f?s(h).forEach(y=>m.add(y)):(h.primary?.forEach(y=>m.add(y)),h.primaryDisplay&&m.add(h.primaryDisplay),c&&Object.entries(e.schema?.[d.name]?.columns||{}).filter(([y,b])=>h.schema[y]&&fe.views.isVisible(b)&&!["link","formula"].includes(h.schema[y].type)).forEach(([y])=>m.add(y)));let g=Array.from(m).filter(y=>!i.includes(h.schema[y].type)).map(y=>`${h.name}.${y}`).filter(y=>!u.includes(y));u.push(...g)}return[...new Set(u)]}o(zWe,"buildSqlFieldList");function nY(e){return!Array.isArray(e)||e.length===0||"read"in e[0]&&e[0].read===!0}o(nY,"isKnexEmptyReadResponse");function YWe(e){return!nY(e)}o(YWe,"isKnexRows");var g$e=require("lodash/fp");var i$e=W(require("lodash/flatten")),o$e=W(require("lodash/partition"));var JWe=W(require("lodash/cloneDeep"));async function kL(e,t={}){if(!e||!e.roles&&!e.userGroups)return e;e=(0,JWe.default)(e),delete e.password;let r=t.appId||C.getWorkspaceId();if(!r)throw new Error("Unable to process user without app ID");if(ne.MULTI_TENANCY&&r&&!Ee.isUserInWorkspaceTenant(r,e))return e=tt.removePortalUserPermissions(e),e.roleId=_t.BUILTIN_ROLE_IDS.PUBLIC,e;let n=[];r&&e?.userGroups?.length&&(n=t.groups?t.groups:await Gn.getBulk(e.userGroups,{enriched:!1}));let i=await Gn.getGroupBuilderAppIds(e,{appId:r,groups:n});if(i.length&&!tt.isBuilder(e,r)){let s=e.builder?.apps||[];e.builder={apps:[...new Set(s.concat(i))]}}return tt.isBuilder(e,r)&&(e.roleId=_t.BUILTIN_ROLE_IDS.ADMIN),!e.roleId&&r&&e.roles&&(e.roleId=e.roles[F.getProdWorkspaceID(r)]),!e.roleId&&n&&(e.roleId=await Gn.getGroupRoleId(e,r,{groups:n})),e.roleId||(e.roleId=_t.BUILTIN_ROLE_IDS.PUBLIC),delete e.roles,e}o(kL,"processUser");async function K9t(e){return Ee.getGlobalDB().get(Xy(e))}o(K9t,"getRawGlobalUser");async function XWe(e){let t=C.getWorkspaceId(),r=await K9t(e);return kL(r,{appId:t})}o(XWe,"getGlobalUser");async function iY(e){let t=Ee.getGlobalDB(),r;return e?r=await t.getMultiple(e,{allowMissing:!0}):r=(await t.allDocs(F.getGlobalUserParams(null,{include_docs:!0}))).rows.map(n=>n.doc),r.filter(n=>n!=null).map(n=>(delete n.password,delete n.forceResetPassword,n))}o(iY,"getRawGlobalUsers");async function ML(e){let t=await iY(e),r=await Gn.fetch();return Promise.all(t.map(n=>kL(n,{groups:r})))}o(ML,"getGlobalUsers");async function ZWe(e){let t=await ML(e.map(r=>r._id));return e.map(r=>({...t.find(i=>i&&r._id?.includes(i._id)),...r}))}o(ZWe,"getGlobalUsersFromMetadata");var oY=class{static{o(this,"LinkDocumentImpl")}constructor(t,r,n,i,s,a){this._id=rWe(t,i,n,a,r,s),this.type="link",this.tableId=vf(t,i);let u={tableId:t,fieldName:r,rowId:n},c={tableId:i,fieldName:s,rowId:a};this.doc1=u.tableId>c.tableId?u:c,this.doc2=u.tableId>c.tableId?c:u}},Nv=oY;var xon="screen"+Et;async function UL(){let e=C.getWorkspaceDB(),t=await e.get("_design/database"),r={map:function(n){if(n.type==="link"){let i=n.doc1,s=n.doc2;emit([i.tableId,i.rowId],{id:s.rowId,thisId:i.rowId,fieldName:i.fieldName}),i.tableId!==s.tableId&&emit([s.tableId,s.rowId],{id:i.rowId,thisId:s.rowId,fieldName:s.fieldName})}}.toString()};t.views={...t.views,[Tc.LINK]:r},await e.put(t)}o(UL,"createLinkView");var FL={INCLUDE:!0,EXCLUDE:!1};async function ou(e){let{tableId:t,rowId:r,fieldName:n,includeDocs:i}=e,s=C.getWorkspaceDB(),a;r?a={key:[t,r]}:a={startkey:[t],endkey:[t,{}]},i&&(a.include_docs=!0);try{let u=(await s.query(Ov(Tc.LINK),a)).rows,c=new Set;return u=u.filter(l=>{if(t&&l.key[0]!==t||r&&l.key[1]!==r)return!1;let f=!c.has(l.id);return f&&c.add(l.id),f}),n&&(u=u.filter(l=>l.value.fieldName===n)),i?u.map(l=>l.doc):u.map(l=>l.value)}catch(u){if(u!=null&&u.name==="not_found")return await UL(),ou(arguments[0]);throw Ne.logAlert("Failed to get link documents",u),u}}o(ou,"getLinkDocuments");function e$e(e,t){let r=new Set,n=[];for(let i of e)r.has(i[t])||(r.add(i[t]),n.push(i));return n}o(e$e,"getUniqueByProp");function BL(e){return Object.values(e).filter(Af).map(t=>t.tableId)}o(BL,"getLinkedTableIDs");async function sY(e,t){let r=t.find(n=>n._id===e);return r||(r=await P.tables.getTable(e),r&&t.push(r),r)}o(sY,"getLinkedTable");function t$e(e,t){let r=e[t];if(r?.type==="link")return r.tableId;for(let n of Object.values(e))if(n.type==="link"&&n.fieldName===t)return n.tableId;return null}o(t$e,"getRelatedTableForField");var aY=class{static{o(this,"LinkController")}constructor({tableId:t,row:r,table:n,oldTable:i}){this._db=C.getWorkspaceDB(),this._tableId=t,this._row=r,this._table=n,this._oldTable=i}async table(){return this._table==null&&(this._table=this._table==null?await this._db.get(this._tableId):this._table),this._table}async doesTableHaveLinkedFields(t){t==null&&(t=await this.table());for(let r of Object.keys(t.schema)){let{type:n}=t.schema[r];if(n==="link")return!0}return!1}getRowLinkDocs(t){return ou({tableId:this._tableId,rowId:t,includeDocs:FL.INCLUDE})}async getTableLinkDocs(){return await ou({tableId:this._tableId,includeDocs:FL.INCLUDE})}validateTable(t){let r=[];for(let n of Object.values(t.schema)){if(n.type!=="link")continue;let i=n.tableId+n?.fieldName;if(r.indexOf(i)!==-1)throw new Error("Cannot re-use the linked column name for a linked table.");r.push(i)}}areLinkSchemasEqual(t,r){let n=["name","type","tableId","fieldName","autocolumn","relationshipType"];for(let i of n)if(t[i]!==r[i])return!1;return!0}handleRelationshipType(t,r){return!t.relationshipType||t.relationshipType==="many-to-many"?(r.relationshipType="many-to-many",t.relationshipType="many-to-many"):t.relationshipType==="many-to-one"?r.relationshipType="one-to-many":t.relationshipType==="one-to-many"&&(r.relationshipType="many-to-one"),{linkerField:t,linkedField:r}}async rowSaved(){let t=await this.table(),r=this._row,n=[],i=await this.getRowLinkDocs(r._id);for(let s of Object.keys(t.schema)){let a=r[s],u=t.schema[s];if(u.type==="link"&&a!=null){if(!Array.isArray(a))throw new Error("Relationship Error: Invalid value");let c=i.filter(h=>h.doc1.fieldName===s||h.doc2.fieldName===s),l=c.map(h=>h.doc1.rowId===r._id?h.doc2.rowId:h.doc1.rowId),d=(await this._db.get(u.tableId)).schema[u.fieldName];if(u.tableId===$t.USER_METADATA){let h=await this._db.allDocs(OL(null,{})),m=a.filter(g=>!h.rows.some(y=>y.id===g));await this._db.bulkDocs(m.map(g=>({_id:g})))}for(let h of a){if(d?.type==="link"&&d?.relationshipType==="one-to-many"){let m=(await ou({tableId:u.tableId,rowId:h})).filter(y=>y.id!==r._id&&y.fieldName===d.name);if((await this._db.getMultiple(m.map(y=>y.id),{allowMissing:!0,excludeDocs:!0})).length>0)throw new Error("1:N Relationship Error: Record already linked to another.")}if(h&&h!==""&&l.indexOf(h)===-1){try{await this._db.get(h)}catch{continue}n.push(new Nv(t._id,s,r._id,u.tableId,u.fieldName,h))}}let p=c.filter(h=>{let m;return h.doc1.tableId===t._id&&h.doc1.fieldName===s?m=h.doc2:h.doc2.tableId===t._id&&h.doc2.fieldName===s&&(m=h.doc1),m&&a.indexOf(m.rowId)===-1}).map(h=>({...h,_deleted:!0}));n.push(...p),delete r[s]}}return await this._db.bulkDocs(n),r}async rowDeleted(){let t=this._row,r=await this.getRowLinkDocs(t._id);return r.length===0?null:(await this._db.bulkRemove(r,{silenceErrors:!0}),t)}async removeFieldFromTable(t){let r=this._oldTable,n=r?.schema[t],s=(await this.getTableLinkDocs()).filter(a=>(a.doc1.tableId===r?._id?a.doc1.fieldName:a.doc2.fieldName)===t);await this._db.bulkRemove(s,{silenceErrors:!0});try{let a=await this._db.get(n.tableId);n.fieldName&&delete a.schema[n.fieldName],await this._db.put(a)}catch(a){if(a.statusCode!==404)throw a}}async tableSaved(){let t=await this.table();this.validateTable(t);let r=t.schema;for(let n of Object.keys(r)){let i=r[n];if(i.type==="link"&&i.fieldName){let s;try{s=await this._db.get(i.tableId)}catch{continue}let a=this.handleRelationshipType(i,{name:i.fieldName,type:"link",tableId:t._id,fieldName:n});r[n]=a.linkerField;let u=a.linkedField;i.autocolumn&&(u.autocolumn=i.autocolumn,u.subtype=i.subtype),i.aiGenerated&&(u.aiGenerated=i.aiGenerated);let c=s.schema[i.fieldName];if(c!=null&&!this.areLinkSchemasEqual(c,u))throw new Error("Cannot overwrite existing column.");s.schema[i.fieldName]=u;let l=await this._db.put(s);s._id===t._id&&(t._rev=l.rev)}}return t}async tableUpdated(){let t=this._oldTable,r=await this.table();for(let n of Object.keys(t?.schema||{}))(t?.schema[n]).type==="link"&&r.schema[n]==null&&await this.removeFieldFromTable(n);return this.tableSaved()}async tableDeleted(){let t=await this.table(),r=t.schema;for(let i of Object.keys(r)){let s=r[i];try{if(s.type==="link"&&s.fieldName){let a=await this._db.get(s.tableId);delete a.schema[s.fieldName],s.tableRev=(await this._db.put(a)).rev}}catch(a){Ne.logWarn(a?.message,a)}}let n=await this.getTableLinkDocs();return n.length===0?null:(await this._db.bulkRemove(n,{silenceErrors:!0}),t)}},r$e=aY;var n$e=["link","attachment","attachment_single","signature_single","bb_reference","bb_reference_single"];function z9t(e,t){for(let[r,n]of Object.entries(e))n.type==="link"&&(t=t.map(i=>(delete i[r],i)));return t}o(z9t,"clearRelationshipFields");async function Y9t(e){let r=[...new Set(e.map(i=>i.tableId))].map(i=>ou({tableId:i})),n=(0,i$e.default)(await Promise.all(r));return e$e(n.filter(i=>i!=null).map(i=>({...i,unique:i.id+i.thisId+i.fieldName})),"unique")}o(Y9t,"getLinksForRows");async function J9t(e){let t=C.getWorkspaceDB(),r=e.map(c=>c.id),n=[...new Set(r)],i=await t.getMultiple(n,{allowMissing:!0}),s=r.map(c=>i.find(l=>l&&l._id===c)).filter(c=>c!=null),[a,u]=(0,o$e.default)(s,c=>c._id.startsWith(RL));return a=await ZWe(a),[...u,...a]}o(J9t,"getFullLinkedDocs");async function fa(e){let{eventType:t,row:r,tableId:n,table:i,oldTable:s}=e,a=r??i;n==null&&i!=null&&(e.tableId=i._id);let u=new r$e(e);try{if(!await u.doesTableHaveLinkedFields(i)&&(s==null||!await u.doesTableHaveLinkedFields(s)))return a}catch{return a}switch(t){case"row:save":case"row:update":return await u.rowSaved();case"row:delete":return await u.rowDeleted();case"table:save":return await u.tableSaved();case"table:updated":return await u.tableUpdated();case"table:delete":return await u.tableDeleted();default:throw"Type of event is not known, linked row handler requires update."}}o(fa,"updateLinks");async function s$e(e,t,r){let n=BL(e);if(n.length===0)return t;let i=await Promise.all([Y9t(t),P.tables.getTables(n)]),s=i[0].filter(l=>t.some(f=>f._id===l.thisId)),a=s;r?.fromRow&&(a=s.filter(l=>l.id!==r?.fromRow?._id));let u=i[1];t=z9t(e,t);let c=[];a.length>0&&(c=await J9t(a));for(let l of t)for(let f of s.filter(d=>d.thisId===l._id)){l[f.fieldName]==null&&(l[f.fieldName]=[]);let d;if(r?.fromRow&&r?.fromRow?._id===f.id?d=r.fromRow:d=c.find(p=>p._id===f.id),d){let p=d.tableId||t$e(e,f.fieldName),h=u.find(m=>m._id===p);if(h){let m=await su(h,d);l[f.fieldName].push(m)}}}return t}o(s$e,"attachFullLinkedDocs");function X9t(e,t){let r=t?.primaryDisplay,n=!0;if(r){let i=t?.schema[r];n=n$e.includes(i.type)}if(n||!r){let i=Object.keys(t?.schema||{}).find(s=>t?.schema[s].type&&!n$e.includes(t?.schema[s].type));return i?e[i]:void 0}else return e[r]}o(X9t,"getPrimaryDisplayValue");async function qL(e,t){let r={};if(P.views.isView(e)){if(fe.views.isCalculationView(e))return t;r=e.schema||{}}let n;P.views.isView(e)?n=await P.views.getTable(e.id):n=e;let i=[n],s=Array.isArray(t),a=s?t:[t];for(let u of a){let c=await sY(u.tableId,i);for(let[l,f]of Object.entries(c.schema)){if(f.type!=="link"||!Array.isArray(u[l]))continue;let d=await sY(f.tableId,i);r[l]?.columns&&(u[l]=await uY(d,u[l])),u[l]=u[l].map(p=>{let h={_id:p._id};if(h.primaryDisplay=X9t(p,d),r[l]?.columns){let m=Object.entries(r[l].columns||{}).filter(([g,y])=>{let b=d.schema[g];return!b||["link","formula","ai"].includes(b.type)?!1:b.visible!==!1&&y.visible!==!1}).map(([g])=>g);for(let g of m)p[g]!=null&&(h[g]=p[g])}return h})}}return s?a:a[0]}o(qL,"squashLinks");var eb=class extends Error{static{o(this,"InvalidBBRefError")}constructor(t,r){super(`Id "${t}" is not valid for the subtype "${r}"`)}};var a$e="ro"+ue;async function u$e(e,t){if(e&&Array.isArray(e)){if(e.length>1)throw new eb(JSON.stringify(e),"user");e=e[0]}let r=typeof e=="string"?e:e?._id;if(!r)return null;switch(t){case"user":{r.startsWith(a$e)&&(r=F.getGlobalIDFromUserMetadataID(r));try{return await Ue.user.getUser({userId:r}),r}catch(n){throw n.statusCode===404?new eb(r,"user"):n}}default:throw We.unreachable(t)}}o(u$e,"processInputBBReference");async function c$e(e,t){if(!e||!e[0])return null;let r;switch(typeof e=="string"?r=e.split(",").map(n=>n.trim()).filter(n=>!!n):r=e.map(n=>typeof n=="string"?n:n._id),r=r.map(n=>n?.startsWith(a$e)?F.getGlobalIDFromUserMetadataID(n):n),t){case void 0:throw"Subtype must be defined";case"user":case"users":{let{notFoundIds:n}=await Ue.user.getUsers(r);if(n?.length)throw new eb(n[0],"user");return r?.length?r:null}default:throw We.unreachable(t)}}o(c$e,"processInputBBReferences");async function l$e(e,t){if(e)switch(t){case"user":{let r;try{r=await Ue.user.getUser({userId:e})}catch(n){if(n.statusCode!==404)throw n}return r?{_id:r._id,primaryDisplay:r.email,email:r.email,firstName:r.firstName,lastName:r.lastName}:void 0}default:throw We.unreachable(t)}}o(l$e,"processOutputBBReference");async function f$e(e,t){if(!e||Array.isArray(e)&&e.length===0)return;let r=typeof e=="string"?e.split(",").filter(n=>!!n):e;switch(t){case"user":case"users":{let{users:n}=await Ue.user.getUsers(r);return n.length?n.map(i=>({_id:i._id,primaryDisplay:i.email,email:i.email,firstName:i.firstName,lastName:i.lastName})):void 0}default:throw We.unreachable(t)}}o(f$e,"processOutputBBReferences");var Z9t=`autocolumn_state${ue}`,d$e=5,eXt=o(e=>e?.status===409||e?.statusCode===409,"isConflictError");function tXt(e){return`${Z9t}${e}`}o(tXt,"buildDocId");function rXt(e,t){let r=e.schema[t];return r?.lastId!=null&&!Number.isNaN(r.lastId)?r.lastId:0}o(rXt,"getSchemaSeed");async function nXt(e,t){let r={};if(!t.length)return r;let i=await C.getWorkspaceDB().allDocs(tn(e._id,null,{include_docs:!0}));for(let s of t)r[s]=0;for(let s of i.rows){let a=s.doc;if(a)for(let u of t){let c=a[u];if(typeof c!="number")continue;let l=r[u]??0;c>l&&(r[u]=c)}}return r}o(nXt,"computeRowMaxes");async function iXt(e,t,r){let n=r.filter(s=>e.columns[s]==null);if(!n.length)return;let i=await nXt(t,n);for(let s of n){let a=rXt(t,s),u=i[s]??0;e.columns[s]=Math.max(a,u)}}o(iXt,"initialiseMissingColumns");async function p$e(e,t){if(!t.length)return{};if(!e._id)throw new Error("Unable to allocate auto column values for table without an _id.");let r=C.getWorkspaceDB(),n=tXt(e._id),i=[...new Set(t)],s=0;for(;s<d$e;){let a=await r.tryGet(n)||{_id:n,tableId:e._id,columns:{}};await iXt(a,e,i);let u={...a,columns:{...a.columns}},c={};for(let l of i){let d=(u.columns[l]??0)+1;u.columns[l]=d,c[l]=d}try{let l=await r.put(u);return u._rev=l.rev,c}catch(l){if(eXt(l)){s++;continue}throw l}}throw new Error(`Unable to allocate auto column values for table ${e._id} after ${d$e} attempts`)}o(p$e,"allocateAutoColumnValues");var cY=o(e=>{if(typeof e=="string"){if(e==="")return[];let t;try{return t=JSON.parse(e.replace(/'/g,'"')),t}catch{return e}}return e},"parseArrayString"),tb={link:{"":[],[null]:[],[void 0]:void 0,parse:e=>Array.isArray(e)&&typeof e[0]=="object"?e.map(t=>{let r=t;return r&&r._id?r._id:t}):typeof e=="string"?[e]:e},options:{"":null,[null]:null,[void 0]:void 0},array:{[null]:[],[void 0]:void 0,parse:cY},bb_reference:{[null]:[],[void 0]:void 0,parse:cY},string:{"":null,[null]:null,[void 0]:void 0},barcodeqr:{"":null,[null]:null,[void 0]:void 0},formula:{"":null,[null]:null,[void 0]:void 0},longform:{"":null,[null]:null,[void 0]:void 0},number:{"":null,[null]:null,[void 0]:void 0,parse:e=>{let t=parseFloat(e);if(isNaN(t))throw new Error(`Invalid number value "${e}"`);return t}},bigint:{"":null,[null]:null,[void 0]:void 0},datetime:{"":null,[null]:null,[void 0]:void 0,parse:e=>{if(e instanceof Date)return e.toISOString();if(typeof e=="string"&&He.utils.isValidTime(e))return e;{let t=new Date(`${e}Z`);if(isNaN(t.getTime())&&(t=new Date(e),isNaN(t.getTime())))throw new Error(`Invalid date value: "${e}"`);return t.toISOString()}}},attachment:{[null]:[],[void 0]:void 0,parse:cY},attachment_single:{"":null},boolean:{"":null,[null]:null,[void 0]:void 0,true:!0,false:!1},auto:{parse:()=>{}},json:{parse:e=>{try{if(typeof e!="string")throw new Error("input was not a string");return e===""?void 0:JSON.parse(e)}catch{return e}}},ai:{},bb_reference_single:{},signature_single:{},internal:{}};var h$e=require("ai");var kv=W(require("dd-trace"));function Lv(e){return e.map(t=>{if(typeof t.content!="string")throw new Error("AI message content must be a string");if(t.role==="tool")throw new Error("AI tool messages are not supported");return{role:t.role,content:t.content}})}o(Lv,"toModelMessages");function lY(e,t){return t.map(r=>e[r]).join(" ")}o(lY,"extractTextFromColumns");function oXt(e,t){let{operation:r,column:n,columns:i,language:s,categories:a,prompt:u}=e;switch(r){case"SUMMARISE_TEXT":return Wt.summarizeText(lY(t,i));case"CLEAN_DATA":return Wt.cleanData(t[n]);case"TRANSLATE":return Wt.translate(t[n],s);case"CATEGORISE_TEXT":if(!a)throw new Error("No categories provided for categorise text operation. Please provide categories.");return Wt.classifyText(lY(t,i),a.split(","));case"SENTIMENT_ANALYSIS":return Wt.sentimentAnalysis(t[n]);case"PROMPT":return new Wt.LLMRequest().addUserMessage(u);case"SEARCH_WEB":return Wt.searchWeb(lY(t,i));default:throw new Error(`Unsupported AI operation: ${r}`)}}o(oXt,"promptForAIOperation");async function sXt(e,t,r){let n=oXt(t,r);return(await(0,h$e.generateText)({model:e.chat,messages:Lv(n.messages),providerOptions:e.providerOptions?.(!1)})).text}o(sXt,"runAIOperation");function Mv(e){return!e.autocolumn||!e.name||e.subtype||(e.name.endsWith("Created By")?e.subtype="createdBy":e.name.endsWith("Updated By")?e.subtype="updatedBy":e.name.endsWith("Created At")?e.subtype="createdAt":e.name.endsWith("Updated At")?e.subtype="updatedAt":e.name.endsWith("Auto ID")&&(e.subtype="autoID")),e}o(Mv,"fixAutoColumnSubType");async function su(e,t,{dynamic:r,contextRows:n}={dynamic:!0}){return kv.default.trace("processFormulas",{},async i=>{let s=Array.isArray(t)?t.length:1;i?.addTags({table_id:e._id,dynamic:r,numRows:s});let a=Array.isArray(t)?t:[t];if(a){await C.ensureSnippetContext();for(let[u,c]of Object.entries(e.schema)){if(c.type!=="formula")continue;let l=c.responseType,f=c.formulaType==="static",d=c.formula;if(f&&a.forEach(p=>{p[u]&&l&&(p[u]=mh(p[u],l))}),!(c.formula==null||r&&f||!r&&!f))for(let p=0;p<a.length;p++){let h=a[p],m=n?n[p]:h;a[p]={...h,[u]:kv.default.trace("processStringSync",{},g=>{g?.addTags({table_id:e._id,column:u,static:f});let y=Tr(d,m);try{return l?mh(y,l):y}catch(b){g?.addTags({coercionError:b.message});return}})}}}}return Array.isArray(t)?a:a[0]})}o(su,"processFormulas");async function m$e(e,t,{contextRows:r}){return Object.values(e.schema).filter(G5).length?kv.default.trace("processAIColumns",{},async i=>{let s=Array.isArray(t)?t.length:1;i?.addTags({table_id:e._id,numRows:s});let a=Array.isArray(t)?t:[t],u=await P.ai.llm.getDefaultLLM();if(a&&u){await C.ensureSnippetContext();let c=Object.values(e.schema).filter(G5),l=a.flatMap((d,p)=>{let h=r?r[p]:d;return c.map(m=>{let g=m.name,y=$X[m.operation];for(let b in m)y[b]==="prompt"&&(m[b]=Tr(m[b],h));return kv.default.trace("processAIColumn",{},async b=>{b?.addTags({table_id:e._id,column:g});let w=await sXt(u,m,d);return{rowIndex:p,columnName:g,value:w}})})});(await Promise.all(l)).forEach(d=>{a[d.rowIndex][d.columnName]=d.value})}return Array.isArray(t)?a:a[0]}):t}o(m$e,"processAIColumns");function fY(e,t){let r=Array.isArray(t)?t:[t],n=[];for(let[i,s]of Object.entries(e.schema))s.type==="datetime"&&(s.dateOnly||!s.timeOnly&&!s.ignoreTimezones&&n.push(i));for(let i of r)for(let s of n)if(i[s]&&typeof i[s]=="string"&&!i[s].endsWith("Z")){let a=new Date(i[s]+"Z");if(isNaN(a.getTime())&&(a=new Date(i[s])),isNaN(a.getTime()))throw new Error(`Invalid date format for column ${s}: ${i[s]}`);i[s]=a.toISOString()}return Array.isArray(t)?r:r[0]}o(fY,"processDates");var Rc=class e{static{o(this,"AttachmentCleanup")}static async coreCleanup(t,r={}){let n=await Promise.resolve(t());if(n.length===0)return;let i=C.getWorkspaceId();if(!F.isProdWorkspaceID(i)){let s=F.getProdWorkspaceID(i);if(await F.dbExists(s)&&(!r.rowId||(n=await e.excludeFilesUsedInProd(r.rowId,n,s,r),n.length===0)))return}await ge.deleteFiles(hr.APPS,n)}static async excludeFilesUsedInProd(t,r,n,i){let{tableId:s,schema:a}=i;if(!s||!a)return r;let c=await F.getDB(n).tryGet(t),l=new Set;if(!c)return r;let f=c;for(let[d,p]of Object.entries(a))e.extractAttachmentKeys(p.type,f[d]).forEach(m=>l.add(m));return r.filter(d=>!l.has(d))}static extractAttachmentKeys(t,r){return t!=="attachment"&&t!=="attachment_single"&&t!=="signature_single"?[]:r?t==="attachment"&&Array.isArray(r)?r.filter(n=>n.key).map(n=>n.key):"key"in r&&r.key?[r.key]:[]:[]}static async tableChange(t,r,n){let i=n.oldTable?.schema||t.schema;return e.coreCleanup(()=>Object.entries(i).reduce((s,[a,u])=>{if(u.type!=="attachment"&&u.type!=="attachment_single"&&u.type!=="signature_single")return s;let c=n.oldTable&&!t.schema[a],l=n.rename?.old===a;return(c&&!l||n.deleting)&&r.forEach(f=>{let d=e.extractAttachmentKeys(u.type,f[a]);s.push(...d)}),s},[]),{tableId:t._id,schema:i})}static async tableDelete(t,r){return e.tableChange(t,r,{deleting:!0})}static async tableUpdate(t,r,n){return e.tableChange(t,r,n)}static async rowDelete(t,r){for(let n of r)await e.coreCleanup(()=>Object.entries(t.schema).reduce((i,[s,a])=>{if(a.type!=="attachment"&&a.type!=="attachment_single"&&a.type!=="signature_single")return i;let u=e.extractAttachmentKeys(a.type,n[s]);return i.concat(u)},[]),{tableId:t._id,schema:t.schema,rowId:n._id})}static async rowUpdate(t,r){await e.coreCleanup(()=>Object.entries(t.schema).reduce((n,[i,s])=>{if(s.type!=="attachment"&&s.type!=="attachment_single"&&s.type!=="signature_single")return n;let a=e.extractAttachmentKeys(s.type,r.oldRow[i]),u=e.extractAttachmentKeys(s.type,r.row[i]),c=a.filter(l=>u.indexOf(l)===-1);return n.concat(c)},[]),{tableId:t._id,schema:t.schema,rowId:r.row._id})}};async function aXt(e,t,r,n){let i=!e,s=t._id===$t.USER_METADATA,a=new Date().toISOString(),u=!r._rev,c=!s&&!n?.reprocessing&&!n?.noAutoRelationships&&!i,l={};if(u){let f=Object.entries(t.schema).filter(([d,p])=>p.autocolumn?Mv(p).subtype==="autoID":!1).map(([d])=>d);f.length&&(l=await p$e(t,f))}for(let[f,d]of Object.entries(t.schema))if(d.autocolumn)switch(d.subtype||(d=Mv(d)),d.subtype){case"createdBy":u&&c&&e&&(r[f]=[e]);break;case"createdAt":u&&(r[f]=a);break;case"updatedBy":c&&e&&(r[f]=[e]);break;case"updatedAt":r[f]=a;break;case"autoID":if(u){let p=l[f];p==null?(d.lastID=d.lastID||0,r[f]=d.lastID+1,d.lastID++):(r[f]=p,d.lastID=p),t.schema[f]=d}break}}o(aXt,"processAutoColumn");async function uXt(e,t){let r={},n=C.getIdentity();if(n?._id&&n.type==="user"){let i=await Ue.user.getUser({userId:n._id});delete i.password,r["Current User"]=i,r.user=i}for(let[i,s]of Object.entries(e.schema)){let a=t[i]==null||t[i]===""||Array.isArray(t[i])&&t[i].length===0;if("default"in s&&s.default!=null&&a){let u;Array.isArray(s.default)?u=s.default.map(c=>Tr(c,r)):typeof s.default=="string"?u=Tr(s.default,r):u=s.default;try{t[i]=mh(u,s.type)}catch(c){throw new V(`Invalid default value for field '${i}' - ${c.message}`,400)}}}}o(uXt,"processDefaultValues");function mh(e,t){return tb[t]?tb[t].hasOwnProperty(e)?tb[t][e]:tb[t].parse?tb[t].parse(e):e:e}o(mh,"coerce");async function da(e,t,r,n){let i=(0,g$e.cloneDeep)(r),s=await gh(t);for(let[a,u]of Object.entries(i)){let c=s.schema[a],l=Pt(s._id)?GX(a):Uf(a);if(!c&&!l&&delete i[a],!!c)if(c.type==="formula"?delete i[a]:i[a]=mh(u,c.type),c.type==="attachment"){let f=i[a];f?.length&&f.forEach(d=>{delete d.url})}else c.type==="attachment_single"||c.type==="signature_single"?i[a]?.url&&delete i[a].url:u&&(c.type==="bb_reference_single"||fe.schema.isDeprecatedSingleUserColumn(c))?i[a]=await u$e(u,c.subtype):u&&c.type==="bb_reference"&&(i[a]=await c$e(u,c.subtype))}return(!i._id||!i._rev)&&(i._id=r._id,i._rev=r._rev),await aXt(e,s,i,n),await uXt(s,i),i}o(da,"inputProcessing");async function zt(e,t,r={squash:!0,preserveLinks:!1,skipBBReferences:!1}){let n,i=!0;t instanceof Array?n=t:(n=[t],i=!1);let s;P.views.isView(e)?s=await P.views.getTable(e.id):s=e;let a=r.preserveLinks?n:await s$e(s.schema,n,{fromRow:r?.fromRow});return!r.squash&&Je.hasCircularStructure(t)&&(r.squash=!0),a=await uY(e,a,r),r.squash&&(a=await qL(e,a)),i?a:a[0]}o(zt,"outputProcessing");async function uY(e,t,r={preserveLinks:!1,skipBBReferences:!1}){let n;P.views.isView(e)?n=await P.views.getTable(e.id):n=e;for(let[s,a]of Object.entries(n.schema))if(a.type==="attachment"||a.type==="attachment_single"||a.type==="signature_single")for(let u of t){if(u[s]==null)continue;let c=o(async l=>(l.key&&(l.url=await ge.getAppFileUrl(l.key)),l),"process");typeof u[s]=="string"&&u[s].length&&(u[s]=JSON.parse(u[s])),Array.isArray(u[s])?await Promise.all(u[s].map(l=>c(l))):await c(u[s])}else if(!r.skipBBReferences&&a.type=="bb_reference")for(let u of t)u[s]=await f$e(u[s],a.subtype);else if(!r.skipBBReferences&&a.type=="bb_reference_single")for(let u of t)u[s]=await l$e(u[s],a.subtype);else if(a.type==="datetime"&&a.timeOnly){for(let u of t)if(u[s]instanceof Date){let c=u[s].getUTCHours().toString().padStart(2,"0"),l=u[s].getUTCMinutes().toString().padStart(2,"0"),f=u[s].getUTCSeconds().toString().padStart(2,"0");u[s]=`${c}:${l}:${f}`}}else if(a.type==="datetime"&&a.dateOnly)for(let u of t){if(typeof u[s]=="string"){let c=u[s];u[s]=new Date(c+"Z"),isNaN(u[s].getTime())&&(u[s]=new Date(c))}u[s]instanceof Date&&(u[s]=u[s].toISOString().slice(0,10))}else if(a.type==="datetime"&&a.ignoreTimezones)for(let u of t){if(typeof u[s]=="string"){let c=u[s];u[s]=new Date(c+"Z"),isNaN(u[s].getTime())&&(u[s]=new Date(c))}u[s]instanceof Date&&(u[s]=u[s].toISOString().replace("Z",""))}else if(a.type==="datetime")for(let u of t)typeof u[s]=="string"&&(u[s]=new Date(u[s])),u[s]instanceof Date&&(u[s]=u[s].toISOString());else if(a.type==="link")for(let u of t)Array.isArray(u[s])&&u[s].length===0&&delete u[s];t=await su(n,t,{dynamic:!0});let i=Pt(n._id);for(let s of t)for(let a of Object.keys(s))if(s[a]===null)delete s[a];else if(s[a]&&n.schema[a]?.type==="link")for(let u of s[a]||[])for(let c of Object.keys(u))u[c]===null&&delete u[c];if(P.views.isView(e)){for(let[s,a]of Object.entries(fe.views.calculationFields(e)))if(!("field"in a&&n.schema[a.field].type==="bigint"))for(let u of t)typeof u[s]=="string"&&(u[s]=parseFloat(u[s]))}if(!WL(n._id)){let s=i?no:Hr,u=[...Object.keys(n.schema).filter(c=>n.schema[c].visible!==!1),...s].map(c=>c.toLowerCase());if(P.views.isView(e)){let c=fe.views.calculationFields(e);for(let l of Object.keys(c))u.push(l.toLowerCase())}for(let c of t)for(let l of Object.keys(c))u.includes(l.toLowerCase())||delete c[l]}return t}o(uY,"coreOutputProcessing");var dY=W(require("validate.js"));dY.default.extend(dY.default.validators.datetime,{parse:function(e){return new Date(e).getTime()},format:function(e){return new Date(e).toISOString()}});async function cXt(e,t,r,n){for(let i of n){let s=t[i.tableName];if(!(!s||!r[i.column]))for(let a of Object.keys(r[i.column])){let u=r[i.column][a];for(let c of Object.values(s.schema))c.type==="link"&&c.tableId===e._id&&(u[c.name]=[r]);u=fY(e,u),u=await su(s,u),r[i.column][a]=u}}return r}o(cXt,"processRelationshipFields");function zn(e){if(e.params?.sourceId){let{sourceId:t}=e.params;return sn(t)?{tableId:Kr(t),viewId:He.utils.encodeViewId(t)}:{tableId:He.utils.encodeTableId(e.params.sourceId)}}if(e.params?.tableId)return{tableId:He.utils.encodeTableId(e.params.tableId)};if(e.request.body?.tableId)return{tableId:He.utils.encodeTableId(e.request.body.tableId)};throw new Error("Unable to find table ID in request")}o(zn,"getSourceId");async function Oc(e){let{tableId:t,viewId:r}=zn(e);return r?P.views.get(r):P.tables.getTable(t)}o(Oc,"getSource");async function gh(e){return P.views.isView(e)?await P.views.getTable(e.id):e}o(gh,"getTableFromSource");function lXt(e,t){for(let r of Object.values(t.schema))r.type==="boolean"&&(e[r.name]===1?e[r.name]=!0:e[r.name]===0&&(e[r.name]=!1));return e}o(lXt,"fixBooleanFields");function y$e(e){return P.views.isView(e)?Object.keys(fe.views.basicFields(e,{visible:!0})):Object.entries(e.schema).filter(([n,i])=>i.visible!==!1).map(([n])=>n)}o(y$e,"getSourceFields");async function $L(e,t,r,n,i){if(!YWe(e))return[];let s,a=!1;P.views.isView(t)?(s=await P.views.getTable(t.id),a=fe.views.isCalculationView(t)):s=t;let u=[];for(let c of e)i?.sqs?c._id=HWe(c,s):c._id==null&&!a&&(c._id=Ac(c,s)),c=await rY({row:c,source:t,tables:Object.values(r),isLinked:!1,sqs:i?.sqs}),c=lXt(c,s),c=await cXt(s,r,c,n),u.push(c);return fY(s,u)}o($L,"sqlOutputProcessing");function WL(e){return e===$t.USER_METADATA}o(WL,"isUserMetadataTable");async function fXt(e,t={},r=!0){let n={};for(let a in e)n[a]=e[a];let i=await yh(n,t,r),s=[];for(let[a,u]of Object.entries(i))s[parseInt(a)]=u;return s}o(fXt,"enrichArrayContext");async function yh(e,t={},r=!0){let n={};if(!e||!t)return n;let i={...t};if(Array.isArray(e))return fXt(e,t,r);for(let s of Object.keys(e)){if(e[s]==null){n[s]=null;continue}typeof e[s]=="object"?n[s]=await yh(e[s],i,r):typeof e[s]=="string"?n[s]=Tr(e[s],i,{noEscaping:!0,noHelpers:!r,escapeNewlines:!0}):n[s]=e[s]}return n}o(yh,"enrichSearchContext");var dXt=W(require("dd-trace"));var{PermissionType:Oun,PermissionLevel:Iun}=Ur;var b$e,rb,nb;var _$e={"bb-component-SuperContainer":"https://github.com/poirazis/bb-component-SuperContainer","bb-component-SuperFieldGroup":"https://github.com/poirazis/bb-component-SuperFieldGroup","bb-component-SuperOdometer":"https://github.com/poirazis/bb-component-SuperOdometer","bb-component-SuperProgressBar":"https://github.com/poirazis/bb-component-SuperProgressBar","bb-component-SuperSideNavigation":"https://github.com/poirazis/bb-component-SuperSideNavigation","bb-component-SuperSliderField":"https://github.com/poirazis/bb-component-SuperSliderField","bb-component-SuperTable":"https://github.com/poirazis/bb-component-SuperTable","bb-component-SuperTableCell":"https://github.com/poirazis/bb-component-SuperTableCell","bb-component-SuperTableColumn":"https://github.com/poirazis/bb-component-SuperTableColumn","bb-component-SuperTabs":"https://github.com/poirazis/bb-component-SuperTabs","bb-plugin-TabContainer":"https://github.com/poirazis/bb-plugin-TabContainer","bb-qr-generator":"https://github.com/ConorWebb96/bb-qr-generator","Budibase-File-Upload":"https://github.com/chungchunwang/Budibase-File-Upload","Budibase-QR-Code-Scanner":"https://github.com/chungchunwang/Budibase-QR-Code-Scanner","budibase-calendar-plugin":"https://github.com/marblekirby/budibase-calendar-plugin","budibase-chartjs":"https://github.com/that-one-tom/budibase-chartjs","budibase-component-accordion":"https://github.com/andz-bb/budibase-component-accordion","budibase-component-camera":"https://github.com/andz-bb/budibase-component-camera","budibase-component-dropdown-list":"https://github.com/sj-distributor/budibase-component-dropdown-list","budibase-component-geolocation":"https://github.com/andz-bb/budibase-component-geolocation","budibase-component-star-rating":"https://github.com/andz-bb/budibase-component-star-rating","budibase-component-tooltip":"https://github.com/andz-bb/budibase-component-tooltip","budibase-csv-import":"https://github.com/mjashanks/budibase-csv-import","budibase-csv-plugin":"https://github.com/max-nopprakorn/budibase-csv-plugin","budibase-fullcalendar":"https://github.com/pixelinfinito/budibase-fullcalendar","budibase-pdf-viewer":"https://github.com/YuanZhang98/budibase-pdf-viewer","budibase-recaptura-v2":"https://github.com/keith-ellis-sillek/budibase-recaptura-v2","budibase-toggle":"https://github.com/YuanZhang98/budibase-toggle",customizable_leaflet_map_bb_plugin:"https://github.com/JayP718/customizable_leaflet_map_bb_plugin","test-component-update":"https://github.com/PClmnt/test-bb-component-update"};async function mXt(e){let n=(await Ee.getGlobalDB().allDocs(F.getPluginParams(null,{include_docs:!0}))).rows.map(i=>i.doc);return n=await ge.enrichPluginURLs(n),e?n.filter(i=>i.schema?.type===e):n}o(mXt,"fetch");function w$e(e){try{let t=e.trim();return t?(t.startsWith("http")||(t=`https://${t}`),t.endsWith("/")&&(t=t.slice(0,-1)),t):void 0}catch(t){console.log("Failed to normalise GitHub URL:",e,t instanceof Error?t.message:String(t));return}}o(w$e,"normaliseGithubUrl");function gXt(e){if(!e)return{};try{let t=w$e(e);if(!t||!t.includes("https://github.com/"))return{};let r=t.replace("https://github.com/","").split("/");if(r.length>=2){let n=r[0],i=r[1];return{repo:`${n}/${i}`,url:`https://github.com/${n}/${i}`}}}catch(t){console.log("Failed to parse GitHub repo:",e,t instanceof Error?t.message:String(t))}return{}}o(gXt,"parseGithubRepo");var yXt=_$e;async function bXt(){let e=Ee.getTenantId();await Ee.doInTenant(e,async()=>{let t=Ee.getGlobalDB(),n=(await t.allDocs(F.getPluginParams(null,{include_docs:!0}))).rows.map(s=>s.doc),i=0;for(let s of n)try{if(!s||s.source!=="Github"||s.origin?.url&&s.origin?.repo)continue;let a=yXt[s.name];if(a){let{repo:u,url:c}=P.plugins.parseGithubRepo(a);if(!u||!c)continue;let l={...s,origin:{source:"github",repo:u,url:c}},f=await t.put(l);s._rev=f.rev,i++}}catch(a){console.log("Plugin origin backfill failed for",s?.name,a instanceof Error?a.message:String(a))}i>0&&console.log(`Backfilled GitHub origin for ${i} plugin(s).`)})}o(bXt,"backfillPluginOrigins");async function _Xt(e,t){let{metadata:r,directory:n}=await PWe(e);if(MP.validate(r.schema),!ne.SELF_HOSTED&&r.schema?.type!=="component")throw new Error("Only component plugins are supported outside of self-host");if(r.schema?.metadata?.svelteMajor!==5&&r.schema?.type==="component")throw new Error("Only Svelte 5 plugins are supported on this branch");let i=await dh.plugins.storePlugin(r,n,t);return b$e?.emit("plugin-update",{name:i.name,hash:i.hash}),i}o(_Xt,"processUploaded");var wXt=o(async e=>{if(!e?.length)return[];let t=e.map(r=>r?._id).filter(r=>typeof r=="string"&&r.length>0);if(!t.length)return e;try{let n=await Ee.getGlobalDB().allDocs({include_docs:!0,keys:t}),i=new Map;for(let s of n?.rows||[]){let a=s?.doc?.schema?.metadata?.svelteMajor;typeof s?.id=="string"&&typeof a=="number"&&i.set(s.id,a)}return e.map(s=>{let a=i.get(s._id);if(typeof a!="number")return s;let u=s.schema||{},c=u?.metadata||{};return{...s,schema:{...u,metadata:{...c,svelteMajor:a}}}})}catch{return e}},"enrichUsedPluginSvelteMajors");var gY={};$(gY,{combineMetadataAndUser:()=>S$e,fetchMetadata:()=>EXt,getUserContextBindings:()=>TXt,rawUserMetadata:()=>mY,syncGlobalUsers:()=>SXt});var E$e=W(require("lodash/isEqual"));function S$e(e,t){let r=Jy(e._id),n=Array.isArray(t)?t.find(s=>s._id===r):t;if(e.roleId==null||e.roleId===_t.BUILTIN_ROLE_IDS.PUBLIC)return n?._id?{...n,_deleted:!0}:null;delete e._rev;let i={...e,_id:r,tableId:$t.USER_METADATA};return n&&(i._rev=n._rev,i.createdAt=n.createdAt,i.updatedAt=n.updatedAt),delete i.password,delete i.forceResetPassword,delete i.roles,n==null||!(0,E$e.default)(i,n)?{...n,...i,createdAt:n?.createdAt??new Date().toISOString(),updatedAt:new Date().toISOString()}:null}o(S$e,"combineMetadataAndUser");async function mY(e){return e||(e=C.getWorkspaceDB()),(await e.allDocs(OL(null,{include_docs:!0}))).rows.map(t=>t.doc)}o(mY,"rawUserMetadata");async function EXt(){let e=await ML(),t=await mY(),r=[];for(let n of e){let i=t.find(s=>s._id.includes(n._id));r.push({...n,...i,tableId:$t.USER_METADATA,_id:Jy(n._id)})}return r}o(EXt,"fetchMetadata");async function SXt(){let e=[C.getDevWorkspaceDB(),C.getProdWorkspaceDB()];for(let t of e){if(!await t.exists())continue;let[r,n]=await Promise.all([ML(),mY(t)]),i=[];for(let a of r){let u=S$e(a,n);u&&i.push(u)}let s=[];for(let a of n){if(!a._id)continue;let u=a.email&&s.indexOf(a.email)!==-1,c=Xy(a._id);(!r.find(l=>l._id===c)||u)&&i.push({...a,_deleted:!0}),a.email&&s.push(a.email)}await t.bulkDocs(i)}}o(SXt,"syncGlobalUsers");function TXt(e){if(!e)return{};let t={_id:e._id,_rev:e._rev,firstName:e.firstName,lastName:e.lastName,email:e.email,status:e.status,roleId:e.roleId,globalId:e.globalId,userId:e.userId};return Ph(e)&&e.oauth2&&(t.oauth2={accessToken:e.oauth2.accessToken,refreshToken:e.oauth2.refreshToken},t.provider=e.provider,t.providerType=e.providerType),t}o(TXt,"getUserContextBindings");var bY={};$(bY,{enrichApps:()=>yY});var yY=o(async e=>{let t=e.filter(n=>n.status==="development").map(n=>n.appId),r=await nb?.getRoomSessions(t);if(r?.length){let n={};return r.forEach(i=>{let s=i.room;s&&(n[s]||(n[s]=[]),n[s].push(i))}),e.map(i=>{let s={...i},a=n[i.appId];return a?.length?s.sessions=a:delete s.sessions,s})}else return e},"enrichApps");var _Y={};$(_Y,{get:()=>vXt});function vXt(e){return C.getWorkspaceDB().get(e)}o(vXt,"get");var T$e={...gY,..._Y,sessions:bY};var m9={};$(m9,{agents:()=>uu,chatApps:()=>Gk,configs:()=>ib,deployments:()=>d9,helpers:()=>p9,llm:()=>BY,rag:()=>Ak,vectorDb:()=>h9});var uu={};$(uu,{buildPromptAndTools:()=>jnr,create:()=>dGe,createAgentFile:()=>GY,duplicate:()=>SZt,fetch:()=>lGe,findIncompleteToolCalls:()=>Z7,formatIncompleteToolCallError:()=>t9,getAgentFileOrThrow:()=>aGe,getAvailableTools:()=>X7,getAvailableToolsMetadata:()=>qnr,getOrThrow:()=>fGe,listAgentFiles:()=>HY,remove:()=>vZt,removeAgentFile:()=>QY,toToolMetadata:()=>o3e,update:()=>TZt,updateAgentFile:()=>VY,updatePendingToolCalls:()=>e9,uploadAgentFile:()=>Ynr});var tGe=require("ai"),rGe=W(require("crypto")),nGe=require("pdf-parse"),iGe=require("yaml");var EY=W(require("crypto")),O$e=require("pg");var v$e=o(e=>`[${e.map(t=>Number(t)||0).join(",")}]`,"vectorLiteral"),A$e="bb_agent_chunks_",R$e=10,RXt=o(e=>{let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,""),r=C.getOrThrowWorkspaceId(),n=F.getProdWorkspaceID(r),i=EY.createHash("sha256").update(`${Ee.getTenantId()}:${n}:${e}`).digest("hex").slice(0,R$e),s=63-A$e.length-1-R$e,a=(t||"agent").slice(0,Math.max(0,s));return`${A$e}${a}_${i}`},"buildAgentTableName"),OXt=o(e=>{let t=e.user?encodeURIComponent(e.user):"",r=e.password?`:${encodeURIComponent(e.password)}`:"";return`postgresql://${t?`${t}${r}@`:""}${e.host}:${e.port}/${e.database}`},"buildPgConnectionString"),I$e=o((e,t)=>new wY({provider:"pgvector",databaseUrl:OXt(e),tableName:RXt(t.agentId)}),"buildPgVectorDbConfig"),wY=class{constructor(t){this.config=t;if(!/^[a-z0-9_]+$/.test(t.tableName))throw new Error("Invalid vector table name");this.tableName=t.tableName}static{o(this,"PgVectorDb")}async withClient(t){let r=new O$e.Client({connectionString:this.config.databaseUrl});await r.connect();try{return await t(r)}finally{await r.end()}}async ensureSchema(t,r){let n=o((i,s)=>`bb_sc_idx_${EY.createHash("sha256").update(`${i}:${s}`).digest("hex").slice(0,20)}`,"buildIndexName");await t.query("CREATE EXTENSION IF NOT EXISTS vector"),await t.query(`
|
|
674
|
+
"${t}"`),D5(r),"Error generating columns")}async promptForStructuredOutput(t,r,n){let i=this.aiModel.providerOptions?.(!1),s=o(async a=>(0,vL.generateText)({model:this.aiModel.chat,messages:this.toModelMessages(t.messages),output:vL.Output.object({schema:r}),providerOptions:a}),"run");try{return(await R5({providerOptions:i,run:s})).output}catch(a){let u=[n,this.getErrorMessage(a)].filter(Boolean).join(": ");throw new V(u,500)}}getErrorMessage(t){if(!t||typeof t!="object")return String(t);let r=t;return typeof r.message=="string"?r.message:String(t)}toModelMessages(t){return t.map(r=>{if(typeof r.content!="string")throw new V("AI message content must be a string",422);return{role:r.role,content:r.content}})}};var Pc=W(require("dd-trace")),vA=require("lodash/fp");var bWe=W(require("node-fetch"));var c9t=W(require("lodash/cloneDeep")),Av=require("path");L._set("SERVICE_TYPE","apps");var Pje=process.env.TOP_LEVEL_PATH||process.env.SERVER_TOP_LEVEL_PATH||(0,Av.resolve)((0,Av.join)(__dirname,"..","..","..")),Dje=!1;!Dje&&L.isDev()&&!L.isTest()&&(require("dotenv").config({path:(0,Av.join)(Pje,".env")}),Dje=!0);function ca(e){if(e)return parseInt(e)}o(ca,"parseIntSafe");var Yi={QUERY_THREAD_TIMEOUT:15e3,AUTOMATION_THREAD_TIMEOUT:12e4,AUTOMATION_MAX_ITERATIONS:200,JS_PER_EXECUTION_TIME_LIMIT_MS:1500,TEMPLATE_REPOSITORY:"app",PLUGINS_DIR:"/plugins",FORKED_PROCESS_NAME:"main",JS_RUNNER_MEMORY_LIMIT:64,RECAPTCHA_SESSION_SECONDS:1800,AUTOMATION_MAX_NESTED_LOOPS:3,AUTOMATION_MAX_STORED_LOOP_RESULTS:50,AUTOMATION_MAX_LOG_SIZE_MB:5},L5=ca(process.env.QUERY_THREAD_TIMEOUT)||Yi.QUERY_THREAD_TIMEOUT,l9t=L5>Yi.AUTOMATION_THREAD_TIMEOUT?L5:Yi.AUTOMATION_THREAD_TIMEOUT,vv={APP_FEATURES:process.env.APP_FEATURES,PORT:process.env.APP_PORT||process.env.APPS_PORT||process.env.PORT,COUCH_DB_URL:process.env.COUCH_DB_URL,COUCH_DB_SQL_URL:process.env.COUCH_DB_SQL_URL,MINIO_URL:process.env.MINIO_URL,WORKER_URL:process.env.WORKER_URL,AWS_REGION:process.env.AWS_REGION,AWS_SESSION_TOKEN:process.env.AWS_SESSION_TOKEN,MINIO_ACCESS_KEY:process.env.MINIO_ACCESS_KEY,MINIO_SECRET_KEY:process.env.MINIO_SECRET_KEY,REDIS_URL:process.env.REDIS_URL,REDIS_PASSWORD:process.env.REDIS_PASSWORD,REDIS_CLUSTERED:process.env.REDIS_CLUSTERED,CLUSTER_MODE:process.env.CLUSTER_MODE,API_REQ_LIMIT_PER_SEC:process.env.API_REQ_LIMIT_PER_SEC,GOOGLE_CLIENT_ID:process.env.GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:process.env.GOOGLE_CLIENT_SECRET,ATLASSIAN_API_TOKEN:process.env.ATLASSIAN_API_TOKEN,ATLASSIAN_EMAIL:process.env.ATLASSIAN_EMAIL,ATLASSIAN_BASE_URL:process.env.ATLASSIAN_BASE_URL,BAMBOOHR_API_KEY:process.env.BAMBOOHR_API_KEY,BAMBOOHR_SUBDOMAIN:process.env.BAMBOOHR_SUBDOMAIN,NODE_ENV:process.env.NODE_ENV,JEST_WORKER_ID:process.env.JEST_WORKER_ID,BUDIBASE_ENVIRONMENT:process.env.BUDIBASE_ENVIRONMENT,DISABLE_ACCOUNT_PORTAL:process.env.DISABLE_ACCOUNT_PORTAL,TEMPLATE_REPOSITORY:process.env.TEMPLATE_REPOSITORY||Yi.TEMPLATE_REPOSITORY,DISABLE_AUTO_PROD_APP_SYNC:process.env.DISABLE_AUTO_PROD_APP_SYNC,SESSION_UPDATE_PERIOD:process.env.SESSION_UPDATE_PERIOD,RECAPTCHA_SITE_KEY:process.env.RECAPTCHA_SITE_KEY,RECAPTCHA_SESSION_SECONDS:process.env.RECAPTCHA_SESSION_SECONDS||Yi.RECAPTCHA_SESSION_SECONDS,APPS_SERVICE:process.env.APPS_SERVICE,SALT_ROUNDS:process.env.SALT_ROUNDS,LOGGER:process.env.LOGGER,ACCOUNT_PORTAL_URL:process.env.ACCOUNT_PORTAL_URL,INTERNAL_ACCOUNT_PORTAL_URL:process.env.INTERNAL_ACCOUNT_PORTAL_URL||process.env.ACCOUNT_PORTAL_URL,AUTOMATION_MAX_ITERATIONS:ca(process.env.AUTOMATION_MAX_ITERATIONS)||Yi.AUTOMATION_MAX_ITERATIONS,DYNAMO_ENDPOINT:process.env.DYNAMO_ENDPOINT,QUERY_THREAD_TIMEOUT:L5,AUTOMATION_THREAD_TIMEOUT:ca(process.env.AUTOMATION_THREAD_TIMEOUT)||l9t,AUTOMATION_MAX_NESTED_LOOPS:ca(process.env.AUTOMATION_MAX_NESTED_LOOPS)||Yi.AUTOMATION_MAX_NESTED_LOOPS,AUTOMATION_MAX_STORED_LOOP_RESULTS:ca(process.env.AUTOMATION_MAX_STORED_LOOP_RESULTS)||Yi.AUTOMATION_MAX_STORED_LOOP_RESULTS,AUTOMATION_MAX_LOG_SIZE_MB:ca(process.env.AUTOMATION_MAX_LOG_SIZE_MB)||Yi.AUTOMATION_MAX_LOG_SIZE_MB,PLUGINS_DIR:process.env.PLUGINS_DIR||Yi.PLUGINS_DIR,MAX_IMPORT_SIZE_MB:process.env.MAX_IMPORT_SIZE_MB,SESSION_EXPIRY_SECONDS:process.env.SESSION_EXPIRY_SECONDS,XSS_SAFE_MODE:process.env.XSS_SAFE_MODE,SQL_MAX_ROWS:process.env.SQL_MAX_ROWS,SQL_LOGGING_ENABLE:process.env.SQL_LOGGING_ENABLE,SQL_ALIASING_DISABLE:process.env.SQL_ALIASING_DISABLE,ALLOW_DEV_AUTOMATIONS:process.env.ALLOW_DEV_AUTOMATIONS,DISABLE_THREADING:process.env.DISABLE_THREADING,DISABLE_AUTOMATION_LOGS:process.env.DISABLE_AUTOMATION_LOGS,DISABLE_RATE_LIMITING:process.env.DISABLE_RATE_LIMITING,DISABLE_WORKSPACE_MIGRATIONS:process.env.SKIP_WORKSPACE_MIGRATIONS||!1,MULTI_TENANCY:process.env.MULTI_TENANCY,ENABLE_ANALYTICS:process.env.ENABLE_ANALYTICS,SELF_HOSTED:process.env.SELF_HOSTED,HTTP_MB_LIMIT:process.env.HTTP_MB_LIMIT,HTTP_SERVER_TIMEOUT_MS:process.env.HTTP_SERVER_TIMEOUT_MS,HTTP_HEADERS_TIMEOUT_MS:process.env.HTTP_HEADERS_TIMEOUT_MS,HTTP_REQUEST_TIMEOUT_MS:process.env.HTTP_REQUEST_TIMEOUT_MS,HTTP_KEEPALIVE_TIMEOUT_MS:process.env.HTTP_KEEPALIVE_TIMEOUT_MS,FORKED_PROCESS_NAME:process.env.FORKED_PROCESS_NAME||Yi.FORKED_PROCESS_NAME,JS_PER_INVOCATION_TIMEOUT_MS:ca(process.env.JS_PER_EXECUTION_TIME_LIMIT_MS)||Yi.JS_PER_EXECUTION_TIME_LIMIT_MS,JS_PER_REQUEST_TIMEOUT_MS:ca(process.env.JS_PER_REQUEST_TIME_LIMIT_MS),TOP_LEVEL_PATH:Pje,APP_MIGRATION_TIMEOUT:ca(process.env.APP_MIGRATION_TIMEOUT),JS_RUNNER_MEMORY_LIMIT:ca(process.env.JS_RUNNER_MEMORY_LIMIT)||Yi.JS_RUNNER_MEMORY_LIMIT,LOG_JS_ERRORS:process.env.LOG_JS_ERRORS,DISABLE_USER_SYNC:process.env.DISABLE_USER_SYNC,ENABLE_PLUGIN_GH_ORIGIN_BACKFILL:process.env.ENABLE_PLUGIN_GH_ORIGIN_BACKFILL??"true",SYNC_MIGRATION_CHECKS_MS:ca(process.env.SYNC_MIGRATION_CHECKS_MS)||5e3,SKIP_MIGRATION_LOCKS_IN_TESTS:process.env.SKIP_MIGRATION_LOCKS_IN_TESTS??!0,REST_REJECT_UNAUTHORIZED:process.env.REST_REJECT_UNAUTHORIZED!=="false",UPLOAD_APPS_FILES_ON_TEST:process.env.UPLOAD_APPS_FILES_ON_TEST,LITELLM_PORT:process.env.LITELLM_PORT||"4000",LITELLM_URL:process.env.LITELLM_URL||`http://localhost:${process.env.LITELLM_PORT||"4000"}`,LITELLM_MASTER_KEY:process.env.LITELLM_MASTER_KEY,BBAI_LITELLM_KEY:process.env.BBAI_LITELLM_KEY,TABLE_GENERATION_TIMEOUT_MS:process.env.TABLE_GENERATION_TIMEOUT_MS||"240000",CLIENT_ID:process.env.CLIENT_ID,_set(e,t){process.env[e]=t,vv[e]=t,Nje()},isTest:L.isTest,isJest:L.isJest,isDev:L.isDev,isProd:()=>!L.isDev(),isInThread:()=>process.env.FORKED_PROCESS,getDefaults:()=>Yi};function Nje(){for(let[e,t]of Object.entries(vv))t==="0"&&(vv[e]=0),t==="false"&&(vv[e]=0)}o(Nje,"cleanVariables");Nje();var ne=vv;var Ky=W(require("fs")),Bje=W(require("node-fetch")),zy=W(require("path")),qje=require("stream"),jje=require("util"),Wje=W(require("uuid"));var Lje=ne.AWS_REGION?ne.AWS_REGION:"eu-west-1";var k5=[["json","array"],["string","options","longform","barcodeqr"],["boolean","number"]],M5=k5.reduce((e,t)=>e?e.concat(t):t);var kje={_id:"ta_users",type:"table",sourceId:Pn,sourceType:"internal",views:{},name:"Users",schema:{email:{type:"string",constraints:{type:"string",email:!0,length:{maximum:""},presence:!0},name:"email"},firstName:{name:"firstName",type:"string",constraints:{type:"string",presence:!1}},lastName:{name:"lastName",type:"string",constraints:{type:"string",presence:!1}},roleId:{name:"roleId",type:"options",constraints:{type:"string",presence:!1,inclusion:Object.values(_t.BUILTIN_ROLE_IDS)}},status:{name:"status",type:"options",constraints:{type:"string",presence:!1,inclusion:Object.values(ot.UserStatus)}}},primaryDisplay:"email"};var AL={read:"get",create:"post",update:"put",patch:"patch",delete:"delete"},U5=(n=>(n.ID="_id",n.REV="_rev",n.TABLE_ID="tableId",n))(U5||{}),hr=ge.ObjectStoreBuckets,Mje=5,Rv="rowNumber",F5=ot.DEFAULT_JOBS_TABLE_ID,Uje=ot.DEFAULT_INVENTORY_TABLE_ID,Fje=ot.DEFAULT_EXPENSES_TABLE_ID,B5=ot.DEFAULT_EMPLOYEE_TABLE_ID,Qy=ot.DEFAULT_BB_DATASOURCE_ID;function $je(){let e=zy.default.join(ge.budibaseTempDir(),"ai-downloads");return Ky.default.existsSync(e)||Ky.default.mkdirSync(e),e}o($je,"getTmpPath");async function Gje(e){try{let t=await(0,Bje.default)(e),r=[...t.url.split(".")].pop().split("?")[0],n=zy.default.resolve($je(),`${Wje.v4()}${r}`),i=Ky.default.createWriteStream(n,{flags:"wx"});await(0,jje.promisify)(qje.pipeline)(t.body,i);let s=zy.default.basename(n),a=`${C.getProdWorkspaceId()}/attachments/${s}`,u=await ge.upload({bucket:hr.APPS,filename:a,path:n,type:"image/jpeg"});return{size:i.bytesWritten,name:s,url:await ge.getAppFileUrl(a),extension:r,key:u.Key}}catch(t){console.error("Error downloading file",t);return}}o(Gje,"uploadUrl");async function Vje(e){let t=zy.default.resolve($je(),`${e.fileName}${e.extension}`);Ky.default.writeFileSync(t,e.content);let r=zy.default.basename(t),n=`${C.getProdWorkspaceId()}/attachments/${r}`,i=await ge.upload({bucket:hr.APPS,filename:n,path:t,type:"text/plain"});return{size:Ky.default.readFileSync(t).byteLength,name:r,url:await ge.getAppFileUrl(n),extension:e.extension,key:i.Key}}o(Vje,"uploadFile");var{getDispatcher:Hje}=Je;var H5=W(require("dayjs")),fWe=W(require("dayjs/plugin/customParseFormat"));var Yy=Je.newid;var Qje={_id:Pn,type:F.BUDIBASE_DATASOURCE_TYPE,name:"Budibase DB",source:"BUDIBASE",config:{}},Et=F.SEPARATOR,Qtn=F.StaticDatabases,Kje=F.WORKSPACE_PREFIX,f9t=F.WORKSPACE_DEV_PREFIX,q5=F.isDevWorkspaceID,Sf=F.isProdWorkspaceID,RL=`ro${Et}${F.InternalTable.USER_METADATA}${Et}`,zje=`li${Et}${F.InternalTable.USER_METADATA}${Et}`,Yje=`ro${Et}ta`,Jje=`log_au${Et}`,Tc=F.ViewName,$t=F.InternalTable,Xje=F.UNICODE_MAX,Ktn=F.generateWorkspaceID,ztn=F.getDevWorkspaceID,Ytn=F.generateRoleID,Zje=F.getRoleParams,Ov=F.getQueryIndex,Ef=F.getDocParams,tn=F.getRowParams,eWe=F.generateRowID,OL=F.getUserMetadataParams,Jy=F.generateUserMetadataID,Xy=F.getGlobalIDFromUserMetadataID;function Tf(e,t={}){return Ef("ta",e,t)}o(Tf,"getTableParams");function j5(){return F.generateTableID()}o(j5,"generateTableID");function vc(e,t={}){return Ef("au",e,t)}o(vc,"getAutomationParams");function tWe(){return`au${Et}${Yy()}`}o(tWe,"generateAutomationID");function rWe(e,t,r,n,i,s){let a=`${Et}${e}${Et}${t}`,u=`${Et}${r}${Et}${n}`,c=`${Et}${i}${Et}${s}`;return`li${a}${u}${c}`}o(rWe,"generateLinkID");function d9t(e={}){return Ef("li",null,e)}o(d9t,"getLinkParams");async function nWe(){return(await C.getWorkspaceDB().allDocs(d9t({include_docs:!0}))).rows.map(r=>r.doc)}o(nWe,"allLinkDocs");function iWe(){return`screen${Et}${Yy()}`}o(iWe,"generateScreenID");function oWe(e,t={}){return Ef("screen",e,t)}o(oWe,"getScreenParams");function sWe(){return`wh${Et}${Yy()}`}o(sWe,"generateWebhookID");function aWe({plus:e=!1}={}){return`${e?"datasource_plus":"datasource"}${Et}${Yy()}`}o(aWe,"generateDatasourceID");function Iv(e,t={}){return Ef("datasource",e,t)}o(Iv,"getDatasourceParams");function W5(e){return`query${Et}${e}${Et}${Yy()}`}o(W5,"generateQueryID");function uWe(e){return`meta_au${Et}${e}`}o(uWe,"generateAutomationMetadataID");function $5(e,t={}){return e==null?Ef("query",null,t):Ef("query",`${e}${Et}`,t)}o($5,"getQueryParams");function IL(e,t){return`metadata${Et}${e}${Et}${t}`}o(IL,"generateMetadataID");function Cv(e){return`view${Et}${e}`}o(Cv,"generateMemoryViewID");function cWe(e={}){return Ef("view",null,e)}o(cWe,"getMemoryViewParams");function vf(e,t){let r=e>t?e:t,n=e>t?t:e;return`${r}${Et}${n}`}o(vf,"generateJunctionTableID");function CL(e){return`view${Et}${e}${Et}${Yy()}`}o(CL,"generateViewID");function Af(e){return e.type==="link"}o(Af,"isRelationshipColumn");function G5(e){return e.type==="ai"}o(G5,"isAIColumn");function xL(e){return`ra${Et}${e}`}o(xL,"generateRowActionsID");function lWe(e){return e.replace(new RegExp(`^ra${Et}`),"")}o(lWe,"extractTableIdFromRowActionsID");H5.default.extend(fWe.default);function dWe(e){return new Promise(t=>setTimeout(t,e))}o(dWe,"wait");var rrn=ne.isDev,pWe=/^[+-]?([0-9]*[.])?[0-9]+$/g,p9t=["MM/DD/YYYY","MM/DD/YY","DD/MM/YYYY","DD/MM/YY","YYYY/MM/DD","YYYY-MM-DD","YYYY-MM-DDTHH:mm","YYYY-MM-DDTHH:mm:ss","YYYY-MM-DDTHH:mm:ss[Z]","YYYY-MM-DDTHH:mm:ss.SSS[Z]"];function hWe(e){for(let t of p9t)if((0,H5.default)(e,t,!0).isValid())return!0;return!1}o(hWe,"isDate");function mWe(e,t){let r=e.indexOf(t);return r!==-1&&e.splice(r,1),e}o(mWe,"removeFromArray");function gWe(e){return e.replace(/(https?:\/\/)|(\/)+/g,"$1$2")}o(gWe,"checkSlashesInUrl");async function DL(e,t){let r=C.getWorkspaceDB(),n=IL(e,t),i=await r.tryGet(n);i&&await r.remove(i)}o(DL,"deleteEntityMetadata");function yWe(e){return e.replace(/[\\]/g,"\\\\").replace(/[\b]/g,"\\b").replace(/[\f]/g,"\\f").replace(/[\n]/g,"\\n").replace(/[\r]/g,"\\r").replace(/[\t]/g,"\\t")}o(yWe,"escapeDangerousCharacters");function h9t(e){let t={},r={method:e.method},n=e.ctx;if(!n&&L.INTERNAL_API_KEY)t[ot.Header.API_KEY]=L.INTERNAL_API_KEY;else if(n&&n.headers){for(let a of Object.values(ot.Header)){let u=n.headers[a];u!==void 0&&(t[a]=Array.isArray(u)?u[0]:u)}let i=n.headers[ot.Header.COOKIE],s=n.headers[ot.Header.API_KEY];i?t[ot.Header.COOKIE]=i:s&&(t[ot.Header.API_KEY]=Array.isArray(s)?s[0]:s)}return Ee.isTenantIdSet()&&(t[ot.Header.TENANT_ID]=Ee.getTenantId()),e.body&&Object.keys(e.body).length>0&&(t["Content-Type"]="application/json",r.body=JSON.stringify(e.body)),Ne.correlation.setHeader(t),r.headers=t,r}o(h9t,"createRequest");async function m9t(e,t,{ctx:r}={}){if(e.status>=300){let n;if(e.headers.get("content-type")?.includes("json")){let s=await e.json();n=s.message??JSON.stringify(s)}else n=await e.text();let i=`Unable to ${t} - ${n}`;if(r)r.throw(e.status||500,i);else throw i}return e.json()}o(m9t,"checkResponse");async function _We({to:e,from:t,replyTo:r,subject:n,contents:i,cc:s,bcc:a,automation:u,invite:c,attachments:l}){let f={email:e,from:t,replyTo:r,contents:i,subject:n,cc:s,bcc:a,purpose:"custom",automation:u,invite:c,attachments:l},d=await(0,bWe.default)(gWe(ne.WORKER_URL+"/api/global/email/send"),h9t({method:"POST",body:f}));return await m9t(d,"send email")}o(_We,"sendSmtpEmail");var iM=require("lodash"),x4e=W(require("path")),D4e=W(require("uuid"));var X5={};$(X5,{init:()=>b9t,revertDevChanges:()=>wWe});var K5={};$(K5,{getAppUrl:()=>y9t,isWorkspacePublished:()=>Q5});var g9t=/\/|\\/g;function y9t(e){let t;return e?.url?t=encodeURI(e?.url):e?.name&&(t=encodeURI(`${e?.name}`)),t&&(t=`/${t.replace(g9t,"")}`.toLowerCase()),t}o(y9t,"getAppUrl");async function Q5(e){return F.isDevWorkspaceID(e)&&(e=F.getProdWorkspaceID(e)),!!(await F.getWorkspacesByIDs([e])).length}o(Q5,"isWorkspacePublished");var z5,Y5=class extends Xr.QueuedProcessor{constructor(){super(Xr.JobQueue.DEV_REVERT_PROCESSOR,{maxAttempts:3,removeOnFail:!1,removeOnComplete:!1,maxStalledCount:3,waitForCompletionMs:1e4});this.processFn=async r=>await C.doInWorkspaceContext(r.appId,()=>this.revertApp(r))}static{o(this,"DevRevertProcessor")}async revertApp(r){let{appId:n}=r,i=F.getProdWorkspaceID(n),s=C.getProdWorkspaceDB({skip_setup:!0});if(!await Q5(i))throw new Xr.UnretriableError("App must be deployed to be reverted.");let u=await s.get("deployments");if(!u.history||Object.keys(u.history).length===0)throw new Xr.UnretriableError("No deployments for app");let c=new F.Replication({source:i,target:n});try{await c.rollback();let l=C.getWorkspaceDB(),f=await l.get("app_metadata");return f.appId=n,f.instance._id=n,await l.put(f),await Ue.workspace.invalidateWorkspaceMetadata(n),await Le.app.reverted(f),{message:"Reverted changes successfully."}}catch(l){throw new Error(`Unable to revert. ${l}`,{cause:l})}finally{await c.close()}}};function J5(){return z5||(z5=new Y5),z5}o(J5,"devRevertProcessor");async function wWe(e){return await J5().execute(e)}o(wWe,"revertDevChanges");var b9t=o(async()=>{J5()},"init");var hY={};$(hY,{backfillPluginOrigins:()=>bXt,enrichUsedPluginSvelteMajors:()=>wXt,fetch:()=>mXt,normaliseGithubUrl:()=>w$e,parseGithubRepo:()=>gXt,processUploaded:()=>_Xt});var AWe=require("path");var ru=ge.budibaseTempDir;var xv=W(require("fs"));var Z5=require("path");var EWe=W(require("tar")),_9t=require("uuid");var PL=ne.TOP_LEVEL_PATH,qrn=(0,Z5.join)(PL,"packages","server");var SWe=o(e=>xv.default.createReadStream(e),"streamFile"),TWe=o(e=>{let t=(0,Z5.join)(ru(),e);try{xv.default.existsSync(t)&&xv.default.rmSync(t,{recursive:!0,force:!0}),xv.default.mkdirSync(t)}catch(r){throw new Error(`Path cannot be created: ${r.message}`)}return t},"createTempFolder"),vWe=o(async(e,t)=>{await EWe.extract({file:e,C:t})},"extractTarball");var ann=(0,AWe.join)(PL,"node_modules");var la=W(require("fs")),Zy=require("path");var RWe=W(require("stream"));var w9t=(0,Zy.join)(ru(),"datasource"),E9t=(0,Zy.join)(ru(),"automation"),OWe=o(async e=>{let t,r;try{if(t=JSON.parse(la.default.readFileSync((0,Zy.join)(e,"package.json"),"utf8")),r=JSON.parse(la.default.readFileSync((0,Zy.join)(e,"schema.json"),"utf8")),!t.name)throw new Error("package.json is missing 'name'.");if(!t.version)throw new Error("package.json is missing 'version'.");if(!t.description)throw new Error("package.json is missing 'description'.")}catch(n){throw new Error(`Unable to process schema.json/package.json in plugin. ${n.message}`,{cause:n})}return{metadata:{package:t,schema:r},directory:e}},"getPluginMetadata");async function IWe(e,t){let r=t.schema?.hash;la.default.existsSync(e)||la.default.mkdirSync(e);let n=(0,Zy.join)(e,t.name),i=`${n}.bbmetadata`;if(la.default.existsSync(n)){if(la.default.readFileSync(i,"utf8")===r)return require(n);console.log(`Updating plugin: ${t.name}`),delete require.cache[require.resolve(n)],la.default.unlinkSync(n)}let s=ge.getPluginJSKey(t),a=await ge.retrieve(ge.ObjectStoreBuckets.PLUGINS,s);return a instanceof RWe.default.Readable?a.pipe(la.default.createWriteStream(n)):la.default.writeFileSync(n,a),la.default.writeFileSync(i,r),require(n)}o(IWe,"getPluginImpl");var CWe=o(async e=>IWe(w9t,e),"getDatasourcePlugin"),xWe=o(async e=>IWe(E9t,e),"getAutomationPlugin");var DWe=o(async(e,t)=>{let n=`https://prod-budi-templates.s3-eu-west-1.amazonaws.com/templates/${e}/${t}.tar.gz`;return ge.downloadTarball(n,hr.TEMPLATES,e)},"downloadTemplate");async function PWe(e){if(!e.name||!e.path)throw new Error("File is not valid - cannot upload.");if(!e.name.endsWith(".tar.gz"))throw new Error("Plugin must be compressed into a gzipped tarball.");let t=TWe(e.name.split(".tar.gz")[0]);return await vWe(e.path,t),await OWe(t)}o(PWe,"fileUpload");var O9t=require("socket.io"),I9t=require("koa-useragent");var C9t=require("@socket.io/redis-adapter");var Dnn=typeof ne.RECAPTCHA_SESSION_SECONDS=="string"?parseInt(ne.RECAPTCHA_SESSION_SECONDS):ne.RECAPTCHA_SESSION_SECONDS,S9t;var T9t;async function NWe(e){return await S9t.bulkGet(e)}o(NWe,"getLocksById");async function eY(e){let t=await T9t?.get(e);return!!(t&&t.testing)}o(eY,"checkTestFlag");var x9t=require("uuid");var v9t=W(require("cookies"));var uin=new RegExp("^/api/webhooks/(trigger|schema|discord|ms-teams|slack)(/|$)");var win=cf.buildCsrfMiddleware();var pXt=require("koa-useragent");var tY=W(require("fs")),NL=require("lodash"),UWe=require("stream/promises"),FWe=W(require("tmp")),BWe=require("uuid"),qWe=require("xml2js");function N9t(e){return["string","number","boolean","datetime","json","bigint","options"].includes(e)}o(N9t,"isPrimitiveType");var L9t={integer:"number",int:"number",decimal:"number",smallint:"number",tinyint:"number",real:"number",float:"number",numeric:"number",mediumint:"number",dec:"number",double:"number",fixed:"number","double precision":"number",number:"number",binary_float:"number",binary_double:"number",money:"number",smallmoney:"number"},k9t={timestamp:"datetime",time:"datetime",datetime:"datetime",smalldatetime:"datetime",date:"datetime"},M9t=["date"],U9t=["time","time without time zone","time with time zone"],F9t={varchar:"string",char:"string",nchar:"string",nvarchar:"string",ntext:"string",enum:"string",blob:"string",long:"string",text:"string",array:"string"},B9t={boolean:"boolean",bit:"boolean"},q9t={"user-defined":"options"},j9t={json:"json",bigint:"bigint",enum:"options"},W9t={...L9t,...k9t,...F9t,...B9t,...j9t,...q9t},MWe={citext:"string"},Pt=He.utils.isExternalTableID,$9t=He.utils.isExternalTable,Ji=He.utils.buildExternalTableId,mr=He.utils.breakExternalTableId,LL=He.utils.generateRowIdField,jWe=He.utils.isRowId,WWe=He.utils.convertRowId,Cn=He.utils.breakRowIdField,$We=He.utils.isValidFilter,G9t=ne.isProd()&&!ne.SELF_HOSTED,V9t=ne.isProd()&&ne.SELF_HOSTED,fi=V9t?"host.docker.internal":G9t?"":"localhost";function Rf(e){let{externalType:t,autocolumn:r,name:n,presence:i,options:s,userDefinedType:a}=e,u="string",c=t.toLowerCase(),l=[];if(c.startsWith("enum"))l.push({external:"enum",internal:"options"});else if(c==="array"&&a&&(a.toLowerCase().includes("json")||a.toLowerCase().includes("jsonb")))l.push({external:a.toLowerCase(),internal:"json"});else if(a&&a in MWe)u=MWe[a];else for(let[d,p]of Object.entries(W9t))c.includes(d)&&l.push({external:d,internal:p});l.length>0&&(u=l.reduce((d,p)=>d.external.length>=p.external.length?d:p).internal);let f;return u==="options"?f={type:u,externalType:t,autocolumn:r,name:n,constraints:{presence:i,inclusion:s??[]}}:f={type:u,externalType:t,autocolumn:r,name:n,constraints:{presence:i}},f.type==="datetime"&&(f.dateOnly=M9t.includes(c),f.timeOnly=U9t.includes(c)||c.startsWith("time(")),f.type==="string"&&c==="array"&&(f.subtype="array"),f}o(Rf,"generateColumnDefinition");function Br(e){return typeof e=="string"?{sql:e}:e}o(Br,"getSqlQuery");function Of(e){return fe.isSQL(e)}o(Of,"isSQL");function H9t(e,t,r,n){if(r&&r[e]){r[e]?.primaryDisplay&&(t.primaryDisplay=r[e].primaryDisplay),r[e]?.created&&(t.created=r[e]?.created),r[e]?.constrained&&(t.constrained=r[e]?.constrained),t.views=r[e].views;let i=r[e].schema;for(let s in i){if(!Object.prototype.hasOwnProperty.call(i,s))continue;let a=i[s],u=a?.type,c=t.schema[s]?.type,l=o((...d)=>N9t(c)&&t.schema[s]&&d.includes(c),"keepIfType"),f=!1;switch(u){case"formula":case"ai":case"auto":case"internal":f=!0;break;case"link":f=u==="link"&&n.includes(a.tableId);break;case"string":case"options":case"longform":case"barcodeqr":f=l("string");break;case"number":case"boolean":f=l("boolean","number");break;case"array":case"attachment":case"attachment_single":case"signature_single":case"json":case"bb_reference":case"bb_reference_single":f=l("json","string");break;case"datetime":f=l("datetime","string");break;case"bigint":f=l("bigint","number");break;default:We.unreachable(u)}if(f){let d=t.schema[s];if(t.schema[s]={...(0,NL.merge)((0,NL.cloneDeep)(d),i[s]),externalType:i[s].externalType||d?.externalType,autocolumn:d?.autocolumn},d?.constraints){let p=d.constraints,h=t.schema[s].constraints;t.schema[s].constraints={...t.schema[s].constraints,inclusion:p.inclusion?.length?p.inclusion:h?.inclusion},p.presence?t.schema[s].constraints.presence=p.presence:h?.presence===!0&&delete t.schema[s].constraints?.presence}}}}return t}o(H9t,"copyExistingPropsOver");function nu(e,t){let r={},n=Object.values(e).map(i=>i._id);for(let[i,s]of Object.entries(e))r[i]=H9t(i,s,t,n);return Object.entries(r).sort(([i],[s])=>i.localeCompare(s)).reduce((i,[s,a])=>({...i,[s]:a}),{})}o(nu,"finaliseExternalTables");function iu(e){let t=Object.values(U5),r={};for(let[n,i]of Object.entries(e))(!i.primary||i.primary.length===0)&&(r[n]="Table must have a primary key."),Object.keys(i.schema).find(a=>t.includes(a))&&(r[n]="Table contains invalid columns.");return r}o(iu,"checkExternalTables");async function GWe(e){let t=await(0,qWe.parseStringPromise)(e,{explicitArray:!1,trim:!0,explicitRoot:!1})||{},r=Object.keys(t);return r.length===1&&Array.isArray(t[r[0]])&&(t=t[r[0]]),{data:t,rawXml:e}}o(GWe,"handleXml");async function VWe(e,t,r){let n,i=0,s=t.includes(".")?t.split(".").slice(1).join("."):"",a=`${(0,BWe.v4)()}.${s}`,u=`${C.getProdWorkspaceId()}/${a}`,c=ge.ObjectStoreBuckets.TEMP,l=FWe.default.fileSync();try{if(await(0,UWe.pipeline)(e.body,tY.default.createWriteStream(l.name)),e.body){let f=e.headers.get("content-length");f&&(i=parseInt(f,10));let d=await ge.streamUpload({bucket:c,filename:u,stream:tY.default.createReadStream(l.name),ttl:1,type:e.headers["content-type"]});!i&&d.ContentLength&&(i=d.ContentLength)}return n=await ge.getPresignedUrl(c,u),{data:{size:i,name:a,url:n,extension:s,key:u},info:{code:e.status,size:fe.formatBytes(i.toString()),time:`${Math.round(performance.now()-r)}ms`}}}finally{l.removeCallback()}}o(VWe,"handleFileResponse");function Dv({row:e,tableName:t,fieldName:r,isLinked:n}){let i=e[`${t}.${r}`];return i==null&&!n&&(i=e[r]),i}o(Dv,"extractFieldValue");function HWe(e,t){return Dv({row:e,tableName:t._id,fieldName:"_id",isLinked:!1})}o(HWe,"getInternalRowId");function Ac(e,t,r=!1){let n=t.primary;if(!e||!n)return"";let i=[];for(let s of n){let a=Dv({row:e,tableName:t.name,fieldName:s,isLinked:r});a!=null&&i.push(a)}return i.length===0?"":LL(i)}o(Ac,"generateIdForRow");function Q9t(e,t){for(let[r,n]of Object.entries(t.schema))if(UA.includes(n.type)&&typeof e[r]=="string")try{e[r]=JSON.parse(e[r])}catch{fe.schema.isDeprecatedSingleUserColumn(n)||delete e[r]}return e}o(Q9t,"fixJsonTypes");async function rY({row:e,source:t,tables:r,isLinked:n,sqs:i}){let s,a=!1;P.views.isView(t)?(s=await P.views.getTable(t.id),a=fe.views.isCalculationView(t)):s=t;let u={};for(let l of Object.keys(s.schema)){let f=Dv({row:e,tableName:s.name,fieldName:l,isLinked:n});f instanceof Buffer?f=f.toString():f!=null&&(u[l]=f)}if(P.views.isView(t))for(let l of Object.keys(fe.views.calculationFields(t)))u[l]=e[l];let c=Object.keys(s.schema);if(!i&&!a)u._id=Ac(e,s,n),u.tableId=s._id,u._rev=BX,c=c.concat(no);else if(!a){c=c.concat(no);for(let l of[...Hr,...c])u[l]=Dv({row:e,tableName:s._id,fieldName:l,isLinked:n})}for(let l of c){let f=s.schema[l];if(f?.type!=="link")continue;let d=r.find(m=>m._id===f.tableId);if(!d)continue;let p=Dv({row:e,tableName:s._id,fieldName:l,isLinked:n}),h=Array.isArray(p)?p:typeof p=="string"?JSON.parse(p):void 0;if(h&&Array.isArray(h)){u[l]=h;let m=d.primaryDisplay||d.primary[0];u[l]=(await Promise.all(u[l].map(g=>rY({row:g,source:d,tables:r,isLinked:!1,sqs:i})))).sort((g,y)=>{let b=g?.[m],w=y?.[m];if(b){if(!w)return-1}else return 1;return b.localeCompare?b.localeCompare(w):b-w})}}return Q9t(u,s)}o(rY,"basicProcessing");function Pv(e){return!!e.through}o(Pv,"isManyToMany");function QWe(e,t){let r=[];for(let[n,i]of Object.entries(e.schema)){if(i.type!=="link"||!i.tableId)continue;let{tableName:s}=mr(i.tableId);if(!t[s])continue;let a=t[s];if(!e.primary||!a.primary)continue;let u={tableName:s,column:n};if(Pv(i)&&i.through){let{tableName:c}=mr(i.through);u.through=c,u.from=i.throughTo||e.primary[0],u.to=i.throughFrom||a.primary[0],u.fromPrimary=e.primary[0],u.toPrimary=a.primary[0]}else(MA(i)||kA(i))&&(u.from=i.foreignKey||e.primary[0],u.to=i.fieldName);r.push(u)}return r}o(QWe,"buildExternalRelationships");function KWe(e,t){let r=[],n=Object.values(e.schema).filter(s=>s.type==="link"),i=e._id;for(let s of n){if(s.type!=="link")continue;let a=s.tableId,u=vf(i,a),c=i>a;t.find(l=>l._id===a)&&r.push({through:u,column:s.name,tableName:a,fromPrimary:"_id",to:c?"doc2.rowId":"doc1.rowId",from:c?"doc1.rowId":"doc2.rowId",toPrimary:"_id"})}return r}o(KWe,"buildInternalRelationships");async function zWe(e,t,r){let{relationships:n}=r||{},i=["link","formula","ai"];function s(d,p=[]){return Object.entries(d.schema).filter(([h,m])=>!i.includes(m.type)&&!p.find(g=>g===h)).map(([h])=>h)}o(s,"extractRealFields");function a(d,p=[]){let h=[];return d.primary&&h.push(...d.primary),d.primaryDisplay&&h.push(d.primaryDisplay),He.utils.isExternalTable(d)||h.push(...Hr),h.filter(m=>!p.find(g=>g===m)&&d.schema[m]&&!i.includes(d.schema[m].type))}o(a,"getRequiredFields");let u=[],c=P.views.isView(e),l;c?(l=await P.views.getTable(e.id),u=Object.keys(fe.views.basicFields(e)).filter(d=>l.schema[d].type!=="link")):(l=e,u=s(e).filter(d=>l.schema[d].visible!==!1));let f=(c?u:Object.keys(l.schema)).some(d=>l.schema[d]?.type==="formula");f&&(u=s(l)),(!c||!fe.views.isCalculationView(e))&&u.push(...a({...l,primaryDisplay:e.primaryDisplay||l.primaryDisplay},u)),u=u.map(d=>`${l.name}.${d}`);for(let d of Object.values(l.schema)){if(d.type!=="link"||!n||!d.tableId||c&&(!e.schema?.[d.name]||!fe.views.isVisible(e.schema[d.name]))&&!f)continue;let{tableName:p}=mr(d.tableId),h=t[p];if(!h)continue;let m=new Set;f?s(h).forEach(y=>m.add(y)):(h.primary?.forEach(y=>m.add(y)),h.primaryDisplay&&m.add(h.primaryDisplay),c&&Object.entries(e.schema?.[d.name]?.columns||{}).filter(([y,b])=>h.schema[y]&&fe.views.isVisible(b)&&!["link","formula"].includes(h.schema[y].type)).forEach(([y])=>m.add(y)));let g=Array.from(m).filter(y=>!i.includes(h.schema[y].type)).map(y=>`${h.name}.${y}`).filter(y=>!u.includes(y));u.push(...g)}return[...new Set(u)]}o(zWe,"buildSqlFieldList");function nY(e){return!Array.isArray(e)||e.length===0||"read"in e[0]&&e[0].read===!0}o(nY,"isKnexEmptyReadResponse");function YWe(e){return!nY(e)}o(YWe,"isKnexRows");var g$e=require("lodash/fp");var i$e=W(require("lodash/flatten")),o$e=W(require("lodash/partition"));var JWe=W(require("lodash/cloneDeep"));async function kL(e,t={}){if(!e||!e.roles&&!e.userGroups)return e;e=(0,JWe.default)(e),delete e.password;let r=t.appId||C.getWorkspaceId();if(!r)throw new Error("Unable to process user without app ID");if(ne.MULTI_TENANCY&&r&&!Ee.isUserInWorkspaceTenant(r,e))return e=tt.removePortalUserPermissions(e),e.roleId=_t.BUILTIN_ROLE_IDS.PUBLIC,e;let n=[];r&&e?.userGroups?.length&&(n=t.groups?t.groups:await Gn.getBulk(e.userGroups,{enriched:!1}));let i=await Gn.getGroupBuilderAppIds(e,{appId:r,groups:n});if(i.length&&!tt.isBuilder(e,r)){let s=e.builder?.apps||[];e.builder={apps:[...new Set(s.concat(i))]}}return tt.isBuilder(e,r)&&(e.roleId=_t.BUILTIN_ROLE_IDS.ADMIN),!e.roleId&&r&&e.roles&&(e.roleId=e.roles[F.getProdWorkspaceID(r)]),!e.roleId&&n&&(e.roleId=await Gn.getGroupRoleId(e,r,{groups:n})),e.roleId||(e.roleId=_t.BUILTIN_ROLE_IDS.PUBLIC),delete e.roles,e}o(kL,"processUser");async function K9t(e){return Ee.getGlobalDB().get(Xy(e))}o(K9t,"getRawGlobalUser");async function XWe(e){let t=C.getWorkspaceId(),r=await K9t(e);return kL(r,{appId:t})}o(XWe,"getGlobalUser");async function iY(e){let t=Ee.getGlobalDB(),r;return e?r=await t.getMultiple(e,{allowMissing:!0}):r=(await t.allDocs(F.getGlobalUserParams(null,{include_docs:!0}))).rows.map(n=>n.doc),r.filter(n=>n!=null).map(n=>(delete n.password,delete n.forceResetPassword,n))}o(iY,"getRawGlobalUsers");async function ML(e){let t=await iY(e),r=await Gn.fetch();return Promise.all(t.map(n=>kL(n,{groups:r})))}o(ML,"getGlobalUsers");async function ZWe(e){let t=await ML(e.map(r=>r._id));return e.map(r=>({...t.find(i=>i&&r._id?.includes(i._id)),...r}))}o(ZWe,"getGlobalUsersFromMetadata");var oY=class{static{o(this,"LinkDocumentImpl")}constructor(t,r,n,i,s,a){this._id=rWe(t,i,n,a,r,s),this.type="link",this.tableId=vf(t,i);let u={tableId:t,fieldName:r,rowId:n},c={tableId:i,fieldName:s,rowId:a};this.doc1=u.tableId>c.tableId?u:c,this.doc2=u.tableId>c.tableId?c:u}},Nv=oY;var xon="screen"+Et;async function UL(){let e=C.getWorkspaceDB(),t=await e.get("_design/database"),r={map:function(n){if(n.type==="link"){let i=n.doc1,s=n.doc2;emit([i.tableId,i.rowId],{id:s.rowId,thisId:i.rowId,fieldName:i.fieldName}),i.tableId!==s.tableId&&emit([s.tableId,s.rowId],{id:i.rowId,thisId:s.rowId,fieldName:s.fieldName})}}.toString()};t.views={...t.views,[Tc.LINK]:r},await e.put(t)}o(UL,"createLinkView");var FL={INCLUDE:!0,EXCLUDE:!1};async function ou(e){let{tableId:t,rowId:r,fieldName:n,includeDocs:i}=e,s=C.getWorkspaceDB(),a;r?a={key:[t,r]}:a={startkey:[t],endkey:[t,{}]},i&&(a.include_docs=!0);try{let u=(await s.query(Ov(Tc.LINK),a)).rows,c=new Set;return u=u.filter(l=>{if(t&&l.key[0]!==t||r&&l.key[1]!==r)return!1;let f=!c.has(l.id);return f&&c.add(l.id),f}),n&&(u=u.filter(l=>l.value.fieldName===n)),i?u.map(l=>l.doc):u.map(l=>l.value)}catch(u){if(u!=null&&u.name==="not_found")return await UL(),ou(arguments[0]);throw Ne.logAlert("Failed to get link documents",u),u}}o(ou,"getLinkDocuments");function e$e(e,t){let r=new Set,n=[];for(let i of e)r.has(i[t])||(r.add(i[t]),n.push(i));return n}o(e$e,"getUniqueByProp");function BL(e){return Object.values(e).filter(Af).map(t=>t.tableId)}o(BL,"getLinkedTableIDs");async function sY(e,t){let r=t.find(n=>n._id===e);return r||(r=await P.tables.getTable(e),r&&t.push(r),r)}o(sY,"getLinkedTable");function t$e(e,t){let r=e[t];if(r?.type==="link")return r.tableId;for(let n of Object.values(e))if(n.type==="link"&&n.fieldName===t)return n.tableId;return null}o(t$e,"getRelatedTableForField");var aY=class{static{o(this,"LinkController")}constructor({tableId:t,row:r,table:n,oldTable:i}){this._db=C.getWorkspaceDB(),this._tableId=t,this._row=r,this._table=n,this._oldTable=i}async table(){return this._table==null&&(this._table=this._table==null?await this._db.get(this._tableId):this._table),this._table}async doesTableHaveLinkedFields(t){t==null&&(t=await this.table());for(let r of Object.keys(t.schema)){let{type:n}=t.schema[r];if(n==="link")return!0}return!1}getRowLinkDocs(t){return ou({tableId:this._tableId,rowId:t,includeDocs:FL.INCLUDE})}async getTableLinkDocs(){return await ou({tableId:this._tableId,includeDocs:FL.INCLUDE})}validateTable(t){let r=[];for(let n of Object.values(t.schema)){if(n.type!=="link")continue;let i=n.tableId+n?.fieldName;if(r.indexOf(i)!==-1)throw new Error("Cannot re-use the linked column name for a linked table.");r.push(i)}}areLinkSchemasEqual(t,r){let n=["name","type","tableId","fieldName","autocolumn","relationshipType"];for(let i of n)if(t[i]!==r[i])return!1;return!0}handleRelationshipType(t,r){return!t.relationshipType||t.relationshipType==="many-to-many"?(r.relationshipType="many-to-many",t.relationshipType="many-to-many"):t.relationshipType==="many-to-one"?r.relationshipType="one-to-many":t.relationshipType==="one-to-many"&&(r.relationshipType="many-to-one"),{linkerField:t,linkedField:r}}async rowSaved(){let t=await this.table(),r=this._row,n=[],i=await this.getRowLinkDocs(r._id);for(let s of Object.keys(t.schema)){let a=r[s],u=t.schema[s];if(u.type==="link"&&a!=null){if(!Array.isArray(a))throw new Error("Relationship Error: Invalid value");let c=i.filter(h=>h.doc1.fieldName===s||h.doc2.fieldName===s),l=c.map(h=>h.doc1.rowId===r._id?h.doc2.rowId:h.doc1.rowId),d=(await this._db.get(u.tableId)).schema[u.fieldName];if(u.tableId===$t.USER_METADATA){let h=await this._db.allDocs(OL(null,{})),m=a.filter(g=>!h.rows.some(y=>y.id===g));await this._db.bulkDocs(m.map(g=>({_id:g})))}for(let h of a){if(d?.type==="link"&&d?.relationshipType==="one-to-many"){let m=(await ou({tableId:u.tableId,rowId:h})).filter(y=>y.id!==r._id&&y.fieldName===d.name);if((await this._db.getMultiple(m.map(y=>y.id),{allowMissing:!0,excludeDocs:!0})).length>0)throw new Error("1:N Relationship Error: Record already linked to another.")}if(h&&h!==""&&l.indexOf(h)===-1){try{await this._db.get(h)}catch{continue}n.push(new Nv(t._id,s,r._id,u.tableId,u.fieldName,h))}}let p=c.filter(h=>{let m;return h.doc1.tableId===t._id&&h.doc1.fieldName===s?m=h.doc2:h.doc2.tableId===t._id&&h.doc2.fieldName===s&&(m=h.doc1),m&&a.indexOf(m.rowId)===-1}).map(h=>({...h,_deleted:!0}));n.push(...p),delete r[s]}}return await this._db.bulkDocs(n),r}async rowDeleted(){let t=this._row,r=await this.getRowLinkDocs(t._id);return r.length===0?null:(await this._db.bulkRemove(r,{silenceErrors:!0}),t)}async removeFieldFromTable(t){let r=this._oldTable,n=r?.schema[t],s=(await this.getTableLinkDocs()).filter(a=>(a.doc1.tableId===r?._id?a.doc1.fieldName:a.doc2.fieldName)===t);await this._db.bulkRemove(s,{silenceErrors:!0});try{let a=await this._db.get(n.tableId);n.fieldName&&delete a.schema[n.fieldName],await this._db.put(a)}catch(a){if(a.statusCode!==404)throw a}}async tableSaved(){let t=await this.table();this.validateTable(t);let r=t.schema;for(let n of Object.keys(r)){let i=r[n];if(i.type==="link"&&i.fieldName){let s;try{s=await this._db.get(i.tableId)}catch{continue}let a=this.handleRelationshipType(i,{name:i.fieldName,type:"link",tableId:t._id,fieldName:n});r[n]=a.linkerField;let u=a.linkedField;i.autocolumn&&(u.autocolumn=i.autocolumn,u.subtype=i.subtype),i.aiGenerated&&(u.aiGenerated=i.aiGenerated);let c=s.schema[i.fieldName];if(c!=null&&!this.areLinkSchemasEqual(c,u))throw new Error("Cannot overwrite existing column.");s.schema[i.fieldName]=u;let l=await this._db.put(s);s._id===t._id&&(t._rev=l.rev)}}return t}async tableUpdated(){let t=this._oldTable,r=await this.table();for(let n of Object.keys(t?.schema||{}))(t?.schema[n]).type==="link"&&r.schema[n]==null&&await this.removeFieldFromTable(n);return this.tableSaved()}async tableDeleted(){let t=await this.table(),r=t.schema;for(let i of Object.keys(r)){let s=r[i];try{if(s.type==="link"&&s.fieldName){let a=await this._db.get(s.tableId);delete a.schema[s.fieldName],s.tableRev=(await this._db.put(a)).rev}}catch(a){Ne.logWarn(a?.message,a)}}let n=await this.getTableLinkDocs();return n.length===0?null:(await this._db.bulkRemove(n,{silenceErrors:!0}),t)}},r$e=aY;var n$e=["link","attachment","attachment_single","signature_single","bb_reference","bb_reference_single"];function z9t(e,t){for(let[r,n]of Object.entries(e))n.type==="link"&&(t=t.map(i=>(delete i[r],i)));return t}o(z9t,"clearRelationshipFields");async function Y9t(e){let r=[...new Set(e.map(i=>i.tableId))].map(i=>ou({tableId:i})),n=(0,i$e.default)(await Promise.all(r));return e$e(n.filter(i=>i!=null).map(i=>({...i,unique:i.id+i.thisId+i.fieldName})),"unique")}o(Y9t,"getLinksForRows");async function J9t(e){let t=C.getWorkspaceDB(),r=e.map(c=>c.id),n=[...new Set(r)],i=await t.getMultiple(n,{allowMissing:!0}),s=r.map(c=>i.find(l=>l&&l._id===c)).filter(c=>c!=null),[a,u]=(0,o$e.default)(s,c=>c._id.startsWith(RL));return a=await ZWe(a),[...u,...a]}o(J9t,"getFullLinkedDocs");async function fa(e){let{eventType:t,row:r,tableId:n,table:i,oldTable:s}=e,a=r??i;n==null&&i!=null&&(e.tableId=i._id);let u=new r$e(e);try{if(!await u.doesTableHaveLinkedFields(i)&&(s==null||!await u.doesTableHaveLinkedFields(s)))return a}catch{return a}switch(t){case"row:save":case"row:update":return await u.rowSaved();case"row:delete":return await u.rowDeleted();case"table:save":return await u.tableSaved();case"table:updated":return await u.tableUpdated();case"table:delete":return await u.tableDeleted();default:throw"Type of event is not known, linked row handler requires update."}}o(fa,"updateLinks");async function s$e(e,t,r){let n=BL(e);if(n.length===0)return t;let i=await Promise.all([Y9t(t),P.tables.getTables(n)]),s=i[0].filter(l=>t.some(f=>f._id===l.thisId)),a=s;r?.fromRow&&(a=s.filter(l=>l.id!==r?.fromRow?._id));let u=i[1];t=z9t(e,t);let c=[];a.length>0&&(c=await J9t(a));for(let l of t)for(let f of s.filter(d=>d.thisId===l._id)){l[f.fieldName]==null&&(l[f.fieldName]=[]);let d;if(r?.fromRow&&r?.fromRow?._id===f.id?d=r.fromRow:d=c.find(p=>p._id===f.id),d){let p=d.tableId||t$e(e,f.fieldName),h=u.find(m=>m._id===p);if(h){let m=await su(h,d);l[f.fieldName].push(m)}}}return t}o(s$e,"attachFullLinkedDocs");function X9t(e,t){let r=t?.primaryDisplay,n=!0;if(r){let i=t?.schema[r];n=n$e.includes(i.type)}if(n||!r){let i=Object.keys(t?.schema||{}).find(s=>t?.schema[s].type&&!n$e.includes(t?.schema[s].type));return i?e[i]:void 0}else return e[r]}o(X9t,"getPrimaryDisplayValue");async function qL(e,t){let r={};if(P.views.isView(e)){if(fe.views.isCalculationView(e))return t;r=e.schema||{}}let n;P.views.isView(e)?n=await P.views.getTable(e.id):n=e;let i=[n],s=Array.isArray(t),a=s?t:[t];for(let u of a){let c=await sY(u.tableId,i);for(let[l,f]of Object.entries(c.schema)){if(f.type!=="link"||!Array.isArray(u[l]))continue;let d=await sY(f.tableId,i);r[l]?.columns&&(u[l]=await uY(d,u[l])),u[l]=u[l].map(p=>{let h={_id:p._id};if(h.primaryDisplay=X9t(p,d),r[l]?.columns){let m=Object.entries(r[l].columns||{}).filter(([g,y])=>{let b=d.schema[g];return!b||["link","formula","ai"].includes(b.type)?!1:b.visible!==!1&&y.visible!==!1}).map(([g])=>g);for(let g of m)p[g]!=null&&(h[g]=p[g])}return h})}}return s?a:a[0]}o(qL,"squashLinks");var eb=class extends Error{static{o(this,"InvalidBBRefError")}constructor(t,r){super(`Id "${t}" is not valid for the subtype "${r}"`)}};var a$e="ro"+ue;async function u$e(e,t){if(e&&Array.isArray(e)){if(e.length>1)throw new eb(JSON.stringify(e),"user");e=e[0]}let r=typeof e=="string"?e:e?._id;if(!r)return null;switch(t){case"user":{r.startsWith(a$e)&&(r=F.getGlobalIDFromUserMetadataID(r));try{return await Ue.user.getUser({userId:r}),r}catch(n){throw n.statusCode===404?new eb(r,"user"):n}}default:throw We.unreachable(t)}}o(u$e,"processInputBBReference");async function c$e(e,t){if(!e||!e[0])return null;let r;switch(typeof e=="string"?r=e.split(",").map(n=>n.trim()).filter(n=>!!n):r=e.map(n=>typeof n=="string"?n:n._id),r=r.map(n=>n?.startsWith(a$e)?F.getGlobalIDFromUserMetadataID(n):n),t){case void 0:throw"Subtype must be defined";case"user":case"users":{let{notFoundIds:n}=await Ue.user.getUsers(r);if(n?.length)throw new eb(n[0],"user");return r?.length?r:null}default:throw We.unreachable(t)}}o(c$e,"processInputBBReferences");async function l$e(e,t){if(e)switch(t){case"user":{let r;try{r=await Ue.user.getUser({userId:e})}catch(n){if(n.statusCode!==404)throw n}return r?{_id:r._id,primaryDisplay:r.email,email:r.email,firstName:r.firstName,lastName:r.lastName}:void 0}default:throw We.unreachable(t)}}o(l$e,"processOutputBBReference");async function f$e(e,t){if(!e||Array.isArray(e)&&e.length===0)return;let r=typeof e=="string"?e.split(",").filter(n=>!!n):e;switch(t){case"user":case"users":{let{users:n}=await Ue.user.getUsers(r);return n.length?n.map(i=>({_id:i._id,primaryDisplay:i.email,email:i.email,firstName:i.firstName,lastName:i.lastName})):void 0}default:throw We.unreachable(t)}}o(f$e,"processOutputBBReferences");var Z9t=`autocolumn_state${ue}`,d$e=5,eXt=o(e=>e?.status===409||e?.statusCode===409,"isConflictError");function tXt(e){return`${Z9t}${e}`}o(tXt,"buildDocId");function rXt(e,t){let r=e.schema[t];return r?.lastId!=null&&!Number.isNaN(r.lastId)?r.lastId:0}o(rXt,"getSchemaSeed");async function nXt(e,t){let r={};if(!t.length)return r;let i=await C.getWorkspaceDB().allDocs(tn(e._id,null,{include_docs:!0}));for(let s of t)r[s]=0;for(let s of i.rows){let a=s.doc;if(a)for(let u of t){let c=a[u];if(typeof c!="number")continue;let l=r[u]??0;c>l&&(r[u]=c)}}return r}o(nXt,"computeRowMaxes");async function iXt(e,t,r){let n=r.filter(s=>e.columns[s]==null);if(!n.length)return;let i=await nXt(t,n);for(let s of n){let a=rXt(t,s),u=i[s]??0;e.columns[s]=Math.max(a,u)}}o(iXt,"initialiseMissingColumns");async function p$e(e,t){if(!t.length)return{};if(!e._id)throw new Error("Unable to allocate auto column values for table without an _id.");let r=C.getWorkspaceDB(),n=tXt(e._id),i=[...new Set(t)],s=0;for(;s<d$e;){let a=await r.tryGet(n)||{_id:n,tableId:e._id,columns:{}};await iXt(a,e,i);let u={...a,columns:{...a.columns}},c={};for(let l of i){let d=(u.columns[l]??0)+1;u.columns[l]=d,c[l]=d}try{let l=await r.put(u);return u._rev=l.rev,c}catch(l){if(eXt(l)){s++;continue}throw l}}throw new Error(`Unable to allocate auto column values for table ${e._id} after ${d$e} attempts`)}o(p$e,"allocateAutoColumnValues");var cY=o(e=>{if(typeof e=="string"){if(e==="")return[];let t;try{return t=JSON.parse(e.replace(/'/g,'"')),t}catch{return e}}return e},"parseArrayString"),tb={link:{"":[],[null]:[],[void 0]:void 0,parse:e=>Array.isArray(e)&&typeof e[0]=="object"?e.map(t=>{let r=t;return r&&r._id?r._id:t}):typeof e=="string"?[e]:e},options:{"":null,[null]:null,[void 0]:void 0},array:{[null]:[],[void 0]:void 0,parse:cY},bb_reference:{[null]:[],[void 0]:void 0,parse:cY},string:{"":null,[null]:null,[void 0]:void 0},barcodeqr:{"":null,[null]:null,[void 0]:void 0},formula:{"":null,[null]:null,[void 0]:void 0},longform:{"":null,[null]:null,[void 0]:void 0},number:{"":null,[null]:null,[void 0]:void 0,parse:e=>{let t=parseFloat(e);if(isNaN(t))throw new Error(`Invalid number value "${e}"`);return t}},bigint:{"":null,[null]:null,[void 0]:void 0},datetime:{"":null,[null]:null,[void 0]:void 0,parse:e=>{if(e instanceof Date)return e.toISOString();if(typeof e=="string"&&He.utils.isValidTime(e))return e;{let t=new Date(`${e}Z`);if(isNaN(t.getTime())&&(t=new Date(e),isNaN(t.getTime())))throw new Error(`Invalid date value: "${e}"`);return t.toISOString()}}},attachment:{[null]:[],[void 0]:void 0,parse:cY},attachment_single:{"":null},boolean:{"":null,[null]:null,[void 0]:void 0,true:!0,false:!1},auto:{parse:()=>{}},json:{parse:e=>{try{if(typeof e!="string")throw new Error("input was not a string");return e===""?void 0:JSON.parse(e)}catch{return e}}},ai:{},bb_reference_single:{},signature_single:{},internal:{}};var h$e=require("ai");var kv=W(require("dd-trace"));function Lv(e){return e.map(t=>{if(typeof t.content!="string")throw new Error("AI message content must be a string");if(t.role==="tool")throw new Error("AI tool messages are not supported");return{role:t.role,content:t.content}})}o(Lv,"toModelMessages");function lY(e,t){return t.map(r=>e[r]).join(" ")}o(lY,"extractTextFromColumns");function oXt(e,t){let{operation:r,column:n,columns:i,language:s,categories:a,prompt:u}=e;switch(r){case"SUMMARISE_TEXT":return Wt.summarizeText(lY(t,i));case"CLEAN_DATA":return Wt.cleanData(t[n]);case"TRANSLATE":return Wt.translate(t[n],s);case"CATEGORISE_TEXT":if(!a)throw new Error("No categories provided for categorise text operation. Please provide categories.");return Wt.classifyText(lY(t,i),a.split(","));case"SENTIMENT_ANALYSIS":return Wt.sentimentAnalysis(t[n]);case"PROMPT":return new Wt.LLMRequest().addUserMessage(u);case"SEARCH_WEB":return Wt.searchWeb(lY(t,i));default:throw new Error(`Unsupported AI operation: ${r}`)}}o(oXt,"promptForAIOperation");async function sXt(e,t,r){let n=oXt(t,r);return(await(0,h$e.generateText)({model:e.chat,messages:Lv(n.messages),providerOptions:e.providerOptions?.(!1)})).text}o(sXt,"runAIOperation");function Mv(e){return!e.autocolumn||!e.name||e.subtype||(e.name.endsWith("Created By")?e.subtype="createdBy":e.name.endsWith("Updated By")?e.subtype="updatedBy":e.name.endsWith("Created At")?e.subtype="createdAt":e.name.endsWith("Updated At")?e.subtype="updatedAt":e.name.endsWith("Auto ID")&&(e.subtype="autoID")),e}o(Mv,"fixAutoColumnSubType");async function su(e,t,{dynamic:r,contextRows:n}={dynamic:!0}){return kv.default.trace("processFormulas",{},async i=>{let s=Array.isArray(t)?t.length:1;i?.addTags({table_id:e._id,dynamic:r,numRows:s});let a=Array.isArray(t)?t:[t];if(a){await C.ensureSnippetContext();for(let[u,c]of Object.entries(e.schema)){if(c.type!=="formula")continue;let l=c.responseType,f=c.formulaType==="static",d=c.formula;if(f&&a.forEach(p=>{p[u]&&l&&(p[u]=mh(p[u],l))}),!(c.formula==null||r&&f||!r&&!f))for(let p=0;p<a.length;p++){let h=a[p],m=n?n[p]:h;a[p]={...h,[u]:kv.default.trace("processStringSync",{},g=>{g?.addTags({table_id:e._id,column:u,static:f});let y=Tr(d,m);try{return l?mh(y,l):y}catch(b){g?.addTags({coercionError:b.message});return}})}}}}return Array.isArray(t)?a:a[0]})}o(su,"processFormulas");async function m$e(e,t,{contextRows:r}){return Object.values(e.schema).filter(G5).length?kv.default.trace("processAIColumns",{},async i=>{let s=Array.isArray(t)?t.length:1;i?.addTags({table_id:e._id,numRows:s});let a=Array.isArray(t)?t:[t],u=await P.ai.llm.getDefaultLLM();if(a&&u){await C.ensureSnippetContext();let c=Object.values(e.schema).filter(G5),l=a.flatMap((d,p)=>{let h=r?r[p]:d;return c.map(m=>{let g=m.name,y=$X[m.operation];for(let b in m)y[b]==="prompt"&&(m[b]=Tr(m[b],h));return kv.default.trace("processAIColumn",{},async b=>{b?.addTags({table_id:e._id,column:g});let w=await sXt(u,m,d);return{rowIndex:p,columnName:g,value:w}})})});(await Promise.all(l)).forEach(d=>{a[d.rowIndex][d.columnName]=d.value})}return Array.isArray(t)?a:a[0]}):t}o(m$e,"processAIColumns");function fY(e,t){let r=Array.isArray(t)?t:[t],n=[];for(let[i,s]of Object.entries(e.schema))s.type==="datetime"&&(s.dateOnly||!s.timeOnly&&!s.ignoreTimezones&&n.push(i));for(let i of r)for(let s of n)if(i[s]&&typeof i[s]=="string"&&!i[s].endsWith("Z")){let a=new Date(i[s]+"Z");if(isNaN(a.getTime())&&(a=new Date(i[s])),isNaN(a.getTime()))throw new Error(`Invalid date format for column ${s}: ${i[s]}`);i[s]=a.toISOString()}return Array.isArray(t)?r:r[0]}o(fY,"processDates");var Rc=class e{static{o(this,"AttachmentCleanup")}static async coreCleanup(t,r={}){let n=await Promise.resolve(t());if(n.length===0)return;let i=C.getWorkspaceId();if(!F.isProdWorkspaceID(i)){let s=F.getProdWorkspaceID(i);if(await F.dbExists(s)&&(!r.rowId||(n=await e.excludeFilesUsedInProd(r.rowId,n,s,r),n.length===0)))return}await ge.deleteFiles(hr.APPS,n)}static async excludeFilesUsedInProd(t,r,n,i){let{tableId:s,schema:a}=i;if(!s||!a)return r;let c=await F.getDB(n).tryGet(t),l=new Set;if(!c)return r;let f=c;for(let[d,p]of Object.entries(a))e.extractAttachmentKeys(p.type,f[d]).forEach(m=>l.add(m));return r.filter(d=>!l.has(d))}static extractAttachmentKeys(t,r){return t!=="attachment"&&t!=="attachment_single"&&t!=="signature_single"?[]:r?t==="attachment"&&Array.isArray(r)?r.filter(n=>n.key).map(n=>n.key):"key"in r&&r.key?[r.key]:[]:[]}static async tableChange(t,r,n){let i=n.oldTable?.schema||t.schema;return e.coreCleanup(()=>Object.entries(i).reduce((s,[a,u])=>{if(u.type!=="attachment"&&u.type!=="attachment_single"&&u.type!=="signature_single")return s;let c=n.oldTable&&!t.schema[a],l=n.rename?.old===a;return(c&&!l||n.deleting)&&r.forEach(f=>{let d=e.extractAttachmentKeys(u.type,f[a]);s.push(...d)}),s},[]),{tableId:t._id,schema:i})}static async tableDelete(t,r){return e.tableChange(t,r,{deleting:!0})}static async tableUpdate(t,r,n){return e.tableChange(t,r,n)}static async rowDelete(t,r){for(let n of r)await e.coreCleanup(()=>Object.entries(t.schema).reduce((i,[s,a])=>{if(a.type!=="attachment"&&a.type!=="attachment_single"&&a.type!=="signature_single")return i;let u=e.extractAttachmentKeys(a.type,n[s]);return i.concat(u)},[]),{tableId:t._id,schema:t.schema,rowId:n._id})}static async rowUpdate(t,r){await e.coreCleanup(()=>Object.entries(t.schema).reduce((n,[i,s])=>{if(s.type!=="attachment"&&s.type!=="attachment_single"&&s.type!=="signature_single")return n;let a=e.extractAttachmentKeys(s.type,r.oldRow[i]),u=e.extractAttachmentKeys(s.type,r.row[i]),c=a.filter(l=>u.indexOf(l)===-1);return n.concat(c)},[]),{tableId:t._id,schema:t.schema,rowId:r.row._id})}};async function aXt(e,t,r,n){let i=!e,s=t._id===$t.USER_METADATA,a=new Date().toISOString(),u=!r._rev,c=!s&&!n?.reprocessing&&!n?.noAutoRelationships&&!i,l={};if(u){let f=Object.entries(t.schema).filter(([d,p])=>p.autocolumn?Mv(p).subtype==="autoID":!1).map(([d])=>d);f.length&&(l=await p$e(t,f))}for(let[f,d]of Object.entries(t.schema))if(d.autocolumn)switch(d.subtype||(d=Mv(d)),d.subtype){case"createdBy":u&&c&&e&&(r[f]=[e]);break;case"createdAt":u&&(r[f]=a);break;case"updatedBy":c&&e&&(r[f]=[e]);break;case"updatedAt":r[f]=a;break;case"autoID":if(u){let p=l[f];p==null?(d.lastID=d.lastID||0,r[f]=d.lastID+1,d.lastID++):(r[f]=p,d.lastID=p),t.schema[f]=d}break}}o(aXt,"processAutoColumn");async function uXt(e,t){let r={},n=C.getIdentity();if(n?._id&&n.type==="user"){let i=await Ue.user.getUser({userId:n._id});delete i.password,r["Current User"]=i,r.user=i}for(let[i,s]of Object.entries(e.schema)){let a=t[i]==null||t[i]===""||Array.isArray(t[i])&&t[i].length===0;if("default"in s&&s.default!=null&&a){let u;Array.isArray(s.default)?u=s.default.map(c=>Tr(c,r)):typeof s.default=="string"?u=Tr(s.default,r):u=s.default;try{t[i]=mh(u,s.type)}catch(c){throw new V(`Invalid default value for field '${i}' - ${c.message}`,400)}}}}o(uXt,"processDefaultValues");function mh(e,t){return tb[t]?tb[t].hasOwnProperty(e)?tb[t][e]:tb[t].parse?tb[t].parse(e):e:e}o(mh,"coerce");async function da(e,t,r,n){let i=(0,g$e.cloneDeep)(r),s=await gh(t);for(let[a,u]of Object.entries(i)){let c=s.schema[a],l=Pt(s._id)?GX(a):Uf(a);if(!c&&!l&&delete i[a],!!c)if(c.type==="formula"?delete i[a]:i[a]=mh(u,c.type),c.type==="attachment"){let f=i[a];f?.length&&f.forEach(d=>{delete d.url})}else c.type==="attachment_single"||c.type==="signature_single"?i[a]?.url&&delete i[a].url:u&&(c.type==="bb_reference_single"||fe.schema.isDeprecatedSingleUserColumn(c))?i[a]=await u$e(u,c.subtype):u&&c.type==="bb_reference"&&(i[a]=await c$e(u,c.subtype))}return(!i._id||!i._rev)&&(i._id=r._id,i._rev=r._rev),await aXt(e,s,i,n),await uXt(s,i),i}o(da,"inputProcessing");async function zt(e,t,r={squash:!0,preserveLinks:!1,skipBBReferences:!1}){let n,i=!0;t instanceof Array?n=t:(n=[t],i=!1);let s;P.views.isView(e)?s=await P.views.getTable(e.id):s=e;let a=r.preserveLinks?n:await s$e(s.schema,n,{fromRow:r?.fromRow});return!r.squash&&Je.hasCircularStructure(t)&&(r.squash=!0),a=await uY(e,a,r),r.squash&&(a=await qL(e,a)),i?a:a[0]}o(zt,"outputProcessing");async function uY(e,t,r={preserveLinks:!1,skipBBReferences:!1}){let n;P.views.isView(e)?n=await P.views.getTable(e.id):n=e;for(let[s,a]of Object.entries(n.schema))if(a.type==="attachment"||a.type==="attachment_single"||a.type==="signature_single")for(let u of t){if(u[s]==null)continue;let c=o(async l=>(l.key&&(l.url=await ge.getAppFileUrl(l.key)),l),"process");typeof u[s]=="string"&&u[s].length&&(u[s]=JSON.parse(u[s])),Array.isArray(u[s])?await Promise.all(u[s].map(l=>c(l))):await c(u[s])}else if(!r.skipBBReferences&&a.type=="bb_reference")for(let u of t)u[s]=await f$e(u[s],a.subtype);else if(!r.skipBBReferences&&a.type=="bb_reference_single")for(let u of t)u[s]=await l$e(u[s],a.subtype);else if(a.type==="datetime"&&a.timeOnly){for(let u of t)if(u[s]instanceof Date){let c=u[s].getUTCHours().toString().padStart(2,"0"),l=u[s].getUTCMinutes().toString().padStart(2,"0"),f=u[s].getUTCSeconds().toString().padStart(2,"0");u[s]=`${c}:${l}:${f}`}}else if(a.type==="datetime"&&a.dateOnly)for(let u of t){if(typeof u[s]=="string"){let c=u[s];u[s]=new Date(c+"Z"),isNaN(u[s].getTime())&&(u[s]=new Date(c))}u[s]instanceof Date&&(u[s]=u[s].toISOString().slice(0,10))}else if(a.type==="datetime"&&a.ignoreTimezones)for(let u of t){if(typeof u[s]=="string"){let c=u[s];u[s]=new Date(c+"Z"),isNaN(u[s].getTime())&&(u[s]=new Date(c))}u[s]instanceof Date&&(u[s]=u[s].toISOString().replace("Z",""))}else if(a.type==="datetime")for(let u of t)typeof u[s]=="string"&&(u[s]=new Date(u[s])),u[s]instanceof Date&&(u[s]=u[s].toISOString());else if(a.type==="link")for(let u of t)Array.isArray(u[s])&&u[s].length===0&&delete u[s];t=await su(n,t,{dynamic:!0});let i=Pt(n._id);for(let s of t)for(let a of Object.keys(s))if(s[a]===null)delete s[a];else if(s[a]&&n.schema[a]?.type==="link")for(let u of s[a]||[])for(let c of Object.keys(u))u[c]===null&&delete u[c];if(P.views.isView(e)){for(let[s,a]of Object.entries(fe.views.calculationFields(e)))if(!("field"in a&&n.schema[a.field].type==="bigint"))for(let u of t)typeof u[s]=="string"&&(u[s]=parseFloat(u[s]))}if(!WL(n._id)){let s=i?no:Hr,u=[...Object.keys(n.schema).filter(c=>n.schema[c].visible!==!1),...s].map(c=>c.toLowerCase());if(P.views.isView(e)){let c=fe.views.calculationFields(e);for(let l of Object.keys(c))u.push(l.toLowerCase())}for(let c of t)for(let l of Object.keys(c))u.includes(l.toLowerCase())||delete c[l]}return t}o(uY,"coreOutputProcessing");var dY=W(require("validate.js"));dY.default.extend(dY.default.validators.datetime,{parse:function(e){return new Date(e).getTime()},format:function(e){return new Date(e).toISOString()}});async function cXt(e,t,r,n){for(let i of n){let s=t[i.tableName];if(!(!s||!r[i.column]))for(let a of Object.keys(r[i.column])){let u=r[i.column][a];for(let c of Object.values(s.schema))c.type==="link"&&c.tableId===e._id&&(u[c.name]=[r]);u=fY(e,u),u=await su(s,u),r[i.column][a]=u}}return r}o(cXt,"processRelationshipFields");function zn(e){if(e.params?.sourceId){let{sourceId:t}=e.params;return sn(t)?{tableId:Kr(t),viewId:He.utils.encodeViewId(t)}:{tableId:He.utils.encodeTableId(e.params.sourceId)}}if(e.params?.tableId)return{tableId:He.utils.encodeTableId(e.params.tableId)};if(e.request.body?.tableId)return{tableId:He.utils.encodeTableId(e.request.body.tableId)};throw new Error("Unable to find table ID in request")}o(zn,"getSourceId");async function Oc(e){let{tableId:t,viewId:r}=zn(e);return r?P.views.get(r):P.tables.getTable(t)}o(Oc,"getSource");async function gh(e){return P.views.isView(e)?await P.views.getTable(e.id):e}o(gh,"getTableFromSource");function lXt(e,t){for(let r of Object.values(t.schema))r.type==="boolean"&&(e[r.name]===1?e[r.name]=!0:e[r.name]===0&&(e[r.name]=!1));return e}o(lXt,"fixBooleanFields");function y$e(e){return P.views.isView(e)?Object.keys(fe.views.basicFields(e,{visible:!0})):Object.entries(e.schema).filter(([n,i])=>i.visible!==!1).map(([n])=>n)}o(y$e,"getSourceFields");async function $L(e,t,r,n,i){if(!YWe(e))return[];let s,a=!1;P.views.isView(t)?(s=await P.views.getTable(t.id),a=fe.views.isCalculationView(t)):s=t;let u=[];for(let c of e)i?.sqs?c._id=HWe(c,s):c._id==null&&!a&&(c._id=Ac(c,s)),c=await rY({row:c,source:t,tables:Object.values(r),isLinked:!1,sqs:i?.sqs}),c=lXt(c,s),c=await cXt(s,r,c,n),u.push(c);return fY(s,u)}o($L,"sqlOutputProcessing");function WL(e){return e===$t.USER_METADATA}o(WL,"isUserMetadataTable");async function fXt(e,t={},r=!0){let n={};for(let a in e)n[a]=e[a];let i=await yh(n,t,r),s=[];for(let[a,u]of Object.entries(i))s[parseInt(a)]=u;return s}o(fXt,"enrichArrayContext");async function yh(e,t={},r=!0){let n={};if(!e||!t)return n;let i={...t};if(Array.isArray(e))return fXt(e,t,r);for(let s of Object.keys(e)){if(e[s]==null){n[s]=null;continue}typeof e[s]=="object"?n[s]=await yh(e[s],i,r):typeof e[s]=="string"?n[s]=Tr(e[s],i,{noEscaping:!0,noHelpers:!r,escapeNewlines:!0}):n[s]=e[s]}return n}o(yh,"enrichSearchContext");var dXt=W(require("dd-trace"));var{PermissionType:Oun,PermissionLevel:Iun}=Ur;var b$e,rb,nb;var _$e={"bb-component-SuperContainer":"https://github.com/poirazis/bb-component-SuperContainer","bb-component-SuperFieldGroup":"https://github.com/poirazis/bb-component-SuperFieldGroup","bb-component-SuperOdometer":"https://github.com/poirazis/bb-component-SuperOdometer","bb-component-SuperProgressBar":"https://github.com/poirazis/bb-component-SuperProgressBar","bb-component-SuperSideNavigation":"https://github.com/poirazis/bb-component-SuperSideNavigation","bb-component-SuperSliderField":"https://github.com/poirazis/bb-component-SuperSliderField","bb-component-SuperTable":"https://github.com/poirazis/bb-component-SuperTable","bb-component-SuperTableCell":"https://github.com/poirazis/bb-component-SuperTableCell","bb-component-SuperTableColumn":"https://github.com/poirazis/bb-component-SuperTableColumn","bb-component-SuperTabs":"https://github.com/poirazis/bb-component-SuperTabs","bb-plugin-TabContainer":"https://github.com/poirazis/bb-plugin-TabContainer","bb-qr-generator":"https://github.com/ConorWebb96/bb-qr-generator","Budibase-File-Upload":"https://github.com/chungchunwang/Budibase-File-Upload","Budibase-QR-Code-Scanner":"https://github.com/chungchunwang/Budibase-QR-Code-Scanner","budibase-calendar-plugin":"https://github.com/marblekirby/budibase-calendar-plugin","budibase-chartjs":"https://github.com/that-one-tom/budibase-chartjs","budibase-component-accordion":"https://github.com/andz-bb/budibase-component-accordion","budibase-component-camera":"https://github.com/andz-bb/budibase-component-camera","budibase-component-dropdown-list":"https://github.com/sj-distributor/budibase-component-dropdown-list","budibase-component-geolocation":"https://github.com/andz-bb/budibase-component-geolocation","budibase-component-star-rating":"https://github.com/andz-bb/budibase-component-star-rating","budibase-component-tooltip":"https://github.com/andz-bb/budibase-component-tooltip","budibase-csv-import":"https://github.com/mjashanks/budibase-csv-import","budibase-csv-plugin":"https://github.com/max-nopprakorn/budibase-csv-plugin","budibase-fullcalendar":"https://github.com/pixelinfinito/budibase-fullcalendar","budibase-pdf-viewer":"https://github.com/YuanZhang98/budibase-pdf-viewer","budibase-recaptura-v2":"https://github.com/keith-ellis-sillek/budibase-recaptura-v2","budibase-toggle":"https://github.com/YuanZhang98/budibase-toggle",customizable_leaflet_map_bb_plugin:"https://github.com/JayP718/customizable_leaflet_map_bb_plugin","test-component-update":"https://github.com/PClmnt/test-bb-component-update"};async function mXt(e){let n=(await Ee.getGlobalDB().allDocs(F.getPluginParams(null,{include_docs:!0}))).rows.map(i=>i.doc);return n=await ge.enrichPluginURLs(n),e?n.filter(i=>i.schema?.type===e):n}o(mXt,"fetch");function w$e(e){try{let t=e.trim();return t?(t.startsWith("http")||(t=`https://${t}`),t.endsWith("/")&&(t=t.slice(0,-1)),t):void 0}catch(t){console.log("Failed to normalise GitHub URL:",e,t instanceof Error?t.message:String(t));return}}o(w$e,"normaliseGithubUrl");function gXt(e){if(!e)return{};try{let t=w$e(e);if(!t||!t.includes("https://github.com/"))return{};let r=t.replace("https://github.com/","").split("/");if(r.length>=2){let n=r[0],i=r[1];return{repo:`${n}/${i}`,url:`https://github.com/${n}/${i}`}}}catch(t){console.log("Failed to parse GitHub repo:",e,t instanceof Error?t.message:String(t))}return{}}o(gXt,"parseGithubRepo");var yXt=_$e;async function bXt(){let e=Ee.getTenantId();await Ee.doInTenant(e,async()=>{let t=Ee.getGlobalDB(),n=(await t.allDocs(F.getPluginParams(null,{include_docs:!0}))).rows.map(s=>s.doc),i=0;for(let s of n)try{if(!s||s.source!=="Github"||s.origin?.url&&s.origin?.repo)continue;let a=yXt[s.name];if(a){let{repo:u,url:c}=P.plugins.parseGithubRepo(a);if(!u||!c)continue;let l={...s,origin:{source:"github",repo:u,url:c}},f=await t.put(l);s._rev=f.rev,i++}}catch(a){console.log("Plugin origin backfill failed for",s?.name,a instanceof Error?a.message:String(a))}i>0&&console.log(`Backfilled GitHub origin for ${i} plugin(s).`)})}o(bXt,"backfillPluginOrigins");async function _Xt(e,t){let{metadata:r,directory:n}=await PWe(e);if(MP.validate(r.schema),!ne.SELF_HOSTED&&r.schema?.type!=="component")throw new Error("Only component plugins are supported outside of self-host");if(r.schema?.metadata?.svelteMajor!==5&&r.schema?.type==="component")throw new Error("Only Svelte 5 plugins are supported on this branch");let i=await dh.plugins.storePlugin(r,n,t);return b$e?.emit("plugin-update",{name:i.name,hash:i.hash}),i}o(_Xt,"processUploaded");var wXt=o(async e=>{if(!e?.length)return[];let t=e.map(r=>r?._id).filter(r=>typeof r=="string"&&r.length>0);if(!t.length)return e;try{let n=await Ee.getGlobalDB().allDocs({include_docs:!0,keys:t}),i=new Map;for(let s of n?.rows||[]){let a=s?.doc?.schema?.metadata?.svelteMajor;typeof s?.id=="string"&&typeof a=="number"&&i.set(s.id,a)}return e.map(s=>{let a=i.get(s._id);if(typeof a!="number")return s;let u=s.schema||{},c=u?.metadata||{};return{...s,schema:{...u,metadata:{...c,svelteMajor:a}}}})}catch{return e}},"enrichUsedPluginSvelteMajors");var gY={};$(gY,{combineMetadataAndUser:()=>S$e,fetchMetadata:()=>EXt,getUserContextBindings:()=>TXt,rawUserMetadata:()=>mY,syncGlobalUsers:()=>SXt});var E$e=W(require("lodash/isEqual"));function S$e(e,t){let r=Jy(e._id),n=Array.isArray(t)?t.find(s=>s._id===r):t;if(e.roleId==null||e.roleId===_t.BUILTIN_ROLE_IDS.PUBLIC)return n?._id?{...n,_deleted:!0}:null;delete e._rev;let i={...e,_id:r,tableId:$t.USER_METADATA};return n&&(i._rev=n._rev,i.createdAt=n.createdAt,i.updatedAt=n.updatedAt),delete i.password,delete i.forceResetPassword,delete i.roles,n==null||!(0,E$e.default)(i,n)?{...n,...i,createdAt:n?.createdAt??new Date().toISOString(),updatedAt:new Date().toISOString()}:null}o(S$e,"combineMetadataAndUser");async function mY(e){return e||(e=C.getWorkspaceDB()),(await e.allDocs(OL(null,{include_docs:!0}))).rows.map(t=>t.doc)}o(mY,"rawUserMetadata");async function EXt(){let e=await ML(),t=await mY(),r=[];for(let n of e){let i=t.find(s=>s._id.includes(n._id));r.push({...n,...i,tableId:$t.USER_METADATA,_id:Jy(n._id)})}return r}o(EXt,"fetchMetadata");async function SXt(){let e=[C.getDevWorkspaceDB(),C.getProdWorkspaceDB()];for(let t of e){if(!await t.exists())continue;let[r,n]=await Promise.all([ML(),mY(t)]),i=[];for(let a of r){let u=S$e(a,n);u&&i.push(u)}let s=[];for(let a of n){if(!a._id)continue;let u=a.email&&s.indexOf(a.email)!==-1,c=Xy(a._id);(!r.find(l=>l._id===c)||u)&&i.push({...a,_deleted:!0}),a.email&&s.push(a.email)}await t.bulkDocs(i)}}o(SXt,"syncGlobalUsers");function TXt(e){if(!e)return{};let t={_id:e._id,_rev:e._rev,firstName:e.firstName,lastName:e.lastName,email:e.email,status:e.status,roleId:e.roleId,globalId:e.globalId,userId:e.userId};return Ph(e)&&e.oauth2&&(t.oauth2={accessToken:e.oauth2.accessToken,refreshToken:e.oauth2.refreshToken},t.provider=e.provider,t.providerType=e.providerType),t}o(TXt,"getUserContextBindings");var bY={};$(bY,{enrichApps:()=>yY});var yY=o(async e=>{let t=e.filter(n=>n.status==="development").map(n=>n.appId),r=await nb?.getRoomSessions(t);if(r?.length){let n={};return r.forEach(i=>{let s=i.room;s&&(n[s]||(n[s]=[]),n[s].push(i))}),e.map(i=>{let s={...i},a=n[i.appId];return a?.length?s.sessions=a:delete s.sessions,s})}else return e},"enrichApps");var _Y={};$(_Y,{get:()=>vXt});function vXt(e){return C.getWorkspaceDB().get(e)}o(vXt,"get");var T$e={...gY,..._Y,sessions:bY};var m9={};$(m9,{agents:()=>uu,chatApps:()=>Gk,configs:()=>ib,deployments:()=>d9,helpers:()=>p9,llm:()=>BY,rag:()=>Ak,vectorDb:()=>h9});var uu={};$(uu,{buildPromptAndTools:()=>jnr,create:()=>dGe,createAgentFile:()=>GY,duplicate:()=>SZt,fetch:()=>lGe,findIncompleteToolCalls:()=>Z7,formatIncompleteToolCallError:()=>t9,getAgentFileOrThrow:()=>aGe,getAvailableTools:()=>X7,getAvailableToolsMetadata:()=>qnr,getOrThrow:()=>fGe,listAgentFiles:()=>HY,remove:()=>vZt,removeAgentFile:()=>QY,toToolMetadata:()=>o3e,update:()=>TZt,updateAgentFile:()=>VY,updatePendingToolCalls:()=>e9,uploadAgentFile:()=>Ynr});var tGe=require("ai"),rGe=W(require("crypto")),nGe=require("pdf-parse"),iGe=require("yaml");var EY=W(require("crypto")),O$e=require("pg");var v$e=o(e=>`[${e.map(t=>Number(t)||0).join(",")}]`,"vectorLiteral"),A$e="bb_agent_chunks_",R$e=10,RXt=o(e=>{let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,""),r=C.getOrThrowWorkspaceId(),n=F.getProdWorkspaceID(r),i=EY.createHash("sha256").update(`${Ee.getTenantId()}:${n}:${e}`).digest("hex").slice(0,R$e),s=63-A$e.length-1-R$e,a=(t||"agent").slice(0,Math.max(0,s));return`${A$e}${a}_${i}`},"buildAgentTableName"),OXt=o(e=>{let t=e.user?encodeURIComponent(e.user):"",r=e.password?`:${encodeURIComponent(e.password)}`:"";return`postgresql://${t?`${t}${r}@`:""}${e.host}:${e.port}/${e.database}`},"buildPgConnectionString"),I$e=o((e,t)=>new wY({provider:"pgvector",databaseUrl:OXt(e),tableName:RXt(t.agentId)}),"buildPgVectorDbConfig"),wY=class{constructor(t){this.config=t;if(!/^[a-z0-9_]+$/.test(t.tableName))throw new Error("Invalid vector table name");this.tableName=t.tableName}static{o(this,"PgVectorDb")}async withClient(t){let r=new O$e.Client({connectionString:this.config.databaseUrl});await r.connect();try{return await t(r)}finally{await r.end()}}async ensureSchema(t,r){let n=o((i,s)=>`bb_sc_idx_${EY.createHash("sha256").update(`${i}:${s}`).digest("hex").slice(0,20)}`,"buildIndexName");await t.query("CREATE EXTENSION IF NOT EXISTS vector"),await t.query(`
|
|
675
675
|
CREATE TABLE IF NOT EXISTS ${this.tableName} (
|
|
676
676
|
id SERIAL PRIMARY KEY,
|
|
677
677
|
source TEXT NOT NULL,
|