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