quickbase-js 2.2.2 → 2.3.0

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.
@@ -1,11 +1,11 @@
1
1
  /**
2
- * QuickBase JS SDK v2.2.2
2
+ * QuickBase JS SDK v2.3.0
3
3
  * https://github.com/DrewBradfordXYZ/quickbase-js#readme
4
4
  * @license MIT
5
5
  */
6
- "use strict";var QuickBase=(()=>{var ae=Object.defineProperty;var dr=Object.getOwnPropertyDescriptor;var ur=Object.getOwnPropertyNames;var cr=Object.prototype.hasOwnProperty;var mr=(t,r,e)=>r in t?ae(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e;var pr=(t,r)=>{for(var e in r)ae(t,e,{get:r[e],enumerable:!0})},gr=(t,r,e,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of ur(r))!cr.call(t,n)&&n!==e&&ae(t,n,{get:()=>r[n],enumerable:!(s=dr(r,n))||s.enumerable});return t};var hr=t=>gr(ae({},"__esModule",{value:!0}),t);var m=(t,r,e)=>mr(t,typeof r!="symbol"?r+"":r,e);var Vr={};pr(Vr,{AuthenticationError:()=>G,AuthorizationError:()=>J,NoOpThrottle:()=>te,NotFoundError:()=>Z,QuickbaseError:()=>C,RateLimitError:()=>D,ReadOnlyError:()=>M,SchemaError:()=>H,ServerError:()=>W,SlidingWindowThrottle:()=>ee,SsoTokenStrategy:()=>V,TempTokenStrategy:()=>Q,TicketStrategy:()=>K,TimeoutError:()=>$,UserTokenStrategy:()=>X,ValidationError:()=>Y,XmlClient:()=>oe,XmlError:()=>O,XmlErrorCode:()=>_,createApiMethods:()=>ge,createAuthStrategy:()=>ue,createClient:()=>lr,createXmlClient:()=>ar,default:()=>Qr,isXmlInvalidTicket:()=>ve,isXmlNotFound:()=>Pe,isXmlUnauthorized:()=>xe,isXmlWriteAction:()=>Ce});var H=class extends Error{constructor(r){super(r),this.name="SchemaError"}};function De(t){if(!t)return;let r=new Map,e=new Map,s=new Map,n=new Map;for(let[o,i]of Object.entries(t.tables)){let l=i.id;r.set(o,l),e.set(l,o);let d=new Map,c=new Map;for(let[f,R]of Object.entries(i.fields))d.set(f,R),c.set(R,f);s.set(l,d),n.set(l,c)}return{original:t,tableAliasToId:r,tableIdToAlias:e,fieldAliasToId:s,fieldIdToAlias:n}}function F(t,r){if(!t)return r;let e=t.tableAliasToId.get(r);if(e)return e;if(t.tableIdToAlias.has(r))return r;let s=Array.from(t.tableAliasToId.keys()),n=Fe(r,s),o=n?` Did you mean '${n}'?`:"",i=s.length>0?` Available: ${s.join(", ")}`:"";throw new H(`Unknown table alias '${r}'.${o}${i}`)}function q(t,r,e){if(typeof e=="number")return e;if(!t){let c=parseInt(e,10);return isNaN(c)?e:c}let s=t.fieldAliasToId.get(r);if(s){let c=s.get(e);if(c!==void 0)return c}let n=parseInt(e,10);if(!isNaN(n))return n;let o=s?Array.from(s.keys()):[],i=Fe(e,o),l=i?` Did you mean '${i}'?`:"",d=t.tableIdToAlias.get(r)||r;throw new H(`Unknown field alias '${e}' in table '${d}'.${l}`)}function U(t,r,e){return t?t.fieldIdToAlias.get(r)?.get(e):void 0}function z(t,r){if(t)return t.tableIdToAlias.get(r)}function Fe(t,r,e=3){let s=t.toLowerCase(),n,o=e+1;for(let i of r){let l=fr(s,i.toLowerCase());l<o&&(o=l,n=i)}return o<=e?n:void 0}function fr(t,r){if(t.length===0)return r.length;if(r.length===0)return t.length;let e=Array.from({length:r.length+1},(s,n)=>Array.from({length:t.length+1},(o,i)=>n===0?i:i===0?n:0));for(let s=1;s<=r.length;s++)for(let n=1;n<=t.length;n++)r.charAt(s-1)===t.charAt(n-1)?e[s][n]=e[s-1][n-1]:e[s][n]=Math.min(e[s-1][n-1]+1,e[s][n-1]+1,e[s-1][n]+1);return e[r.length][t.length]}var S={baseUrl:"https://api.quickbase.com/v1",timeout:3e4,debug:!1,retry:{maxAttempts:3,initialDelayMs:1e3,maxDelayMs:3e4,multiplier:2},proactiveThrottle:{enabled:!1,requestsPer10Seconds:100},tempTokenLifespanMs:29e4,autoPaginate:!1,convertDates:!0};var C=class t extends Error{constructor(e,s,n){super(e,{cause:n?.cause});m(this,"statusCode");m(this,"description");m(this,"rayId");this.name="QuickbaseError",this.statusCode=s,this.description=n?.description,this.rayId=n?.rayId,Error.captureStackTrace&&Error.captureStackTrace(this,t)}toJSON(){return{name:this.name,message:this.message,statusCode:this.statusCode,description:this.description,rayId:this.rayId}}},D=class extends C{constructor(e,s){super(s||`Rate limited. Retry after ${e.retryAfter??"unknown"} seconds`,429,{rayId:e.qbApiRay||e.cfRay});m(this,"retryAfter");m(this,"rateLimitInfo");this.name="RateLimitError",this.retryAfter=e.retryAfter,this.rateLimitInfo=e}toJSON(){return{...super.toJSON(),retryAfter:this.retryAfter,rateLimitInfo:this.rateLimitInfo}}},G=class extends C{constructor(r,e){super(r,401,e),this.name="AuthenticationError"}},J=class extends C{constructor(r,e){super(r,403,e),this.name="AuthorizationError"}},Z=class extends C{constructor(r,e){super(r,404,e),this.name="NotFoundError"}},Y=class extends C{constructor(e,s){super(e,400,s);m(this,"errors");this.name="ValidationError",this.errors=s?.errors}toJSON(){return{...super.toJSON(),errors:this.errors}}},$=class extends C{constructor(e,s){super(`Request timed out after ${e}ms`,0,s);m(this,"timeoutMs");this.name="TimeoutError",this.timeoutMs=e}toJSON(){return{...super.toJSON(),timeoutMs:this.timeoutMs}}},W=class extends C{constructor(r,e,s){super(e,r,s),this.name="ServerError"}};async function fe(t,r){let e=t.headers.get("qb-api-ray")||t.headers.get("cf-ray")||void 0,s=null;try{s=await t.json()}catch{}let n=s?.message||t.statusText||"Unknown error",o=s?.description;switch(t.status){case 400:return new Y(n,{description:o,rayId:e,errors:s?.errors});case 401:return new G(n,{rayId:e});case 403:return new J(n,{rayId:e});case 404:return new Z(n,{rayId:e});case 429:{let i=t.headers.get("Retry-After"),l={timestamp:new Date,requestUrl:r,httpStatus:429,retryAfter:i?parseInt(i,10):void 0,cfRay:t.headers.get("cf-ray")||void 0,tid:t.headers.get("tid")||void 0,qbApiRay:t.headers.get("qb-api-ray")||void 0,attempt:1};return new D(l,n)}default:return t.status>=500?new W(t.status,n,{description:o,rayId:e}):new C(n,t.status,{description:o,rayId:e})}}function le(t){return t instanceof D||t instanceof W||t instanceof $}var M=class t extends Error{constructor(e,s,n){let o=n?`Read-only mode: write operation blocked (XML action: ${n})`:`Read-only mode: write operation blocked (${e} ${s})`;super(o);m(this,"method");m(this,"path");m(this,"action");this.name="ReadOnlyError",this.method=e,this.path=s,this.action=n,Error.captureStackTrace&&Error.captureStackTrace(this,t)}toJSON(){return{name:this.name,message:this.message,method:this.method,path:this.path,action:this.action}}};var de=class{constructor(r=!1,e="quickbase-js"){m(this,"enabled");m(this,"prefix");this.enabled=r,this.prefix=e}formatMessage(r,e){return`[${new Date().toISOString()}] [${this.prefix}] [${r}] ${e}`}debug(r,e){this.enabled&&(e!==void 0?console.log(this.formatMessage("DEBUG",r),e):console.log(this.formatMessage("DEBUG",r)))}info(r,e){this.enabled&&(e!==void 0?console.info(this.formatMessage("INFO",r),e):console.info(this.formatMessage("INFO",r)))}warn(r,e){e!==void 0?console.warn(this.formatMessage("WARN",r),e):console.warn(this.formatMessage("WARN",r))}error(r,e){e!==void 0?console.error(this.formatMessage("ERROR",r),e):console.error(this.formatMessage("ERROR",r))}rateLimit(r){this.enabled&&this.debug(`Rate limited (attempt ${r.attempt}): ${r.url} - Status ${r.status}, Retry-After: ${r.retryAfter??"not specified"}s`+(r.rayId?`, Ray: ${r.rayId}`:""))}timing(r,e,s){this.enabled&&this.debug(`${r} ${e} completed in ${s}ms`)}retry(r,e,s,n){this.enabled&&this.debug(`Retry ${r}/${e} in ${s}ms: ${n}`)}token(r,e){if(this.enabled){let s=e?` for dbid: ${e}`:"";this.debug(`Token ${r}${s}`)}}};function Re(t){return new de(t)}function be(t){Rr(t);let r={maxAttempts:t.rateLimit?.retry?.maxAttempts??S.retry.maxAttempts,initialDelayMs:t.rateLimit?.retry?.initialDelayMs??S.retry.initialDelayMs,maxDelayMs:t.rateLimit?.retry?.maxDelayMs??S.retry.maxDelayMs,multiplier:t.rateLimit?.retry?.multiplier??S.retry.multiplier},e={enabled:t.rateLimit?.proactiveThrottle?.enabled??S.proactiveThrottle.enabled,requestsPer10Seconds:t.rateLimit?.proactiveThrottle?.requestsPer10Seconds??S.proactiveThrottle.requestsPer10Seconds};return{realm:t.realm,baseUrl:t.baseUrl??S.baseUrl,timeout:t.timeout??S.timeout,debug:t.debug??S.debug,fetchApi:t.fetchApi??globalThis.fetch.bind(globalThis),auth:t.auth,retry:r,proactiveThrottle:e,onRateLimit:t.rateLimit?.onRateLimit,autoPaginate:t.autoPaginate??S.autoPaginate,convertDates:t.convertDates??S.convertDates,schema:De(t.schema),readOnly:t.readOnly??!1,appToken:t.appToken}}function Rr(t){if(!t.realm)throw new Error("QuickBase realm is required");if(typeof t.realm!="string")throw new Error("QuickBase realm must be a string");if(t.realm.includes("."))throw new Error('Realm should be just the subdomain (e.g., "mycompany" not "mycompany.quickbase.com")');if(!t.auth)throw new Error("Authentication configuration is required");if(br(t.auth),t.timeout!==void 0&&(typeof t.timeout!="number"||t.timeout<=0))throw new Error("Timeout must be a positive number");t.rateLimit?.retry&&yr(t.rateLimit.retry),t.rateLimit?.proactiveThrottle&&Tr(t.rateLimit.proactiveThrottle)}function br(t){switch(t.type){case"user-token":if(!t.userToken)throw new Error("User token is required for user-token auth");break;case"temp-token":break;case"sso":if(!t.samlToken)throw new Error("SAML token is required for SSO auth");break;case"ticket":if(!t.username)throw new Error("Username is required for ticket auth");if(!t.password)throw new Error("Password is required for ticket auth");break;default:throw new Error(`Unknown auth type: ${t.type}`)}}function yr(t){if(t.maxAttempts!==void 0&&(typeof t.maxAttempts!="number"||t.maxAttempts<0))throw new Error("maxAttempts must be a non-negative number");if(t.initialDelayMs!==void 0&&(typeof t.initialDelayMs!="number"||t.initialDelayMs<0))throw new Error("initialDelayMs must be a non-negative number");if(t.maxDelayMs!==void 0&&(typeof t.maxDelayMs!="number"||t.maxDelayMs<0))throw new Error("maxDelayMs must be a non-negative number");if(t.multiplier!==void 0&&(typeof t.multiplier!="number"||t.multiplier<1))throw new Error("multiplier must be a number >= 1")}function Tr(t){if(t.requestsPer10Seconds!==void 0&&(typeof t.requestsPer10Seconds!="number"||t.requestsPer10Seconds<=0))throw new Error("requestsPer10Seconds must be a positive number")}function ye(t){return`${t}.quickbase.com`}var Ar=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-]\d{2}:?\d{2})?)?$/;function Ue(t){return Ar.test(t)}function ne(t,r){if(!r||t===null||t===void 0||typeof t!="object")return t;if(Array.isArray(t))return t.map(s=>ne(s,r));if(t instanceof Date)return t;let e={};for(let[s,n]of Object.entries(t))typeof n=="string"&&Ue(n)?e[s]=new Date(n):n instanceof Date?e[s]=n:typeof n=="object"&&n!==null?e[s]=ne(n,r):e[s]=n;return e}var X=class{constructor(r,e){m(this,"userToken");m(this,"logger");this.userToken=r,this.logger=e.logger}async getToken(r){return this.userToken}getAuthorizationHeader(r){return`QB-USER-TOKEN ${r}`}async handleAuthError(r){return this.logger.debug("Auth error with user token - cannot refresh"),!1}invalidate(r){}};var j=class{constructor(r){m(this,"cache",new Map);m(this,"defaultLifespanMs");this.defaultLifespanMs=r}get(r){let e=this.cache.get(r);return e?Date.now()>=e.expiresAt-1e4?(this.cache.delete(r),null):e.token:null}set(r,e,s){let n=Date.now()+(s??this.defaultLifespanMs);this.cache.set(r,{token:e,expiresAt:n})}delete(r){return this.cache.delete(r)}clear(){this.cache.clear()}has(r){return this.get(r)!==null}getTimeToExpiry(r){let e=this.cache.get(r);if(!e)return null;let s=e.expiresAt-Date.now();return s>0?s:null}get size(){return this.cleanup(),this.cache.size}cleanup(){let r=Date.now();for(let[e,s]of this.cache)r>=s.expiresAt&&this.cache.delete(e)}};var Q=class{constructor(r,e,s){m(this,"userToken");m(this,"appToken");m(this,"realm");m(this,"baseUrl");m(this,"fetchApi");m(this,"logger");m(this,"cache");m(this,"pendingFetches",new Map);this.userToken=r,this.appToken=s?.appToken,this.realm=e.realm,this.baseUrl=e.baseUrl,this.fetchApi=e.fetchApi,this.logger=e.logger,this.cache=new j(s?.tokenLifespanMs??S.tempTokenLifespanMs)}async getToken(r){if(!r)throw new Error("Database ID (dbid) is required for temporary token authentication");let e=this.cache.get(r);if(e)return this.logger.token("cache-hit",r),e;this.logger.token("cache-miss",r);let s=this.pendingFetches.get(r);if(s)return this.logger.debug(`Waiting for existing token fetch for dbid: ${r}`),s;let n=this.fetchToken(r);this.pendingFetches.set(r,n);try{return await n}finally{this.pendingFetches.delete(r)}}async fetchToken(r){this.logger.token("fetch",r);let e=`${this.baseUrl}/auth/temporary/${r}`,s={"QB-Realm-Hostname":`${this.realm}.quickbase.com`,"Content-Type":"application/json"};this.userToken&&(s.Authorization=`QB-USER-TOKEN ${this.userToken}`),this.appToken&&(s["QB-App-Token"]=this.appToken);let n=await this.fetchApi(e,{method:"GET",headers:s,credentials:"include"});if(!n.ok){let l=await n.text();throw new G(`Failed to fetch temporary token for ${r}: ${n.status} ${l}`,{rayId:n.headers.get("qb-api-ray")||void 0})}let i=(await n.json()).temporaryAuthorization;if(!i)throw new G(`No temporary token in response for ${r}`);return this.cache.set(r,i),this.logger.debug(`Cached new token for dbid: ${r}`),i}getAuthorizationHeader(r){return`QB-TEMP-TOKEN ${r}`}async handleAuthError(r){if(!r)return this.logger.debug("Auth error without dbid - cannot refresh temp token"),!1;this.invalidate(r);try{return this.logger.token("refresh",r),await this.getToken(r),!0}catch(e){return this.logger.error(`Failed to refresh temp token for ${r}`,e),!1}}invalidate(r){r?(this.logger.token("expire",r),this.cache.delete(r)):this.cache.clear()}};var V=class{constructor(r,e,s){m(this,"samlToken");m(this,"realm");m(this,"baseUrl");m(this,"fetchApi");m(this,"logger");m(this,"cache");m(this,"pendingExchange",null);this.samlToken=r,this.realm=e.realm,this.baseUrl=e.baseUrl,this.fetchApi=e.fetchApi,this.logger=e.logger,this.cache=new j(s?.tokenLifespanMs??S.tempTokenLifespanMs)}get cacheKey(){return"__sso__"}async getToken(r){let e=this.cache.get(this.cacheKey);if(e)return this.logger.token("cache-hit"),e;if(this.logger.token("cache-miss"),this.pendingExchange)return this.logger.debug("Waiting for existing SSO token exchange"),this.pendingExchange;let s=this.exchangeToken();this.pendingExchange=s;try{return await s}finally{this.pendingExchange=null}}async exchangeToken(){this.logger.token("fetch");let r=`${this.baseUrl}/auth/oauth/token`,e=new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:token-exchange",requested_token_type:"urn:quickbase:params:oauth:token-type:temp_token",subject_token:this.samlToken,subject_token_type:"urn:ietf:params:oauth:token-type:saml2"}),s=await this.fetchApi(r,{method:"POST",headers:{"QB-Realm-Hostname":`${this.realm}.quickbase.com`,"Content-Type":"application/x-www-form-urlencoded"},body:e.toString()});if(!s.ok){let i=await s.text();throw new G(`SSO token exchange failed: ${s.status} ${i}`,{rayId:s.headers.get("qb-api-ray")||void 0})}let o=(await s.json()).access_token;if(!o)throw new G("No access_token in SSO exchange response");return this.cache.set(this.cacheKey,o),this.logger.debug("Cached new SSO token"),o}getAuthorizationHeader(r){return`QB-TEMP-TOKEN ${r}`}async handleAuthError(r){this.invalidate();try{return this.logger.token("refresh"),await this.getToken(),!0}catch(e){return this.logger.error("Failed to refresh SSO token",e),!1}}invalidate(r){this.logger.token("expire"),this.cache.clear()}};var K=class{constructor(r,e,s,n){m(this,"username");m(this,"password");m(this,"hours");m(this,"realm");m(this,"fetchApi");m(this,"logger");m(this,"onExpired");m(this,"persist");m(this,"storageKey");m(this,"ticket",null);m(this,"userId",null);m(this,"expiresAt",null);m(this,"authenticated",!1);m(this,"pendingAuth",null);this.username=r,this.password=e,this.hours=Math.min(Math.max(s?.hours??12,1),4380),this.onExpired=s?.onExpired,this.persist=s?.persist,this.realm=n.realm,this.fetchApi=n.fetchApi,this.logger=n.logger,this.storageKey=`qb_ticket_${this.realm}`,this.restoreFromStorage()}async getToken(r){if(this.ticket&&this.expiresAt&&Date.now()<this.expiresAt)return this.ticket;if(this.ticket&&this.expiresAt&&Date.now()>=this.expiresAt)throw this.clearTicket(),this.onExpired?.(),new Error("Ticket expired; create a new client with fresh credentials");if(this.authenticated)throw this.onExpired?.(),new Error("Ticket expired; create a new client with fresh credentials");if(this.pendingAuth)return this.pendingAuth;this.pendingAuth=this.authenticate();try{return await this.pendingAuth}finally{this.pendingAuth=null}}getAuthorizationHeader(r){return`QB-TICKET ${r}`}async handleAuthError(r){return this.clearTicket(),this.logger.debug("Ticket auth error - cannot refresh (password was cleared)"),this.onExpired?.(),!1}invalidate(r){this.clearTicket()}clearTicket(){this.ticket=null,this.expiresAt=null,this.clearFromStorage()}getUserId(){return this.userId}async authenticate(){if(!this.password)throw this.onExpired?.(),new Error("Ticket expired; create a new client with fresh credentials");let r=`https://${this.realm}.quickbase.com/db/main`,e=`<qdbapi>
6
+ "use strict";var QuickBase=(()=>{var ue=Object.defineProperty;var mr=Object.getOwnPropertyDescriptor;var pr=Object.getOwnPropertyNames;var gr=Object.prototype.hasOwnProperty;var hr=(t,r,e)=>r in t?ue(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e;var fr=(t,r)=>{for(var e in r)ue(t,e,{get:r[e],enumerable:!0})},Rr=(t,r,e,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of pr(r))!gr.call(t,n)&&n!==e&&ue(t,n,{get:()=>r[n],enumerable:!(s=mr(r,n))||s.enumerable});return t};var br=t=>Rr(ue({},"__esModule",{value:!0}),t);var m=(t,r,e)=>hr(t,typeof r!="symbol"?r+"":r,e);var zr={};fr(zr,{AuthenticationError:()=>E,AuthorizationError:()=>ee,NoOpThrottle:()=>ne,NotFoundError:()=>te,QuickbaseAppTokenError:()=>j,QuickbaseError:()=>S,QuickbaseTicketError:()=>X,QuickbaseXmlError:()=>Q,RateLimitError:()=>F,ReadOnlyError:()=>_,SchemaError:()=>Z,ServerError:()=>W,SlidingWindowThrottle:()=>se,SsoTokenStrategy:()=>z,TempTokenStrategy:()=>H,TicketStrategy:()=>J,TimeoutError:()=>M,UserTokenStrategy:()=>V,ValidationError:()=>re,XmlClient:()=>le,XmlError:()=>O,XmlErrorCode:()=>G,checkError:()=>p,createApiMethods:()=>Re,createAuthStrategy:()=>pe,createClient:()=>cr,createXmlClient:()=>ur,default:()=>Hr,isXmlInvalidTicket:()=>Ce,isXmlNotFound:()=>we,isXmlUnauthorized:()=>Se,isXmlWriteAction:()=>De});var Z=class extends Error{constructor(r){super(r),this.name="SchemaError"}};function $e(t){if(!t)return;let r=new Map,e=new Map,s=new Map,n=new Map;for(let[o,i]of Object.entries(t.tables)){let l=i.id;r.set(o,l),e.set(l,o);let d=new Map,c=new Map;for(let[f,R]of Object.entries(i.fields))d.set(f,R),c.set(R,f);s.set(l,d),n.set(l,c)}return{original:t,tableAliasToId:r,tableIdToAlias:e,fieldAliasToId:s,fieldIdToAlias:n}}function U(t,r){if(!t)return r;let e=t.tableAliasToId.get(r);if(e)return e;if(t.tableIdToAlias.has(r))return r;let s=Array.from(t.tableAliasToId.keys()),n=Me(r,s),o=n?` Did you mean '${n}'?`:"",i=s.length>0?` Available: ${s.join(", ")}`:"";throw new Z(`Unknown table alias '${r}'.${o}${i}`)}function q(t,r,e){if(typeof e=="number")return e;if(!t){let c=parseInt(e,10);return isNaN(c)?e:c}let s=t.fieldAliasToId.get(r);if(s){let c=s.get(e);if(c!==void 0)return c}let n=parseInt(e,10);if(!isNaN(n))return n;let o=s?Array.from(s.keys()):[],i=Me(e,o),l=i?` Did you mean '${i}'?`:"",d=t.tableIdToAlias.get(r)||r;throw new Z(`Unknown field alias '${e}' in table '${d}'.${l}`)}function $(t,r,e){return t?t.fieldIdToAlias.get(r)?.get(e):void 0}function Y(t,r){if(t)return t.tableIdToAlias.get(r)}function Me(t,r,e=3){let s=t.toLowerCase(),n,o=e+1;for(let i of r){let l=yr(s,i.toLowerCase());l<o&&(o=l,n=i)}return o<=e?n:void 0}function yr(t,r){if(t.length===0)return r.length;if(r.length===0)return t.length;let e=Array.from({length:r.length+1},(s,n)=>Array.from({length:t.length+1},(o,i)=>n===0?i:i===0?n:0));for(let s=1;s<=r.length;s++)for(let n=1;n<=t.length;n++)r.charAt(s-1)===t.charAt(n-1)?e[s][n]=e[s-1][n-1]:e[s][n]=Math.min(e[s-1][n-1]+1,e[s][n-1]+1,e[s-1][n]+1);return e[r.length][t.length]}var C={baseUrl:"https://api.quickbase.com/v1",timeout:3e4,debug:!1,retry:{maxAttempts:3,initialDelayMs:1e3,maxDelayMs:3e4,multiplier:2},proactiveThrottle:{enabled:!1,requestsPer10Seconds:100},tempTokenLifespanMs:29e4,autoPaginate:!1,convertDates:!0};var S=class t extends Error{constructor(e,s,n){super(e,{cause:n?.cause});m(this,"statusCode");m(this,"description");m(this,"rayId");this.name="QuickbaseError",this.statusCode=s,this.description=n?.description,this.rayId=n?.rayId,Error.captureStackTrace&&Error.captureStackTrace(this,t)}toJSON(){return{name:this.name,message:this.message,statusCode:this.statusCode,description:this.description,rayId:this.rayId}}},F=class extends S{constructor(e,s){super(s||`Rate limited. Retry after ${e.retryAfter??"unknown"} seconds`,429,{rayId:e.qbApiRay||e.cfRay});m(this,"retryAfter");m(this,"rateLimitInfo");this.name="RateLimitError",this.retryAfter=e.retryAfter,this.rateLimitInfo=e}toJSON(){return{...super.toJSON(),retryAfter:this.retryAfter,rateLimitInfo:this.rateLimitInfo}}},E=class extends S{constructor(r,e){super(r,401,e),this.name="AuthenticationError"}},ee=class extends S{constructor(r,e){super(r,403,e),this.name="AuthorizationError"}},te=class extends S{constructor(r,e){super(r,404,e),this.name="NotFoundError"}},re=class extends S{constructor(e,s){super(e,400,s);m(this,"errors");this.name="ValidationError",this.errors=s?.errors}toJSON(){return{...super.toJSON(),errors:this.errors}}},M=class extends S{constructor(e,s){super(`Request timed out after ${e}ms`,0,s);m(this,"timeoutMs");this.name="TimeoutError",this.timeoutMs=e}toJSON(){return{...super.toJSON(),timeoutMs:this.timeoutMs}}},W=class extends S{constructor(r,e,s){super(e,r,s),this.name="ServerError"}},X=class extends S{constructor(e,s,n){super(e,401,n);m(this,"code");this.name="QuickbaseTicketError",this.code=s}toJSON(){return{...super.toJSON(),code:this.code}}},j=class extends S{constructor(e,s,n){super(e,403,n);m(this,"code");this.name="QuickbaseAppTokenError",this.code=s}toJSON(){return{...super.toJSON(),code:this.code}}},Q=class extends S{constructor(e,s,n){let o=n?.description?`XML API error ${e}: ${s} (${n.description})`:`XML API error ${e}: ${s}`;super(o,0,{rayId:void 0,description:n?.description,cause:n?.cause});m(this,"code");m(this,"text");m(this,"action");this.name="QuickbaseXmlError",this.code=e,this.text=s,this.action=n?.action}toJSON(){return{...super.toJSON(),code:this.code,text:this.text,action:this.action}}};async function ye(t,r){let e=t.headers.get("qb-api-ray")||t.headers.get("cf-ray")||void 0,s=null;try{s=await t.json()}catch{}let n=s?.message||t.statusText||"Unknown error",o=s?.description;switch(t.status){case 400:return new re(n,{description:o,rayId:e,errors:s?.errors});case 401:return new E(n,{rayId:e});case 403:return new ee(n,{rayId:e});case 404:return new te(n,{rayId:e});case 429:{let i=t.headers.get("Retry-After"),l={timestamp:new Date,requestUrl:r,httpStatus:429,retryAfter:i?parseInt(i,10):void 0,cfRay:t.headers.get("cf-ray")||void 0,tid:t.headers.get("tid")||void 0,qbApiRay:t.headers.get("qb-api-ray")||void 0,attempt:1};return new F(l,n)}default:return t.status>=500?new W(t.status,n,{description:o,rayId:e}):new S(n,t.status,{description:o,rayId:e})}}function ce(t){return t instanceof F||t instanceof W||t instanceof M}var _=class t extends Error{constructor(e,s,n){let o=n?`Read-only mode: write operation blocked (XML action: ${n})`:`Read-only mode: write operation blocked (${e} ${s})`;super(o);m(this,"method");m(this,"path");m(this,"action");this.name="ReadOnlyError",this.method=e,this.path=s,this.action=n,Error.captureStackTrace&&Error.captureStackTrace(this,t)}toJSON(){return{name:this.name,message:this.message,method:this.method,path:this.path,action:this.action}}};var me=class{constructor(r=!1,e="quickbase-js"){m(this,"enabled");m(this,"prefix");this.enabled=r,this.prefix=e}formatMessage(r,e){return`[${new Date().toISOString()}] [${this.prefix}] [${r}] ${e}`}debug(r,e){this.enabled&&(e!==void 0?console.log(this.formatMessage("DEBUG",r),e):console.log(this.formatMessage("DEBUG",r)))}info(r,e){this.enabled&&(e!==void 0?console.info(this.formatMessage("INFO",r),e):console.info(this.formatMessage("INFO",r)))}warn(r,e){e!==void 0?console.warn(this.formatMessage("WARN",r),e):console.warn(this.formatMessage("WARN",r))}error(r,e){e!==void 0?console.error(this.formatMessage("ERROR",r),e):console.error(this.formatMessage("ERROR",r))}rateLimit(r){this.enabled&&this.debug(`Rate limited (attempt ${r.attempt}): ${r.url} - Status ${r.status}, Retry-After: ${r.retryAfter??"not specified"}s`+(r.rayId?`, Ray: ${r.rayId}`:""))}timing(r,e,s){this.enabled&&this.debug(`${r} ${e} completed in ${s}ms`)}retry(r,e,s,n){this.enabled&&this.debug(`Retry ${r}/${e} in ${s}ms: ${n}`)}token(r,e){if(this.enabled){let s=e?` for dbid: ${e}`:"";this.debug(`Token ${r}${s}`)}}};function Te(t){return new me(t)}function Ae(t){Tr(t);let r={maxAttempts:t.rateLimit?.retry?.maxAttempts??C.retry.maxAttempts,initialDelayMs:t.rateLimit?.retry?.initialDelayMs??C.retry.initialDelayMs,maxDelayMs:t.rateLimit?.retry?.maxDelayMs??C.retry.maxDelayMs,multiplier:t.rateLimit?.retry?.multiplier??C.retry.multiplier},e={enabled:t.rateLimit?.proactiveThrottle?.enabled??C.proactiveThrottle.enabled,requestsPer10Seconds:t.rateLimit?.proactiveThrottle?.requestsPer10Seconds??C.proactiveThrottle.requestsPer10Seconds};return{realm:t.realm,baseUrl:t.baseUrl??C.baseUrl,timeout:t.timeout??C.timeout,debug:t.debug??C.debug,fetchApi:t.fetchApi??globalThis.fetch.bind(globalThis),auth:t.auth,retry:r,proactiveThrottle:e,onRateLimit:t.rateLimit?.onRateLimit,autoPaginate:t.autoPaginate??C.autoPaginate,convertDates:t.convertDates??C.convertDates,schema:$e(t.schema),readOnly:t.readOnly??!1,appToken:t.appToken}}function Tr(t){if(!t.realm)throw new Error("QuickBase realm is required");if(typeof t.realm!="string")throw new Error("QuickBase realm must be a string");if(t.realm.includes("."))throw new Error('Realm should be just the subdomain (e.g., "mycompany" not "mycompany.quickbase.com")');if(!t.auth)throw new Error("Authentication configuration is required");if(Ar(t.auth),t.timeout!==void 0&&(typeof t.timeout!="number"||t.timeout<=0))throw new Error("Timeout must be a positive number");t.rateLimit?.retry&&Ir(t.rateLimit.retry),t.rateLimit?.proactiveThrottle&&kr(t.rateLimit.proactiveThrottle)}function Ar(t){switch(t.type){case"user-token":if(!t.userToken)throw new Error("User token is required for user-token auth");break;case"temp-token":break;case"sso":if(!t.samlToken)throw new Error("SAML token is required for SSO auth");break;case"ticket":if(!t.username)throw new Error("Username is required for ticket auth");if(!t.password)throw new Error("Password is required for ticket auth");break;default:throw new Error(`Unknown auth type: ${t.type}`)}}function Ir(t){if(t.maxAttempts!==void 0&&(typeof t.maxAttempts!="number"||t.maxAttempts<0))throw new Error("maxAttempts must be a non-negative number");if(t.initialDelayMs!==void 0&&(typeof t.initialDelayMs!="number"||t.initialDelayMs<0))throw new Error("initialDelayMs must be a non-negative number");if(t.maxDelayMs!==void 0&&(typeof t.maxDelayMs!="number"||t.maxDelayMs<0))throw new Error("maxDelayMs must be a non-negative number");if(t.multiplier!==void 0&&(typeof t.multiplier!="number"||t.multiplier<1))throw new Error("multiplier must be a number >= 1")}function kr(t){if(t.requestsPer10Seconds!==void 0&&(typeof t.requestsPer10Seconds!="number"||t.requestsPer10Seconds<=0))throw new Error("requestsPer10Seconds must be a positive number")}function Ie(t){return`${t}.quickbase.com`}var Pr=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-]\d{2}:?\d{2})?)?$/;function _e(t){return Pr.test(t)}function ae(t,r){if(!r||t===null||t===void 0||typeof t!="object")return t;if(Array.isArray(t))return t.map(s=>ae(s,r));if(t instanceof Date)return t;let e={};for(let[s,n]of Object.entries(t))typeof n=="string"&&_e(n)?e[s]=new Date(n):n instanceof Date?e[s]=n:typeof n=="object"&&n!==null?e[s]=ae(n,r):e[s]=n;return e}var V=class{constructor(r,e){m(this,"userToken");m(this,"logger");this.userToken=r,this.logger=e.logger}async getToken(r){return this.userToken}getAuthorizationHeader(r){return`QB-USER-TOKEN ${r}`}async handleAuthError(r){return this.logger.debug("Auth error with user token - cannot refresh"),!1}invalidate(r){}};var K=class{constructor(r){m(this,"cache",new Map);m(this,"defaultLifespanMs");this.defaultLifespanMs=r}get(r){let e=this.cache.get(r);return e?Date.now()>=e.expiresAt-1e4?(this.cache.delete(r),null):e.token:null}set(r,e,s){let n=Date.now()+(s??this.defaultLifespanMs);this.cache.set(r,{token:e,expiresAt:n})}delete(r){return this.cache.delete(r)}clear(){this.cache.clear()}has(r){return this.get(r)!==null}getTimeToExpiry(r){let e=this.cache.get(r);if(!e)return null;let s=e.expiresAt-Date.now();return s>0?s:null}get size(){return this.cleanup(),this.cache.size}cleanup(){let r=Date.now();for(let[e,s]of this.cache)r>=s.expiresAt&&this.cache.delete(e)}};var H=class{constructor(r,e,s){m(this,"userToken");m(this,"appToken");m(this,"realm");m(this,"baseUrl");m(this,"fetchApi");m(this,"logger");m(this,"cache");m(this,"pendingFetches",new Map);this.userToken=r,this.appToken=s?.appToken,this.realm=e.realm,this.baseUrl=e.baseUrl,this.fetchApi=e.fetchApi,this.logger=e.logger,this.cache=new K(s?.tokenLifespanMs??C.tempTokenLifespanMs)}async getToken(r){if(!r)throw new Error("Database ID (dbid) is required for temporary token authentication");let e=this.cache.get(r);if(e)return this.logger.token("cache-hit",r),e;this.logger.token("cache-miss",r);let s=this.pendingFetches.get(r);if(s)return this.logger.debug(`Waiting for existing token fetch for dbid: ${r}`),s;let n=this.fetchToken(r);this.pendingFetches.set(r,n);try{return await n}finally{this.pendingFetches.delete(r)}}async fetchToken(r){this.logger.token("fetch",r);let e=`${this.baseUrl}/auth/temporary/${r}`,s={"QB-Realm-Hostname":`${this.realm}.quickbase.com`,"Content-Type":"application/json"};this.userToken&&(s.Authorization=`QB-USER-TOKEN ${this.userToken}`),this.appToken&&(s["QB-App-Token"]=this.appToken);let n=await this.fetchApi(e,{method:"GET",headers:s,credentials:"include"});if(!n.ok){let l=await n.text();throw new E(`Failed to fetch temporary token for ${r}: ${n.status} ${l}`,{rayId:n.headers.get("qb-api-ray")||void 0})}let i=(await n.json()).temporaryAuthorization;if(!i)throw new E(`No temporary token in response for ${r}`);return this.cache.set(r,i),this.logger.debug(`Cached new token for dbid: ${r}`),i}getAuthorizationHeader(r){return`QB-TEMP-TOKEN ${r}`}async handleAuthError(r){if(!r)return this.logger.debug("Auth error without dbid - cannot refresh temp token"),!1;this.invalidate(r);try{return this.logger.token("refresh",r),await this.getToken(r),!0}catch(e){return this.logger.error(`Failed to refresh temp token for ${r}`,e),!1}}invalidate(r){r?(this.logger.token("expire",r),this.cache.delete(r)):this.cache.clear()}};var z=class{constructor(r,e,s){m(this,"samlToken");m(this,"realm");m(this,"baseUrl");m(this,"fetchApi");m(this,"logger");m(this,"cache");m(this,"pendingExchange",null);this.samlToken=r,this.realm=e.realm,this.baseUrl=e.baseUrl,this.fetchApi=e.fetchApi,this.logger=e.logger,this.cache=new K(s?.tokenLifespanMs??C.tempTokenLifespanMs)}get cacheKey(){return"__sso__"}async getToken(r){let e=this.cache.get(this.cacheKey);if(e)return this.logger.token("cache-hit"),e;if(this.logger.token("cache-miss"),this.pendingExchange)return this.logger.debug("Waiting for existing SSO token exchange"),this.pendingExchange;let s=this.exchangeToken();this.pendingExchange=s;try{return await s}finally{this.pendingExchange=null}}async exchangeToken(){this.logger.token("fetch");let r=`${this.baseUrl}/auth/oauth/token`,e=new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:token-exchange",requested_token_type:"urn:quickbase:params:oauth:token-type:temp_token",subject_token:this.samlToken,subject_token_type:"urn:ietf:params:oauth:token-type:saml2"}),s=await this.fetchApi(r,{method:"POST",headers:{"QB-Realm-Hostname":`${this.realm}.quickbase.com`,"Content-Type":"application/x-www-form-urlencoded"},body:e.toString()});if(!s.ok){let i=await s.text();throw new E(`SSO token exchange failed: ${s.status} ${i}`,{rayId:s.headers.get("qb-api-ray")||void 0})}let o=(await s.json()).access_token;if(!o)throw new E("No access_token in SSO exchange response");return this.cache.set(this.cacheKey,o),this.logger.debug("Cached new SSO token"),o}getAuthorizationHeader(r){return`QB-TEMP-TOKEN ${r}`}async handleAuthError(r){this.invalidate();try{return this.logger.token("refresh"),await this.getToken(),!0}catch(e){return this.logger.error("Failed to refresh SSO token",e),!1}}invalidate(r){this.logger.token("expire"),this.cache.clear()}};var J=class{constructor(r,e,s,n){m(this,"username");m(this,"password");m(this,"hours");m(this,"realm");m(this,"fetchApi");m(this,"logger");m(this,"onExpired");m(this,"persist");m(this,"storageKey");m(this,"ticket",null);m(this,"userId",null);m(this,"expiresAt",null);m(this,"authenticated",!1);m(this,"pendingAuth",null);this.username=r,this.password=e,this.hours=Math.min(Math.max(s?.hours??12,1),4380),this.onExpired=s?.onExpired,this.persist=s?.persist,this.realm=n.realm,this.fetchApi=n.fetchApi,this.logger=n.logger,this.storageKey=`qb_ticket_${this.realm}`,this.restoreFromStorage()}async getToken(r){if(this.ticket&&this.expiresAt&&Date.now()<this.expiresAt)return this.ticket;if(this.ticket&&this.expiresAt&&Date.now()>=this.expiresAt)throw this.clearTicket(),this.onExpired?.(),new Error("Ticket expired; create a new client with fresh credentials");if(this.authenticated)throw this.onExpired?.(),new Error("Ticket expired; create a new client with fresh credentials");if(this.pendingAuth)return this.pendingAuth;this.pendingAuth=this.authenticate();try{return await this.pendingAuth}finally{this.pendingAuth=null}}getAuthorizationHeader(r){return`QB-TICKET ${r}`}async handleAuthError(r){return this.clearTicket(),this.logger.debug("Ticket auth error - cannot refresh (password was cleared)"),this.onExpired?.(),!1}invalidate(r){this.clearTicket()}clearTicket(){this.ticket=null,this.expiresAt=null,this.clearFromStorage()}getUserId(){return this.userId}async authenticate(){if(!this.password)throw this.onExpired?.(),new Error("Ticket expired; create a new client with fresh credentials");let r=`https://${this.realm}.quickbase.com/db/main`,e=`<qdbapi>
7
7
  <username>${this.escapeXml(this.username)}</username>
8
8
  <password>${this.escapeXml(this.password)}</password>
9
9
  <hours>${this.hours}</hours>
10
- </qdbapi>`;this.logger.debug(`Authenticating via API_Authenticate for ${this.username}`);let n=await(await this.fetchApi(r,{method:"POST",headers:{"Content-Type":"application/xml","QUICKBASE-ACTION":"API_Authenticate"},body:e})).text(),o=this.parseXmlResponse(n);if(o.errcode!==0){let i=o.errdetail||o.errtext||"Unknown error";throw new Error(`Authentication failed: ${i} (code: ${o.errcode})`)}if(!o.ticket)throw new Error("No ticket returned from API_Authenticate");return this.ticket=o.ticket,this.userId=o.userid,this.expiresAt=Date.now()+this.hours*60*60*1e3,this.authenticated=!0,this.saveToStorage(),this.password=null,this.logger.debug(`Authenticated successfully, userId: ${this.userId}`),this.ticket}parseXmlResponse(r){let e=s=>r.match(new RegExp(`<${s}>([^<]*)</${s}>`))?.[1]??"";return{ticket:e("ticket"),userid:e("userid"),errcode:parseInt(e("errcode"),10)||0,errtext:e("errtext"),errdetail:e("errdetail")||void 0}}escapeXml(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}getStorage(){if(!this.persist)return null;try{if(typeof globalThis>"u")return null;let r=globalThis;return(this.persist==="localStorage"?r.localStorage:r.sessionStorage)??null}catch{return null}}saveToStorage(){let r=this.getStorage();if(!(!r||!this.ticket||!this.userId||!this.expiresAt))try{let e={ticket:this.ticket,userId:this.userId,expiresAt:this.expiresAt};r.setItem(this.storageKey,JSON.stringify(e)),this.logger.debug(`Ticket saved to ${this.persist}`)}catch{this.logger.debug(`Failed to save ticket to ${this.persist}`)}}restoreFromStorage(){let r=this.getStorage();if(r)try{let e=r.getItem(this.storageKey);if(!e)return;let s=JSON.parse(e);if(Date.now()>=s.expiresAt-6e4){r.removeItem(this.storageKey),this.logger.debug("Stored ticket expired, removed from storage");return}this.ticket=s.ticket,this.userId=s.userId,this.expiresAt=s.expiresAt,this.authenticated=!0,this.password=null,this.logger.debug(`Ticket restored from ${this.persist}`)}catch{r.removeItem(this.storageKey)}}clearFromStorage(){let r=this.getStorage();if(r)try{r.removeItem(this.storageKey),this.logger.debug(`Ticket cleared from ${this.persist}`)}catch{}}};function ue(t,r){switch(t.type){case"user-token":return new X(t.userToken,r);case"temp-token":return new Q(t.userToken,r,{appToken:t.appToken,tokenLifespanMs:t.tokenLifespanMs});case"sso":return new V(t.samlToken,r);case"ticket":return new K(t.username,t.password,{hours:t.hours,onExpired:t.onExpired,persist:t.persist},r);default:throw new Error(`Unknown auth type: ${t.type}`)}}function Te(t,r,e){let s=t.headers.get("Retry-After");return{timestamp:new Date,requestUrl:r,httpStatus:t.status,retryAfter:s?parseInt(s,10):void 0,cfRay:t.headers.get("cf-ray")||void 0,tid:t.headers.get("tid")||void 0,qbApiRay:t.headers.get("qb-api-ray")||void 0,attempt:e}}function Ae(t){return new Promise(r=>setTimeout(r,t))}function $e(t,r){let e={...t},s=r.tableId;return r.schema&&("from"in e&&typeof e.from=="string"&&(s=F(r.schema,e.from),e.from=s),"to"in e&&typeof e.to=="string"&&(s=F(r.schema,e.to),e.to=s),s&&("select"in e&&Array.isArray(e.select)&&(e.select=e.select.map(n=>q(r.schema,s,n))),"sortBy"in e&&Array.isArray(e.sortBy)&&(e.sortBy=e.sortBy.map(n=>({...n,fieldId:q(r.schema,s,n.fieldId)}))),"groupBy"in e&&Array.isArray(e.groupBy)&&(e.groupBy=e.groupBy.map(n=>({...n,fieldId:q(r.schema,s,n.fieldId)}))),"where"in e&&typeof e.where=="string"&&(e.where=kr(e.where,r.schema,s)))),"data"in e&&Array.isArray(e.data)&&(e.data=e.data.map(n=>Ir(n,r.schema,s))),e}function Ir(t,r,e){let s={};for(let[n,o]of Object.entries(t)){let i=n;if(r&&e)try{let l=q(r,e,n);i=String(l)}catch{}s[i]=xr(o)}return s}function kr(t,r,e){return t.replace(/\{['"]?([^.'"\}]+)['"]?\./g,(s,n)=>{try{return`{${q(r,e,n)}.`}catch{return s}})}function xr(t){return Pr(t)?t:{value:t}}function Pr(t){return t==null||typeof t!="object"||Array.isArray(t)?!1:"value"in t}function Me(t,r){if(!t||typeof t!="object")return t;let e={...t};return"data"in e&&Array.isArray(e.data)&&r.tableId&&(e.data=e.data.map(s=>vr(s,r.schema,r.tableId))),e}function vr(t,r,e){let s={};for(let[n,o]of Object.entries(t)){let i=n,l=parseInt(n,10);if(!isNaN(l)&&r){let c=U(r,e,l);c&&(i=c)}let d=ce(o);s[i]=d}return s}function ce(t){if(t==null)return t;if(typeof t=="object"&&!Array.isArray(t)){let r=t;if("value"in r&&Object.keys(r).length===1||"value"in r)return ce(r.value)}return Array.isArray(t)?t.map(ce):t}function _e(t,r){if(t){if("from"in t&&typeof t.from=="string")return r?F(r,t.from):t.from;if("to"in t&&typeof t.to=="string")return r?F(r,t.to):t.to}}var Oe={"POST /records":!0,"DELETE /records":!0,"POST /apps":!0,"DELETE /apps":!0,"POST /apps/":!0,"DELETE /apps/":!0,"POST /tables":!0,"DELETE /tables":!0,"POST /tables/":!0,"DELETE /tables/":!0,"POST /fields":!0,"DELETE /fields":!0,"POST /fields/":!0,"DELETE /files/":!0,"POST /usertoken":!0,"DELETE /usertoken":!0,"PUT /users":!0,"PUT /users/":!0,"POST /groups/":!0,"DELETE /groups/":!0,"POST /solutions":!0,"PUT /solutions/":!0,"GET /docTemplates/":!0,"GET /solutions/fromrecord":!0},qe={"POST /records/query":!0,"POST /reports/":!0,"POST /formula/run":!0,"POST /audit":!0,"POST /users":!0,"POST /analytics/":!0};function wr(t){let r=t.toUpperCase();return r==="POST"||r==="PUT"||r==="DELETE"||r==="PATCH"}function Sr(t,r){let e=`${t} ${r}`;if(Oe[e])return!0;for(let s=r.length-1;s>=0;s--)if(r[s]==="/"){let n=`${t} ${r.slice(0,s+1)}`;if(Oe[n])return!0}return!1}function We(t){let r=`POST ${t}`;if(qe[r])return!0;for(let e=t.length-1;e>=0;e--)if(t[e]==="/"){let s=`POST ${t.slice(0,e+1)}`;if(qe[s])return!0}return!1}function Cr(t,r,e){if(t.readOnly){if(Sr(r,e)){if(r==="POST"&&We(e))return;throw new M(r,e)}if(wr(r)){if(r==="POST"&&We(e))return;throw new M(r,e)}}}function Gr(t,r){if(t.dbid)return r?.schema?F(r.schema,t.dbid):t.dbid;if(t.query?.tableId){let n=String(t.query.tableId);return r?.schema?F(r.schema,n):n}if(t.query?.appId)return String(t.query.appId);let e=t.path.match(/\/tables\/([^/?]+)/);if(e)return e[1];let s=t.path.match(/\/apps\/([^/?]+)/);if(s)return s[1];if(t.body&&typeof t.body=="object"){let n=_e(t.body,r?.schema);if(n)return n}}function Be(t,r,e){let s=t.endsWith("/")?t:`${t}/`,n=r.startsWith("/")?r.slice(1):r,o=new URL(n,s);if(e)for(let[i,l]of Object.entries(e))l!==void 0&&o.searchParams.set(i,String(l));return o.toString()}async function Er(t,r,e,s){let n=await t.getToken(e),o=t.getAuthorizationHeader(n);return{"Content-Type":"application/json","QB-Realm-Hostname":r,Authorization:o,...s}}async function Dr(t,r,e){let{config:s,auth:n,throttle:o,logger:i}=r,l=Be(s.baseUrl,t.path,t.query),d=ye(s.realm),c=await Er(n,d,e.dbid,t.headers);await o.acquire();let f={method:t.method,headers:c,credentials:"omit"};t.body!==void 0&&(f.body=JSON.stringify(t.body));let R=new AbortController,A=setTimeout(()=>R.abort(),s.timeout);f.signal=R.signal;let y=Date.now();try{let x=await s.fetchApi(l,f),T=Date.now()-y;return i.timing(t.method,t.path,T),x}catch(x){throw x instanceof Error&&x.name==="AbortError"?new $(s.timeout):x}finally{clearTimeout(A)}}async function Fr(t,r,e,s){let{config:n,logger:o}=s;if(t.ok)return t;if(t.status===429){let i=Te(t,r,e.attempt);throw o.rateLimit({url:r,status:429,retryAfter:i.retryAfter,attempt:e.attempt,rayId:i.qbApiRay||i.cfRay}),n.onRateLimit&&n.onRateLimit(i),new D(i)}throw await fe(t,r)}async function Le(t,r){let{config:e,auth:s,logger:n}=r,o=e.retry.maxAttempts;Cr(e,t.method,t.path);let i=Gr(t,e),l=t;if(e.schema&&t.body&&typeof t.body=="object"){let f=$e(t.body,{schema:e.schema,tableId:i});l={...t,body:f}}let d={methodName:`${t.method} ${t.path}`,attempt:1,maxAttempts:o,dbid:i,startTime:Date.now()},c=null;for(let f=1;f<=o;f++){d.attempt=f;try{let R=await Dr(l,r,d),A=Be(e.baseUrl,t.path,t.query);await Fr(R,A,d,r);let y=await R.json();return e.schema&&i&&(y=Me(y,{schema:e.schema,tableId:i})),ne(y,e.convertDates)}catch(R){if(c=R,!le(R)||f>=o)throw R;if(R instanceof C&&R.statusCode===401){if(!await s.handleAuthError(i))throw R;n.debug("Token refreshed, retrying request");continue}let A,y;R instanceof D?(A=R.retryAfter?R.retryAfter*1e3:me(f,e.retry),y="Rate limited (429)"):R instanceof $?(A=me(f,e.retry),y="Timeout"):R instanceof C&&R.statusCode>=500?(A=me(f,e.retry),y=`Server error (${R.statusCode})`):(A=me(f,e.retry),y="Retryable error"),n.retry(f,o,A,y),await Ae(A)}}throw c||new Error("Request failed")}function me(t,r){let e=r.initialDelayMs*Math.pow(r.multiplier,t-1),s=e*.1*(Math.random()*2-1);return Math.min(e+s,r.maxDelayMs)}function Ie(t){return{execute:r=>Le(r,t)}}var ee=class{constructor(r=100){m(this,"requestsPer10Seconds");m(this,"timestamps",[]);this.requestsPer10Seconds=r}async acquire(){let r=Date.now(),e=r-1e4;for(;this.timestamps.length>0&&this.timestamps[0]<e;)this.timestamps.shift();if(this.timestamps.length>=this.requestsPer10Seconds){let n=this.timestamps[0]+1e4-r;if(n>0)return await this.sleep(n),this.acquire()}this.timestamps.push(Date.now())}getWindowCount(){let r=Date.now()-1e4;return this.timestamps.filter(e=>e>=r).length}getRemaining(){return Math.max(0,this.requestsPer10Seconds-this.getWindowCount())}reset(){this.timestamps.length=0}sleep(r){return new Promise(e=>setTimeout(e,r))}},te=class{async acquire(){}getWindowCount(){return 0}getRemaining(){return 1/0}reset(){}};function ke(t){return t.enabled?new ee(t.requestsPer10Seconds):new te}function Ne(t){return t.totalRecords!==void 0&&t.skip!==void 0?"skip":t.nextPageToken!==void 0||t.nextToken!==void 0?"token":"none"}function Xe(t,r,e){let{metadata:s}=t;if(r==="skip")return s.totalRecords!==void 0&&e<s.totalRecords;if(r==="token"){let n=s.nextPageToken??s.nextToken;return n!==void 0&&n!==""}return!1}function je(t){for(let r of Object.keys(t))if(Array.isArray(t[r]))return r;return"data"}function Qe(t){if(!t||typeof t!="object")return!1;let r=t;if(!r.metadata||typeof r.metadata!="object"||!Object.values(r).some(Array.isArray))return!1;let s=r.metadata;return s.totalRecords!==void 0||s.numRecords!==void 0||s.nextPageToken!==void 0||s.nextToken!==void 0}var pe=class{constructor(r,e){m(this,"executor");m(this,"paginatedExecutor");m(this,"defaultAutoPaginate");this.executor=r,this.paginatedExecutor=e?.paginatedExecutor,this.defaultAutoPaginate=e?.autoPaginate??!1}then(r,e){return(this.defaultAutoPaginate?this.all():this.executor()).then(r,e)}async all(){return this.paginate({})}async paginate(r={}){if(!this.paginatedExecutor)return this.executor();let{limit:e,skip:s=0}=r,n=[],o=null,i="none",l=s,d,c=await this.paginatedExecutor({skip:s});if(!Qe(c))return c;o=c,i=Ne(c.metadata);let f=je(c),R=c[f]||[];for(e!==void 0&&R.length>e?n=R.slice(0,e):n=[...R],i==="skip"?l=s+R.length:i==="token"&&(d=c.metadata.nextPageToken??c.metadata.nextToken);Xe(o,i,n.length)&&!(e!==void 0&&n.length>=e);){let y;if(i==="skip")y=await this.paginatedExecutor({skip:l});else if(i==="token"&&d){let T=o.metadata.nextPageToken!==void 0?"nextPageToken":"nextToken";y=await this.paginatedExecutor({[T]:d})}else break;o=y;let x=y[f]||[];if(x.length===0)break;if(e!==void 0){let T=e-n.length;n=n.concat(x.slice(0,T))}else n=n.concat(x);if(i==="skip")l+=x.length;else if(i==="token"&&(d=y.metadata.nextPageToken??y.metadata.nextToken,!d))break}let A={...o,[f]:n,metadata:{...o.metadata,numRecords:n.length,skip:s}};return i==="token"&&(delete A.metadata.nextPageToken,delete A.metadata.nextToken),A}async noPaginate(){return this.executor()}toPromise(){return this.then()}};function B(t,r){return new pe(t,r)}function ge(t,r=!1){return{createApp(e){return t({method:"POST",path:"/apps",body:e})},getApp(e){return t({method:"GET",path:`/apps/${e.appId}`})},updateApp(e,s){return t({method:"POST",path:`/apps/${e.appId}`,body:s})},deleteApp(e,s){return t({method:"DELETE",path:`/apps/${e.appId}`,body:s})},getAppEvents(e){return t({method:"GET",path:`/apps/${e.appId}/events`})},copyApp(e,s){return t({method:"POST",path:`/apps/${e.appId}/copy`,body:s})},getAppTables(e){return t({method:"GET",path:"/tables",query:{appId:e.appId}})},createTable(e,s){return t({method:"POST",path:"/tables",query:{appId:e.appId},body:s})},getTable(e){return t({method:"GET",path:`/tables/${e.tableId}`,query:{appId:e.appId}})},updateTable(e,s){return t({method:"POST",path:`/tables/${e.tableId}`,query:{appId:e.appId},body:s})},deleteTable(e){return t({method:"DELETE",path:`/tables/${e.tableId}`,query:{appId:e.appId}})},getRelationships(e){return B(()=>t({method:"GET",path:`/tables/${e.tableId}/relationships`,query:{skip:e.skip}}),{paginatedExecutor:o=>t({method:"GET",path:`/tables/${e.tableId}/relationships`,query:{skip:e.skip,...o}}),autoPaginate:r})},createRelationship(e,s){return t({method:"POST",path:`/tables/${e.tableId}/relationship`,body:s})},updateRelationship(e,s){return t({method:"POST",path:`/tables/${e.tableId}/relationship/${e.relationshipId}`,body:s})},deleteRelationship(e){return t({method:"DELETE",path:`/tables/${e.tableId}/relationship/${e.relationshipId}`})},getTableReports(e){return t({method:"GET",path:"/reports",query:{tableId:e.tableId}})},getReport(e){return t({method:"GET",path:`/reports/${e.reportId}`,query:{tableId:e.tableId}})},runReport(e,s){return B(()=>t({method:"POST",path:`/reports/${e.reportId}/run`,query:{tableId:e.tableId,skip:e.skip,top:e.top},body:s}),{paginatedExecutor:i=>{let l=s,d=i.skip!==void 0||i.nextPageToken||i.nextToken?{...l||{},options:{...l?.options||{},...i.skip!==void 0?{skip:i.skip}:{}},...i.nextPageToken?{nextPageToken:i.nextPageToken}:{},...i.nextToken?{nextToken:i.nextToken}:{}}:s;return t({method:"POST",path:`/reports/${e.reportId}/run`,query:{tableId:e.tableId,skip:e.skip,top:e.top},body:d})},autoPaginate:r})},getFields(e){return t({method:"GET",path:"/fields",query:{tableId:e.tableId,includeFieldPerms:e.includeFieldPerms}})},createField(e,s){return t({method:"POST",path:"/fields",query:{tableId:e.tableId},body:s})},deleteFields(e,s){return t({method:"DELETE",path:"/fields",query:{tableId:e.tableId},body:s})},getField(e){return t({method:"GET",path:`/fields/${e.fieldId}`,query:{tableId:e.tableId,includeFieldPerms:e.includeFieldPerms}})},updateField(e,s){return t({method:"POST",path:`/fields/${e.fieldId}`,query:{tableId:e.tableId},body:s})},getFieldsUsage(e){return t({method:"GET",path:"/fields/usage",query:{tableId:e.tableId,skip:e.skip,top:e.top}})},getFieldUsage(e){return t({method:"GET",path:`/fields/usage/${e.fieldId}`,query:{tableId:e.tableId}})},runFormula(e){return t({method:"POST",path:"/formula/run",body:e})},upsert(e){return B(()=>t({method:"POST",path:"/records",body:e}),{paginatedExecutor:o=>{let i=e,l=o.skip!==void 0||o.nextPageToken||o.nextToken?{...i||{},options:{...i?.options||{},...o.skip!==void 0?{skip:o.skip}:{}},...o.nextPageToken?{nextPageToken:o.nextPageToken}:{},...o.nextToken?{nextToken:o.nextToken}:{}}:e;return t({method:"POST",path:"/records",body:l})},autoPaginate:r})},deleteRecords(e){return t({method:"DELETE",path:"/records",body:e})},runQuery(e){return B(()=>t({method:"POST",path:"/records/query",body:e}),{paginatedExecutor:o=>{let i=e,l=o.skip!==void 0||o.nextPageToken||o.nextToken?{...i||{},options:{...i?.options||{},...o.skip!==void 0?{skip:o.skip}:{}},...o.nextPageToken?{nextPageToken:o.nextPageToken}:{},...o.nextToken?{nextToken:o.nextToken}:{}}:e;return t({method:"POST",path:"/records/query",body:l})},autoPaginate:r})},getTempTokenDBID(e){return t({method:"GET",path:`/auth/temporary/${e.dbid}`})},exchangeSsoToken(e){return t({method:"POST",path:"/auth/oauth/token",body:e})},cloneUserToken(e){return t({method:"POST",path:"/usertoken/clone",body:e})},transferUserToken(e){return t({method:"POST",path:"/usertoken/transfer",body:e})},deactivateUserToken(){return t({method:"POST",path:"/usertoken/deactivate"})},deleteUserToken(){return t({method:"DELETE",path:"/usertoken"})},downloadFile(e){return t({method:"GET",path:`/files/${e.tableId}/${e.recordId}/${e.fieldId}/${e.versionNumber}`})},deleteFile(e){return t({method:"DELETE",path:`/files/${e.tableId}/${e.recordId}/${e.fieldId}/${e.versionNumber}`})},getUsers(e,s){return B(()=>t({method:"POST",path:"/users",query:{accountId:e.accountId},body:s}),{paginatedExecutor:i=>{let l=s,d=i.skip!==void 0||i.nextPageToken||i.nextToken?{...l||{},options:{...l?.options||{},...i.skip!==void 0?{skip:i.skip}:{}},...i.nextPageToken?{nextPageToken:i.nextPageToken}:{},...i.nextToken?{nextToken:i.nextToken}:{}}:s;return t({method:"POST",path:"/users",query:{accountId:e.accountId},body:d})},autoPaginate:r})},denyUsers(e,s){return t({method:"PUT",path:"/users/deny",query:{accountId:e.accountId},body:s})},denyUsersAndGroups(e,s){return t({method:"PUT",path:`/users/deny/${e.shouldDeleteFromGroups}`,query:{accountId:e.accountId},body:s})},undenyUsers(e,s){return t({method:"PUT",path:"/users/undeny",query:{accountId:e.accountId},body:s})},addMembersToGroup(e,s){return t({method:"POST",path:`/groups/${e.gid}/members`,body:s})},removeMembersFromGroup(e,s){return t({method:"DELETE",path:`/groups/${e.gid}/members`,body:s})},addManagersToGroup(e,s){return t({method:"POST",path:`/groups/${e.gid}/managers`,body:s})},removeManagersFromGroup(e,s){return t({method:"DELETE",path:`/groups/${e.gid}/managers`,body:s})},addSubgroupsToGroup(e,s){return t({method:"POST",path:`/groups/${e.gid}/subgroups`,body:s})},removeSubgroupsFromGroup(e,s){return t({method:"DELETE",path:`/groups/${e.gid}/subgroups`,body:s})},audit(e){return t({method:"POST",path:"/audit",body:e})},platformAnalyticReads(e){return t({method:"GET",path:"/analytics/reads",query:{day:e.day}})},platformAnalyticEventSummaries(e,s){return B(()=>t({method:"POST",path:"/analytics/events/summaries",query:{accountId:e.accountId},body:s}),{paginatedExecutor:i=>{let l=s,d=i.skip!==void 0||i.nextPageToken||i.nextToken?{...l||{},options:{...l?.options||{},...i.skip!==void 0?{skip:i.skip}:{}},...i.nextPageToken?{nextPageToken:i.nextPageToken}:{},...i.nextToken?{nextToken:i.nextToken}:{}}:s;return t({method:"POST",path:"/analytics/events/summaries",query:{accountId:e.accountId},body:d})},autoPaginate:r})},exportSolution(e){return t({method:"GET",path:`/solutions/${e.solutionId}`})},updateSolution(e,s){return t({method:"PUT",path:`/solutions/${e.solutionId}`,body:s})},createSolution(e){return t({method:"POST",path:"/solutions",body:e})},exportSolutionToRecord(e){return t({method:"GET",path:`/solutions/${e.solutionId}/torecord`,query:{tableId:e.tableId,fieldId:e.fieldId}})},createSolutionFromRecord(e){return t({method:"GET",path:"/solutions/fromrecord",query:{tableId:e.tableId,fieldId:e.fieldId,recordId:e.recordId}})},updateSolutionToRecord(e){return t({method:"GET",path:`/solutions/${e.solutionId}/fromrecord`,query:{tableId:e.tableId,fieldId:e.fieldId,recordId:e.recordId}})},changesetSolution(e,s){return t({method:"PUT",path:`/solutions/${e.solutionId}/changeset`,body:s})},changesetSolutionFromRecord(e){return t({method:"GET",path:`/solutions/${e.solutionId}/changeset/fromrecord`,query:{tableId:e.tableId,fieldId:e.fieldId,recordId:e.recordId}})},generateDocument(e){return t({method:"GET",path:`/docTemplates/${e.templateId}/generate`,query:{tableId:e.tableId,recordId:e.recordId,filename:e.filename,format:e.format,margin:e.margin,unit:e.unit,pageSize:e.pageSize,orientation:e.orientation,realm:e.realm}})}}}var _={Success:0,Unauthorized:4,InvalidInput:5,NoSuchDatabase:6,AccessDenied:7,InvalidTicket:8,NoSuchRecord:30,NoSuchField:31,NoSuchUser:33},O=class extends Error{constructor(e,s,n,o){let i=n?`XML API error ${e}: ${s} (${n})`:`XML API error ${e}: ${s}`;super(i);m(this,"code");m(this,"text");m(this,"detail");m(this,"action");this.name="XmlError",this.code=e,this.text=s,this.detail=n,this.action=o}};function p(t){if(t.errcode!==0)throw new O(t.errcode,t.errtext,t.errdetail,t.action)}function xe(t){return t instanceof O?t.code===_.Unauthorized||t.code===_.AccessDenied:!1}function Pe(t){return t instanceof O?t.code===_.NoSuchDatabase||t.code===_.NoSuchRecord||t.code===_.NoSuchField||t.code===_.NoSuchUser:!1}function ve(t){return t instanceof O?t.code===_.InvalidTicket:!1}function g(t){return`<qdbapi>${t}</qdbapi>`}function Ve(t,r){let e="<qdbapi>",s=t.indexOf(e);if(s===-1)return t;let n=s+e.length,o=`<apptoken>${u(r)}</apptoken>`;return t.slice(0,n)+o+t.slice(n)}function Ke(t,r){let e="<qdbapi>",s=t.indexOf(e);if(s===-1)return t;let n=s+e.length,o=`<usertoken>${u(r)}</usertoken>`;return t.slice(0,n)+o+t.slice(n)}function u(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function a(t,r){return t.match(new RegExp(`<${r}(?:\\s[^>]*)?>([^<]*)</${r}>`))?.[1]??""}function P(t,r){return t.match(new RegExp(`${r}="([^"]*)"`))?.[1]??""}function k(t,r){let e=new RegExp(`<${r}[^>]*>([\\s\\S]*?)</${r}>`,"g"),s=[],n;for(;(n=e.exec(t))!==null;)s.push(n[0]);return s}function h(t){let r=a(t,"errdetail");return{action:a(t,"action"),errcode:parseInt(a(t,"errcode"),10)||0,errtext:a(t,"errtext"),errdetail:r||void 0}}function he(t,r){let e=r.replace(/\]\]>/g,"]]]]><![CDATA[>");return`<${t}><![CDATA[${e}]]></${t}>`}function v(t){return t==="1"||t.toLowerCase()==="true"}function b(t,r=0){let e=parseInt(t,10);return isNaN(e)?r:e}function Ur(t,r,e){let s={};for(let n of t){let o=r?U(r,e,n.id):void 0,i=o??String(n.id);s[i]=o?{...n,alias:o}:n}return s}function He(t,r){let e={};for(let s of t){let n=r?z(r,s.dbid):void 0,o=n??s.dbid;e[o]=n?{...s,alias:n}:s}return e}function $r(t,r){let e={};for(let s of t){let n=r?z(r,s.id):void 0,o=n??s.id;e[o]=n?{...s,alias:n}:s}return e}function Mr(t,r,e){let s={...t},n=U(r,e,t.id);if(n&&(s.alias=n),t.summaryReferenceFid!==void 0){let o=U(r,e,t.summaryReferenceFid);o&&(s.summaryReferenceFidAlias=o)}if(t.summaryTargetFid!==void 0){let o=U(r,e,t.summaryTargetFid);o&&(s.summaryTargetFidAlias=o)}return s}function we(t,r,e){return{...t,fields:Ur(t.fields,r,e)}}function ze(t,r,e){let s={...t.table,fields:void 0,childTables:void 0};if(t.table.fields){let n={};for(let o of t.table.fields){let i=r?Mr(o,r,e):o,l=r?U(r,e,o.id):void 0,d=l??String(o.id);n[d]=l?{...i,alias:l}:i}s.fields=n}if(t.table.childTables){let n={};for(let o of t.table.childTables){let i=r?z(r,o.dbid):void 0,l=i??o.dbid;n[l]=i?{...o,alias:i}:o}s.childTables=n}return{...t,table:s}}function Je(t,r,e){if(!r)return t;let s=U(r,e,t.fieldId);return s?{...t,fieldAlias:s}:t}function Ze(t,r,e){if(!r)return t;let s=U(r,e,t.fieldId);return s?{...t,fieldAlias:s}:t}function Ye(t,r){return{...t,databases:He(t.databases,r)}}function et(t,r){return{...t,databases:He(t.databases,r)}}function tt(t,r){let e=r?z(r,t.appId):void 0;return{...t,appAlias:e,tables:$r(t.tables,r)}}function rt(t,r){if(!r)return t;let e=z(r,t.dbid);return e?{...t,alias:e}:t}function Se(t){let r=b(P(t,"id")),e=a(t,"name"),s=t.match(/<access[^>]*id="(\d+)"[^>]*>([^<]*)<\/access>/),n={id:s?b(s[1]??"0"):0,description:s?.[2]??""};return{id:r,name:e,access:n}}function _r(t){let r=Se(t),e=t.match(/<member[^>]*type="([^"]*)"[^>]*>([^<]*)<\/member>/),s=e&&e[1]&&e[2]?{type:e[1],name:e[2]}:void 0;return{...r,member:s}}function Or(t){let r=P(t,"id"),e=P(t,"type")||"user",s=a(t,"name"),n=a(t,"firstName")||void 0,o=a(t,"lastName")||void 0,i=a(t,"lastAccess")||void 0,l=a(t,"lastAccessAppLocal")||void 0,c=k(t,"role").map(Se);return{id:r,type:e,name:s,firstName:n,lastName:o,lastAccess:i,lastAccessAppLocal:l,roles:c}}async function st(t,r){let e=g(""),s=await t.doXml(r,"API_GetRoleInfo",e),n=h(s);return p(n),{roles:k(s,"role").map(Se)}}async function nt(t,r){let e=g(""),s=await t.doXml(r,"API_UserRoles",e),n=h(s);return p(n),{users:k(s,"user").map(Or)}}async function ot(t,r,e,s){let n="";e&&(n+=`<userid>${u(e)}</userid>`),s&&(n+="<inclgrps>1</inclgrps>");let o=g(n),i=await t.doXml(r,"API_GetUserRole",o),l=h(i);p(l);let d=i.match(/<user[^>]*id="([^"]*)"[^>]*>([\s\S]*?)<\/user>/);if(!d||!d[1])throw new Error("Invalid API_GetUserRole response: no user element");let c=d[1],f=d[0],R=a(f,"name"),y=k(f,"role").map(_r);return{userId:c,userName:R,roles:y}}async function it(t,r,e,s){let n=`<userid>${u(e)}</userid><roleid>${s}</roleid>`,o=g(n),i=await t.doXml(r,"API_AddUserToRole",o),l=h(i);p(l)}async function at(t,r,e,s){let n=`<userid>${u(e)}</userid><roleid>${s}</roleid>`,o=g(n),i=await t.doXml(r,"API_RemoveUserFromRole",o),l=h(i);p(l)}async function lt(t,r,e,s,n){let o=`<userid>${u(e)}</userid><roleid>${s}</roleid>`;n!==void 0&&n>0&&(o+=`<newRoleid>${n}</newRoleid>`);let i=g(o),l=await t.doXml(r,"API_ChangeUserRole",i),d=h(l);p(d)}function dt(t){let r=P(t,"id"),e=a(t,"name"),s=a(t,"description")||void 0,n=a(t,"managedByUser"),o=n?v(n):void 0;return{id:r,name:e,description:s,managedByUser:o}}function qr(t){return{id:P(t,"id"),firstName:a(t,"firstName"),lastName:a(t,"lastName"),email:a(t,"email"),screenName:a(t,"screenName")||void 0,isAdmin:v(a(t,"isAdmin"))}}function Wr(t){return{id:P(t,"id"),firstName:a(t,"firstName"),lastName:a(t,"lastName"),email:a(t,"email"),screenName:a(t,"screenName")||void 0,isMember:v(a(t,"isMember"))}}function Br(t){return{id:P(t,"id")}}async function ut(t,r,e,s){let n=`<name>${u(r)}</name>`;e&&(n+=`<description>${u(e)}</description>`),s&&(n+=`<accountID>${u(s)}</accountID>`);let o=g(n),i=await t.doXml("main","API_CreateGroup",o),l=h(i);p(l);let d=i.match(/<group[^>]*>([\s\S]*?)<\/group>/);if(!d)throw new Error("Invalid API_CreateGroup response: no group element");return{group:dt(d[0])}}async function ct(t,r){let e=`<gid>${u(r)}</gid>`,s=g(e),n=await t.doXml("main","API_DeleteGroup",s),o=h(n);p(o)}async function mt(t,r,e,s,n){let o=`<gid>${u(r)}</gid>`;e&&(o+=`<name>${u(e)}</name>`),s&&(o+=`<description>${u(s)}</description>`),n&&(o+=`<accountID>${u(n)}</accountID>`);let i=g(o),l=await t.doXml("main","API_CopyGroup",i),d=h(l);p(d);let c=l.match(/<group[^>]*>([\s\S]*?)<\/group>/);if(!c)throw new Error("Invalid API_CopyGroup response: no group element");return{group:dt(c[0])}}async function pt(t,r,e,s,n){let o=`<gid>${u(r)}</gid>`;e&&(o+=`<name>${u(e)}</name>`),s&&(o+=`<description>${u(s)}</description>`),n&&(o+=`<accountID>${u(n)}</accountID>`);let i=g(o),l=await t.doXml("main","API_ChangeGroupInfo",i),d=h(l);p(d)}async function gt(t,r,e){let s=`<gid>${u(r)}</gid>`;e&&(s+="<includeAllMgrs>true</includeAllMgrs>");let n=g(s),o=await t.doXml("main","API_GetUsersInGroup",n),i=h(o);p(i);let l=o.match(/<group[^>]*id="([^"]*)"[^>]*>([\s\S]*?)<\/group>/);if(!l||!l[1])throw new Error("Invalid API_GetUsersInGroup response: no group element");let d=l[0],c=l[1],f=a(d,"name"),R=a(d,"description")||void 0,y=k(d,"user").map(qr),T=k(d,"manager").map(Wr),E=k(d,"subgroup").map(Br);return{id:c,name:f,description:R,users:y,managers:T,subgroups:E}}async function ht(t,r,e,s){let n=`<gid>${u(r)}</gid>`;n+=`<uid>${u(e)}</uid>`,s&&(n+="<allowAdminAccess>true</allowAdminAccess>");let o=g(n),i=await t.doXml("main","API_AddUserToGroup",o),l=h(i);p(l)}async function ft(t,r,e){let s=`<gid>${u(r)}</gid><uid>${u(e)}</uid>`,n=g(s),o=await t.doXml("main","API_RemoveUserFromGroup",n),i=h(o);p(i)}async function Rt(t,r,e){let s=`<gid>${u(e)}</gid>`,n=g(s),o=await t.doXml(r,"API_GetGroupRole",n),i=h(o);return p(i),{roles:k(o,"role").map(c=>({id:b(P(c,"id")),name:a(c,"name")}))}}async function bt(t,r,e,s){let n=`<gid>${u(e)}</gid><roleid>${s}</roleid>`,o=g(n),i=await t.doXml(r,"API_AddGroupToRole",o),l=h(i);p(l)}async function yt(t,r,e,s,n){let o=`<gid>${u(e)}</gid>`;n?o+="<allRoles>true</allRoles>":o+=`<roleid>${s}</roleid>`;let i=g(o),l=await t.doXml(r,"API_RemoveGroupFromRole",i),d=h(l);p(d)}async function Tt(t,r,e){let s="";r&&(s+=`<userid>${u(r)}</userid>`),e&&(s+="<adminOnly>true</adminOnly>");let n=g(s),o=await t.doXml("main","API_GrantedGroups",n),i=h(o);return p(i),{groups:k(o,"group").map(c=>({id:P(c,"id"),name:a(c,"name")}))}}async function At(t,r){let e=`<gid>${u(r)}</gid>`,s=g(e),n=await t.doXml("main","API_GrantedDBsForGroup",s),o=h(n);return p(o),{databases:k(n,"dbinfo").map(d=>({dbid:a(d,"dbid"),name:a(d,"dbname")}))}}async function It(t,r,e){let s=`<gid>${u(r)}</gid><subgroupid>${u(e)}</subgroupid>`,n=g(s),o=await t.doXml("main","API_AddSubgroup",n),i=h(o);p(i)}async function kt(t,r,e){let s=`<gid>${u(r)}</gid><subgroupid>${u(e)}</subgroupid>`,n=g(s),o=await t.doXml("main","API_RemoveSubgroup",n),i=h(o);p(i)}async function xt(t,r){let e="";r&&(e=`<email>${u(r)}</email>`);let s=g(e),n=await t.doXml("main","API_GetUserInfo",s),o=h(n);p(o);let i=n.match(/<user[^>]*id="([^"]*)"[^>]*>([\s\S]*?)<\/user>/);if(!i||!i[1])throw new Error("Invalid API_GetUserInfo response: no user element");let l=i[0],d=i[1],c=a(l,"firstName"),f=a(l,"lastName"),R=a(l,"login")||void 0,A=a(l,"email")||void 0,y=a(l,"screenName")||void 0,x=a(l,"isVerified"),T=x?v(x):void 0,I=a(l,"externalAuth"),E=I?v(I):void 0;return{id:d,firstName:c,lastName:f,login:R,email:A,screenName:y,isVerified:T,externalAuth:E}}async function Pt(t,r,e,s,n,o){let i=`<email>${u(e)}</email><fname>${u(s)}</fname><lname>${u(n)}</lname>`;o!==void 0&&(i+=`<roleid>${o}</roleid>`);let l=g(i),d=await t.doXml(r,"API_ProvisionUser",l),c=h(d);p(c);let f=a(d,"userid");if(!f)throw new Error("Invalid API_ProvisionUser response: no userid element");return{userId:f}}async function vt(t,r,e,s){let n=`<userid>${u(e)}</userid>`;s&&(n+=`<usertext>${u(s)}</usertext>`);let o=g(n),i=await t.doXml(r,"API_SendInvitation",o),l=h(i);p(l)}async function wt(t,r,e){let s=`<newmgr>${u(e)}</newmgr>`,n=g(s),o=await t.doXml(r,"API_ChangeManager",n),i=h(o);p(i)}async function St(t,r,e,s){let n=`<rid>${e}</rid><newowner>${u(s)}</newowner>`,o=g(n),i=await t.doXml(r,"API_ChangeRecordOwner",o),l=h(i);p(l)}async function Ct(t,r){let e="";r?.excludeParents&&(e+="<excludeparents>1</excludeparents>"),r?.parentsOnly&&(e+="<Withembeddedtables>0</Withembeddedtables>"),r?.adminOnly&&(e+="<adminOnly>true</adminOnly>"),r?.includeAncestors&&(e+="<includeancestors>1</includeancestors>"),r?.withEmbeddedTables!==void 0&&(e+=`<withembeddedtables>${r.withEmbeddedTables?"1":"0"}</withembeddedtables>`),r?.realmAppsOnly&&(e+="<realmAppsOnly>true</realmAppsOnly>");let s=g(e),n=await t.doXml("main","API_GrantedDBs",s),o=h(n);return p(o),{databases:k(n,"dbinfo").map(d=>{let c={dbid:a(d,"dbid"),name:a(d,"dbname")},f=a(d,"ancestorappid");f&&(c.ancestorAppId=f);let R=a(d,"oldestancestorappid");return R&&(c.oldestAncestorAppId=R),c})}}async function Gt(t,r,e){let s=`<dbname>${u(r)}</dbname>`;e&&(s+="<ParentsOnly>1</ParentsOnly>");let n=g(s),o=await t.doXml("main","API_FindDBByName",n),i=h(o);p(i);let l=a(o,"dbid");if(!l)throw new Error("Invalid API_FindDBByName response: no dbid element");return{dbid:l}}async function Et(t,r){let e=g(""),s=await t.doXml(r,"API_GetDBInfo",e),n=h(s);return p(n),{name:a(s,"dbname"),lastRecModTime:a(s,"lastRecModTime")||void 0,lastModifiedTime:a(s,"lastModifiedTime")||void 0,createdTime:a(s,"createdTime")||void 0,numRecords:b(a(s,"numRecords")),managerId:a(s,"mgrID")||void 0,managerName:a(s,"mgrName")||void 0,version:a(s,"version")||void 0,timeZone:a(s,"time_zone")||void 0}}async function Dt(t,r){let e=g(""),s=await t.doXml(r,"API_GetNumRecords",e),n=h(s);return p(n),b(a(s,"num_records"))}function Lr(t){let r={id:b(P(t,"id")),fieldType:P(t,"field_type"),baseType:P(t,"base_type"),label:a(t,"label")},e=P(t,"mode");e&&(r.mode=e);let s=a(t,"nowrap");s&&(r.nowrap=v(s));let n=a(t,"bold");n&&(r.bold=v(n));let o=a(t,"required");o&&(r.required=v(o));let i=a(t,"unique");i&&(r.unique=v(i));let l=a(t,"fieldhelp");l&&(r.fieldHelp=l);let d=a(t,"appears_by_default");d&&(r.appearsByDefault=v(d));let c=a(t,"find_enabled");c&&(r.findEnabled=v(c));let f=a(t,"allow_new_choices");f&&(r.allowNewChoices=v(f));let R=a(t,"sort_as_given");R&&(r.sortAsGiven=v(R));let A=a(t,"carrychoices");A&&(r.carryChoices=v(A));let y=a(t,"foreignkey");y&&(r.foreignKey=v(y));let x=a(t,"does_total");x&&(r.doesTotal=v(x));let T=a(t,"does_average");T&&(r.doesAverage=v(T));let I=a(t,"default_kind");I&&(r.defaultKind=I);let E=a(t,"default_value");E&&(r.defaultValue=E);let w=t.match(/<choices>([\s\S]*?)<\/choices>/);if(w&&w[1]){let ie=k(w[1],"choice");r.choices=ie.map(se=>a(se,"choice")||se.replace(/<\/?choice>/g,""))}let L=a(t,"summaryReferenceFid");L&&(r.summaryReferenceFid=b(L));let N=a(t,"summaryTargetFid");N&&(r.summaryTargetFid=b(N));let re=a(t,"summaryFunction");return re&&(r.summaryFunction=re),r}function Nr(t){let r={id:b(P(t,"id")),name:a(t,"qyname")||a(t,"qname"),type:a(t,"qytype")},e=a(t,"qydesc");e&&(r.description=e);let s=a(t,"qycrit");s&&(r.criteria=s);let n=a(t,"qyclst");n&&(r.columnList=n);let o=a(t,"qyslst");o&&(r.sortList=o);let i=a(t,"qyopts");i&&(r.options=i);let l=a(t,"qycalst");return l&&(r.calcFields=l),r}async function Ft(t,r){let e=g(""),s=await t.doXml(r,"API_GetSchema",e),n=h(s);p(n);let o=a(s,"time_zone")||void 0,i=a(s,"date_format")||void 0,l=s.match(/<table>([\s\S]*?)<\/table>/);if(!l)throw new Error("Invalid API_GetSchema response: no table element");let d=l[0],c={name:a(d,"name"),description:a(d,"desc")||void 0},f=d.match(/<original>([\s\S]*?)<\/original>/);if(f){let T=f[0],I={},E=a(T,"app_id");E&&(I.appId=E);let w=a(T,"table_id");w&&(I.tableId=w);let L=a(T,"cre_date");L&&(I.createdTime=L);let N=a(T,"mod_date");N&&(I.modifiedTime=N);let re=a(T,"next_record_id");re&&(I.nextRecordId=b(re));let ie=a(T,"next_field_id");ie&&(I.nextFieldId=b(ie));let se=a(T,"next_query_id");se&&(I.nextQueryId=b(se));let Ge=a(T,"def_sort_fid");Ge&&(I.defaultSortFid=b(Ge));let Ee=a(T,"def_sort_order");Ee&&(I.defaultSortOrder=b(Ee)),c.original=I}let R=d.match(/<variables>([\s\S]*?)<\/variables>/);if(R){let T=k(R[0],"var");c.variables=T.map(I=>({name:P(I,"name"),value:a(I,"var")||""}))}let A=d.match(/<chdbids>([\s\S]*?)<\/chdbids>/);if(A){let T=k(A[0],"chdbid");c.childTables=T.map(I=>({name:P(I,"name"),dbid:a(I,"chdbid")||""}))}let y=d.match(/<queries>([\s\S]*?)<\/queries>/);if(y){let T=k(y[0],"query");c.queries=T.map(Nr)}let x=d.match(/<fields>([\s\S]*?)<\/fields>/);if(x&&x[0].length>20){let T=k(x[0],"field");c.fields=T.map(Lr)}return{table:c,timeZone:o,dateFormat:i}}async function Ut(t,r,e){let s=`<varname>${u(e)}</varname>`,n=g(s),o=await t.doXml(r,"API_GetDBVar",n),i=h(o);return p(i),a(o,"value")}async function $t(t,r,e,s){let n=`<varname>${u(e)}</varname><value>${u(s)}</value>`,o=g(n),i=await t.doXml(r,"API_SetDBVar",o),l=h(i);p(l)}async function Mt(t,r,e){let s=`<pageID>${u(String(e))}</pageID>`,n=g(s),o=await t.doXml(r,"API_GetDBPage",n);if(o.includes("<errcode>")&&!o.includes("<errcode>0</errcode>")){let i=h(o);p(i)}return o}async function _t(t,r,e,s,n,o){let i="";s!==void 0&&(i+=`<pageid>${s}</pageid>`),i+=`<pagename>${u(e)}</pagename>`,i+=`<pagetype>${n}</pagetype>`,i+=he("pagebody",o);let l=g(i),d=await t.doXml(r,"API_AddReplaceDBPage",l),c=h(d);return p(c),{pageId:b(a(d,"pageID"))}}function Ot(t){let r={id:b(a(t,"fid")),name:a(t,"name"),type:a(t,"type"),value:a(t,"value")},e=a(t,"printable");return e&&(r.printable=e),r}async function qt(t,r,e){let s="";e&&(s=`<query>${u(e)}</query>`);let n=g(s),o=await t.doXml(r,"API_DoQueryCount",n),i=h(o);return p(i),{numMatches:b(a(o,"numMatches"))}}async function Wt(t,r,e){let s=`<rid>${e}</rid>`,n=g(s),o=await t.doXml(r,"API_GetRecordInfo",n),i=h(o);p(i);let d=k(o,"field").map(Ot);return{recordId:b(a(o,"rid")),numFields:b(a(o,"num_fields")),updateId:a(o,"update_id")||void 0,fields:d}}async function Bt(t,r,e){let s=`<key>${u(e)}</key>`,n=g(s),o=await t.doXml(r,"API_GetRecordInfo",n),i=h(o);p(i);let d=k(o,"field").map(Ot);return{recordId:b(a(o,"rid")),numFields:b(a(o,"num_fields")),updateId:a(o,"update_id")||void 0,fields:d}}async function Lt(t,r,e){let s=he("records_csv",e.recordsCsv);e.clist&&e.clist.length>0&&(s+=`<clist>${e.clist.join(".")}</clist>`),e.skipFirst&&(s+="<skipfirst>1</skipfirst>"),e.mergeFieldId!==void 0&&(s+=`<mergeFieldId>${e.mergeFieldId}</mergeFieldId>`),e.decimalPercent&&(s+="<decimalPercent>1</decimalPercent>");let n=g(s),o=await t.doXml(r,"API_ImportFromCSV",n),i=h(o);p(i);let d=k(o,"rid").map(c=>{let f=b(c.replace(/<rid[^>]*>/,"").replace(/<\/rid>/,"")),R=P(c,"update_id")||void 0;return{recordId:f,updateId:R}});return{numRecsInput:b(a(o,"num_recs_input")),numRecsAdded:b(a(o,"num_recs_added")),numRecsUpdated:b(a(o,"num_recs_updated")),recordIds:d}}async function Nt(t,r,e){let s=`<id>${e}</id>`,n=g(s),o=await t.doXml(r,"API_RunImport",n),i=h(o);p(i);let d=k(o,"rid").map(c=>{let f=b(c.replace(/<rid[^>]*>/,"").replace(/<\/rid>/,"")),R=P(c,"update_id")||void 0;return{recordId:f,updateId:R}});return{numRecsInput:b(a(o,"num_recs_input")),numRecsAdded:b(a(o,"num_recs_added")),numRecsUpdated:b(a(o,"num_recs_updated")),recordIds:d}}async function Xt(t,r,e){let s=`<rid>${e.rid}</rid>`;e.copyfid!==void 0&&(s+=`<copyfid>${e.copyfid}</copyfid>`),e.recurse&&(s+="<recurse>1</recurse>"),e.relfids&&e.relfids.length>0&&(s+=`<relfids>${e.relfids.join(".")}</relfids>`);let n=g(s),o=await t.doXml(r,"API_CopyMasterDetail",n),i=h(o);return p(i),{newRid:b(a(o,"newrid")),numCreated:b(a(o,"num_created"))}}function jt(t){let r=`<label>${u(t.label)}</label>`;if(r+=`<WebhookURL>${u(t.webhookUrl)}</WebhookURL>`,t.description&&(r+=`<Description>${u(t.description)}</Description>`),t.query&&(r+=`<Query>${u(t.query)}</Query>`),t.workflowWhen&&(r+=`<WorkflowWhen>${u(t.workflowWhen)}</WorkflowWhen>`),t.headers&&t.headers.length>0&&(r+=`<WebhookHeaderCount>${t.headers.length}</WebhookHeaderCount>`,t.headers.forEach((e,s)=>{r+=`<WebhookHeaderKey${s+1}>${u(e.key)}</WebhookHeaderKey${s+1}>`,r+=`<WebhookHeaderValue${s+1}>${u(e.value)}</WebhookHeaderValue${s+1}>`})),t.message&&(r+=`<WebhookMessage>${u(t.message)}</WebhookMessage>`),t.messageFormat&&(r+=`<WebhookMessageFormat>${t.messageFormat}</WebhookMessageFormat>`),t.httpVerb&&(r+=`<WebhookHTTPVerb>${t.httpVerb}</WebhookHTTPVerb>`),t.triggerFields&&t.triggerFields.length>0){r+="<tfidsWhich>TRUE</tfidsWhich>";for(let e of t.triggerFields)r+=`<tfids>${e}</tfids>`}return r}function Xr(t,r){let e=`<actionId>${u(t)}</actionId>`;return e+=jt(r),r.clearTriggerFields&&(e=e.replace(/<tfidsWhich>TRUE<\/tfidsWhich>/,""),e=e.replace(/<tfids>\d+<\/tfids>/g,""),e+="<tfidsWhich>tfidsAny</tfidsWhich>"),e}async function Qt(t,r,e){let s=jt(e),n=g(s),o=await t.doXml(r,"API_Webhooks_Create",n),i=h(o);p(i)}async function Vt(t,r,e,s){let n=Xr(e,s),o=g(n),i=await t.doXml(r,"API_Webhooks_Edit",o),l=h(i);p(l)}async function Kt(t,r,e){if(e.length===0)throw new Error("actionIds array cannot be empty");let s=`<actionIDList>${e.join(",")}</actionIDList>`,n=g(s),o=await t.doXml(r,"API_Webhooks_Delete",n),i=h(o);return p(i),{numChanged:b(a(o,"numChanged"))}}async function Ht(t,r,e){if(e.length===0)throw new Error("actionIds array cannot be empty");let s=`<actionIDList>${e.join(",")}</actionIDList>`,n=g(s),o=await t.doXml(r,"API_Webhooks_Activate",n),i=h(o);return p(i),{numChanged:b(a(o,"numChanged"))}}async function zt(t,r,e){if(e.length===0)throw new Error("actionIds array cannot be empty");let s=`<actionIDList>${e.join(",")}</actionIDList>`,n=g(s),o=await t.doXml(r,"API_Webhooks_Deactivate",n),i=h(o);return p(i),{numChanged:b(a(o,"numChanged"))}}async function Jt(t,r,e){let s=`<actionId>${u(e)}</actionId>`,n=g(s),o=await t.doXml(r,"API_Webhooks_Copy",n),i=h(o);return p(i),{actionId:a(o,"actionId")}}async function Zt(t,r,e,s){if(s.length===0)throw new Error("choices array cannot be empty");let n=`<fid>${e}</fid>`;for(let d of s)n+=`<choice>${u(d)}</choice>`;let o=g(n),i=await t.doXml(r,"API_FieldAddChoices",o),l=h(i);return p(l),{fieldId:e,fieldName:a(i,"fname")||"",numAdded:b(a(i,"numadded"))}}async function Yt(t,r,e,s){if(s.length===0)throw new Error("choices array cannot be empty");let n=`<fid>${e}</fid>`;for(let d of s)n+=`<choice>${u(d)}</choice>`;let o=g(n),i=await t.doXml(r,"API_FieldRemoveChoices",o),l=h(i);return p(l),{fieldId:e,fieldName:a(i,"fname")||"",numRemoved:b(a(i,"numremoved"))}}async function er(t,r,e){let s=`<fid>${e}</fid>`,n=g(s),o=await t.doXml(r,"API_SetKeyField",n),i=h(o);p(i)}async function tr(t,r,e){let s="";if(e)for(let i of e)s+=`<field fid="${i.id}">${u(i.value)}</field>`;let n=g(s),o=await t.doXml(r,"API_GenAddRecordForm",n);if(o.includes("<errcode>")&&!o.includes("<errcode>0</errcode>")){let i=h(o);p(i)}return o}async function rr(t,r,e){let s="";e?.query&&(s+=`<query>${u(e.query)}</query>`),e?.clist&&e.clist.length>0&&(s+=`<clist>${e.clist.join(".")}</clist>`),e?.slist&&e.slist.length>0&&(s+=`<slist>${e.slist.join(".")}</slist>`),e?.options&&(s+=`<options>${u(e.options)}</options>`),e?.format&&(s+=`<fmt>${e.format}</fmt>`);let n=g(s),o=await t.doXml(r,"API_GenResultsTable",n);if(o.includes("<errcode>")&&!o.includes("<errcode>0</errcode>")){let i=h(o);p(i)}return o}async function sr(t,r,e){let s="";e.rid!==void 0&&(s+=`<rid>${e.rid}</rid>`),e.key&&(s+=`<key>${u(e.key)}</key>`),e.jht&&(s+="<jht>1</jht>"),e.dfid!==void 0&&(s+=`<dfid>${e.dfid}</dfid>`);let n=g(s),o=await t.doXml(r,"API_GetRecordAsHTML",n);if(o.includes("<errcode>")&&!o.includes("<errcode>0</errcode>")){let i=h(o);p(i)}return o}async function nr(t,r){let e=`<dbid>${u(r)}</dbid>`,s=g(e),n=await t.doXml("main","API_GetAppDTMInfo",s),o=h(n);p(o);let l=k(n,"table").map(d=>({id:P(d,"id"),lastModifiedTime:a(d,"lastModifiedTime")||void 0,lastRecModTime:a(d,"lastRecModTime")||void 0}));return{appId:a(n,"app_id")||r,lastModifiedTime:a(n,"lastModifiedTime")||void 0,lastRecModTime:a(n,"lastRecModTime")||void 0,tables:l}}async function or(t,r){let e=g(""),s=await t.doXml(r,"API_GetAncestorInfo",e),n=h(s);return p(n),{ancestorAppId:a(s,"ancestorappid")||void 0,oldestAncestorAppId:a(s,"oldestancestorappid")||void 0}}async function ir(t){let r=g(""),e=await t.doXml("main","API_SignOut",r),s=h(e);p(s)}var jr=new Set(["API_AddUserToRole","API_RemoveUserFromRole","API_ChangeUserRole","API_ProvisionUser","API_SendInvitation","API_ChangeManager","API_ChangeRecordOwner","API_CreateGroup","API_DeleteGroup","API_AddUserToGroup","API_RemoveUserFromGroup","API_AddGroupToRole","API_RemoveGroupFromRole","API_CopyGroup","API_ChangeGroupInfo","API_AddSubgroup","API_RemoveSubgroup","API_SetDBVar","API_AddReplaceDBPage","API_FieldAddChoices","API_FieldRemoveChoices","API_SetKeyField","API_Webhooks_Create","API_Webhooks_Edit","API_Webhooks_Delete","API_Webhooks_Activate","API_Webhooks_Deactivate","API_Webhooks_Copy","API_ImportFromCSV","API_RunImport","API_CopyMasterDetail","API_PurgeRecords","API_AddRecord","API_EditRecord","API_DeleteRecord","API_SignOut"]);function Ce(t){return jr.has(t)}var oe=class{constructor(r,e){m(this,"caller");m(this,"readOnly");m(this,"schema");this.caller=r,this.readOnly=e?.readOnly??!1,this.schema=e?.schema}resolveTable(r){return F(this.schema,r)}resolveField(r,e){return q(this.schema,r,e)}checkWriteAllowed(r){if(this.readOnly&&Ce(r))throw new M("POST",`/db/${this.caller.realm()}`,r)}async executeXml(r,e,s){return this.checkWriteAllowed(e),this.caller.doXml(r,e,s)}realm(){return this.caller.realm()}async getRoleInfo(r){return st(this.caller,this.resolveTable(r))}async userRoles(r){return nt(this.caller,this.resolveTable(r))}async getUserRole(r,e,s){return ot(this.caller,this.resolveTable(r),e,s)}async addUserToRole(r,e,s){return this.checkWriteAllowed("API_AddUserToRole"),it(this.caller,this.resolveTable(r),e,s)}async removeUserFromRole(r,e,s){return this.checkWriteAllowed("API_RemoveUserFromRole"),at(this.caller,this.resolveTable(r),e,s)}async changeUserRole(r,e,s,n){return this.checkWriteAllowed("API_ChangeUserRole"),lt(this.caller,this.resolveTable(r),e,s,n)}async createGroup(r,e,s){return this.checkWriteAllowed("API_CreateGroup"),ut(this.caller,r,e,s)}async deleteGroup(r){return this.checkWriteAllowed("API_DeleteGroup"),ct(this.caller,r)}async copyGroup(r,e,s,n){return this.checkWriteAllowed("API_CopyGroup"),mt(this.caller,r,e,s,n)}async changeGroupInfo(r,e,s,n){return this.checkWriteAllowed("API_ChangeGroupInfo"),pt(this.caller,r,e,s,n)}async getUsersInGroup(r,e){return gt(this.caller,r,e)}async addUserToGroup(r,e,s){return this.checkWriteAllowed("API_AddUserToGroup"),ht(this.caller,r,e,s)}async removeUserFromGroup(r,e){return this.checkWriteAllowed("API_RemoveUserFromGroup"),ft(this.caller,r,e)}async getGroupRole(r,e){return Rt(this.caller,this.resolveTable(r),e)}async addGroupToRole(r,e,s){return this.checkWriteAllowed("API_AddGroupToRole"),bt(this.caller,this.resolveTable(r),e,s)}async removeGroupFromRole(r,e,s,n){return this.checkWriteAllowed("API_RemoveGroupFromRole"),yt(this.caller,this.resolveTable(r),e,s,n)}async grantedGroups(r,e){return Tt(this.caller,r,e)}async grantedDBsForGroup(r){let e=await At(this.caller,r);return et(e,this.schema)}async addSubgroup(r,e){return this.checkWriteAllowed("API_AddSubgroup"),It(this.caller,r,e)}async removeSubgroup(r,e){return this.checkWriteAllowed("API_RemoveSubgroup"),kt(this.caller,r,e)}async getUserInfo(r){return xt(this.caller,r)}async provisionUser(r,e,s,n,o){return this.checkWriteAllowed("API_ProvisionUser"),Pt(this.caller,this.resolveTable(r),e,s,n,o)}async sendInvitation(r,e,s){return this.checkWriteAllowed("API_SendInvitation"),vt(this.caller,this.resolveTable(r),e,s)}async changeManager(r,e){return this.checkWriteAllowed("API_ChangeManager"),wt(this.caller,this.resolveTable(r),e)}async changeRecordOwner(r,e,s){return this.checkWriteAllowed("API_ChangeRecordOwner"),St(this.caller,this.resolveTable(r),e,s)}async grantedDBs(r){let e=await Ct(this.caller,r);return Ye(e,this.schema)}async findDBByName(r,e){let s=await Gt(this.caller,r,e);return rt(s,this.schema)}async getDBInfo(r){return Et(this.caller,this.resolveTable(r))}async getNumRecords(r){return Dt(this.caller,this.resolveTable(r))}async getSchema(r){let e=this.resolveTable(r),s=await Ft(this.caller,e);return ze(s,this.schema,e)}async getDBVar(r,e){return Ut(this.caller,this.resolveTable(r),e)}async setDBVar(r,e,s){return this.checkWriteAllowed("API_SetDBVar"),$t(this.caller,this.resolveTable(r),e,s)}async getDBPage(r,e){return Mt(this.caller,this.resolveTable(r),e)}async addReplaceDBPage(r,e,s,n,o){return this.checkWriteAllowed("API_AddReplaceDBPage"),_t(this.caller,this.resolveTable(r),e,s,n,o)}async fieldAddChoices(r,e,s){this.checkWriteAllowed("API_FieldAddChoices");let n=this.resolveTable(r),o=this.resolveField(n,e),i=await Zt(this.caller,n,o,s);return Je(i,this.schema,n)}async fieldRemoveChoices(r,e,s){this.checkWriteAllowed("API_FieldRemoveChoices");let n=this.resolveTable(r),o=this.resolveField(n,e),i=await Yt(this.caller,n,o,s);return Ze(i,this.schema,n)}async setKeyField(r,e){this.checkWriteAllowed("API_SetKeyField");let s=this.resolveTable(r),n=this.resolveField(s,e);return er(this.caller,s,n)}async doQueryCount(r,e){return qt(this.caller,this.resolveTable(r),e)}async getRecordInfo(r,e){let s=this.resolveTable(r),n=await Wt(this.caller,s,e);return we(n,this.schema,s)}async getRecordInfoByKey(r,e){let s=this.resolveTable(r),n=await Bt(this.caller,s,e);return we(n,this.schema,s)}async importFromCSV(r,e){this.checkWriteAllowed("API_ImportFromCSV");let s=this.resolveTable(r),n={...e,clist:e.clist?.map(o=>this.resolveField(s,o)),mergeFieldId:e.mergeFieldId!==void 0?this.resolveField(s,e.mergeFieldId):void 0};return Lt(this.caller,s,n)}async runImport(r,e){return this.checkWriteAllowed("API_RunImport"),Nt(this.caller,this.resolveTable(r),e)}async copyMasterDetail(r,e){this.checkWriteAllowed("API_CopyMasterDetail");let s=this.resolveTable(r),n={...e,copyfid:e.copyfid!==void 0?this.resolveField(s,e.copyfid):void 0,relfids:e.relfids?.map(o=>this.resolveField(s,o))};return Xt(this.caller,s,n)}async getAppDTMInfo(r){let e=await nr(this.caller,this.resolveTable(r));return tt(e,this.schema)}async getAncestorInfo(r){return or(this.caller,this.resolveTable(r))}async webhooksCreate(r,e){return this.checkWriteAllowed("API_Webhooks_Create"),Qt(this.caller,this.resolveTable(r),e)}async webhooksEdit(r,e,s){return this.checkWriteAllowed("API_Webhooks_Edit"),Vt(this.caller,this.resolveTable(r),e,s)}async webhooksDelete(r,e){return this.checkWriteAllowed("API_Webhooks_Delete"),Kt(this.caller,this.resolveTable(r),e)}async webhooksActivate(r,e){return this.checkWriteAllowed("API_Webhooks_Activate"),Ht(this.caller,this.resolveTable(r),e)}async webhooksDeactivate(r,e){return this.checkWriteAllowed("API_Webhooks_Deactivate"),zt(this.caller,this.resolveTable(r),e)}async webhooksCopy(r,e){return this.checkWriteAllowed("API_Webhooks_Copy"),Jt(this.caller,this.resolveTable(r),e)}async genAddRecordForm(r,e){let s=this.resolveTable(r),n=e?.map(o=>({id:this.resolveField(s,o.id),value:o.value}));return tr(this.caller,s,n)}async genResultsTable(r,e){let s=this.resolveTable(r),n=e?{...e,clist:e.clist?.map(o=>this.resolveField(s,o)),slist:e.slist?.map(o=>this.resolveField(s,o))}:void 0;return rr(this.caller,s,n)}async getRecordAsHTML(r,e){let s=this.resolveTable(r),n={...e,dfid:e.dfid!==void 0?this.resolveField(s,e.dfid):void 0};return sr(this.caller,s,n)}async signOut(){return ir(this.caller)}};function ar(t,r){let e=t.getConfig(),s=t.getAuthStrategy;if(!s)throw new Error("XML client requires access to auth strategy. Make sure you are using a compatible version of the QuickBase client.");let n=s(),o=r?.appToken??e.appToken,i={realm:()=>e.realm,doXml:async(d,c,f)=>{let R=`https://${e.realm}.quickbase.com/db/${encodeURIComponent(d)}`,A=o?Ve(f,o):f,y=await n.getToken(d),x=n.getAuthorizationHeader(y),T={"Content-Type":"application/xml","QUICKBASE-ACTION":c};x.startsWith("QB-USER-TOKEN ")?A=Ke(A,y):T.Authorization=x;let I=new AbortController,E=setTimeout(()=>I.abort(),e.timeout);try{let w=await e.fetchApi(R,{method:"POST",headers:T,body:A,signal:I.signal,credentials:"omit"}),L=await w.text();if(w.status===429){let N=w.headers.get("Retry-After");throw new Error(`Rate limited (429). Retry after: ${N??"unknown"} seconds`)}if(w.status>=500)throw new Error(`Server error: ${w.status} ${w.statusText}`);return L}catch(w){throw w instanceof Error&&w.name==="AbortError"?new Error(`Request timeout after ${e.timeout}ms`):w}finally{clearTimeout(E)}}},l={readOnly:r?.readOnly??e.readOnly??!1,schema:r?.schema??e.schema};return new oe(i,l)}function lr(t){let r=be(t),e=Re(r.debug),s={realm:r.realm,baseUrl:r.baseUrl,fetchApi:r.fetchApi,logger:e},n=ue(r.auth,s),o=ke(r.proactiveThrottle),i=Ie({config:r,auth:n,throttle:o,logger:e});return{...ge(i.execute,r.autoPaginate),request:i.execute,getConfig:()=>r,getAuthStrategy:()=>n}}var Qr=lr;return hr(Vr);})();
10
+ </qdbapi>`;this.logger.debug(`Authenticating via API_Authenticate for ${this.username}`);let n=await(await this.fetchApi(r,{method:"POST",headers:{"Content-Type":"application/xml","QUICKBASE-ACTION":"API_Authenticate"},body:e})).text(),o=this.parseXmlResponse(n);if(o.errcode!==0){let i=o.errdetail||o.errtext||"Unknown error";throw new Error(`Authentication failed: ${i} (code: ${o.errcode})`)}if(!o.ticket)throw new Error("No ticket returned from API_Authenticate");return this.ticket=o.ticket,this.userId=o.userid,this.expiresAt=Date.now()+this.hours*60*60*1e3,this.authenticated=!0,this.saveToStorage(),this.password=null,this.logger.debug(`Authenticated successfully, userId: ${this.userId}`),this.ticket}parseXmlResponse(r){let e=s=>r.match(new RegExp(`<${s}>([^<]*)</${s}>`))?.[1]??"";return{ticket:e("ticket"),userid:e("userid"),errcode:parseInt(e("errcode"),10)||0,errtext:e("errtext"),errdetail:e("errdetail")||void 0}}escapeXml(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}getStorage(){if(!this.persist)return null;try{if(typeof globalThis>"u")return null;let r=globalThis;return(this.persist==="localStorage"?r.localStorage:r.sessionStorage)??null}catch{return null}}saveToStorage(){let r=this.getStorage();if(!(!r||!this.ticket||!this.userId||!this.expiresAt))try{let e={ticket:this.ticket,userId:this.userId,expiresAt:this.expiresAt};r.setItem(this.storageKey,JSON.stringify(e)),this.logger.debug(`Ticket saved to ${this.persist}`)}catch{this.logger.debug(`Failed to save ticket to ${this.persist}`)}}restoreFromStorage(){let r=this.getStorage();if(r)try{let e=r.getItem(this.storageKey);if(!e)return;let s=JSON.parse(e);if(Date.now()>=s.expiresAt-6e4){r.removeItem(this.storageKey),this.logger.debug("Stored ticket expired, removed from storage");return}this.ticket=s.ticket,this.userId=s.userId,this.expiresAt=s.expiresAt,this.authenticated=!0,this.password=null,this.logger.debug(`Ticket restored from ${this.persist}`)}catch{r.removeItem(this.storageKey)}}clearFromStorage(){let r=this.getStorage();if(r)try{r.removeItem(this.storageKey),this.logger.debug(`Ticket cleared from ${this.persist}`)}catch{}}};function pe(t,r){switch(t.type){case"user-token":return new V(t.userToken,r);case"temp-token":return new H(t.userToken,r,{appToken:t.appToken,tokenLifespanMs:t.tokenLifespanMs});case"sso":return new z(t.samlToken,r);case"ticket":return new J(t.username,t.password,{hours:t.hours,onExpired:t.onExpired,persist:t.persist},r);default:throw new Error(`Unknown auth type: ${t.type}`)}}function ke(t,r,e){let s=t.headers.get("Retry-After");return{timestamp:new Date,requestUrl:r,httpStatus:t.status,retryAfter:s?parseInt(s,10):void 0,cfRay:t.headers.get("cf-ray")||void 0,tid:t.headers.get("tid")||void 0,qbApiRay:t.headers.get("qb-api-ray")||void 0,attempt:e}}function Pe(t){return new Promise(r=>setTimeout(r,t))}function Oe(t,r){let e={...t},s=r.tableId;return r.schema&&("from"in e&&typeof e.from=="string"&&(s=U(r.schema,e.from),e.from=s),"to"in e&&typeof e.to=="string"&&(s=U(r.schema,e.to),e.to=s),s&&("select"in e&&Array.isArray(e.select)&&(e.select=e.select.map(n=>q(r.schema,s,n))),"sortBy"in e&&Array.isArray(e.sortBy)&&(e.sortBy=e.sortBy.map(n=>({...n,fieldId:q(r.schema,s,n.fieldId)}))),"groupBy"in e&&Array.isArray(e.groupBy)&&(e.groupBy=e.groupBy.map(n=>({...n,fieldId:q(r.schema,s,n.fieldId)}))),"where"in e&&typeof e.where=="string"&&(e.where=vr(e.where,r.schema,s)))),"data"in e&&Array.isArray(e.data)&&(e.data=e.data.map(n=>xr(n,r.schema,s))),e}function xr(t,r,e){let s={};for(let[n,o]of Object.entries(t)){let i=n;if(r&&e)try{let l=q(r,e,n);i=String(l)}catch{}s[i]=Sr(o)}return s}function vr(t,r,e){return t.replace(/\{['"]?([^.'"\}]+)['"]?\./g,(s,n)=>{try{return`{${q(r,e,n)}.`}catch{return s}})}function Sr(t){return wr(t)?t:{value:t}}function wr(t){return t==null||typeof t!="object"||Array.isArray(t)?!1:"value"in t}function qe(t,r){if(!t||typeof t!="object")return t;let e={...t};return"data"in e&&Array.isArray(e.data)&&r.tableId&&(e.data=e.data.map(s=>Cr(s,r.schema,r.tableId))),e}function Cr(t,r,e){let s={};for(let[n,o]of Object.entries(t)){let i=n,l=parseInt(n,10);if(!isNaN(l)&&r){let c=$(r,e,l);c&&(i=c)}let d=ge(o);s[i]=d}return s}function ge(t){if(t==null)return t;if(typeof t=="object"&&!Array.isArray(t)){let r=t;if("value"in r&&Object.keys(r).length===1||"value"in r)return ge(r.value)}return Array.isArray(t)?t.map(ge):t}function We(t,r){if(t){if("from"in t&&typeof t.from=="string")return r?U(r,t.from):t.from;if("to"in t&&typeof t.to=="string")return r?U(r,t.to):t.to}}var Be={"POST /records":!0,"DELETE /records":!0,"POST /apps":!0,"DELETE /apps":!0,"POST /apps/":!0,"DELETE /apps/":!0,"POST /tables":!0,"DELETE /tables":!0,"POST /tables/":!0,"DELETE /tables/":!0,"POST /fields":!0,"DELETE /fields":!0,"POST /fields/":!0,"DELETE /files/":!0,"POST /usertoken":!0,"DELETE /usertoken":!0,"PUT /users":!0,"PUT /users/":!0,"POST /groups/":!0,"DELETE /groups/":!0,"POST /solutions":!0,"PUT /solutions/":!0,"GET /docTemplates/":!0,"GET /solutions/fromrecord":!0},Ne={"POST /records/query":!0,"POST /reports/":!0,"POST /formula/run":!0,"POST /audit":!0,"POST /users":!0,"POST /analytics/":!0};function Gr(t){let r=t.toUpperCase();return r==="POST"||r==="PUT"||r==="DELETE"||r==="PATCH"}function Er(t,r){let e=`${t} ${r}`;if(Be[e])return!0;for(let s=r.length-1;s>=0;s--)if(r[s]==="/"){let n=`${t} ${r.slice(0,s+1)}`;if(Be[n])return!0}return!1}function Le(t){let r=`POST ${t}`;if(Ne[r])return!0;for(let e=t.length-1;e>=0;e--)if(t[e]==="/"){let s=`POST ${t.slice(0,e+1)}`;if(Ne[s])return!0}return!1}function Dr(t,r,e){if(t.readOnly){if(Er(r,e)){if(r==="POST"&&Le(e))return;throw new _(r,e)}if(Gr(r)){if(r==="POST"&&Le(e))return;throw new _(r,e)}}}function Fr(t,r){if(t.dbid)return r?.schema?U(r.schema,t.dbid):t.dbid;if(t.query?.tableId){let n=String(t.query.tableId);return r?.schema?U(r.schema,n):n}if(t.query?.appId)return String(t.query.appId);let e=t.path.match(/\/tables\/([^/?]+)/);if(e)return e[1];let s=t.path.match(/\/apps\/([^/?]+)/);if(s)return s[1];if(t.body&&typeof t.body=="object"){let n=We(t.body,r?.schema);if(n)return n}}function Xe(t,r,e){let s=t.endsWith("/")?t:`${t}/`,n=r.startsWith("/")?r.slice(1):r,o=new URL(n,s);if(e)for(let[i,l]of Object.entries(e))l!==void 0&&o.searchParams.set(i,String(l));return o.toString()}async function Ur(t,r,e,s){let n=await t.getToken(e),o=t.getAuthorizationHeader(n);return{"Content-Type":"application/json","QB-Realm-Hostname":r,Authorization:o,...s}}async function $r(t,r,e){let{config:s,auth:n,throttle:o,logger:i}=r,l=Xe(s.baseUrl,t.path,t.query),d=Ie(s.realm),c=await Ur(n,d,e.dbid,t.headers);await o.acquire();let f={method:t.method,headers:c,credentials:"omit"};t.body!==void 0&&(f.body=JSON.stringify(t.body));let R=new AbortController,A=setTimeout(()=>R.abort(),s.timeout);f.signal=R.signal;let y=Date.now();try{let P=await s.fetchApi(l,f),T=Date.now()-y;return i.timing(t.method,t.path,T),P}catch(P){throw P instanceof Error&&P.name==="AbortError"?new M(s.timeout):P}finally{clearTimeout(A)}}async function Mr(t,r,e,s){let{config:n,logger:o}=s;if(t.ok)return t;if(t.status===429){let i=ke(t,r,e.attempt);throw o.rateLimit({url:r,status:429,retryAfter:i.retryAfter,attempt:e.attempt,rayId:i.qbApiRay||i.cfRay}),n.onRateLimit&&n.onRateLimit(i),new F(i)}throw await ye(t,r)}async function je(t,r){let{config:e,auth:s,logger:n}=r,o=e.retry.maxAttempts;Dr(e,t.method,t.path);let i=Fr(t,e),l=t;if(e.schema&&t.body&&typeof t.body=="object"){let f=Oe(t.body,{schema:e.schema,tableId:i});l={...t,body:f}}let d={methodName:`${t.method} ${t.path}`,attempt:1,maxAttempts:o,dbid:i,startTime:Date.now()},c=null;for(let f=1;f<=o;f++){d.attempt=f;try{let R=await $r(l,r,d),A=Xe(e.baseUrl,t.path,t.query);await Mr(R,A,d,r);let y=await R.json();return e.schema&&i&&(y=qe(y,{schema:e.schema,tableId:i})),ae(y,e.convertDates)}catch(R){if(c=R,!ce(R)||f>=o)throw R;if(R instanceof S&&R.statusCode===401){if(!await s.handleAuthError(i))throw R;n.debug("Token refreshed, retrying request");continue}let A,y;R instanceof F?(A=R.retryAfter?R.retryAfter*1e3:he(f,e.retry),y="Rate limited (429)"):R instanceof M?(A=he(f,e.retry),y="Timeout"):R instanceof S&&R.statusCode>=500?(A=he(f,e.retry),y=`Server error (${R.statusCode})`):(A=he(f,e.retry),y="Retryable error"),n.retry(f,o,A,y),await Pe(A)}}throw c||new Error("Request failed")}function he(t,r){let e=r.initialDelayMs*Math.pow(r.multiplier,t-1),s=e*.1*(Math.random()*2-1);return Math.min(e+s,r.maxDelayMs)}function xe(t){return{execute:r=>je(r,t)}}var se=class{constructor(r=100){m(this,"requestsPer10Seconds");m(this,"timestamps",[]);this.requestsPer10Seconds=r}async acquire(){let r=Date.now(),e=r-1e4;for(;this.timestamps.length>0&&this.timestamps[0]<e;)this.timestamps.shift();if(this.timestamps.length>=this.requestsPer10Seconds){let n=this.timestamps[0]+1e4-r;if(n>0)return await this.sleep(n),this.acquire()}this.timestamps.push(Date.now())}getWindowCount(){let r=Date.now()-1e4;return this.timestamps.filter(e=>e>=r).length}getRemaining(){return Math.max(0,this.requestsPer10Seconds-this.getWindowCount())}reset(){this.timestamps.length=0}sleep(r){return new Promise(e=>setTimeout(e,r))}},ne=class{async acquire(){}getWindowCount(){return 0}getRemaining(){return 1/0}reset(){}};function ve(t){return t.enabled?new se(t.requestsPer10Seconds):new ne}function Qe(t){return t.totalRecords!==void 0&&t.skip!==void 0?"skip":t.nextPageToken!==void 0||t.nextToken!==void 0?"token":"none"}function Ve(t,r,e){let{metadata:s}=t;if(r==="skip")return s.totalRecords!==void 0&&e<s.totalRecords;if(r==="token"){let n=s.nextPageToken??s.nextToken;return n!==void 0&&n!==""}return!1}function Ke(t){for(let r of Object.keys(t))if(Array.isArray(t[r]))return r;return"data"}function He(t){if(!t||typeof t!="object")return!1;let r=t;if(!r.metadata||typeof r.metadata!="object"||!Object.values(r).some(Array.isArray))return!1;let s=r.metadata;return s.totalRecords!==void 0||s.numRecords!==void 0||s.nextPageToken!==void 0||s.nextToken!==void 0}var fe=class{constructor(r,e){m(this,"executor");m(this,"paginatedExecutor");m(this,"defaultAutoPaginate");this.executor=r,this.paginatedExecutor=e?.paginatedExecutor,this.defaultAutoPaginate=e?.autoPaginate??!1}then(r,e){return(this.defaultAutoPaginate?this.all():this.executor()).then(r,e)}async all(){return this.paginate({})}async paginate(r={}){if(!this.paginatedExecutor)return this.executor();let{limit:e,skip:s=0}=r,n=[],o=null,i="none",l=s,d,c=await this.paginatedExecutor({skip:s});if(!He(c))return c;o=c,i=Qe(c.metadata);let f=Ke(c),R=c[f]||[];for(e!==void 0&&R.length>e?n=R.slice(0,e):n=[...R],i==="skip"?l=s+R.length:i==="token"&&(d=c.metadata.nextPageToken??c.metadata.nextToken);Ve(o,i,n.length)&&!(e!==void 0&&n.length>=e);){let y;if(i==="skip")y=await this.paginatedExecutor({skip:l});else if(i==="token"&&d){let T=o.metadata.nextPageToken!==void 0?"nextPageToken":"nextToken";y=await this.paginatedExecutor({[T]:d})}else break;o=y;let P=y[f]||[];if(P.length===0)break;if(e!==void 0){let T=e-n.length;n=n.concat(P.slice(0,T))}else n=n.concat(P);if(i==="skip")l+=P.length;else if(i==="token"&&(d=y.metadata.nextPageToken??y.metadata.nextToken,!d))break}let A={...o,[f]:n,metadata:{...o.metadata,numRecords:n.length,skip:s}};return i==="token"&&(delete A.metadata.nextPageToken,delete A.metadata.nextToken),A}async noPaginate(){return this.executor()}toPromise(){return this.then()}};function B(t,r){return new fe(t,r)}function Re(t,r=!1){return{createApp(e){return t({method:"POST",path:"/apps",body:e})},getApp(e){return t({method:"GET",path:`/apps/${e.appId}`})},updateApp(e,s){return t({method:"POST",path:`/apps/${e.appId}`,body:s})},deleteApp(e,s){return t({method:"DELETE",path:`/apps/${e.appId}`,body:s})},getAppEvents(e){return t({method:"GET",path:`/apps/${e.appId}/events`})},copyApp(e,s){return t({method:"POST",path:`/apps/${e.appId}/copy`,body:s})},getRoles(e){return t({method:"GET",path:`/apps/${e.appId}/roles`})},getAppTables(e){return t({method:"GET",path:"/tables",query:{appId:e.appId}})},createTable(e,s){return t({method:"POST",path:"/tables",query:{appId:e.appId},body:s})},getTable(e){return t({method:"GET",path:`/tables/${e.tableId}`,query:{appId:e.appId}})},updateTable(e,s){return t({method:"POST",path:`/tables/${e.tableId}`,query:{appId:e.appId},body:s})},deleteTable(e){return t({method:"DELETE",path:`/tables/${e.tableId}`,query:{appId:e.appId}})},getRelationships(e){return B(()=>t({method:"GET",path:`/tables/${e.tableId}/relationships`,query:{skip:e.skip}}),{paginatedExecutor:o=>t({method:"GET",path:`/tables/${e.tableId}/relationships`,query:{skip:e.skip,...o}}),autoPaginate:r})},createRelationship(e,s){return t({method:"POST",path:`/tables/${e.tableId}/relationship`,body:s})},updateRelationship(e,s){return t({method:"POST",path:`/tables/${e.tableId}/relationship/${e.relationshipId}`,body:s})},deleteRelationship(e){return t({method:"DELETE",path:`/tables/${e.tableId}/relationship/${e.relationshipId}`})},getTableReports(e){return t({method:"GET",path:"/reports",query:{tableId:e.tableId}})},getReport(e){return t({method:"GET",path:`/reports/${e.reportId}`,query:{tableId:e.tableId}})},runReport(e,s){return B(()=>t({method:"POST",path:`/reports/${e.reportId}/run`,query:{tableId:e.tableId,skip:e.skip,top:e.top},body:s}),{paginatedExecutor:i=>{let l=s,d=i.skip!==void 0||i.nextPageToken||i.nextToken?{...l||{},options:{...l?.options||{},...i.skip!==void 0?{skip:i.skip}:{}},...i.nextPageToken?{nextPageToken:i.nextPageToken}:{},...i.nextToken?{nextToken:i.nextToken}:{}}:s;return t({method:"POST",path:`/reports/${e.reportId}/run`,query:{tableId:e.tableId,skip:e.skip,top:e.top},body:d})},autoPaginate:r})},getFields(e){return t({method:"GET",path:"/fields",query:{tableId:e.tableId,includeFieldPerms:e.includeFieldPerms}})},createField(e,s){return t({method:"POST",path:"/fields",query:{tableId:e.tableId},body:s})},deleteFields(e,s){return t({method:"DELETE",path:"/fields",query:{tableId:e.tableId},body:s})},getField(e){return t({method:"GET",path:`/fields/${e.fieldId}`,query:{tableId:e.tableId,includeFieldPerms:e.includeFieldPerms}})},updateField(e,s){return t({method:"POST",path:`/fields/${e.fieldId}`,query:{tableId:e.tableId},body:s})},getFieldsUsage(e){return t({method:"GET",path:"/fields/usage",query:{tableId:e.tableId,skip:e.skip,top:e.top}})},getFieldUsage(e){return t({method:"GET",path:`/fields/usage/${e.fieldId}`,query:{tableId:e.tableId}})},runFormula(e){return t({method:"POST",path:"/formula/run",body:e})},upsert(e){return B(()=>t({method:"POST",path:"/records",body:e}),{paginatedExecutor:o=>{let i=e,l=o.skip!==void 0||o.nextPageToken||o.nextToken?{...i||{},options:{...i?.options||{},...o.skip!==void 0?{skip:o.skip}:{}},...o.nextPageToken?{nextPageToken:o.nextPageToken}:{},...o.nextToken?{nextToken:o.nextToken}:{}}:e;return t({method:"POST",path:"/records",body:l})},autoPaginate:r})},deleteRecords(e){return t({method:"DELETE",path:"/records",body:e})},runQuery(e){return B(()=>t({method:"POST",path:"/records/query",body:e}),{paginatedExecutor:o=>{let i=e,l=o.skip!==void 0||o.nextPageToken||o.nextToken?{...i||{},options:{...i?.options||{},...o.skip!==void 0?{skip:o.skip}:{}},...o.nextPageToken?{nextPageToken:o.nextPageToken}:{},...o.nextToken?{nextToken:o.nextToken}:{}}:e;return t({method:"POST",path:"/records/query",body:l})},autoPaginate:r})},recordsModifiedSince(e){return t({method:"POST",path:"/records/modifiedSince",body:e})},getTempTokenDBID(e){return t({method:"GET",path:`/auth/temporary/${e.dbid}`})},exchangeSsoToken(e){return t({method:"POST",path:"/auth/oauth/token",body:e})},cloneUserToken(e){return t({method:"POST",path:"/usertoken/clone",body:e})},transferUserToken(e){return t({method:"POST",path:"/usertoken/transfer",body:e})},deactivateUserToken(){return t({method:"POST",path:"/usertoken/deactivate"})},deleteUserToken(){return t({method:"DELETE",path:"/usertoken"})},downloadFile(e){return t({method:"GET",path:`/files/${e.tableId}/${e.recordId}/${e.fieldId}/${e.versionNumber}`})},deleteFile(e){return t({method:"DELETE",path:`/files/${e.tableId}/${e.recordId}/${e.fieldId}/${e.versionNumber}`})},getUsers(e,s){return B(()=>t({method:"POST",path:"/users",query:{accountId:e.accountId},body:s}),{paginatedExecutor:i=>{let l=s,d=i.skip!==void 0||i.nextPageToken||i.nextToken?{...l||{},options:{...l?.options||{},...i.skip!==void 0?{skip:i.skip}:{}},...i.nextPageToken?{nextPageToken:i.nextPageToken}:{},...i.nextToken?{nextToken:i.nextToken}:{}}:s;return t({method:"POST",path:"/users",query:{accountId:e.accountId},body:d})},autoPaginate:r})},denyUsers(e,s){return t({method:"PUT",path:"/users/deny",query:{accountId:e.accountId},body:s})},denyUsersAndGroups(e,s){return t({method:"PUT",path:`/users/deny/${e.shouldDeleteFromGroups}`,query:{accountId:e.accountId},body:s})},undenyUsers(e,s){return t({method:"PUT",path:"/users/undeny",query:{accountId:e.accountId},body:s})},addMembersToGroup(e,s){return t({method:"POST",path:`/groups/${e.gid}/members`,body:s})},removeMembersFromGroup(e,s){return t({method:"DELETE",path:`/groups/${e.gid}/members`,body:s})},addManagersToGroup(e,s){return t({method:"POST",path:`/groups/${e.gid}/managers`,body:s})},removeManagersFromGroup(e,s){return t({method:"DELETE",path:`/groups/${e.gid}/managers`,body:s})},addSubgroupsToGroup(e,s){return t({method:"POST",path:`/groups/${e.gid}/subgroups`,body:s})},removeSubgroupsFromGroup(e,s){return t({method:"DELETE",path:`/groups/${e.gid}/subgroups`,body:s})},audit(e){return t({method:"POST",path:"/audit",body:e})},platformAnalyticReads(e){return t({method:"GET",path:"/analytics/reads",query:{day:e.day}})},platformAnalyticEventSummaries(e,s){return B(()=>t({method:"POST",path:"/analytics/events/summaries",query:{accountId:e.accountId},body:s}),{paginatedExecutor:i=>{let l=s,d=i.skip!==void 0||i.nextPageToken||i.nextToken?{...l||{},options:{...l?.options||{},...i.skip!==void 0?{skip:i.skip}:{}},...i.nextPageToken?{nextPageToken:i.nextPageToken}:{},...i.nextToken?{nextToken:i.nextToken}:{}}:s;return t({method:"POST",path:"/analytics/events/summaries",query:{accountId:e.accountId},body:d})},autoPaginate:r})},exportSolution(e){return t({method:"GET",path:`/solutions/${e.solutionId}`})},updateSolution(e,s){return t({method:"PUT",path:`/solutions/${e.solutionId}`,body:s})},createSolution(e){return t({method:"POST",path:"/solutions",body:e})},exportSolutionToRecord(e){return t({method:"GET",path:`/solutions/${e.solutionId}/torecord`,query:{tableId:e.tableId,fieldId:e.fieldId}})},createSolutionFromRecord(e){return t({method:"GET",path:"/solutions/fromrecord",query:{tableId:e.tableId,fieldId:e.fieldId,recordId:e.recordId}})},updateSolutionToRecord(e){return t({method:"GET",path:`/solutions/${e.solutionId}/fromrecord`,query:{tableId:e.tableId,fieldId:e.fieldId,recordId:e.recordId}})},changesetSolution(e,s){return t({method:"PUT",path:`/solutions/${e.solutionId}/changeset`,body:s})},changesetSolutionFromRecord(e){return t({method:"GET",path:`/solutions/${e.solutionId}/changeset/fromrecord`,query:{tableId:e.tableId,fieldId:e.fieldId,recordId:e.recordId}})},generateDocument(e){return t({method:"GET",path:`/docTemplates/${e.templateId}/generate`,query:{tableId:e.tableId,recordId:e.recordId,filename:e.filename,format:e.format,margin:e.margin,unit:e.unit,pageSize:e.pageSize,orientation:e.orientation,realm:e.realm}})},getSolutionPublic(e){return t({method:"GET",path:`/solutions/${e.solutionId}/resources`})},getTrustees(e){return t({method:"GET",path:`/app/${e.appId}/trustees`})},addTrustees(e,s){return t({method:"POST",path:`/app/${e.appId}/trustees`,body:s})},removeTrustees(e,s){return t({method:"DELETE",path:`/app/${e.appId}/trustees`,body:s})},updateTrustees(e,s){return t({method:"PATCH",path:`/app/${e.appId}/trustees`,body:s})}}}var G={Success:0,InvalidInput:2,Unauthorized:3,InvalidTicket:4,NoSuchDatabase:6,SSLRequired:8,UnauthorizedIP:19,InvalidAppToken:24,NoSuchRecord:30,NoSuchField:31,NoSuchApp:32,NoSuchUser:33,AccessDenied:83},O=class extends Q{constructor(r,e,s,n){super(r,e,{description:s,action:n}),this.name="XmlError"}};function p(t){if(t.errcode!==0)throw t.errcode===G.InvalidTicket?new X(t.errtext,t.errcode,{description:t.errdetail,action:t.action}):t.errcode===G.InvalidAppToken?new j(t.errtext,t.errcode,{description:t.errdetail,action:t.action}):new O(t.errcode,t.errtext,t.errdetail,t.action)}function Se(t){return t instanceof O?t.code===G.Unauthorized||t.code===G.AccessDenied:!1}function we(t){return t instanceof O?t.code===G.NoSuchDatabase||t.code===G.NoSuchApp||t.code===G.NoSuchRecord||t.code===G.NoSuchField||t.code===G.NoSuchUser:!1}function Ce(t){return t instanceof O?t.code===G.InvalidTicket:!1}function g(t){return`<qdbapi>${t}</qdbapi>`}function ze(t,r){let e="<qdbapi>",s=t.indexOf(e);if(s===-1)return t;let n=s+e.length,o=`<apptoken>${u(r)}</apptoken>`;return t.slice(0,n)+o+t.slice(n)}function Je(t,r){let e="<qdbapi>",s=t.indexOf(e);if(s===-1)return t;let n=s+e.length,o=`<usertoken>${u(r)}</usertoken>`;return t.slice(0,n)+o+t.slice(n)}function u(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function a(t,r){return t.match(new RegExp(`<${r}(?:\\s[^>]*)?>([^<]*)</${r}>`))?.[1]??""}function x(t,r){return t.match(new RegExp(`${r}="([^"]*)"`))?.[1]??""}function k(t,r){let e=new RegExp(`<${r}[^>]*>([\\s\\S]*?)</${r}>`,"g"),s=[],n;for(;(n=e.exec(t))!==null;)s.push(n[0]);return s}function h(t){let r=a(t,"errdetail");return{action:a(t,"action"),errcode:parseInt(a(t,"errcode"),10)||0,errtext:a(t,"errtext"),errdetail:r||void 0}}function be(t,r){let e=r.replace(/\]\]>/g,"]]]]><![CDATA[>");return`<${t}><![CDATA[${e}]]></${t}>`}function v(t){return t==="1"||t.toLowerCase()==="true"}function b(t,r=0){let e=parseInt(t,10);return isNaN(e)?r:e}function _r(t,r,e){let s={};for(let n of t){let o=r?$(r,e,n.id):void 0,i=o??String(n.id);s[i]=o?{...n,alias:o}:n}return s}function Ze(t,r){let e={};for(let s of t){let n=r?Y(r,s.dbid):void 0,o=n??s.dbid;e[o]=n?{...s,alias:n}:s}return e}function Or(t,r){let e={};for(let s of t){let n=r?Y(r,s.id):void 0,o=n??s.id;e[o]=n?{...s,alias:n}:s}return e}function qr(t,r,e){let s={...t},n=$(r,e,t.id);if(n&&(s.alias=n),t.summaryReferenceFid!==void 0){let o=$(r,e,t.summaryReferenceFid);o&&(s.summaryReferenceFidAlias=o)}if(t.summaryTargetFid!==void 0){let o=$(r,e,t.summaryTargetFid);o&&(s.summaryTargetFidAlias=o)}return s}function Ge(t,r,e){return{...t,fields:_r(t.fields,r,e)}}function Ye(t,r,e){let s={...t.table,fields:void 0,childTables:void 0};if(t.table.fields){let n={};for(let o of t.table.fields){let i=r?qr(o,r,e):o,l=r?$(r,e,o.id):void 0,d=l??String(o.id);n[d]=l?{...i,alias:l}:i}s.fields=n}if(t.table.childTables){let n={};for(let o of t.table.childTables){let i=r?Y(r,o.dbid):void 0,l=i??o.dbid;n[l]=i?{...o,alias:i}:o}s.childTables=n}return{...t,table:s}}function et(t,r,e){if(!r)return t;let s=$(r,e,t.fieldId);return s?{...t,fieldAlias:s}:t}function tt(t,r,e){if(!r)return t;let s=$(r,e,t.fieldId);return s?{...t,fieldAlias:s}:t}function rt(t,r){return{...t,databases:Ze(t.databases,r)}}function st(t,r){return{...t,databases:Ze(t.databases,r)}}function nt(t,r){let e=r?Y(r,t.appId):void 0;return{...t,appAlias:e,tables:Or(t.tables,r)}}function ot(t,r){if(!r)return t;let e=Y(r,t.dbid);return e?{...t,alias:e}:t}function Ee(t){let r=b(x(t,"id")),e=a(t,"name"),s=t.match(/<access[^>]*id="(\d+)"[^>]*>([^<]*)<\/access>/),n={id:s?b(s[1]??"0"):0,description:s?.[2]??""};return{id:r,name:e,access:n}}function Wr(t){let r=Ee(t),e=t.match(/<member[^>]*type="([^"]*)"[^>]*>([^<]*)<\/member>/),s=e&&e[1]&&e[2]?{type:e[1],name:e[2]}:void 0;return{...r,member:s}}function Br(t){let r=x(t,"id"),e=x(t,"type")||"user",s=a(t,"name"),n=a(t,"firstName")||void 0,o=a(t,"lastName")||void 0,i=a(t,"lastAccess")||void 0,l=a(t,"lastAccessAppLocal")||void 0,c=k(t,"role").map(Ee);return{id:r,type:e,name:s,firstName:n,lastName:o,lastAccess:i,lastAccessAppLocal:l,roles:c}}async function it(t,r){let e=g(""),s=await t.doXml(r,"API_GetRoleInfo",e),n=h(s);return p(n),{roles:k(s,"role").map(Ee)}}async function at(t,r){let e=g(""),s=await t.doXml(r,"API_UserRoles",e),n=h(s);return p(n),{users:k(s,"user").map(Br)}}async function lt(t,r,e,s){let n="";e&&(n+=`<userid>${u(e)}</userid>`),s&&(n+="<inclgrps>1</inclgrps>");let o=g(n),i=await t.doXml(r,"API_GetUserRole",o),l=h(i);p(l);let d=i.match(/<user[^>]*id="([^"]*)"[^>]*>([\s\S]*?)<\/user>/);if(!d||!d[1])throw new Error("Invalid API_GetUserRole response: no user element");let c=d[1],f=d[0],R=a(f,"name"),y=k(f,"role").map(Wr);return{userId:c,userName:R,roles:y}}async function dt(t,r,e,s){let n=`<userid>${u(e)}</userid><roleid>${s}</roleid>`,o=g(n),i=await t.doXml(r,"API_AddUserToRole",o),l=h(i);p(l)}async function ut(t,r,e,s){let n=`<userid>${u(e)}</userid><roleid>${s}</roleid>`,o=g(n),i=await t.doXml(r,"API_RemoveUserFromRole",o),l=h(i);p(l)}async function ct(t,r,e,s,n){let o=`<userid>${u(e)}</userid><roleid>${s}</roleid>`;n!==void 0&&n>0&&(o+=`<newRoleid>${n}</newRoleid>`);let i=g(o),l=await t.doXml(r,"API_ChangeUserRole",i),d=h(l);p(d)}function mt(t){let r=x(t,"id"),e=a(t,"name"),s=a(t,"description")||void 0,n=a(t,"managedByUser"),o=n?v(n):void 0;return{id:r,name:e,description:s,managedByUser:o}}function Nr(t){return{id:x(t,"id"),firstName:a(t,"firstName"),lastName:a(t,"lastName"),email:a(t,"email"),screenName:a(t,"screenName")||void 0,isAdmin:v(a(t,"isAdmin"))}}function Lr(t){return{id:x(t,"id"),firstName:a(t,"firstName"),lastName:a(t,"lastName"),email:a(t,"email"),screenName:a(t,"screenName")||void 0,isMember:v(a(t,"isMember"))}}function Xr(t){return{id:x(t,"id")}}async function pt(t,r,e,s){let n=`<name>${u(r)}</name>`;e&&(n+=`<description>${u(e)}</description>`),s&&(n+=`<accountID>${u(s)}</accountID>`);let o=g(n),i=await t.doXml("main","API_CreateGroup",o),l=h(i);p(l);let d=i.match(/<group[^>]*>([\s\S]*?)<\/group>/);if(!d)throw new Error("Invalid API_CreateGroup response: no group element");return{group:mt(d[0])}}async function gt(t,r){let e=`<gid>${u(r)}</gid>`,s=g(e),n=await t.doXml("main","API_DeleteGroup",s),o=h(n);p(o)}async function ht(t,r,e,s,n){let o=`<gid>${u(r)}</gid>`;e&&(o+=`<name>${u(e)}</name>`),s&&(o+=`<description>${u(s)}</description>`),n&&(o+=`<accountID>${u(n)}</accountID>`);let i=g(o),l=await t.doXml("main","API_CopyGroup",i),d=h(l);p(d);let c=l.match(/<group[^>]*>([\s\S]*?)<\/group>/);if(!c)throw new Error("Invalid API_CopyGroup response: no group element");return{group:mt(c[0])}}async function ft(t,r,e,s,n){let o=`<gid>${u(r)}</gid>`;e&&(o+=`<name>${u(e)}</name>`),s&&(o+=`<description>${u(s)}</description>`),n&&(o+=`<accountID>${u(n)}</accountID>`);let i=g(o),l=await t.doXml("main","API_ChangeGroupInfo",i),d=h(l);p(d)}async function Rt(t,r,e){let s=`<gid>${u(r)}</gid>`;e&&(s+="<includeAllMgrs>true</includeAllMgrs>");let n=g(s),o=await t.doXml("main","API_GetUsersInGroup",n),i=h(o);p(i);let l=o.match(/<group[^>]*id="([^"]*)"[^>]*>([\s\S]*?)<\/group>/);if(!l||!l[1])throw new Error("Invalid API_GetUsersInGroup response: no group element");let d=l[0],c=l[1],f=a(d,"name"),R=a(d,"description")||void 0,y=k(d,"user").map(Nr),T=k(d,"manager").map(Lr),D=k(d,"subgroup").map(Xr);return{id:c,name:f,description:R,users:y,managers:T,subgroups:D}}async function bt(t,r,e,s){let n=`<gid>${u(r)}</gid>`;n+=`<uid>${u(e)}</uid>`,s&&(n+="<allowAdminAccess>true</allowAdminAccess>");let o=g(n),i=await t.doXml("main","API_AddUserToGroup",o),l=h(i);p(l)}async function yt(t,r,e){let s=`<gid>${u(r)}</gid><uid>${u(e)}</uid>`,n=g(s),o=await t.doXml("main","API_RemoveUserFromGroup",n),i=h(o);p(i)}async function Tt(t,r,e){let s=`<gid>${u(e)}</gid>`,n=g(s),o=await t.doXml(r,"API_GetGroupRole",n),i=h(o);return p(i),{roles:k(o,"role").map(c=>({id:b(x(c,"id")),name:a(c,"name")}))}}async function At(t,r,e,s){let n=`<gid>${u(e)}</gid><roleid>${s}</roleid>`,o=g(n),i=await t.doXml(r,"API_AddGroupToRole",o),l=h(i);p(l)}async function It(t,r,e,s,n){let o=`<gid>${u(e)}</gid>`;n?o+="<allRoles>true</allRoles>":o+=`<roleid>${s}</roleid>`;let i=g(o),l=await t.doXml(r,"API_RemoveGroupFromRole",i),d=h(l);p(d)}async function kt(t,r,e){let s="";r&&(s+=`<userid>${u(r)}</userid>`),e&&(s+="<adminOnly>true</adminOnly>");let n=g(s),o=await t.doXml("main","API_GrantedGroups",n),i=h(o);return p(i),{groups:k(o,"group").map(c=>({id:x(c,"id"),name:a(c,"name")}))}}async function Pt(t,r){let e=`<gid>${u(r)}</gid>`,s=g(e),n=await t.doXml("main","API_GrantedDBsForGroup",s),o=h(n);return p(o),{databases:k(n,"dbinfo").map(d=>({dbid:a(d,"dbid"),name:a(d,"dbname")}))}}async function xt(t,r,e){let s=`<gid>${u(r)}</gid><subgroupid>${u(e)}</subgroupid>`,n=g(s),o=await t.doXml("main","API_AddSubgroup",n),i=h(o);p(i)}async function vt(t,r,e){let s=`<gid>${u(r)}</gid><subgroupid>${u(e)}</subgroupid>`,n=g(s),o=await t.doXml("main","API_RemoveSubgroup",n),i=h(o);p(i)}async function St(t,r){let e="";r&&(e=`<email>${u(r)}</email>`);let s=g(e),n=await t.doXml("main","API_GetUserInfo",s),o=h(n);p(o);let i=n.match(/<user[^>]*id="([^"]*)"[^>]*>([\s\S]*?)<\/user>/);if(!i||!i[1])throw new Error("Invalid API_GetUserInfo response: no user element");let l=i[0],d=i[1],c=a(l,"firstName"),f=a(l,"lastName"),R=a(l,"login")||void 0,A=a(l,"email")||void 0,y=a(l,"screenName")||void 0,P=a(l,"isVerified"),T=P?v(P):void 0,I=a(l,"externalAuth"),D=I?v(I):void 0;return{id:d,firstName:c,lastName:f,login:R,email:A,screenName:y,isVerified:T,externalAuth:D}}async function wt(t,r,e,s,n,o){let i=`<email>${u(e)}</email><fname>${u(s)}</fname><lname>${u(n)}</lname>`;o!==void 0&&(i+=`<roleid>${o}</roleid>`);let l=g(i),d=await t.doXml(r,"API_ProvisionUser",l),c=h(d);p(c);let f=a(d,"userid");if(!f)throw new Error("Invalid API_ProvisionUser response: no userid element");return{userId:f}}async function Ct(t,r,e,s){let n=`<userid>${u(e)}</userid>`;s&&(n+=`<usertext>${u(s)}</usertext>`);let o=g(n),i=await t.doXml(r,"API_SendInvitation",o),l=h(i);p(l)}async function Gt(t,r,e){let s=`<newmgr>${u(e)}</newmgr>`,n=g(s),o=await t.doXml(r,"API_ChangeManager",n),i=h(o);p(i)}async function Et(t,r,e,s){let n=`<rid>${e}</rid><newowner>${u(s)}</newowner>`,o=g(n),i=await t.doXml(r,"API_ChangeRecordOwner",o),l=h(i);p(l)}async function Dt(t,r){let e="";r?.excludeParents&&(e+="<excludeparents>1</excludeparents>"),r?.parentsOnly&&(e+="<Withembeddedtables>0</Withembeddedtables>"),r?.adminOnly&&(e+="<adminOnly>true</adminOnly>"),r?.includeAncestors&&(e+="<includeancestors>1</includeancestors>"),r?.withEmbeddedTables!==void 0&&(e+=`<withembeddedtables>${r.withEmbeddedTables?"1":"0"}</withembeddedtables>`),r?.realmAppsOnly&&(e+="<realmAppsOnly>true</realmAppsOnly>");let s=g(e),n=await t.doXml("main","API_GrantedDBs",s),o=h(n);return p(o),{databases:k(n,"dbinfo").map(d=>{let c={dbid:a(d,"dbid"),name:a(d,"dbname")},f=a(d,"ancestorappid");f&&(c.ancestorAppId=f);let R=a(d,"oldestancestorappid");return R&&(c.oldestAncestorAppId=R),c})}}async function Ft(t,r,e){let s=`<dbname>${u(r)}</dbname>`;e&&(s+="<ParentsOnly>1</ParentsOnly>");let n=g(s),o=await t.doXml("main","API_FindDBByName",n),i=h(o);p(i);let l=a(o,"dbid");if(!l)throw new Error("Invalid API_FindDBByName response: no dbid element");return{dbid:l}}async function Ut(t,r){let e=g(""),s=await t.doXml(r,"API_GetDBInfo",e),n=h(s);return p(n),{name:a(s,"dbname"),lastRecModTime:a(s,"lastRecModTime")||void 0,lastModifiedTime:a(s,"lastModifiedTime")||void 0,createdTime:a(s,"createdTime")||void 0,numRecords:b(a(s,"numRecords")),managerId:a(s,"mgrID")||void 0,managerName:a(s,"mgrName")||void 0,version:a(s,"version")||void 0,timeZone:a(s,"time_zone")||void 0}}async function $t(t,r){let e=g(""),s=await t.doXml(r,"API_GetNumRecords",e),n=h(s);return p(n),b(a(s,"num_records"))}function jr(t){let r={id:b(x(t,"id")),fieldType:x(t,"field_type"),baseType:x(t,"base_type"),label:a(t,"label")},e=x(t,"mode");e&&(r.mode=e);let s=a(t,"nowrap");s&&(r.nowrap=v(s));let n=a(t,"bold");n&&(r.bold=v(n));let o=a(t,"required");o&&(r.required=v(o));let i=a(t,"unique");i&&(r.unique=v(i));let l=a(t,"fieldhelp");l&&(r.fieldHelp=l);let d=a(t,"appears_by_default");d&&(r.appearsByDefault=v(d));let c=a(t,"find_enabled");c&&(r.findEnabled=v(c));let f=a(t,"allow_new_choices");f&&(r.allowNewChoices=v(f));let R=a(t,"sort_as_given");R&&(r.sortAsGiven=v(R));let A=a(t,"carrychoices");A&&(r.carryChoices=v(A));let y=a(t,"foreignkey");y&&(r.foreignKey=v(y));let P=a(t,"does_total");P&&(r.doesTotal=v(P));let T=a(t,"does_average");T&&(r.doesAverage=v(T));let I=a(t,"default_kind");I&&(r.defaultKind=I);let D=a(t,"default_value");D&&(r.defaultValue=D);let w=t.match(/<choices>([\s\S]*?)<\/choices>/);if(w&&w[1]){let de=k(w[1],"choice");r.choices=de.map(ie=>a(ie,"choice")||ie.replace(/<\/?choice>/g,""))}let N=a(t,"summaryReferenceFid");N&&(r.summaryReferenceFid=b(N));let L=a(t,"summaryTargetFid");L&&(r.summaryTargetFid=b(L));let oe=a(t,"summaryFunction");return oe&&(r.summaryFunction=oe),r}function Qr(t){let r={id:b(x(t,"id")),name:a(t,"qyname")||a(t,"qname"),type:a(t,"qytype")},e=a(t,"qydesc");e&&(r.description=e);let s=a(t,"qycrit");s&&(r.criteria=s);let n=a(t,"qyclst");n&&(r.columnList=n);let o=a(t,"qyslst");o&&(r.sortList=o);let i=a(t,"qyopts");i&&(r.options=i);let l=a(t,"qycalst");return l&&(r.calcFields=l),r}async function Mt(t,r){let e=g(""),s=await t.doXml(r,"API_GetSchema",e),n=h(s);p(n);let o=a(s,"time_zone")||void 0,i=a(s,"date_format")||void 0,l=s.match(/<table>([\s\S]*?)<\/table>/);if(!l)throw new Error("Invalid API_GetSchema response: no table element");let d=l[0],c={name:a(d,"name"),description:a(d,"desc")||void 0},f=d.match(/<original>([\s\S]*?)<\/original>/);if(f){let T=f[0],I={},D=a(T,"app_id");D&&(I.appId=D);let w=a(T,"table_id");w&&(I.tableId=w);let N=a(T,"cre_date");N&&(I.createdTime=N);let L=a(T,"mod_date");L&&(I.modifiedTime=L);let oe=a(T,"next_record_id");oe&&(I.nextRecordId=b(oe));let de=a(T,"next_field_id");de&&(I.nextFieldId=b(de));let ie=a(T,"next_query_id");ie&&(I.nextQueryId=b(ie));let Fe=a(T,"def_sort_fid");Fe&&(I.defaultSortFid=b(Fe));let Ue=a(T,"def_sort_order");Ue&&(I.defaultSortOrder=b(Ue)),c.original=I}let R=d.match(/<variables>([\s\S]*?)<\/variables>/);if(R){let T=k(R[0],"var");c.variables=T.map(I=>({name:x(I,"name"),value:a(I,"var")||""}))}let A=d.match(/<chdbids>([\s\S]*?)<\/chdbids>/);if(A){let T=k(A[0],"chdbid");c.childTables=T.map(I=>({name:x(I,"name"),dbid:a(I,"chdbid")||""}))}let y=d.match(/<queries>([\s\S]*?)<\/queries>/);if(y){let T=k(y[0],"query");c.queries=T.map(Qr)}let P=d.match(/<fields>([\s\S]*?)<\/fields>/);if(P&&P[0].length>20){let T=k(P[0],"field");c.fields=T.map(jr)}return{table:c,timeZone:o,dateFormat:i}}async function _t(t,r,e){let s=`<varname>${u(e)}</varname>`,n=g(s),o=await t.doXml(r,"API_GetDBVar",n),i=h(o);return p(i),a(o,"value")}async function Ot(t,r,e,s){let n=`<varname>${u(e)}</varname><value>${u(s)}</value>`,o=g(n),i=await t.doXml(r,"API_SetDBVar",o),l=h(i);p(l)}async function qt(t,r,e){let s=`<pageID>${u(String(e))}</pageID>`,n=g(s),o=await t.doXml(r,"API_GetDBPage",n);if(o.includes("<errcode>")&&!o.includes("<errcode>0</errcode>")){let i=h(o);p(i)}return o}async function Wt(t,r,e,s,n,o){let i="";s!==void 0&&(i+=`<pageid>${s}</pageid>`),i+=`<pagename>${u(e)}</pagename>`,i+=`<pagetype>${n}</pagetype>`,i+=be("pagebody",o);let l=g(i),d=await t.doXml(r,"API_AddReplaceDBPage",l),c=h(d);return p(c),{pageId:b(a(d,"pageID"))}}function Bt(t){let r={id:b(a(t,"fid")),name:a(t,"name"),type:a(t,"type"),value:a(t,"value")},e=a(t,"printable");return e&&(r.printable=e),r}async function Nt(t,r,e){let s="";e&&(s=`<query>${u(e)}</query>`);let n=g(s),o=await t.doXml(r,"API_DoQueryCount",n),i=h(o);return p(i),{numMatches:b(a(o,"numMatches"))}}async function Lt(t,r,e){let s=`<rid>${e}</rid>`,n=g(s),o=await t.doXml(r,"API_GetRecordInfo",n),i=h(o);p(i);let d=k(o,"field").map(Bt);return{recordId:b(a(o,"rid")),numFields:b(a(o,"num_fields")),updateId:a(o,"update_id")||void 0,fields:d}}async function Xt(t,r,e){let s=`<key>${u(e)}</key>`,n=g(s),o=await t.doXml(r,"API_GetRecordInfo",n),i=h(o);p(i);let d=k(o,"field").map(Bt);return{recordId:b(a(o,"rid")),numFields:b(a(o,"num_fields")),updateId:a(o,"update_id")||void 0,fields:d}}async function jt(t,r,e){let s=be("records_csv",e.recordsCsv);e.clist&&e.clist.length>0&&(s+=`<clist>${e.clist.join(".")}</clist>`),e.skipFirst&&(s+="<skipfirst>1</skipfirst>"),e.mergeFieldId!==void 0&&(s+=`<mergeFieldId>${e.mergeFieldId}</mergeFieldId>`),e.decimalPercent&&(s+="<decimalPercent>1</decimalPercent>");let n=g(s),o=await t.doXml(r,"API_ImportFromCSV",n),i=h(o);p(i);let d=k(o,"rid").map(c=>{let f=b(c.replace(/<rid[^>]*>/,"").replace(/<\/rid>/,"")),R=x(c,"update_id")||void 0;return{recordId:f,updateId:R}});return{numRecsInput:b(a(o,"num_recs_input")),numRecsAdded:b(a(o,"num_recs_added")),numRecsUpdated:b(a(o,"num_recs_updated")),recordIds:d}}async function Qt(t,r,e){let s=`<id>${e}</id>`,n=g(s),o=await t.doXml(r,"API_RunImport",n),i=h(o);p(i);let d=k(o,"rid").map(c=>{let f=b(c.replace(/<rid[^>]*>/,"").replace(/<\/rid>/,"")),R=x(c,"update_id")||void 0;return{recordId:f,updateId:R}});return{numRecsInput:b(a(o,"num_recs_input")),numRecsAdded:b(a(o,"num_recs_added")),numRecsUpdated:b(a(o,"num_recs_updated")),recordIds:d}}async function Vt(t,r,e){let s=`<rid>${e.rid}</rid>`;e.copyfid!==void 0&&(s+=`<copyfid>${e.copyfid}</copyfid>`),e.recurse&&(s+="<recurse>1</recurse>"),e.relfids&&e.relfids.length>0&&(s+=`<relfids>${e.relfids.join(".")}</relfids>`);let n=g(s),o=await t.doXml(r,"API_CopyMasterDetail",n),i=h(o);return p(i),{newRid:b(a(o,"newrid")),numCreated:b(a(o,"num_created"))}}function Kt(t){let r=`<label>${u(t.label)}</label>`;if(r+=`<WebhookURL>${u(t.webhookUrl)}</WebhookURL>`,t.description&&(r+=`<Description>${u(t.description)}</Description>`),t.query&&(r+=`<Query>${u(t.query)}</Query>`),t.workflowWhen&&(r+=`<WorkflowWhen>${u(t.workflowWhen)}</WorkflowWhen>`),t.headers&&t.headers.length>0&&(r+=`<WebhookHeaderCount>${t.headers.length}</WebhookHeaderCount>`,t.headers.forEach((e,s)=>{r+=`<WebhookHeaderKey${s+1}>${u(e.key)}</WebhookHeaderKey${s+1}>`,r+=`<WebhookHeaderValue${s+1}>${u(e.value)}</WebhookHeaderValue${s+1}>`})),t.message&&(r+=`<WebhookMessage>${u(t.message)}</WebhookMessage>`),t.messageFormat&&(r+=`<WebhookMessageFormat>${t.messageFormat}</WebhookMessageFormat>`),t.httpVerb&&(r+=`<WebhookHTTPVerb>${t.httpVerb}</WebhookHTTPVerb>`),t.triggerFields&&t.triggerFields.length>0){r+="<tfidsWhich>TRUE</tfidsWhich>";for(let e of t.triggerFields)r+=`<tfids>${e}</tfids>`}return r}function Vr(t,r){let e=`<actionId>${u(t)}</actionId>`;return e+=Kt(r),r.clearTriggerFields&&(e=e.replace(/<tfidsWhich>TRUE<\/tfidsWhich>/,""),e=e.replace(/<tfids>\d+<\/tfids>/g,""),e+="<tfidsWhich>tfidsAny</tfidsWhich>"),e}async function Ht(t,r,e){let s=Kt(e),n=g(s),o=await t.doXml(r,"API_Webhooks_Create",n),i=h(o);p(i)}async function zt(t,r,e,s){let n=Vr(e,s),o=g(n),i=await t.doXml(r,"API_Webhooks_Edit",o),l=h(i);p(l)}async function Jt(t,r,e){if(e.length===0)throw new Error("actionIds array cannot be empty");let s=`<actionIDList>${e.join(",")}</actionIDList>`,n=g(s),o=await t.doXml(r,"API_Webhooks_Delete",n),i=h(o);return p(i),{numChanged:b(a(o,"numChanged"))}}async function Zt(t,r,e){if(e.length===0)throw new Error("actionIds array cannot be empty");let s=`<actionIDList>${e.join(",")}</actionIDList>`,n=g(s),o=await t.doXml(r,"API_Webhooks_Activate",n),i=h(o);return p(i),{numChanged:b(a(o,"numChanged"))}}async function Yt(t,r,e){if(e.length===0)throw new Error("actionIds array cannot be empty");let s=`<actionIDList>${e.join(",")}</actionIDList>`,n=g(s),o=await t.doXml(r,"API_Webhooks_Deactivate",n),i=h(o);return p(i),{numChanged:b(a(o,"numChanged"))}}async function er(t,r,e){let s=`<actionId>${u(e)}</actionId>`,n=g(s),o=await t.doXml(r,"API_Webhooks_Copy",n),i=h(o);return p(i),{actionId:a(o,"actionId")}}async function tr(t,r,e,s){if(s.length===0)throw new Error("choices array cannot be empty");let n=`<fid>${e}</fid>`;for(let d of s)n+=`<choice>${u(d)}</choice>`;let o=g(n),i=await t.doXml(r,"API_FieldAddChoices",o),l=h(i);return p(l),{fieldId:e,fieldName:a(i,"fname")||"",numAdded:b(a(i,"numadded"))}}async function rr(t,r,e,s){if(s.length===0)throw new Error("choices array cannot be empty");let n=`<fid>${e}</fid>`;for(let d of s)n+=`<choice>${u(d)}</choice>`;let o=g(n),i=await t.doXml(r,"API_FieldRemoveChoices",o),l=h(i);return p(l),{fieldId:e,fieldName:a(i,"fname")||"",numRemoved:b(a(i,"numremoved"))}}async function sr(t,r,e){let s=`<fid>${e}</fid>`,n=g(s),o=await t.doXml(r,"API_SetKeyField",n),i=h(o);p(i)}async function nr(t,r,e){let s="";if(e)for(let i of e)s+=`<field fid="${i.id}">${u(i.value)}</field>`;let n=g(s),o=await t.doXml(r,"API_GenAddRecordForm",n);if(o.includes("<errcode>")&&!o.includes("<errcode>0</errcode>")){let i=h(o);p(i)}return o}async function or(t,r,e){let s="";e?.query&&(s+=`<query>${u(e.query)}</query>`),e?.clist&&e.clist.length>0&&(s+=`<clist>${e.clist.join(".")}</clist>`),e?.slist&&e.slist.length>0&&(s+=`<slist>${e.slist.join(".")}</slist>`),e?.options&&(s+=`<options>${u(e.options)}</options>`),e?.format&&(s+=`<fmt>${e.format}</fmt>`);let n=g(s),o=await t.doXml(r,"API_GenResultsTable",n);if(o.includes("<errcode>")&&!o.includes("<errcode>0</errcode>")){let i=h(o);p(i)}return o}async function ir(t,r,e){let s="";e.rid!==void 0&&(s+=`<rid>${e.rid}</rid>`),e.key&&(s+=`<key>${u(e.key)}</key>`),e.jht&&(s+="<jht>1</jht>"),e.dfid!==void 0&&(s+=`<dfid>${e.dfid}</dfid>`);let n=g(s),o=await t.doXml(r,"API_GetRecordAsHTML",n);if(o.includes("<errcode>")&&!o.includes("<errcode>0</errcode>")){let i=h(o);p(i)}return o}async function ar(t,r){let e=`<dbid>${u(r)}</dbid>`,s=g(e),n=await t.doXml("main","API_GetAppDTMInfo",s),o=h(n);p(o);let l=k(n,"table").map(d=>({id:x(d,"id"),lastModifiedTime:a(d,"lastModifiedTime")||void 0,lastRecModTime:a(d,"lastRecModTime")||void 0}));return{appId:a(n,"app_id")||r,lastModifiedTime:a(n,"lastModifiedTime")||void 0,lastRecModTime:a(n,"lastRecModTime")||void 0,tables:l}}async function lr(t,r){let e=g(""),s=await t.doXml(r,"API_GetAncestorInfo",e),n=h(s);return p(n),{ancestorAppId:a(s,"ancestorappid")||void 0,oldestAncestorAppId:a(s,"oldestancestorappid")||void 0}}async function dr(t){let r=g(""),e=await t.doXml("main","API_SignOut",r),s=h(e);p(s)}var Kr=new Set(["API_AddUserToRole","API_RemoveUserFromRole","API_ChangeUserRole","API_ProvisionUser","API_SendInvitation","API_ChangeManager","API_ChangeRecordOwner","API_CreateGroup","API_DeleteGroup","API_AddUserToGroup","API_RemoveUserFromGroup","API_AddGroupToRole","API_RemoveGroupFromRole","API_CopyGroup","API_ChangeGroupInfo","API_AddSubgroup","API_RemoveSubgroup","API_SetDBVar","API_AddReplaceDBPage","API_FieldAddChoices","API_FieldRemoveChoices","API_SetKeyField","API_Webhooks_Create","API_Webhooks_Edit","API_Webhooks_Delete","API_Webhooks_Activate","API_Webhooks_Deactivate","API_Webhooks_Copy","API_ImportFromCSV","API_RunImport","API_CopyMasterDetail","API_PurgeRecords","API_AddRecord","API_EditRecord","API_DeleteRecord","API_SignOut"]);function De(t){return Kr.has(t)}var le=class{constructor(r,e){m(this,"caller");m(this,"readOnly");m(this,"schema");m(this,"fetchApi");this.caller=r,this.readOnly=e?.readOnly??!1,this.schema=e?.schema,this.fetchApi=e?.fetchApi??globalThis.fetch}resolveTable(r){return U(this.schema,r)}resolveField(r,e){return q(this.schema,r,e)}checkWriteAllowed(r){if(this.readOnly&&De(r))throw new _("POST",`/db/${this.caller.realm()}`,r)}async executeXml(r,e,s){return this.checkWriteAllowed(e),this.caller.doXml(r,e,s)}realm(){return this.caller.realm()}async getRoleInfo(r){return it(this.caller,this.resolveTable(r))}async userRoles(r){return at(this.caller,this.resolveTable(r))}async getUserRole(r,e,s){return lt(this.caller,this.resolveTable(r),e,s)}async addUserToRole(r,e,s){return this.checkWriteAllowed("API_AddUserToRole"),dt(this.caller,this.resolveTable(r),e,s)}async removeUserFromRole(r,e,s){return this.checkWriteAllowed("API_RemoveUserFromRole"),ut(this.caller,this.resolveTable(r),e,s)}async changeUserRole(r,e,s,n){return this.checkWriteAllowed("API_ChangeUserRole"),ct(this.caller,this.resolveTable(r),e,s,n)}async createGroup(r,e,s){return this.checkWriteAllowed("API_CreateGroup"),pt(this.caller,r,e,s)}async deleteGroup(r){return this.checkWriteAllowed("API_DeleteGroup"),gt(this.caller,r)}async copyGroup(r,e,s,n){return this.checkWriteAllowed("API_CopyGroup"),ht(this.caller,r,e,s,n)}async changeGroupInfo(r,e,s,n){return this.checkWriteAllowed("API_ChangeGroupInfo"),ft(this.caller,r,e,s,n)}async getUsersInGroup(r,e){return Rt(this.caller,r,e)}async addUserToGroup(r,e,s){return this.checkWriteAllowed("API_AddUserToGroup"),bt(this.caller,r,e,s)}async removeUserFromGroup(r,e){return this.checkWriteAllowed("API_RemoveUserFromGroup"),yt(this.caller,r,e)}async getGroupRole(r,e){return Tt(this.caller,this.resolveTable(r),e)}async addGroupToRole(r,e,s){return this.checkWriteAllowed("API_AddGroupToRole"),At(this.caller,this.resolveTable(r),e,s)}async removeGroupFromRole(r,e,s,n){return this.checkWriteAllowed("API_RemoveGroupFromRole"),It(this.caller,this.resolveTable(r),e,s,n)}async grantedGroups(r,e){return kt(this.caller,r,e)}async grantedDBsForGroup(r){let e=await Pt(this.caller,r);return st(e,this.schema)}async addSubgroup(r,e){return this.checkWriteAllowed("API_AddSubgroup"),xt(this.caller,r,e)}async removeSubgroup(r,e){return this.checkWriteAllowed("API_RemoveSubgroup"),vt(this.caller,r,e)}async getUserInfo(r){return St(this.caller,r)}async provisionUser(r,e,s,n,o){return this.checkWriteAllowed("API_ProvisionUser"),wt(this.caller,this.resolveTable(r),e,s,n,o)}async sendInvitation(r,e,s){return this.checkWriteAllowed("API_SendInvitation"),Ct(this.caller,this.resolveTable(r),e,s)}async changeManager(r,e){return this.checkWriteAllowed("API_ChangeManager"),Gt(this.caller,this.resolveTable(r),e)}async changeRecordOwner(r,e,s){return this.checkWriteAllowed("API_ChangeRecordOwner"),Et(this.caller,this.resolveTable(r),e,s)}async grantedDBs(r){let e=await Dt(this.caller,r);return rt(e,this.schema)}async findDBByName(r,e){let s=await Ft(this.caller,r,e);return ot(s,this.schema)}async getDBInfo(r){return Ut(this.caller,this.resolveTable(r))}async getNumRecords(r){return $t(this.caller,this.resolveTable(r))}async getSchema(r){let e=this.resolveTable(r),s=await Mt(this.caller,e);return Ye(s,this.schema,e)}async getDBVar(r,e){return _t(this.caller,this.resolveTable(r),e)}async setDBVar(r,e,s){return this.checkWriteAllowed("API_SetDBVar"),Ot(this.caller,this.resolveTable(r),e,s)}async getDBPage(r,e){return qt(this.caller,this.resolveTable(r),e)}async addReplaceDBPage(r,e,s,n,o){return this.checkWriteAllowed("API_AddReplaceDBPage"),Wt(this.caller,this.resolveTable(r),e,s,n,o)}async fieldAddChoices(r,e,s){this.checkWriteAllowed("API_FieldAddChoices");let n=this.resolveTable(r),o=this.resolveField(n,e),i=await tr(this.caller,n,o,s);return et(i,this.schema,n)}async fieldRemoveChoices(r,e,s){this.checkWriteAllowed("API_FieldRemoveChoices");let n=this.resolveTable(r),o=this.resolveField(n,e),i=await rr(this.caller,n,o,s);return tt(i,this.schema,n)}async setKeyField(r,e){this.checkWriteAllowed("API_SetKeyField");let s=this.resolveTable(r),n=this.resolveField(s,e);return sr(this.caller,s,n)}async doQueryCount(r,e){return Nt(this.caller,this.resolveTable(r),e)}async getRecordInfo(r,e){let s=this.resolveTable(r),n=await Lt(this.caller,s,e);return Ge(n,this.schema,s)}async getRecordInfoByKey(r,e){let s=this.resolveTable(r),n=await Xt(this.caller,s,e);return Ge(n,this.schema,s)}async importFromCSV(r,e){this.checkWriteAllowed("API_ImportFromCSV");let s=this.resolveTable(r),n={...e,clist:e.clist?.map(o=>this.resolveField(s,o)),mergeFieldId:e.mergeFieldId!==void 0?this.resolveField(s,e.mergeFieldId):void 0};return jt(this.caller,s,n)}async runImport(r,e){return this.checkWriteAllowed("API_RunImport"),Qt(this.caller,this.resolveTable(r),e)}async copyMasterDetail(r,e){this.checkWriteAllowed("API_CopyMasterDetail");let s=this.resolveTable(r),n={...e,copyfid:e.copyfid!==void 0?this.resolveField(s,e.copyfid):void 0,relfids:e.relfids?.map(o=>this.resolveField(s,o))};return Vt(this.caller,s,n)}async getAppDTMInfo(r){let e=this.resolveTable(r),s=`<dbid>${u(e)}</dbid>`,n=g(s),o=`https://${this.caller.realm()}.quickbase.com/db/main`,l=await(await this.fetchApi(o,{method:"POST",headers:{"Content-Type":"application/xml","QUICKBASE-ACTION":"API_GetAppDTMInfo"},body:n,credentials:"omit"})).text(),d=await ar({realm:this.caller.realm,doXml:async()=>l},e);return nt(d,this.schema)}async getAncestorInfo(r){return lr(this.caller,this.resolveTable(r))}async webhooksCreate(r,e){return this.checkWriteAllowed("API_Webhooks_Create"),Ht(this.caller,this.resolveTable(r),e)}async webhooksEdit(r,e,s){return this.checkWriteAllowed("API_Webhooks_Edit"),zt(this.caller,this.resolveTable(r),e,s)}async webhooksDelete(r,e){return this.checkWriteAllowed("API_Webhooks_Delete"),Jt(this.caller,this.resolveTable(r),e)}async webhooksActivate(r,e){return this.checkWriteAllowed("API_Webhooks_Activate"),Zt(this.caller,this.resolveTable(r),e)}async webhooksDeactivate(r,e){return this.checkWriteAllowed("API_Webhooks_Deactivate"),Yt(this.caller,this.resolveTable(r),e)}async webhooksCopy(r,e){return this.checkWriteAllowed("API_Webhooks_Copy"),er(this.caller,this.resolveTable(r),e)}async genAddRecordForm(r,e){let s=this.resolveTable(r),n=e?.map(o=>({id:this.resolveField(s,o.id),value:o.value}));return nr(this.caller,s,n)}async genResultsTable(r,e){let s=this.resolveTable(r),n=e?{...e,clist:e.clist?.map(o=>this.resolveField(s,o)),slist:e.slist?.map(o=>this.resolveField(s,o))}:void 0;return or(this.caller,s,n)}async getRecordAsHTML(r,e){let s=this.resolveTable(r),n={...e,dfid:e.dfid!==void 0?this.resolveField(s,e.dfid):void 0};return ir(this.caller,s,n)}async signOut(){return dr(this.caller)}};function ur(t,r){let e=t.getConfig(),s=t.getAuthStrategy;if(!s)throw new Error("XML client requires access to auth strategy. Make sure you are using a compatible version of the QuickBase client.");let n=s(),o=r?.appToken??e.appToken,i={realm:()=>e.realm,doXml:async(d,c,f)=>{let R=`https://${e.realm}.quickbase.com/db/${encodeURIComponent(d)}`,A=o?ze(f,o):f,y=await n.getToken(d),P=n.getAuthorizationHeader(y),T={"Content-Type":"application/xml","QUICKBASE-ACTION":c};P.startsWith("QB-USER-TOKEN ")?A=Je(A,y):T.Authorization=P;let I=new AbortController,D=setTimeout(()=>I.abort(),e.timeout);try{let w=await e.fetchApi(R,{method:"POST",headers:T,body:A,signal:I.signal,credentials:"omit"}),N=await w.text();if(w.status===429){let L=w.headers.get("Retry-After");throw new Error(`Rate limited (429). Retry after: ${L??"unknown"} seconds`)}if(w.status>=500)throw new Error(`Server error: ${w.status} ${w.statusText}`);return N}catch(w){throw w instanceof Error&&w.name==="AbortError"?new Error(`Request timeout after ${e.timeout}ms`):w}finally{clearTimeout(D)}}},l={readOnly:r?.readOnly??e.readOnly??!1,schema:r?.schema??e.schema,fetchApi:r?.fetchApi??e.fetchApi};return new le(i,l)}function cr(t){let r=Ae(t),e=Te(r.debug),s={realm:r.realm,baseUrl:r.baseUrl,fetchApi:r.fetchApi,logger:e},n=pe(r.auth,s),o=ve(r.proactiveThrottle),i=xe({config:r,auth:n,throttle:o,logger:e});return{...Re(i.execute,r.autoPaginate),request:i.execute,getConfig:()=>r,getAuthStrategy:()=>n}}var Hr=cr;return br(zr);})();
11
11
  //# sourceMappingURL=quickbase.min.js.map