@budibase/server 3.23.27 → 3.23.28
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/builder/assets/{easymde-d7eb70c5.js → easymde-17470746.js} +1 -1
- package/builder/assets/{index-a639220d.js → index-68bd954d.js} +2 -2
- package/builder/index.html +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/query.js +1 -1
- package/dist/query.js.map +2 -2
- package/package.json +2 -2
- package/src/api/controllers/query/import/sources/openapi3.ts +1 -1
- package/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js +2 -2
- package/src/api/routes/tests/queries/rest.spec.ts +2 -2
- package/src/threads/query.ts +1 -2
package/builder/index.html
CHANGED
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
setBackground(theme)
|
|
77
77
|
})()
|
|
78
78
|
</script>
|
|
79
|
-
<script type="module" crossorigin src="/builder/assets/index-
|
|
79
|
+
<script type="module" crossorigin src="/builder/assets/index-68bd954d.js"></script>
|
|
80
80
|
<link rel="stylesheet" href="/builder/assets/index-18eb4d1d.css">
|
|
81
81
|
</head>
|
|
82
82
|
|
package/dist/index.js
CHANGED
|
@@ -1033,7 +1033,7 @@ KF8 6ZS`,"Works Start":"2022-09-23T12:00:00.000","Quote Price":1412,"Quote Date"
|
|
|
1033
1033
|
} catch (e) {
|
|
1034
1034
|
results['${this.runErrorKey}']=e
|
|
1035
1035
|
}
|
|
1036
|
-
`;let r=this.isolate.compileScriptSync(t);r.runSync(this.vm,{timeout:this.invocationTimeout,release:!1}),new Promise(()=>{r.release()});let n=this.getFromContext(this.resultKey);if(n[this.runErrorKey])throw new Pp(n[this.runErrorKey]);return n[this.runResultKey]}close(){this.vm.release(),this.isolate.dispose()}registerCallbacks(t){let r=L1.default.randomUUID().replace(/-/g,""),n={};for(let[a,s]of Object.entries(t)){let u=`f${r}${a}cb`;n[a]=u,this.addToContext({[u]:(...c)=>s(...c)})}return"{"+Object.entries(n).map(([a,s])=>`${a}: ${s}`).join()+"}"}addToContext(t){for(let r in t){let n=t[r];this.jail.setSync(r,typeof n=="function"?n:new lge.default.ExternalCopy(n).copyInto({release:!0}))}}removeFromContext(t){for(let r of t)this.jail.deleteSync(r)}getFromContext(t){let r=this.vm.global.getSync(t,{reference:!0}),n=r.copySync();return new Promise(()=>{r.release()}),n}}});var fge=v(()=>{"use strict";ORt()});async function kRt(e){let{script:t,context:r}=e.request.body,n=new ET;try{e.body=n.withContext(r,()=>n.execute(py(t)))}catch(i){throw i.code===Pp.code?i.userScriptError:i}}var CRt=v(()=>{"use strict";fge();So();o(kRt,"execute")});async function DRt({inputs:e,appId:t,context:r,emitter:n}){if(e.code==null)return{success:!1,response:{message:"Invalid inputs"}};let i=Ra(t,n,{body:{script:e.code,context:r}});try{return await kRt(i),{success:!0,value:i.body}}catch(a){return{success:!1,response:xr(a)}}}var PRt=v(()=>{"use strict";CRt();nu();Yi();o(DRt,"run")});async function NRt({inputs:e,context:t}){let{code:r}=e;if(r==null)return{success:!1,response:{message:"Invalid inputs"}};if(r=r.trim(),!r.startsWith("{{ js "))return{success:!1,response:{message:"Expected code to be a {{ js }} template block"}};try{return{success:!0,value:Ui(e.code,t,{noThrow:!1})}}catch(n){return{success:!1,response:xr(n)}}}var LRt=v(()=>{"use strict";Yi();So();o(NRt,"run")});function gG(){ue.isTest()&&qpe(),dP((e,t)=>FRt.default.trace("runJS",{},()=>{try{let r=N.getCurrentContext(),n=r?.vm||new ET({memoryLimit:ue.JS_RUNNER_MEMORY_LIMIT,invocationTimeout:ue.JS_PER_INVOCATION_TIMEOUT_MS,isolateAccumulatedTimeout:ue.JS_PER_REQUEST_TIMEOUT_MS}).withHelpers().withBuffer().withSnippets(r?.snippets);r&&!r.vm&&(r.vm=n,r.cleanup=r.cleanup||[],r.cleanup.push(()=>n.close()));let{helpers:i,snippets:a,...s}=t;return n.withContext(s,()=>n.execute(e))}catch(r){throw r.message==="Script execution timed out."?new fy:r}})),ue.LOG_JS_ERRORS&&Vpe(e=>{Nt.logWarn(`Error while executing js: ${JSON.stringify((0,URt.serializeError)(e))}`)})}var URt,FRt,dge=v(()=>{"use strict";URt=require("serialize-error");Bt();So();X();FRt=te(require("dd-trace"));fge();o(gG,"init")});async function mge(){return U1||(U1=await Ki.Client.init(Ki.utils.Databases.QUERY_VARS)),U1}function hge(e,t){return`${e}${J.SEPARATOR}${t}`}function Mrn(){if(ue.isTest()||ue.DISABLE_THREADING||!ue.isInThread()){console.debug(`[${ue.FORKED_PROCESS_NAME}] thread setup skipped`);return}console.debug(`[${ue.FORKED_PROCESS_NAME}] thread setup running`),gG(),q4()}async function Brn(e,t){return(await mge()).get(hge(e,t))}async function F1(e){let t=await mge();await Promise.all(e.map(r=>t.delete(hge(r.queryId,r.name))))}async function jrn(e,t,r){await(await mge()).store(hge(e,t),r,Frn)}function qrn(e){if(typeof e=="string")try{e=JSON.parse(e)}catch{e={response:e}}return e}function $rn(e){return typeof e=="object"&&!Array.isArray(e)&&e&&e.data!=null&&e.info!=null}var Frn,U1,BRt,yG=v(()=>{"use strict";Bt();Uue();X();dge();Frn=3600,U1=null;o(mge,"getClient");process.on("exit",async()=>{U1&&await U1.finish()});o(hge,"makeVariableKey");o(Mrn,"threadSetup");o(Brn,"getCachedVariable");o(F1,"invalidateCachedVariable");o(jrn,"storeDynamicVariable");o(qrn,"formatResponse");o($rn,"hasExtraData");BRt={hasExtraData:$rn,formatResponse:qrn,storeDynamicVariable:jrn,invalidateCachedVariable:F1,getCachedVariable:Brn,threadSetup:Mrn}});async function qRt(e){e.body=await k.datasources.fetch()}async function $Rt(e){let{datasource:t}=e.request.body,r=await k.datasources.getAndMergeDatasource(t),n=await k.datasources.getConnector(r);n.testConnection||e.throw(400,"Connection information verification not supported");let i=await n.testConnection();e.body={connected:i.connected,error:i.error}}async function WRt(e){let{datasource:t}=e.request.body,r=await k.datasources.getAndMergeDatasource(t),n=await k.datasources.getConnector(r);n.getTableNames||e.throw(400,"Table name fetching not supported by datasource");let i=await n.getTableNames();e.body={tableNames:i.sort()}}async function GRt(e){let{datasource:t}=e.request.body,r=[],n;try{let i=await k.datasources.getAndMergeDatasource(t),a=await k.datasources.getConnector(i);a.getViewNames?r=await a.getViewNames():n="View fetching not supported by datasource"}catch(i){n=i.message||"Unknown error"}e.body={views:r.sort(),error:n}}async function zRt(e){let t=e.params.datasourceId,r=e.request.body.tablesFilter,{datasource:n,errors:i}=await k.datasources.buildSchemaFromSource(t,r);e.body={datasource:await k.datasources.removeSecretSingle(n),errors:i}}async function Wrn(e,t){let r=e.config?.dynamicVariables||[],n=t.config?.dynamicVariables||[],i=[];r&&(n?r.forEach(a=>{n.find(u=>a.name===u.name&&a.queryId===u.queryId&&a.value===u.value)||i.push(a)}):i.push(...r),await F1(i))}async function VRt(e){let t=N.getWorkspaceDB(),r=e.params.datasourceId,n=await k.datasources.get(r);await Wrn(n,e.request.body);let a=n.type===J.BUDIBASE_DATASOURCE_TYPE?{name:e.request.body?.name,type:J.BUDIBASE_DATASOURCE_TYPE,source:"BUDIBASE"}:e.request.body,s={...n,...k.datasources.mergeConfigs(a,n)},u=n.config?.auth;u&&!e.request.body.auth&&(s.config.auth=u),s.source==="REST"&&!k.datasources.areRESTVariablesValid(s)&&e.throw(400,"Duplicate dynamic/static variable names are invalid.");let c=await t.put(k.tables.populateExternalTableSchemas(s));if(await Oe.datasource.updated(s),s._rev=c.rev,e.message="Datasource saved successfully.",e.body={datasource:await k.datasources.removeSecretSingle(k.datasources.addDatasourceFlags(s))},Sr?.emitDatasourceUpdate(e,s),s.entities)for(let l of Object.values(s.entities)){let p=n.entities?.[l.name];(!p||!(0,jRt.isEqual)(p,l))&&(l=await Sl(l),Sr?.emitTableUpdate(e,l,{includeOriginator:!0}))}}async function bG(e){let{datasource:t,fetchSchema:r,tablesFilter:n}=e.request.body,{datasource:i,errors:a}=await k.datasources.save(t,{fetchSchema:r,tablesFilter:n});e.body={datasource:await k.datasources.removeSecretSingle(k.datasources.addDatasourceFlags(i)),errors:a},Sr?.emitDatasourceUpdate(e,i)}async function Grn(e){let n=(await N.getWorkspaceDB().allDocs(Qm(null,{include_docs:!0}))).rows.reduce((a,s)=>(s.doc?.sourceId==e&&a.push(s.doc),a),[]);function i(a){for(let s of a)n.forEach(u=>{u._id===s.tableId&&(u._rev=s.tableRev)})}o(i,"updateRevisions");for(let a of n){let s=await k.tables.internal.destroy(a),u=Object.values(s.table.schema).filter(c=>c.type==="link").map(c=>c);i(u)}}async function HRt(e){let t=N.getWorkspaceDB(),r=e.params.datasourceId,n=await k.datasources.get(r);if(await k.rowActions.deleteAllForDatasource(r),n.type===J.BUDIBASE_DATASOURCE_TYPE)await Grn(r);else{let i=await t.allDocs(YW(r));await t.bulkDocs(i.rows.map(a=>({_id:a.id,_rev:a.value.rev,_deleted:!0})))}await t.remove(r,e.params.revId),await Oe.datasource.deleted(n),e.body={message:"Datasource deleted."},Sr?.emitDatasourceDeletion(e,r)}async function KRt(e){let t=await k.datasources.get(e.params.datasourceId);e.body=await k.datasources.removeSecretSingle(t)}async function QRt(e){let t=await k.datasources.get(e.params.datasourceId),r=await k.datasources.getAndMergeDatasource(t),n=await k.datasources.getConnector(r);n.getExternalSchema||e.throw(400,"Datasource does not support exporting external schema");try{e.body={schema:await n.getExternalSchema()}}catch(i){e.throw(400,i.message)}}var jRt,gge=v(()=>{"use strict";X();V();jRt=require("lodash");dt();We();ky();yG();Ta();o(qRt,"fetch");o($Rt,"verify");o(WRt,"information");o(GRt,"viewInformation");o(zRt,"buildSchemaFromSource");o(Wrn,"invalidateVariables");o(VRt,"update");o(bG,"save");o(Grn,"destroyInternalTablesBySourceId");o(HRt,"destroy");o(KRt,"find");o(QRt,"getExternalSchema")});function YRt(){return{_id:M1,_rev:M1,fields:Cs.default.object().required(),datasourceId:Cs.default.string().required(),readable:Cs.default.boolean(),parameters:Cs.default.array().items(Cs.default.object({name:Cs.default.string(),default:Cs.default.string().allow("")})),queryVerb:Cs.default.string().required(),extra:Cs.default.object().optional(),schema:Cs.default.object({}).required().unknown(!0),transformer:M1,flags:Cs.default.object().optional(),queryId:M1}}function yge(){return Cs.default.object({...YRt(),name:Cs.default.string().required()}).unknown(!0)}function JRt(){return Et.joiValidator.body(yge())}function XRt(){return Et.joiValidator.body(Cs.default.object({...YRt(),name:M1}).unknown(!0))}var Cs,M1,bge=v(()=>{"use strict";X();Cs=te(require("joi")),M1=Cs.default.string().optional().allow(null).allow("");o(YRt,"baseQueryValidation");o(yge,"queryValidation");o(JRt,"generateQueryValidation");o(XRt,"generateQueryPreviewValidation")});var xge,Vrn,Hrn,ZRt,Krn,tIt,Qrn,Yrn,ST,Ny,vge,Jrn,vG,rIt,B1,wge,wG,Bp,_ge,Ege,_G,j1,nIt,Xrn,eIt,Sge,iIt,Zrn,oIt,EG=v(()=>{"use strict";xge="__BUDIBASE_BINDING__",Vrn=new RegExp(`"${xge}(string|integer|number|boolean)__([A-Za-z0-9_]+)__"`,"g"),Hrn=new RegExp(`${xge}(string|integer|number|boolean)__([A-Za-z0-9_]+)__`),ZRt=o(e=>e.replace(/[^A-Za-z0-9_]/g,"_"),"sanitizeSegment"),Krn=o(e=>!e||typeof e!="object"?!1:"$ref"in e,"isReferenceObject"),tIt=o(e=>{if(!(!e||Krn(e)))return e},"toSchemaObject"),Qrn=o(e=>{let t=e.slice(1).map(n=>ZRt(n)).filter(n=>n&&n!=="item");if(t.length===0){let n=e[e.length-1]??"value";t.push(ZRt(n)||"value")}let r=t.join("_")||"value";return/^[0-9]/.test(r)?`_${r}`:r},"buildBindingName"),Yrn=o((e,t)=>({toJSON(){return`${xge}${t}__${e}__`}}),"createBindingPlaceholder"),ST=o(e=>{switch(e){case"boolean":return"false";case"integer":case"number":return"0";default:return""}},"defaultValueForType"),Ny=o(e=>{let t=tIt(e);if(t){if(Array.isArray(t.allOf)&&t.allOf.length>0){let r=t.allOf.reduce((n,i)=>{let a=Ny(i);if(!a)return n;if(!n)return{...a};let s={...n},u={...vG(n),...vG(a)};Object.keys(u).length>0&&(s.properties=u);let c=n.required??[],l=a.required??[],p=new Set([...c,...l]);return p.size>0&&(s.required=Array.from(p)),!s.type&&a.type&&(s.type=a.type),s.items===void 0&&a.items!==void 0&&(s.items=a.items),s},void 0);if(r)return r}if(Array.isArray(t.oneOf)){let[r]=t.oneOf;if(r)return Ny(r)}if(Array.isArray(t.anyOf)){let[r]=t.anyOf;if(r)return Ny(r)}return t}},"pickSchema"),vge=o(e=>{if(!e)return;let{type:t}=e;if(Array.isArray(t))return t[0];if(!t){if(Object.keys(vG(e)).length>0)return"object";if(rIt(e))return"array"}return typeof t=="string"?t:void 0},"getSchemaType"),Jrn=o(e=>e?.required?Array.isArray(e.required)?[...e.required]:[]:[],"getRequiredProperties"),vG=o(e=>{if(!e?.properties)return{};let t=Object.entries(e.properties),r={};for(let[n,i]of t){let a=tIt(i);a&&(r[n]=a)}return r},"getProperties"),rIt=o(e=>{if(!e)return;let t=e.items;if(t){if(Array.isArray(t)){let r=t;for(let n of r){let i=Ny(n);if(i)return i}return}return Ny(t)}},"getItemsSchema"),B1=o(e=>e==="integer"||e==="number"||e==="boolean"?e:"string","normalisePrimitiveType"),wge=o((e,t)=>{if(e){if(e.example!==void 0&&e.example!==null)return String(e.example);if(e.default!==void 0&&e.default!==null)return String(e.default);let r=e.enum;if(Array.isArray(r)&&r.length>0){let[n]=r;if(n!=null)return String(n)}}return ST(t)},"getPrimitiveDefaultFromSchema"),wG=o((e,t)=>{for(let[r,n]of Object.entries(t))r in e||(e[r]=n)},"mergeBindings"),Bp=o((e,t,r)=>{let n=Qrn(e);return{value:Yrn(n,t),bindings:{[n]:r}}},"createPrimitiveBindingResult"),_ge=o((e,t,r,n,i)=>{let{totalLimit:a=12}=i,s=Ny(e);if(!s){let p=B1(void 0);return Bp(t,p,ST(p))}if(n.has(s)){let p=B1(vge(s));return Bp(t,p,wge(s,p))}if(r>5){let p=B1(vge(s));return Bp(t,p,wge(s,p))}n.add(s);let u=vge(s);if(u==="object"){let p=vG(s),f=Object.keys(p);if(f.length===0)return n.delete(s),{value:{},bindings:{}};let d=Jrn(s).filter(E=>f.includes(E)),m=f.filter(E=>!d.includes(E)),h=[];if(m.length>0){let E=Math.max(a-d.length,0);E>0&&(h=m.slice(0,E))}let g=[...d,...h],y=new Set(g);g=Array.from(y),g.length===0&&(g=f.slice(0,1));let b={},w={};for(let E of g){let A=Ny(p[E]),T=_ge(A,[...t,E],r+1,n,i);if(T.value===void 0){let O=Bp([...t,E],"string",ST("string"));b[E]=O.value,wG(w,O.bindings)}else b[E]=T.value,wG(w,T.bindings)}return n.delete(s),{value:b,bindings:w}}if(u==="array"){let p=rIt(s),f=_ge(p,[...t,"item"],r+1,n,i),d=f.value===void 0?[]:[f.value];return n.delete(s),{value:d,bindings:f.bindings}}let c=B1(u),l=Bp(t,c,wge(s,c));return n.delete(s),l},"buildFromSchema"),Ege=o((e,t,r,n)=>{if(r>5)return Bp(t,"string",ST("string"));if(e==null||typeof e=="bigint"||typeof e=="symbol"||typeof e=="function")return{value:e,bindings:{}};if(typeof e=="string")return Bp(t,"string",e);if(typeof e=="number")return Bp(t,"number",String(e));if(typeof e=="boolean")return Bp(t,"boolean",e?"true":"false");if(typeof e!="object")return{value:e,bindings:{}};let i=e;if(n.has(i))return Bp(t,"string",ST("string"));if(n.add(i),Array.isArray(e)){if(e.length===0)return n.delete(i),{value:[],bindings:{}};let c=Ege(e[0],[...t,"item"],r+1,n);return n.delete(i),{value:c.value===void 0?[]:[c.value],bindings:c.bindings}}let a={},s={},u=e;for(let[c,l]of Object.entries(u)){let p=Ege(l,[...t,c],r+1,n);p.value!==void 0?a[c]=p.value:a[c]=l,wG(s,p.bindings)}return n.delete(i),{value:a,bindings:s}},"buildFromExample"),_G=o((e,t="body",r={})=>{let n=Ny(e);if(!n)return;let i=new Set,a={totalLimit:r.totalLimit??12},s=_ge(n,[t],0,i,a);if(s.value!==void 0)return{body:s.value,bindings:s.bindings}},"generateRequestBodyFromSchema"),j1=o((e,t="body")=>{if(e===void 0)return;let n=Ege(e,[t],0,new WeakSet);if(n.value!==void 0)return{body:n.value,bindings:n.bindings}},"generateRequestBodyFromExample"),nIt=o(e=>{if(e===void 0)return;if(typeof e=="string")return e;let t=JSON.stringify(e,null,2);if(typeof t=="string")return t.replace(Vrn,(r,n,i)=>{let a=`{{ ${i} }}`;return n==="string"?`"${a}"`:a})},"serialiseRequestBody"),Xrn=o(e=>{if(!e||typeof e!="object")return;let t=e;if(typeof t.toJSON!="function")return;let r=t.toJSON();if(typeof r!="string")return;let n=r.match(Hrn);if(n)return n[2]},"extractBindingFromPlaceholder"),eIt=o(e=>{if(e.length===0)return"";let[t,...r]=e,n=t;for(let i of r){if(i==="item"){n+="[]";continue}n+=`[${i}]`}return n},"buildFormKey"),Sge=o((e,t,r)=>{if(e==null)return;if(Array.isArray(e)){e.forEach(a=>Sge(a,[...t,"item"],r));return}let n=Xrn(e);if(n){let a=eIt(t);a&&(r[a]=`{{ ${n} }}`);return}if(typeof e=="object"){for(let[a,s]of Object.entries(e))Sge(s,[...t,a],r);return}let i=eIt(t);i&&(r[i]=String(e))},"collectKeyValuePairs"),iIt=o(e=>{if(!e||typeof e!="object")return;let t={};for(let[r,n]of Object.entries(e))Sge(n,[r],t);if(Object.keys(t).length!==0)return t},"buildKeyValueRequestBody"),Zrn=o(e=>e.type?e:{...e,type:"string"},"toFormDataParameter"),oIt=o(e=>{if(!Array.isArray(e)||e.length===0)return;let t={},r={};for(let n of e){let i=Zrn(n);if(!i?.name)continue;let a=B1(i.type),s=i.default?String(i.default):ST(a),{value:u,bindings:c}=Bp(["form",i.name],a,s);t[i.name]=u,wG(r,c)}if(Object.keys(t).length!==0)return{body:t,bindings:r}},"buildRequestBodyFromFormDataParameters")});var Age,xT,Tge=v(()=>{"use strict";V();EG();Age=(a=>(a.get="read",a.post="create",a.put="update",a.patch="patch",a.delete="delete",a))(Age||{}),xT=class{constructor(){this.buildEndpointId=(t,r)=>`${this.normalizeMethod(t)||t.toLowerCase()}::${r}`;this.convertPathVariables=t=>t&&t.replace(/\{([^{}]+)\}/g,(r,n)=>{let i=n.trim(),a=i.match(/^[A-Za-z0-9._-]+/);return`{{${a?a[0]:i}}}`});this.normalizeMethod=t=>{if(t)return t.toLowerCase()};this.isSupportedMethod=t=>{let r=this.normalizeMethod(t);return r?Object.prototype.hasOwnProperty.call(Age,r):!1};this.methodHasRequestBody=t=>{let r=this.normalizeMethod(t);return r?["post","put","patch"].includes(r):!1};this.bodyTypeFromMimeType=t=>{if(!t)return"json";let r=t.split(";")[0].trim().toLowerCase();return r==="application/x-www-form-urlencoded"?"encoded":r==="multipart/form-data"?"form":r==="text/plain"||r.startsWith("text/")?"text":r==="application/xml"||r==="text/xml"||r.endsWith("+xml")?"xml":r.endsWith("+json")||r==="application/json"?"json":"json"};this.constructQuery=(t,r,n,i,a,s,u={},c=[],l=void 0,p={},f)=>{let m=this.verbFromMethod(n),h="return data",g={};if(i=this.processPath(i),a)if(typeof a=="string"){let T=this.convertPathVariables(a);T.endsWith("/")&&(T=T.slice(0,-1)),i=i?`${T}/${i}`:T}else{let T=a.href;T.endsWith("/")&&(T=T.slice(0,-1)),i=i?`${T}/${i}`:T}s=this.processQuery(s);let y=[...c];for(let[T,O]of Object.entries(p))!T||y.find(P=>P.name===T)||y.push({name:T,default:O});let b,w,E=o(T=>T==="form"||T==="encoded","isKeyValueBodyType");return E(f)?(b=iIt(l),(!b||Object.keys(b).length===0)&&l&&(b=Object.keys(p).reduce((T,O)=>(T[O]=`{{ ${O} }}`,T),{})),w=f):(b=nIt(l),w=f||(b?"json":"none")),(!b||typeof b=="object"&&Object.keys(b).length===0)&&E(f)&&(b=void 0),b===void 0&&(w="none"),{datasourceId:t,name:r,parameters:y,fields:{headers:u,queryString:s,path:i,requestBody:b,bodyType:w},transformer:h,schema:g,readable:!0,queryVerb:m}};this.verbFromMethod=t=>{let r=this.normalizeMethod(t);if(!r)throw new Error(`Unsupported method: ${t}`);return Age[r]};this.processPath=t=>(t?.startsWith("/")&&(t=t.substring(1)),t=this.convertPathVariables(t),t);this.processQuery=t=>t?.startsWith("?")?t.substring(1):t}static{o(this,"ImportSource")}}});var aIt,enn,tnn,rnn,nnn,SG,sIt=v(()=>{"use strict";Tge();aIt=require("url"),enn=require("curlconverter"),tnn=o(e=>{let t=enn.toJsonString(e);return JSON.parse(t)},"parseCurl"),rnn=o(e=>{if(e.data){let t=Object.keys(e.data);if(t.length){let r=t[0];try{return r.startsWith("$")&&(r=r.substring(1)),JSON.parse(r)}catch{}}}},"parseBody"),nnn=o(e=>e.cookies?Object.entries(e.cookies).reduce((t,r)=>{let[n,i]=r;return t+`${n}=${i}; `},""):null,"parseCookie"),SG=class extends xT{constructor(){super(...arguments);this.isSupported=async r=>{try{this.curl=tnn(r)}catch{return!1}return!0};this.getUrl=()=>new aIt.URL(this.curl.raw_url);this.getInfo=async()=>{let r=this.getUrl(),n=this.curl.method,i=r.pathname;return{name:r.hostname,url:r.origin,endpoints:[{id:this.buildEndpointId(n,i),name:i||r.hostname,method:n?.toUpperCase(),path:i,description:this.curl.description,queryVerb:this.verbFromMethod(n)}]}};this.getQueries=async(r,n)=>{let i=this.getUrl(),a=i.pathname,s=i.origin+i.pathname,u=this.curl.method,c=i.search,l=this.curl.headers,p=rnn(this.curl),f=n?.filterIds,d=this.buildEndpointId(u,i.pathname);if(f&&!f.has(d))return[];let m=nnn(this.curl);return m&&(l.Cookie=m),[this.constructQuery(r,a,u,s,void 0,c,l,[],p)]}}static{o(this,"Curl")}getImportSource(){return"curl"}}});var xG,uIt,cIt,inn,onn,AT,Rge=v(()=>{"use strict";xG=te(require("@apidevtools/swagger-parser")),uIt=require("js-yaml"),cIt=te(require("lodash/isObject"));Tge();inn=o(e=>!!(0,cIt.default)(e),"isYamlDocument"),onn=o(e=>{let t=e.trim();if(!t)throw new Error("Empty OpenAPI document");try{let r=(0,uIt.load)(t);if(inn(r))return r}catch{}return e},"prepareDocument"),AT=class extends xT{constructor(){super(...arguments);this.parseData=async r=>{let n={resolve:{external:!1}},i=onn(r),a=await xG.default.parse(i,n);try{return await xG.default.validate(a)}catch{return console.log("[OpenAPI Import] Schema validation failed, continuing without validation"),await xG.default.dereference(a,n)}}}static{o(this,"OpenAPISource")}}});var pIt,fIt,ann,snn,unn,cnn,lIt,AG,dIt=v(()=>{"use strict";pIt=require("openapi-types");Rge();fIt=require("url");EG();ann=o(e=>!0,"parameterNotRef"),snn=o(e=>e.swagger==="2.0","isOpenAPI2"),unn=Object.values(pIt.OpenAPIV2.HttpMethods),cnn=o((e,t)=>unn.includes(e),"isOperation"),lIt=o((e,t)=>!cnn(e,t),"isParameter"),AG=class extends AT{constructor(){super(...arguments);this.isSupported=async r=>{try{let n=await this.parseData(r);return snn(n)?(this.document=n,!0):!1}catch{return!1}};this.getUrl=()=>{let r=this.document.schemes?.includes("https")?"https":"http",n=this.document.basePath||"",i=this.document.host;if(!i)return;let a=n?n.startsWith("/")?n:`/${n}`:"";try{return new fIt.URL(`${r}://${i}${a}`)}catch{return}};this.getEndpoints=()=>{let r=[];for(let[n,i]of Object.entries(this.document.paths))for(let[a,s]of Object.entries(i||{})){if(lIt(a,s))continue;let u=a;if(!this.isSupportedMethod(u))continue;let c=s,l=c.operationId||n;r.push({id:this.buildEndpointId(u,n),name:l,method:u.toUpperCase(),path:n,description:c.summary||c.description,queryVerb:this.verbFromMethod(u)})}return r};this.getInfo=async()=>{let r=this.document.info.title||"Swagger Import",n=this.getUrl()?.href,i=n?this.convertPathVariables(n):void 0,a=this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;return{name:r,url:i,docsUrl:a,endpoints:this.getEndpoints()}};this.getQueries=async(r,n)=>{let i=this.getUrl(),a=[],s=n?.filterIds;for(let[u,c]of Object.entries(this.document.paths)){let l=[];for(let[p,f]of Object.entries(c)){if(lIt(p,f)){let D=f;l.push(...D);continue}let d=f,m=p;if(!this.isSupportedMethod(m))continue;let h=this.buildEndpointId(m,u);if(s&&!s.has(h))continue;let g=d.operationId||u,y="",b={},w,E,A=[];d.consumes&&(w=d.consumes[0],b["Content-Type"]=w);let T=[],O=d.parameters||[],I=[...l,...O];for(let D of I)if(ann(D)){switch(D.in){case"query":{let B="";y&&(B="&"),y=`${y}${B}${D.name}={{${D.name}}}`;break}case"header":b[D.name]=`{{${D.name}}}`;break;case"path":break;case"formData":T.push({...D,in:"formData"});break;case"body":{let B=D,j=B.schema;if(j)if(j.example!==void 0)E=j1(j.example,B.name||"body");else{let Q=_G(j,B.name||"body");Q!==void 0&&(E=Q)}break}}["query","header","path","formData"].includes(D.in)&&A.push({name:D.name,default:D.default||""})}if(!E&&T.length>0){let D=oIt(T);D&&(E=D,w||(w=T.some(B=>B.type==="file")?"multipart/form-data":"application/x-www-form-urlencoded"),w&&(b["Content-Type"]=w))}let P=this.constructQuery(r,g,m,u,i,y,b,A,E?.body,E?.bindings??{},w?this.bodyTypeFromMimeType(w):void 0);a.push(P)}}return a}}static{o(this,"OpenAPI2")}getImportSource(){return"openapi2.0"}}});var hIt,lnn,gIt,yIt,pnn,fnn,dnn,mIt,mnn,bIt,TG,vIt=v(()=>{"use strict";hIt=require("openapi-types");Rge();EG();lnn=o(e=>!0,"parameterNotRef"),gIt=o(e=>e!==void 0,"requestBodyNotRef"),yIt=o(e=>e!==void 0,"schemaNotRef"),pnn=o(e=>{if(!("openapi"in e))return!1;let{openapi:t}=e;return t.startsWith("3.")},"isOpenAPI3"),fnn=Object.values(hIt.OpenAPIV3.HttpMethods),dnn=o((e,t)=>fnn.includes(e),"isOperation"),mIt=o((e,t)=>!dnn(e,t),"isParameter"),mnn=o((e,t,r)=>{if(gIt(e.requestBody)){let n=e.requestBody,i=bIt(e),a=r||i[0];if(a){let s=n.content[a];if(!s)return;if(s.example)return j1(s.example,t);if(yIt(s.schema)){let u=s.schema;return u.example?j1(u.example,t):_G(u,t)}}}},"getRequestBody"),bIt=o(e=>{if(gIt(e.requestBody)){let t=e.requestBody;return Object.keys(t.content)}return[]},"getMimeTypes"),TG=class extends AT{constructor(){super(...arguments);this.serverVariableBindings={};this.getPrimaryServer=()=>{if(this.document?.servers?.length)return this.document.servers[0]};this.setServerVariableBindings=r=>{this.serverVariableBindings={};let n=r?.variables||{};for(let[i,a]of Object.entries(n))this.serverVariableBindings[i]=a?.default||""};this.isSupported=async r=>{try{let n=await this.parseData(r);return pnn(n)?(this.document=n,this.serverVariableBindings={},!0):!1}catch{return!1}};this.getServerVariableBindings=()=>(Object.keys(this.serverVariableBindings).length||this.setServerVariableBindings(this.getPrimaryServer()),{...this.serverVariableBindings});this.getEndpoints=()=>{let r=[];for(let[n,i]of Object.entries(this.document.paths))if(i)for(let[a,s]of Object.entries(i)){if(mIt(a,s))continue;let u=a;if(!this.isSupportedMethod(u))continue;let c=s,l=c.operationId||n;r.push({id:this.buildEndpointId(u,n),name:l,method:u.toUpperCase(),path:n,description:c.summary||c.description,queryVerb:this.verbFromMethod(u)})}return r};this.getInfo=async()=>{let r=this.document.info.title||"OpenAPI Import",n;if(this.document.servers?.length){let a=this.document.servers[0]?.url;n=a?this.convertPathVariables(a):void 0}let i=this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;return{name:r,url:n,docsUrl:i,endpoints:this.getEndpoints()}};this.getQueries=async(r,n)=>{let i,a={},s=this.getPrimaryServer();s&&(i=s.url,a=s.variables||{}),this.setServerVariableBindings(s);let u=[],c=n?.filterIds,l=n?.staticVariables||{};for(let[p,f]of Object.entries(this.document.paths)){let d=[];if(f)for(let[m,h]of Object.entries(f)){if(mIt(m,h)){let F=h;d.push(...F);continue}let g=h,y=m;if(!this.isSupportedMethod(y))continue;let b=this.buildEndpointId(y,p);if(c&&!c.has(b))continue;let w=g.operationId||p,E="",A={},T=bIt(g),O=T[0],I=this.methodHasRequestBody(y)?mnn(g,g.operationId||p,O):void 0,P=[],D=o((F,Z="")=>{P.some(W=>W.name===F)||P.push({name:F,default:Z})},"ensureParameter");O&&(A["Content-Type"]=O);let B=g.parameters||[],j=[...d,...B];for(let F of j)if(lnn(F)){switch(F.in){case"query":{let Z="";E&&(Z="&"),E=`${E}${Z}${F.name}={{${F.name}}}`;break}case"header":A[F.name]=`{{${F.name}}}`;break;case"path":break;case"formData":break}if(["query","header","path"].includes(F.in)){let Z="";yIt(F.schema)&&F.schema.default&&(Z=String(F.schema.default)),D(F.name,Z)}}for(let[F,Z]of Object.entries(a)){let Y=Object.prototype.hasOwnProperty.call(l,F)?`{{ Datasource.Static.${F} }}`:Z?.default??"";D(F,Y)}let Q=this.constructQuery(r,w,y,p,i,E,A,P,I?.body,I?.bindings??{},T.length>0?this.bodyTypeFromMimeType(O):void 0);u.push(Q)}}return u}}static{o(this,"OpenAPI3")}getImportSource(){return"openapi3.0"}}});var hnn,q1,wIt=v(()=>{"use strict";dt();bge();sIt();dIt();vIt();X();hnn=o((e,t,r)=>{let n=!1;for(let i of t)e[i]==null&&(e[i]=r[i]??"",n=!0);return n},"assignStaticVariableDefaults"),q1=class{constructor(t){this.init=async()=>{for(let t of this.sources)if(await t.isSupported(this.data)){this.source=t;break}};this.getInfo=async()=>this.source.getInfo();this.importQueries=async(t,r)=>{let n=r?new Set([r]):void 0,i=await this.getDatasourceStaticVariables(t),a=await this.source.getQueries(t,{filterIds:n,staticVariables:i});if(n&&a.length===0)throw new Error("Selected endpoint could not be imported");let s=[],u=yge();a=a.filter(g=>u.validate(g).error?(s.push(g),!1):!0).map(g=>(g._id=QW(g.datasourceId),g));let c=N.getWorkspaceDB(),l=await c.bulkDocs(a),p=a.reduce((g,y)=>(y._id&&(g[y._id]=y),g),{});l.forEach(g=>{g.ok||(s.push(p[g.id]),delete p[g.id])});let f=Object.values(p),d=f.length,m=this.source.getImportSource(),h=await c.get(t);await Oe.query.imported(h,m,d);for(let g of f)await Oe.query.created(h,g);return{errorQueries:s,queries:f}};this.prepareDatasourceConfig=t=>{if(!t)return;let r=t.config||(t.config={}),n=this.getStaticServerVariables(),i=Object.keys(n||{}).filter(Boolean);if(!i.length)return;r.staticVariables=r.staticVariables||{},hnn(r.staticVariables,i,n);let a=new Set(r.templateStaticVariables||[]);i.forEach(s=>a.add(s)),r.templateStaticVariables=Array.from(a)};this.getStaticServerVariables=()=>{let t=this.source;return t&&typeof t.getServerVariableBindings=="function"?t.getServerVariableBindings():{}};this.data=t,this.sources=[new AG,new TG,new SG]}static{o(this,"RestImporter")}async getDatasourceStaticVariables(t){if(!t)return{};let r=N.getWorkspaceDB(),n;try{n=await r.get(t)}catch{return{}}let i=n?.config?.staticVariables;return!i||typeof i!="object"?{}:{...i}}}});function SIt(e){let t=(0,$1.cloneDeep)(e);return delete t.roles,delete t.account,delete t.license,t}function gnn(e){for(let t of Object.entries(e)){let[r,n]=t;if(typeof n=="string"&&bl(n).length!==0)throw new Error(`Parameter '${r}' input contains a handlebars binding - this is not allowed.`)}}async function RG(e){e.body=await k.queries.fetch()}async function TIt(e){let t=await xIt(e,e.request.body),r=new q1(t);await r.init();let n=await r.getInfo();e.body={name:n.name,url:n.url,docsUrl:n.docsUrl,endpoints:n.endpoints||[]}}async function RIt(e){let t=N.getWorkspaceDB(),r=e.request.body;r?.name.match(yxe)||e.throw(400,"Invalid query name");let n=await k.datasources.get(r.datasourceId),i;!r._id&&!r._rev?(r._id=QW(r.datasourceId),r.nullDefaultSupport=!0,i=o(()=>Oe.query.created(n,r),"eventFn")):((await t.get(r._id)).nullDefaultSupport&&r.nullDefaultSupport==null&&(r.nullDefaultSupport=!0),i=o(()=>Oe.query.updated(n,r),"eventFn"));let a=await t.put(r);await i(),r._rev=a.rev,e.body=r}async function IIt(e){let t=e.params.queryId;e.body=await k.queries.find(t)}function ynn(e){if(e.user.providerType==="oidc")return Ot.getCookie(e,ur.Cookie.OIDC_CONFIG)}function OIt(e){let t=Ot.getCookie(e,ur.Cookie.Auth);return{configId:ynn(e),sessionId:t?t.sessionId:void 0}}function kIt(e,t={}){let r=o(n=>n===""||n==null,"paramNotSet");gnn(t);for(let n of e.parameters){let i=t[n.name];(i==null||i==="")&&(i=n.default),e.nullDefaultSupport&&r(i)&&(i=null),t[n.name]=i}return t}async function CIt(e){let{datasource:t,envVars:r}=await k.datasources.getWithEnvVars(e.request.body.datasourceId),n=e.request.body.queryId,i=e.request.body;!n&&!i._id&&(i.nullDefaultSupport=!0);let a=i.schema;if(n&&!a)try{a=(await N.getWorkspaceDB().get(n)).schema}catch(w){w.status!==404&&e.throw(500,"Unable to retrieve existing query")}let s=OIt(e);function u(w,E){let A=o((I,P,D)=>({type:I,name:P,subtype:D}),"makeQuerySchema"),T=typeof w,O=A("string",E);if(w!=null)switch(T){case"boolean":O=A("boolean",E);break;case"object":w instanceof Date?O=A("datetime",E):Array.isArray(w)?w.some(I=>Kt.hasSchema(I))?O=A("json",E,"array"):O=A("array",E):w instanceof _It.ObjectId?O=A("string",E):O=A("json",E);break;case"number":O=A("number",E);break}return O}o(u,"getFieldMetadata");function c(w,E,A){let T={};for(let O of A)if(Kt.hasSchema(O))for(let[I,P]of Object.entries(O))T[I]=u(P,I);w[E]=T}o(c,"buildNestedSchema");function l(w,E){let A={},T={};if(w?.length>0)for(let O of new Set(E)){let I=u(w[0][O],O);A[O]=I,I.type==="json"&&I.subtype==="array"&&c(T,O,w[0][O])}return{previewSchema:A,nestedSchemaFields:T}}o(l,"getSchemaFields");let p={appId:e.appId,queryVerb:i.queryVerb,fields:i.fields,parameters:kIt(i),transformer:i.transformer,schema:i.schema,nullDefaultSupport:i.nullDefaultSupport,queryId:n,datasource:t,environmentVariables:r,ctx:{user:SIt(e.user),auth:{...s}}},f;try{f=await Ige.run(p)}catch(w){e.throw(400,w)}let{rows:d,keys:m,info:h,extra:g}=f,{previewSchema:y,nestedSchemaFields:b}=l(d,m);if(a)for(let w of Object.keys(a))y[w]||(y[w]=a[w]);delete t.config,await Oe.query.previewed(t,e.request.body),e.body={rows:d,nestedSchemaFields:b,schema:y,info:h,extra:g}}async function Oge(e,t={rowsOnly:!1,isAutomation:!1}){let n=await N.getWorkspaceDB().get(e.params.queryId),{datasource:i,envVars:a}=await k.datasources.getWithEnvVars(n.datasourceId),s={};t.isAutomation||(s=OIt(e));try{let u={appId:e.appId,datasource:i,queryVerb:n.queryVerb,fields:n.fields,pagination:e.request.body.pagination,parameters:kIt(n,e.request.body.parameters),transformer:n.transformer,queryId:e.params.queryId,environmentVariables:a,nullDefaultSupport:n.nullDefaultSupport,ctx:{user:SIt(e.user),auth:{...s}},schema:n.schema},{rows:c,pagination:l,extra:p,info:f}=n.queryVerb==="read"||t.isAutomation?await Ige.run(u):await en.addAction(async()=>{let d=await Ige.run(u);return Oe.action.crudExecuted({type:n.queryVerb}),d});p?.raw&&delete p.raw,t&&t.rowsOnly?e.body=c:e.body={data:c,pagination:l,...p,...f}}catch(u){e.throw(400,u)}}async function DIt(e){return Oge(e,{rowsOnly:!0,isAutomation:!1})}async function IG(e){return Oge(e,{rowsOnly:!1,isAutomation:!1})}async function OG(e){return Oge(e,{rowsOnly:!1,isAutomation:!0})}async function PIt(e){let t=N.getWorkspaceDB(),r=e.params.queryId;await bnn(r);let n=await t.get(r),i=await k.datasources.get(n.datasourceId);await t.remove(e.params.queryId,e.params.revId),e.body={message:"Query deleted."},await Oe.query.deleted(i,n,N.getWorkspaceId())}var $1,_It,EIt,Ige,xIt,AIt,bnn,W1=v(()=>{"use strict";X();ir();Xe();So();V();$1=require("lodash"),_It=require("mongodb");dt();Bt();We();ZW();yG();gge();wIt();EIt=te(require("node-fetch")),Ige=new _y($A.QUERY,{timeoutMs:ue.QUERY_THREAD_TIMEOUT});o(SIt,"sanitiseUserStructure");o(gnn,"validateQueryInputs");o(RG,"fetchQueries");xIt=o(async(e,t)=>{if(t.data?.trim())return t.data;let n=t.url?.trim();if(n)try{let i=await(0,EIt.default)(n);return i.ok||e.throw(i.status,`Failed to fetch import data (status ${i.status})`),await i.text()}catch(i){let a=i?.message||"Unknown error";e.throw(502,`Failed to fetch import data - ${a}`)}e.throw(400,"Import data is required")},"resolveImportData"),AIt=o(async e=>{let t=e.request.body,r=await xIt(e,t),n=new q1(r);await n.init();let i=await n.getInfo(),a;if(t.datasourceId)a=t.datasourceId;else{let{_id:u,_rev:c,config:l,...p}=t.datasource?(0,$1.cloneDeep)(t.datasource):{},f=l||{},d={...p,type:"datasource",source:p.source||"REST",name:p.name||i?.name,config:{...f,defaultHeaders:f.defaultHeaders??{},rejectUnauthorized:f.rejectUnauthorized??!0,downloadImages:f.downloadImages??!0,url:f.url??i?.url}};n.prepareDatasourceConfig(d);let m=(0,$1.merge)(e,{request:{body:{datasource:d,tablesFilter:[]}}});await bG(m),a=m.body.datasource._id}let s;try{s=await n.importQueries(a,t.selectedEndpointId)}catch(u){throw t.selectedEndpointId&&u?.message&&e.throw(400,u.message),u}e.body={...s,datasourceId:a}},"_import");o(TIt,"importInfo");o(RIt,"save");o(IIt,"find");o(ynn,"getOAuthConfigCookieId");o(OIt,"getAuthConfig");o(kIt,"enrichParameters");o(CIt,"preview");o(Oge,"execute");o(DIt,"executeV1");o(IG,"executeV2");o(OG,"executeV2AsAutomation");bnn=o(async e=>{let t=N.getWorkspaceDB(),r=await t.get(e),n=await k.datasources.get(r.datasourceId),i=n.config?.dynamicVariables;if(i){n.config.dynamicVariables=i.filter(s=>s.queryId!==e),await t.put(n);let a=i.filter(s=>s.queryId===e);await F1(a)}},"removeDynamicVariables");o(PIt,"destroy")});async function NIt({inputs:e,appId:t,emitter:r,context:n}){if(e.query==null)return{success:!1,response:{message:"Invalid inputs"}};let{queryId:i,...a}=e.query,s=Ra(t,r,{body:{parameters:a},params:{queryId:i},user:n.user});try{await OG(s);let{data:u,...c}=s.body;return{response:u,info:c,success:!0}}catch(u){return{success:!1,info:{},response:xr(u)}}}var LIt=v(()=>{"use strict";W1();nu();Yi();o(NIt,"run")});async function UIt({inputs:e,appId:t,emitter:r,context:n}){if(e.query==null)return{success:!1,response:{message:"Invalid inputs"}};let{queryId:i,...a}=e.query,s=Ra(t,r,{body:{parameters:a},params:{queryId:i},user:n.user});try{await OG(s);let{data:u,...c}=s.body;return{response:u,info:c,success:!0}}catch(u){return{success:!1,info:{},response:xr(u)}}}var FIt=v(()=>{"use strict";W1();nu();Yi();o(UIt,"run")});async function BIt({inputs:e}){let{requestMethod:t,url:r,requestBody:n,headers:i}=e;r.startsWith("http")||(r=`http://${r}`);let a={method:t};if(i)try{let s=typeof i=="string"?JSON.parse(i):i;a.headers={...a.headers,...s}}catch{return{success:!1,response:"Unable to process headers, must be a JSON object."}}n&&n.length!==0&&_nn.indexOf(t)!==-1&&(a.body=typeof n=="string"?n:JSON.stringify(n),a.headers={...a.headers,"Content-Type":"application/json"});try{a.body&&JSON.parse(a.body);let s=await(0,MIt.default)(r,a),{status:u,message:c}=await xl(s);return{httpStatus:u,response:c,success:u>=200&&u<=206}}catch(s){return{success:!1,response:xr(s)}}}var MIt,_nn,jIt=v(()=>{"use strict";MIt=te(require("node-fetch"));nu();Yi();_nn=["POST","PUT","PATCH"];o(BIt,"run")});async function qIt({inputs:e,appId:t}){typeof e.text!="string"&&(e.text=JSON.stringify(e.text));let r=`App ${t} - ${e.text}`;return console.log(r),{success:!0,message:r}}var $It=v(()=>{"use strict";o(qIt,"run")});async function GIt({inputs:e}){let{url:t,username:r,avatar_url:n,content:i}=e;if(r||(r=xnn),n||(n=Ann),!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let a;try{a=await(0,WIt.default)(t,{method:"post",body:JSON.stringify({username:r,avatar_url:n,content:i}),headers:{"Content-Type":"application/json"}})}catch(c){return{httpStatus:400,response:c.message,success:!1}}let{status:s,message:u}=await xl(a);return{httpStatus:s,success:s===200||s===204,response:u}}var WIt,xnn,Ann,zIt=v(()=>{"use strict";WIt=te(require("node-fetch"));nu();xnn="Budibase Automate",Ann="https://i.imgur.com/a1cmTKM.png";o(GIt,"run")});async function HIt({inputs:e}){let{url:t,text:r}=e;if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let n;try{n=await(0,VIt.default)(t,{method:"post",body:JSON.stringify({text:r}),headers:{"Content-Type":"application/json"}})}catch(s){return{httpStatus:400,response:s.message,success:!1}}let{status:i,message:a}=await xl(n);return{httpStatus:i,response:a,success:i===200}}var VIt,KIt=v(()=>{"use strict";VIt=te(require("node-fetch"));nu();o(HIt,"run")});async function YIt({inputs:e}){let{url:t,body:r}=e,n={};try{n=r?.value?JSON.parse(r?.value):{}}catch{return{httpStatus:400,response:"Invalid payload JSON",success:!1}}if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let i;try{i=await(0,QIt.default)(t,{method:"post",body:JSON.stringify({platform:"budibase",...n}),headers:{"Content-Type":"application/json"}})}catch(u){return{httpStatus:400,response:u.message,success:!1}}let{status:a,message:s}=await xl(i);return{success:a===200,httpStatus:a,response:s}}var QIt,JIt=v(()=>{"use strict";QIt=te(require("node-fetch"));nu();o(YIt,"run")});async function ZIt({inputs:e}){let{url:t,body:r,method:n,authorization:i}=e,a={};try{a=r?.value?JSON.parse(r?.value):{}}catch{return{httpStatus:400,response:"Invalid payload JSON",success:!1}}if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let s,u={method:n||"GET",headers:{"Content-Type":"application/json",Authorization:i}};["GET","HEAD"].includes(u.method)||(u.body=JSON.stringify({...a}));try{s=await(0,XIt.default)(t,u)}catch(p){return{httpStatus:400,response:p.message,success:!1}}let{status:c,message:l}=await xl(s);return{httpStatus:c,success:c===200,response:l}}var XIt,eOt=v(()=>{"use strict";XIt=te(require("node-fetch"));nu();V();o(ZIt,"run")});async function rOt({inputs:e}){let{url:t,body:r}=e,n={};try{r?.value&&(typeof r.value=="string"?n=JSON.parse(r.value):n=r.value,Object.keys(n).forEach(u=>{if(typeof n[u]=="string")try{let c=JSON.parse(n[u]);n[u]=c}catch{}}))}catch{return{httpStatus:400,response:"Invalid payload JSON",success:!1}}if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let i;try{i=await(0,tOt.default)(t,{method:"post",body:JSON.stringify({...n}),headers:{"Content-Type":"application/json"}})}catch(u){return{httpStatus:400,response:u.message,success:!1}}let{status:a,message:s}=await xl(i);return{httpStatus:a,success:a===200,response:s}}var tOt,nOt=v(()=>{"use strict";tOt=te(require("node-fetch"));nu();o(rOt,"run")});async function iOt({inputs:e}){try{let{field:t,condition:r,value:n}=e;!isNaN(n)&&!isNaN(t)&&typeof t!="boolean"&&typeof n!="boolean"?(n=parseFloat(n),t=parseFloat(t)):!isNaN(Date.parse(n))&&!isNaN(Date.parse(t))&&(n=Date.parse(n),t=Date.parse(t));let i=!1;if(typeof t!="object"&&typeof n!="object")switch(r){case"EQUAL":i=t===n;break;case"NOT_EQUAL":i=t!==n;break;case"GREATER_THAN":i=t>n;break;case"LESS_THAN":i=t<n;break}else i=!1;return{success:!0,result:i,refValue:t,comparisonValue:n}}catch{return{success:!1,result:!1}}}var oOt=v(()=>{"use strict";V();o(iOt,"run")});async function aOt({inputs:e}){return await oSt(e.time),{success:!0}}var sOt=v(()=>{"use strict";Rs();o(aOt,"run")});var CG={};ce(CG,{bulkImport:()=>Lnn,destroy:()=>Nnn,updateTable:()=>Pnn});function cOt(e){if(!e)throw new Error("No table supplied");if(e.sourceId)return e.sourceId;if(!e._id)throw new Error("No table ID supplied");return ui(e._id).datasourceId}async function Pnn(e,t){let r=e.request.body;delete r.rows;let n=e.request.body._id,i=cOt(e.request.body);r._id||(r.created=!0);try{let{datasource:a,oldTable:s,table:u}=await k.tables.external.save(i,r,{tableId:n,renaming:t});return Sr?.emitDatasourceUpdate(e,a),{table:u,oldTable:s}}catch(a){a instanceof Error?e.throw(400,a.message):e.throw(a.status||500,a?.message||a)}}async function Nnn(e){let t=await k.tables.getTable(e.params.tableId),r=cOt(t);try{let{datasource:n,table:i}=await k.tables.external.destroy(r,t);return Sr?.emitDatasourceUpdate(e,n),i}catch(n){n instanceof Error?e.throw(400,n.message):e.throw(n.status||500,n.message||n)}}async function Lnn(e){let t=await k.tables.getTable(e.params.tableId),{rows:r,identifierFields:n}=e.request.body,i=t.schema;n&&n.length>0&&!(0,uOt.isEqual)(n,t.primary)&&e.throw(400,"Identifier fields are not supported for bulk import into an external datasource."),(!r||!u_(r)||!s_(i))&&e.throw(400,"Provided data import information is invalid.");let a=[];for(let s of G6(r,t)){let u=await _l(e.user?._id,t,s,{noAutoRelationships:!0});a.push(u)}return await ks("BULK_UPSERT",t,{rows:a}),await Oe.rows.imported(t,a.length),t}var uOt,lOt=v(()=>{"use strict";tn();I1();X();z6();V();We();Ta();Za();uOt=require("lodash");o(cOt,"getDatasourceId");o(Pnn,"updateTable");o(Nnn,"destroy");o(Lnn,"bulkImport")});var kge={};ce(kge,{bulkImport:()=>Mnn,destroy:()=>Fnn,updateTable:()=>Unn});async function Unn(e,t){let{_rename:r,rows:n,...i}=e.request.body,a={_id:KW(),...i,type:i.type||"table",sourceType:i.sourceType||"internal"};a.views||(a.views={});try{let{table:s,oldTable:u}=await k.tables.internal.save(a,{userId:e.user._id,rowsToImport:n,tableId:e.request.body._id,renaming:t});return{table:s,oldTable:u}}catch(s){s instanceof Error?e.throw(400,s.message):e.throw(s.status||500,s.message||s)}}async function Fnn(e){let t=await k.tables.getTable(e.params.tableId);try{let{table:r}=await k.tables.internal.destroy(t);return r}catch(r){r instanceof Error?e.throw(400,r.message):e.throw(r.status||500,r.message||r)}}async function Mnn(e){let t=await k.tables.getTable(e.params.tableId),{rows:r,identifierFields:n}=e.request.body;return await Rhe(t,{importRows:r,identifierFields:n,userId:e.user._id}),t}var pOt=v(()=>{"use strict";dt();c_();V();We();o(Unn,"updateTable");o(Fnn,"destroy");o(Mnn,"bulkImport")});function Dge({tableId:e,table:t}){return t&&l6(t)||e&&bn(e)?CG:kge}function Bnn(e){for(let[t,r]of Object.entries(e.schema))if(!(!("default"in r)||r.default==null)&&Qe.schema.isRequired(r.constraints))throw new ge(`Cannot make field "${t}" required, it has a default value.`,400)}async function jnn(e,t){if(Bnn(e),e.primaryDisplay&&!ERe(e.schema[e.primaryDisplay]?.type)&&(t||(await k.tables.getTable(e._id)).primaryDisplay!==e.primaryDisplay))throw new ge(`Column "${e.primaryDisplay}" cannot be used as a display type.`,400)}async function DG(e){let t=await k.tables.getAllInternalTables(),r=await k.datasources.getExternalDatasources(),n=[];for(let a of r){let s=a.entities;if(s)for(let u of Object.values(s))n.push({...await Sl(u),sourceType:"external",sourceId:a._id,sql:Xm(a)})}let i=[];for(let a of[...t,...n])i.push(await k.tables.enrichViewSchemas(a));e.body=i}async function Ly(e){let t=e.params.tableId,r=await k.tables.getTable(t),n=await k.tables.enrichViewSchemas(r);e.body=n}async function G1(e){let t=e.appId,{rows:r,...n}=e.request.body,i=r,a=e.request.body._rename,s=!n._id;await jnn(n,s);let u;if(s)u=await k.tables.create(n,r,e.user._id),u=await k.tables.enrichViewSchemas(u),u=await Sl(u),await Oe.table.created(u);else{let c=Dge({table:n}),{table:l,oldTable:p}=await c.updateTable(e,a);u=l,u=await Sl(u),p&&await Oe.table.updated(p,u)}a&&await k.views.renameLinkedViews(u,a),i&&await Oe.table.imported(u),e.message=`Table ${n.name} saved successfully.`,e.eventEmitter?.emitTable("table:save",t,{...u}),e.body=u,Sr?.emitTableUpdate(e,(0,Cge.cloneDeep)(u))}async function PG(e){let t=e.appId,r=e.params.tableId;await k.rowActions.deleteAll(r);let n=await Dge({tableId:r}).destroy(e);await Oe.table.deleted(n,t),e.eventEmitter?.emitTable("table:delete",t,n),e.table=n,e.body={message:`Table ${r} deleted.`},Sr?.emitTableDeletion(e,n)}async function fOt(e){let t=e.params.tableId;await Dge({tableId:t}).bulkImport(e),e.body={message:"Bulk rows created."}}async function dOt(e){let{csvString:t}=e.request.body,r=await rA.jsonFromCsvString(t);e.body=r}async function mOt(e){let{rows:t,schema:r}=e.request.body;u_(t)&&s_(r)?e.body=yhe(t,r,Oo):e.status=422}async function hOt(e){let{rows:t,tableId:r}=e.request.body,n=null,i;if(r){let a=await k.tables.getTable(r);n=a.schema,l6(a)?i=Rc:(n._id={name:"_id",type:"string"},i=Oo.filter(s=>s!=="_id"))}else{e.status=422;return}r&&u_(t)&&s_(n)?e.body=yhe(t,n,i):e.status=422}async function gOt(e){let{oldColumn:t,newColumn:r}=e.request.body,n=e.params.tableId,i=await k.tables.getTable(n),a=await k.tables.migrate(i,t,r);for(let s of a.tablesUpdated)Sr?.emitTableUpdate(e,s,{includeOriginator:!0});e.body={message:`Column ${t} migrated.`}}async function yOt(e){let t=e.params.tableId,r=await k.tables.getTable(t);if(l6(r))throw new ge("Cannot duplicate external tables",422);let n=await k.tables.duplicate(r,e.user._id);e.message=`Table ${r.name} duplicated successfully.`,e.body=n;let i=await Sl(n);Sr?.emitTableUpdate(e,(0,Cge.cloneDeep)(i))}var Cge,z1=v(()=>{"use strict";X();Xe();V();Cge=require("lodash");tn();We();ky();z6();Ta();lOt();pOt();o(Dge,"pickApi");o(Bnn,"checkDefaultFields");o(jnn,"guardTable");o(DG,"fetch");o(Ly,"find");o(G1,"save");o(PG,"destroy");o(fOt,"bulkImport");o(dOt,"csvToJson");o(mOt,"validateNewTableImport");o(hOt,"validateExistingTableImport");o(gOt,"migrate");o(yOt,"duplicate")});async function qnn(e,t){let r=Ra(e,null,{params:{tableId:t}});return await Ly(r),r.body}async function bOt({inputs:e,appId:t}){let{tableId:r,filters:n,sortColumn:i,sortOrder:a,limit:s}=e;if(!r)return{success:!1,response:{message:"You must select a table to query."}};let u=await qnn(t,r),c="string";i&&u&&u.schema&&u.schema[i]&&(c=u.schema[i].type==="number"?"number":"string");let l=Ra(t,null,{params:{tableId:decodeURIComponent(r)},body:{sortType:c,limit:s,sort:i,query:n||{},sortOrder:a||"ascending"},version:"1"});try{let p;return e.onEmptyFilter==="none"&&e["filters-def"]&&mG(e["filters-def"])?p=[]:(await ih(l),p=l.body?l.body.rows:[]),{rows:p,success:!0}}catch(p){return{success:!1,response:xr(p)}}}var vOt=v(()=>{"use strict";hd();z1();nu();Yi();V();o(qnn,"getTable");o(bOt,"run")});async function Wnn(e,t){let r=Ra(e,null,{params:{tableId:t}});return await Ly(r),r.body}async function wOt({inputs:e,appId:t}){let{tableId:r,filters:n,sortColumn:i,sortOrder:a}=e;if(!r)return{success:!1,row:null,response:{message:"You must select a table to query."}};let s=await Wnn(t,r),u="string";i&&s&&s.schema&&s.schema[i]&&(u=s.schema[i].type==="number"?"number":"string");let c=Ra(t,null,{params:{tableId:decodeURIComponent(r)},body:{sortType:u,limit:1,sort:i,query:n||{},sortOrder:a||"ascending"},version:"1"});try{let l;return e.onEmptyFilter==="none"&&e["filters-def"]&&mG(e["filters-def"])?l=[]:(await ih(c),l=c.body?c.body.rows:[]),{row:l&&l.length>0?l[0]:null,success:!0}}catch(l){return{success:!1,row:null,response:xr(l)}}}var _Ot=v(()=>{"use strict";hd();z1();nu();Yi();V();o(Wnn,"getTable");o(wOt,"run")});async function EOt({inputs:e}){return e.collection?{success:!0,value:e.collection}:{success:!1}}var SOt=v(()=>{"use strict";o(EOt,"run")});async function xOt({inputs:e}){let{automationId:t,...r}=e.automation;if(await so.isTriggerAutomationRunEnabled())if(e.automation.automationId){let i=await N.getWorkspaceDB().get(e.automation.automationId),a=ue.AUTOMATION_THREAD_TIMEOUT;e.timeout!==void 0&&(a=e.timeout*1e3);let s=await ku(i,{fields:{...r},timeout:a},{getResponses:!0});if(LG(s))return{success:s.status==="success",value:s.steps,status:s.status};throw new Error("Automation did not have a collect block")}else return{success:!1,status:"error"};else return{success:!1,status:"error"}}var AOt=v(()=>{"use strict";X();ir();V();Bt();Uy();o(xOt,"run")});async function Hnn(e){return(await new TOt.OpenAI({apiKey:K.OPENAI_API_KEY}).chat.completions.create({model:e.model,messages:[{role:"user",content:e.prompt}]}))?.choices[0]?.message?.content}async function ROt({inputs:e}){if(e.prompt==null)return{success:!1,response:"Budibase OpenAI Automation Failed: No prompt supplied"};try{let t,r=await Nr.getLLM({model:e.model});return t=r?(await r.prompt(e.prompt)).message:await Hnn(e),{response:t,success:!0}}catch(t){return{success:!1,response:xr(t)}}}var TOt,IOt=v(()=>{"use strict";TOt=require("openai");X();Yi();ir();o(Hnn,"legacyOpenAIPrompt");o(ROt,"run")});async function kOt({inputs:e,context:t}){if(e.code==null)return{stdout:"Budibase bash automation failed: Invalid inputs"};try{let r=Ui(e.code,t),n,i=!0;try{n=(0,OOt.execSync)(r,{timeout:ue.QUERY_THREAD_TIMEOUT}).toString()}catch(a){n=a.message,i=!1}return{stdout:n,success:i}}catch(r){return{success:!1,response:xr(r)}}}var OOt,COt=v(()=>{"use strict";OOt=require("child_process");So();Yi();Bt();o(kOt,"run")});async function DOt({inputs:e}){if(!e.textInput||!e.categoryItems||e.categoryItems.length===0)return{success:!1,response:"Classify Text AI Step Failed: Text Input and Categories (non-empty) are required."};try{let t=await Nr.getLLMOrThrow(),r=e.categoryItems.map(s=>s.category),n=Nr.classifyText(e.textInput,r),a=(await t.prompt(n))?.message?.trim();return a&&r.includes(a)?{response:a,category:a,success:!0}:a?{success:!1,response:`Classify Text AI Step Failed: AI returned category '${a}', which is not in the provided list: [${r.join(", ")}]. Ensure the AI is constrained to the list or check AI response variability.`}:{success:!1,response:"Classify Text AI Step Failed: AI did not return a category."}}catch(t){return{success:!1,response:xr(t)}}}var POt=v(()=>{"use strict";ir();Yi();o(DOt,"run")});async function NOt({inputs:e}){if(e.prompt==null)return{success:!1,response:"No prompt supplied"};try{return{response:(await(await Nr.getLLM())?.prompt(e.prompt))?.message,success:!0}}catch(t){return{success:!1,response:xr(t)}}}var LOt=v(()=>{"use strict";Yi();ir();o(NOt,"run")});async function UOt({inputs:e}){if(e.text==null||e.language==null)return{success:!1,response:"No text or language supplied"};try{let t=await Nr.getLLMOrThrow(),r=Nr.translate(e.text,e.language);return{response:(await t?.prompt(r))?.message,success:!0}}catch(t){return{success:!1,response:xr(t)}}}var FOt=v(()=>{"use strict";Yi();ir();o(UOt,"run")});async function MOt({inputs:e}){if(e.text==null)return{success:!1,response:"No text supplied"};try{let t=await Nr.getLLMOrThrow(),r=Nr.summarizeText(e.text,e.length);return{response:(await t?.prompt(r))?.message,success:!0}}catch(t){return{success:!1,response:xr(t)}}}var BOt=v(()=>{"use strict";Yi();ir();o(MOt,"run")});async function jOt({inputs:e}){if(!e.contentType||!e.instructions)return{success:!1,response:"Generate Text AI Step Failed: Content Type and Instructions are required."};try{let t=await Nr.getLLMOrThrow(),r=ein(e.contentType),n=new Nr.LLMRequest().addUserMessage(`${r}
|
|
1036
|
+
`;let r=this.isolate.compileScriptSync(t);r.runSync(this.vm,{timeout:this.invocationTimeout,release:!1}),new Promise(()=>{r.release()});let n=this.getFromContext(this.resultKey);if(n[this.runErrorKey])throw new Pp(n[this.runErrorKey]);return n[this.runResultKey]}close(){this.vm.release(),this.isolate.dispose()}registerCallbacks(t){let r=L1.default.randomUUID().replace(/-/g,""),n={};for(let[a,s]of Object.entries(t)){let u=`f${r}${a}cb`;n[a]=u,this.addToContext({[u]:(...c)=>s(...c)})}return"{"+Object.entries(n).map(([a,s])=>`${a}: ${s}`).join()+"}"}addToContext(t){for(let r in t){let n=t[r];this.jail.setSync(r,typeof n=="function"?n:new lge.default.ExternalCopy(n).copyInto({release:!0}))}}removeFromContext(t){for(let r of t)this.jail.deleteSync(r)}getFromContext(t){let r=this.vm.global.getSync(t,{reference:!0}),n=r.copySync();return new Promise(()=>{r.release()}),n}}});var fge=v(()=>{"use strict";ORt()});async function kRt(e){let{script:t,context:r}=e.request.body,n=new ET;try{e.body=n.withContext(r,()=>n.execute(py(t)))}catch(i){throw i.code===Pp.code?i.userScriptError:i}}var CRt=v(()=>{"use strict";fge();So();o(kRt,"execute")});async function DRt({inputs:e,appId:t,context:r,emitter:n}){if(e.code==null)return{success:!1,response:{message:"Invalid inputs"}};let i=Ra(t,n,{body:{script:e.code,context:r}});try{return await kRt(i),{success:!0,value:i.body}}catch(a){return{success:!1,response:xr(a)}}}var PRt=v(()=>{"use strict";CRt();nu();Yi();o(DRt,"run")});async function NRt({inputs:e,context:t}){let{code:r}=e;if(r==null)return{success:!1,response:{message:"Invalid inputs"}};if(r=r.trim(),!r.startsWith("{{ js "))return{success:!1,response:{message:"Expected code to be a {{ js }} template block"}};try{return{success:!0,value:Ui(e.code,t,{noThrow:!1})}}catch(n){return{success:!1,response:xr(n)}}}var LRt=v(()=>{"use strict";Yi();So();o(NRt,"run")});function gG(){ue.isTest()&&qpe(),dP((e,t)=>FRt.default.trace("runJS",{},()=>{try{let r=N.getCurrentContext(),n=r?.vm||new ET({memoryLimit:ue.JS_RUNNER_MEMORY_LIMIT,invocationTimeout:ue.JS_PER_INVOCATION_TIMEOUT_MS,isolateAccumulatedTimeout:ue.JS_PER_REQUEST_TIMEOUT_MS}).withHelpers().withBuffer().withSnippets(r?.snippets);r&&!r.vm&&(r.vm=n,r.cleanup=r.cleanup||[],r.cleanup.push(()=>n.close()));let{helpers:i,snippets:a,...s}=t;return n.withContext(s,()=>n.execute(e))}catch(r){throw r.message==="Script execution timed out."?new fy:r}})),ue.LOG_JS_ERRORS&&Vpe(e=>{Nt.logWarn(`Error while executing js: ${JSON.stringify((0,URt.serializeError)(e))}`)})}var URt,FRt,dge=v(()=>{"use strict";URt=require("serialize-error");Bt();So();X();FRt=te(require("dd-trace"));fge();o(gG,"init")});async function mge(){return U1||(U1=await Ki.Client.init(Ki.utils.Databases.QUERY_VARS)),U1}function hge(e,t){return`${e}${J.SEPARATOR}${t}`}function Mrn(){if(ue.isTest()||ue.DISABLE_THREADING||!ue.isInThread()){console.debug(`[${ue.FORKED_PROCESS_NAME}] thread setup skipped`);return}console.debug(`[${ue.FORKED_PROCESS_NAME}] thread setup running`),gG(),q4()}async function Brn(e,t){return(await mge()).get(hge(e,t))}async function F1(e){let t=await mge();await Promise.all(e.map(r=>t.delete(hge(r.queryId,r.name))))}async function jrn(e,t,r){await(await mge()).store(hge(e,t),r,Frn)}function qrn(e){if(typeof e=="string")try{e=JSON.parse(e)}catch{e={response:e}}return e}function $rn(e){return typeof e=="object"&&!Array.isArray(e)&&e&&e.data!=null&&e.info!=null}var Frn,U1,BRt,yG=v(()=>{"use strict";Bt();Uue();X();dge();Frn=3600,U1=null;o(mge,"getClient");process.on("exit",async()=>{U1&&await U1.finish()});o(hge,"makeVariableKey");o(Mrn,"threadSetup");o(Brn,"getCachedVariable");o(F1,"invalidateCachedVariable");o(jrn,"storeDynamicVariable");o(qrn,"formatResponse");o($rn,"hasExtraData");BRt={hasExtraData:$rn,formatResponse:qrn,storeDynamicVariable:jrn,invalidateCachedVariable:F1,getCachedVariable:Brn,threadSetup:Mrn}});async function qRt(e){e.body=await k.datasources.fetch()}async function $Rt(e){let{datasource:t}=e.request.body,r=await k.datasources.getAndMergeDatasource(t),n=await k.datasources.getConnector(r);n.testConnection||e.throw(400,"Connection information verification not supported");let i=await n.testConnection();e.body={connected:i.connected,error:i.error}}async function WRt(e){let{datasource:t}=e.request.body,r=await k.datasources.getAndMergeDatasource(t),n=await k.datasources.getConnector(r);n.getTableNames||e.throw(400,"Table name fetching not supported by datasource");let i=await n.getTableNames();e.body={tableNames:i.sort()}}async function GRt(e){let{datasource:t}=e.request.body,r=[],n;try{let i=await k.datasources.getAndMergeDatasource(t),a=await k.datasources.getConnector(i);a.getViewNames?r=await a.getViewNames():n="View fetching not supported by datasource"}catch(i){n=i.message||"Unknown error"}e.body={views:r.sort(),error:n}}async function zRt(e){let t=e.params.datasourceId,r=e.request.body.tablesFilter,{datasource:n,errors:i}=await k.datasources.buildSchemaFromSource(t,r);e.body={datasource:await k.datasources.removeSecretSingle(n),errors:i}}async function Wrn(e,t){let r=e.config?.dynamicVariables||[],n=t.config?.dynamicVariables||[],i=[];r&&(n?r.forEach(a=>{n.find(u=>a.name===u.name&&a.queryId===u.queryId&&a.value===u.value)||i.push(a)}):i.push(...r),await F1(i))}async function VRt(e){let t=N.getWorkspaceDB(),r=e.params.datasourceId,n=await k.datasources.get(r);await Wrn(n,e.request.body);let a=n.type===J.BUDIBASE_DATASOURCE_TYPE?{name:e.request.body?.name,type:J.BUDIBASE_DATASOURCE_TYPE,source:"BUDIBASE"}:e.request.body,s={...n,...k.datasources.mergeConfigs(a,n)},u=n.config?.auth;u&&!e.request.body.auth&&(s.config.auth=u),s.source==="REST"&&!k.datasources.areRESTVariablesValid(s)&&e.throw(400,"Duplicate dynamic/static variable names are invalid.");let c=await t.put(k.tables.populateExternalTableSchemas(s));if(await Oe.datasource.updated(s),s._rev=c.rev,e.message="Datasource saved successfully.",e.body={datasource:await k.datasources.removeSecretSingle(k.datasources.addDatasourceFlags(s))},Sr?.emitDatasourceUpdate(e,s),s.entities)for(let l of Object.values(s.entities)){let p=n.entities?.[l.name];(!p||!(0,jRt.isEqual)(p,l))&&(l=await Sl(l),Sr?.emitTableUpdate(e,l,{includeOriginator:!0}))}}async function bG(e){let{datasource:t,fetchSchema:r,tablesFilter:n}=e.request.body,{datasource:i,errors:a}=await k.datasources.save(t,{fetchSchema:r,tablesFilter:n});e.body={datasource:await k.datasources.removeSecretSingle(k.datasources.addDatasourceFlags(i)),errors:a},Sr?.emitDatasourceUpdate(e,i)}async function Grn(e){let n=(await N.getWorkspaceDB().allDocs(Qm(null,{include_docs:!0}))).rows.reduce((a,s)=>(s.doc?.sourceId==e&&a.push(s.doc),a),[]);function i(a){for(let s of a)n.forEach(u=>{u._id===s.tableId&&(u._rev=s.tableRev)})}o(i,"updateRevisions");for(let a of n){let s=await k.tables.internal.destroy(a),u=Object.values(s.table.schema).filter(c=>c.type==="link").map(c=>c);i(u)}}async function HRt(e){let t=N.getWorkspaceDB(),r=e.params.datasourceId,n=await k.datasources.get(r);if(await k.rowActions.deleteAllForDatasource(r),n.type===J.BUDIBASE_DATASOURCE_TYPE)await Grn(r);else{let i=await t.allDocs(YW(r));await t.bulkDocs(i.rows.map(a=>({_id:a.id,_rev:a.value.rev,_deleted:!0})))}await t.remove(r,e.params.revId),await Oe.datasource.deleted(n),e.body={message:"Datasource deleted."},Sr?.emitDatasourceDeletion(e,r)}async function KRt(e){let t=await k.datasources.get(e.params.datasourceId);e.body=await k.datasources.removeSecretSingle(t)}async function QRt(e){let t=await k.datasources.get(e.params.datasourceId),r=await k.datasources.getAndMergeDatasource(t),n=await k.datasources.getConnector(r);n.getExternalSchema||e.throw(400,"Datasource does not support exporting external schema");try{e.body={schema:await n.getExternalSchema()}}catch(i){e.throw(400,i.message)}}var jRt,gge=v(()=>{"use strict";X();V();jRt=require("lodash");dt();We();ky();yG();Ta();o(qRt,"fetch");o($Rt,"verify");o(WRt,"information");o(GRt,"viewInformation");o(zRt,"buildSchemaFromSource");o(Wrn,"invalidateVariables");o(VRt,"update");o(bG,"save");o(Grn,"destroyInternalTablesBySourceId");o(HRt,"destroy");o(KRt,"find");o(QRt,"getExternalSchema")});function YRt(){return{_id:M1,_rev:M1,fields:Cs.default.object().required(),datasourceId:Cs.default.string().required(),readable:Cs.default.boolean(),parameters:Cs.default.array().items(Cs.default.object({name:Cs.default.string(),default:Cs.default.string().allow("")})),queryVerb:Cs.default.string().required(),extra:Cs.default.object().optional(),schema:Cs.default.object({}).required().unknown(!0),transformer:M1,flags:Cs.default.object().optional(),queryId:M1}}function yge(){return Cs.default.object({...YRt(),name:Cs.default.string().required()}).unknown(!0)}function JRt(){return Et.joiValidator.body(yge())}function XRt(){return Et.joiValidator.body(Cs.default.object({...YRt(),name:M1}).unknown(!0))}var Cs,M1,bge=v(()=>{"use strict";X();Cs=te(require("joi")),M1=Cs.default.string().optional().allow(null).allow("");o(YRt,"baseQueryValidation");o(yge,"queryValidation");o(JRt,"generateQueryValidation");o(XRt,"generateQueryPreviewValidation")});var xge,Vrn,Hrn,ZRt,Krn,tIt,Qrn,Yrn,ST,Ny,vge,Jrn,vG,rIt,B1,wge,wG,Bp,_ge,Ege,_G,j1,nIt,Xrn,eIt,Sge,iIt,Zrn,oIt,EG=v(()=>{"use strict";xge="__BUDIBASE_BINDING__",Vrn=new RegExp(`"${xge}(string|integer|number|boolean)__([A-Za-z0-9_]+)__"`,"g"),Hrn=new RegExp(`${xge}(string|integer|number|boolean)__([A-Za-z0-9_]+)__`),ZRt=o(e=>e.replace(/[^A-Za-z0-9_]/g,"_"),"sanitizeSegment"),Krn=o(e=>!e||typeof e!="object"?!1:"$ref"in e,"isReferenceObject"),tIt=o(e=>{if(!(!e||Krn(e)))return e},"toSchemaObject"),Qrn=o(e=>{let t=e.slice(1).map(n=>ZRt(n)).filter(n=>n&&n!=="item");if(t.length===0){let n=e[e.length-1]??"value";t.push(ZRt(n)||"value")}let r=t.join("_")||"value";return/^[0-9]/.test(r)?`_${r}`:r},"buildBindingName"),Yrn=o((e,t)=>({toJSON(){return`${xge}${t}__${e}__`}}),"createBindingPlaceholder"),ST=o(e=>{switch(e){case"boolean":return"false";case"integer":case"number":return"0";default:return""}},"defaultValueForType"),Ny=o(e=>{let t=tIt(e);if(t){if(Array.isArray(t.allOf)&&t.allOf.length>0){let r=t.allOf.reduce((n,i)=>{let a=Ny(i);if(!a)return n;if(!n)return{...a};let s={...n},u={...vG(n),...vG(a)};Object.keys(u).length>0&&(s.properties=u);let c=n.required??[],l=a.required??[],p=new Set([...c,...l]);return p.size>0&&(s.required=Array.from(p)),!s.type&&a.type&&(s.type=a.type),s.items===void 0&&a.items!==void 0&&(s.items=a.items),s},void 0);if(r)return r}if(Array.isArray(t.oneOf)){let[r]=t.oneOf;if(r)return Ny(r)}if(Array.isArray(t.anyOf)){let[r]=t.anyOf;if(r)return Ny(r)}return t}},"pickSchema"),vge=o(e=>{if(!e)return;let{type:t}=e;if(Array.isArray(t))return t[0];if(!t){if(Object.keys(vG(e)).length>0)return"object";if(rIt(e))return"array"}return typeof t=="string"?t:void 0},"getSchemaType"),Jrn=o(e=>e?.required?Array.isArray(e.required)?[...e.required]:[]:[],"getRequiredProperties"),vG=o(e=>{if(!e?.properties)return{};let t=Object.entries(e.properties),r={};for(let[n,i]of t){let a=tIt(i);a&&(r[n]=a)}return r},"getProperties"),rIt=o(e=>{if(!e)return;let t=e.items;if(t){if(Array.isArray(t)){let r=t;for(let n of r){let i=Ny(n);if(i)return i}return}return Ny(t)}},"getItemsSchema"),B1=o(e=>e==="integer"||e==="number"||e==="boolean"?e:"string","normalisePrimitiveType"),wge=o((e,t)=>{if(e){if(e.example!==void 0&&e.example!==null)return String(e.example);if(e.default!==void 0&&e.default!==null)return String(e.default);let r=e.enum;if(Array.isArray(r)&&r.length>0){let[n]=r;if(n!=null)return String(n)}}return ST(t)},"getPrimitiveDefaultFromSchema"),wG=o((e,t)=>{for(let[r,n]of Object.entries(t))r in e||(e[r]=n)},"mergeBindings"),Bp=o((e,t,r)=>{let n=Qrn(e);return{value:Yrn(n,t),bindings:{[n]:r}}},"createPrimitiveBindingResult"),_ge=o((e,t,r,n,i)=>{let{totalLimit:a=12}=i,s=Ny(e);if(!s){let p=B1(void 0);return Bp(t,p,ST(p))}if(n.has(s)){let p=B1(vge(s));return Bp(t,p,wge(s,p))}if(r>5){let p=B1(vge(s));return Bp(t,p,wge(s,p))}n.add(s);let u=vge(s);if(u==="object"){let p=vG(s),f=Object.keys(p);if(f.length===0)return n.delete(s),{value:{},bindings:{}};let d=Jrn(s).filter(E=>f.includes(E)),m=f.filter(E=>!d.includes(E)),h=[];if(m.length>0){let E=Math.max(a-d.length,0);E>0&&(h=m.slice(0,E))}let g=[...d,...h],y=new Set(g);g=Array.from(y),g.length===0&&(g=f.slice(0,1));let b={},w={};for(let E of g){let A=Ny(p[E]),T=_ge(A,[...t,E],r+1,n,i);if(T.value===void 0){let O=Bp([...t,E],"string",ST("string"));b[E]=O.value,wG(w,O.bindings)}else b[E]=T.value,wG(w,T.bindings)}return n.delete(s),{value:b,bindings:w}}if(u==="array"){let p=rIt(s),f=_ge(p,[...t,"item"],r+1,n,i),d=f.value===void 0?[]:[f.value];return n.delete(s),{value:d,bindings:f.bindings}}let c=B1(u),l=Bp(t,c,wge(s,c));return n.delete(s),l},"buildFromSchema"),Ege=o((e,t,r,n)=>{if(r>5)return Bp(t,"string",ST("string"));if(e==null||typeof e=="bigint"||typeof e=="symbol"||typeof e=="function")return{value:e,bindings:{}};if(typeof e=="string")return Bp(t,"string",e);if(typeof e=="number")return Bp(t,"number",String(e));if(typeof e=="boolean")return Bp(t,"boolean",e?"true":"false");if(typeof e!="object")return{value:e,bindings:{}};let i=e;if(n.has(i))return Bp(t,"string",ST("string"));if(n.add(i),Array.isArray(e)){if(e.length===0)return n.delete(i),{value:[],bindings:{}};let c=Ege(e[0],[...t,"item"],r+1,n);return n.delete(i),{value:c.value===void 0?[]:[c.value],bindings:c.bindings}}let a={},s={},u=e;for(let[c,l]of Object.entries(u)){let p=Ege(l,[...t,c],r+1,n);p.value!==void 0?a[c]=p.value:a[c]=l,wG(s,p.bindings)}return n.delete(i),{value:a,bindings:s}},"buildFromExample"),_G=o((e,t="body",r={})=>{let n=Ny(e);if(!n)return;let i=new Set,a={totalLimit:r.totalLimit??12},s=_ge(n,[t],0,i,a);if(s.value!==void 0)return{body:s.value,bindings:s.bindings}},"generateRequestBodyFromSchema"),j1=o((e,t="body")=>{if(e===void 0)return;let n=Ege(e,[t],0,new WeakSet);if(n.value!==void 0)return{body:n.value,bindings:n.bindings}},"generateRequestBodyFromExample"),nIt=o(e=>{if(e===void 0)return;if(typeof e=="string")return e;let t=JSON.stringify(e,null,2);if(typeof t=="string")return t.replace(Vrn,(r,n,i)=>{let a=`{{ ${i} }}`;return n==="string"?`"${a}"`:a})},"serialiseRequestBody"),Xrn=o(e=>{if(!e||typeof e!="object")return;let t=e;if(typeof t.toJSON!="function")return;let r=t.toJSON();if(typeof r!="string")return;let n=r.match(Hrn);if(n)return n[2]},"extractBindingFromPlaceholder"),eIt=o(e=>{if(e.length===0)return"";let[t,...r]=e,n=t;for(let i of r){if(i==="item"){n+="[]";continue}n+=`[${i}]`}return n},"buildFormKey"),Sge=o((e,t,r)=>{if(e==null)return;if(Array.isArray(e)){e.forEach(a=>Sge(a,[...t,"item"],r));return}let n=Xrn(e);if(n){let a=eIt(t);a&&(r[a]=`{{ ${n} }}`);return}if(typeof e=="object"){for(let[a,s]of Object.entries(e))Sge(s,[...t,a],r);return}let i=eIt(t);i&&(r[i]=String(e))},"collectKeyValuePairs"),iIt=o(e=>{if(!e||typeof e!="object")return;let t={};for(let[r,n]of Object.entries(e))Sge(n,[r],t);if(Object.keys(t).length!==0)return t},"buildKeyValueRequestBody"),Zrn=o(e=>e.type?e:{...e,type:"string"},"toFormDataParameter"),oIt=o(e=>{if(!Array.isArray(e)||e.length===0)return;let t={},r={};for(let n of e){let i=Zrn(n);if(!i?.name)continue;let a=B1(i.type),s=i.default?String(i.default):ST(a),{value:u,bindings:c}=Bp(["form",i.name],a,s);t[i.name]=u,wG(r,c)}if(Object.keys(t).length!==0)return{body:t,bindings:r}},"buildRequestBodyFromFormDataParameters")});var Age,xT,Tge=v(()=>{"use strict";V();EG();Age=(a=>(a.get="read",a.post="create",a.put="update",a.patch="patch",a.delete="delete",a))(Age||{}),xT=class{constructor(){this.buildEndpointId=(t,r)=>`${this.normalizeMethod(t)||t.toLowerCase()}::${r}`;this.convertPathVariables=t=>t&&t.replace(/\{([^{}]+)\}/g,(r,n)=>{let i=n.trim(),a=i.match(/^[A-Za-z0-9._-]+/);return`{{${a?a[0]:i}}}`});this.normalizeMethod=t=>{if(t)return t.toLowerCase()};this.isSupportedMethod=t=>{let r=this.normalizeMethod(t);return r?Object.prototype.hasOwnProperty.call(Age,r):!1};this.methodHasRequestBody=t=>{let r=this.normalizeMethod(t);return r?["post","put","patch"].includes(r):!1};this.bodyTypeFromMimeType=t=>{if(!t)return"json";let r=t.split(";")[0].trim().toLowerCase();return r==="application/x-www-form-urlencoded"?"encoded":r==="multipart/form-data"?"form":r==="text/plain"||r.startsWith("text/")?"text":r==="application/xml"||r==="text/xml"||r.endsWith("+xml")?"xml":r.endsWith("+json")||r==="application/json"?"json":"json"};this.constructQuery=(t,r,n,i,a,s,u={},c=[],l=void 0,p={},f)=>{let m=this.verbFromMethod(n),h="return data",g={};if(i=this.processPath(i),a)if(typeof a=="string"){let T=this.convertPathVariables(a);T.endsWith("/")&&(T=T.slice(0,-1)),i=i?`${T}/${i}`:T}else{let T=a.href;T.endsWith("/")&&(T=T.slice(0,-1)),i=i?`${T}/${i}`:T}s=this.processQuery(s);let y=[...c];for(let[T,O]of Object.entries(p))!T||y.find(P=>P.name===T)||y.push({name:T,default:O});let b,w,E=o(T=>T==="form"||T==="encoded","isKeyValueBodyType");return E(f)?(b=iIt(l),(!b||Object.keys(b).length===0)&&l&&(b=Object.keys(p).reduce((T,O)=>(T[O]=`{{ ${O} }}`,T),{})),w=f):(b=nIt(l),w=f||(b?"json":"none")),(!b||typeof b=="object"&&Object.keys(b).length===0)&&E(f)&&(b=void 0),b===void 0&&(w="none"),{datasourceId:t,name:r,parameters:y,fields:{headers:u,queryString:s,path:i,requestBody:b,bodyType:w},transformer:h,schema:g,readable:!0,queryVerb:m}};this.verbFromMethod=t=>{let r=this.normalizeMethod(t);if(!r)throw new Error(`Unsupported method: ${t}`);return Age[r]};this.processPath=t=>(t?.startsWith("/")&&(t=t.substring(1)),t=this.convertPathVariables(t),t);this.processQuery=t=>t?.startsWith("?")?t.substring(1):t}static{o(this,"ImportSource")}}});var aIt,enn,tnn,rnn,nnn,SG,sIt=v(()=>{"use strict";Tge();aIt=require("url"),enn=require("curlconverter"),tnn=o(e=>{let t=enn.toJsonString(e);return JSON.parse(t)},"parseCurl"),rnn=o(e=>{if(e.data){let t=Object.keys(e.data);if(t.length){let r=t[0];try{return r.startsWith("$")&&(r=r.substring(1)),JSON.parse(r)}catch{}}}},"parseBody"),nnn=o(e=>e.cookies?Object.entries(e.cookies).reduce((t,r)=>{let[n,i]=r;return t+`${n}=${i}; `},""):null,"parseCookie"),SG=class extends xT{constructor(){super(...arguments);this.isSupported=async r=>{try{this.curl=tnn(r)}catch{return!1}return!0};this.getUrl=()=>new aIt.URL(this.curl.raw_url);this.getInfo=async()=>{let r=this.getUrl(),n=this.curl.method,i=r.pathname;return{name:r.hostname,url:r.origin,endpoints:[{id:this.buildEndpointId(n,i),name:i||r.hostname,method:n?.toUpperCase(),path:i,description:this.curl.description,queryVerb:this.verbFromMethod(n)}]}};this.getQueries=async(r,n)=>{let i=this.getUrl(),a=i.pathname,s=i.origin+i.pathname,u=this.curl.method,c=i.search,l=this.curl.headers,p=rnn(this.curl),f=n?.filterIds,d=this.buildEndpointId(u,i.pathname);if(f&&!f.has(d))return[];let m=nnn(this.curl);return m&&(l.Cookie=m),[this.constructQuery(r,a,u,s,void 0,c,l,[],p)]}}static{o(this,"Curl")}getImportSource(){return"curl"}}});var xG,uIt,cIt,inn,onn,AT,Rge=v(()=>{"use strict";xG=te(require("@apidevtools/swagger-parser")),uIt=require("js-yaml"),cIt=te(require("lodash/isObject"));Tge();inn=o(e=>!!(0,cIt.default)(e),"isYamlDocument"),onn=o(e=>{let t=e.trim();if(!t)throw new Error("Empty OpenAPI document");try{let r=(0,uIt.load)(t);if(inn(r))return r}catch{}return e},"prepareDocument"),AT=class extends xT{constructor(){super(...arguments);this.parseData=async r=>{let n={resolve:{external:!1}},i=onn(r),a=await xG.default.parse(i,n);try{return await xG.default.validate(a)}catch{return console.log("[OpenAPI Import] Schema validation failed, continuing without validation"),await xG.default.dereference(a,n)}}}static{o(this,"OpenAPISource")}}});var pIt,fIt,ann,snn,unn,cnn,lIt,AG,dIt=v(()=>{"use strict";pIt=require("openapi-types");Rge();fIt=require("url");EG();ann=o(e=>!0,"parameterNotRef"),snn=o(e=>e.swagger==="2.0","isOpenAPI2"),unn=Object.values(pIt.OpenAPIV2.HttpMethods),cnn=o((e,t)=>unn.includes(e),"isOperation"),lIt=o((e,t)=>!cnn(e,t),"isParameter"),AG=class extends AT{constructor(){super(...arguments);this.isSupported=async r=>{try{let n=await this.parseData(r);return snn(n)?(this.document=n,!0):!1}catch{return!1}};this.getUrl=()=>{let r=this.document.schemes?.includes("https")?"https":"http",n=this.document.basePath||"",i=this.document.host;if(!i)return;let a=n?n.startsWith("/")?n:`/${n}`:"";try{return new fIt.URL(`${r}://${i}${a}`)}catch{return}};this.getEndpoints=()=>{let r=[];for(let[n,i]of Object.entries(this.document.paths))for(let[a,s]of Object.entries(i||{})){if(lIt(a,s))continue;let u=a;if(!this.isSupportedMethod(u))continue;let c=s,l=c.operationId||n;r.push({id:this.buildEndpointId(u,n),name:l,method:u.toUpperCase(),path:n,description:c.summary||c.description,queryVerb:this.verbFromMethod(u)})}return r};this.getInfo=async()=>{let r=this.document.info.title||"Swagger Import",n=this.getUrl()?.href,i=n?this.convertPathVariables(n):void 0,a=this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;return{name:r,url:i,docsUrl:a,endpoints:this.getEndpoints()}};this.getQueries=async(r,n)=>{let i=this.getUrl(),a=[],s=n?.filterIds;for(let[u,c]of Object.entries(this.document.paths)){let l=[];for(let[p,f]of Object.entries(c)){if(lIt(p,f)){let D=f;l.push(...D);continue}let d=f,m=p;if(!this.isSupportedMethod(m))continue;let h=this.buildEndpointId(m,u);if(s&&!s.has(h))continue;let g=d.operationId||u,y="",b={},w,E,A=[];d.consumes&&(w=d.consumes[0],b["Content-Type"]=w);let T=[],O=d.parameters||[],I=[...l,...O];for(let D of I)if(ann(D)){switch(D.in){case"query":{let B="";y&&(B="&"),y=`${y}${B}${D.name}={{${D.name}}}`;break}case"header":b[D.name]=`{{${D.name}}}`;break;case"path":break;case"formData":T.push({...D,in:"formData"});break;case"body":{let B=D,j=B.schema;if(j)if(j.example!==void 0)E=j1(j.example,B.name||"body");else{let Q=_G(j,B.name||"body");Q!==void 0&&(E=Q)}break}}["query","header","path","formData"].includes(D.in)&&A.push({name:D.name,default:D.default||""})}if(!E&&T.length>0){let D=oIt(T);D&&(E=D,w||(w=T.some(B=>B.type==="file")?"multipart/form-data":"application/x-www-form-urlencoded"),w&&(b["Content-Type"]=w))}let P=this.constructQuery(r,g,m,u,i,y,b,A,E?.body,E?.bindings??{},w?this.bodyTypeFromMimeType(w):void 0);a.push(P)}}return a}}static{o(this,"OpenAPI2")}getImportSource(){return"openapi2.0"}}});var hIt,lnn,gIt,yIt,pnn,fnn,dnn,mIt,mnn,bIt,TG,vIt=v(()=>{"use strict";hIt=require("openapi-types");Rge();EG();lnn=o(e=>!0,"parameterNotRef"),gIt=o(e=>e!==void 0,"requestBodyNotRef"),yIt=o(e=>e!==void 0,"schemaNotRef"),pnn=o(e=>{if(!("openapi"in e))return!1;let{openapi:t}=e;return t.startsWith("3.")},"isOpenAPI3"),fnn=Object.values(hIt.OpenAPIV3.HttpMethods),dnn=o((e,t)=>fnn.includes(e),"isOperation"),mIt=o((e,t)=>!dnn(e,t),"isParameter"),mnn=o((e,t,r)=>{if(gIt(e.requestBody)){let n=e.requestBody,i=bIt(e),a=r||i[0];if(a){let s=n.content[a];if(!s)return;if(s.example)return j1(s.example,t);if(yIt(s.schema)){let u=s.schema;return u.example?j1(u.example,t):_G(u,t)}}}},"getRequestBody"),bIt=o(e=>{if(gIt(e.requestBody)){let t=e.requestBody;return Object.keys(t.content)}return[]},"getMimeTypes"),TG=class extends AT{constructor(){super(...arguments);this.serverVariableBindings={};this.getPrimaryServer=()=>{if(this.document?.servers?.length)return this.document.servers[0]};this.setServerVariableBindings=r=>{this.serverVariableBindings={};let n=r?.variables||{};for(let[i,a]of Object.entries(n))this.serverVariableBindings[i]=a?.default||""};this.isSupported=async r=>{try{let n=await this.parseData(r);return pnn(n)?(this.document=n,this.serverVariableBindings={},!0):!1}catch{return!1}};this.getServerVariableBindings=()=>(Object.keys(this.serverVariableBindings).length||this.setServerVariableBindings(this.getPrimaryServer()),{...this.serverVariableBindings});this.getEndpoints=()=>{let r=[];for(let[n,i]of Object.entries(this.document.paths))if(i)for(let[a,s]of Object.entries(i)){if(mIt(a,s))continue;let u=a;if(!this.isSupportedMethod(u))continue;let c=s,l=c.operationId||n;r.push({id:this.buildEndpointId(u,n),name:l,method:u.toUpperCase(),path:n,description:c.summary||c.description,queryVerb:this.verbFromMethod(u)})}return r};this.getInfo=async()=>{let r=this.document.info.title||"OpenAPI Import",n;if(this.document.servers?.length){let a=this.document.servers[0]?.url;n=a?this.convertPathVariables(a):void 0}let i=this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;return{name:r,url:n,docsUrl:i,endpoints:this.getEndpoints()}};this.getQueries=async(r,n)=>{let i,a={},s=this.getPrimaryServer();s&&(i=s.url,a=s.variables||{}),this.setServerVariableBindings(s);let u=[],c=n?.filterIds,l=n?.staticVariables||{};for(let[p,f]of Object.entries(this.document.paths)){let d=[];if(f)for(let[m,h]of Object.entries(f)){if(mIt(m,h)){let F=h;d.push(...F);continue}let g=h,y=m;if(!this.isSupportedMethod(y))continue;let b=this.buildEndpointId(y,p);if(c&&!c.has(b))continue;let w=g.operationId||p,E="",A={},T=bIt(g),O=T[0],I=this.methodHasRequestBody(y)?mnn(g,g.operationId||p,O):void 0,P=[],D=o((F,Z="")=>{P.some(W=>W.name===F)||P.push({name:F,default:Z})},"ensureParameter");O&&(A["Content-Type"]=O);let B=g.parameters||[],j=[...d,...B];for(let F of j)if(lnn(F)){switch(F.in){case"query":{let Z="";E&&(Z="&"),E=`${E}${Z}${F.name}={{${F.name}}}`;break}case"header":A[F.name]=`{{${F.name}}}`;break;case"path":break;case"formData":break}if(["query","header","path"].includes(F.in)){let Z="";yIt(F.schema)&&F.schema.default&&(Z=String(F.schema.default)),D(F.name,Z)}}for(let[F,Z]of Object.entries(a)){let Y=Object.prototype.hasOwnProperty.call(l,F)?`{{ ${F} }}`:Z?.default??"";D(F,Y)}let Q=this.constructQuery(r,w,y,p,i,E,A,P,I?.body,I?.bindings??{},T.length>0?this.bodyTypeFromMimeType(O):void 0);u.push(Q)}}return u}}static{o(this,"OpenAPI3")}getImportSource(){return"openapi3.0"}}});var hnn,q1,wIt=v(()=>{"use strict";dt();bge();sIt();dIt();vIt();X();hnn=o((e,t,r)=>{let n=!1;for(let i of t)e[i]==null&&(e[i]=r[i]??"",n=!0);return n},"assignStaticVariableDefaults"),q1=class{constructor(t){this.init=async()=>{for(let t of this.sources)if(await t.isSupported(this.data)){this.source=t;break}};this.getInfo=async()=>this.source.getInfo();this.importQueries=async(t,r)=>{let n=r?new Set([r]):void 0,i=await this.getDatasourceStaticVariables(t),a=await this.source.getQueries(t,{filterIds:n,staticVariables:i});if(n&&a.length===0)throw new Error("Selected endpoint could not be imported");let s=[],u=yge();a=a.filter(g=>u.validate(g).error?(s.push(g),!1):!0).map(g=>(g._id=QW(g.datasourceId),g));let c=N.getWorkspaceDB(),l=await c.bulkDocs(a),p=a.reduce((g,y)=>(y._id&&(g[y._id]=y),g),{});l.forEach(g=>{g.ok||(s.push(p[g.id]),delete p[g.id])});let f=Object.values(p),d=f.length,m=this.source.getImportSource(),h=await c.get(t);await Oe.query.imported(h,m,d);for(let g of f)await Oe.query.created(h,g);return{errorQueries:s,queries:f}};this.prepareDatasourceConfig=t=>{if(!t)return;let r=t.config||(t.config={}),n=this.getStaticServerVariables(),i=Object.keys(n||{}).filter(Boolean);if(!i.length)return;r.staticVariables=r.staticVariables||{},hnn(r.staticVariables,i,n);let a=new Set(r.templateStaticVariables||[]);i.forEach(s=>a.add(s)),r.templateStaticVariables=Array.from(a)};this.getStaticServerVariables=()=>{let t=this.source;return t&&typeof t.getServerVariableBindings=="function"?t.getServerVariableBindings():{}};this.data=t,this.sources=[new AG,new TG,new SG]}static{o(this,"RestImporter")}async getDatasourceStaticVariables(t){if(!t)return{};let r=N.getWorkspaceDB(),n;try{n=await r.get(t)}catch{return{}}let i=n?.config?.staticVariables;return!i||typeof i!="object"?{}:{...i}}}});function SIt(e){let t=(0,$1.cloneDeep)(e);return delete t.roles,delete t.account,delete t.license,t}function gnn(e){for(let t of Object.entries(e)){let[r,n]=t;if(typeof n=="string"&&bl(n).length!==0)throw new Error(`Parameter '${r}' input contains a handlebars binding - this is not allowed.`)}}async function RG(e){e.body=await k.queries.fetch()}async function TIt(e){let t=await xIt(e,e.request.body),r=new q1(t);await r.init();let n=await r.getInfo();e.body={name:n.name,url:n.url,docsUrl:n.docsUrl,endpoints:n.endpoints||[]}}async function RIt(e){let t=N.getWorkspaceDB(),r=e.request.body;r?.name.match(yxe)||e.throw(400,"Invalid query name");let n=await k.datasources.get(r.datasourceId),i;!r._id&&!r._rev?(r._id=QW(r.datasourceId),r.nullDefaultSupport=!0,i=o(()=>Oe.query.created(n,r),"eventFn")):((await t.get(r._id)).nullDefaultSupport&&r.nullDefaultSupport==null&&(r.nullDefaultSupport=!0),i=o(()=>Oe.query.updated(n,r),"eventFn"));let a=await t.put(r);await i(),r._rev=a.rev,e.body=r}async function IIt(e){let t=e.params.queryId;e.body=await k.queries.find(t)}function ynn(e){if(e.user.providerType==="oidc")return Ot.getCookie(e,ur.Cookie.OIDC_CONFIG)}function OIt(e){let t=Ot.getCookie(e,ur.Cookie.Auth);return{configId:ynn(e),sessionId:t?t.sessionId:void 0}}function kIt(e,t={}){let r=o(n=>n===""||n==null,"paramNotSet");gnn(t);for(let n of e.parameters){let i=t[n.name];(i==null||i==="")&&(i=n.default),e.nullDefaultSupport&&r(i)&&(i=null),t[n.name]=i}return t}async function CIt(e){let{datasource:t,envVars:r}=await k.datasources.getWithEnvVars(e.request.body.datasourceId),n=e.request.body.queryId,i=e.request.body;!n&&!i._id&&(i.nullDefaultSupport=!0);let a=i.schema;if(n&&!a)try{a=(await N.getWorkspaceDB().get(n)).schema}catch(w){w.status!==404&&e.throw(500,"Unable to retrieve existing query")}let s=OIt(e);function u(w,E){let A=o((I,P,D)=>({type:I,name:P,subtype:D}),"makeQuerySchema"),T=typeof w,O=A("string",E);if(w!=null)switch(T){case"boolean":O=A("boolean",E);break;case"object":w instanceof Date?O=A("datetime",E):Array.isArray(w)?w.some(I=>Kt.hasSchema(I))?O=A("json",E,"array"):O=A("array",E):w instanceof _It.ObjectId?O=A("string",E):O=A("json",E);break;case"number":O=A("number",E);break}return O}o(u,"getFieldMetadata");function c(w,E,A){let T={};for(let O of A)if(Kt.hasSchema(O))for(let[I,P]of Object.entries(O))T[I]=u(P,I);w[E]=T}o(c,"buildNestedSchema");function l(w,E){let A={},T={};if(w?.length>0)for(let O of new Set(E)){let I=u(w[0][O],O);A[O]=I,I.type==="json"&&I.subtype==="array"&&c(T,O,w[0][O])}return{previewSchema:A,nestedSchemaFields:T}}o(l,"getSchemaFields");let p={appId:e.appId,queryVerb:i.queryVerb,fields:i.fields,parameters:kIt(i),transformer:i.transformer,schema:i.schema,nullDefaultSupport:i.nullDefaultSupport,queryId:n,datasource:t,environmentVariables:r,ctx:{user:SIt(e.user),auth:{...s}}},f;try{f=await Ige.run(p)}catch(w){e.throw(400,w)}let{rows:d,keys:m,info:h,extra:g}=f,{previewSchema:y,nestedSchemaFields:b}=l(d,m);if(a)for(let w of Object.keys(a))y[w]||(y[w]=a[w]);delete t.config,await Oe.query.previewed(t,e.request.body),e.body={rows:d,nestedSchemaFields:b,schema:y,info:h,extra:g}}async function Oge(e,t={rowsOnly:!1,isAutomation:!1}){let n=await N.getWorkspaceDB().get(e.params.queryId),{datasource:i,envVars:a}=await k.datasources.getWithEnvVars(n.datasourceId),s={};t.isAutomation||(s=OIt(e));try{let u={appId:e.appId,datasource:i,queryVerb:n.queryVerb,fields:n.fields,pagination:e.request.body.pagination,parameters:kIt(n,e.request.body.parameters),transformer:n.transformer,queryId:e.params.queryId,environmentVariables:a,nullDefaultSupport:n.nullDefaultSupport,ctx:{user:SIt(e.user),auth:{...s}},schema:n.schema},{rows:c,pagination:l,extra:p,info:f}=n.queryVerb==="read"||t.isAutomation?await Ige.run(u):await en.addAction(async()=>{let d=await Ige.run(u);return Oe.action.crudExecuted({type:n.queryVerb}),d});p?.raw&&delete p.raw,t&&t.rowsOnly?e.body=c:e.body={data:c,pagination:l,...p,...f}}catch(u){e.throw(400,u)}}async function DIt(e){return Oge(e,{rowsOnly:!0,isAutomation:!1})}async function IG(e){return Oge(e,{rowsOnly:!1,isAutomation:!1})}async function OG(e){return Oge(e,{rowsOnly:!1,isAutomation:!0})}async function PIt(e){let t=N.getWorkspaceDB(),r=e.params.queryId;await bnn(r);let n=await t.get(r),i=await k.datasources.get(n.datasourceId);await t.remove(e.params.queryId,e.params.revId),e.body={message:"Query deleted."},await Oe.query.deleted(i,n,N.getWorkspaceId())}var $1,_It,EIt,Ige,xIt,AIt,bnn,W1=v(()=>{"use strict";X();ir();Xe();So();V();$1=require("lodash"),_It=require("mongodb");dt();Bt();We();ZW();yG();gge();wIt();EIt=te(require("node-fetch")),Ige=new _y($A.QUERY,{timeoutMs:ue.QUERY_THREAD_TIMEOUT});o(SIt,"sanitiseUserStructure");o(gnn,"validateQueryInputs");o(RG,"fetchQueries");xIt=o(async(e,t)=>{if(t.data?.trim())return t.data;let n=t.url?.trim();if(n)try{let i=await(0,EIt.default)(n);return i.ok||e.throw(i.status,`Failed to fetch import data (status ${i.status})`),await i.text()}catch(i){let a=i?.message||"Unknown error";e.throw(502,`Failed to fetch import data - ${a}`)}e.throw(400,"Import data is required")},"resolveImportData"),AIt=o(async e=>{let t=e.request.body,r=await xIt(e,t),n=new q1(r);await n.init();let i=await n.getInfo(),a;if(t.datasourceId)a=t.datasourceId;else{let{_id:u,_rev:c,config:l,...p}=t.datasource?(0,$1.cloneDeep)(t.datasource):{},f=l||{},d={...p,type:"datasource",source:p.source||"REST",name:p.name||i?.name,config:{...f,defaultHeaders:f.defaultHeaders??{},rejectUnauthorized:f.rejectUnauthorized??!0,downloadImages:f.downloadImages??!0,url:f.url??i?.url}};n.prepareDatasourceConfig(d);let m=(0,$1.merge)(e,{request:{body:{datasource:d,tablesFilter:[]}}});await bG(m),a=m.body.datasource._id}let s;try{s=await n.importQueries(a,t.selectedEndpointId)}catch(u){throw t.selectedEndpointId&&u?.message&&e.throw(400,u.message),u}e.body={...s,datasourceId:a}},"_import");o(TIt,"importInfo");o(RIt,"save");o(IIt,"find");o(ynn,"getOAuthConfigCookieId");o(OIt,"getAuthConfig");o(kIt,"enrichParameters");o(CIt,"preview");o(Oge,"execute");o(DIt,"executeV1");o(IG,"executeV2");o(OG,"executeV2AsAutomation");bnn=o(async e=>{let t=N.getWorkspaceDB(),r=await t.get(e),n=await k.datasources.get(r.datasourceId),i=n.config?.dynamicVariables;if(i){n.config.dynamicVariables=i.filter(s=>s.queryId!==e),await t.put(n);let a=i.filter(s=>s.queryId===e);await F1(a)}},"removeDynamicVariables");o(PIt,"destroy")});async function NIt({inputs:e,appId:t,emitter:r,context:n}){if(e.query==null)return{success:!1,response:{message:"Invalid inputs"}};let{queryId:i,...a}=e.query,s=Ra(t,r,{body:{parameters:a},params:{queryId:i},user:n.user});try{await OG(s);let{data:u,...c}=s.body;return{response:u,info:c,success:!0}}catch(u){return{success:!1,info:{},response:xr(u)}}}var LIt=v(()=>{"use strict";W1();nu();Yi();o(NIt,"run")});async function UIt({inputs:e,appId:t,emitter:r,context:n}){if(e.query==null)return{success:!1,response:{message:"Invalid inputs"}};let{queryId:i,...a}=e.query,s=Ra(t,r,{body:{parameters:a},params:{queryId:i},user:n.user});try{await OG(s);let{data:u,...c}=s.body;return{response:u,info:c,success:!0}}catch(u){return{success:!1,info:{},response:xr(u)}}}var FIt=v(()=>{"use strict";W1();nu();Yi();o(UIt,"run")});async function BIt({inputs:e}){let{requestMethod:t,url:r,requestBody:n,headers:i}=e;r.startsWith("http")||(r=`http://${r}`);let a={method:t};if(i)try{let s=typeof i=="string"?JSON.parse(i):i;a.headers={...a.headers,...s}}catch{return{success:!1,response:"Unable to process headers, must be a JSON object."}}n&&n.length!==0&&_nn.indexOf(t)!==-1&&(a.body=typeof n=="string"?n:JSON.stringify(n),a.headers={...a.headers,"Content-Type":"application/json"});try{a.body&&JSON.parse(a.body);let s=await(0,MIt.default)(r,a),{status:u,message:c}=await xl(s);return{httpStatus:u,response:c,success:u>=200&&u<=206}}catch(s){return{success:!1,response:xr(s)}}}var MIt,_nn,jIt=v(()=>{"use strict";MIt=te(require("node-fetch"));nu();Yi();_nn=["POST","PUT","PATCH"];o(BIt,"run")});async function qIt({inputs:e,appId:t}){typeof e.text!="string"&&(e.text=JSON.stringify(e.text));let r=`App ${t} - ${e.text}`;return console.log(r),{success:!0,message:r}}var $It=v(()=>{"use strict";o(qIt,"run")});async function GIt({inputs:e}){let{url:t,username:r,avatar_url:n,content:i}=e;if(r||(r=xnn),n||(n=Ann),!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let a;try{a=await(0,WIt.default)(t,{method:"post",body:JSON.stringify({username:r,avatar_url:n,content:i}),headers:{"Content-Type":"application/json"}})}catch(c){return{httpStatus:400,response:c.message,success:!1}}let{status:s,message:u}=await xl(a);return{httpStatus:s,success:s===200||s===204,response:u}}var WIt,xnn,Ann,zIt=v(()=>{"use strict";WIt=te(require("node-fetch"));nu();xnn="Budibase Automate",Ann="https://i.imgur.com/a1cmTKM.png";o(GIt,"run")});async function HIt({inputs:e}){let{url:t,text:r}=e;if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let n;try{n=await(0,VIt.default)(t,{method:"post",body:JSON.stringify({text:r}),headers:{"Content-Type":"application/json"}})}catch(s){return{httpStatus:400,response:s.message,success:!1}}let{status:i,message:a}=await xl(n);return{httpStatus:i,response:a,success:i===200}}var VIt,KIt=v(()=>{"use strict";VIt=te(require("node-fetch"));nu();o(HIt,"run")});async function YIt({inputs:e}){let{url:t,body:r}=e,n={};try{n=r?.value?JSON.parse(r?.value):{}}catch{return{httpStatus:400,response:"Invalid payload JSON",success:!1}}if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let i;try{i=await(0,QIt.default)(t,{method:"post",body:JSON.stringify({platform:"budibase",...n}),headers:{"Content-Type":"application/json"}})}catch(u){return{httpStatus:400,response:u.message,success:!1}}let{status:a,message:s}=await xl(i);return{success:a===200,httpStatus:a,response:s}}var QIt,JIt=v(()=>{"use strict";QIt=te(require("node-fetch"));nu();o(YIt,"run")});async function ZIt({inputs:e}){let{url:t,body:r,method:n,authorization:i}=e,a={};try{a=r?.value?JSON.parse(r?.value):{}}catch{return{httpStatus:400,response:"Invalid payload JSON",success:!1}}if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let s,u={method:n||"GET",headers:{"Content-Type":"application/json",Authorization:i}};["GET","HEAD"].includes(u.method)||(u.body=JSON.stringify({...a}));try{s=await(0,XIt.default)(t,u)}catch(p){return{httpStatus:400,response:p.message,success:!1}}let{status:c,message:l}=await xl(s);return{httpStatus:c,success:c===200,response:l}}var XIt,eOt=v(()=>{"use strict";XIt=te(require("node-fetch"));nu();V();o(ZIt,"run")});async function rOt({inputs:e}){let{url:t,body:r}=e,n={};try{r?.value&&(typeof r.value=="string"?n=JSON.parse(r.value):n=r.value,Object.keys(n).forEach(u=>{if(typeof n[u]=="string")try{let c=JSON.parse(n[u]);n[u]=c}catch{}}))}catch{return{httpStatus:400,response:"Invalid payload JSON",success:!1}}if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let i;try{i=await(0,tOt.default)(t,{method:"post",body:JSON.stringify({...n}),headers:{"Content-Type":"application/json"}})}catch(u){return{httpStatus:400,response:u.message,success:!1}}let{status:a,message:s}=await xl(i);return{httpStatus:a,success:a===200,response:s}}var tOt,nOt=v(()=>{"use strict";tOt=te(require("node-fetch"));nu();o(rOt,"run")});async function iOt({inputs:e}){try{let{field:t,condition:r,value:n}=e;!isNaN(n)&&!isNaN(t)&&typeof t!="boolean"&&typeof n!="boolean"?(n=parseFloat(n),t=parseFloat(t)):!isNaN(Date.parse(n))&&!isNaN(Date.parse(t))&&(n=Date.parse(n),t=Date.parse(t));let i=!1;if(typeof t!="object"&&typeof n!="object")switch(r){case"EQUAL":i=t===n;break;case"NOT_EQUAL":i=t!==n;break;case"GREATER_THAN":i=t>n;break;case"LESS_THAN":i=t<n;break}else i=!1;return{success:!0,result:i,refValue:t,comparisonValue:n}}catch{return{success:!1,result:!1}}}var oOt=v(()=>{"use strict";V();o(iOt,"run")});async function aOt({inputs:e}){return await oSt(e.time),{success:!0}}var sOt=v(()=>{"use strict";Rs();o(aOt,"run")});var CG={};ce(CG,{bulkImport:()=>Lnn,destroy:()=>Nnn,updateTable:()=>Pnn});function cOt(e){if(!e)throw new Error("No table supplied");if(e.sourceId)return e.sourceId;if(!e._id)throw new Error("No table ID supplied");return ui(e._id).datasourceId}async function Pnn(e,t){let r=e.request.body;delete r.rows;let n=e.request.body._id,i=cOt(e.request.body);r._id||(r.created=!0);try{let{datasource:a,oldTable:s,table:u}=await k.tables.external.save(i,r,{tableId:n,renaming:t});return Sr?.emitDatasourceUpdate(e,a),{table:u,oldTable:s}}catch(a){a instanceof Error?e.throw(400,a.message):e.throw(a.status||500,a?.message||a)}}async function Nnn(e){let t=await k.tables.getTable(e.params.tableId),r=cOt(t);try{let{datasource:n,table:i}=await k.tables.external.destroy(r,t);return Sr?.emitDatasourceUpdate(e,n),i}catch(n){n instanceof Error?e.throw(400,n.message):e.throw(n.status||500,n.message||n)}}async function Lnn(e){let t=await k.tables.getTable(e.params.tableId),{rows:r,identifierFields:n}=e.request.body,i=t.schema;n&&n.length>0&&!(0,uOt.isEqual)(n,t.primary)&&e.throw(400,"Identifier fields are not supported for bulk import into an external datasource."),(!r||!u_(r)||!s_(i))&&e.throw(400,"Provided data import information is invalid.");let a=[];for(let s of G6(r,t)){let u=await _l(e.user?._id,t,s,{noAutoRelationships:!0});a.push(u)}return await ks("BULK_UPSERT",t,{rows:a}),await Oe.rows.imported(t,a.length),t}var uOt,lOt=v(()=>{"use strict";tn();I1();X();z6();V();We();Ta();Za();uOt=require("lodash");o(cOt,"getDatasourceId");o(Pnn,"updateTable");o(Nnn,"destroy");o(Lnn,"bulkImport")});var kge={};ce(kge,{bulkImport:()=>Mnn,destroy:()=>Fnn,updateTable:()=>Unn});async function Unn(e,t){let{_rename:r,rows:n,...i}=e.request.body,a={_id:KW(),...i,type:i.type||"table",sourceType:i.sourceType||"internal"};a.views||(a.views={});try{let{table:s,oldTable:u}=await k.tables.internal.save(a,{userId:e.user._id,rowsToImport:n,tableId:e.request.body._id,renaming:t});return{table:s,oldTable:u}}catch(s){s instanceof Error?e.throw(400,s.message):e.throw(s.status||500,s.message||s)}}async function Fnn(e){let t=await k.tables.getTable(e.params.tableId);try{let{table:r}=await k.tables.internal.destroy(t);return r}catch(r){r instanceof Error?e.throw(400,r.message):e.throw(r.status||500,r.message||r)}}async function Mnn(e){let t=await k.tables.getTable(e.params.tableId),{rows:r,identifierFields:n}=e.request.body;return await Rhe(t,{importRows:r,identifierFields:n,userId:e.user._id}),t}var pOt=v(()=>{"use strict";dt();c_();V();We();o(Unn,"updateTable");o(Fnn,"destroy");o(Mnn,"bulkImport")});function Dge({tableId:e,table:t}){return t&&l6(t)||e&&bn(e)?CG:kge}function Bnn(e){for(let[t,r]of Object.entries(e.schema))if(!(!("default"in r)||r.default==null)&&Qe.schema.isRequired(r.constraints))throw new ge(`Cannot make field "${t}" required, it has a default value.`,400)}async function jnn(e,t){if(Bnn(e),e.primaryDisplay&&!ERe(e.schema[e.primaryDisplay]?.type)&&(t||(await k.tables.getTable(e._id)).primaryDisplay!==e.primaryDisplay))throw new ge(`Column "${e.primaryDisplay}" cannot be used as a display type.`,400)}async function DG(e){let t=await k.tables.getAllInternalTables(),r=await k.datasources.getExternalDatasources(),n=[];for(let a of r){let s=a.entities;if(s)for(let u of Object.values(s))n.push({...await Sl(u),sourceType:"external",sourceId:a._id,sql:Xm(a)})}let i=[];for(let a of[...t,...n])i.push(await k.tables.enrichViewSchemas(a));e.body=i}async function Ly(e){let t=e.params.tableId,r=await k.tables.getTable(t),n=await k.tables.enrichViewSchemas(r);e.body=n}async function G1(e){let t=e.appId,{rows:r,...n}=e.request.body,i=r,a=e.request.body._rename,s=!n._id;await jnn(n,s);let u;if(s)u=await k.tables.create(n,r,e.user._id),u=await k.tables.enrichViewSchemas(u),u=await Sl(u),await Oe.table.created(u);else{let c=Dge({table:n}),{table:l,oldTable:p}=await c.updateTable(e,a);u=l,u=await Sl(u),p&&await Oe.table.updated(p,u)}a&&await k.views.renameLinkedViews(u,a),i&&await Oe.table.imported(u),e.message=`Table ${n.name} saved successfully.`,e.eventEmitter?.emitTable("table:save",t,{...u}),e.body=u,Sr?.emitTableUpdate(e,(0,Cge.cloneDeep)(u))}async function PG(e){let t=e.appId,r=e.params.tableId;await k.rowActions.deleteAll(r);let n=await Dge({tableId:r}).destroy(e);await Oe.table.deleted(n,t),e.eventEmitter?.emitTable("table:delete",t,n),e.table=n,e.body={message:`Table ${r} deleted.`},Sr?.emitTableDeletion(e,n)}async function fOt(e){let t=e.params.tableId;await Dge({tableId:t}).bulkImport(e),e.body={message:"Bulk rows created."}}async function dOt(e){let{csvString:t}=e.request.body,r=await rA.jsonFromCsvString(t);e.body=r}async function mOt(e){let{rows:t,schema:r}=e.request.body;u_(t)&&s_(r)?e.body=yhe(t,r,Oo):e.status=422}async function hOt(e){let{rows:t,tableId:r}=e.request.body,n=null,i;if(r){let a=await k.tables.getTable(r);n=a.schema,l6(a)?i=Rc:(n._id={name:"_id",type:"string"},i=Oo.filter(s=>s!=="_id"))}else{e.status=422;return}r&&u_(t)&&s_(n)?e.body=yhe(t,n,i):e.status=422}async function gOt(e){let{oldColumn:t,newColumn:r}=e.request.body,n=e.params.tableId,i=await k.tables.getTable(n),a=await k.tables.migrate(i,t,r);for(let s of a.tablesUpdated)Sr?.emitTableUpdate(e,s,{includeOriginator:!0});e.body={message:`Column ${t} migrated.`}}async function yOt(e){let t=e.params.tableId,r=await k.tables.getTable(t);if(l6(r))throw new ge("Cannot duplicate external tables",422);let n=await k.tables.duplicate(r,e.user._id);e.message=`Table ${r.name} duplicated successfully.`,e.body=n;let i=await Sl(n);Sr?.emitTableUpdate(e,(0,Cge.cloneDeep)(i))}var Cge,z1=v(()=>{"use strict";X();Xe();V();Cge=require("lodash");tn();We();ky();z6();Ta();lOt();pOt();o(Dge,"pickApi");o(Bnn,"checkDefaultFields");o(jnn,"guardTable");o(DG,"fetch");o(Ly,"find");o(G1,"save");o(PG,"destroy");o(fOt,"bulkImport");o(dOt,"csvToJson");o(mOt,"validateNewTableImport");o(hOt,"validateExistingTableImport");o(gOt,"migrate");o(yOt,"duplicate")});async function qnn(e,t){let r=Ra(e,null,{params:{tableId:t}});return await Ly(r),r.body}async function bOt({inputs:e,appId:t}){let{tableId:r,filters:n,sortColumn:i,sortOrder:a,limit:s}=e;if(!r)return{success:!1,response:{message:"You must select a table to query."}};let u=await qnn(t,r),c="string";i&&u&&u.schema&&u.schema[i]&&(c=u.schema[i].type==="number"?"number":"string");let l=Ra(t,null,{params:{tableId:decodeURIComponent(r)},body:{sortType:c,limit:s,sort:i,query:n||{},sortOrder:a||"ascending"},version:"1"});try{let p;return e.onEmptyFilter==="none"&&e["filters-def"]&&mG(e["filters-def"])?p=[]:(await ih(l),p=l.body?l.body.rows:[]),{rows:p,success:!0}}catch(p){return{success:!1,response:xr(p)}}}var vOt=v(()=>{"use strict";hd();z1();nu();Yi();V();o(qnn,"getTable");o(bOt,"run")});async function Wnn(e,t){let r=Ra(e,null,{params:{tableId:t}});return await Ly(r),r.body}async function wOt({inputs:e,appId:t}){let{tableId:r,filters:n,sortColumn:i,sortOrder:a}=e;if(!r)return{success:!1,row:null,response:{message:"You must select a table to query."}};let s=await Wnn(t,r),u="string";i&&s&&s.schema&&s.schema[i]&&(u=s.schema[i].type==="number"?"number":"string");let c=Ra(t,null,{params:{tableId:decodeURIComponent(r)},body:{sortType:u,limit:1,sort:i,query:n||{},sortOrder:a||"ascending"},version:"1"});try{let l;return e.onEmptyFilter==="none"&&e["filters-def"]&&mG(e["filters-def"])?l=[]:(await ih(c),l=c.body?c.body.rows:[]),{row:l&&l.length>0?l[0]:null,success:!0}}catch(l){return{success:!1,row:null,response:xr(l)}}}var _Ot=v(()=>{"use strict";hd();z1();nu();Yi();V();o(Wnn,"getTable");o(wOt,"run")});async function EOt({inputs:e}){return e.collection?{success:!0,value:e.collection}:{success:!1}}var SOt=v(()=>{"use strict";o(EOt,"run")});async function xOt({inputs:e}){let{automationId:t,...r}=e.automation;if(await so.isTriggerAutomationRunEnabled())if(e.automation.automationId){let i=await N.getWorkspaceDB().get(e.automation.automationId),a=ue.AUTOMATION_THREAD_TIMEOUT;e.timeout!==void 0&&(a=e.timeout*1e3);let s=await ku(i,{fields:{...r},timeout:a},{getResponses:!0});if(LG(s))return{success:s.status==="success",value:s.steps,status:s.status};throw new Error("Automation did not have a collect block")}else return{success:!1,status:"error"};else return{success:!1,status:"error"}}var AOt=v(()=>{"use strict";X();ir();V();Bt();Uy();o(xOt,"run")});async function Hnn(e){return(await new TOt.OpenAI({apiKey:K.OPENAI_API_KEY}).chat.completions.create({model:e.model,messages:[{role:"user",content:e.prompt}]}))?.choices[0]?.message?.content}async function ROt({inputs:e}){if(e.prompt==null)return{success:!1,response:"Budibase OpenAI Automation Failed: No prompt supplied"};try{let t,r=await Nr.getLLM({model:e.model});return t=r?(await r.prompt(e.prompt)).message:await Hnn(e),{response:t,success:!0}}catch(t){return{success:!1,response:xr(t)}}}var TOt,IOt=v(()=>{"use strict";TOt=require("openai");X();Yi();ir();o(Hnn,"legacyOpenAIPrompt");o(ROt,"run")});async function kOt({inputs:e,context:t}){if(e.code==null)return{stdout:"Budibase bash automation failed: Invalid inputs"};try{let r=Ui(e.code,t),n,i=!0;try{n=(0,OOt.execSync)(r,{timeout:ue.QUERY_THREAD_TIMEOUT}).toString()}catch(a){n=a.message,i=!1}return{stdout:n,success:i}}catch(r){return{success:!1,response:xr(r)}}}var OOt,COt=v(()=>{"use strict";OOt=require("child_process");So();Yi();Bt();o(kOt,"run")});async function DOt({inputs:e}){if(!e.textInput||!e.categoryItems||e.categoryItems.length===0)return{success:!1,response:"Classify Text AI Step Failed: Text Input and Categories (non-empty) are required."};try{let t=await Nr.getLLMOrThrow(),r=e.categoryItems.map(s=>s.category),n=Nr.classifyText(e.textInput,r),a=(await t.prompt(n))?.message?.trim();return a&&r.includes(a)?{response:a,category:a,success:!0}:a?{success:!1,response:`Classify Text AI Step Failed: AI returned category '${a}', which is not in the provided list: [${r.join(", ")}]. Ensure the AI is constrained to the list or check AI response variability.`}:{success:!1,response:"Classify Text AI Step Failed: AI did not return a category."}}catch(t){return{success:!1,response:xr(t)}}}var POt=v(()=>{"use strict";ir();Yi();o(DOt,"run")});async function NOt({inputs:e}){if(e.prompt==null)return{success:!1,response:"No prompt supplied"};try{return{response:(await(await Nr.getLLM())?.prompt(e.prompt))?.message,success:!0}}catch(t){return{success:!1,response:xr(t)}}}var LOt=v(()=>{"use strict";Yi();ir();o(NOt,"run")});async function UOt({inputs:e}){if(e.text==null||e.language==null)return{success:!1,response:"No text or language supplied"};try{let t=await Nr.getLLMOrThrow(),r=Nr.translate(e.text,e.language);return{response:(await t?.prompt(r))?.message,success:!0}}catch(t){return{success:!1,response:xr(t)}}}var FOt=v(()=>{"use strict";Yi();ir();o(UOt,"run")});async function MOt({inputs:e}){if(e.text==null)return{success:!1,response:"No text supplied"};try{let t=await Nr.getLLMOrThrow(),r=Nr.summarizeText(e.text,e.length);return{response:(await t?.prompt(r))?.message,success:!0}}catch(t){return{success:!1,response:xr(t)}}}var BOt=v(()=>{"use strict";Yi();ir();o(MOt,"run")});async function jOt({inputs:e}){if(!e.contentType||!e.instructions)return{success:!1,response:"Generate Text AI Step Failed: Content Type and Instructions are required."};try{let t=await Nr.getLLMOrThrow(),r=ein(e.contentType),n=new Nr.LLMRequest().addUserMessage(`${r}
|
|
1037
1037
|
|
|
1038
1038
|
Instructions: ${e.instructions}
|
|
1039
1039
|
|