quickbase-js 2.3.0 → 2.4.1

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.
Files changed (62) hide show
  1. package/README.md +145 -1107
  2. package/dist/auth/ticket.d.ts.map +1 -1
  3. package/dist/auth/ticket.js +4 -3
  4. package/dist/auth/ticket.js.map +1 -1
  5. package/dist/client/request.d.ts +4 -0
  6. package/dist/client/request.d.ts.map +1 -1
  7. package/dist/client/request.js +15 -3
  8. package/dist/client/request.js.map +1 -1
  9. package/dist/generated/client.d.ts +2 -0
  10. package/dist/generated/client.d.ts.map +1 -1
  11. package/dist/generated/client.js +134 -113
  12. package/dist/generated/client.js.map +1 -1
  13. package/dist/generated/types.d.ts +2700 -2256
  14. package/dist/generated/types.d.ts.map +1 -1
  15. package/dist/generated/types.js +0 -2
  16. package/dist/generated/types.js.map +1 -1
  17. package/dist/quickbase.esm.js +3 -3
  18. package/dist/quickbase.esm.js.map +3 -3
  19. package/dist/quickbase.min.js +3 -3
  20. package/dist/quickbase.min.js.map +3 -3
  21. package/package.json +16 -13
  22. package/src/auth/index.ts +55 -0
  23. package/src/auth/sso-token.ts +143 -0
  24. package/src/auth/temp-token.ts +160 -0
  25. package/src/auth/ticket.ts +329 -0
  26. package/src/auth/token-cache.ts +97 -0
  27. package/src/auth/types.ts +50 -0
  28. package/src/auth/user-token.ts +38 -0
  29. package/src/cli/schema.ts +512 -0
  30. package/src/client/index.ts +36 -0
  31. package/src/client/pagination.ts +337 -0
  32. package/src/client/request.ts +544 -0
  33. package/src/client/retry.ts +169 -0
  34. package/src/client/throttle.ts +105 -0
  35. package/src/core/config.ts +160 -0
  36. package/src/core/dates.ts +63 -0
  37. package/src/core/errors.ts +349 -0
  38. package/src/core/index.ts +50 -0
  39. package/src/core/logger.ts +113 -0
  40. package/src/core/schema.ts +213 -0
  41. package/src/core/transform.ts +295 -0
  42. package/src/core/types.ts +337 -0
  43. package/src/generated/client.ts +1785 -0
  44. package/src/generated/operations.json +672 -0
  45. package/src/generated/types.ts +4884 -0
  46. package/src/index.ts +259 -0
  47. package/src/xml/codepages.ts +119 -0
  48. package/src/xml/dbvars.ts +75 -0
  49. package/src/xml/errors.ts +133 -0
  50. package/src/xml/fields.ts +121 -0
  51. package/src/xml/groups.ts +560 -0
  52. package/src/xml/html.ts +152 -0
  53. package/src/xml/index.ts +1196 -0
  54. package/src/xml/metadata.ts +111 -0
  55. package/src/xml/records.ts +301 -0
  56. package/src/xml/request.ts +238 -0
  57. package/src/xml/roles.ts +321 -0
  58. package/src/xml/schema.ts +436 -0
  59. package/src/xml/transform.ts +381 -0
  60. package/src/xml/types.ts +602 -0
  61. package/src/xml/users.ts +221 -0
  62. package/src/xml/webhooks.ts +260 -0
@@ -1,11 +1,11 @@
1
1
  /**
2
- * QuickBase JS SDK v2.3.0
2
+ * QuickBase JS SDK v2.4.1
3
3
  * https://github.com/DrewBradfordXYZ/quickbase-js#readme
4
4
  * @license MIT
5
5
  */
6
- var dr=Object.defineProperty;var ur=(t,r,e)=>r in t?dr(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e;var m=(t,r,e)=>ur(t,typeof r!="symbol"?r+"":r,e);var te=class extends Error{constructor(r){super(r),this.name="SchemaError"}};function Ge(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=Ee(r,s),o=n?` Did you mean '${n}'?`:"",i=s.length>0?` Available: ${s.join(", ")}`:"";throw new te(`Unknown table alias '${r}'.${o}${i}`)}function O(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=Ee(e,o),l=i?` Did you mean '${i}'?`:"",d=t.tableIdToAlias.get(r)||r;throw new te(`Unknown field alias '${e}' in table '${d}'.${l}`)}function U(t,r,e){return t?t.fieldIdToAlias.get(r)?.get(e):void 0}function j(t,r){if(t)return t.tableIdToAlias.get(r)}function Ee(t,r,e=3){let s=t.toLowerCase(),n,o=e+1;for(let i of r){let l=cr(s,i.toLowerCase());l<o&&(o=l,n=i)}return o<=e?n:void 0}function cr(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}}},$=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}}},D=class extends S{constructor(r,e){super(r,401,e),this.name="AuthenticationError"}},re=class extends S{constructor(r,e){super(r,403,e),this.name="AuthorizationError"}},se=class extends S{constructor(r,e){super(r,404,e),this.name="NotFoundError"}},ne=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}}},L=class extends S{constructor(r,e,s){super(e,r,s),this.name="ServerError"}},Q=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}}},V=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}}},K=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 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 ne(n,{description:o,rayId:e,errors:s?.errors});case 401:return new D(n,{rayId:e});case 403:return new re(n,{rayId:e});case 404:return new se(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 $(l,n)}default:return t.status>=500?new L(t.status,n,{description:o,rayId:e}):new S(n,t.status,{description:o,rayId:e})}}function de(t){return t instanceof $||t instanceof L||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 ue=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 ue(t)}function be(t){mr(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:Ge(t.schema),readOnly:t.readOnly??!1,appToken:t.appToken}}function mr(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(pr(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&&gr(t.rateLimit.retry),t.rateLimit?.proactiveThrottle&&hr(t.rateLimit.proactiveThrottle)}function pr(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 gr(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 hr(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 fr=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-]\d{2}:?\d{2})?)?$/;function De(t){return fr.test(t)}function oe(t,r){if(!r||t===null||t===void 0||typeof t!="object")return t;if(Array.isArray(t))return t.map(s=>oe(s,r));if(t instanceof Date)return t;let e={};for(let[s,n]of Object.entries(t))typeof n=="string"&&De(n)?e[s]=new Date(n):n instanceof Date?e[s]=n:typeof n=="object"&&n!==null?e[s]=oe(n,r):e[s]=n;return e}var H=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 X=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 z=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 X(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 D(`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 D(`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 J=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 X(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 D(`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 D("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 Z=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
+ var sr=Object.defineProperty;var nr=(t,r,e)=>r in t?sr(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e;var m=(t,r,e)=>nr(t,typeof r!="symbol"?r+"":r,e);var te=class extends Error{constructor(r){super(r),this.name="SchemaError"}};function ke(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=xe(r,s),o=n?` Did you mean '${n}'?`:"",i=s.length>0?` Available: ${s.join(", ")}`:"";throw new te(`Unknown table alias '${r}'.${o}${i}`)}function _(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=xe(e,o),l=i?` Did you mean '${i}'?`:"",d=t.tableIdToAlias.get(r)||r;throw new te(`Unknown field alias '${e}' in table '${d}'.${l}`)}function U(t,r,e){return t?t.fieldIdToAlias.get(r)?.get(e):void 0}function N(t,r){if(t)return t.tableIdToAlias.get(r)}function xe(t,r,e=3){let s=t.toLowerCase(),n,o=e+1;for(let i of r){let l=or(s,i.toLowerCase());l<o&&(o=l,n=i)}return o<=e?n:void 0}function or(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 w=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}}},$=class extends w{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}}},D=class extends w{constructor(r,e){super(r,401,e),this.name="AuthenticationError"}},re=class extends w{constructor(r,e){super(r,403,e),this.name="AuthorizationError"}},se=class extends w{constructor(r,e){super(r,404,e),this.name="NotFoundError"}},ne=class extends w{constructor(e,s){super(e,400,s);m(this,"errors");this.name="ValidationError",this.errors=s?.errors}toJSON(){return{...super.toJSON(),errors:this.errors}}},O=class extends w{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}}},X=class extends w{constructor(r,e,s){super(e,r,s),this.name="ServerError"}},j=class extends w{constructor(e,s,n){super(e,401,n);m(this,"code");this.name="QuickbaseTicketError",this.code=s}toJSON(){return{...super.toJSON(),code:this.code}}},Q=class extends w{constructor(e,s,n){super(e,403,n);m(this,"code");this.name="QuickbaseAppTokenError",this.code=s}toJSON(){return{...super.toJSON(),code:this.code}}},V=class extends w{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 pe(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 ne(n,{description:o,rayId:e,errors:s?.errors});case 401:return new D(n,{rayId:e});case 403:return new re(n,{rayId:e});case 404:return new se(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 $(l,n)}default:return t.status>=500?new X(t.status,n,{description:o,rayId:e}):new w(n,t.status,{description:o,rayId:e})}}function ge(t){return t instanceof $||t instanceof X||t instanceof O}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 he=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 ve(t){return new he(t)}function we(t){ir(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:ke(t.schema),readOnly:t.readOnly??!1,appToken:t.appToken}}function ir(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&&lr(t.rateLimit.retry),t.rateLimit?.proactiveThrottle&&dr(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 lr(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 dr(t){if(t.requestsPer10Seconds!==void 0&&(typeof t.requestsPer10Seconds!="number"||t.requestsPer10Seconds<=0))throw new Error("requestsPer10Seconds must be a positive number")}function Se(t){return`${t}.quickbase.com`}var ur=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-]\d{2}:?\d{2})?)?$/;function cr(t){return ur.test(t)}function le(t,r){if(!r||t===null||t===void 0||typeof t!="object")return t;if(Array.isArray(t))return t.map(s=>le(s,r));if(t instanceof Date)return t;let e={};for(let[s,n]of Object.entries(t))typeof n=="string"&&cr(n)?e[s]=new Date(n):n instanceof Date?e[s]=n:typeof n=="object"&&n!==null?e[s]=le(n,r):e[s]=n;return e}var K=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 H=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 z=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 H(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 D(`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 D(`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 J=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 H(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 D(`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 D("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 Z=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("No password to sign in with (the ticket expired, or sign-in failed); 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 Te(t,r){switch(t.type){case"user-token":return new H(t.userToken,r);case"temp-token":return new z(t.userToken,r,{appToken:t.appToken,tokenLifespanMs:t.tokenLifespanMs});case"sso":return new J(t.samlToken,r);case"ticket":return new Z(t.username,t.password,{hours:t.hours,onExpired:t.onExpired,persist:t.persist},r);default:throw new Error(`Unknown auth type: ${t.type}`)}}function Ae(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 Ie(t){return new Promise(r=>setTimeout(r,t))}function Fe(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=>O(r.schema,s,n))),"sortBy"in e&&Array.isArray(e.sortBy)&&(e.sortBy=e.sortBy.map(n=>({...n,fieldId:O(r.schema,s,n.fieldId)}))),"groupBy"in e&&Array.isArray(e.groupBy)&&(e.groupBy=e.groupBy.map(n=>({...n,fieldId:O(r.schema,s,n.fieldId)}))),"where"in e&&typeof e.where=="string"&&(e.where=br(e.where,r.schema,s)))),"data"in e&&Array.isArray(e.data)&&(e.data=e.data.map(n=>Rr(n,r.schema,s))),e}function Rr(t,r,e){let s={};for(let[n,o]of Object.entries(t)){let i=n;if(r&&e)try{let l=O(r,e,n);i=String(l)}catch{}s[i]=yr(o)}return s}function br(t,r,e){return t.replace(/\{['"]?([^.'"\}]+)['"]?\./g,(s,n)=>{try{return`{${O(r,e,n)}.`}catch{return s}})}function yr(t){return Tr(t)?t:{value:t}}function Tr(t){return t==null||typeof t!="object"||Array.isArray(t)?!1:"value"in t}function Ue(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=>Ar(s,r.schema,r.tableId))),e}function Ar(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 Me={"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},_e={"POST /records/query":!0,"POST /reports/":!0,"POST /formula/run":!0,"POST /audit":!0,"POST /users":!0,"POST /analytics/":!0};function Ir(t){let r=t.toUpperCase();return r==="POST"||r==="PUT"||r==="DELETE"||r==="PATCH"}function kr(t,r){let e=`${t} ${r}`;if(Me[e])return!0;for(let s=r.length-1;s>=0;s--)if(r[s]==="/"){let n=`${t} ${r.slice(0,s+1)}`;if(Me[n])return!0}return!1}function Oe(t){let r=`POST ${t}`;if(_e[r])return!0;for(let e=t.length-1;e>=0;e--)if(t[e]==="/"){let s=`POST ${t.slice(0,e+1)}`;if(_e[s])return!0}return!1}function Pr(t,r,e){if(t.readOnly){if(kr(r,e)){if(r==="POST"&&Oe(e))return;throw new _(r,e)}if(Ir(r)){if(r==="POST"&&Oe(e))return;throw new _(r,e)}}}function xr(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 qe(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 vr(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 Sr(t,r,e){let{config:s,auth:n,throttle:o,logger:i}=r,l=qe(s.baseUrl,t.path,t.query),d=ye(s.realm),c=await vr(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 wr(t,r,e,s){let{config:n,logger:o}=s;if(t.ok)return t;if(t.status===429){let i=Ae(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 $(i)}throw await fe(t,r)}async function We(t,r){let{config:e,auth:s,logger:n}=r,o=e.retry.maxAttempts;Pr(e,t.method,t.path);let i=xr(t,e),l=t;if(e.schema&&t.body&&typeof t.body=="object"){let f=Fe(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 Sr(l,r,d),A=qe(e.baseUrl,t.path,t.query);await wr(R,A,d,r);let y=await R.json();return e.schema&&i&&(y=Ue(y,{schema:e.schema,tableId:i})),oe(y,e.convertDates)}catch(R){if(c=R,!de(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 $?(A=R.retryAfter?R.retryAfter*1e3:me(f,e.retry),y="Rate limited (429)"):R instanceof M?(A=me(f,e.retry),y="Timeout"):R instanceof S&&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 Ie(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 ke(t){return{execute:r=>We(r,t)}}var ie=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))}},ae=class{async acquire(){}getWindowCount(){return 0}getRemaining(){return 1/0}reset(){}};function Pe(t){return t.enabled?new ie(t.requestsPer10Seconds):new ae}function Be(t){return t.totalRecords!==void 0&&t.skip!==void 0?"skip":t.nextPageToken!==void 0||t.nextToken!==void 0?"token":"none"}function Ne(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 Le(t){for(let r of Object.keys(t))if(Array.isArray(t[r]))return r;return"data"}function Xe(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(!Xe(c))return c;o=c,i=Be(c.metadata);let f=Le(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);Ne(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 q(t,r){return new pe(t,r)}function xe(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 q(()=>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 q(()=>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 q(()=>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 q(()=>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 q(()=>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 q(()=>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},W=class extends K{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 Q(t.errtext,t.errcode,{description:t.errdetail,action:t.action}):t.errcode===G.InvalidAppToken?new V(t.errtext,t.errcode,{description:t.errdetail,action:t.action}):new W(t.errcode,t.errtext,t.errdetail,t.action)}function je(t){return t instanceof W?t.code===G.Unauthorized||t.code===G.AccessDenied:!1}function Qe(t){return t instanceof W?t.code===G.NoSuchDatabase||t.code===G.NoSuchApp||t.code===G.NoSuchRecord||t.code===G.NoSuchField||t.code===G.NoSuchUser:!1}function Ve(t){return t instanceof W?t.code===G.InvalidTicket:!1}function g(t){return`<qdbapi>${t}</qdbapi>`}function Ke(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 He(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 ge(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 Cr(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 ze(t,r){let e={};for(let s of t){let n=r?j(r,s.dbid):void 0,o=n??s.dbid;e[o]=n?{...s,alias:n}:s}return e}function Gr(t,r){let e={};for(let s of t){let n=r?j(r,s.id):void 0,o=n??s.id;e[o]=n?{...s,alias:n}:s}return e}function Er(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 ve(t,r,e){return{...t,fields:Cr(t.fields,r,e)}}function Je(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?Er(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?j(r,o.dbid):void 0,l=i??o.dbid;n[l]=i?{...o,alias:i}:o}s.childTables=n}return{...t,table:s}}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,e){if(!r)return t;let s=U(r,e,t.fieldId);return s?{...t,fieldAlias:s}:t}function et(t,r){return{...t,databases:ze(t.databases,r)}}function tt(t,r){return{...t,databases:ze(t.databases,r)}}function rt(t,r){let e=r?j(r,t.appId):void 0;return{...t,appAlias:e,tables:Gr(t.tables,r)}}function st(t,r){if(!r)return t;let e=j(r,t.dbid);return e?{...t,alias:e}:t}function Se(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 Dr(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 Fr(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(Se);return{id:r,type:e,name:s,firstName:n,lastName:o,lastAccess:i,lastAccessAppLocal:l,roles:c}}async function nt(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 ot(t,r){let e=g(""),s=await t.doXml(r,"API_UserRoles",e),n=h(s);return p(n),{users:k(s,"user").map(Fr)}}async function it(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(Dr);return{userId:c,userName:R,roles:y}}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_AddUserToRole",o),l=h(i);p(l)}async function lt(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 dt(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 ut(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 Ur(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 $r(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 Mr(t){return{id:x(t,"id")}}async function ct(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:ut(d[0])}}async function mt(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 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_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:ut(c[0])}}async function gt(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 ht(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(Ur),T=k(d,"manager").map($r),E=k(d,"subgroup").map(Mr);return{id:c,name:f,description:R,users:y,managers:T,subgroups:E}}async function ft(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 Rt(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 bt(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 yt(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 Tt(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 At(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 It(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 kt(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 Pt(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,P=a(l,"isVerified"),T=P?v(P):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 vt(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 St(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 Ct(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 Gt(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 Et(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 Dt(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 Ft(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 _r(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 E=a(t,"default_value");E&&(r.defaultValue=E);let w=t.match(/<choices>([\s\S]*?)<\/choices>/);if(w&&w[1]){let le=k(w[1],"choice");r.choices=le.map(ee=>a(ee,"choice")||ee.replace(/<\/?choice>/g,""))}let B=a(t,"summaryReferenceFid");B&&(r.summaryReferenceFid=b(B));let N=a(t,"summaryTargetFid");N&&(r.summaryTargetFid=b(N));let Y=a(t,"summaryFunction");return Y&&(r.summaryFunction=Y),r}function Or(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 Ut(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 B=a(T,"cre_date");B&&(I.createdTime=B);let N=a(T,"mod_date");N&&(I.modifiedTime=N);let Y=a(T,"next_record_id");Y&&(I.nextRecordId=b(Y));let le=a(T,"next_field_id");le&&(I.nextFieldId=b(le));let ee=a(T,"next_query_id");ee&&(I.nextQueryId=b(ee));let we=a(T,"def_sort_fid");we&&(I.defaultSortFid=b(we));let Ce=a(T,"def_sort_order");Ce&&(I.defaultSortOrder=b(Ce)),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(Or)}let P=d.match(/<fields>([\s\S]*?)<\/fields>/);if(P&&P[0].length>20){let T=k(P[0],"field");c.fields=T.map(_r)}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 Mt(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 _t(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 Ot(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+=ge("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 qt(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 Wt(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 Bt(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(qt);return{recordId:b(a(o,"rid")),numFields:b(a(o,"num_fields")),updateId:a(o,"update_id")||void 0,fields:d}}async function Nt(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(qt);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=ge("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 Xt(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 jt(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 Qt(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 qr(t,r){let e=`<actionId>${u(t)}</actionId>`;return e+=Qt(r),r.clearTriggerFields&&(e=e.replace(/<tfidsWhich>TRUE<\/tfidsWhich>/,""),e=e.replace(/<tfids>\d+<\/tfids>/g,""),e+="<tfidsWhich>tfidsAny</tfidsWhich>"),e}async function Vt(t,r,e){let s=Qt(e),n=g(s),o=await t.doXml(r,"API_Webhooks_Create",n),i=h(o);p(i)}async function Kt(t,r,e,s){let n=qr(e,s),o=g(n),i=await t.doXml(r,"API_Webhooks_Edit",o),l=h(i);p(l)}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_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 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_Deactivate",n),i=h(o);return p(i),{numChanged:b(a(o,"numChanged"))}}async function Zt(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 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_FieldAddChoices",o),l=h(i);return p(l),{fieldId:e,fieldName:a(i,"fname")||"",numAdded:b(a(i,"numadded"))}}async function er(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 tr(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 rr(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 sr(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 nr(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 or(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 ir(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 ar(t){let r=g(""),e=await t.doXml("main","API_SignOut",r),s=h(e);p(s)}var Wr=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 lr(t){return Wr.has(t)}var he=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 F(this.schema,r)}resolveField(r,e){return O(this.schema,r,e)}checkWriteAllowed(r){if(this.readOnly&&lr(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 nt(this.caller,this.resolveTable(r))}async userRoles(r){return ot(this.caller,this.resolveTable(r))}async getUserRole(r,e,s){return it(this.caller,this.resolveTable(r),e,s)}async addUserToRole(r,e,s){return this.checkWriteAllowed("API_AddUserToRole"),at(this.caller,this.resolveTable(r),e,s)}async removeUserFromRole(r,e,s){return this.checkWriteAllowed("API_RemoveUserFromRole"),lt(this.caller,this.resolveTable(r),e,s)}async changeUserRole(r,e,s,n){return this.checkWriteAllowed("API_ChangeUserRole"),dt(this.caller,this.resolveTable(r),e,s,n)}async createGroup(r,e,s){return this.checkWriteAllowed("API_CreateGroup"),ct(this.caller,r,e,s)}async deleteGroup(r){return this.checkWriteAllowed("API_DeleteGroup"),mt(this.caller,r)}async copyGroup(r,e,s,n){return this.checkWriteAllowed("API_CopyGroup"),pt(this.caller,r,e,s,n)}async changeGroupInfo(r,e,s,n){return this.checkWriteAllowed("API_ChangeGroupInfo"),gt(this.caller,r,e,s,n)}async getUsersInGroup(r,e){return ht(this.caller,r,e)}async addUserToGroup(r,e,s){return this.checkWriteAllowed("API_AddUserToGroup"),ft(this.caller,r,e,s)}async removeUserFromGroup(r,e){return this.checkWriteAllowed("API_RemoveUserFromGroup"),Rt(this.caller,r,e)}async getGroupRole(r,e){return bt(this.caller,this.resolveTable(r),e)}async addGroupToRole(r,e,s){return this.checkWriteAllowed("API_AddGroupToRole"),yt(this.caller,this.resolveTable(r),e,s)}async removeGroupFromRole(r,e,s,n){return this.checkWriteAllowed("API_RemoveGroupFromRole"),Tt(this.caller,this.resolveTable(r),e,s,n)}async grantedGroups(r,e){return At(this.caller,r,e)}async grantedDBsForGroup(r){let e=await It(this.caller,r);return tt(e,this.schema)}async addSubgroup(r,e){return this.checkWriteAllowed("API_AddSubgroup"),kt(this.caller,r,e)}async removeSubgroup(r,e){return this.checkWriteAllowed("API_RemoveSubgroup"),Pt(this.caller,r,e)}async getUserInfo(r){return xt(this.caller,r)}async provisionUser(r,e,s,n,o){return this.checkWriteAllowed("API_ProvisionUser"),vt(this.caller,this.resolveTable(r),e,s,n,o)}async sendInvitation(r,e,s){return this.checkWriteAllowed("API_SendInvitation"),St(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"),Ct(this.caller,this.resolveTable(r),e,s)}async grantedDBs(r){let e=await Gt(this.caller,r);return et(e,this.schema)}async findDBByName(r,e){let s=await Et(this.caller,r,e);return st(s,this.schema)}async getDBInfo(r){return Dt(this.caller,this.resolveTable(r))}async getNumRecords(r){return Ft(this.caller,this.resolveTable(r))}async getSchema(r){let e=this.resolveTable(r),s=await Ut(this.caller,e);return Je(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"),Mt(this.caller,this.resolveTable(r),e,s)}async getDBPage(r,e){return _t(this.caller,this.resolveTable(r),e)}async addReplaceDBPage(r,e,s,n,o){return this.checkWriteAllowed("API_AddReplaceDBPage"),Ot(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 Yt(this.caller,n,o,s);return Ze(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 er(this.caller,n,o,s);return Ye(i,this.schema,n)}async setKeyField(r,e){this.checkWriteAllowed("API_SetKeyField");let s=this.resolveTable(r),n=this.resolveField(s,e);return tr(this.caller,s,n)}async doQueryCount(r,e){return Wt(this.caller,this.resolveTable(r),e)}async getRecordInfo(r,e){let s=this.resolveTable(r),n=await Bt(this.caller,s,e);return ve(n,this.schema,s)}async getRecordInfoByKey(r,e){let s=this.resolveTable(r),n=await Nt(this.caller,s,e);return ve(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"),Xt(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 jt(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 or({realm:this.caller.realm,doXml:async()=>l},e);return rt(d,this.schema)}async getAncestorInfo(r){return ir(this.caller,this.resolveTable(r))}async webhooksCreate(r,e){return this.checkWriteAllowed("API_Webhooks_Create"),Vt(this.caller,this.resolveTable(r),e)}async webhooksEdit(r,e,s){return this.checkWriteAllowed("API_Webhooks_Edit"),Kt(this.caller,this.resolveTable(r),e,s)}async webhooksDelete(r,e){return this.checkWriteAllowed("API_Webhooks_Delete"),Ht(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"),Jt(this.caller,this.resolveTable(r),e)}async webhooksCopy(r,e){return this.checkWriteAllowed("API_Webhooks_Copy"),Zt(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 rr(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 sr(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 nr(this.caller,s,n)}async signOut(){return ar(this.caller)}};function Br(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?Ke(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=He(A,y):T.Authorization=P;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"}),B=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 B}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,fetchApi:r?.fetchApi??e.fetchApi};return new he(i,l)}function Nr(t){let r=be(t),e=Re(r.debug),s={realm:r.realm,baseUrl:r.baseUrl,fetchApi:r.fetchApi,logger:e},n=Te(r.auth,s),o=Pe(r.proactiveThrottle),i=ke({config:r,auth:n,throttle:o,logger:e});return{...xe(i.execute,r.autoPaginate),request:i.execute,getConfig:()=>r,getAuthStrategy:()=>n}}var bo=Nr;export{D as AuthenticationError,re as AuthorizationError,ae as NoOpThrottle,se as NotFoundError,V as QuickbaseAppTokenError,S as QuickbaseError,Q as QuickbaseTicketError,K as QuickbaseXmlError,$ as RateLimitError,_ as ReadOnlyError,te as SchemaError,L as ServerError,ie as SlidingWindowThrottle,J as SsoTokenStrategy,z as TempTokenStrategy,Z as TicketStrategy,M as TimeoutError,H as UserTokenStrategy,ne as ValidationError,he as XmlClient,W as XmlError,G as XmlErrorCode,p as checkError,xe as createApiMethods,Te as createAuthStrategy,Nr as createClient,Br as createXmlClient,bo as default,Ve as isXmlInvalidTicket,Qe as isXmlNotFound,je as isXmlUnauthorized,lr as isXmlWriteAction};
10
+ </qdbapi>`;this.password=null,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.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 fe(t,r){switch(t.type){case"user-token":return new K(t.userToken,r);case"temp-token":return new z(t.userToken,r,{appToken:t.appToken,tokenLifespanMs:t.tokenLifespanMs});case"sso":return new J(t.samlToken,r);case"ticket":return new Z(t.username,t.password,{hours:t.hours,onExpired:t.onExpired,persist:t.persist},r);default:throw new Error(`Unknown auth type: ${t.type}`)}}function Ce(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 Ge(t){return new Promise(r=>setTimeout(r,t))}function Ee(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=>_(r.schema,s,n))),"sortBy"in e&&Array.isArray(e.sortBy)&&(e.sortBy=e.sortBy.map(n=>({...n,fieldId:_(r.schema,s,n.fieldId)}))),"groupBy"in e&&Array.isArray(e.groupBy)&&(e.groupBy=e.groupBy.map(n=>({...n,fieldId:_(r.schema,s,n.fieldId)}))),"where"in e&&typeof e.where=="string"&&(e.where=pr(e.where,r.schema,s)))),"data"in e&&Array.isArray(e.data)&&(e.data=e.data.map(n=>mr(n,r.schema,s))),e}function mr(t,r,e){let s={};for(let[n,o]of Object.entries(t)){let i=n;if(r&&e)try{let l=_(r,e,n);i=String(l)}catch{}s[i]=gr(o)}return s}function pr(t,r,e){return t.replace(/\{['"]?([^.'"\}]+)['"]?\./g,(s,n)=>{try{return`{${_(r,e,n)}.`}catch{return s}})}function gr(t){return hr(t)?t:{value:t}}function hr(t){return t==null||typeof t!="object"||Array.isArray(t)?!1:"value"in t}function De(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=>fr(s,r.schema,r.tableId))),e}function fr(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=de(o);s[i]=d}return s}function de(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 de(r.value)}return Array.isArray(t)?t.map(de):t}function Fe(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 Ue={"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},$e={"POST /records/query":!0,"POST /reports/":!0,"POST /formula/run":!0,"POST /audit":!0,"POST /users":!0,"POST /analytics/":!0};function Rr(t){let r=t.toUpperCase();return r==="POST"||r==="PUT"||r==="DELETE"||r==="PATCH"}function br(t,r){let e=`${t} ${r}`;if(Ue[e])return!0;for(let s=r.length-1;s>=0;s--)if(r[s]==="/"){let n=`${t} ${r.slice(0,s+1)}`;if(Ue[n])return!0}return!1}function Me(t){let r=`POST ${t}`;if($e[r])return!0;for(let e=t.length-1;e>=0;e--)if(t[e]==="/"){let s=`POST ${t.slice(0,e+1)}`;if($e[s])return!0}return!1}function yr(t,r,e){if(t.readOnly){if(br(r,e)){if(r==="POST"&&Me(e))return;throw new M(r,e)}if(Rr(r)){if(r==="POST"&&Me(e))return;throw new M(r,e)}}}function Tr(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=Fe(t.body,r?.schema);if(n)return n}}function _e(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 Ar(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 Pr(t,r,e){let{config:s,auth:n,throttle:o,logger:i}=r,l=_e(s.baseUrl,t.path,t.query),d=Se(s.realm),c=await Ar(n,d,e.dbid,t.headers);await o.acquire();let f={method:t.method,headers:c,credentials:"omit"};t.body!==void 0&&(t.bodyType?(c["Content-Type"]=t.bodyType,f.body=t.body):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 k=await s.fetchApi(l,f),T=Date.now()-y;return i.timing(t.method,t.path,T),k}catch(k){throw k instanceof Error&&k.name==="AbortError"?new O(s.timeout):k}finally{clearTimeout(A)}}async function Ir(t,r,e,s){let{config:n,logger:o}=s;if(t.ok)return t;if(t.status===429){let i=Ce(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 $(i)}throw await pe(t,r)}async function kr(t,r){let{config:e,auth:s,logger:n}=r,o=e.retry.maxAttempts;yr(e,t.method,t.path);let i=Tr(t,e),l=t;if(t.body&&typeof t.body=="object"&&!Array.isArray(t.body)){let f=Ee(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 Pr(l,r,d),A=_e(e.baseUrl,t.path,t.query);if(await Ir(R,A,d,r),t.responseType==="text")return await R.text();let y=await R.json();return e.schema&&i&&(y=De(y,{schema:e.schema,tableId:i})),le(y,e.convertDates)}catch(R){if(c=R,!ge(R)||f>=o)throw R;if(R instanceof w&&R.statusCode===401){if(!await s.handleAuthError(i))throw R;n.debug("Token refreshed, retrying request");continue}let A,y;R instanceof $?(A=R.retryAfter?R.retryAfter*1e3:ue(f,e.retry),y="Rate limited (429)"):R instanceof O?(A=ue(f,e.retry),y="Timeout"):R instanceof w&&R.statusCode>=500?(A=ue(f,e.retry),y=`Server error (${R.statusCode})`):(A=ue(f,e.retry),y="Retryable error"),n.retry(f,o,A,y),await Ge(A)}}throw c||new Error("Request failed")}function ue(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 Oe(t){return{execute:r=>kr(r,t)}}var oe=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))}},ie=class{async acquire(){}getWindowCount(){return 0}getRemaining(){return 1/0}reset(){}};function Re(t){return t.enabled?new oe(t.requestsPer10Seconds):new ie}function xr(t){return t.totalRecords!==void 0&&t.skip!==void 0?"skip":t.nextPageToken!==void 0||t.nextToken!==void 0?"token":"none"}function vr(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 wr(t){for(let r of Object.keys(t))if(Array.isArray(t[r]))return r;return"data"}function Sr(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 be=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(!Sr(c))return c;o=c,i=xr(c.metadata);let f=wr(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);vr(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 k=y[f]||[];if(k.length===0)break;if(e!==void 0){let T=e-n.length;n=n.concat(k.slice(0,T))}else n=n.concat(k);if(i==="skip")l+=k.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 L(t,r){return new be(t,r)}function ye(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 L(()=>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){return L(()=>t({method:"POST",path:`/reports/${e.reportId}/run`,query:{tableId:e.tableId,skip:e.skip,top:e.top}}),{paginatedExecutor:o=>t({method:"POST",path:`/reports/${e.reportId}/run`,query:{tableId:e.tableId,skip:e.skip,top:e.top,...o}}),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 L(()=>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 L(()=>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}`,responseType:"text"})},deleteFile(e){return t({method:"DELETE",path:`/files/${e.tableId}/${e.recordId}/${e.fieldId}/${e.versionNumber}`})},getUsers(e,s){return L(()=>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){let[n,o]=s===void 0?[{},e]:[e,s];return t({method:"PUT",path:"/users/deny",query:{accountId:n.accountId},body:o})},denyUsersAndGroups(e,s){return t({method:"PUT",path:`/users/deny/${e.shouldDeleteFromGroups}`,query:{accountId:e.accountId},body:s})},undenyUsers(e,s){let[n,o]=s===void 0?[{},e]:[e,s];return t({method:"PUT",path:"/users/undeny",query:{accountId:n.accountId},body:o})},getUserApps(e){return t({method:"GET",path:`/users/${e.userId}/apps`,query:{accountId:e.accountId}})},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 L(()=>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})},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}})},exportSolution(e){return t({method:"GET",path:`/solutions/${e.solutionId}`,responseType:"text"})},updateSolution(e,s){return t({method:"PUT",path:`/solutions/${e.solutionId}`,body:s,bodyType:"application/x-yaml"})},createSolution(e,s){let[n,o]=s===void 0?[{},e]:[e,s];return t({method:"POST",path:"/solutions",query:{alias:n.alias},body:o,bodyType:"application/x-yaml"})},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:{alias:e.alias,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,bodyType:"application/x-yaml"})},changesetSolutionFromRecord(e){return t({method:"GET",path:`/solutions/${e.solutionId}/changeset/fromrecord`,query:{tableId:e.tableId,fieldId:e.fieldId,recordId:e.recordId}})},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},q=class extends V{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 j(t.errtext,t.errcode,{description:t.errdetail,action:t.action}):t.errcode===G.InvalidAppToken?new Q(t.errtext,t.errcode,{description:t.errdetail,action:t.action}):new q(t.errcode,t.errtext,t.errdetail,t.action)}function qe(t){return t instanceof q?t.code===G.Unauthorized||t.code===G.AccessDenied:!1}function We(t){return t instanceof q?t.code===G.NoSuchDatabase||t.code===G.NoSuchApp||t.code===G.NoSuchRecord||t.code===G.NoSuchField||t.code===G.NoSuchUser:!1}function Be(t){return t instanceof q?t.code===G.InvalidTicket:!1}function g(t){return`<qdbapi>${t}</qdbapi>`}function Le(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 Ne(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 I(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 ce(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 Cr(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 Xe(t,r){let e={};for(let s of t){let n=r?N(r,s.dbid):void 0,o=n??s.dbid;e[o]=n?{...s,alias:n}:s}return e}function Gr(t,r){let e={};for(let s of t){let n=r?N(r,s.id):void 0,o=n??s.id;e[o]=n?{...s,alias:n}:s}return e}function Er(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 Te(t,r,e){return{...t,fields:Cr(t.fields,r,e)}}function je(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?Er(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?N(r,o.dbid):void 0,l=i??o.dbid;n[l]=i?{...o,alias:i}:o}s.childTables=n}return{...t,table:s}}function Qe(t,r,e){if(!r)return t;let s=U(r,e,t.fieldId);return s?{...t,fieldAlias:s}:t}function Ve(t,r,e){if(!r)return t;let s=U(r,e,t.fieldId);return s?{...t,fieldAlias:s}:t}function Ke(t,r){return{...t,databases:Xe(t.databases,r)}}function He(t,r){return{...t,databases:Xe(t.databases,r)}}function ze(t,r){let e=r?N(r,t.appId):void 0;return{...t,appAlias:e,tables:Gr(t.tables,r)}}function Je(t,r){if(!r)return t;let e=N(r,t.dbid);return e?{...t,alias:e}:t}function Ae(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 Dr(t){let r=Ae(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 Fr(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=I(t,"role").map(Ae);return{id:r,type:e,name:s,firstName:n,lastName:o,lastAccess:i,lastAccessAppLocal:l,roles:c}}async function Ze(t,r){let e=g(""),s=await t.doXml(r,"API_GetRoleInfo",e),n=h(s);return p(n),{roles:I(s,"role").map(Ae)}}async function Ye(t,r){let e=g(""),s=await t.doXml(r,"API_UserRoles",e),n=h(s);return p(n),{users:I(s,"user").map(Fr)}}async function et(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=I(f,"role").map(Dr);return{userId:c,userName:R,roles:y}}async function tt(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 rt(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 st(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 nt(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 Ur(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 $r(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 Mr(t){return{id:x(t,"id")}}async function ot(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:nt(d[0])}}async function it(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 at(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:nt(c[0])}}async function lt(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 dt(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=I(d,"user").map(Ur),T=I(d,"manager").map($r),E=I(d,"subgroup").map(Mr);return{id:c,name:f,description:R,users:y,managers:T,subgroups:E}}async function ut(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 ct(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 mt(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:I(o,"role").map(c=>({id:b(x(c,"id")),name:a(c,"name")}))}}async function pt(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 gt(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 ht(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:I(o,"group").map(c=>({id:x(c,"id"),name:a(c,"name")}))}}async function ft(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:I(n,"dbinfo").map(d=>({dbid:a(d,"dbid"),name:a(d,"dbname")}))}}async function Rt(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 bt(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 yt(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,k=a(l,"isVerified"),T=k?v(k):void 0,P=a(l,"externalAuth"),E=P?v(P):void 0;return{id:d,firstName:c,lastName:f,login:R,email:A,screenName:y,isVerified:T,externalAuth:E}}async function Tt(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 At(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 Pt(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 It(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 kt(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:I(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 xt(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 vt(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 wt(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 _r(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 k=a(t,"does_total");k&&(r.doesTotal=v(k));let T=a(t,"does_average");T&&(r.doesAverage=v(T));let P=a(t,"default_kind");P&&(r.defaultKind=P);let E=a(t,"default_value");E&&(r.defaultValue=E);let S=t.match(/<choices>([\s\S]*?)<\/choices>/);if(S&&S[1]){let ae=I(S[1],"choice");r.choices=ae.map(ee=>a(ee,"choice")||ee.replace(/<\/?choice>/g,""))}let W=a(t,"summaryReferenceFid");W&&(r.summaryReferenceFid=b(W));let B=a(t,"summaryTargetFid");B&&(r.summaryTargetFid=b(B));let Y=a(t,"summaryFunction");return Y&&(r.summaryFunction=Y),r}function Or(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 St(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],P={},E=a(T,"app_id");E&&(P.appId=E);let S=a(T,"table_id");S&&(P.tableId=S);let W=a(T,"cre_date");W&&(P.createdTime=W);let B=a(T,"mod_date");B&&(P.modifiedTime=B);let Y=a(T,"next_record_id");Y&&(P.nextRecordId=b(Y));let ae=a(T,"next_field_id");ae&&(P.nextFieldId=b(ae));let ee=a(T,"next_query_id");ee&&(P.nextQueryId=b(ee));let Pe=a(T,"def_sort_fid");Pe&&(P.defaultSortFid=b(Pe));let Ie=a(T,"def_sort_order");Ie&&(P.defaultSortOrder=b(Ie)),c.original=P}let R=d.match(/<variables>([\s\S]*?)<\/variables>/);if(R){let T=I(R[0],"var");c.variables=T.map(P=>({name:x(P,"name"),value:a(P,"var")||""}))}let A=d.match(/<chdbids>([\s\S]*?)<\/chdbids>/);if(A){let T=I(A[0],"chdbid");c.childTables=T.map(P=>({name:x(P,"name"),dbid:a(P,"chdbid")||""}))}let y=d.match(/<queries>([\s\S]*?)<\/queries>/);if(y){let T=I(y[0],"query");c.queries=T.map(Or)}let k=d.match(/<fields>([\s\S]*?)<\/fields>/);if(k&&k[0].length>20){let T=I(k[0],"field");c.fields=T.map(_r)}return{table:c,timeZone:o,dateFormat:i}}async function Ct(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 Gt(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 Et(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 Dt(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+=ce("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 Ft(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 Ut(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 $t(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=I(o,"field").map(Ft);return{recordId:b(a(o,"rid")),numFields:b(a(o,"num_fields")),updateId:a(o,"update_id")||void 0,fields:d}}async function Mt(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=I(o,"field").map(Ft);return{recordId:b(a(o,"rid")),numFields:b(a(o,"num_fields")),updateId:a(o,"update_id")||void 0,fields:d}}async function _t(t,r,e){let s=ce("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=I(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 Ot(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=I(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=`<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 Wt(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 qr(t,r){let e=`<actionId>${u(t)}</actionId>`;return e+=Wt(r),r.clearTriggerFields&&(e=e.replace(/<tfidsWhich>TRUE<\/tfidsWhich>/,""),e=e.replace(/<tfids>\d+<\/tfids>/g,""),e+="<tfidsWhich>tfidsAny</tfidsWhich>"),e}async function Bt(t,r,e){let s=Wt(e),n=g(s),o=await t.doXml(r,"API_Webhooks_Create",n),i=h(o);p(i)}async function Lt(t,r,e,s){let n=qr(e,s),o=g(n),i=await t.doXml(r,"API_Webhooks_Edit",o),l=h(i);p(l)}async function Nt(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 Xt(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 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_Deactivate",n),i=h(o);return p(i),{numChanged:b(a(o,"numChanged"))}}async function Qt(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 Vt(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 Kt(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 Ht(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 zt(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 Jt(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 Zt(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 Yt(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=I(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 er(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 tr(t){let r=g(""),e=await t.doXml("main","API_SignOut",r),s=h(e);p(s)}var Wr=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 rr(t){return Wr.has(t)}var me=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 F(this.schema,r)}resolveField(r,e){return _(this.schema,r,e)}checkWriteAllowed(r){if(this.readOnly&&rr(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 Ze(this.caller,this.resolveTable(r))}async userRoles(r){return Ye(this.caller,this.resolveTable(r))}async getUserRole(r,e,s){return et(this.caller,this.resolveTable(r),e,s)}async addUserToRole(r,e,s){return this.checkWriteAllowed("API_AddUserToRole"),tt(this.caller,this.resolveTable(r),e,s)}async removeUserFromRole(r,e,s){return this.checkWriteAllowed("API_RemoveUserFromRole"),rt(this.caller,this.resolveTable(r),e,s)}async changeUserRole(r,e,s,n){return this.checkWriteAllowed("API_ChangeUserRole"),st(this.caller,this.resolveTable(r),e,s,n)}async createGroup(r,e,s){return this.checkWriteAllowed("API_CreateGroup"),ot(this.caller,r,e,s)}async deleteGroup(r){return this.checkWriteAllowed("API_DeleteGroup"),it(this.caller,r)}async copyGroup(r,e,s,n){return this.checkWriteAllowed("API_CopyGroup"),at(this.caller,r,e,s,n)}async changeGroupInfo(r,e,s,n){return this.checkWriteAllowed("API_ChangeGroupInfo"),lt(this.caller,r,e,s,n)}async getUsersInGroup(r,e){return dt(this.caller,r,e)}async addUserToGroup(r,e,s){return this.checkWriteAllowed("API_AddUserToGroup"),ut(this.caller,r,e,s)}async removeUserFromGroup(r,e){return this.checkWriteAllowed("API_RemoveUserFromGroup"),ct(this.caller,r,e)}async getGroupRole(r,e){return mt(this.caller,this.resolveTable(r),e)}async addGroupToRole(r,e,s){return this.checkWriteAllowed("API_AddGroupToRole"),pt(this.caller,this.resolveTable(r),e,s)}async removeGroupFromRole(r,e,s,n){return this.checkWriteAllowed("API_RemoveGroupFromRole"),gt(this.caller,this.resolveTable(r),e,s,n)}async grantedGroups(r,e){return ht(this.caller,r,e)}async grantedDBsForGroup(r){let e=await ft(this.caller,r);return He(e,this.schema)}async addSubgroup(r,e){return this.checkWriteAllowed("API_AddSubgroup"),Rt(this.caller,r,e)}async removeSubgroup(r,e){return this.checkWriteAllowed("API_RemoveSubgroup"),bt(this.caller,r,e)}async getUserInfo(r){return yt(this.caller,r)}async provisionUser(r,e,s,n,o){return this.checkWriteAllowed("API_ProvisionUser"),Tt(this.caller,this.resolveTable(r),e,s,n,o)}async sendInvitation(r,e,s){return this.checkWriteAllowed("API_SendInvitation"),At(this.caller,this.resolveTable(r),e,s)}async changeManager(r,e){return this.checkWriteAllowed("API_ChangeManager"),Pt(this.caller,this.resolveTable(r),e)}async changeRecordOwner(r,e,s){return this.checkWriteAllowed("API_ChangeRecordOwner"),It(this.caller,this.resolveTable(r),e,s)}async grantedDBs(r){let e=await kt(this.caller,r);return Ke(e,this.schema)}async findDBByName(r,e){let s=await xt(this.caller,r,e);return Je(s,this.schema)}async getDBInfo(r){return vt(this.caller,this.resolveTable(r))}async getNumRecords(r){return wt(this.caller,this.resolveTable(r))}async getSchema(r){let e=this.resolveTable(r),s=await St(this.caller,e);return je(s,this.schema,e)}async getDBVar(r,e){return Ct(this.caller,this.resolveTable(r),e)}async setDBVar(r,e,s){return this.checkWriteAllowed("API_SetDBVar"),Gt(this.caller,this.resolveTable(r),e,s)}async getDBPage(r,e){return Et(this.caller,this.resolveTable(r),e)}async addReplaceDBPage(r,e,s,n,o){return this.checkWriteAllowed("API_AddReplaceDBPage"),Dt(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 Vt(this.caller,n,o,s);return Qe(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 Kt(this.caller,n,o,s);return Ve(i,this.schema,n)}async setKeyField(r,e){this.checkWriteAllowed("API_SetKeyField");let s=this.resolveTable(r),n=this.resolveField(s,e);return Ht(this.caller,s,n)}async doQueryCount(r,e){return Ut(this.caller,this.resolveTable(r),e)}async getRecordInfo(r,e){let s=this.resolveTable(r),n=await $t(this.caller,s,e);return Te(n,this.schema,s)}async getRecordInfoByKey(r,e){let s=this.resolveTable(r),n=await Mt(this.caller,s,e);return Te(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 _t(this.caller,s,n)}async runImport(r,e){return this.checkWriteAllowed("API_RunImport"),Ot(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 qt(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 Yt({realm:this.caller.realm,doXml:async()=>l},e);return ze(d,this.schema)}async getAncestorInfo(r){return er(this.caller,this.resolveTable(r))}async webhooksCreate(r,e){return this.checkWriteAllowed("API_Webhooks_Create"),Bt(this.caller,this.resolveTable(r),e)}async webhooksEdit(r,e,s){return this.checkWriteAllowed("API_Webhooks_Edit"),Lt(this.caller,this.resolveTable(r),e,s)}async webhooksDelete(r,e){return this.checkWriteAllowed("API_Webhooks_Delete"),Nt(this.caller,this.resolveTable(r),e)}async webhooksActivate(r,e){return this.checkWriteAllowed("API_Webhooks_Activate"),Xt(this.caller,this.resolveTable(r),e)}async webhooksDeactivate(r,e){return this.checkWriteAllowed("API_Webhooks_Deactivate"),jt(this.caller,this.resolveTable(r),e)}async webhooksCopy(r,e){return this.checkWriteAllowed("API_Webhooks_Copy"),Qt(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 zt(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 Jt(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 Zt(this.caller,s,n)}async signOut(){return tr(this.caller)}};function Br(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?Le(f,o):f,y=await n.getToken(d),k=n.getAuthorizationHeader(y),T={"Content-Type":"application/xml","QUICKBASE-ACTION":c};k.startsWith("QB-USER-TOKEN ")?A=Ne(A,y):T.Authorization=k;let P=new AbortController,E=setTimeout(()=>P.abort(),e.timeout);try{let S=await e.fetchApi(R,{method:"POST",headers:T,body:A,signal:P.signal,credentials:"omit"}),W=await S.text();if(S.status===429){let B=S.headers.get("Retry-After");throw new Error(`Rate limited (429). Retry after: ${B??"unknown"} seconds`)}if(S.status>=500)throw new Error(`Server error: ${S.status} ${S.statusText}`);return W}catch(S){throw S instanceof Error&&S.name==="AbortError"?new Error(`Request timeout after ${e.timeout}ms`):S}finally{clearTimeout(E)}}},l={readOnly:r?.readOnly??e.readOnly??!1,schema:r?.schema??e.schema,fetchApi:r?.fetchApi??e.fetchApi};return new me(i,l)}function Lr(t){let r=we(t),e=ve(r.debug),s={realm:r.realm,baseUrl:r.baseUrl,fetchApi:r.fetchApi,logger:e},n=fe(r.auth,s),o=Re(r.proactiveThrottle),i=Oe({config:r,auth:n,throttle:o,logger:e});return{...ye(i.execute,r.autoPaginate),request:i.execute,getConfig:()=>r,getAuthStrategy:()=>n}}var so=Lr;export{D as AuthenticationError,re as AuthorizationError,ie as NoOpThrottle,se as NotFoundError,Q as QuickbaseAppTokenError,w as QuickbaseError,j as QuickbaseTicketError,V as QuickbaseXmlError,$ as RateLimitError,M as ReadOnlyError,te as SchemaError,X as ServerError,oe as SlidingWindowThrottle,J as SsoTokenStrategy,z as TempTokenStrategy,Z as TicketStrategy,O as TimeoutError,K as UserTokenStrategy,ne as ValidationError,me as XmlClient,q as XmlError,G as XmlErrorCode,p as checkError,ye as createApiMethods,fe as createAuthStrategy,Lr as createClient,Br as createXmlClient,so as default,Be as isXmlInvalidTicket,We as isXmlNotFound,qe as isXmlUnauthorized,rr as isXmlWriteAction};
11
11
  //# sourceMappingURL=quickbase.esm.js.map