@allthings/sdk 9.0.2 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/lib.cjs.js +3 -1
- package/dist/lib.esm.js +2 -2
- package/dist/lib.umd.min.js +1 -1
- package/dist/src/index.d.ts +1 -0
- package/package.json +4 -4
package/dist/cli.js
CHANGED
package/dist/lib.cjs.js
CHANGED
|
@@ -11,7 +11,7 @@ function createTokenStore(initialToken) {
|
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
const version = "9.0
|
|
14
|
+
const version = "9.1.0";
|
|
15
15
|
|
|
16
16
|
const REST_API_URL = 'https://api.allthings.me';
|
|
17
17
|
const OAUTH_URL = 'https://accounts.allthings.me';
|
|
@@ -1347,5 +1347,7 @@ exports.EnumLookupUserType = void 0;
|
|
|
1347
1347
|
EnumLookupUserType["tenant"] = "tenant";
|
|
1348
1348
|
})(exports.EnumLookupUserType || (exports.EnumLookupUserType = {}));
|
|
1349
1349
|
|
|
1350
|
+
exports.buildQueryString = buildQueryString;
|
|
1350
1351
|
exports.createTokenStore = createTokenStore;
|
|
1352
|
+
exports.parseQueryString = parseQueryString;
|
|
1351
1353
|
exports.restClient = restClient;
|
package/dist/lib.esm.js
CHANGED
|
@@ -9,7 +9,7 @@ function createTokenStore(initialToken) {
|
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
const version = "9.0
|
|
12
|
+
const version = "9.1.0";
|
|
13
13
|
|
|
14
14
|
const REST_API_URL = 'https://api.allthings.me';
|
|
15
15
|
const OAUTH_URL = 'https://accounts.allthings.me';
|
|
@@ -1345,4 +1345,4 @@ var EnumLookupUserType;
|
|
|
1345
1345
|
EnumLookupUserType["tenant"] = "tenant";
|
|
1346
1346
|
})(EnumLookupUserType || (EnumLookupUserType = {}));
|
|
1347
1347
|
|
|
1348
|
-
export { EnumCommunicationMethodType, EnumCommunicationPreferenceChannel, EnumCountryCode, EnumInputChannel, EnumLocale, EnumLookupUserType, EnumResource, EnumServiceProviderType, EnumTimezone, EnumUnitObjectType, EnumUnitType, EnumUserPermissionObjectType, EnumUserPermissionRole, EnumUserRelationType, EnumUtilisationPeriodType, createTokenStore, restClient };
|
|
1348
|
+
export { EnumCommunicationMethodType, EnumCommunicationPreferenceChannel, EnumCountryCode, EnumInputChannel, EnumLocale, EnumLookupUserType, EnumResource, EnumServiceProviderType, EnumTimezone, EnumUnitObjectType, EnumUnitType, EnumUserPermissionObjectType, EnumUserPermissionRole, EnumUserRelationType, EnumUtilisationPeriodType, buildQueryString, createTokenStore, parseQueryString, restClient };
|
package/dist/lib.umd.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).allthings={})}(this,function(exports){"use strict";function createTokenStore(e){const t=new Map(Object.entries(e||{}));return{get:e=>t.get(e),reset:()=>t.clear(),set:e=>Object.entries(e).forEach(([e,n])=>t.set(e,n))}}const version$1="9.0.2",REST_API_URL="https://api.allthings.me",OAUTH_URL="https://accounts.allthings.me",QUEUE_CONCURRENCY=void 0,QUEUE_DELAY=0,QUEUE_RESERVOIR=30,QUEUE_RESERVOIR_REFILL_INTERVAL=166,REQUEST_BACK_OFF_INTERVAL=200,REQUEST_MAX_RETRIES=50,DEFAULT_API_WRAPPER_OPTIONS={apiUrl:process.env.ALLTHINGS_REST_API_URL||REST_API_URL,clientId:process.env.ALLTHINGS_OAUTH_CLIENT_ID,clientSecret:process.env.ALLTHINGS_OAUTH_CLIENT_SECRET,oauthUrl:process.env.ALLTHINGS_OAUTH_URL||OAUTH_URL,password:process.env.ALLTHINGS_OAUTH_PASSWORD,requestBackOffInterval:REQUEST_BACK_OFF_INTERVAL,requestMaxRetries:REQUEST_MAX_RETRIES,scope:"user:profile",username:process.env.ALLTHINGS_OAUTH_USERNAME},USER_AGENT=`Allthings Node SDK REST Client/${version$1}`;function buildQueryString(e){const t=new URLSearchParams;for(const[n,r]of Object.entries(e).sort(([e],[t])=>e.localeCompare(t)))null!=r&&""!==r&&t.append(n,String(r));return t.toString()}function parseQueryString(e){const t=e.startsWith("#")?e.slice(1):e;return Object.fromEntries(new URLSearchParams(t))}const RESPONSE_TYPE$1="code",GRANT_TYPE$3="authorization_code",castToAuthorizationRequestParameters$1=e=>{const{redirectUri:t,clientId:n,scope:r,state:i}=e;if(!n)throw new Error('Missing required "clientId" parameter to perform authorization code grant redirect');if(!t)throw new Error('Missing required "redirectUri" parameter to perform authorization code grant redirect');return{client_id:n,redirect_uri:t,response_type:RESPONSE_TYPE$1,...r?{scope:r}:{},...i?{state:i}:{}}},isEligibleForClientRedirect$1=e=>{try{return!!castToAuthorizationRequestParameters$1(e)}catch{return!1}},getRedirectUrl$1=e=>`${e.oauthUrl}/oauth/authorize?${buildQueryString(castToAuthorizationRequestParameters$1(e))}`,castToTokenRequestParameters$2=e=>{const{authorizationCode:t,redirectUri:n,clientId:r,clientSecret:i}=e;if(!r)throw new Error('Missing required "clientId" parameter to perform authorization code grant');if(!n)throw new Error('Missing required "redirectUri" parameter to perform authorization code grant');if(!t)throw new Error('Missing required "authorizationCode" parameter to perform authorization code grant');return{client_id:r,code:t,grant_type:GRANT_TYPE$3,redirect_uri:n,...i?{client_secret:i}:{}}},isEligible$3=e=>{try{return!!castToTokenRequestParameters$2(e)}catch{return!1}},requestToken$3=(e,t)=>e(castToTokenRequestParameters$2(t)),SUBSCRIPTIONS=process.env.DEBUG?.split(",").map(e=>e.trim())||[];function makeLogger(e){return["log","info","warn","error"].reduce((t,n)=>({...t,[n]:function(...t){return(SUBSCRIPTIONS.includes("*")||SUBSCRIPTIONS.includes(e)||SUBSCRIPTIONS.includes(e.toLocaleLowerCase()))&&console[n](`${e}:`,...t),!0}}),{})}const logger=makeLogger("OAuth Token Request"),makeFetchTokenRequester=e=>async t=>{try{const n=await fetch(e,{body:buildQueryString(t),cache:"no-cache",credentials:"omit",headers:{"Content-Type":"application/x-www-form-urlencoded",accept:"application/json","user-agent":USER_AGENT},method:"POST",mode:"cors"});if(200!==n.status)throw n;const{access_token:r,refresh_token:i,expires_in:s}=await n.json();return{accessToken:r,expiresIn:s,refreshToken:i}}catch(e){if(!(e instanceof Response))throw e;const t=`HTTP ${e.status} — ${e.statusText}`;throw logger.error(t,e),new Error(`HTTP ${e.status} — ${e.statusText}. Could not get token.`)}},GRANT_TYPE$2="refresh_token",castToTokenRequestParameters$1=e=>{const{clientId:t,clientSecret:n,refreshToken:r,scope:i}=e;if(!t)throw new Error('Missing required "clientId" parameter to perform refresh token grant');if(!r)throw new Error('Missing required "refreshToken" parameter to perform refresh token grant');return{client_id:t,grant_type:GRANT_TYPE$2,refresh_token:r,...n?{client_secret:n}:{},...i?{scope:i}:{}}},isEligible$2=e=>{try{return!!castToTokenRequestParameters$1(e)}catch{return!1}},requestToken$2=(e,t)=>e(castToTokenRequestParameters$1(t));async function requestAndSaveToStore(e,t){const n=await e();return t.set(n),n}const partial=(e,...t)=>(...n)=>e(...t,...n);async function until(e,t,n,r=0){const i=await t(n,r);return await e(i,r)?i:until(e,t,i,r+1)}function clearIntervalFunction(e){return clearInterval(e),!0}function pseudoRandomString(e=16){let t="";for(;t.length<e;)t+=Math.random().toString(36).slice(2);return t.slice(0,Math.max(0,e))}async function del(e,t,n,r,i){return e("delete",t,{body:n,headers:i},r)}async function get(e,t,n,r,i){return e("get",t,{headers:i,query:n},r)}var EnumGender,EnumUserType,EnumCommunicationPreferenceChannel,EnumUserPermissionRole,EnumUserPermissionObjectType;!function(e){e.female="female",e.male="male"}(EnumGender||(EnumGender={})),function(e){e.allthingsUser="allthings_user",e.allthingsContent="allthings_content",e.customer="customer",e.demoContent="demo_content",e.demoPublic="demo_public",e.partner="partner"}(EnumUserType||(EnumUserType={})),exports.EnumCommunicationPreferenceChannel=void 0,EnumCommunicationPreferenceChannel=exports.EnumCommunicationPreferenceChannel||(exports.EnumCommunicationPreferenceChannel={}),EnumCommunicationPreferenceChannel.push="push",EnumCommunicationPreferenceChannel.email="email",exports.EnumUserPermissionRole=void 0,EnumUserPermissionRole=exports.EnumUserPermissionRole||(exports.EnumUserPermissionRole={}),EnumUserPermissionRole.appAdmin="app-admin",EnumUserPermissionRole.appOwner="app-owner",EnumUserPermissionRole.articlesAgent="articles-agent",EnumUserPermissionRole.articlesViewOnly="articles-view-only",EnumUserPermissionRole.bookableAssetAgent="bookable-asset-agent",EnumUserPermissionRole.bookingAgent="booking-agent",EnumUserPermissionRole.cockpitManager="cockpit-manager",EnumUserPermissionRole.dataConnectorAdmin="data-connector-admin",EnumUserPermissionRole.documentAdmin="doc-admin",EnumUserPermissionRole.externalAgent="external-agent",EnumUserPermissionRole.globalOrgAdmin="global-org-admin",EnumUserPermissionRole.globalUserAdmin="global-user-admin",EnumUserPermissionRole.orgAdmin="org-admin",EnumUserPermissionRole.orgTeamManager="org-team-manager",EnumUserPermissionRole.pinboardAgent="pinboard-agent",EnumUserPermissionRole.platformOwner="platform-owner",EnumUserPermissionRole.qa="qa",EnumUserPermissionRole.serviceCenterAgent="service-center-agent",EnumUserPermissionRole.serviceCenterManager="service-center-manager",EnumUserPermissionRole.setup="setup",EnumUserPermissionRole.tenantManager="tenant-manager",exports.EnumUserPermissionObjectType=void 0,EnumUserPermissionObjectType=exports.EnumUserPermissionObjectType||(exports.EnumUserPermissionObjectType={}),EnumUserPermissionObjectType.app="App",EnumUserPermissionObjectType.group="Group",EnumUserPermissionObjectType.property="Property",EnumUserPermissionObjectType.unit="Unit";const remapUserResult=e=>{const{tenantIDs:t,...n}=e;return{...n,tenantIds:t}},remapEmbeddedUser=e=>e.users?e.users.map(remapUserResult):[];async function userCreate(e,t,n,r){return e.post("/v1/users",{...r,creationContext:t,username:n})}async function getUsers(e,t=1,n=-1,r={}){const{_embedded:{items:i},total:s}=await e.get("/v1/users",{filter:JSON.stringify(r),limit:n,page:t});return{_embedded:{items:i.map(remapUserResult)},total:s}}async function getCurrentUser(e){return remapUserResult(await e.get("/v1/me"))}async function userGetById(e,t){return remapUserResult(await e.get(`/v1/users/${t}`))}async function userUpdateById(e,t,n){const{tenantIds:r,...i}=n;return remapUserResult(await e.patch(`/v1/users/${t}`,{...i,tenantIDs:r}))}async function userCreatePermission(e,t,n){const{objectId:r,...i}=n,{objectID:s,...o}=await e.post(`/v1/users/${t}/permissions`,{...i,objectID:r});return{...o,objectId:s}}async function userCreatePermissionBatch(e,t,n){const{objectId:r,objectType:i,roles:s,startDate:o,endDate:a}=n,c={batch:s.map(e=>({endDate:a?.toISOString(),objectID:r,objectType:i,restrictions:[],role:e,startDate:o?.toISOString()}))};return!await e.post(`/v1/users/${t}/permissions`,c)}async function userGetPermissions(e,t){const{_embedded:{items:n}}=await e.get(`/v1/users/${t}/roles?limit=-1`);return n.map(({objectID:e,...t})=>({...t,objectId:e}))}async function userDeletePermission(e,t){return!await e.delete(`/v1/permissions/${t}`)}async function userGetUtilisationPeriods(e,t){const{_embedded:{items:n}}=await e.get(`/v1/users/${t}/utilisation-periods`);return n}async function userCheckInToUtilisationPeriod(e,t,n){const{email:r}=await e.userGetById(t);return e.utilisationPeriodCheckInUser(n,{email:r})}async function userGetByEmail(e,t,n=1,r=1e3){return e.getUsers(n,r,{email:t})}async function userChangePassword(e,t,n,r){return!await e.put(`/v1/users/${t}/password`,{currentPassword:n,plainPassword:r})}async function agentCreate(e,t,n,r,i,s,o){const a=await e.userCreate(t,r,{...i,type:EnumUserType.customer}),c=await e.post(`/v1/property-managers/${n}/users`,{userID:a.id,...o&&{externalAgentCompany:o}});return!((void 0===s||s)&&await e.post(`/v1/users/${a.id}/invitations`))&&{...a,...c}}async function agentCreatePermissions(e,t,n,r,i,s,o){return e.userCreatePermissionBatch(t,{endDate:o,objectId:n,objectType:r,restrictions:[],roles:i,startDate:s})}async function appCreate(e,t,n){return e.post(`/v1/users/${t}/apps`,{availableLocales:{0:"de_DE"},...n,siteUrl:n.siteUrl.replace("_","")})}async function appGetById(e,t){return e.get(`/v1/apps/${t}`)}async function bookingGetById(e,t){return e.get(`/v1/bookings/${t}`)}async function bookingUpdateById(e,t,n){return e.patch(`/v1/bookings/${t}`,n)}async function bucketGet(e,t){return e.get(`/v1/buckets/${t}`)}async function bucketCreate(e,t){return e.post("/v1/buckets",{channels:t.channels,name:t.name})}async function bucketAddFile(e,t,n){return""===await e.post(`/v1/buckets/${t}/files`,{id:n})}async function bucketRemoveFile(e,t,n){return""===await e.delete(`/v1/buckets/${t}/files/${n}`)}async function bucketRemoveFilesInPath(e,t,n){return""===await e.delete(`/v1/buckets/${t}/files`,{folder:n.path})}const createManyFiles=async(e,t)=>await Promise.all(e.map(async e=>{try{return await t.fileCreate({file:e.content,name:e.filename})}catch(e){return e instanceof Error?e:new Error(String(e))}}));async function createManyFilesSorted(e,t){const n=await createManyFiles(e,t);return{error:n.filter(e=>e instanceof Error),success:n.filter(e=>!(e instanceof Error)).map(e=>e.id)}}async function conversationGetById(e,t){return e.get(`/v1/conversations/${t}`)}async function conversationCreateMessage(e,t,n){const r=`/v1/conversations/${t}/messages`,i=n.attachments?.length?{content:{description:n.body,files:(await createManyFilesSorted(n.attachments,e)).success},createdBy:n.createdBy,inputChannel:n.inputChannel,internal:!1,type:"file"}:{content:{content:n.body},createdBy:n.createdBy,inputChannel:n.inputChannel,type:"text"};return e.post(r,i)}async function fileCreate(e,t){return e.post("/v1/files",{formData:{file:[t.file,t.name],path:t.path||""}})}async function fileDelete(e,t){return""===await e.delete(`/v1/files/${t}`)}async function groupCreate(e,t,n){const{propertyManagerId:r,...i}=n;return e.post(`/v1/properties/${t}/groups`,{...i,propertyManagerID:r})}async function groupGetById(e,t){const{propertyManagerID:n,...r}=await e.get(`/v1/groups/${t}`);return{...r,propertyManagerId:n}}async function groupUpdateById(e,t,n){return e.patch(`/v1/groups/${t}`,n)}async function getGroups(e,t=1,n=-1,r={}){const{_embedded:{items:i},total:s}=await e.get("/v1/groups",{filter:JSON.stringify(r),limit:n,page:t});return{_embedded:{items:i},total:s}}async function lookupIds(e,t,n){const r=n.dataSource?`/v1/id-lookup/${t}/${n.resource}/${n.dataSource}`:`/v1/id-lookup/${t}/${n.resource}`;return e.post(r,{externalIds:"string"==typeof n.externalIds?[n.externalIds]:n.externalIds,...n.parentId?{parentId:n.parentId}:{},...n.userType?{userType:n.userType}:{}})}function stringToDate(e){return new Date(Date.parse(e))}function dateToString(e){return e.toISOString()}var EnumNotificationCategory,EnumNotificationType,EnumNotificationSettingsValue;function remapNotificationResult({createdAt:e,objectID:t,referencedObjectID:n,...r}){return{createdAt:stringToDate(e),objectId:t,referencedObjectId:n,...r}}async function notificationsGetByUser(e,t,n=1,r=-1){const{_embedded:{items:i},total:s,metaData:o}=await e.get(`/v1/users/${t}/notifications?page=${n}&limit=${r}`);return{_embedded:{items:i.map(remapNotificationResult)},metaData:o,total:s}}async function notificationsUpdateReadByUser(e,t,n=new Date){return e.patch(`/v1/users/${t}/notifications`,{lastReadAt:dateToString(n)})}async function notificationUpdateRead(e,t){return remapNotificationResult(await e.patch(`/v1/notifications/${t}`,{read:!0}))}function remapKeys(e,t){return Object.entries(e).reduce((e,n)=>({...e,[t(n[0])]:n[1]}),{})}function camelCaseToDash(e){return e.replace(/([A-Z])/g,e=>`-${e[0].toLowerCase()}`)}function dashCaseToCamel(e){return e.replace(/-([a-z])/g,e=>e[1].toUpperCase())}async function notificationSettingsUpdateByUser(e,t,n){const r=await e.patch(`/v1/users/${t}/notification-settings`,{notificationSettings:remapKeys(n,camelCaseToDash)});return remapKeys(r,dashCaseToCamel)}async function notificationSettingsResetByUser(e,t){return remapKeys(await e.delete(`/v1/users/${t}/notification-settings`),dashCaseToCamel)}async function propertyCreate(e,t,n){return e.post(`/v1/apps/${t}/properties`,n)}async function propertyGetById(e,t){return e.get(`/v1/properties/${t}`)}async function propertyUpdateById(e,t,n){return e.patch(`/v1/properties/${t}`,n)}async function getProperties(e,t=1,n=-1,r={}){const{_embedded:{items:i},total:s}=await e.get("/v1/properties",{filter:JSON.stringify(r),limit:n,page:t});return{_embedded:{items:i},total:s}}!function(e){e.events="events",e.hintsAndTips="hints-and-tips",e.lostAndFound="lost-and-found",e.localDeals="local-deals",e.localEvents="local-events",e.miscellaneous="miscellaneous",e.deals="deals",e.messages="messages",e.adminMessages="admin-messages",e.newThingsToGive="new-things-to-give",e.newThingsForSale="new-things-for-sale",e.surveys="surveys",e.supportOffer="support-offer",e.supportRequest="support-request",e.sustainability="sustainability",e.localServices="local-services",e.services="services",e.ticketDigestEmail="ticket-digest-email",e.appDigestEmail="app-digest-email",e.newFile="new-file"}(EnumNotificationCategory||(EnumNotificationCategory={})),function(e){e.clipboardThing="clipboard-thing",e.comment="comment",e.communityArticle="community-article",e.newFile="new-file",e.ticketComment="ticket-comment",e.welcomeNotification="welcome-notification"}(EnumNotificationType||(EnumNotificationType={})),function(e){e.never="never",e.immediately="immediately",e.daily="daily",e.weekly="weekly",e.biweekly="biweekly",e.monthly="monthly"}(EnumNotificationSettingsValue||(EnumNotificationSettingsValue={}));const remapRegistationCodeResult=e=>{const{tenantID:t,...n}=e;return{...n,externalId:t}};async function registrationCodeCreate(e,t,n,r={permanent:!1}){const{externalId:i,...s}=r;return remapRegistationCodeResult(await e.post("/v1/registration-codes",{code:t,utilisationPeriods:"string"==typeof n?[n]:n,...i?{externalId:i,tenantID:i}:{},...s}))}async function registrationCodeUpdateById(e,t,n){return remapRegistationCodeResult(await e.patch(`/v1/registration-codes/${t}`,n))}async function registrationCodeGetById(e,t){return remapRegistationCodeResult(await e.get(`/v1/invitations/${t}`))}async function registrationCodeDelete(e,t){return""===await e.delete(`/v1/invitations/${t}`)}async function serviceProviderCreate(e,t){return e.post("/v1/service-providers",t)}async function serviceProviderGetById(e,t){return e.get(`/v1/service-providers/${t}`)}async function serviceProviderUpdateById(e,t,n){return e.patch(`/v1/service-providers/${t}`,n)}var ETicketStatus,ETrafficLightColor,EnumUnitObjectType,EnumUnitType,EnumUserRelationType,EnumUtilisationPeriodType;async function ticketGetById(e,t){return e.get(`/v1/tickets/${t}`)}async function ticketCreateOnUser(e,t,n,r){return e.post(`/v1/users/${t}/tickets`,{...r,files:r.files?(await createManyFilesSorted(r.files,e)).success:[],utilisationPeriod:n})}async function ticketCreateOnServiceProvider(e,t,n){return e.post(`/v1/property-managers/${t}/tickets`,{...n,files:n.files?(await createManyFilesSorted(n.files,e)).success:[]})}async function unitCreate(e,t,n){return e.post(`/v1/groups/${t}/units`,n)}async function unitGetById(e,t){return e.get(`/v1/units/${t}`)}async function unitUpdateById(e,t,n){return e.patch(`/v1/units/${t}`,n)}async function getUnits(e,t=1,n=-1,r={}){const{_embedded:{items:i},total:s}=await e.get("/v1/units",{filter:JSON.stringify(r),limit:n,page:t});return{_embedded:{items:i},total:s}}async function userRelationCreate(e,t,n){return e.post(`/v1/users/${t}/user-relations/${n.type}`,{ids:n.ids,level:n.level,readOnly:n.readOnly,role:n.role})}async function userRelationDelete(e,t,n){return e.delete(`/v1/users/${t}/user-relations/${n.type}`,{ids:n.ids,level:n.level,role:n.role})}async function userRelationsGetByUser(e,t){return e.get(`/v1/users/${t}/user-relations`)}async function utilisationPeriodCreate(e,t,n){const{tenantIDs:r,_embedded:i,...s}=await e.post(`/v1/units/${t}/utilisation-periods`,n);return{...s,invitations:i.invitations.map(remapRegistationCodeResult),tenantIds:r,users:remapEmbeddedUser(i)}}async function utilisationPeriodGetById(e,t){const{tenantIDs:n,_embedded:r,...i}=await e.get(`/v1/utilisation-periods/${t}`);return{...i,invitations:r.invitations.map(remapRegistationCodeResult),tenantIds:n,users:remapEmbeddedUser(r)}}async function utilisationPeriodUpdateById(e,t,n){const{tenantIDs:r,_embedded:i,...s}=await e.patch(`/v1/utilisation-periods/${t}`,n);return{...s,invitations:i.invitations.map(remapRegistationCodeResult),tenantIds:r,users:remapEmbeddedUser(i)}}async function utilisationPeriodDelete(e,t){return!await e.delete(`/v1/utilisation-periods/${t}/soft`)}async function utilisationPeriodCheckInUser(e,t,n){return await e.post(`/v1/utilisation-periods/${t}/users`,{email:n.email})&&e.utilisationPeriodGetById(t)}async function utilisationPeriodCheckOutUser(e,t,n){return""===await e.delete(`/v1/utilisation-periods/${t}/users/${n}`)}async function utilisationPeriodAddRegistrationCode(e,t,n,r,i=!1){return e.post(`/v1/utilisation-periods/${t}/registration-codes`,{code:n,permanent:i,tenant:r})}async function patch(e,t,n,r,i){return e("patch",t,{body:n,headers:i},r)}async function post(e,t,n,r,i){return e("post",t,{body:n,headers:i},r)}async function put(e,t,n,r,i){return e("put",t,{body:n,headers:i},r)}function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}!function(e){e.CLOSED="closed",e.WAITING_FOR_AGENT="waiting-for-agent",e.WAITING_FOR_CUSTOMER="waiting-for-customer",e.WAITING_FOR_EXTERNAL="waiting-for-external"}(ETicketStatus||(ETicketStatus={})),function(e){e.GREEN="green",e.RED="red",e.YELLOW="yellow"}(ETrafficLightColor||(ETrafficLightColor={})),exports.EnumUnitObjectType=void 0,EnumUnitObjectType=exports.EnumUnitObjectType||(exports.EnumUnitObjectType={}),EnumUnitObjectType.adjoiningRoom="adjoining-room",EnumUnitObjectType.advertisingSpace="advertising-space",EnumUnitObjectType.aerial="aerial",EnumUnitObjectType.apartmentBuilding="apartment-building",EnumUnitObjectType.atm="atm",EnumUnitObjectType.atmRoom="atm-room",EnumUnitObjectType.attic="attic",EnumUnitObjectType.atticFlat="attic-flat",EnumUnitObjectType.bank="bank",EnumUnitObjectType.basment="basment",EnumUnitObjectType.bikeShed="bike-shed",EnumUnitObjectType.buildingLaw="building-law",EnumUnitObjectType.cafeteria="cafeteria",EnumUnitObjectType.caretakerRoom="caretaker-room",EnumUnitObjectType.carport="carport",EnumUnitObjectType.cellar="cellar",EnumUnitObjectType.commercialProperty="commercial-property",EnumUnitObjectType.commonRoom="common-room",EnumUnitObjectType.deliveryZone="delivery-zone",EnumUnitObjectType.diverse="diverse",EnumUnitObjectType.doubleParkingSpace="double-parking-space",EnumUnitObjectType.engineeringRoom="engineering-room",EnumUnitObjectType.entertainment="entertainment",EnumUnitObjectType.environment="environment",EnumUnitObjectType.estate="estate",EnumUnitObjectType.fillingStation="filling-station",EnumUnitObjectType.fitnessCenter="fitness-center",EnumUnitObjectType.flat="flat",EnumUnitObjectType.freeZone="free-zone",EnumUnitObjectType.garage="garage",EnumUnitObjectType.garden="garden",EnumUnitObjectType.gardenFlat="garden-flat",EnumUnitObjectType.heatingFacilities="heating-facilities",EnumUnitObjectType.hotel="hotel",EnumUnitObjectType.incidentalRentalExpenses="incidental-rental-expenses",EnumUnitObjectType.industry="industry",EnumUnitObjectType.kiosk="kiosk",EnumUnitObjectType.kitchen="kitchen",EnumUnitObjectType.loft="loft",EnumUnitObjectType.machine="machine",EnumUnitObjectType.maisonette="maisonette",EnumUnitObjectType.medicalPractice="medical-practice",EnumUnitObjectType.mopedShed="moped-shed",EnumUnitObjectType.motorcycleParkingSpace="motorcycle-parking-space",EnumUnitObjectType.office="office",EnumUnitObjectType.oneFamilyHouse="one-family-house",EnumUnitObjectType.parkingBox="parking-box",EnumUnitObjectType.parkingGarage="parking-garage",EnumUnitObjectType.parkingSpace="parking-space",EnumUnitObjectType.parkingSpaces="parking-spaces",EnumUnitObjectType.penthouse="penthouse",EnumUnitObjectType.productionPlant="production-plant",EnumUnitObjectType.pub="pub",EnumUnitObjectType.publicArea="public-area",EnumUnitObjectType.restaurant="restaurant",EnumUnitObjectType.retirementHome="retirement-home",EnumUnitObjectType.salesFloor="sales-floor",EnumUnitObjectType.school="school",EnumUnitObjectType.shelter="shelter",EnumUnitObjectType.storage="storage",EnumUnitObjectType.store="store",EnumUnitObjectType.storeroom="storeroom",EnumUnitObjectType.studio="studio",EnumUnitObjectType.terrace="terrace",EnumUnitObjectType.toilets="toilets",EnumUnitObjectType.utilityRoom="utility-room",EnumUnitObjectType.variableParkingSpace="variable-parking-space",EnumUnitObjectType.variableRoom="variable-room",EnumUnitObjectType.visitorParkingSpace="visitor-parking-space",EnumUnitObjectType.workshop="workshop",exports.EnumUnitType=void 0,EnumUnitType=exports.EnumUnitType||(exports.EnumUnitType={}),EnumUnitType.rented="rented",EnumUnitType.owned="owned",exports.EnumUserRelationType=void 0,EnumUserRelationType=exports.EnumUserRelationType||(exports.EnumUserRelationType={}),EnumUserRelationType.isResponsible="is-responsible",exports.EnumUtilisationPeriodType=void 0,EnumUtilisationPeriodType=exports.EnumUtilisationPeriodType||(exports.EnumUtilisationPeriodType={}),EnumUtilisationPeriodType.tenant="tenant",EnumUtilisationPeriodType.ownership="ownership",EnumUtilisationPeriodType.vacant="vacant";var parser={},hasRequiredParser,DLList_1,hasRequiredDLList,Events_1,hasRequiredEvents,Queues_1,hasRequiredQueues,BottleneckError_1,hasRequiredBottleneckError,Job_1,hasRequiredJob,LocalDatastore_1,hasRequiredLocalDatastore;function requireParser(){return hasRequiredParser||(hasRequiredParser=1,parser.load=function(e,t,n={}){var r,i,s;for(r in t)s=t[r],n[r]=null!=(i=e[r])?i:s;return n},parser.overwrite=function(e,t,n={}){var r,i;for(r in e)i=e[r],void 0!==t[r]&&(n[r]=i);return n}),parser}function requireDLList(){return hasRequiredDLList?DLList_1:(hasRequiredDLList=1,DLList_1=class{constructor(e,t){this.incr=e,this.decr=t,this._first=null,this._last=null,this.length=0}push(e){var t;this.length++,"function"==typeof this.incr&&this.incr(),t={value:e,prev:this._last,next:null},null!=this._last?(this._last.next=t,this._last=t):this._first=this._last=t}shift(){var e;if(null!=this._first)return this.length--,"function"==typeof this.decr&&this.decr(),e=this._first.value,null!=(this._first=this._first.next)?this._first.prev=null:this._last=null,e}first(){if(null!=this._first)return this._first.value}getArray(){var e,t,n;for(e=this._first,n=[];null!=e;)n.push((t=e,e=e.next,t.value));return n}forEachShift(e){var t;for(t=this.shift();null!=t;)e(t),t=this.shift()}debug(){var e,t,n,r,i;for(e=this._first,i=[];null!=e;)i.push((t=e,e=e.next,{value:t.value,prev:null!=(n=t.prev)?n.value:void 0,next:null!=(r=t.next)?r.value:void 0}));return i}})}function requireEvents(){if(hasRequiredEvents)return Events_1;function e(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=t.apply(n,r);function a(t){e(o,i,s,a,c,"next",t)}function c(t){e(o,i,s,a,c,"throw",t)}a(void 0)})}}var n;return hasRequiredEvents=1,n=class{constructor(e){if(this.instance=e,this._events={},null!=this.instance.on||null!=this.instance.once||null!=this.instance.removeAllListeners)throw new Error("An Emitter already exists for this object");this.instance.on=(e,t)=>this._addListener(e,"many",t),this.instance.once=(e,t)=>this._addListener(e,"once",t),this.instance.removeAllListeners=(e=null)=>null!=e?delete this._events[e]:this._events={}}_addListener(e,t,n){var r;return null==(r=this._events)[e]&&(r[e]=[]),this._events[e].push({cb:n,status:t}),this.instance}listenerCount(e){return null!=this._events[e]?this._events[e].length:0}trigger(e,...n){var r=this;return t(function*(){var i,s;try{if("debug"!==e&&r.trigger("debug",`Event triggered: ${e}`,n),null==r._events[e])return;return r._events[e]=r._events[e].filter(function(e){return"none"!==e.status}),s=r._events[e].map(function(){var e=t(function*(e){var t,i;if("none"!==e.status){"once"===e.status&&(e.status="none");try{return"function"==typeof(null!=(i="function"==typeof e.cb?e.cb(...n):void 0)?i.then:void 0)?yield i:i}catch(e){return t=e,r.trigger("error",t),null}}});return function(t){return e.apply(this,arguments)}}()),(yield Promise.all(s)).find(function(e){return null!=e})}catch(e){return i=e,r.trigger("error",i),null}})()}},Events_1=n}function requireQueues(){return hasRequiredQueues?Queues_1:(hasRequiredQueues=1,e=requireDLList(),t=requireEvents(),Queues_1=class{constructor(n){this.Events=new t(this),this._length=0,this._lists=function(){var t,r,i;for(i=[],t=1,r=n;1<=r?t<=r:t>=r;1<=r?++t:--t)i.push(new e(()=>this.incr(),()=>this.decr()));return i}.call(this)}incr(){if(0===this._length++)return this.Events.trigger("leftzero")}decr(){if(0===--this._length)return this.Events.trigger("zero")}push(e){return this._lists[e.options.priority].push(e)}queued(e){return null!=e?this._lists[e].length:this._length}shiftAll(e){return this._lists.forEach(function(t){return t.forEachShift(e)})}getFirst(e=this._lists){var t,n,r;for(t=0,n=e.length;t<n;t++)if((r=e[t]).length>0)return r;return[]}shiftLastFrom(e){return this.getFirst(this._lists.slice(e).reverse()).shift()}});var e,t}function requireBottleneckError(){return hasRequiredBottleneckError?BottleneckError_1:(hasRequiredBottleneckError=1,e=class extends Error{},BottleneckError_1=e);var e}function requireJob(){if(hasRequiredJob)return Job_1;function e(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=t.apply(n,r);function a(t){e(o,i,s,a,c,"next",t)}function c(t){e(o,i,s,a,c,"throw",t)}a(void 0)})}}var n,r;return hasRequiredJob=1,r=requireParser(),n=requireBottleneckError(),Job_1=class{constructor(e,t,n,i,s,o,a,c){this.task=e,this.args=t,this.rejectOnDrop=s,this.Events=o,this._states=a,this.Promise=c,this.options=r.load(n,i),this.options.priority=this._sanitizePriority(this.options.priority),this.options.id===i.id&&(this.options.id=`${this.options.id}-${this._randomIndex()}`),this.promise=new this.Promise((e,t)=>{this._resolve=e,this._reject=t}),this.retryCount=0}_sanitizePriority(e){var t;return(t=~~e!==e?5:e)<0?0:t>9?9:t}_randomIndex(){return Math.random().toString(36).slice(2)}doDrop({error:e,message:t="This job has been dropped by Bottleneck"}={}){return!!this._states.remove(this.options.id)&&(this.rejectOnDrop&&this._reject(null!=e?e:new n(t)),this.Events.trigger("dropped",{args:this.args,options:this.options,task:this.task,promise:this.promise}),!0)}_assertStatus(e){var t;if((t=this._states.jobStatus(this.options.id))!==e&&("DONE"!==e||null!==t))throw new n(`Invalid job status ${t}, expected ${e}. Please open an issue at https://github.com/SGrondin/bottleneck/issues`)}doReceive(){return this._states.start(this.options.id),this.Events.trigger("received",{args:this.args,options:this.options})}doQueue(e,t){return this._assertStatus("RECEIVED"),this._states.next(this.options.id),this.Events.trigger("queued",{args:this.args,options:this.options,reachedHWM:e,blocked:t})}doRun(){return 0===this.retryCount?(this._assertStatus("QUEUED"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),this.Events.trigger("scheduled",{args:this.args,options:this.options})}doExecute(e,n,r,i){var s=this;return t(function*(){var t,o,a;0===s.retryCount?(s._assertStatus("RUNNING"),s._states.next(s.options.id)):s._assertStatus("EXECUTING"),o={args:s.args,options:s.options,retryCount:s.retryCount},s.Events.trigger("executing",o);try{if(a=yield null!=e?e.schedule(s.options,s.task,...s.args):s.task(...s.args),n())return s.doDone(o),yield i(s.options,o),s._assertStatus("DONE"),s._resolve(a)}catch(e){return t=e,s._onFailure(t,o,n,r,i)}})()}doExpire(e,t,r){var i,s;return this._states.jobStatus("RUNNING"===this.options.id)&&this._states.next(this.options.id),this._assertStatus("EXECUTING"),s={args:this.args,options:this.options,retryCount:this.retryCount},i=new n(`This job timed out after ${this.options.expiration} ms.`),this._onFailure(i,s,e,t,r)}_onFailure(e,n,r,i,s){var o=this;return t(function*(){var t,a;if(r())return null!=(t=yield o.Events.trigger("failed",e,n))?(a=~~t,o.Events.trigger("retry",`Retrying ${o.options.id} after ${a} ms`,n),o.retryCount++,i(a)):(o.doDone(n),yield s(o.options,n),o._assertStatus("DONE"),o._reject(e))})()}doDone(e){return this._assertStatus("EXECUTING"),this._states.next(this.options.id),this.Events.trigger("done",e)}}}function requireLocalDatastore(){if(hasRequiredLocalDatastore)return LocalDatastore_1;function e(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=t.apply(n,r);function a(t){e(o,i,s,a,c,"next",t)}function c(t){e(o,i,s,a,c,"throw",t)}a(void 0)})}}var n,r;return hasRequiredLocalDatastore=1,r=requireParser(),n=requireBottleneckError(),LocalDatastore_1=class{constructor(e,t,n){this.instance=e,this.storeOptions=t,this.clientId=this.instance._randomIndex(),r.load(n,n,this),this._nextRequest=this._lastReservoirRefresh=this._lastReservoirIncrease=Date.now(),this._running=0,this._done=0,this._unblockTime=0,this.ready=this.Promise.resolve(),this.clients={},this._startHeartbeat()}_startHeartbeat(){var e;return null==this.heartbeat&&(null!=this.storeOptions.reservoirRefreshInterval&&null!=this.storeOptions.reservoirRefreshAmount||null!=this.storeOptions.reservoirIncreaseInterval&&null!=this.storeOptions.reservoirIncreaseAmount)?"function"==typeof(e=this.heartbeat=setInterval(()=>{var e,t,n,r,i;if(r=Date.now(),null!=this.storeOptions.reservoirRefreshInterval&&r>=this._lastReservoirRefresh+this.storeOptions.reservoirRefreshInterval&&(this._lastReservoirRefresh=r,this.storeOptions.reservoir=this.storeOptions.reservoirRefreshAmount,this.instance._drainAll(this.computeCapacity())),null!=this.storeOptions.reservoirIncreaseInterval&&r>=this._lastReservoirIncrease+this.storeOptions.reservoirIncreaseInterval){var s=this.storeOptions;if(e=s.reservoirIncreaseAmount,n=s.reservoirIncreaseMaximum,i=s.reservoir,this._lastReservoirIncrease=r,(t=null!=n?Math.min(e,n-i):e)>0)return this.storeOptions.reservoir+=t,this.instance._drainAll(this.computeCapacity())}},this.heartbeatInterval)).unref?e.unref():void 0:clearInterval(this.heartbeat)}__publish__(e){var n=this;return t(function*(){return yield n.yieldLoop(),n.instance.Events.trigger("message",e.toString())})()}__disconnect__(e){var n=this;return t(function*(){return yield n.yieldLoop(),clearInterval(n.heartbeat),n.Promise.resolve()})()}yieldLoop(e=0){return new this.Promise(function(t,n){return setTimeout(t,e)})}computePenalty(){var e;return null!=(e=this.storeOptions.penalty)?e:15*this.storeOptions.minTime||5e3}__updateSettings__(e){var n=this;return t(function*(){return yield n.yieldLoop(),r.overwrite(e,e,n.storeOptions),n._startHeartbeat(),n.instance._drainAll(n.computeCapacity()),!0})()}__running__(){var e=this;return t(function*(){return yield e.yieldLoop(),e._running})()}__queued__(){var e=this;return t(function*(){return yield e.yieldLoop(),e.instance.queued()})()}__done__(){var e=this;return t(function*(){return yield e.yieldLoop(),e._done})()}__groupCheck__(e){var n=this;return t(function*(){return yield n.yieldLoop(),n._nextRequest+n.timeout<e})()}computeCapacity(){var e,t,n=this.storeOptions;return e=n.maxConcurrent,t=n.reservoir,null!=e&&null!=t?Math.min(e-this._running,t):null!=e?e-this._running:null!=t?t:null}conditionsCheck(e){var t;return null==(t=this.computeCapacity())||e<=t}__incrementReservoir__(e){var n=this;return t(function*(){var t;return yield n.yieldLoop(),t=n.storeOptions.reservoir+=e,n.instance._drainAll(n.computeCapacity()),t})()}__currentReservoir__(){var e=this;return t(function*(){return yield e.yieldLoop(),e.storeOptions.reservoir})()}isBlocked(e){return this._unblockTime>=e}check(e,t){return this.conditionsCheck(e)&&this._nextRequest-t<=0}__check__(e){var n=this;return t(function*(){var t;return yield n.yieldLoop(),t=Date.now(),n.check(e,t)})()}__register__(e,n,r){var i=this;return t(function*(){var e,t;return yield i.yieldLoop(),e=Date.now(),i.conditionsCheck(n)?(i._running+=n,null!=i.storeOptions.reservoir&&(i.storeOptions.reservoir-=n),t=Math.max(i._nextRequest-e,0),i._nextRequest=e+t+i.storeOptions.minTime,{success:!0,wait:t,reservoir:i.storeOptions.reservoir}):{success:!1}})()}strategyIsBlock(){return 3===this.storeOptions.strategy}__submit__(e,r){var i=this;return t(function*(){var t,s,o;if(yield i.yieldLoop(),null!=i.storeOptions.maxConcurrent&&r>i.storeOptions.maxConcurrent)throw new n(`Impossible to add a job having a weight of ${r} to a limiter having a maxConcurrent setting of ${i.storeOptions.maxConcurrent}`);return s=Date.now(),o=null!=i.storeOptions.highWater&&e===i.storeOptions.highWater&&!i.check(r,s),(t=i.strategyIsBlock()&&(o||i.isBlocked(s)))&&(i._unblockTime=s+i.computePenalty(),i._nextRequest=i._unblockTime+i.storeOptions.minTime,i.instance._dropAllQueued()),{reachedHWM:o,blocked:t,strategy:i.storeOptions.strategy}})()}__free__(e,n){var r=this;return t(function*(){return yield r.yieldLoop(),r._running-=n,r._done+=n,r.instance._drainAll(r.computeCapacity()),{running:r._running}})()}}}var Scripts={},require$$0={"blacklist_client.lua":"local blacklist = ARGV[num_static_argv + 1]\n\nif redis.call('zscore', client_last_seen_key, blacklist) then\n redis.call('zadd', client_last_seen_key, 0, blacklist)\nend\n\n\nreturn {}\n","check.lua":"local weight = tonumber(ARGV[num_static_argv + 1])\n\nlocal capacity = process_tick(now, false)['capacity']\nlocal nextRequest = tonumber(redis.call('hget', settings_key, 'nextRequest'))\n\nreturn conditions_check(capacity, weight) and nextRequest - now <= 0\n","conditions_check.lua":"local conditions_check = function (capacity, weight)\n return capacity == nil or weight <= capacity\nend\n","current_reservoir.lua":"return process_tick(now, false)['reservoir']\n","done.lua":"process_tick(now, false)\n\nreturn tonumber(redis.call('hget', settings_key, 'done'))\n","free.lua":"local index = ARGV[num_static_argv + 1]\n\nredis.call('zadd', job_expirations_key, 0, index)\n\nreturn process_tick(now, false)['running']\n","get_time.lua":"redis.replicate_commands()\n\nlocal get_time = function ()\n local time = redis.call('time')\n\n return tonumber(time[1]..string.sub(time[2], 1, 3))\nend\n","group_check.lua":"return not (redis.call('exists', settings_key) == 1)\n","heartbeat.lua":"process_tick(now, true)\n","increment_reservoir.lua":"local incr = tonumber(ARGV[num_static_argv + 1])\n\nredis.call('hincrby', settings_key, 'reservoir', incr)\n\nlocal reservoir = process_tick(now, true)['reservoir']\n\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\nrefresh_expiration(0, 0, groupTimeout)\n\nreturn reservoir\n","init.lua":"local clear = tonumber(ARGV[num_static_argv + 1])\nlocal limiter_version = ARGV[num_static_argv + 2]\nlocal num_local_argv = num_static_argv + 2\n\nif clear == 1 then\n redis.call('del', unpack(KEYS))\nend\n\nif redis.call('exists', settings_key) == 0 then\n -- Create\n local args = {'hmset', settings_key}\n\n for i = num_local_argv + 1, #ARGV do\n table.insert(args, ARGV[i])\n end\n\n redis.call(unpack(args))\n redis.call('hmset', settings_key,\n 'nextRequest', now,\n 'lastReservoirRefresh', now,\n 'lastReservoirIncrease', now,\n 'running', 0,\n 'done', 0,\n 'unblockTime', 0,\n 'capacityPriorityCounter', 0\n )\n\nelse\n -- Apply migrations\n local settings = redis.call('hmget', settings_key,\n 'id',\n 'version'\n )\n local id = settings[1]\n local current_version = settings[2]\n\n if current_version ~= limiter_version then\n local version_digits = {}\n for k, v in string.gmatch(current_version, \"([^.]+)\") do\n table.insert(version_digits, tonumber(k))\n end\n\n -- 2.10.0\n if version_digits[2] < 10 then\n redis.call('hsetnx', settings_key, 'reservoirRefreshInterval', '')\n redis.call('hsetnx', settings_key, 'reservoirRefreshAmount', '')\n redis.call('hsetnx', settings_key, 'lastReservoirRefresh', '')\n redis.call('hsetnx', settings_key, 'done', 0)\n redis.call('hset', settings_key, 'version', '2.10.0')\n end\n\n -- 2.11.1\n if version_digits[2] < 11 or (version_digits[2] == 11 and version_digits[3] < 1) then\n if redis.call('hstrlen', settings_key, 'lastReservoirRefresh') == 0 then\n redis.call('hmset', settings_key,\n 'lastReservoirRefresh', now,\n 'version', '2.11.1'\n )\n end\n end\n\n -- 2.14.0\n if version_digits[2] < 14 then\n local old_running_key = 'b_'..id..'_running'\n local old_executing_key = 'b_'..id..'_executing'\n\n if redis.call('exists', old_running_key) == 1 then\n redis.call('rename', old_running_key, job_weights_key)\n end\n if redis.call('exists', old_executing_key) == 1 then\n redis.call('rename', old_executing_key, job_expirations_key)\n end\n redis.call('hset', settings_key, 'version', '2.14.0')\n end\n\n -- 2.15.2\n if version_digits[2] < 15 or (version_digits[2] == 15 and version_digits[3] < 2) then\n redis.call('hsetnx', settings_key, 'capacityPriorityCounter', 0)\n redis.call('hset', settings_key, 'version', '2.15.2')\n end\n\n -- 2.17.0\n if version_digits[2] < 17 then\n redis.call('hsetnx', settings_key, 'clientTimeout', 10000)\n redis.call('hset', settings_key, 'version', '2.17.0')\n end\n\n -- 2.18.0\n if version_digits[2] < 18 then\n redis.call('hsetnx', settings_key, 'reservoirIncreaseInterval', '')\n redis.call('hsetnx', settings_key, 'reservoirIncreaseAmount', '')\n redis.call('hsetnx', settings_key, 'reservoirIncreaseMaximum', '')\n redis.call('hsetnx', settings_key, 'lastReservoirIncrease', now)\n redis.call('hset', settings_key, 'version', '2.18.0')\n end\n\n end\n\n process_tick(now, false)\nend\n\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\nrefresh_expiration(0, 0, groupTimeout)\n\nreturn {}\n","process_tick.lua":"local process_tick = function (now, always_publish)\n\n local compute_capacity = function (maxConcurrent, running, reservoir)\n if maxConcurrent ~= nil and reservoir ~= nil then\n return math.min((maxConcurrent - running), reservoir)\n elseif maxConcurrent ~= nil then\n return maxConcurrent - running\n elseif reservoir ~= nil then\n return reservoir\n else\n return nil\n end\n end\n\n local settings = redis.call('hmget', settings_key,\n 'id',\n 'maxConcurrent',\n 'running',\n 'reservoir',\n 'reservoirRefreshInterval',\n 'reservoirRefreshAmount',\n 'lastReservoirRefresh',\n 'reservoirIncreaseInterval',\n 'reservoirIncreaseAmount',\n 'reservoirIncreaseMaximum',\n 'lastReservoirIncrease',\n 'capacityPriorityCounter',\n 'clientTimeout'\n )\n local id = settings[1]\n local maxConcurrent = tonumber(settings[2])\n local running = tonumber(settings[3])\n local reservoir = tonumber(settings[4])\n local reservoirRefreshInterval = tonumber(settings[5])\n local reservoirRefreshAmount = tonumber(settings[6])\n local lastReservoirRefresh = tonumber(settings[7])\n local reservoirIncreaseInterval = tonumber(settings[8])\n local reservoirIncreaseAmount = tonumber(settings[9])\n local reservoirIncreaseMaximum = tonumber(settings[10])\n local lastReservoirIncrease = tonumber(settings[11])\n local capacityPriorityCounter = tonumber(settings[12])\n local clientTimeout = tonumber(settings[13])\n\n local initial_capacity = compute_capacity(maxConcurrent, running, reservoir)\n\n --\n -- Process 'running' changes\n --\n local expired = redis.call('zrangebyscore', job_expirations_key, '-inf', '('..now)\n\n if #expired > 0 then\n redis.call('zremrangebyscore', job_expirations_key, '-inf', '('..now)\n\n local flush_batch = function (batch, acc)\n local weights = redis.call('hmget', job_weights_key, unpack(batch))\n redis.call('hdel', job_weights_key, unpack(batch))\n local clients = redis.call('hmget', job_clients_key, unpack(batch))\n redis.call('hdel', job_clients_key, unpack(batch))\n\n -- Calculate sum of removed weights\n for i = 1, #weights do\n acc['total'] = acc['total'] + (tonumber(weights[i]) or 0)\n end\n\n -- Calculate sum of removed weights by client\n local client_weights = {}\n for i = 1, #clients do\n local removed = tonumber(weights[i]) or 0\n if removed > 0 then\n acc['client_weights'][clients[i]] = (acc['client_weights'][clients[i]] or 0) + removed\n end\n end\n end\n\n local acc = {\n ['total'] = 0,\n ['client_weights'] = {}\n }\n local batch_size = 1000\n\n -- Compute changes to Zsets and apply changes to Hashes\n for i = 1, #expired, batch_size do\n local batch = {}\n for j = i, math.min(i + batch_size - 1, #expired) do\n table.insert(batch, expired[j])\n end\n\n flush_batch(batch, acc)\n end\n\n -- Apply changes to Zsets\n if acc['total'] > 0 then\n redis.call('hincrby', settings_key, 'done', acc['total'])\n running = tonumber(redis.call('hincrby', settings_key, 'running', -acc['total']))\n end\n\n for client, weight in pairs(acc['client_weights']) do\n redis.call('zincrby', client_running_key, -weight, client)\n end\n end\n\n --\n -- Process 'reservoir' changes\n --\n local reservoirRefreshActive = reservoirRefreshInterval ~= nil and reservoirRefreshAmount ~= nil\n if reservoirRefreshActive and now >= lastReservoirRefresh + reservoirRefreshInterval then\n reservoir = reservoirRefreshAmount\n redis.call('hmset', settings_key,\n 'reservoir', reservoir,\n 'lastReservoirRefresh', now\n )\n end\n\n local reservoirIncreaseActive = reservoirIncreaseInterval ~= nil and reservoirIncreaseAmount ~= nil\n if reservoirIncreaseActive and now >= lastReservoirIncrease + reservoirIncreaseInterval then\n local num_intervals = math.floor((now - lastReservoirIncrease) / reservoirIncreaseInterval)\n local incr = reservoirIncreaseAmount * num_intervals\n if reservoirIncreaseMaximum ~= nil then\n incr = math.min(incr, reservoirIncreaseMaximum - (reservoir or 0))\n end\n if incr > 0 then\n reservoir = (reservoir or 0) + incr\n end\n redis.call('hmset', settings_key,\n 'reservoir', reservoir,\n 'lastReservoirIncrease', lastReservoirIncrease + (num_intervals * reservoirIncreaseInterval)\n )\n end\n\n --\n -- Clear unresponsive clients\n --\n local unresponsive = redis.call('zrangebyscore', client_last_seen_key, '-inf', (now - clientTimeout))\n local unresponsive_lookup = {}\n local terminated_clients = {}\n for i = 1, #unresponsive do\n unresponsive_lookup[unresponsive[i]] = true\n if tonumber(redis.call('zscore', client_running_key, unresponsive[i])) == 0 then\n table.insert(terminated_clients, unresponsive[i])\n end\n end\n if #terminated_clients > 0 then\n redis.call('zrem', client_running_key, unpack(terminated_clients))\n redis.call('hdel', client_num_queued_key, unpack(terminated_clients))\n redis.call('zrem', client_last_registered_key, unpack(terminated_clients))\n redis.call('zrem', client_last_seen_key, unpack(terminated_clients))\n end\n\n --\n -- Broadcast capacity changes\n --\n local final_capacity = compute_capacity(maxConcurrent, running, reservoir)\n\n if always_publish or (initial_capacity ~= nil and final_capacity == nil) then\n -- always_publish or was not unlimited, now unlimited\n redis.call('publish', 'b_'..id, 'capacity:'..(final_capacity or ''))\n\n elseif initial_capacity ~= nil and final_capacity ~= nil and final_capacity > initial_capacity then\n -- capacity was increased\n -- send the capacity message to the limiter having the lowest number of running jobs\n -- the tiebreaker is the limiter having not registered a job in the longest time\n\n local lowest_concurrency_value = nil\n local lowest_concurrency_clients = {}\n local lowest_concurrency_last_registered = {}\n local client_concurrencies = redis.call('zrange', client_running_key, 0, -1, 'withscores')\n\n for i = 1, #client_concurrencies, 2 do\n local client = client_concurrencies[i]\n local concurrency = tonumber(client_concurrencies[i+1])\n\n if (\n lowest_concurrency_value == nil or lowest_concurrency_value == concurrency\n ) and (\n not unresponsive_lookup[client]\n ) and (\n tonumber(redis.call('hget', client_num_queued_key, client)) > 0\n ) then\n lowest_concurrency_value = concurrency\n table.insert(lowest_concurrency_clients, client)\n local last_registered = tonumber(redis.call('zscore', client_last_registered_key, client))\n table.insert(lowest_concurrency_last_registered, last_registered)\n end\n end\n\n if #lowest_concurrency_clients > 0 then\n local position = 1\n local earliest = lowest_concurrency_last_registered[1]\n\n for i,v in ipairs(lowest_concurrency_last_registered) do\n if v < earliest then\n position = i\n earliest = v\n end\n end\n\n local next_client = lowest_concurrency_clients[position]\n redis.call('publish', 'b_'..id,\n 'capacity-priority:'..(final_capacity or '')..\n ':'..next_client..\n ':'..capacityPriorityCounter\n )\n redis.call('hincrby', settings_key, 'capacityPriorityCounter', '1')\n else\n redis.call('publish', 'b_'..id, 'capacity:'..(final_capacity or ''))\n end\n end\n\n return {\n ['capacity'] = final_capacity,\n ['running'] = running,\n ['reservoir'] = reservoir\n }\nend\n","queued.lua":"local clientTimeout = tonumber(redis.call('hget', settings_key, 'clientTimeout'))\nlocal valid_clients = redis.call('zrangebyscore', client_last_seen_key, (now - clientTimeout), 'inf')\nlocal client_queued = redis.call('hmget', client_num_queued_key, unpack(valid_clients))\n\nlocal sum = 0\nfor i = 1, #client_queued do\n sum = sum + tonumber(client_queued[i])\nend\n\nreturn sum\n","refresh_expiration.lua":"local refresh_expiration = function (now, nextRequest, groupTimeout)\n\n if groupTimeout ~= nil then\n local ttl = (nextRequest + groupTimeout) - now\n\n for i = 1, #KEYS do\n redis.call('pexpire', KEYS[i], ttl)\n end\n end\n\nend\n","refs.lua":"local settings_key = KEYS[1]\nlocal job_weights_key = KEYS[2]\nlocal job_expirations_key = KEYS[3]\nlocal job_clients_key = KEYS[4]\nlocal client_running_key = KEYS[5]\nlocal client_num_queued_key = KEYS[6]\nlocal client_last_registered_key = KEYS[7]\nlocal client_last_seen_key = KEYS[8]\n\nlocal now = tonumber(ARGV[1])\nlocal client = ARGV[2]\n\nlocal num_static_argv = 2\n","register.lua":"local index = ARGV[num_static_argv + 1]\nlocal weight = tonumber(ARGV[num_static_argv + 2])\nlocal expiration = tonumber(ARGV[num_static_argv + 3])\n\nlocal state = process_tick(now, false)\nlocal capacity = state['capacity']\nlocal reservoir = state['reservoir']\n\nlocal settings = redis.call('hmget', settings_key,\n 'nextRequest',\n 'minTime',\n 'groupTimeout'\n)\nlocal nextRequest = tonumber(settings[1])\nlocal minTime = tonumber(settings[2])\nlocal groupTimeout = tonumber(settings[3])\n\nif conditions_check(capacity, weight) then\n\n redis.call('hincrby', settings_key, 'running', weight)\n redis.call('hset', job_weights_key, index, weight)\n if expiration ~= nil then\n redis.call('zadd', job_expirations_key, now + expiration, index)\n end\n redis.call('hset', job_clients_key, index, client)\n redis.call('zincrby', client_running_key, weight, client)\n redis.call('hincrby', client_num_queued_key, client, -1)\n redis.call('zadd', client_last_registered_key, now, client)\n\n local wait = math.max(nextRequest - now, 0)\n local newNextRequest = now + wait + minTime\n\n if reservoir == nil then\n redis.call('hset', settings_key,\n 'nextRequest', newNextRequest\n )\n else\n reservoir = reservoir - weight\n redis.call('hmset', settings_key,\n 'reservoir', reservoir,\n 'nextRequest', newNextRequest\n )\n end\n\n refresh_expiration(now, newNextRequest, groupTimeout)\n\n return {true, wait, reservoir}\n\nelse\n return {false}\nend\n","register_client.lua":"local queued = tonumber(ARGV[num_static_argv + 1])\n\n-- Could have been re-registered concurrently\nif not redis.call('zscore', client_last_seen_key, client) then\n redis.call('zadd', client_running_key, 0, client)\n redis.call('hset', client_num_queued_key, client, queued)\n redis.call('zadd', client_last_registered_key, 0, client)\nend\n\nredis.call('zadd', client_last_seen_key, now, client)\n\nreturn {}\n","running.lua":"return process_tick(now, false)['running']\n","submit.lua":"local queueLength = tonumber(ARGV[num_static_argv + 1])\nlocal weight = tonumber(ARGV[num_static_argv + 2])\n\nlocal capacity = process_tick(now, false)['capacity']\n\nlocal settings = redis.call('hmget', settings_key,\n 'id',\n 'maxConcurrent',\n 'highWater',\n 'nextRequest',\n 'strategy',\n 'unblockTime',\n 'penalty',\n 'minTime',\n 'groupTimeout'\n)\nlocal id = settings[1]\nlocal maxConcurrent = tonumber(settings[2])\nlocal highWater = tonumber(settings[3])\nlocal nextRequest = tonumber(settings[4])\nlocal strategy = tonumber(settings[5])\nlocal unblockTime = tonumber(settings[6])\nlocal penalty = tonumber(settings[7])\nlocal minTime = tonumber(settings[8])\nlocal groupTimeout = tonumber(settings[9])\n\nif maxConcurrent ~= nil and weight > maxConcurrent then\n return redis.error_reply('OVERWEIGHT:'..weight..':'..maxConcurrent)\nend\n\nlocal reachedHWM = (highWater ~= nil and queueLength == highWater\n and not (\n conditions_check(capacity, weight)\n and nextRequest - now <= 0\n )\n)\n\nlocal blocked = strategy == 3 and (reachedHWM or unblockTime >= now)\n\nif blocked then\n local computedPenalty = penalty\n if computedPenalty == nil then\n if minTime == 0 then\n computedPenalty = 5000\n else\n computedPenalty = 15 * minTime\n end\n end\n\n local newNextRequest = now + computedPenalty + minTime\n\n redis.call('hmset', settings_key,\n 'unblockTime', now + computedPenalty,\n 'nextRequest', newNextRequest\n )\n\n local clients_queued_reset = redis.call('hkeys', client_num_queued_key)\n local queued_reset = {}\n for i = 1, #clients_queued_reset do\n table.insert(queued_reset, clients_queued_reset[i])\n table.insert(queued_reset, 0)\n end\n redis.call('hmset', client_num_queued_key, unpack(queued_reset))\n\n redis.call('publish', 'b_'..id, 'blocked:')\n\n refresh_expiration(now, newNextRequest, groupTimeout)\nend\n\nif not blocked and not reachedHWM then\n redis.call('hincrby', client_num_queued_key, client, 1)\nend\n\nreturn {reachedHWM, blocked, strategy}\n","update_settings.lua":"local args = {'hmset', settings_key}\n\nfor i = num_static_argv + 1, #ARGV do\n table.insert(args, ARGV[i])\nend\n\nredis.call(unpack(args))\n\nprocess_tick(now, true)\n\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\nrefresh_expiration(0, 0, groupTimeout)\n\nreturn {}\n","validate_client.lua":"if not redis.call('zscore', client_last_seen_key, client) then\n return redis.error_reply('UNKNOWN_CLIENT')\nend\n\nredis.call('zadd', client_last_seen_key, now, client)\n","validate_keys.lua":"if not (redis.call('exists', settings_key) == 1) then\n return redis.error_reply('SETTINGS_KEY_NOT_FOUND')\nend\n"},hasRequiredScripts,RedisConnection_1,hasRequiredRedisConnection,IORedisConnection_1,hasRequiredIORedisConnection,RedisDatastore_1,hasRequiredRedisDatastore,States_1,hasRequiredStates,Sync_1,hasRequiredSync;function requireScripts(){return hasRequiredScripts||(hasRequiredScripts=1,e=Scripts,t={refs:(n=require$$0)["refs.lua"],validate_keys:n["validate_keys.lua"],validate_client:n["validate_client.lua"],refresh_expiration:n["refresh_expiration.lua"],process_tick:n["process_tick.lua"],conditions_check:n["conditions_check.lua"],get_time:n["get_time.lua"]},e.allKeys=function(e){return[`b_${e}_settings`,`b_${e}_job_weights`,`b_${e}_job_expirations`,`b_${e}_job_clients`,`b_${e}_client_running`,`b_${e}_client_num_queued`,`b_${e}_client_last_registered`,`b_${e}_client_last_seen`]},r={init:{keys:e.allKeys,headers:["process_tick"],refresh_expiration:!0,code:n["init.lua"]},group_check:{keys:e.allKeys,headers:[],refresh_expiration:!1,code:n["group_check.lua"]},register_client:{keys:e.allKeys,headers:["validate_keys"],refresh_expiration:!1,code:n["register_client.lua"]},blacklist_client:{keys:e.allKeys,headers:["validate_keys","validate_client"],refresh_expiration:!1,code:n["blacklist_client.lua"]},heartbeat:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!1,code:n["heartbeat.lua"]},update_settings:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!0,code:n["update_settings.lua"]},running:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!1,code:n["running.lua"]},queued:{keys:e.allKeys,headers:["validate_keys","validate_client"],refresh_expiration:!1,code:n["queued.lua"]},done:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!1,code:n["done.lua"]},check:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick","conditions_check"],refresh_expiration:!1,code:n["check.lua"]},submit:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick","conditions_check"],refresh_expiration:!0,code:n["submit.lua"]},register:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick","conditions_check"],refresh_expiration:!0,code:n["register.lua"]},free:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!0,code:n["free.lua"]},current_reservoir:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!1,code:n["current_reservoir.lua"]},increment_reservoir:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!0,code:n["increment_reservoir.lua"]}},e.names=Object.keys(r),e.keys=function(e,t){return r[e].keys(t)},e.payload=function(e){var n;return n=r[e],Array.prototype.concat(t.refs,n.headers.map(function(e){return t[e]}),n.refresh_expiration?t.refresh_expiration:"",n.code).join("\n")}),Scripts;var e,t,n,r}function requireRedisConnection(){if(hasRequiredRedisConnection)return RedisConnection_1;function asyncGeneratorStep(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function _asyncToGenerator(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var s=e.apply(t,n);function o(e){asyncGeneratorStep(s,r,i,o,a,"next",e)}function a(e){asyncGeneratorStep(s,r,i,o,a,"throw",e)}o(void 0)})}}var Events,RedisConnection,Scripts,parser;return hasRequiredRedisConnection=1,parser=requireParser(),Events=requireEvents(),Scripts=requireScripts(),RedisConnection=function(){class RedisConnection{constructor(options={}){parser.load(options,this.defaults,this),null==this.Redis&&(this.Redis=eval("require")("redis")),null==this.Events&&(this.Events=new Events(this)),this.terminated=!1,null==this.client&&(this.client=this.Redis.createClient(this.clientOptions)),this.subscriber=this.client.duplicate(),this.limiters={},this.shas={},this.ready=this.Promise.all([this._setup(this.client,!1),this._setup(this.subscriber,!0)]).then(()=>this._loadScripts()).then(()=>({client:this.client,subscriber:this.subscriber}))}_setup(e,t){return e.setMaxListeners(0),new this.Promise((n,r)=>(e.on("error",e=>this.Events.trigger("error",e)),t&&e.on("message",(e,t)=>{var n;return null!=(n=this.limiters[e])?n._store.onMessage(e,t):void 0}),e.ready?n():e.once("ready",n)))}_loadScript(e){return new this.Promise((t,n)=>{var r;return r=Scripts.payload(e),this.client.multi([["script","load",r]]).exec((r,i)=>null!=r?n(r):(this.shas[e]=i[0],t(i[0])))})}_loadScripts(){return this.Promise.all(Scripts.names.map(e=>this._loadScript(e)))}__runCommand__(e){var t=this;return _asyncToGenerator(function*(){return yield t.ready,new t.Promise((n,r)=>t.client.multi([e]).exec_atomic(function(e,t){return null!=e?r(e):n(t[0])}))})()}__addLimiter__(e){return this.Promise.all([e.channel(),e.channel_client()].map(t=>new this.Promise((n,r)=>{var i;return i=r=>{if(r===t)return this.subscriber.removeListener("subscribe",i),this.limiters[t]=e,n()},this.subscriber.on("subscribe",i),this.subscriber.subscribe(t)})))}__removeLimiter__(e){var t=this;return this.Promise.all([e.channel(),e.channel_client()].map(function(){var e=_asyncToGenerator(function*(e){return t.terminated||(yield new t.Promise((n,r)=>t.subscriber.unsubscribe(e,function(t,i){return null!=t?r(t):i===e?n():void 0}))),delete t.limiters[e]});return function(t){return e.apply(this,arguments)}}()))}__scriptArgs__(e,t,n,r){var i;return i=Scripts.keys(e,t),[this.shas[e],i.length].concat(i,n,r)}__scriptFn__(e){return this.client.evalsha.bind(this.client)}disconnect(e=!0){var t,n,r,i;for(t=0,r=(i=Object.keys(this.limiters)).length;t<r;t++)n=i[t],clearInterval(this.limiters[n]._store.heartbeat);return this.limiters={},this.terminated=!0,this.client.end(e),this.subscriber.end(e),this.Promise.resolve()}}return RedisConnection.prototype.datastore="redis",RedisConnection.prototype.defaults={Redis:null,clientOptions:{},client:null,Promise:Promise,Events:null},RedisConnection}.call(void 0),RedisConnection_1=RedisConnection,RedisConnection_1}function requireIORedisConnection(){if(hasRequiredIORedisConnection)return IORedisConnection_1;function _slicedToArray(e,t){return _arrayWithHoles(e)||_iterableToArrayLimit(e,t)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function _iterableToArrayLimit(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{r||null==a.return||a.return()}finally{if(i)throw s}}return n}function _arrayWithHoles(e){if(Array.isArray(e))return e}function asyncGeneratorStep(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function _asyncToGenerator(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var s=e.apply(t,n);function o(e){asyncGeneratorStep(s,r,i,o,a,"next",e)}function a(e){asyncGeneratorStep(s,r,i,o,a,"throw",e)}o(void 0)})}}var Events,IORedisConnection,Scripts,parser;return hasRequiredIORedisConnection=1,parser=requireParser(),Events=requireEvents(),Scripts=requireScripts(),IORedisConnection=function(){class IORedisConnection{constructor(options={}){parser.load(options,this.defaults,this),null==this.Redis&&(this.Redis=eval("require")("ioredis")),null==this.Events&&(this.Events=new Events(this)),this.terminated=!1,null!=this.clusterNodes?(this.client=new this.Redis.Cluster(this.clusterNodes,this.clientOptions),this.subscriber=new this.Redis.Cluster(this.clusterNodes,this.clientOptions)):null!=this.client&&null==this.client.duplicate?this.subscriber=new this.Redis.Cluster(this.client.startupNodes,this.client.options):(null==this.client&&(this.client=new this.Redis(this.clientOptions)),this.subscriber=this.client.duplicate()),this.limiters={},this.ready=this.Promise.all([this._setup(this.client,!1),this._setup(this.subscriber,!0)]).then(()=>(this._loadScripts(),{client:this.client,subscriber:this.subscriber}))}_setup(e,t){return e.setMaxListeners(0),new this.Promise((n,r)=>(e.on("error",e=>this.Events.trigger("error",e)),t&&e.on("message",(e,t)=>{var n;return null!=(n=this.limiters[e])?n._store.onMessage(e,t):void 0}),"ready"===e.status?n():e.once("ready",n)))}_loadScripts(){return Scripts.names.forEach(e=>this.client.defineCommand(e,{lua:Scripts.payload(e)}))}__runCommand__(e){var t=this;return _asyncToGenerator(function*(){yield t.ready;var n=_slicedToArray(yield t.client.pipeline([e]).exec(),1),r=_slicedToArray(n[0],2);return r[0],r[1]})()}__addLimiter__(e){return this.Promise.all([e.channel(),e.channel_client()].map(t=>new this.Promise((n,r)=>this.subscriber.subscribe(t,()=>(this.limiters[t]=e,n())))))}__removeLimiter__(e){var t=this;return[e.channel(),e.channel_client()].forEach(function(){var e=_asyncToGenerator(function*(e){return t.terminated||(yield t.subscriber.unsubscribe(e)),delete t.limiters[e]});return function(t){return e.apply(this,arguments)}}())}__scriptArgs__(e,t,n,r){var i;return[(i=Scripts.keys(e,t)).length].concat(i,n,r)}__scriptFn__(e){return this.client[e].bind(this.client)}disconnect(e=!0){var t,n,r,i;for(t=0,r=(i=Object.keys(this.limiters)).length;t<r;t++)n=i[t],clearInterval(this.limiters[n]._store.heartbeat);return this.limiters={},this.terminated=!0,e?this.Promise.all([this.client.quit(),this.subscriber.quit()]):(this.client.disconnect(),this.subscriber.disconnect(),this.Promise.resolve())}}return IORedisConnection.prototype.datastore="ioredis",IORedisConnection.prototype.defaults={Redis:null,clientOptions:{},clusterNodes:null,client:null,Promise:Promise,Events:null},IORedisConnection}.call(void 0),IORedisConnection_1=IORedisConnection,IORedisConnection_1}function requireRedisDatastore(){if(hasRequiredRedisDatastore)return RedisDatastore_1;function e(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{r||null==a.return||a.return()}finally{if(i)throw s}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function t(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function n(e){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=e.apply(n,r);function a(e){t(o,i,s,a,c,"next",e)}function c(e){t(o,i,s,a,c,"throw",e)}a(void 0)})}}var r,i,s,o;return hasRequiredRedisDatastore=1,o=requireParser(),r=requireBottleneckError(),s=requireRedisConnection(),i=requireIORedisConnection(),RedisDatastore_1=class{constructor(e,t,n){this.instance=e,this.storeOptions=t,this.originalId=this.instance.id,this.clientId=this.instance._randomIndex(),o.load(n,n,this),this.clients={},this.capacityPriorityCounters={},this.sharedConnection=null!=this.connection,null==this.connection&&(this.connection="redis"===this.instance.datastore?new s({Redis:this.Redis,clientOptions:this.clientOptions,Promise:this.Promise,Events:this.instance.Events}):"ioredis"===this.instance.datastore?new i({Redis:this.Redis,clientOptions:this.clientOptions,clusterNodes:this.clusterNodes,Promise:this.Promise,Events:this.instance.Events}):void 0),this.instance.connection=this.connection,this.instance.datastore=this.connection.datastore,this.ready=this.connection.ready.then(e=>(this.clients=e,this.runScript("init",this.prepareInitSettings(this.clearDatastore)))).then(()=>this.connection.__addLimiter__(this.instance)).then(()=>this.runScript("register_client",[this.instance.queued()])).then(()=>{var e;return"function"==typeof(e=this.heartbeat=setInterval(()=>this.runScript("heartbeat",[]).catch(e=>this.instance.Events.trigger("error",e)),this.heartbeatInterval)).unref&&e.unref(),this.clients})}__publish__(e){var t=this;return n(function*(){return(yield t.ready).client.publish(t.instance.channel(),`message:${e.toString()}`)})()}onMessage(t,r){var i=this;return n(function*(){var t,s,o,a,c,u,l,d,h,p;try{l=r.indexOf(":");var m=[r.slice(0,l),r.slice(l+1)];if(o=m[1],"capacity"===(p=m[0]))return yield i.instance._drainAll(o.length>0?~~o:void 0);if("capacity-priority"===p){var _=e(o.split(":"),3);return h=_[0],d=_[1],s=_[2],t=h.length>0?~~h:void 0,d===i.clientId?(a=yield i.instance._drainAll(t),u=null!=t?t-(a||0):"",yield i.clients.client.publish(i.instance.channel(),`capacity-priority:${u}::${s}`)):""===d?(clearTimeout(i.capacityPriorityCounters[s]),delete i.capacityPriorityCounters[s],i.instance._drainAll(t)):i.capacityPriorityCounters[s]=setTimeout(n(function*(){var e;try{return delete i.capacityPriorityCounters[s],yield i.runScript("blacklist_client",[d]),yield i.instance._drainAll(t)}catch(t){return e=t,i.instance.Events.trigger("error",e)}}),1e3)}if("message"===p)return i.instance.Events.trigger("message",o);if("blocked"===p)return yield i.instance._dropAllQueued()}catch(e){return c=e,i.instance.Events.trigger("error",c)}})()}__disconnect__(e){return clearInterval(this.heartbeat),this.sharedConnection?this.connection.__removeLimiter__(this.instance):this.connection.disconnect(e)}runScript(e,t){var r=this;return n(function*(){return"init"!==e&&"register_client"!==e&&(yield r.ready),new r.Promise((n,i)=>{var s,o;return s=[Date.now(),r.clientId].concat(t),r.instance.Events.trigger("debug",`Calling Redis script: ${e}.lua`,s),o=r.connection.__scriptArgs__(e,r.originalId,s,function(e,t){return null!=e?i(e):n(t)}),r.connection.__scriptFn__(e)(...o)}).catch(n=>"SETTINGS_KEY_NOT_FOUND"===n.message?"heartbeat"===e?r.Promise.resolve():r.runScript("init",r.prepareInitSettings(!1)).then(()=>r.runScript(e,t)):"UNKNOWN_CLIENT"===n.message?r.runScript("register_client",[r.instance.queued()]).then(()=>r.runScript(e,t)):r.Promise.reject(n))})()}prepareArray(e){var t,n,r,i;for(r=[],t=0,n=e.length;t<n;t++)i=e[t],r.push(null!=i?i.toString():"");return r}prepareObject(e){var t,n,r;for(n in t=[],e)r=e[n],t.push(n,null!=r?r.toString():"");return t}prepareInitSettings(e){var t;return(t=this.prepareObject(Object.assign({},this.storeOptions,{id:this.originalId,version:this.instance.version,groupTimeout:this.timeout,clientTimeout:this.clientTimeout}))).unshift(e?1:0,this.instance.version),t}convertBool(e){return!!e}__updateSettings__(e){var t=this;return n(function*(){return yield t.runScript("update_settings",t.prepareObject(e)),o.overwrite(e,e,t.storeOptions)})()}__running__(){return this.runScript("running",[])}__queued__(){return this.runScript("queued",[])}__done__(){return this.runScript("done",[])}__groupCheck__(){var e=this;return n(function*(){return e.convertBool(yield e.runScript("group_check",[]))})()}__incrementReservoir__(e){return this.runScript("increment_reservoir",[e])}__currentReservoir__(){return this.runScript("current_reservoir",[])}__check__(e){var t=this;return n(function*(){return t.convertBool(yield t.runScript("check",t.prepareArray([e])))})()}__register__(t,r,i){var s=this;return n(function*(){var n,o,a,c=e(yield s.runScript("register",s.prepareArray([t,r,i])),3);return o=c[0],a=c[1],n=c[2],{success:s.convertBool(o),wait:a,reservoir:n}})()}__submit__(t,i){var s=this;return n(function*(){var n,o,a,c,u;try{var l=e(yield s.runScript("submit",s.prepareArray([t,i])),3);return c=l[0],n=l[1],u=l[2],{reachedHWM:s.convertBool(c),blocked:s.convertBool(n),strategy:u}}catch(t){if(0===(o=t).message.indexOf("OVERWEIGHT")){var d=e(o.message.split(":"),3);throw d[0],i=d[1],a=d[2],new r(`Impossible to add a job having a weight of ${i} to a limiter having a maxConcurrent setting of ${a}`)}throw o}})()}__free__(e,t){var r=this;return n(function*(){return{running:yield r.runScript("free",r.prepareArray([e]))}})()}}}function requireStates(){return hasRequiredStates?States_1:(hasRequiredStates=1,e=requireBottleneckError(),States_1=class{constructor(e){this.status=e,this._jobs={},this.counts=this.status.map(function(){return 0})}next(e){var t,n;return n=(t=this._jobs[e])+1,null!=t&&n<this.status.length?(this.counts[t]--,this.counts[n]++,this._jobs[e]++):null!=t?(this.counts[t]--,delete this._jobs[e]):void 0}start(e){return this._jobs[e]=0,this.counts[0]++}remove(e){var t;return null!=(t=this._jobs[e])&&(this.counts[t]--,delete this._jobs[e]),null!=t}jobStatus(e){var t;return null!=(t=this.status[this._jobs[e]])?t:null}statusJobs(t){var n,r,i,s;if(null!=t){if((r=this.status.indexOf(t))<0)throw new e(`status must be one of ${this.status.join(", ")}`);for(n in s=[],i=this._jobs)i[n]===r&&s.push(n);return s}return Object.keys(this._jobs)}statusCounts(){return this.counts.reduce((e,t,n)=>(e[this.status[n]]=t,e),{})}});var e}function requireSync(){if(hasRequiredSync)return Sync_1;function e(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=t.apply(n,r);function a(t){e(o,i,s,a,c,"next",t)}function c(t){e(o,i,s,a,c,"throw",t)}a(void 0)})}}var n;return hasRequiredSync=1,n=requireDLList(),Sync_1=class{constructor(e,t){this.schedule=this.schedule.bind(this),this.name=e,this.Promise=t,this._running=0,this._queue=new n}isEmpty(){return 0===this._queue.length}_tryToRun(){var e=this;return t(function*(){var n,r,i,s,o,a,c;if(e._running<1&&e._queue.length>0){e._running++;var u=e._queue.shift();return c=u.task,n=u.args,o=u.resolve,s=u.reject,r=yield t(function*(){try{return a=yield c(...n),function(){return o(a)}}catch(e){return i=e,function(){return s(i)}}})(),e._running--,e._tryToRun(),r()}})()}schedule(e,...t){var n,r,i;return i=r=null,n=new this.Promise(function(e,t){return i=e,r=t}),this._queue.push({task:e,args:t,resolve:i,reject:r}),this._tryToRun(),n}}}const version="2.19.5";var require$$8={version:version},Group_1,hasRequiredGroup,Batcher_1,hasRequiredBatcher,Bottleneck_1,hasRequiredBottleneck,lib,hasRequiredLib;function requireGroup(){if(hasRequiredGroup)return Group_1;function e(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{r||null==a.return||a.return()}finally{if(i)throw s}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function t(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function n(e){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=e.apply(n,r);function a(e){t(o,i,s,a,c,"next",e)}function c(e){t(o,i,s,a,c,"throw",e)}a(void 0)})}}var r,i,s,o,a,c;return hasRequiredGroup=1,c=requireParser(),r=requireEvents(),o=requireRedisConnection(),s=requireIORedisConnection(),a=requireScripts(),i=function(){class t{constructor(e={}){this.deleteKey=this.deleteKey.bind(this),this.limiterOptions=e,c.load(this.limiterOptions,this.defaults,this),this.Events=new r(this),this.instances={},this.Bottleneck=requireBottleneck(),this._startAutoCleanup(),this.sharedConnection=null!=this.connection,null==this.connection&&("redis"===this.limiterOptions.datastore?this.connection=new o(Object.assign({},this.limiterOptions,{Events:this.Events})):"ioredis"===this.limiterOptions.datastore&&(this.connection=new s(Object.assign({},this.limiterOptions,{Events:this.Events}))))}key(e=""){var t;return null!=(t=this.instances[e])?t:(()=>{var t;return t=this.instances[e]=new this.Bottleneck(Object.assign(this.limiterOptions,{id:`${this.id}-${e}`,timeout:this.timeout,connection:this.connection})),this.Events.trigger("created",t,e),t})()}deleteKey(e=""){var t=this;return n(function*(){var n,r;return r=t.instances[e],t.connection&&(n=yield t.connection.__runCommand__(["del",...a.allKeys(`${t.id}-${e}`)])),null!=r&&(delete t.instances[e],yield r.disconnect()),null!=r||n>0})()}limiters(){var e,t,n,r;for(e in n=[],t=this.instances)r=t[e],n.push({key:e,limiter:r});return n}keys(){return Object.keys(this.instances)}clusterKeys(){var t=this;return n(function*(){var n,r,i,s,o,a,c;if(null==t.connection)return t.Promise.resolve(t.keys());for(o=[],n=null,c=`b_${t.id}-`.length,9;0!==n;){var u=e(yield t.connection.__runCommand__(["scan",null!=n?n:0,"match",`b_${t.id}-*_settings`,"count",1e4]),2);for(n=~~u[0],i=0,a=(r=u[1]).length;i<a;i++)s=r[i],o.push(s.slice(c,-9))}return o})()}_startAutoCleanup(){var e,t=this;return clearInterval(this.interval),"function"==typeof(e=this.interval=setInterval(n(function*(){var e,n,r,i,s,o;for(n in s=Date.now(),i=[],r=t.instances){o=r[n];try{(yield o._store.__groupCheck__(s))?i.push(t.deleteKey(n)):i.push(void 0)}catch(t){e=t,i.push(o.Events.trigger("error",e))}}return i}),this.timeout/2)).unref?e.unref():void 0}updateSettings(e={}){if(c.overwrite(e,this.defaults,this),c.overwrite(e,e,this.limiterOptions),null!=e.timeout)return this._startAutoCleanup()}disconnect(e=!0){var t;if(!this.sharedConnection)return null!=(t=this.connection)?t.disconnect(e):void 0}}return t.prototype.defaults={timeout:3e5,connection:null,Promise:Promise,id:"group-key"},t}.call(void 0),Group_1=i}function requireBatcher(){return hasRequiredBatcher?Batcher_1:(hasRequiredBatcher=1,n=requireParser(),t=requireEvents(),e=function(){class e{constructor(e={}){this.options=e,n.load(this.options,this.defaults,this),this.Events=new t(this),this._arr=[],this._resetPromise(),this._lastFlush=Date.now()}_resetPromise(){return this._promise=new this.Promise((e,t)=>this._resolve=e)}_flush(){return clearTimeout(this._timeout),this._lastFlush=Date.now(),this._resolve(),this.Events.trigger("batch",this._arr),this._arr=[],this._resetPromise()}add(e){var t;return this._arr.push(e),t=this._promise,this._arr.length===this.maxSize?this._flush():null!=this.maxTime&&1===this._arr.length&&(this._timeout=setTimeout(()=>this._flush(),this.maxTime)),t}}return e.prototype.defaults={maxTime:null,maxSize:null,Promise:Promise},e}.call(void 0),Batcher_1=e);var e,t,n}function requireBottleneck(){if(hasRequiredBottleneck)return Bottleneck_1;function e(e,t){return r(e)||function(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{r||null==a.return||a.return()}finally{if(i)throw s}}return n}(e,t)||n()}function t(e){return r(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||n()}function n(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function r(e){if(Array.isArray(e))return e}function i(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function s(e){return function(){var t=this,n=arguments;return new Promise(function(r,s){var o=e.apply(t,n);function a(e){i(o,r,s,a,c,"next",e)}function c(e){i(o,r,s,a,c,"throw",e)}a(void 0)})}}hasRequiredBottleneck=1;var o,a,c,u,l,d,h,p,m,_=[].splice;return m=requireParser(),l=requireQueues(),c=requireJob(),u=requireLocalDatastore(),d=requireRedisDatastore(),a=requireEvents(),h=requireStates(),p=requireSync(),o=function(){class n{constructor(e={},...t){var r,i;this._addToQueue=this._addToQueue.bind(this),this._validateOptions(e,t),m.load(e,this.instanceDefaults,this),this._queues=new l(10),this._scheduled={},this._states=new h(["RECEIVED","QUEUED","RUNNING","EXECUTING"].concat(this.trackDoneStatus?["DONE"]:[])),this._limiter=null,this.Events=new a(this),this._submitLock=new p("submit",this.Promise),this._registerLock=new p("register",this.Promise),i=m.load(e,this.storeDefaults,{}),this._store=function(){if("redis"===this.datastore||"ioredis"===this.datastore||null!=this.connection)return r=m.load(e,this.redisStoreDefaults,{}),new d(this,i,r);if("local"===this.datastore)return r=m.load(e,this.localStoreDefaults,{}),new u(this,i,r);throw new n.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`)}.call(this),this._queues.on("leftzero",()=>{var e;return null!=(e=this._store.heartbeat)&&"function"==typeof e.ref?e.ref():void 0}),this._queues.on("zero",()=>{var e;return null!=(e=this._store.heartbeat)&&"function"==typeof e.unref?e.unref():void 0})}_validateOptions(e,t){if(null==e||"object"!=typeof e||0!==t.length)throw new n.prototype.BottleneckError("Bottleneck v2 takes a single object argument. Refer to https://github.com/SGrondin/bottleneck#upgrading-to-v2 if you're upgrading from Bottleneck v1.")}ready(){return this._store.ready}clients(){return this._store.clients}channel(){return`b_${this.id}`}channel_client(){return`b_${this.id}_${this._store.clientId}`}publish(e){return this._store.__publish__(e)}disconnect(e=!0){return this._store.__disconnect__(e)}chain(e){return this._limiter=e,this}queued(e){return this._queues.queued(e)}clusterQueued(){return this._store.__queued__()}empty(){return 0===this.queued()&&this._submitLock.isEmpty()}running(){return this._store.__running__()}done(){return this._store.__done__()}jobStatus(e){return this._states.jobStatus(e)}jobs(e){return this._states.statusJobs(e)}counts(){return this._states.statusCounts()}_randomIndex(){return Math.random().toString(36).slice(2)}check(e=1){return this._store.__check__(e)}_clearGlobalState(e){return null!=this._scheduled[e]&&(clearTimeout(this._scheduled[e].expiration),delete this._scheduled[e],!0)}_free(e,t,n,r){var i=this;return s(function*(){var t,s;try{if(s=(yield i._store.__free__(e,n.weight)).running,i.Events.trigger("debug",`Freed ${n.id}`,r),0===s&&i.empty())return i.Events.trigger("idle")}catch(e){return t=e,i.Events.trigger("error",t)}})()}_run(e,t,n){var r,i,s;return t.doRun(),r=this._clearGlobalState.bind(this,e),s=this._run.bind(this,e,t),i=this._free.bind(this,e,t),this._scheduled[e]={timeout:setTimeout(()=>t.doExecute(this._limiter,r,s,i),n),expiration:null!=t.options.expiration?setTimeout(function(){return t.doExpire(r,s,i)},n+t.options.expiration):void 0,job:t}}_drainOne(e){return this._registerLock.schedule(()=>{var t,n,r,i,s;if(0===this.queued())return this.Promise.resolve(null);s=this._queues.getFirst();var o=r=s.first();return i=o.options,t=o.args,null!=e&&i.weight>e?this.Promise.resolve(null):(this.Events.trigger("debug",`Draining ${i.id}`,{args:t,options:i}),n=this._randomIndex(),this._store.__register__(n,i.weight,i.expiration).then(({success:e,wait:o,reservoir:a})=>{var c;return this.Events.trigger("debug",`Drained ${i.id}`,{success:e,args:t,options:i}),e?(s.shift(),(c=this.empty())&&this.Events.trigger("empty"),0===a&&this.Events.trigger("depleted",c),this._run(n,r,o),this.Promise.resolve(i.weight)):this.Promise.resolve(null)}))})}_drainAll(e,t=0){return this._drainOne(e).then(n=>{var r;return null!=n?(r=null!=e?e-n:e,this._drainAll(r,t+n)):this.Promise.resolve(t)}).catch(e=>this.Events.trigger("error",e))}_dropAllQueued(e){return this._queues.shiftAll(function(t){return t.doDrop({message:e})})}stop(e={}){var t,r;return e=m.load(e,this.stopDefaults),r=e=>{var t;return t=()=>{var t;return(t=this._states.counts)[0]+t[1]+t[2]+t[3]===e},new this.Promise((e,n)=>t()?e():this.on("done",()=>{if(t())return this.removeAllListeners("done"),e()}))},t=e.dropWaitingJobs?(this._run=function(t,n){return n.doDrop({message:e.dropErrorMessage})},this._drainOne=()=>this.Promise.resolve(null),this._registerLock.schedule(()=>this._submitLock.schedule(()=>{var t,n,i;for(t in n=this._scheduled)i=n[t],"RUNNING"===this.jobStatus(i.job.options.id)&&(clearTimeout(i.timeout),clearTimeout(i.expiration),i.job.doDrop({message:e.dropErrorMessage}));return this._dropAllQueued(e.dropErrorMessage),r(0)}))):this.schedule({priority:9,weight:0},()=>r(1)),this._receive=function(t){return t._reject(new n.prototype.BottleneckError(e.enqueueErrorMessage))},this.stop=()=>this.Promise.reject(new n.prototype.BottleneckError("stop() has already been called")),t}_addToQueue(e){var t=this;return s(function*(){var r,i,s,o,a,c,u;r=e.args,o=e.options;try{var l=yield t._store.__submit__(t.queued(),o.weight);a=l.reachedHWM,i=l.blocked,u=l.strategy}catch(n){return s=n,t.Events.trigger("debug",`Could not queue ${o.id}`,{args:r,options:o,error:s}),e.doDrop({error:s}),!1}return i?(e.doDrop(),!0):a&&(null!=(c=u===n.prototype.strategy.LEAK?t._queues.shiftLastFrom(o.priority):u===n.prototype.strategy.OVERFLOW_PRIORITY?t._queues.shiftLastFrom(o.priority+1):u===n.prototype.strategy.OVERFLOW?e:void 0)&&c.doDrop(),null==c||u===n.prototype.strategy.OVERFLOW)?(null==c&&e.doDrop(),a):(e.doQueue(a,i),t._queues.push(e),yield t._drainAll(),a)})()}_receive(e){return null!=this._states.jobStatus(e.options.id)?(e._reject(new n.prototype.BottleneckError(`A job with the same id already exists (id=${e.options.id})`)),!1):(e.doReceive(),this._submitLock.schedule(this._addToQueue,e))}submit(...n){var r,i,s,o,a,u,l,d,h;"function"==typeof n[0]?(u=t(n),i=u[0],n=u.slice(1),l=e(_.call(n,-1),1),r=l[0],o=m.load({},this.jobDefaults)):(o=(d=t(n))[0],i=d[1],n=d.slice(2),h=e(_.call(n,-1),1),r=h[0],o=m.load(o,this.jobDefaults));return a=(...e)=>new this.Promise(function(t,n){return i(...e,function(...e){return(null!=e[0]?n:t)(e)})}),(s=new c(a,n,o,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise)).promise.then(function(e){return"function"==typeof r?r(...e):void 0}).catch(function(e){return Array.isArray(e)?"function"==typeof r?r(...e):void 0:"function"==typeof r?r(e):void 0}),this._receive(s)}schedule(...e){var n,r,i;if("function"==typeof e[0]){var s=t(e);i=s[0],e=s.slice(1),r={}}else{var o=t(e);r=o[0],i=o[1],e=o.slice(2)}return n=new c(i,e,r,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),this._receive(n),n.promise}wrap(e){var t,n;return t=this.schedule.bind(this),(n=function(...n){return t(e.bind(this),...n)}).withOptions=function(n,...r){return t(n,e,...r)},n}updateSettings(e={}){var t=this;return s(function*(){return yield t._store.__updateSettings__(m.overwrite(e,t.storeDefaults)),m.overwrite(e,t.instanceDefaults,t),t})()}currentReservoir(){return this._store.__currentReservoir__()}incrementReservoir(e=0){return this._store.__incrementReservoir__(e)}}return n.default=n,n.Events=a,n.version=n.prototype.version=require$$8.version,n.strategy=n.prototype.strategy={LEAK:1,OVERFLOW:2,OVERFLOW_PRIORITY:4,BLOCK:3},n.BottleneckError=n.prototype.BottleneckError=requireBottleneckError(),n.Group=n.prototype.Group=requireGroup(),n.RedisConnection=n.prototype.RedisConnection=requireRedisConnection(),n.IORedisConnection=n.prototype.IORedisConnection=requireIORedisConnection(),n.Batcher=n.prototype.Batcher=requireBatcher(),n.prototype.jobDefaults={priority:5,weight:1,expiration:null,id:"<no-id>"},n.prototype.storeDefaults={maxConcurrent:null,minTime:0,highWater:null,strategy:n.prototype.strategy.LEAK,penalty:null,reservoir:null,reservoirRefreshInterval:null,reservoirRefreshAmount:null,reservoirIncreaseInterval:null,reservoirIncreaseAmount:null,reservoirIncreaseMaximum:null},n.prototype.localStoreDefaults={Promise:Promise,timeout:null,heartbeatInterval:250},n.prototype.redisStoreDefaults={Promise:Promise,timeout:null,heartbeatInterval:5e3,clientTimeout:1e4,Redis:null,clientOptions:{},clusterNodes:null,clearDatastore:!1,connection:null},n.prototype.instanceDefaults={datastore:"local",connection:null,id:"<no-id>",rejectOnDrop:!0,trackDoneStatus:!1,Promise:Promise},n.prototype.stopDefaults={enqueueErrorMessage:"This limiter has been stopped and cannot accept new jobs.",dropWaitingJobs:!0,dropErrorMessage:"This limiter has been stopped."},n}.call(void 0),Bottleneck_1=o}function requireLib(){return hasRequiredLib?lib:(hasRequiredLib=1,lib=requireBottleneck())}var libExports=requireLib(),Bottleneck=getDefaultExportFromCjs(libExports);const GRANT_TYPE$1="client_credentials",castClientOptionsToRequestParameters=e=>{const{scope:t,clientId:n,clientSecret:r}=e;if(!n)throw new Error('Missing required "clientId" parameter to perform client credentials grant');if(!r)throw new Error('Missing required "clientSecret" parameter to perform client credentials grant');return{client_id:n,client_secret:r,grant_type:GRANT_TYPE$1,...t?{scope:t}:{}}},isEligible$1=e=>{try{return!!castClientOptionsToRequestParameters(e)}catch{return!1}},requestToken$1=(e,t)=>e(castClientOptionsToRequestParameters(t)),RESPONSE_TYPE="token",castToAuthorizationRequestParameters=e=>{const{clientId:t,scope:n,state:r,redirectUri:i}=e;if(!t)throw new Error('Missing required "clientId" parameter to perform implicit grant');return{client_id:t,redirect_uri:i||window.location.href,response_type:RESPONSE_TYPE,...n?{scope:n}:{},...r?{state:r}:{}}},isEligibleForClientRedirect=e=>{try{return!!castToAuthorizationRequestParameters(e)}catch{return!1}},getRedirectUrl=e=>`${e.oauthUrl}/oauth/authorize?${buildQueryString(castToAuthorizationRequestParameters(e))}`,GRANT_TYPE="password",castToTokenRequestParameters=e=>{const{username:t,password:n,scope:r,clientId:i,clientSecret:s}=e;if(!i)throw new Error('Missing required "clientId" parameter to perform password grant');if(!t)throw new Error('Missing required "username" parameter to perform password grant');if(!n)throw new Error('Missing required "password" parameter to perform password grant');return{client_id:i,grant_type:GRANT_TYPE,password:n,username:t,...r?{scope:r}:{},...s?{client_secret:s}:{}}},isEligible=e=>{try{return!!castToTokenRequestParameters(e)}catch{return!1}},requestToken=(e,t)=>e(castToTokenRequestParameters(t));async function maybeUpdateToken(e,t,n,r=!1){if(!r&&e.get("accessToken"))return;const i={...n,refreshToken:e.get("refreshToken")};if(isEligible$2(i))return e.set(await requestToken$2(t,i));if(isEligible(n))return e.set(await requestToken(t,n));if("undefined"!=typeof window&&n.implicit){const t=parseQueryString(window.location.hash).access_token;if(t)return window.history.replaceState({},"",window.location.href.split("#")[0]),e.set({accessToken:t});if(isEligibleForClientRedirect(n))return void(window.location.href=getRedirectUrl(n))}return!r&&isEligible$3(n)?e.set(await requestToken$3(t,n)):n.authorizationRedirect&&isEligibleForClientRedirect$1(n)?n.authorizationRedirect(getRedirectUrl$1(n)):isEligible$1(n)?e.set(await requestToken$1(t,n)):void 0}function sleep(e){return new Promise(t=>setTimeout(()=>t(!0),e))}const requestLogger=makeLogger("REST API Request"),responseLogger=makeLogger("REST API Response"),RETRYABLE_STATUS_CODES=[401,408,429,502,503,504],TOKEN_REFRESH_STATUS_CODES=[401],queue=new Bottleneck({maxConcurrent:QUEUE_CONCURRENCY,minTime:QUEUE_DELAY,reservoir:QUEUE_RESERVOIR}),refillIntervalSet=new Set;function isFormData(e){return void 0!==e&&void 0!==e.formData}function refillReservoir(){if(0===refillIntervalSet.size){const e=setInterval(async()=>{const t=await queue.currentReservoir();return queue.empty()&&0===await queue.running()&&t>10?await queue.incrementReservoir(1)&&clearIntervalFunction(e)&&refillIntervalSet.delete(e):t<QUEUE_RESERVOIR?queue.incrementReservoir(1):clearIntervalFunction(e)&&refillIntervalSet.delete(e)},QUEUE_RESERVOIR_REFILL_INTERVAL);return refillIntervalSet.add(e)}return refillIntervalSet}async function makeResultFromResponse(e){return RETRYABLE_STATUS_CODES.includes(e.status)?e.clone():e.ok?"application/json"!==e.headers.get("content-type")&&204!==e.status?new Error(`Response content type was "${e.headers.get("content-type")}" but expected JSON`):{body:204===e.status?"":await e.json(),status:e.status}:new Error(`${e.status} ${e.statusText}\n\n${await e.text()}`)}function responseWasSuccessful(e){return!RETRYABLE_STATUS_CODES.includes(e.status)}function makeApiRequest(e,t,n,r,i,s,o){return async(a,c)=>{if(c>0){if(c>n.requestMaxRetries){const e=`Maximum number of retries reached while retrying ${a.method} request ${a.path}.`;throw requestLogger.error(e),new Error(e)}requestLogger.warn(`Warning: encountered ${a.status}. Retrying ${a.method} request ${a.path} (retry #${c}).`),await sleep(Math.ceil(Math.random()*n.requestBackOffInterval*2**c))}await maybeUpdateToken(e,t,n,c>0&&TOKEN_REFRESH_STATUS_CODES.includes(a.status));const u=s?.query?(i.includes("?")?"&":"?")+buildQueryString(s.query):"",l=`${n.apiUrl}/api${i}${u}`;if(!e.get("accessToken"))throw new Error(`Unable to get OAuth2 access token. Error trying to call endpoint: ${l}`);try{return refillReservoir()&&await queue.schedule(async()=>{const t=r.toUpperCase(),i=s?.body,a=isFormData(i),c=isFormData(i)?i.formData:{},u=Object.entries(c).reduce((e,[t,n])=>{if(Array.isArray(n)){const[r,i]=n,s=r instanceof Blob?r:new Blob([r]);e.append(t,s,i)}else e.append(t,n);return e},new FormData),d={accept:"application/json",authorization:`Bearer ${e.get("accessToken")}`,"X-Allthings-Caller":`${n.serviceName?n.serviceName:process.env.SEVICE_NAME?process.env.SEVICE_NAME:"unknown service name"} --- clientID ${n.clientId?.split("_")[0]??n.clientId??"no client id present"}`,...a?{}:{"content-type":"application/json"},..."undefined"==typeof window&&"undefined"==typeof document&&{"user-agent":USER_AGENT},...s?.headers};process.env.LOG_REQUEST&&console.log({sdkLogs:{method:t,url:l}}),requestLogger.log(t,l,{body:i,headers:d});const h={body:a?u:JSON.stringify(i)},p=await fetch(l,{cache:"no-cache",credentials:"omit",headers:d,method:t,mode:"cors",...a||i?h:{}}),m=await makeResultFromResponse(p);return responseLogger.log(t,l,m instanceof Error?{error:m}:{body:m.body,status:p.status}),m instanceof Error&&o?{body:m.message,status:p.status}:m})}catch(e){return e}}}async function request(e,t,n,r,i,s,o){const a=await until(responseWasSuccessful,makeApiRequest(e,t,n,r,i,s,o));if(a instanceof Error)throw requestLogger.log("Request Error",a,s),a;return o?a:a.body}const API_METHODS=[agentCreate,agentCreatePermissions,appCreate,appGetById,bucketCreate,bucketAddFile,bucketRemoveFile,bucketRemoveFilesInPath,bucketGet,conversationGetById,conversationCreateMessage,fileCreate,fileDelete,notificationSettingsResetByUser,notificationSettingsUpdateByUser,groupCreate,groupGetById,groupUpdateById,getGroups,lookupIds,notificationsGetByUser,notificationUpdateRead,notificationsUpdateReadByUser,propertyCreate,propertyGetById,propertyUpdateById,getProperties,serviceProviderCreate,serviceProviderGetById,serviceProviderUpdateById,registrationCodeCreate,registrationCodeUpdateById,registrationCodeDelete,registrationCodeGetById,ticketCreateOnUser,ticketCreateOnServiceProvider,ticketGetById,unitCreate,unitGetById,unitUpdateById,getUnits,userCreate,userGetById,userUpdateById,userChangePassword,userCreatePermission,userCreatePermissionBatch,userGetPermissions,userDeletePermission,userCheckInToUtilisationPeriod,userGetUtilisationPeriods,userGetByEmail,getCurrentUser,getUsers,userRelationCreate,userRelationDelete,userRelationsGetByUser,utilisationPeriodCreate,utilisationPeriodDelete,utilisationPeriodGetById,utilisationPeriodUpdateById,utilisationPeriodCheckInUser,utilisationPeriodCheckOutUser,utilisationPeriodAddRegistrationCode,bookingUpdateById,bookingGetById];function restClient(e=DEFAULT_API_WRAPPER_OPTIONS){const t={...DEFAULT_API_WRAPPER_OPTIONS,...e};if(void 0===t.apiUrl)throw new Error("API URL is undefined.");if(void 0===t.oauthUrl)throw new Error("OAuth2 URL is undefined.");if(!t.clientId&&!t.accessToken&&!t.tokenStore&&"undefined"==typeof window)throw new Error('Missing required "clientId" or "accessToken" parameter .');const n=makeFetchTokenRequester(`${t.oauthUrl}/oauth/token`),r=t.tokenStore||createTokenStore({accessToken:t.accessToken,refreshToken:t.refreshToken}),i=partial(request,r,n,t),s=partial(del,i),o=partial(get,i),a=partial(post,i),c=partial(patch,i),u=partial(put,i),l={authorizationCode:{getUri:(e=t.state||pseudoRandomString())=>partial(getRedirectUrl$1,{...t,state:e})(),requestToken:e=>requestAndSaveToStore(partial(requestToken$3,n,{...t,authorizationCode:e||t.authorizationCode}),r)},generateState:pseudoRandomString,refreshToken:e=>requestAndSaveToStore(partial(requestToken$2,n,{...t,refreshToken:e||r.get("refreshToken")}),r)},d=API_METHODS.reduce((e,t)=>({...e,[t.name]:(...e)=>t(d,...e)}),{delete:s,get:o,oauth:l,options:t,patch:c,post:a,put:u});return d}var EnumResource,EnumCountryCode,EnumLocale,EnumTimezone,EnumServiceProviderType,EnumCommunicationMethodType,EnumInputChannel,EnumLookupUserType;exports.EnumResource=void 0,EnumResource=exports.EnumResource||(exports.EnumResource={}),EnumResource.group="group",EnumResource.property="property",EnumResource.serviceProvider="propertyManager",EnumResource.registrationCode="registrationCode",EnumResource.unit="unit",EnumResource.user="user",EnumResource.utilisationPeriod="utilisationPeriod",exports.EnumCountryCode=void 0,EnumCountryCode=exports.EnumCountryCode||(exports.EnumCountryCode={}),EnumCountryCode.CH="CH",EnumCountryCode.DE="DE",EnumCountryCode.FR="FR",EnumCountryCode.IT="IT",EnumCountryCode.NL="NL",EnumCountryCode.PT="PT",EnumCountryCode.US="US",exports.EnumLocale=void 0,EnumLocale=exports.EnumLocale||(exports.EnumLocale={}),EnumLocale.ch_de="ch_DE",EnumLocale.ch_fr="ch_FR",EnumLocale.ch_it="ch_it",EnumLocale.de_DE="de_DE",EnumLocale.it_IT="it_IT",EnumLocale.fr_FR="fr_FR",EnumLocale.pt_PT="pt_PT",EnumLocale.en_US="en_US",exports.EnumTimezone=void 0,EnumTimezone=exports.EnumTimezone||(exports.EnumTimezone={}),EnumTimezone.EuropeBerlin="Europe/Berlin",EnumTimezone.EuropeLondon="Europe/London",EnumTimezone.EuropeSofia="Europe/Sofia",EnumTimezone.EuropeZurich="Europe/Zurich",EnumTimezone.UTC="UTC",exports.EnumServiceProviderType=void 0,EnumServiceProviderType=exports.EnumServiceProviderType||(exports.EnumServiceProviderType={}),EnumServiceProviderType.propertyManager="property-manager",EnumServiceProviderType.craftspeople="craftspeople",exports.EnumCommunicationMethodType=void 0,EnumCommunicationMethodType=exports.EnumCommunicationMethodType||(exports.EnumCommunicationMethodType={}),EnumCommunicationMethodType.email="email",exports.EnumInputChannel=void 0,EnumInputChannel=exports.EnumInputChannel||(exports.EnumInputChannel={}),EnumInputChannel.APP="app",EnumInputChannel.COCKPIT="cockpit",EnumInputChannel.CRAFTSMEN="craftsmen",EnumInputChannel.EMAIL="email",EnumInputChannel.PHONE="phone",EnumInputChannel.WHATS_APP="whats_app",exports.EnumLookupUserType=void 0,EnumLookupUserType=exports.EnumLookupUserType||(exports.EnumLookupUserType={}),EnumLookupUserType.agent="agent",EnumLookupUserType.tenant="tenant",exports.createTokenStore=createTokenStore,exports.restClient=restClient});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).allthings={})}(this,function(exports){"use strict";function createTokenStore(e){const t=new Map(Object.entries(e||{}));return{get:e=>t.get(e),reset:()=>t.clear(),set:e=>Object.entries(e).forEach(([e,n])=>t.set(e,n))}}const version$1="9.1.0",REST_API_URL="https://api.allthings.me",OAUTH_URL="https://accounts.allthings.me",QUEUE_CONCURRENCY=void 0,QUEUE_DELAY=0,QUEUE_RESERVOIR=30,QUEUE_RESERVOIR_REFILL_INTERVAL=166,REQUEST_BACK_OFF_INTERVAL=200,REQUEST_MAX_RETRIES=50,DEFAULT_API_WRAPPER_OPTIONS={apiUrl:process.env.ALLTHINGS_REST_API_URL||REST_API_URL,clientId:process.env.ALLTHINGS_OAUTH_CLIENT_ID,clientSecret:process.env.ALLTHINGS_OAUTH_CLIENT_SECRET,oauthUrl:process.env.ALLTHINGS_OAUTH_URL||OAUTH_URL,password:process.env.ALLTHINGS_OAUTH_PASSWORD,requestBackOffInterval:REQUEST_BACK_OFF_INTERVAL,requestMaxRetries:REQUEST_MAX_RETRIES,scope:"user:profile",username:process.env.ALLTHINGS_OAUTH_USERNAME},USER_AGENT=`Allthings Node SDK REST Client/${version$1}`;function buildQueryString(e){const t=new URLSearchParams;for(const[n,r]of Object.entries(e).sort(([e],[t])=>e.localeCompare(t)))null!=r&&""!==r&&t.append(n,String(r));return t.toString()}function parseQueryString(e){const t=e.startsWith("#")?e.slice(1):e;return Object.fromEntries(new URLSearchParams(t))}const RESPONSE_TYPE$1="code",GRANT_TYPE$3="authorization_code",castToAuthorizationRequestParameters$1=e=>{const{redirectUri:t,clientId:n,scope:r,state:i}=e;if(!n)throw new Error('Missing required "clientId" parameter to perform authorization code grant redirect');if(!t)throw new Error('Missing required "redirectUri" parameter to perform authorization code grant redirect');return{client_id:n,redirect_uri:t,response_type:RESPONSE_TYPE$1,...r?{scope:r}:{},...i?{state:i}:{}}},isEligibleForClientRedirect$1=e=>{try{return!!castToAuthorizationRequestParameters$1(e)}catch{return!1}},getRedirectUrl$1=e=>`${e.oauthUrl}/oauth/authorize?${buildQueryString(castToAuthorizationRequestParameters$1(e))}`,castToTokenRequestParameters$2=e=>{const{authorizationCode:t,redirectUri:n,clientId:r,clientSecret:i}=e;if(!r)throw new Error('Missing required "clientId" parameter to perform authorization code grant');if(!n)throw new Error('Missing required "redirectUri" parameter to perform authorization code grant');if(!t)throw new Error('Missing required "authorizationCode" parameter to perform authorization code grant');return{client_id:r,code:t,grant_type:GRANT_TYPE$3,redirect_uri:n,...i?{client_secret:i}:{}}},isEligible$3=e=>{try{return!!castToTokenRequestParameters$2(e)}catch{return!1}},requestToken$3=(e,t)=>e(castToTokenRequestParameters$2(t)),SUBSCRIPTIONS=process.env.DEBUG?.split(",").map(e=>e.trim())||[];function makeLogger(e){return["log","info","warn","error"].reduce((t,n)=>({...t,[n]:function(...t){return(SUBSCRIPTIONS.includes("*")||SUBSCRIPTIONS.includes(e)||SUBSCRIPTIONS.includes(e.toLocaleLowerCase()))&&console[n](`${e}:`,...t),!0}}),{})}const logger=makeLogger("OAuth Token Request"),makeFetchTokenRequester=e=>async t=>{try{const n=await fetch(e,{body:buildQueryString(t),cache:"no-cache",credentials:"omit",headers:{"Content-Type":"application/x-www-form-urlencoded",accept:"application/json","user-agent":USER_AGENT},method:"POST",mode:"cors"});if(200!==n.status)throw n;const{access_token:r,refresh_token:i,expires_in:s}=await n.json();return{accessToken:r,expiresIn:s,refreshToken:i}}catch(e){if(!(e instanceof Response))throw e;const t=`HTTP ${e.status} — ${e.statusText}`;throw logger.error(t,e),new Error(`HTTP ${e.status} — ${e.statusText}. Could not get token.`)}},GRANT_TYPE$2="refresh_token",castToTokenRequestParameters$1=e=>{const{clientId:t,clientSecret:n,refreshToken:r,scope:i}=e;if(!t)throw new Error('Missing required "clientId" parameter to perform refresh token grant');if(!r)throw new Error('Missing required "refreshToken" parameter to perform refresh token grant');return{client_id:t,grant_type:GRANT_TYPE$2,refresh_token:r,...n?{client_secret:n}:{},...i?{scope:i}:{}}},isEligible$2=e=>{try{return!!castToTokenRequestParameters$1(e)}catch{return!1}},requestToken$2=(e,t)=>e(castToTokenRequestParameters$1(t));async function requestAndSaveToStore(e,t){const n=await e();return t.set(n),n}const partial=(e,...t)=>(...n)=>e(...t,...n);async function until(e,t,n,r=0){const i=await t(n,r);return await e(i,r)?i:until(e,t,i,r+1)}function clearIntervalFunction(e){return clearInterval(e),!0}function pseudoRandomString(e=16){let t="";for(;t.length<e;)t+=Math.random().toString(36).slice(2);return t.slice(0,Math.max(0,e))}async function del(e,t,n,r,i){return e("delete",t,{body:n,headers:i},r)}async function get(e,t,n,r,i){return e("get",t,{headers:i,query:n},r)}var EnumGender,EnumUserType,EnumCommunicationPreferenceChannel,EnumUserPermissionRole,EnumUserPermissionObjectType;!function(e){e.female="female",e.male="male"}(EnumGender||(EnumGender={})),function(e){e.allthingsUser="allthings_user",e.allthingsContent="allthings_content",e.customer="customer",e.demoContent="demo_content",e.demoPublic="demo_public",e.partner="partner"}(EnumUserType||(EnumUserType={})),exports.EnumCommunicationPreferenceChannel=void 0,EnumCommunicationPreferenceChannel=exports.EnumCommunicationPreferenceChannel||(exports.EnumCommunicationPreferenceChannel={}),EnumCommunicationPreferenceChannel.push="push",EnumCommunicationPreferenceChannel.email="email",exports.EnumUserPermissionRole=void 0,EnumUserPermissionRole=exports.EnumUserPermissionRole||(exports.EnumUserPermissionRole={}),EnumUserPermissionRole.appAdmin="app-admin",EnumUserPermissionRole.appOwner="app-owner",EnumUserPermissionRole.articlesAgent="articles-agent",EnumUserPermissionRole.articlesViewOnly="articles-view-only",EnumUserPermissionRole.bookableAssetAgent="bookable-asset-agent",EnumUserPermissionRole.bookingAgent="booking-agent",EnumUserPermissionRole.cockpitManager="cockpit-manager",EnumUserPermissionRole.dataConnectorAdmin="data-connector-admin",EnumUserPermissionRole.documentAdmin="doc-admin",EnumUserPermissionRole.externalAgent="external-agent",EnumUserPermissionRole.globalOrgAdmin="global-org-admin",EnumUserPermissionRole.globalUserAdmin="global-user-admin",EnumUserPermissionRole.orgAdmin="org-admin",EnumUserPermissionRole.orgTeamManager="org-team-manager",EnumUserPermissionRole.pinboardAgent="pinboard-agent",EnumUserPermissionRole.platformOwner="platform-owner",EnumUserPermissionRole.qa="qa",EnumUserPermissionRole.serviceCenterAgent="service-center-agent",EnumUserPermissionRole.serviceCenterManager="service-center-manager",EnumUserPermissionRole.setup="setup",EnumUserPermissionRole.tenantManager="tenant-manager",exports.EnumUserPermissionObjectType=void 0,EnumUserPermissionObjectType=exports.EnumUserPermissionObjectType||(exports.EnumUserPermissionObjectType={}),EnumUserPermissionObjectType.app="App",EnumUserPermissionObjectType.group="Group",EnumUserPermissionObjectType.property="Property",EnumUserPermissionObjectType.unit="Unit";const remapUserResult=e=>{const{tenantIDs:t,...n}=e;return{...n,tenantIds:t}},remapEmbeddedUser=e=>e.users?e.users.map(remapUserResult):[];async function userCreate(e,t,n,r){return e.post("/v1/users",{...r,creationContext:t,username:n})}async function getUsers(e,t=1,n=-1,r={}){const{_embedded:{items:i},total:s}=await e.get("/v1/users",{filter:JSON.stringify(r),limit:n,page:t});return{_embedded:{items:i.map(remapUserResult)},total:s}}async function getCurrentUser(e){return remapUserResult(await e.get("/v1/me"))}async function userGetById(e,t){return remapUserResult(await e.get(`/v1/users/${t}`))}async function userUpdateById(e,t,n){const{tenantIds:r,...i}=n;return remapUserResult(await e.patch(`/v1/users/${t}`,{...i,tenantIDs:r}))}async function userCreatePermission(e,t,n){const{objectId:r,...i}=n,{objectID:s,...o}=await e.post(`/v1/users/${t}/permissions`,{...i,objectID:r});return{...o,objectId:s}}async function userCreatePermissionBatch(e,t,n){const{objectId:r,objectType:i,roles:s,startDate:o,endDate:a}=n,c={batch:s.map(e=>({endDate:a?.toISOString(),objectID:r,objectType:i,restrictions:[],role:e,startDate:o?.toISOString()}))};return!await e.post(`/v1/users/${t}/permissions`,c)}async function userGetPermissions(e,t){const{_embedded:{items:n}}=await e.get(`/v1/users/${t}/roles?limit=-1`);return n.map(({objectID:e,...t})=>({...t,objectId:e}))}async function userDeletePermission(e,t){return!await e.delete(`/v1/permissions/${t}`)}async function userGetUtilisationPeriods(e,t){const{_embedded:{items:n}}=await e.get(`/v1/users/${t}/utilisation-periods`);return n}async function userCheckInToUtilisationPeriod(e,t,n){const{email:r}=await e.userGetById(t);return e.utilisationPeriodCheckInUser(n,{email:r})}async function userGetByEmail(e,t,n=1,r=1e3){return e.getUsers(n,r,{email:t})}async function userChangePassword(e,t,n,r){return!await e.put(`/v1/users/${t}/password`,{currentPassword:n,plainPassword:r})}async function agentCreate(e,t,n,r,i,s,o){const a=await e.userCreate(t,r,{...i,type:EnumUserType.customer}),c=await e.post(`/v1/property-managers/${n}/users`,{userID:a.id,...o&&{externalAgentCompany:o}});return!((void 0===s||s)&&await e.post(`/v1/users/${a.id}/invitations`))&&{...a,...c}}async function agentCreatePermissions(e,t,n,r,i,s,o){return e.userCreatePermissionBatch(t,{endDate:o,objectId:n,objectType:r,restrictions:[],roles:i,startDate:s})}async function appCreate(e,t,n){return e.post(`/v1/users/${t}/apps`,{availableLocales:{0:"de_DE"},...n,siteUrl:n.siteUrl.replace("_","")})}async function appGetById(e,t){return e.get(`/v1/apps/${t}`)}async function bookingGetById(e,t){return e.get(`/v1/bookings/${t}`)}async function bookingUpdateById(e,t,n){return e.patch(`/v1/bookings/${t}`,n)}async function bucketGet(e,t){return e.get(`/v1/buckets/${t}`)}async function bucketCreate(e,t){return e.post("/v1/buckets",{channels:t.channels,name:t.name})}async function bucketAddFile(e,t,n){return""===await e.post(`/v1/buckets/${t}/files`,{id:n})}async function bucketRemoveFile(e,t,n){return""===await e.delete(`/v1/buckets/${t}/files/${n}`)}async function bucketRemoveFilesInPath(e,t,n){return""===await e.delete(`/v1/buckets/${t}/files`,{folder:n.path})}const createManyFiles=async(e,t)=>await Promise.all(e.map(async e=>{try{return await t.fileCreate({file:e.content,name:e.filename})}catch(e){return e instanceof Error?e:new Error(String(e))}}));async function createManyFilesSorted(e,t){const n=await createManyFiles(e,t);return{error:n.filter(e=>e instanceof Error),success:n.filter(e=>!(e instanceof Error)).map(e=>e.id)}}async function conversationGetById(e,t){return e.get(`/v1/conversations/${t}`)}async function conversationCreateMessage(e,t,n){const r=`/v1/conversations/${t}/messages`,i=n.attachments?.length?{content:{description:n.body,files:(await createManyFilesSorted(n.attachments,e)).success},createdBy:n.createdBy,inputChannel:n.inputChannel,internal:!1,type:"file"}:{content:{content:n.body},createdBy:n.createdBy,inputChannel:n.inputChannel,type:"text"};return e.post(r,i)}async function fileCreate(e,t){return e.post("/v1/files",{formData:{file:[t.file,t.name],path:t.path||""}})}async function fileDelete(e,t){return""===await e.delete(`/v1/files/${t}`)}async function groupCreate(e,t,n){const{propertyManagerId:r,...i}=n;return e.post(`/v1/properties/${t}/groups`,{...i,propertyManagerID:r})}async function groupGetById(e,t){const{propertyManagerID:n,...r}=await e.get(`/v1/groups/${t}`);return{...r,propertyManagerId:n}}async function groupUpdateById(e,t,n){return e.patch(`/v1/groups/${t}`,n)}async function getGroups(e,t=1,n=-1,r={}){const{_embedded:{items:i},total:s}=await e.get("/v1/groups",{filter:JSON.stringify(r),limit:n,page:t});return{_embedded:{items:i},total:s}}async function lookupIds(e,t,n){const r=n.dataSource?`/v1/id-lookup/${t}/${n.resource}/${n.dataSource}`:`/v1/id-lookup/${t}/${n.resource}`;return e.post(r,{externalIds:"string"==typeof n.externalIds?[n.externalIds]:n.externalIds,...n.parentId?{parentId:n.parentId}:{},...n.userType?{userType:n.userType}:{}})}function stringToDate(e){return new Date(Date.parse(e))}function dateToString(e){return e.toISOString()}var EnumNotificationCategory,EnumNotificationType,EnumNotificationSettingsValue;function remapNotificationResult({createdAt:e,objectID:t,referencedObjectID:n,...r}){return{createdAt:stringToDate(e),objectId:t,referencedObjectId:n,...r}}async function notificationsGetByUser(e,t,n=1,r=-1){const{_embedded:{items:i},total:s,metaData:o}=await e.get(`/v1/users/${t}/notifications?page=${n}&limit=${r}`);return{_embedded:{items:i.map(remapNotificationResult)},metaData:o,total:s}}async function notificationsUpdateReadByUser(e,t,n=new Date){return e.patch(`/v1/users/${t}/notifications`,{lastReadAt:dateToString(n)})}async function notificationUpdateRead(e,t){return remapNotificationResult(await e.patch(`/v1/notifications/${t}`,{read:!0}))}function remapKeys(e,t){return Object.entries(e).reduce((e,n)=>({...e,[t(n[0])]:n[1]}),{})}function camelCaseToDash(e){return e.replace(/([A-Z])/g,e=>`-${e[0].toLowerCase()}`)}function dashCaseToCamel(e){return e.replace(/-([a-z])/g,e=>e[1].toUpperCase())}async function notificationSettingsUpdateByUser(e,t,n){const r=await e.patch(`/v1/users/${t}/notification-settings`,{notificationSettings:remapKeys(n,camelCaseToDash)});return remapKeys(r,dashCaseToCamel)}async function notificationSettingsResetByUser(e,t){return remapKeys(await e.delete(`/v1/users/${t}/notification-settings`),dashCaseToCamel)}async function propertyCreate(e,t,n){return e.post(`/v1/apps/${t}/properties`,n)}async function propertyGetById(e,t){return e.get(`/v1/properties/${t}`)}async function propertyUpdateById(e,t,n){return e.patch(`/v1/properties/${t}`,n)}async function getProperties(e,t=1,n=-1,r={}){const{_embedded:{items:i},total:s}=await e.get("/v1/properties",{filter:JSON.stringify(r),limit:n,page:t});return{_embedded:{items:i},total:s}}!function(e){e.events="events",e.hintsAndTips="hints-and-tips",e.lostAndFound="lost-and-found",e.localDeals="local-deals",e.localEvents="local-events",e.miscellaneous="miscellaneous",e.deals="deals",e.messages="messages",e.adminMessages="admin-messages",e.newThingsToGive="new-things-to-give",e.newThingsForSale="new-things-for-sale",e.surveys="surveys",e.supportOffer="support-offer",e.supportRequest="support-request",e.sustainability="sustainability",e.localServices="local-services",e.services="services",e.ticketDigestEmail="ticket-digest-email",e.appDigestEmail="app-digest-email",e.newFile="new-file"}(EnumNotificationCategory||(EnumNotificationCategory={})),function(e){e.clipboardThing="clipboard-thing",e.comment="comment",e.communityArticle="community-article",e.newFile="new-file",e.ticketComment="ticket-comment",e.welcomeNotification="welcome-notification"}(EnumNotificationType||(EnumNotificationType={})),function(e){e.never="never",e.immediately="immediately",e.daily="daily",e.weekly="weekly",e.biweekly="biweekly",e.monthly="monthly"}(EnumNotificationSettingsValue||(EnumNotificationSettingsValue={}));const remapRegistationCodeResult=e=>{const{tenantID:t,...n}=e;return{...n,externalId:t}};async function registrationCodeCreate(e,t,n,r={permanent:!1}){const{externalId:i,...s}=r;return remapRegistationCodeResult(await e.post("/v1/registration-codes",{code:t,utilisationPeriods:"string"==typeof n?[n]:n,...i?{externalId:i,tenantID:i}:{},...s}))}async function registrationCodeUpdateById(e,t,n){return remapRegistationCodeResult(await e.patch(`/v1/registration-codes/${t}`,n))}async function registrationCodeGetById(e,t){return remapRegistationCodeResult(await e.get(`/v1/invitations/${t}`))}async function registrationCodeDelete(e,t){return""===await e.delete(`/v1/invitations/${t}`)}async function serviceProviderCreate(e,t){return e.post("/v1/service-providers",t)}async function serviceProviderGetById(e,t){return e.get(`/v1/service-providers/${t}`)}async function serviceProviderUpdateById(e,t,n){return e.patch(`/v1/service-providers/${t}`,n)}var ETicketStatus,ETrafficLightColor,EnumUnitObjectType,EnumUnitType,EnumUserRelationType,EnumUtilisationPeriodType;async function ticketGetById(e,t){return e.get(`/v1/tickets/${t}`)}async function ticketCreateOnUser(e,t,n,r){return e.post(`/v1/users/${t}/tickets`,{...r,files:r.files?(await createManyFilesSorted(r.files,e)).success:[],utilisationPeriod:n})}async function ticketCreateOnServiceProvider(e,t,n){return e.post(`/v1/property-managers/${t}/tickets`,{...n,files:n.files?(await createManyFilesSorted(n.files,e)).success:[]})}async function unitCreate(e,t,n){return e.post(`/v1/groups/${t}/units`,n)}async function unitGetById(e,t){return e.get(`/v1/units/${t}`)}async function unitUpdateById(e,t,n){return e.patch(`/v1/units/${t}`,n)}async function getUnits(e,t=1,n=-1,r={}){const{_embedded:{items:i},total:s}=await e.get("/v1/units",{filter:JSON.stringify(r),limit:n,page:t});return{_embedded:{items:i},total:s}}async function userRelationCreate(e,t,n){return e.post(`/v1/users/${t}/user-relations/${n.type}`,{ids:n.ids,level:n.level,readOnly:n.readOnly,role:n.role})}async function userRelationDelete(e,t,n){return e.delete(`/v1/users/${t}/user-relations/${n.type}`,{ids:n.ids,level:n.level,role:n.role})}async function userRelationsGetByUser(e,t){return e.get(`/v1/users/${t}/user-relations`)}async function utilisationPeriodCreate(e,t,n){const{tenantIDs:r,_embedded:i,...s}=await e.post(`/v1/units/${t}/utilisation-periods`,n);return{...s,invitations:i.invitations.map(remapRegistationCodeResult),tenantIds:r,users:remapEmbeddedUser(i)}}async function utilisationPeriodGetById(e,t){const{tenantIDs:n,_embedded:r,...i}=await e.get(`/v1/utilisation-periods/${t}`);return{...i,invitations:r.invitations.map(remapRegistationCodeResult),tenantIds:n,users:remapEmbeddedUser(r)}}async function utilisationPeriodUpdateById(e,t,n){const{tenantIDs:r,_embedded:i,...s}=await e.patch(`/v1/utilisation-periods/${t}`,n);return{...s,invitations:i.invitations.map(remapRegistationCodeResult),tenantIds:r,users:remapEmbeddedUser(i)}}async function utilisationPeriodDelete(e,t){return!await e.delete(`/v1/utilisation-periods/${t}/soft`)}async function utilisationPeriodCheckInUser(e,t,n){return await e.post(`/v1/utilisation-periods/${t}/users`,{email:n.email})&&e.utilisationPeriodGetById(t)}async function utilisationPeriodCheckOutUser(e,t,n){return""===await e.delete(`/v1/utilisation-periods/${t}/users/${n}`)}async function utilisationPeriodAddRegistrationCode(e,t,n,r,i=!1){return e.post(`/v1/utilisation-periods/${t}/registration-codes`,{code:n,permanent:i,tenant:r})}async function patch(e,t,n,r,i){return e("patch",t,{body:n,headers:i},r)}async function post(e,t,n,r,i){return e("post",t,{body:n,headers:i},r)}async function put(e,t,n,r,i){return e("put",t,{body:n,headers:i},r)}function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}!function(e){e.CLOSED="closed",e.WAITING_FOR_AGENT="waiting-for-agent",e.WAITING_FOR_CUSTOMER="waiting-for-customer",e.WAITING_FOR_EXTERNAL="waiting-for-external"}(ETicketStatus||(ETicketStatus={})),function(e){e.GREEN="green",e.RED="red",e.YELLOW="yellow"}(ETrafficLightColor||(ETrafficLightColor={})),exports.EnumUnitObjectType=void 0,EnumUnitObjectType=exports.EnumUnitObjectType||(exports.EnumUnitObjectType={}),EnumUnitObjectType.adjoiningRoom="adjoining-room",EnumUnitObjectType.advertisingSpace="advertising-space",EnumUnitObjectType.aerial="aerial",EnumUnitObjectType.apartmentBuilding="apartment-building",EnumUnitObjectType.atm="atm",EnumUnitObjectType.atmRoom="atm-room",EnumUnitObjectType.attic="attic",EnumUnitObjectType.atticFlat="attic-flat",EnumUnitObjectType.bank="bank",EnumUnitObjectType.basment="basment",EnumUnitObjectType.bikeShed="bike-shed",EnumUnitObjectType.buildingLaw="building-law",EnumUnitObjectType.cafeteria="cafeteria",EnumUnitObjectType.caretakerRoom="caretaker-room",EnumUnitObjectType.carport="carport",EnumUnitObjectType.cellar="cellar",EnumUnitObjectType.commercialProperty="commercial-property",EnumUnitObjectType.commonRoom="common-room",EnumUnitObjectType.deliveryZone="delivery-zone",EnumUnitObjectType.diverse="diverse",EnumUnitObjectType.doubleParkingSpace="double-parking-space",EnumUnitObjectType.engineeringRoom="engineering-room",EnumUnitObjectType.entertainment="entertainment",EnumUnitObjectType.environment="environment",EnumUnitObjectType.estate="estate",EnumUnitObjectType.fillingStation="filling-station",EnumUnitObjectType.fitnessCenter="fitness-center",EnumUnitObjectType.flat="flat",EnumUnitObjectType.freeZone="free-zone",EnumUnitObjectType.garage="garage",EnumUnitObjectType.garden="garden",EnumUnitObjectType.gardenFlat="garden-flat",EnumUnitObjectType.heatingFacilities="heating-facilities",EnumUnitObjectType.hotel="hotel",EnumUnitObjectType.incidentalRentalExpenses="incidental-rental-expenses",EnumUnitObjectType.industry="industry",EnumUnitObjectType.kiosk="kiosk",EnumUnitObjectType.kitchen="kitchen",EnumUnitObjectType.loft="loft",EnumUnitObjectType.machine="machine",EnumUnitObjectType.maisonette="maisonette",EnumUnitObjectType.medicalPractice="medical-practice",EnumUnitObjectType.mopedShed="moped-shed",EnumUnitObjectType.motorcycleParkingSpace="motorcycle-parking-space",EnumUnitObjectType.office="office",EnumUnitObjectType.oneFamilyHouse="one-family-house",EnumUnitObjectType.parkingBox="parking-box",EnumUnitObjectType.parkingGarage="parking-garage",EnumUnitObjectType.parkingSpace="parking-space",EnumUnitObjectType.parkingSpaces="parking-spaces",EnumUnitObjectType.penthouse="penthouse",EnumUnitObjectType.productionPlant="production-plant",EnumUnitObjectType.pub="pub",EnumUnitObjectType.publicArea="public-area",EnumUnitObjectType.restaurant="restaurant",EnumUnitObjectType.retirementHome="retirement-home",EnumUnitObjectType.salesFloor="sales-floor",EnumUnitObjectType.school="school",EnumUnitObjectType.shelter="shelter",EnumUnitObjectType.storage="storage",EnumUnitObjectType.store="store",EnumUnitObjectType.storeroom="storeroom",EnumUnitObjectType.studio="studio",EnumUnitObjectType.terrace="terrace",EnumUnitObjectType.toilets="toilets",EnumUnitObjectType.utilityRoom="utility-room",EnumUnitObjectType.variableParkingSpace="variable-parking-space",EnumUnitObjectType.variableRoom="variable-room",EnumUnitObjectType.visitorParkingSpace="visitor-parking-space",EnumUnitObjectType.workshop="workshop",exports.EnumUnitType=void 0,EnumUnitType=exports.EnumUnitType||(exports.EnumUnitType={}),EnumUnitType.rented="rented",EnumUnitType.owned="owned",exports.EnumUserRelationType=void 0,EnumUserRelationType=exports.EnumUserRelationType||(exports.EnumUserRelationType={}),EnumUserRelationType.isResponsible="is-responsible",exports.EnumUtilisationPeriodType=void 0,EnumUtilisationPeriodType=exports.EnumUtilisationPeriodType||(exports.EnumUtilisationPeriodType={}),EnumUtilisationPeriodType.tenant="tenant",EnumUtilisationPeriodType.ownership="ownership",EnumUtilisationPeriodType.vacant="vacant";var parser={},hasRequiredParser,DLList_1,hasRequiredDLList,Events_1,hasRequiredEvents,Queues_1,hasRequiredQueues,BottleneckError_1,hasRequiredBottleneckError,Job_1,hasRequiredJob,LocalDatastore_1,hasRequiredLocalDatastore;function requireParser(){return hasRequiredParser||(hasRequiredParser=1,parser.load=function(e,t,n={}){var r,i,s;for(r in t)s=t[r],n[r]=null!=(i=e[r])?i:s;return n},parser.overwrite=function(e,t,n={}){var r,i;for(r in e)i=e[r],void 0!==t[r]&&(n[r]=i);return n}),parser}function requireDLList(){return hasRequiredDLList?DLList_1:(hasRequiredDLList=1,DLList_1=class{constructor(e,t){this.incr=e,this.decr=t,this._first=null,this._last=null,this.length=0}push(e){var t;this.length++,"function"==typeof this.incr&&this.incr(),t={value:e,prev:this._last,next:null},null!=this._last?(this._last.next=t,this._last=t):this._first=this._last=t}shift(){var e;if(null!=this._first)return this.length--,"function"==typeof this.decr&&this.decr(),e=this._first.value,null!=(this._first=this._first.next)?this._first.prev=null:this._last=null,e}first(){if(null!=this._first)return this._first.value}getArray(){var e,t,n;for(e=this._first,n=[];null!=e;)n.push((t=e,e=e.next,t.value));return n}forEachShift(e){var t;for(t=this.shift();null!=t;)e(t),t=this.shift()}debug(){var e,t,n,r,i;for(e=this._first,i=[];null!=e;)i.push((t=e,e=e.next,{value:t.value,prev:null!=(n=t.prev)?n.value:void 0,next:null!=(r=t.next)?r.value:void 0}));return i}})}function requireEvents(){if(hasRequiredEvents)return Events_1;function e(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=t.apply(n,r);function a(t){e(o,i,s,a,c,"next",t)}function c(t){e(o,i,s,a,c,"throw",t)}a(void 0)})}}var n;return hasRequiredEvents=1,n=class{constructor(e){if(this.instance=e,this._events={},null!=this.instance.on||null!=this.instance.once||null!=this.instance.removeAllListeners)throw new Error("An Emitter already exists for this object");this.instance.on=(e,t)=>this._addListener(e,"many",t),this.instance.once=(e,t)=>this._addListener(e,"once",t),this.instance.removeAllListeners=(e=null)=>null!=e?delete this._events[e]:this._events={}}_addListener(e,t,n){var r;return null==(r=this._events)[e]&&(r[e]=[]),this._events[e].push({cb:n,status:t}),this.instance}listenerCount(e){return null!=this._events[e]?this._events[e].length:0}trigger(e,...n){var r=this;return t(function*(){var i,s;try{if("debug"!==e&&r.trigger("debug",`Event triggered: ${e}`,n),null==r._events[e])return;return r._events[e]=r._events[e].filter(function(e){return"none"!==e.status}),s=r._events[e].map(function(){var e=t(function*(e){var t,i;if("none"!==e.status){"once"===e.status&&(e.status="none");try{return"function"==typeof(null!=(i="function"==typeof e.cb?e.cb(...n):void 0)?i.then:void 0)?yield i:i}catch(e){return t=e,r.trigger("error",t),null}}});return function(t){return e.apply(this,arguments)}}()),(yield Promise.all(s)).find(function(e){return null!=e})}catch(e){return i=e,r.trigger("error",i),null}})()}},Events_1=n}function requireQueues(){return hasRequiredQueues?Queues_1:(hasRequiredQueues=1,e=requireDLList(),t=requireEvents(),Queues_1=class{constructor(n){this.Events=new t(this),this._length=0,this._lists=function(){var t,r,i;for(i=[],t=1,r=n;1<=r?t<=r:t>=r;1<=r?++t:--t)i.push(new e(()=>this.incr(),()=>this.decr()));return i}.call(this)}incr(){if(0===this._length++)return this.Events.trigger("leftzero")}decr(){if(0===--this._length)return this.Events.trigger("zero")}push(e){return this._lists[e.options.priority].push(e)}queued(e){return null!=e?this._lists[e].length:this._length}shiftAll(e){return this._lists.forEach(function(t){return t.forEachShift(e)})}getFirst(e=this._lists){var t,n,r;for(t=0,n=e.length;t<n;t++)if((r=e[t]).length>0)return r;return[]}shiftLastFrom(e){return this.getFirst(this._lists.slice(e).reverse()).shift()}});var e,t}function requireBottleneckError(){return hasRequiredBottleneckError?BottleneckError_1:(hasRequiredBottleneckError=1,e=class extends Error{},BottleneckError_1=e);var e}function requireJob(){if(hasRequiredJob)return Job_1;function e(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=t.apply(n,r);function a(t){e(o,i,s,a,c,"next",t)}function c(t){e(o,i,s,a,c,"throw",t)}a(void 0)})}}var n,r;return hasRequiredJob=1,r=requireParser(),n=requireBottleneckError(),Job_1=class{constructor(e,t,n,i,s,o,a,c){this.task=e,this.args=t,this.rejectOnDrop=s,this.Events=o,this._states=a,this.Promise=c,this.options=r.load(n,i),this.options.priority=this._sanitizePriority(this.options.priority),this.options.id===i.id&&(this.options.id=`${this.options.id}-${this._randomIndex()}`),this.promise=new this.Promise((e,t)=>{this._resolve=e,this._reject=t}),this.retryCount=0}_sanitizePriority(e){var t;return(t=~~e!==e?5:e)<0?0:t>9?9:t}_randomIndex(){return Math.random().toString(36).slice(2)}doDrop({error:e,message:t="This job has been dropped by Bottleneck"}={}){return!!this._states.remove(this.options.id)&&(this.rejectOnDrop&&this._reject(null!=e?e:new n(t)),this.Events.trigger("dropped",{args:this.args,options:this.options,task:this.task,promise:this.promise}),!0)}_assertStatus(e){var t;if((t=this._states.jobStatus(this.options.id))!==e&&("DONE"!==e||null!==t))throw new n(`Invalid job status ${t}, expected ${e}. Please open an issue at https://github.com/SGrondin/bottleneck/issues`)}doReceive(){return this._states.start(this.options.id),this.Events.trigger("received",{args:this.args,options:this.options})}doQueue(e,t){return this._assertStatus("RECEIVED"),this._states.next(this.options.id),this.Events.trigger("queued",{args:this.args,options:this.options,reachedHWM:e,blocked:t})}doRun(){return 0===this.retryCount?(this._assertStatus("QUEUED"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),this.Events.trigger("scheduled",{args:this.args,options:this.options})}doExecute(e,n,r,i){var s=this;return t(function*(){var t,o,a;0===s.retryCount?(s._assertStatus("RUNNING"),s._states.next(s.options.id)):s._assertStatus("EXECUTING"),o={args:s.args,options:s.options,retryCount:s.retryCount},s.Events.trigger("executing",o);try{if(a=yield null!=e?e.schedule(s.options,s.task,...s.args):s.task(...s.args),n())return s.doDone(o),yield i(s.options,o),s._assertStatus("DONE"),s._resolve(a)}catch(e){return t=e,s._onFailure(t,o,n,r,i)}})()}doExpire(e,t,r){var i,s;return this._states.jobStatus("RUNNING"===this.options.id)&&this._states.next(this.options.id),this._assertStatus("EXECUTING"),s={args:this.args,options:this.options,retryCount:this.retryCount},i=new n(`This job timed out after ${this.options.expiration} ms.`),this._onFailure(i,s,e,t,r)}_onFailure(e,n,r,i,s){var o=this;return t(function*(){var t,a;if(r())return null!=(t=yield o.Events.trigger("failed",e,n))?(a=~~t,o.Events.trigger("retry",`Retrying ${o.options.id} after ${a} ms`,n),o.retryCount++,i(a)):(o.doDone(n),yield s(o.options,n),o._assertStatus("DONE"),o._reject(e))})()}doDone(e){return this._assertStatus("EXECUTING"),this._states.next(this.options.id),this.Events.trigger("done",e)}}}function requireLocalDatastore(){if(hasRequiredLocalDatastore)return LocalDatastore_1;function e(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=t.apply(n,r);function a(t){e(o,i,s,a,c,"next",t)}function c(t){e(o,i,s,a,c,"throw",t)}a(void 0)})}}var n,r;return hasRequiredLocalDatastore=1,r=requireParser(),n=requireBottleneckError(),LocalDatastore_1=class{constructor(e,t,n){this.instance=e,this.storeOptions=t,this.clientId=this.instance._randomIndex(),r.load(n,n,this),this._nextRequest=this._lastReservoirRefresh=this._lastReservoirIncrease=Date.now(),this._running=0,this._done=0,this._unblockTime=0,this.ready=this.Promise.resolve(),this.clients={},this._startHeartbeat()}_startHeartbeat(){var e;return null==this.heartbeat&&(null!=this.storeOptions.reservoirRefreshInterval&&null!=this.storeOptions.reservoirRefreshAmount||null!=this.storeOptions.reservoirIncreaseInterval&&null!=this.storeOptions.reservoirIncreaseAmount)?"function"==typeof(e=this.heartbeat=setInterval(()=>{var e,t,n,r,i;if(r=Date.now(),null!=this.storeOptions.reservoirRefreshInterval&&r>=this._lastReservoirRefresh+this.storeOptions.reservoirRefreshInterval&&(this._lastReservoirRefresh=r,this.storeOptions.reservoir=this.storeOptions.reservoirRefreshAmount,this.instance._drainAll(this.computeCapacity())),null!=this.storeOptions.reservoirIncreaseInterval&&r>=this._lastReservoirIncrease+this.storeOptions.reservoirIncreaseInterval){var s=this.storeOptions;if(e=s.reservoirIncreaseAmount,n=s.reservoirIncreaseMaximum,i=s.reservoir,this._lastReservoirIncrease=r,(t=null!=n?Math.min(e,n-i):e)>0)return this.storeOptions.reservoir+=t,this.instance._drainAll(this.computeCapacity())}},this.heartbeatInterval)).unref?e.unref():void 0:clearInterval(this.heartbeat)}__publish__(e){var n=this;return t(function*(){return yield n.yieldLoop(),n.instance.Events.trigger("message",e.toString())})()}__disconnect__(e){var n=this;return t(function*(){return yield n.yieldLoop(),clearInterval(n.heartbeat),n.Promise.resolve()})()}yieldLoop(e=0){return new this.Promise(function(t,n){return setTimeout(t,e)})}computePenalty(){var e;return null!=(e=this.storeOptions.penalty)?e:15*this.storeOptions.minTime||5e3}__updateSettings__(e){var n=this;return t(function*(){return yield n.yieldLoop(),r.overwrite(e,e,n.storeOptions),n._startHeartbeat(),n.instance._drainAll(n.computeCapacity()),!0})()}__running__(){var e=this;return t(function*(){return yield e.yieldLoop(),e._running})()}__queued__(){var e=this;return t(function*(){return yield e.yieldLoop(),e.instance.queued()})()}__done__(){var e=this;return t(function*(){return yield e.yieldLoop(),e._done})()}__groupCheck__(e){var n=this;return t(function*(){return yield n.yieldLoop(),n._nextRequest+n.timeout<e})()}computeCapacity(){var e,t,n=this.storeOptions;return e=n.maxConcurrent,t=n.reservoir,null!=e&&null!=t?Math.min(e-this._running,t):null!=e?e-this._running:null!=t?t:null}conditionsCheck(e){var t;return null==(t=this.computeCapacity())||e<=t}__incrementReservoir__(e){var n=this;return t(function*(){var t;return yield n.yieldLoop(),t=n.storeOptions.reservoir+=e,n.instance._drainAll(n.computeCapacity()),t})()}__currentReservoir__(){var e=this;return t(function*(){return yield e.yieldLoop(),e.storeOptions.reservoir})()}isBlocked(e){return this._unblockTime>=e}check(e,t){return this.conditionsCheck(e)&&this._nextRequest-t<=0}__check__(e){var n=this;return t(function*(){var t;return yield n.yieldLoop(),t=Date.now(),n.check(e,t)})()}__register__(e,n,r){var i=this;return t(function*(){var e,t;return yield i.yieldLoop(),e=Date.now(),i.conditionsCheck(n)?(i._running+=n,null!=i.storeOptions.reservoir&&(i.storeOptions.reservoir-=n),t=Math.max(i._nextRequest-e,0),i._nextRequest=e+t+i.storeOptions.minTime,{success:!0,wait:t,reservoir:i.storeOptions.reservoir}):{success:!1}})()}strategyIsBlock(){return 3===this.storeOptions.strategy}__submit__(e,r){var i=this;return t(function*(){var t,s,o;if(yield i.yieldLoop(),null!=i.storeOptions.maxConcurrent&&r>i.storeOptions.maxConcurrent)throw new n(`Impossible to add a job having a weight of ${r} to a limiter having a maxConcurrent setting of ${i.storeOptions.maxConcurrent}`);return s=Date.now(),o=null!=i.storeOptions.highWater&&e===i.storeOptions.highWater&&!i.check(r,s),(t=i.strategyIsBlock()&&(o||i.isBlocked(s)))&&(i._unblockTime=s+i.computePenalty(),i._nextRequest=i._unblockTime+i.storeOptions.minTime,i.instance._dropAllQueued()),{reachedHWM:o,blocked:t,strategy:i.storeOptions.strategy}})()}__free__(e,n){var r=this;return t(function*(){return yield r.yieldLoop(),r._running-=n,r._done+=n,r.instance._drainAll(r.computeCapacity()),{running:r._running}})()}}}var Scripts={},require$$0={"blacklist_client.lua":"local blacklist = ARGV[num_static_argv + 1]\n\nif redis.call('zscore', client_last_seen_key, blacklist) then\n redis.call('zadd', client_last_seen_key, 0, blacklist)\nend\n\n\nreturn {}\n","check.lua":"local weight = tonumber(ARGV[num_static_argv + 1])\n\nlocal capacity = process_tick(now, false)['capacity']\nlocal nextRequest = tonumber(redis.call('hget', settings_key, 'nextRequest'))\n\nreturn conditions_check(capacity, weight) and nextRequest - now <= 0\n","conditions_check.lua":"local conditions_check = function (capacity, weight)\n return capacity == nil or weight <= capacity\nend\n","current_reservoir.lua":"return process_tick(now, false)['reservoir']\n","done.lua":"process_tick(now, false)\n\nreturn tonumber(redis.call('hget', settings_key, 'done'))\n","free.lua":"local index = ARGV[num_static_argv + 1]\n\nredis.call('zadd', job_expirations_key, 0, index)\n\nreturn process_tick(now, false)['running']\n","get_time.lua":"redis.replicate_commands()\n\nlocal get_time = function ()\n local time = redis.call('time')\n\n return tonumber(time[1]..string.sub(time[2], 1, 3))\nend\n","group_check.lua":"return not (redis.call('exists', settings_key) == 1)\n","heartbeat.lua":"process_tick(now, true)\n","increment_reservoir.lua":"local incr = tonumber(ARGV[num_static_argv + 1])\n\nredis.call('hincrby', settings_key, 'reservoir', incr)\n\nlocal reservoir = process_tick(now, true)['reservoir']\n\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\nrefresh_expiration(0, 0, groupTimeout)\n\nreturn reservoir\n","init.lua":"local clear = tonumber(ARGV[num_static_argv + 1])\nlocal limiter_version = ARGV[num_static_argv + 2]\nlocal num_local_argv = num_static_argv + 2\n\nif clear == 1 then\n redis.call('del', unpack(KEYS))\nend\n\nif redis.call('exists', settings_key) == 0 then\n -- Create\n local args = {'hmset', settings_key}\n\n for i = num_local_argv + 1, #ARGV do\n table.insert(args, ARGV[i])\n end\n\n redis.call(unpack(args))\n redis.call('hmset', settings_key,\n 'nextRequest', now,\n 'lastReservoirRefresh', now,\n 'lastReservoirIncrease', now,\n 'running', 0,\n 'done', 0,\n 'unblockTime', 0,\n 'capacityPriorityCounter', 0\n )\n\nelse\n -- Apply migrations\n local settings = redis.call('hmget', settings_key,\n 'id',\n 'version'\n )\n local id = settings[1]\n local current_version = settings[2]\n\n if current_version ~= limiter_version then\n local version_digits = {}\n for k, v in string.gmatch(current_version, \"([^.]+)\") do\n table.insert(version_digits, tonumber(k))\n end\n\n -- 2.10.0\n if version_digits[2] < 10 then\n redis.call('hsetnx', settings_key, 'reservoirRefreshInterval', '')\n redis.call('hsetnx', settings_key, 'reservoirRefreshAmount', '')\n redis.call('hsetnx', settings_key, 'lastReservoirRefresh', '')\n redis.call('hsetnx', settings_key, 'done', 0)\n redis.call('hset', settings_key, 'version', '2.10.0')\n end\n\n -- 2.11.1\n if version_digits[2] < 11 or (version_digits[2] == 11 and version_digits[3] < 1) then\n if redis.call('hstrlen', settings_key, 'lastReservoirRefresh') == 0 then\n redis.call('hmset', settings_key,\n 'lastReservoirRefresh', now,\n 'version', '2.11.1'\n )\n end\n end\n\n -- 2.14.0\n if version_digits[2] < 14 then\n local old_running_key = 'b_'..id..'_running'\n local old_executing_key = 'b_'..id..'_executing'\n\n if redis.call('exists', old_running_key) == 1 then\n redis.call('rename', old_running_key, job_weights_key)\n end\n if redis.call('exists', old_executing_key) == 1 then\n redis.call('rename', old_executing_key, job_expirations_key)\n end\n redis.call('hset', settings_key, 'version', '2.14.0')\n end\n\n -- 2.15.2\n if version_digits[2] < 15 or (version_digits[2] == 15 and version_digits[3] < 2) then\n redis.call('hsetnx', settings_key, 'capacityPriorityCounter', 0)\n redis.call('hset', settings_key, 'version', '2.15.2')\n end\n\n -- 2.17.0\n if version_digits[2] < 17 then\n redis.call('hsetnx', settings_key, 'clientTimeout', 10000)\n redis.call('hset', settings_key, 'version', '2.17.0')\n end\n\n -- 2.18.0\n if version_digits[2] < 18 then\n redis.call('hsetnx', settings_key, 'reservoirIncreaseInterval', '')\n redis.call('hsetnx', settings_key, 'reservoirIncreaseAmount', '')\n redis.call('hsetnx', settings_key, 'reservoirIncreaseMaximum', '')\n redis.call('hsetnx', settings_key, 'lastReservoirIncrease', now)\n redis.call('hset', settings_key, 'version', '2.18.0')\n end\n\n end\n\n process_tick(now, false)\nend\n\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\nrefresh_expiration(0, 0, groupTimeout)\n\nreturn {}\n","process_tick.lua":"local process_tick = function (now, always_publish)\n\n local compute_capacity = function (maxConcurrent, running, reservoir)\n if maxConcurrent ~= nil and reservoir ~= nil then\n return math.min((maxConcurrent - running), reservoir)\n elseif maxConcurrent ~= nil then\n return maxConcurrent - running\n elseif reservoir ~= nil then\n return reservoir\n else\n return nil\n end\n end\n\n local settings = redis.call('hmget', settings_key,\n 'id',\n 'maxConcurrent',\n 'running',\n 'reservoir',\n 'reservoirRefreshInterval',\n 'reservoirRefreshAmount',\n 'lastReservoirRefresh',\n 'reservoirIncreaseInterval',\n 'reservoirIncreaseAmount',\n 'reservoirIncreaseMaximum',\n 'lastReservoirIncrease',\n 'capacityPriorityCounter',\n 'clientTimeout'\n )\n local id = settings[1]\n local maxConcurrent = tonumber(settings[2])\n local running = tonumber(settings[3])\n local reservoir = tonumber(settings[4])\n local reservoirRefreshInterval = tonumber(settings[5])\n local reservoirRefreshAmount = tonumber(settings[6])\n local lastReservoirRefresh = tonumber(settings[7])\n local reservoirIncreaseInterval = tonumber(settings[8])\n local reservoirIncreaseAmount = tonumber(settings[9])\n local reservoirIncreaseMaximum = tonumber(settings[10])\n local lastReservoirIncrease = tonumber(settings[11])\n local capacityPriorityCounter = tonumber(settings[12])\n local clientTimeout = tonumber(settings[13])\n\n local initial_capacity = compute_capacity(maxConcurrent, running, reservoir)\n\n --\n -- Process 'running' changes\n --\n local expired = redis.call('zrangebyscore', job_expirations_key, '-inf', '('..now)\n\n if #expired > 0 then\n redis.call('zremrangebyscore', job_expirations_key, '-inf', '('..now)\n\n local flush_batch = function (batch, acc)\n local weights = redis.call('hmget', job_weights_key, unpack(batch))\n redis.call('hdel', job_weights_key, unpack(batch))\n local clients = redis.call('hmget', job_clients_key, unpack(batch))\n redis.call('hdel', job_clients_key, unpack(batch))\n\n -- Calculate sum of removed weights\n for i = 1, #weights do\n acc['total'] = acc['total'] + (tonumber(weights[i]) or 0)\n end\n\n -- Calculate sum of removed weights by client\n local client_weights = {}\n for i = 1, #clients do\n local removed = tonumber(weights[i]) or 0\n if removed > 0 then\n acc['client_weights'][clients[i]] = (acc['client_weights'][clients[i]] or 0) + removed\n end\n end\n end\n\n local acc = {\n ['total'] = 0,\n ['client_weights'] = {}\n }\n local batch_size = 1000\n\n -- Compute changes to Zsets and apply changes to Hashes\n for i = 1, #expired, batch_size do\n local batch = {}\n for j = i, math.min(i + batch_size - 1, #expired) do\n table.insert(batch, expired[j])\n end\n\n flush_batch(batch, acc)\n end\n\n -- Apply changes to Zsets\n if acc['total'] > 0 then\n redis.call('hincrby', settings_key, 'done', acc['total'])\n running = tonumber(redis.call('hincrby', settings_key, 'running', -acc['total']))\n end\n\n for client, weight in pairs(acc['client_weights']) do\n redis.call('zincrby', client_running_key, -weight, client)\n end\n end\n\n --\n -- Process 'reservoir' changes\n --\n local reservoirRefreshActive = reservoirRefreshInterval ~= nil and reservoirRefreshAmount ~= nil\n if reservoirRefreshActive and now >= lastReservoirRefresh + reservoirRefreshInterval then\n reservoir = reservoirRefreshAmount\n redis.call('hmset', settings_key,\n 'reservoir', reservoir,\n 'lastReservoirRefresh', now\n )\n end\n\n local reservoirIncreaseActive = reservoirIncreaseInterval ~= nil and reservoirIncreaseAmount ~= nil\n if reservoirIncreaseActive and now >= lastReservoirIncrease + reservoirIncreaseInterval then\n local num_intervals = math.floor((now - lastReservoirIncrease) / reservoirIncreaseInterval)\n local incr = reservoirIncreaseAmount * num_intervals\n if reservoirIncreaseMaximum ~= nil then\n incr = math.min(incr, reservoirIncreaseMaximum - (reservoir or 0))\n end\n if incr > 0 then\n reservoir = (reservoir or 0) + incr\n end\n redis.call('hmset', settings_key,\n 'reservoir', reservoir,\n 'lastReservoirIncrease', lastReservoirIncrease + (num_intervals * reservoirIncreaseInterval)\n )\n end\n\n --\n -- Clear unresponsive clients\n --\n local unresponsive = redis.call('zrangebyscore', client_last_seen_key, '-inf', (now - clientTimeout))\n local unresponsive_lookup = {}\n local terminated_clients = {}\n for i = 1, #unresponsive do\n unresponsive_lookup[unresponsive[i]] = true\n if tonumber(redis.call('zscore', client_running_key, unresponsive[i])) == 0 then\n table.insert(terminated_clients, unresponsive[i])\n end\n end\n if #terminated_clients > 0 then\n redis.call('zrem', client_running_key, unpack(terminated_clients))\n redis.call('hdel', client_num_queued_key, unpack(terminated_clients))\n redis.call('zrem', client_last_registered_key, unpack(terminated_clients))\n redis.call('zrem', client_last_seen_key, unpack(terminated_clients))\n end\n\n --\n -- Broadcast capacity changes\n --\n local final_capacity = compute_capacity(maxConcurrent, running, reservoir)\n\n if always_publish or (initial_capacity ~= nil and final_capacity == nil) then\n -- always_publish or was not unlimited, now unlimited\n redis.call('publish', 'b_'..id, 'capacity:'..(final_capacity or ''))\n\n elseif initial_capacity ~= nil and final_capacity ~= nil and final_capacity > initial_capacity then\n -- capacity was increased\n -- send the capacity message to the limiter having the lowest number of running jobs\n -- the tiebreaker is the limiter having not registered a job in the longest time\n\n local lowest_concurrency_value = nil\n local lowest_concurrency_clients = {}\n local lowest_concurrency_last_registered = {}\n local client_concurrencies = redis.call('zrange', client_running_key, 0, -1, 'withscores')\n\n for i = 1, #client_concurrencies, 2 do\n local client = client_concurrencies[i]\n local concurrency = tonumber(client_concurrencies[i+1])\n\n if (\n lowest_concurrency_value == nil or lowest_concurrency_value == concurrency\n ) and (\n not unresponsive_lookup[client]\n ) and (\n tonumber(redis.call('hget', client_num_queued_key, client)) > 0\n ) then\n lowest_concurrency_value = concurrency\n table.insert(lowest_concurrency_clients, client)\n local last_registered = tonumber(redis.call('zscore', client_last_registered_key, client))\n table.insert(lowest_concurrency_last_registered, last_registered)\n end\n end\n\n if #lowest_concurrency_clients > 0 then\n local position = 1\n local earliest = lowest_concurrency_last_registered[1]\n\n for i,v in ipairs(lowest_concurrency_last_registered) do\n if v < earliest then\n position = i\n earliest = v\n end\n end\n\n local next_client = lowest_concurrency_clients[position]\n redis.call('publish', 'b_'..id,\n 'capacity-priority:'..(final_capacity or '')..\n ':'..next_client..\n ':'..capacityPriorityCounter\n )\n redis.call('hincrby', settings_key, 'capacityPriorityCounter', '1')\n else\n redis.call('publish', 'b_'..id, 'capacity:'..(final_capacity or ''))\n end\n end\n\n return {\n ['capacity'] = final_capacity,\n ['running'] = running,\n ['reservoir'] = reservoir\n }\nend\n","queued.lua":"local clientTimeout = tonumber(redis.call('hget', settings_key, 'clientTimeout'))\nlocal valid_clients = redis.call('zrangebyscore', client_last_seen_key, (now - clientTimeout), 'inf')\nlocal client_queued = redis.call('hmget', client_num_queued_key, unpack(valid_clients))\n\nlocal sum = 0\nfor i = 1, #client_queued do\n sum = sum + tonumber(client_queued[i])\nend\n\nreturn sum\n","refresh_expiration.lua":"local refresh_expiration = function (now, nextRequest, groupTimeout)\n\n if groupTimeout ~= nil then\n local ttl = (nextRequest + groupTimeout) - now\n\n for i = 1, #KEYS do\n redis.call('pexpire', KEYS[i], ttl)\n end\n end\n\nend\n","refs.lua":"local settings_key = KEYS[1]\nlocal job_weights_key = KEYS[2]\nlocal job_expirations_key = KEYS[3]\nlocal job_clients_key = KEYS[4]\nlocal client_running_key = KEYS[5]\nlocal client_num_queued_key = KEYS[6]\nlocal client_last_registered_key = KEYS[7]\nlocal client_last_seen_key = KEYS[8]\n\nlocal now = tonumber(ARGV[1])\nlocal client = ARGV[2]\n\nlocal num_static_argv = 2\n","register.lua":"local index = ARGV[num_static_argv + 1]\nlocal weight = tonumber(ARGV[num_static_argv + 2])\nlocal expiration = tonumber(ARGV[num_static_argv + 3])\n\nlocal state = process_tick(now, false)\nlocal capacity = state['capacity']\nlocal reservoir = state['reservoir']\n\nlocal settings = redis.call('hmget', settings_key,\n 'nextRequest',\n 'minTime',\n 'groupTimeout'\n)\nlocal nextRequest = tonumber(settings[1])\nlocal minTime = tonumber(settings[2])\nlocal groupTimeout = tonumber(settings[3])\n\nif conditions_check(capacity, weight) then\n\n redis.call('hincrby', settings_key, 'running', weight)\n redis.call('hset', job_weights_key, index, weight)\n if expiration ~= nil then\n redis.call('zadd', job_expirations_key, now + expiration, index)\n end\n redis.call('hset', job_clients_key, index, client)\n redis.call('zincrby', client_running_key, weight, client)\n redis.call('hincrby', client_num_queued_key, client, -1)\n redis.call('zadd', client_last_registered_key, now, client)\n\n local wait = math.max(nextRequest - now, 0)\n local newNextRequest = now + wait + minTime\n\n if reservoir == nil then\n redis.call('hset', settings_key,\n 'nextRequest', newNextRequest\n )\n else\n reservoir = reservoir - weight\n redis.call('hmset', settings_key,\n 'reservoir', reservoir,\n 'nextRequest', newNextRequest\n )\n end\n\n refresh_expiration(now, newNextRequest, groupTimeout)\n\n return {true, wait, reservoir}\n\nelse\n return {false}\nend\n","register_client.lua":"local queued = tonumber(ARGV[num_static_argv + 1])\n\n-- Could have been re-registered concurrently\nif not redis.call('zscore', client_last_seen_key, client) then\n redis.call('zadd', client_running_key, 0, client)\n redis.call('hset', client_num_queued_key, client, queued)\n redis.call('zadd', client_last_registered_key, 0, client)\nend\n\nredis.call('zadd', client_last_seen_key, now, client)\n\nreturn {}\n","running.lua":"return process_tick(now, false)['running']\n","submit.lua":"local queueLength = tonumber(ARGV[num_static_argv + 1])\nlocal weight = tonumber(ARGV[num_static_argv + 2])\n\nlocal capacity = process_tick(now, false)['capacity']\n\nlocal settings = redis.call('hmget', settings_key,\n 'id',\n 'maxConcurrent',\n 'highWater',\n 'nextRequest',\n 'strategy',\n 'unblockTime',\n 'penalty',\n 'minTime',\n 'groupTimeout'\n)\nlocal id = settings[1]\nlocal maxConcurrent = tonumber(settings[2])\nlocal highWater = tonumber(settings[3])\nlocal nextRequest = tonumber(settings[4])\nlocal strategy = tonumber(settings[5])\nlocal unblockTime = tonumber(settings[6])\nlocal penalty = tonumber(settings[7])\nlocal minTime = tonumber(settings[8])\nlocal groupTimeout = tonumber(settings[9])\n\nif maxConcurrent ~= nil and weight > maxConcurrent then\n return redis.error_reply('OVERWEIGHT:'..weight..':'..maxConcurrent)\nend\n\nlocal reachedHWM = (highWater ~= nil and queueLength == highWater\n and not (\n conditions_check(capacity, weight)\n and nextRequest - now <= 0\n )\n)\n\nlocal blocked = strategy == 3 and (reachedHWM or unblockTime >= now)\n\nif blocked then\n local computedPenalty = penalty\n if computedPenalty == nil then\n if minTime == 0 then\n computedPenalty = 5000\n else\n computedPenalty = 15 * minTime\n end\n end\n\n local newNextRequest = now + computedPenalty + minTime\n\n redis.call('hmset', settings_key,\n 'unblockTime', now + computedPenalty,\n 'nextRequest', newNextRequest\n )\n\n local clients_queued_reset = redis.call('hkeys', client_num_queued_key)\n local queued_reset = {}\n for i = 1, #clients_queued_reset do\n table.insert(queued_reset, clients_queued_reset[i])\n table.insert(queued_reset, 0)\n end\n redis.call('hmset', client_num_queued_key, unpack(queued_reset))\n\n redis.call('publish', 'b_'..id, 'blocked:')\n\n refresh_expiration(now, newNextRequest, groupTimeout)\nend\n\nif not blocked and not reachedHWM then\n redis.call('hincrby', client_num_queued_key, client, 1)\nend\n\nreturn {reachedHWM, blocked, strategy}\n","update_settings.lua":"local args = {'hmset', settings_key}\n\nfor i = num_static_argv + 1, #ARGV do\n table.insert(args, ARGV[i])\nend\n\nredis.call(unpack(args))\n\nprocess_tick(now, true)\n\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\nrefresh_expiration(0, 0, groupTimeout)\n\nreturn {}\n","validate_client.lua":"if not redis.call('zscore', client_last_seen_key, client) then\n return redis.error_reply('UNKNOWN_CLIENT')\nend\n\nredis.call('zadd', client_last_seen_key, now, client)\n","validate_keys.lua":"if not (redis.call('exists', settings_key) == 1) then\n return redis.error_reply('SETTINGS_KEY_NOT_FOUND')\nend\n"},hasRequiredScripts,RedisConnection_1,hasRequiredRedisConnection,IORedisConnection_1,hasRequiredIORedisConnection,RedisDatastore_1,hasRequiredRedisDatastore,States_1,hasRequiredStates,Sync_1,hasRequiredSync;function requireScripts(){return hasRequiredScripts||(hasRequiredScripts=1,e=Scripts,t={refs:(n=require$$0)["refs.lua"],validate_keys:n["validate_keys.lua"],validate_client:n["validate_client.lua"],refresh_expiration:n["refresh_expiration.lua"],process_tick:n["process_tick.lua"],conditions_check:n["conditions_check.lua"],get_time:n["get_time.lua"]},e.allKeys=function(e){return[`b_${e}_settings`,`b_${e}_job_weights`,`b_${e}_job_expirations`,`b_${e}_job_clients`,`b_${e}_client_running`,`b_${e}_client_num_queued`,`b_${e}_client_last_registered`,`b_${e}_client_last_seen`]},r={init:{keys:e.allKeys,headers:["process_tick"],refresh_expiration:!0,code:n["init.lua"]},group_check:{keys:e.allKeys,headers:[],refresh_expiration:!1,code:n["group_check.lua"]},register_client:{keys:e.allKeys,headers:["validate_keys"],refresh_expiration:!1,code:n["register_client.lua"]},blacklist_client:{keys:e.allKeys,headers:["validate_keys","validate_client"],refresh_expiration:!1,code:n["blacklist_client.lua"]},heartbeat:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!1,code:n["heartbeat.lua"]},update_settings:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!0,code:n["update_settings.lua"]},running:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!1,code:n["running.lua"]},queued:{keys:e.allKeys,headers:["validate_keys","validate_client"],refresh_expiration:!1,code:n["queued.lua"]},done:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!1,code:n["done.lua"]},check:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick","conditions_check"],refresh_expiration:!1,code:n["check.lua"]},submit:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick","conditions_check"],refresh_expiration:!0,code:n["submit.lua"]},register:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick","conditions_check"],refresh_expiration:!0,code:n["register.lua"]},free:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!0,code:n["free.lua"]},current_reservoir:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!1,code:n["current_reservoir.lua"]},increment_reservoir:{keys:e.allKeys,headers:["validate_keys","validate_client","process_tick"],refresh_expiration:!0,code:n["increment_reservoir.lua"]}},e.names=Object.keys(r),e.keys=function(e,t){return r[e].keys(t)},e.payload=function(e){var n;return n=r[e],Array.prototype.concat(t.refs,n.headers.map(function(e){return t[e]}),n.refresh_expiration?t.refresh_expiration:"",n.code).join("\n")}),Scripts;var e,t,n,r}function requireRedisConnection(){if(hasRequiredRedisConnection)return RedisConnection_1;function asyncGeneratorStep(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function _asyncToGenerator(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var s=e.apply(t,n);function o(e){asyncGeneratorStep(s,r,i,o,a,"next",e)}function a(e){asyncGeneratorStep(s,r,i,o,a,"throw",e)}o(void 0)})}}var Events,RedisConnection,Scripts,parser;return hasRequiredRedisConnection=1,parser=requireParser(),Events=requireEvents(),Scripts=requireScripts(),RedisConnection=function(){class RedisConnection{constructor(options={}){parser.load(options,this.defaults,this),null==this.Redis&&(this.Redis=eval("require")("redis")),null==this.Events&&(this.Events=new Events(this)),this.terminated=!1,null==this.client&&(this.client=this.Redis.createClient(this.clientOptions)),this.subscriber=this.client.duplicate(),this.limiters={},this.shas={},this.ready=this.Promise.all([this._setup(this.client,!1),this._setup(this.subscriber,!0)]).then(()=>this._loadScripts()).then(()=>({client:this.client,subscriber:this.subscriber}))}_setup(e,t){return e.setMaxListeners(0),new this.Promise((n,r)=>(e.on("error",e=>this.Events.trigger("error",e)),t&&e.on("message",(e,t)=>{var n;return null!=(n=this.limiters[e])?n._store.onMessage(e,t):void 0}),e.ready?n():e.once("ready",n)))}_loadScript(e){return new this.Promise((t,n)=>{var r;return r=Scripts.payload(e),this.client.multi([["script","load",r]]).exec((r,i)=>null!=r?n(r):(this.shas[e]=i[0],t(i[0])))})}_loadScripts(){return this.Promise.all(Scripts.names.map(e=>this._loadScript(e)))}__runCommand__(e){var t=this;return _asyncToGenerator(function*(){return yield t.ready,new t.Promise((n,r)=>t.client.multi([e]).exec_atomic(function(e,t){return null!=e?r(e):n(t[0])}))})()}__addLimiter__(e){return this.Promise.all([e.channel(),e.channel_client()].map(t=>new this.Promise((n,r)=>{var i;return i=r=>{if(r===t)return this.subscriber.removeListener("subscribe",i),this.limiters[t]=e,n()},this.subscriber.on("subscribe",i),this.subscriber.subscribe(t)})))}__removeLimiter__(e){var t=this;return this.Promise.all([e.channel(),e.channel_client()].map(function(){var e=_asyncToGenerator(function*(e){return t.terminated||(yield new t.Promise((n,r)=>t.subscriber.unsubscribe(e,function(t,i){return null!=t?r(t):i===e?n():void 0}))),delete t.limiters[e]});return function(t){return e.apply(this,arguments)}}()))}__scriptArgs__(e,t,n,r){var i;return i=Scripts.keys(e,t),[this.shas[e],i.length].concat(i,n,r)}__scriptFn__(e){return this.client.evalsha.bind(this.client)}disconnect(e=!0){var t,n,r,i;for(t=0,r=(i=Object.keys(this.limiters)).length;t<r;t++)n=i[t],clearInterval(this.limiters[n]._store.heartbeat);return this.limiters={},this.terminated=!0,this.client.end(e),this.subscriber.end(e),this.Promise.resolve()}}return RedisConnection.prototype.datastore="redis",RedisConnection.prototype.defaults={Redis:null,clientOptions:{},client:null,Promise:Promise,Events:null},RedisConnection}.call(void 0),RedisConnection_1=RedisConnection,RedisConnection_1}function requireIORedisConnection(){if(hasRequiredIORedisConnection)return IORedisConnection_1;function _slicedToArray(e,t){return _arrayWithHoles(e)||_iterableToArrayLimit(e,t)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function _iterableToArrayLimit(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{r||null==a.return||a.return()}finally{if(i)throw s}}return n}function _arrayWithHoles(e){if(Array.isArray(e))return e}function asyncGeneratorStep(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function _asyncToGenerator(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var s=e.apply(t,n);function o(e){asyncGeneratorStep(s,r,i,o,a,"next",e)}function a(e){asyncGeneratorStep(s,r,i,o,a,"throw",e)}o(void 0)})}}var Events,IORedisConnection,Scripts,parser;return hasRequiredIORedisConnection=1,parser=requireParser(),Events=requireEvents(),Scripts=requireScripts(),IORedisConnection=function(){class IORedisConnection{constructor(options={}){parser.load(options,this.defaults,this),null==this.Redis&&(this.Redis=eval("require")("ioredis")),null==this.Events&&(this.Events=new Events(this)),this.terminated=!1,null!=this.clusterNodes?(this.client=new this.Redis.Cluster(this.clusterNodes,this.clientOptions),this.subscriber=new this.Redis.Cluster(this.clusterNodes,this.clientOptions)):null!=this.client&&null==this.client.duplicate?this.subscriber=new this.Redis.Cluster(this.client.startupNodes,this.client.options):(null==this.client&&(this.client=new this.Redis(this.clientOptions)),this.subscriber=this.client.duplicate()),this.limiters={},this.ready=this.Promise.all([this._setup(this.client,!1),this._setup(this.subscriber,!0)]).then(()=>(this._loadScripts(),{client:this.client,subscriber:this.subscriber}))}_setup(e,t){return e.setMaxListeners(0),new this.Promise((n,r)=>(e.on("error",e=>this.Events.trigger("error",e)),t&&e.on("message",(e,t)=>{var n;return null!=(n=this.limiters[e])?n._store.onMessage(e,t):void 0}),"ready"===e.status?n():e.once("ready",n)))}_loadScripts(){return Scripts.names.forEach(e=>this.client.defineCommand(e,{lua:Scripts.payload(e)}))}__runCommand__(e){var t=this;return _asyncToGenerator(function*(){yield t.ready;var n=_slicedToArray(yield t.client.pipeline([e]).exec(),1),r=_slicedToArray(n[0],2);return r[0],r[1]})()}__addLimiter__(e){return this.Promise.all([e.channel(),e.channel_client()].map(t=>new this.Promise((n,r)=>this.subscriber.subscribe(t,()=>(this.limiters[t]=e,n())))))}__removeLimiter__(e){var t=this;return[e.channel(),e.channel_client()].forEach(function(){var e=_asyncToGenerator(function*(e){return t.terminated||(yield t.subscriber.unsubscribe(e)),delete t.limiters[e]});return function(t){return e.apply(this,arguments)}}())}__scriptArgs__(e,t,n,r){var i;return[(i=Scripts.keys(e,t)).length].concat(i,n,r)}__scriptFn__(e){return this.client[e].bind(this.client)}disconnect(e=!0){var t,n,r,i;for(t=0,r=(i=Object.keys(this.limiters)).length;t<r;t++)n=i[t],clearInterval(this.limiters[n]._store.heartbeat);return this.limiters={},this.terminated=!0,e?this.Promise.all([this.client.quit(),this.subscriber.quit()]):(this.client.disconnect(),this.subscriber.disconnect(),this.Promise.resolve())}}return IORedisConnection.prototype.datastore="ioredis",IORedisConnection.prototype.defaults={Redis:null,clientOptions:{},clusterNodes:null,client:null,Promise:Promise,Events:null},IORedisConnection}.call(void 0),IORedisConnection_1=IORedisConnection,IORedisConnection_1}function requireRedisDatastore(){if(hasRequiredRedisDatastore)return RedisDatastore_1;function e(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{r||null==a.return||a.return()}finally{if(i)throw s}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function t(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function n(e){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=e.apply(n,r);function a(e){t(o,i,s,a,c,"next",e)}function c(e){t(o,i,s,a,c,"throw",e)}a(void 0)})}}var r,i,s,o;return hasRequiredRedisDatastore=1,o=requireParser(),r=requireBottleneckError(),s=requireRedisConnection(),i=requireIORedisConnection(),RedisDatastore_1=class{constructor(e,t,n){this.instance=e,this.storeOptions=t,this.originalId=this.instance.id,this.clientId=this.instance._randomIndex(),o.load(n,n,this),this.clients={},this.capacityPriorityCounters={},this.sharedConnection=null!=this.connection,null==this.connection&&(this.connection="redis"===this.instance.datastore?new s({Redis:this.Redis,clientOptions:this.clientOptions,Promise:this.Promise,Events:this.instance.Events}):"ioredis"===this.instance.datastore?new i({Redis:this.Redis,clientOptions:this.clientOptions,clusterNodes:this.clusterNodes,Promise:this.Promise,Events:this.instance.Events}):void 0),this.instance.connection=this.connection,this.instance.datastore=this.connection.datastore,this.ready=this.connection.ready.then(e=>(this.clients=e,this.runScript("init",this.prepareInitSettings(this.clearDatastore)))).then(()=>this.connection.__addLimiter__(this.instance)).then(()=>this.runScript("register_client",[this.instance.queued()])).then(()=>{var e;return"function"==typeof(e=this.heartbeat=setInterval(()=>this.runScript("heartbeat",[]).catch(e=>this.instance.Events.trigger("error",e)),this.heartbeatInterval)).unref&&e.unref(),this.clients})}__publish__(e){var t=this;return n(function*(){return(yield t.ready).client.publish(t.instance.channel(),`message:${e.toString()}`)})()}onMessage(t,r){var i=this;return n(function*(){var t,s,o,a,c,u,l,d,h,p;try{l=r.indexOf(":");var m=[r.slice(0,l),r.slice(l+1)];if(o=m[1],"capacity"===(p=m[0]))return yield i.instance._drainAll(o.length>0?~~o:void 0);if("capacity-priority"===p){var _=e(o.split(":"),3);return h=_[0],d=_[1],s=_[2],t=h.length>0?~~h:void 0,d===i.clientId?(a=yield i.instance._drainAll(t),u=null!=t?t-(a||0):"",yield i.clients.client.publish(i.instance.channel(),`capacity-priority:${u}::${s}`)):""===d?(clearTimeout(i.capacityPriorityCounters[s]),delete i.capacityPriorityCounters[s],i.instance._drainAll(t)):i.capacityPriorityCounters[s]=setTimeout(n(function*(){var e;try{return delete i.capacityPriorityCounters[s],yield i.runScript("blacklist_client",[d]),yield i.instance._drainAll(t)}catch(t){return e=t,i.instance.Events.trigger("error",e)}}),1e3)}if("message"===p)return i.instance.Events.trigger("message",o);if("blocked"===p)return yield i.instance._dropAllQueued()}catch(e){return c=e,i.instance.Events.trigger("error",c)}})()}__disconnect__(e){return clearInterval(this.heartbeat),this.sharedConnection?this.connection.__removeLimiter__(this.instance):this.connection.disconnect(e)}runScript(e,t){var r=this;return n(function*(){return"init"!==e&&"register_client"!==e&&(yield r.ready),new r.Promise((n,i)=>{var s,o;return s=[Date.now(),r.clientId].concat(t),r.instance.Events.trigger("debug",`Calling Redis script: ${e}.lua`,s),o=r.connection.__scriptArgs__(e,r.originalId,s,function(e,t){return null!=e?i(e):n(t)}),r.connection.__scriptFn__(e)(...o)}).catch(n=>"SETTINGS_KEY_NOT_FOUND"===n.message?"heartbeat"===e?r.Promise.resolve():r.runScript("init",r.prepareInitSettings(!1)).then(()=>r.runScript(e,t)):"UNKNOWN_CLIENT"===n.message?r.runScript("register_client",[r.instance.queued()]).then(()=>r.runScript(e,t)):r.Promise.reject(n))})()}prepareArray(e){var t,n,r,i;for(r=[],t=0,n=e.length;t<n;t++)i=e[t],r.push(null!=i?i.toString():"");return r}prepareObject(e){var t,n,r;for(n in t=[],e)r=e[n],t.push(n,null!=r?r.toString():"");return t}prepareInitSettings(e){var t;return(t=this.prepareObject(Object.assign({},this.storeOptions,{id:this.originalId,version:this.instance.version,groupTimeout:this.timeout,clientTimeout:this.clientTimeout}))).unshift(e?1:0,this.instance.version),t}convertBool(e){return!!e}__updateSettings__(e){var t=this;return n(function*(){return yield t.runScript("update_settings",t.prepareObject(e)),o.overwrite(e,e,t.storeOptions)})()}__running__(){return this.runScript("running",[])}__queued__(){return this.runScript("queued",[])}__done__(){return this.runScript("done",[])}__groupCheck__(){var e=this;return n(function*(){return e.convertBool(yield e.runScript("group_check",[]))})()}__incrementReservoir__(e){return this.runScript("increment_reservoir",[e])}__currentReservoir__(){return this.runScript("current_reservoir",[])}__check__(e){var t=this;return n(function*(){return t.convertBool(yield t.runScript("check",t.prepareArray([e])))})()}__register__(t,r,i){var s=this;return n(function*(){var n,o,a,c=e(yield s.runScript("register",s.prepareArray([t,r,i])),3);return o=c[0],a=c[1],n=c[2],{success:s.convertBool(o),wait:a,reservoir:n}})()}__submit__(t,i){var s=this;return n(function*(){var n,o,a,c,u;try{var l=e(yield s.runScript("submit",s.prepareArray([t,i])),3);return c=l[0],n=l[1],u=l[2],{reachedHWM:s.convertBool(c),blocked:s.convertBool(n),strategy:u}}catch(t){if(0===(o=t).message.indexOf("OVERWEIGHT")){var d=e(o.message.split(":"),3);throw d[0],i=d[1],a=d[2],new r(`Impossible to add a job having a weight of ${i} to a limiter having a maxConcurrent setting of ${a}`)}throw o}})()}__free__(e,t){var r=this;return n(function*(){return{running:yield r.runScript("free",r.prepareArray([e]))}})()}}}function requireStates(){return hasRequiredStates?States_1:(hasRequiredStates=1,e=requireBottleneckError(),States_1=class{constructor(e){this.status=e,this._jobs={},this.counts=this.status.map(function(){return 0})}next(e){var t,n;return n=(t=this._jobs[e])+1,null!=t&&n<this.status.length?(this.counts[t]--,this.counts[n]++,this._jobs[e]++):null!=t?(this.counts[t]--,delete this._jobs[e]):void 0}start(e){return this._jobs[e]=0,this.counts[0]++}remove(e){var t;return null!=(t=this._jobs[e])&&(this.counts[t]--,delete this._jobs[e]),null!=t}jobStatus(e){var t;return null!=(t=this.status[this._jobs[e]])?t:null}statusJobs(t){var n,r,i,s;if(null!=t){if((r=this.status.indexOf(t))<0)throw new e(`status must be one of ${this.status.join(", ")}`);for(n in s=[],i=this._jobs)i[n]===r&&s.push(n);return s}return Object.keys(this._jobs)}statusCounts(){return this.counts.reduce((e,t,n)=>(e[this.status[n]]=t,e),{})}});var e}function requireSync(){if(hasRequiredSync)return Sync_1;function e(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=t.apply(n,r);function a(t){e(o,i,s,a,c,"next",t)}function c(t){e(o,i,s,a,c,"throw",t)}a(void 0)})}}var n;return hasRequiredSync=1,n=requireDLList(),Sync_1=class{constructor(e,t){this.schedule=this.schedule.bind(this),this.name=e,this.Promise=t,this._running=0,this._queue=new n}isEmpty(){return 0===this._queue.length}_tryToRun(){var e=this;return t(function*(){var n,r,i,s,o,a,c;if(e._running<1&&e._queue.length>0){e._running++;var u=e._queue.shift();return c=u.task,n=u.args,o=u.resolve,s=u.reject,r=yield t(function*(){try{return a=yield c(...n),function(){return o(a)}}catch(e){return i=e,function(){return s(i)}}})(),e._running--,e._tryToRun(),r()}})()}schedule(e,...t){var n,r,i;return i=r=null,n=new this.Promise(function(e,t){return i=e,r=t}),this._queue.push({task:e,args:t,resolve:i,reject:r}),this._tryToRun(),n}}}const version="2.19.5";var require$$8={version:version},Group_1,hasRequiredGroup,Batcher_1,hasRequiredBatcher,Bottleneck_1,hasRequiredBottleneck,lib,hasRequiredLib;function requireGroup(){if(hasRequiredGroup)return Group_1;function e(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{r||null==a.return||a.return()}finally{if(i)throw s}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function t(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function n(e){return function(){var n=this,r=arguments;return new Promise(function(i,s){var o=e.apply(n,r);function a(e){t(o,i,s,a,c,"next",e)}function c(e){t(o,i,s,a,c,"throw",e)}a(void 0)})}}var r,i,s,o,a,c;return hasRequiredGroup=1,c=requireParser(),r=requireEvents(),o=requireRedisConnection(),s=requireIORedisConnection(),a=requireScripts(),i=function(){class t{constructor(e={}){this.deleteKey=this.deleteKey.bind(this),this.limiterOptions=e,c.load(this.limiterOptions,this.defaults,this),this.Events=new r(this),this.instances={},this.Bottleneck=requireBottleneck(),this._startAutoCleanup(),this.sharedConnection=null!=this.connection,null==this.connection&&("redis"===this.limiterOptions.datastore?this.connection=new o(Object.assign({},this.limiterOptions,{Events:this.Events})):"ioredis"===this.limiterOptions.datastore&&(this.connection=new s(Object.assign({},this.limiterOptions,{Events:this.Events}))))}key(e=""){var t;return null!=(t=this.instances[e])?t:(()=>{var t;return t=this.instances[e]=new this.Bottleneck(Object.assign(this.limiterOptions,{id:`${this.id}-${e}`,timeout:this.timeout,connection:this.connection})),this.Events.trigger("created",t,e),t})()}deleteKey(e=""){var t=this;return n(function*(){var n,r;return r=t.instances[e],t.connection&&(n=yield t.connection.__runCommand__(["del",...a.allKeys(`${t.id}-${e}`)])),null!=r&&(delete t.instances[e],yield r.disconnect()),null!=r||n>0})()}limiters(){var e,t,n,r;for(e in n=[],t=this.instances)r=t[e],n.push({key:e,limiter:r});return n}keys(){return Object.keys(this.instances)}clusterKeys(){var t=this;return n(function*(){var n,r,i,s,o,a,c;if(null==t.connection)return t.Promise.resolve(t.keys());for(o=[],n=null,c=`b_${t.id}-`.length,9;0!==n;){var u=e(yield t.connection.__runCommand__(["scan",null!=n?n:0,"match",`b_${t.id}-*_settings`,"count",1e4]),2);for(n=~~u[0],i=0,a=(r=u[1]).length;i<a;i++)s=r[i],o.push(s.slice(c,-9))}return o})()}_startAutoCleanup(){var e,t=this;return clearInterval(this.interval),"function"==typeof(e=this.interval=setInterval(n(function*(){var e,n,r,i,s,o;for(n in s=Date.now(),i=[],r=t.instances){o=r[n];try{(yield o._store.__groupCheck__(s))?i.push(t.deleteKey(n)):i.push(void 0)}catch(t){e=t,i.push(o.Events.trigger("error",e))}}return i}),this.timeout/2)).unref?e.unref():void 0}updateSettings(e={}){if(c.overwrite(e,this.defaults,this),c.overwrite(e,e,this.limiterOptions),null!=e.timeout)return this._startAutoCleanup()}disconnect(e=!0){var t;if(!this.sharedConnection)return null!=(t=this.connection)?t.disconnect(e):void 0}}return t.prototype.defaults={timeout:3e5,connection:null,Promise:Promise,id:"group-key"},t}.call(void 0),Group_1=i}function requireBatcher(){return hasRequiredBatcher?Batcher_1:(hasRequiredBatcher=1,n=requireParser(),t=requireEvents(),e=function(){class e{constructor(e={}){this.options=e,n.load(this.options,this.defaults,this),this.Events=new t(this),this._arr=[],this._resetPromise(),this._lastFlush=Date.now()}_resetPromise(){return this._promise=new this.Promise((e,t)=>this._resolve=e)}_flush(){return clearTimeout(this._timeout),this._lastFlush=Date.now(),this._resolve(),this.Events.trigger("batch",this._arr),this._arr=[],this._resetPromise()}add(e){var t;return this._arr.push(e),t=this._promise,this._arr.length===this.maxSize?this._flush():null!=this.maxTime&&1===this._arr.length&&(this._timeout=setTimeout(()=>this._flush(),this.maxTime)),t}}return e.prototype.defaults={maxTime:null,maxSize:null,Promise:Promise},e}.call(void 0),Batcher_1=e);var e,t,n}function requireBottleneck(){if(hasRequiredBottleneck)return Bottleneck_1;function e(e,t){return r(e)||function(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{r||null==a.return||a.return()}finally{if(i)throw s}}return n}(e,t)||n()}function t(e){return r(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||n()}function n(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function r(e){if(Array.isArray(e))return e}function i(e,t,n,r,i,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function s(e){return function(){var t=this,n=arguments;return new Promise(function(r,s){var o=e.apply(t,n);function a(e){i(o,r,s,a,c,"next",e)}function c(e){i(o,r,s,a,c,"throw",e)}a(void 0)})}}hasRequiredBottleneck=1;var o,a,c,u,l,d,h,p,m,_=[].splice;return m=requireParser(),l=requireQueues(),c=requireJob(),u=requireLocalDatastore(),d=requireRedisDatastore(),a=requireEvents(),h=requireStates(),p=requireSync(),o=function(){class n{constructor(e={},...t){var r,i;this._addToQueue=this._addToQueue.bind(this),this._validateOptions(e,t),m.load(e,this.instanceDefaults,this),this._queues=new l(10),this._scheduled={},this._states=new h(["RECEIVED","QUEUED","RUNNING","EXECUTING"].concat(this.trackDoneStatus?["DONE"]:[])),this._limiter=null,this.Events=new a(this),this._submitLock=new p("submit",this.Promise),this._registerLock=new p("register",this.Promise),i=m.load(e,this.storeDefaults,{}),this._store=function(){if("redis"===this.datastore||"ioredis"===this.datastore||null!=this.connection)return r=m.load(e,this.redisStoreDefaults,{}),new d(this,i,r);if("local"===this.datastore)return r=m.load(e,this.localStoreDefaults,{}),new u(this,i,r);throw new n.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`)}.call(this),this._queues.on("leftzero",()=>{var e;return null!=(e=this._store.heartbeat)&&"function"==typeof e.ref?e.ref():void 0}),this._queues.on("zero",()=>{var e;return null!=(e=this._store.heartbeat)&&"function"==typeof e.unref?e.unref():void 0})}_validateOptions(e,t){if(null==e||"object"!=typeof e||0!==t.length)throw new n.prototype.BottleneckError("Bottleneck v2 takes a single object argument. Refer to https://github.com/SGrondin/bottleneck#upgrading-to-v2 if you're upgrading from Bottleneck v1.")}ready(){return this._store.ready}clients(){return this._store.clients}channel(){return`b_${this.id}`}channel_client(){return`b_${this.id}_${this._store.clientId}`}publish(e){return this._store.__publish__(e)}disconnect(e=!0){return this._store.__disconnect__(e)}chain(e){return this._limiter=e,this}queued(e){return this._queues.queued(e)}clusterQueued(){return this._store.__queued__()}empty(){return 0===this.queued()&&this._submitLock.isEmpty()}running(){return this._store.__running__()}done(){return this._store.__done__()}jobStatus(e){return this._states.jobStatus(e)}jobs(e){return this._states.statusJobs(e)}counts(){return this._states.statusCounts()}_randomIndex(){return Math.random().toString(36).slice(2)}check(e=1){return this._store.__check__(e)}_clearGlobalState(e){return null!=this._scheduled[e]&&(clearTimeout(this._scheduled[e].expiration),delete this._scheduled[e],!0)}_free(e,t,n,r){var i=this;return s(function*(){var t,s;try{if(s=(yield i._store.__free__(e,n.weight)).running,i.Events.trigger("debug",`Freed ${n.id}`,r),0===s&&i.empty())return i.Events.trigger("idle")}catch(e){return t=e,i.Events.trigger("error",t)}})()}_run(e,t,n){var r,i,s;return t.doRun(),r=this._clearGlobalState.bind(this,e),s=this._run.bind(this,e,t),i=this._free.bind(this,e,t),this._scheduled[e]={timeout:setTimeout(()=>t.doExecute(this._limiter,r,s,i),n),expiration:null!=t.options.expiration?setTimeout(function(){return t.doExpire(r,s,i)},n+t.options.expiration):void 0,job:t}}_drainOne(e){return this._registerLock.schedule(()=>{var t,n,r,i,s;if(0===this.queued())return this.Promise.resolve(null);s=this._queues.getFirst();var o=r=s.first();return i=o.options,t=o.args,null!=e&&i.weight>e?this.Promise.resolve(null):(this.Events.trigger("debug",`Draining ${i.id}`,{args:t,options:i}),n=this._randomIndex(),this._store.__register__(n,i.weight,i.expiration).then(({success:e,wait:o,reservoir:a})=>{var c;return this.Events.trigger("debug",`Drained ${i.id}`,{success:e,args:t,options:i}),e?(s.shift(),(c=this.empty())&&this.Events.trigger("empty"),0===a&&this.Events.trigger("depleted",c),this._run(n,r,o),this.Promise.resolve(i.weight)):this.Promise.resolve(null)}))})}_drainAll(e,t=0){return this._drainOne(e).then(n=>{var r;return null!=n?(r=null!=e?e-n:e,this._drainAll(r,t+n)):this.Promise.resolve(t)}).catch(e=>this.Events.trigger("error",e))}_dropAllQueued(e){return this._queues.shiftAll(function(t){return t.doDrop({message:e})})}stop(e={}){var t,r;return e=m.load(e,this.stopDefaults),r=e=>{var t;return t=()=>{var t;return(t=this._states.counts)[0]+t[1]+t[2]+t[3]===e},new this.Promise((e,n)=>t()?e():this.on("done",()=>{if(t())return this.removeAllListeners("done"),e()}))},t=e.dropWaitingJobs?(this._run=function(t,n){return n.doDrop({message:e.dropErrorMessage})},this._drainOne=()=>this.Promise.resolve(null),this._registerLock.schedule(()=>this._submitLock.schedule(()=>{var t,n,i;for(t in n=this._scheduled)i=n[t],"RUNNING"===this.jobStatus(i.job.options.id)&&(clearTimeout(i.timeout),clearTimeout(i.expiration),i.job.doDrop({message:e.dropErrorMessage}));return this._dropAllQueued(e.dropErrorMessage),r(0)}))):this.schedule({priority:9,weight:0},()=>r(1)),this._receive=function(t){return t._reject(new n.prototype.BottleneckError(e.enqueueErrorMessage))},this.stop=()=>this.Promise.reject(new n.prototype.BottleneckError("stop() has already been called")),t}_addToQueue(e){var t=this;return s(function*(){var r,i,s,o,a,c,u;r=e.args,o=e.options;try{var l=yield t._store.__submit__(t.queued(),o.weight);a=l.reachedHWM,i=l.blocked,u=l.strategy}catch(n){return s=n,t.Events.trigger("debug",`Could not queue ${o.id}`,{args:r,options:o,error:s}),e.doDrop({error:s}),!1}return i?(e.doDrop(),!0):a&&(null!=(c=u===n.prototype.strategy.LEAK?t._queues.shiftLastFrom(o.priority):u===n.prototype.strategy.OVERFLOW_PRIORITY?t._queues.shiftLastFrom(o.priority+1):u===n.prototype.strategy.OVERFLOW?e:void 0)&&c.doDrop(),null==c||u===n.prototype.strategy.OVERFLOW)?(null==c&&e.doDrop(),a):(e.doQueue(a,i),t._queues.push(e),yield t._drainAll(),a)})()}_receive(e){return null!=this._states.jobStatus(e.options.id)?(e._reject(new n.prototype.BottleneckError(`A job with the same id already exists (id=${e.options.id})`)),!1):(e.doReceive(),this._submitLock.schedule(this._addToQueue,e))}submit(...n){var r,i,s,o,a,u,l,d,h;"function"==typeof n[0]?(u=t(n),i=u[0],n=u.slice(1),l=e(_.call(n,-1),1),r=l[0],o=m.load({},this.jobDefaults)):(o=(d=t(n))[0],i=d[1],n=d.slice(2),h=e(_.call(n,-1),1),r=h[0],o=m.load(o,this.jobDefaults));return a=(...e)=>new this.Promise(function(t,n){return i(...e,function(...e){return(null!=e[0]?n:t)(e)})}),(s=new c(a,n,o,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise)).promise.then(function(e){return"function"==typeof r?r(...e):void 0}).catch(function(e){return Array.isArray(e)?"function"==typeof r?r(...e):void 0:"function"==typeof r?r(e):void 0}),this._receive(s)}schedule(...e){var n,r,i;if("function"==typeof e[0]){var s=t(e);i=s[0],e=s.slice(1),r={}}else{var o=t(e);r=o[0],i=o[1],e=o.slice(2)}return n=new c(i,e,r,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),this._receive(n),n.promise}wrap(e){var t,n;return t=this.schedule.bind(this),(n=function(...n){return t(e.bind(this),...n)}).withOptions=function(n,...r){return t(n,e,...r)},n}updateSettings(e={}){var t=this;return s(function*(){return yield t._store.__updateSettings__(m.overwrite(e,t.storeDefaults)),m.overwrite(e,t.instanceDefaults,t),t})()}currentReservoir(){return this._store.__currentReservoir__()}incrementReservoir(e=0){return this._store.__incrementReservoir__(e)}}return n.default=n,n.Events=a,n.version=n.prototype.version=require$$8.version,n.strategy=n.prototype.strategy={LEAK:1,OVERFLOW:2,OVERFLOW_PRIORITY:4,BLOCK:3},n.BottleneckError=n.prototype.BottleneckError=requireBottleneckError(),n.Group=n.prototype.Group=requireGroup(),n.RedisConnection=n.prototype.RedisConnection=requireRedisConnection(),n.IORedisConnection=n.prototype.IORedisConnection=requireIORedisConnection(),n.Batcher=n.prototype.Batcher=requireBatcher(),n.prototype.jobDefaults={priority:5,weight:1,expiration:null,id:"<no-id>"},n.prototype.storeDefaults={maxConcurrent:null,minTime:0,highWater:null,strategy:n.prototype.strategy.LEAK,penalty:null,reservoir:null,reservoirRefreshInterval:null,reservoirRefreshAmount:null,reservoirIncreaseInterval:null,reservoirIncreaseAmount:null,reservoirIncreaseMaximum:null},n.prototype.localStoreDefaults={Promise:Promise,timeout:null,heartbeatInterval:250},n.prototype.redisStoreDefaults={Promise:Promise,timeout:null,heartbeatInterval:5e3,clientTimeout:1e4,Redis:null,clientOptions:{},clusterNodes:null,clearDatastore:!1,connection:null},n.prototype.instanceDefaults={datastore:"local",connection:null,id:"<no-id>",rejectOnDrop:!0,trackDoneStatus:!1,Promise:Promise},n.prototype.stopDefaults={enqueueErrorMessage:"This limiter has been stopped and cannot accept new jobs.",dropWaitingJobs:!0,dropErrorMessage:"This limiter has been stopped."},n}.call(void 0),Bottleneck_1=o}function requireLib(){return hasRequiredLib?lib:(hasRequiredLib=1,lib=requireBottleneck())}var libExports=requireLib(),Bottleneck=getDefaultExportFromCjs(libExports);const GRANT_TYPE$1="client_credentials",castClientOptionsToRequestParameters=e=>{const{scope:t,clientId:n,clientSecret:r}=e;if(!n)throw new Error('Missing required "clientId" parameter to perform client credentials grant');if(!r)throw new Error('Missing required "clientSecret" parameter to perform client credentials grant');return{client_id:n,client_secret:r,grant_type:GRANT_TYPE$1,...t?{scope:t}:{}}},isEligible$1=e=>{try{return!!castClientOptionsToRequestParameters(e)}catch{return!1}},requestToken$1=(e,t)=>e(castClientOptionsToRequestParameters(t)),RESPONSE_TYPE="token",castToAuthorizationRequestParameters=e=>{const{clientId:t,scope:n,state:r,redirectUri:i}=e;if(!t)throw new Error('Missing required "clientId" parameter to perform implicit grant');return{client_id:t,redirect_uri:i||window.location.href,response_type:RESPONSE_TYPE,...n?{scope:n}:{},...r?{state:r}:{}}},isEligibleForClientRedirect=e=>{try{return!!castToAuthorizationRequestParameters(e)}catch{return!1}},getRedirectUrl=e=>`${e.oauthUrl}/oauth/authorize?${buildQueryString(castToAuthorizationRequestParameters(e))}`,GRANT_TYPE="password",castToTokenRequestParameters=e=>{const{username:t,password:n,scope:r,clientId:i,clientSecret:s}=e;if(!i)throw new Error('Missing required "clientId" parameter to perform password grant');if(!t)throw new Error('Missing required "username" parameter to perform password grant');if(!n)throw new Error('Missing required "password" parameter to perform password grant');return{client_id:i,grant_type:GRANT_TYPE,password:n,username:t,...r?{scope:r}:{},...s?{client_secret:s}:{}}},isEligible=e=>{try{return!!castToTokenRequestParameters(e)}catch{return!1}},requestToken=(e,t)=>e(castToTokenRequestParameters(t));async function maybeUpdateToken(e,t,n,r=!1){if(!r&&e.get("accessToken"))return;const i={...n,refreshToken:e.get("refreshToken")};if(isEligible$2(i))return e.set(await requestToken$2(t,i));if(isEligible(n))return e.set(await requestToken(t,n));if("undefined"!=typeof window&&n.implicit){const t=parseQueryString(window.location.hash).access_token;if(t)return window.history.replaceState({},"",window.location.href.split("#")[0]),e.set({accessToken:t});if(isEligibleForClientRedirect(n))return void(window.location.href=getRedirectUrl(n))}return!r&&isEligible$3(n)?e.set(await requestToken$3(t,n)):n.authorizationRedirect&&isEligibleForClientRedirect$1(n)?n.authorizationRedirect(getRedirectUrl$1(n)):isEligible$1(n)?e.set(await requestToken$1(t,n)):void 0}function sleep(e){return new Promise(t=>setTimeout(()=>t(!0),e))}const requestLogger=makeLogger("REST API Request"),responseLogger=makeLogger("REST API Response"),RETRYABLE_STATUS_CODES=[401,408,429,502,503,504],TOKEN_REFRESH_STATUS_CODES=[401],queue=new Bottleneck({maxConcurrent:QUEUE_CONCURRENCY,minTime:QUEUE_DELAY,reservoir:QUEUE_RESERVOIR}),refillIntervalSet=new Set;function isFormData(e){return void 0!==e&&void 0!==e.formData}function refillReservoir(){if(0===refillIntervalSet.size){const e=setInterval(async()=>{const t=await queue.currentReservoir();return queue.empty()&&0===await queue.running()&&t>10?await queue.incrementReservoir(1)&&clearIntervalFunction(e)&&refillIntervalSet.delete(e):t<QUEUE_RESERVOIR?queue.incrementReservoir(1):clearIntervalFunction(e)&&refillIntervalSet.delete(e)},QUEUE_RESERVOIR_REFILL_INTERVAL);return refillIntervalSet.add(e)}return refillIntervalSet}async function makeResultFromResponse(e){return RETRYABLE_STATUS_CODES.includes(e.status)?e.clone():e.ok?"application/json"!==e.headers.get("content-type")&&204!==e.status?new Error(`Response content type was "${e.headers.get("content-type")}" but expected JSON`):{body:204===e.status?"":await e.json(),status:e.status}:new Error(`${e.status} ${e.statusText}\n\n${await e.text()}`)}function responseWasSuccessful(e){return!RETRYABLE_STATUS_CODES.includes(e.status)}function makeApiRequest(e,t,n,r,i,s,o){return async(a,c)=>{if(c>0){if(c>n.requestMaxRetries){const e=`Maximum number of retries reached while retrying ${a.method} request ${a.path}.`;throw requestLogger.error(e),new Error(e)}requestLogger.warn(`Warning: encountered ${a.status}. Retrying ${a.method} request ${a.path} (retry #${c}).`),await sleep(Math.ceil(Math.random()*n.requestBackOffInterval*2**c))}await maybeUpdateToken(e,t,n,c>0&&TOKEN_REFRESH_STATUS_CODES.includes(a.status));const u=s?.query?(i.includes("?")?"&":"?")+buildQueryString(s.query):"",l=`${n.apiUrl}/api${i}${u}`;if(!e.get("accessToken"))throw new Error(`Unable to get OAuth2 access token. Error trying to call endpoint: ${l}`);try{return refillReservoir()&&await queue.schedule(async()=>{const t=r.toUpperCase(),i=s?.body,a=isFormData(i),c=isFormData(i)?i.formData:{},u=Object.entries(c).reduce((e,[t,n])=>{if(Array.isArray(n)){const[r,i]=n,s=r instanceof Blob?r:new Blob([r]);e.append(t,s,i)}else e.append(t,n);return e},new FormData),d={accept:"application/json",authorization:`Bearer ${e.get("accessToken")}`,"X-Allthings-Caller":`${n.serviceName?n.serviceName:process.env.SEVICE_NAME?process.env.SEVICE_NAME:"unknown service name"} --- clientID ${n.clientId?.split("_")[0]??n.clientId??"no client id present"}`,...a?{}:{"content-type":"application/json"},..."undefined"==typeof window&&"undefined"==typeof document&&{"user-agent":USER_AGENT},...s?.headers};process.env.LOG_REQUEST&&console.log({sdkLogs:{method:t,url:l}}),requestLogger.log(t,l,{body:i,headers:d});const h={body:a?u:JSON.stringify(i)},p=await fetch(l,{cache:"no-cache",credentials:"omit",headers:d,method:t,mode:"cors",...a||i?h:{}}),m=await makeResultFromResponse(p);return responseLogger.log(t,l,m instanceof Error?{error:m}:{body:m.body,status:p.status}),m instanceof Error&&o?{body:m.message,status:p.status}:m})}catch(e){return e}}}async function request(e,t,n,r,i,s,o){const a=await until(responseWasSuccessful,makeApiRequest(e,t,n,r,i,s,o));if(a instanceof Error)throw requestLogger.log("Request Error",a,s),a;return o?a:a.body}const API_METHODS=[agentCreate,agentCreatePermissions,appCreate,appGetById,bucketCreate,bucketAddFile,bucketRemoveFile,bucketRemoveFilesInPath,bucketGet,conversationGetById,conversationCreateMessage,fileCreate,fileDelete,notificationSettingsResetByUser,notificationSettingsUpdateByUser,groupCreate,groupGetById,groupUpdateById,getGroups,lookupIds,notificationsGetByUser,notificationUpdateRead,notificationsUpdateReadByUser,propertyCreate,propertyGetById,propertyUpdateById,getProperties,serviceProviderCreate,serviceProviderGetById,serviceProviderUpdateById,registrationCodeCreate,registrationCodeUpdateById,registrationCodeDelete,registrationCodeGetById,ticketCreateOnUser,ticketCreateOnServiceProvider,ticketGetById,unitCreate,unitGetById,unitUpdateById,getUnits,userCreate,userGetById,userUpdateById,userChangePassword,userCreatePermission,userCreatePermissionBatch,userGetPermissions,userDeletePermission,userCheckInToUtilisationPeriod,userGetUtilisationPeriods,userGetByEmail,getCurrentUser,getUsers,userRelationCreate,userRelationDelete,userRelationsGetByUser,utilisationPeriodCreate,utilisationPeriodDelete,utilisationPeriodGetById,utilisationPeriodUpdateById,utilisationPeriodCheckInUser,utilisationPeriodCheckOutUser,utilisationPeriodAddRegistrationCode,bookingUpdateById,bookingGetById];function restClient(e=DEFAULT_API_WRAPPER_OPTIONS){const t={...DEFAULT_API_WRAPPER_OPTIONS,...e};if(void 0===t.apiUrl)throw new Error("API URL is undefined.");if(void 0===t.oauthUrl)throw new Error("OAuth2 URL is undefined.");if(!t.clientId&&!t.accessToken&&!t.tokenStore&&"undefined"==typeof window)throw new Error('Missing required "clientId" or "accessToken" parameter .');const n=makeFetchTokenRequester(`${t.oauthUrl}/oauth/token`),r=t.tokenStore||createTokenStore({accessToken:t.accessToken,refreshToken:t.refreshToken}),i=partial(request,r,n,t),s=partial(del,i),o=partial(get,i),a=partial(post,i),c=partial(patch,i),u=partial(put,i),l={authorizationCode:{getUri:(e=t.state||pseudoRandomString())=>partial(getRedirectUrl$1,{...t,state:e})(),requestToken:e=>requestAndSaveToStore(partial(requestToken$3,n,{...t,authorizationCode:e||t.authorizationCode}),r)},generateState:pseudoRandomString,refreshToken:e=>requestAndSaveToStore(partial(requestToken$2,n,{...t,refreshToken:e||r.get("refreshToken")}),r)},d=API_METHODS.reduce((e,t)=>({...e,[t.name]:(...e)=>t(d,...e)}),{delete:s,get:o,oauth:l,options:t,patch:c,post:a,put:u});return d}var EnumResource,EnumCountryCode,EnumLocale,EnumTimezone,EnumServiceProviderType,EnumCommunicationMethodType,EnumInputChannel,EnumLookupUserType;exports.EnumResource=void 0,EnumResource=exports.EnumResource||(exports.EnumResource={}),EnumResource.group="group",EnumResource.property="property",EnumResource.serviceProvider="propertyManager",EnumResource.registrationCode="registrationCode",EnumResource.unit="unit",EnumResource.user="user",EnumResource.utilisationPeriod="utilisationPeriod",exports.EnumCountryCode=void 0,EnumCountryCode=exports.EnumCountryCode||(exports.EnumCountryCode={}),EnumCountryCode.CH="CH",EnumCountryCode.DE="DE",EnumCountryCode.FR="FR",EnumCountryCode.IT="IT",EnumCountryCode.NL="NL",EnumCountryCode.PT="PT",EnumCountryCode.US="US",exports.EnumLocale=void 0,EnumLocale=exports.EnumLocale||(exports.EnumLocale={}),EnumLocale.ch_de="ch_DE",EnumLocale.ch_fr="ch_FR",EnumLocale.ch_it="ch_it",EnumLocale.de_DE="de_DE",EnumLocale.it_IT="it_IT",EnumLocale.fr_FR="fr_FR",EnumLocale.pt_PT="pt_PT",EnumLocale.en_US="en_US",exports.EnumTimezone=void 0,EnumTimezone=exports.EnumTimezone||(exports.EnumTimezone={}),EnumTimezone.EuropeBerlin="Europe/Berlin",EnumTimezone.EuropeLondon="Europe/London",EnumTimezone.EuropeSofia="Europe/Sofia",EnumTimezone.EuropeZurich="Europe/Zurich",EnumTimezone.UTC="UTC",exports.EnumServiceProviderType=void 0,EnumServiceProviderType=exports.EnumServiceProviderType||(exports.EnumServiceProviderType={}),EnumServiceProviderType.propertyManager="property-manager",EnumServiceProviderType.craftspeople="craftspeople",exports.EnumCommunicationMethodType=void 0,EnumCommunicationMethodType=exports.EnumCommunicationMethodType||(exports.EnumCommunicationMethodType={}),EnumCommunicationMethodType.email="email",exports.EnumInputChannel=void 0,EnumInputChannel=exports.EnumInputChannel||(exports.EnumInputChannel={}),EnumInputChannel.APP="app",EnumInputChannel.COCKPIT="cockpit",EnumInputChannel.CRAFTSMEN="craftsmen",EnumInputChannel.EMAIL="email",EnumInputChannel.PHONE="phone",EnumInputChannel.WHATS_APP="whats_app",exports.EnumLookupUserType=void 0,EnumLookupUserType=exports.EnumLookupUserType||(exports.EnumLookupUserType={}),EnumLookupUserType.agent="agent",EnumLookupUserType.tenant="tenant",exports.buildQueryString=buildQueryString,exports.createTokenStore=createTokenStore,exports.parseQueryString=parseQueryString,exports.restClient=restClient});
|
package/dist/src/index.d.ts
CHANGED
|
@@ -12,3 +12,4 @@ export { MethodGetUnits } from './rest/methods/unit';
|
|
|
12
12
|
export { IUser, IUserPermission } from './rest/methods/user';
|
|
13
13
|
export { IUtilisationPeriod } from './rest/methods/utilisationPeriod';
|
|
14
14
|
export { EnumCommunicationMethodType, EnumCountryCode, EnumInputChannel, EnumLocale, EnumLookupUserType, EnumResource, EnumServiceProviderType, EnumTimezone, IAllthingsRestClient, IAllthingsRestClientOptions, } from './rest/types';
|
|
15
|
+
export { buildQueryString, parseQueryString } from './utils/queryString';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allthings/sdk",
|
|
3
|
-
"version": "9.0
|
|
3
|
+
"version": "9.1.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "Allthings GmbH",
|
|
6
6
|
"keywords": [
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"homepage": "https://github.com/allthings/node-sdk",
|
|
16
16
|
"engines": {
|
|
17
|
-
"node": "^22"
|
|
17
|
+
"node": "^22 || >=24"
|
|
18
18
|
},
|
|
19
19
|
"packageManager": "yarn@1.22.22",
|
|
20
20
|
"release": {
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@allthings/eslint-config": "3.1.0",
|
|
63
|
-
"@commitlint/cli": "20.5.
|
|
64
|
-
"@commitlint/config-conventional": "20.5.
|
|
63
|
+
"@commitlint/cli": "20.5.3",
|
|
64
|
+
"@commitlint/config-conventional": "20.5.3",
|
|
65
65
|
"@rollup/plugin-commonjs": "29.0.2",
|
|
66
66
|
"@rollup/plugin-json": "6.1.0",
|
|
67
67
|
"@rollup/plugin-node-resolve": "16.0.3",
|