@medrunner/api-client 0.5.3 → 0.6.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/index.d.mts CHANGED
@@ -300,6 +300,15 @@ interface WritableDbItem extends DbItem {
300
300
  updated: string;
301
301
  }
302
302
 
303
+ interface PromotionalCode extends WritableDbItem {
304
+ redeemerId: string;
305
+ type: CodeType;
306
+ }
307
+ declare enum CodeType {
308
+ Unknown = 0,
309
+ CitizenCon2954 = 1
310
+ }
311
+
303
312
  interface Person extends WritableDbItem {
304
313
  discordId: string;
305
314
  rsiHandle?: string;
@@ -313,6 +322,10 @@ interface Person extends WritableDbItem {
313
322
  * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.
314
323
  */
315
324
  clientPortalPreferences: Record<string, unknown>;
325
+ /**
326
+ * @deprecated Fetch this information via {@link client.getRedeemedCodes} instead.
327
+ */
328
+ redeemedCodes: RedeemedCode[];
316
329
  clientPortalPreferencesBlob?: string;
317
330
  allowAnonymousAlert: boolean;
318
331
  initialJoinDate?: string;
@@ -344,10 +357,6 @@ interface RedeemedCode {
344
357
  code: string;
345
358
  type: CodeType;
346
359
  }
347
- declare enum CodeType {
348
- Unknown = 0,
349
- CitizenCon2954 = 1
350
- }
351
360
 
352
361
  /**
353
362
  * Endpoints for interacting with clients.
@@ -396,6 +405,10 @@ declare class ClientEndpoint extends ApiEndpoint {
396
405
  declare class CodeEndpoint extends ApiEndpoint {
397
406
  constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider);
398
407
  protected endpoint(): string;
408
+ /**
409
+ * Gets the redeemed codes for the current user.
410
+ * */
411
+ getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>>;
399
412
  /**
400
413
  * Redeems the specified promotional code for the current user
401
414
  *
@@ -588,14 +601,6 @@ interface Location {
588
601
  tertiaryLocation?: string;
589
602
  }
590
603
 
591
- interface ClientDetailsResponse {
592
- totalEmergencies: number;
593
- emergencySuccessRate: number;
594
- joinDate: string;
595
- personType: PersonType;
596
- hasCitizenCon2954Promo: boolean;
597
- }
598
-
599
604
  declare enum Level {
600
605
  None = 0,
601
606
  Tier1Section1 = 101,
@@ -707,8 +712,6 @@ declare class EmergencyEndpoint extends ApiEndpoint {
707
712
  * @param id - The id of the emergency to rate
708
713
  * @param rating - The rating to give the services provided
709
714
  * @param remarks - Additional remarks provided by the client
710
- *
711
- * @internal
712
715
  * */
713
716
  rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse>;
714
717
  /**
@@ -717,12 +720,6 @@ declare class EmergencyEndpoint extends ApiEndpoint {
717
720
  * @param id - The id of the emergency to get team details about
718
721
  * */
719
722
  teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>>;
720
- /**
721
- * Fetches additional details about the client for an alert.
722
- *
723
- * @param id - The id of the emergency to get client details about
724
- * */
725
- clientDetails(id: string): Promise<ApiResponse<ClientDetailsResponse>>;
726
723
  }
727
724
 
728
725
  interface OrgSettings extends WritableDbItem {
@@ -902,4 +899,4 @@ declare enum ClientType {
902
899
  STAFF_PORTAL = 2
903
900
  }
904
901
 
905
- export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, type ClientDetailsResponse, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PublicOrgSettings, type RedeemedCode, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
902
+ export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type RedeemedCode, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
package/dist/index.d.ts CHANGED
@@ -300,6 +300,15 @@ interface WritableDbItem extends DbItem {
300
300
  updated: string;
301
301
  }
302
302
 
303
+ interface PromotionalCode extends WritableDbItem {
304
+ redeemerId: string;
305
+ type: CodeType;
306
+ }
307
+ declare enum CodeType {
308
+ Unknown = 0,
309
+ CitizenCon2954 = 1
310
+ }
311
+
303
312
  interface Person extends WritableDbItem {
304
313
  discordId: string;
305
314
  rsiHandle?: string;
@@ -313,6 +322,10 @@ interface Person extends WritableDbItem {
313
322
  * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.
314
323
  */
315
324
  clientPortalPreferences: Record<string, unknown>;
325
+ /**
326
+ * @deprecated Fetch this information via {@link client.getRedeemedCodes} instead.
327
+ */
328
+ redeemedCodes: RedeemedCode[];
316
329
  clientPortalPreferencesBlob?: string;
317
330
  allowAnonymousAlert: boolean;
318
331
  initialJoinDate?: string;
@@ -344,10 +357,6 @@ interface RedeemedCode {
344
357
  code: string;
345
358
  type: CodeType;
346
359
  }
347
- declare enum CodeType {
348
- Unknown = 0,
349
- CitizenCon2954 = 1
350
- }
351
360
 
352
361
  /**
353
362
  * Endpoints for interacting with clients.
@@ -396,6 +405,10 @@ declare class ClientEndpoint extends ApiEndpoint {
396
405
  declare class CodeEndpoint extends ApiEndpoint {
397
406
  constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider);
398
407
  protected endpoint(): string;
408
+ /**
409
+ * Gets the redeemed codes for the current user.
410
+ * */
411
+ getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>>;
399
412
  /**
400
413
  * Redeems the specified promotional code for the current user
401
414
  *
@@ -588,14 +601,6 @@ interface Location {
588
601
  tertiaryLocation?: string;
589
602
  }
590
603
 
591
- interface ClientDetailsResponse {
592
- totalEmergencies: number;
593
- emergencySuccessRate: number;
594
- joinDate: string;
595
- personType: PersonType;
596
- hasCitizenCon2954Promo: boolean;
597
- }
598
-
599
604
  declare enum Level {
600
605
  None = 0,
601
606
  Tier1Section1 = 101,
@@ -707,8 +712,6 @@ declare class EmergencyEndpoint extends ApiEndpoint {
707
712
  * @param id - The id of the emergency to rate
708
713
  * @param rating - The rating to give the services provided
709
714
  * @param remarks - Additional remarks provided by the client
710
- *
711
- * @internal
712
715
  * */
713
716
  rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse>;
714
717
  /**
@@ -717,12 +720,6 @@ declare class EmergencyEndpoint extends ApiEndpoint {
717
720
  * @param id - The id of the emergency to get team details about
718
721
  * */
719
722
  teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>>;
720
- /**
721
- * Fetches additional details about the client for an alert.
722
- *
723
- * @param id - The id of the emergency to get client details about
724
- * */
725
- clientDetails(id: string): Promise<ApiResponse<ClientDetailsResponse>>;
726
723
  }
727
724
 
728
725
  interface OrgSettings extends WritableDbItem {
@@ -902,4 +899,4 @@ declare enum ClientType {
902
899
  STAFF_PORTAL = 2
903
900
  }
904
901
 
905
- export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, type ClientDetailsResponse, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PublicOrgSettings, type RedeemedCode, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
902
+ export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type RedeemedCode, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
package/dist/index.js CHANGED
@@ -449,6 +449,12 @@ var CodeEndpoint = class extends ApiEndpoint {
449
449
  endpoint() {
450
450
  return "code";
451
451
  }
452
+ /**
453
+ * Gets the redeemed codes for the current user.
454
+ * */
455
+ async getRedeemedCodes() {
456
+ return await this.getRequest("/redeemed");
457
+ }
452
458
  /**
453
459
  * Redeems the specified promotional code for the current user
454
460
  *
@@ -516,8 +522,6 @@ var EmergencyEndpoint = class extends ApiEndpoint {
516
522
  * @param id - The id of the emergency to rate
517
523
  * @param rating - The rating to give the services provided
518
524
  * @param remarks - Additional remarks provided by the client
519
- *
520
- * @internal
521
525
  * */
522
526
  async rateServices(id, rating, remarks) {
523
527
  return await this.postRequest(`/${id}/rate/`, {
@@ -533,14 +537,6 @@ var EmergencyEndpoint = class extends ApiEndpoint {
533
537
  async teamDetails(id) {
534
538
  return await this.getRequest(`/${id}/teamDetails`);
535
539
  }
536
- /**
537
- * Fetches additional details about the client for an alert.
538
- *
539
- * @param id - The id of the emergency to get client details about
540
- * */
541
- async clientDetails(id) {
542
- return await this.getRequest(`/${id}/client`);
543
- }
544
540
  };
545
541
 
546
542
  // src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts
@@ -793,11 +789,6 @@ var AccountDeactivationReason = /* @__PURE__ */ ((AccountDeactivationReason2) =>
793
789
  AccountDeactivationReason2[AccountDeactivationReason2["BLOCKED"] = 3] = "BLOCKED";
794
790
  return AccountDeactivationReason2;
795
791
  })(AccountDeactivationReason || {});
796
- var CodeType = /* @__PURE__ */ ((CodeType2) => {
797
- CodeType2[CodeType2["Unknown"] = 0] = "Unknown";
798
- CodeType2[CodeType2["CitizenCon2954"] = 1] = "CitizenCon2954";
799
- return CodeType2;
800
- })(CodeType || {});
801
792
 
802
793
  // src/models/Level.ts
803
794
  var Level = /* @__PURE__ */ ((Level2) => {
@@ -875,6 +866,13 @@ var ClientType = /* @__PURE__ */ ((ClientType2) => {
875
866
  ClientType2[ClientType2["STAFF_PORTAL"] = 2] = "STAFF_PORTAL";
876
867
  return ClientType2;
877
868
  })(ClientType || {});
869
+
870
+ // src/models/PromotionalCode.ts
871
+ var CodeType = /* @__PURE__ */ ((CodeType2) => {
872
+ CodeType2[CodeType2["Unknown"] = 0] = "Unknown";
873
+ CodeType2[CodeType2["CitizenCon2954"] = 1] = "CitizenCon2954";
874
+ return CodeType2;
875
+ })(CodeType || {});
878
876
  // Annotate the CommonJS export names for ESM import in node:
879
877
  0 && (module.exports = {
880
878
  AccountDeactivationReason,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts"],"sourcesContent":["import ApiClient from \"./api/ApiClient\";\nimport ApiConfig from \"./api/ApiConfig\";\nimport ApiResponse from \"./api/ApiResponse\";\nimport DefaultApiConfig from \"./api/endpoints/DefaultApiConfig\";\nimport MedrunnerApiClient from \"./api/MedrunnerApiClient\";\nimport PaginatedResponse from \"./api/PaginatedResponse\";\n\nexport { MedrunnerApiClient, ApiClient, ApiResponse, PaginatedResponse, ApiConfig, DefaultApiConfig };\n\nexport * from \"./Func\";\n\nimport ApiEndpoint from \"./api/endpoints/ApiEndpoint\";\nimport AuthEndpoint from \"./api/endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./api/endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./api/endpoints/chatMessage/ChatMessageEndpoint\";\nimport ChatMessageRequest from \"./api/endpoints/chatMessage/request/ChatMessageRequest\";\nimport ClientEndpoint from \"./api/endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./api/endpoints/code/CodeEndpoint\";\nimport EmergencyEndpoint from \"./api/endpoints/emergency/EmergencyEndpoint\";\nimport CreateEmergencyRequest from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nimport ClientDetailsResponse from \"./api/endpoints/emergency/response/ClientDetailsResponse\";\nimport LocationDetail from \"./api/endpoints/emergency/response/LocationDetail\";\nimport TeamDetailsResponse from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nimport OrgSettingsEndpoint from \"./api/endpoints/orgSettings/OrgSettingsEndpoint\";\nimport MedalInformation from \"./api/endpoints/staff/response/MedalInformation\";\nimport StaffEndpoint from \"./api/endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./api/endpoints/websocket/WebsocketEndpoint\";\n\nexport * from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nexport * from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nexport * from \"./api/endpoints/emergency/response/ClientDetailsResponse\";\nexport * from \"./api/endpoints/emergency/response/LocationDetail\";\n\nexport {\n ApiEndpoint,\n CreateEmergencyRequest,\n TeamDetailsResponse,\n ClientDetailsResponse,\n LocationDetail,\n EmergencyEndpoint,\n ChatMessageEndpoint,\n ChatMessageRequest,\n CodeEndpoint,\n OrgSettingsEndpoint,\n AuthEndpoint,\n ClientEndpoint,\n StaffEndpoint,\n MedalInformation,\n WebsocketEndpoint,\n TokenManager,\n};\n\nexport * from \"./models/CancellationReason\";\nexport * from \"./models/Class\";\nexport * from \"./models/Emergency\";\nexport * from \"./models/EmergencyStats\";\nexport * from \"./models/MissionStatus\";\nexport * from \"./models/Person\";\nexport * from \"./models/Level\";\nexport * from \"./models/ResponseRating\";\nexport * from \"./models/Team\";\nexport * from \"./models/TeamMember\";\nexport * from \"./models/ThreatLevel\";\nexport * from \"./models/OrgSettings\";\nexport * from \"./models/Deployment\";\n\nimport ApiToken from \"./models/ApiToken\";\nimport ChatMessage from \"./models/ChatMessage\";\nimport ClientHistory from \"./models/ClientHistory\";\nimport DbItem from \"./models/DbItem\";\nimport Deployment from \"./models/Deployment\";\nimport Emergency from \"./models/Emergency\";\nimport EmergencyStats from \"./models/EmergencyStats\";\nimport OrgSettings from \"./models/OrgSettings\";\nimport Person from \"./models/Person\";\nimport Team from \"./models/Team\";\nimport TeamMember from \"./models/TeamMember\";\nimport TokenGrant from \"./models/TokenGrant\";\nimport WritableDbItem from \"./models/WritableDbItem\";\n\nexport {\n ApiToken,\n ChatMessage,\n Deployment,\n DbItem,\n Emergency,\n EmergencyStats,\n OrgSettings,\n ClientHistory,\n Person,\n Team,\n TeamMember,\n TokenGrant,\n WritableDbItem,\n};\n","import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport ClientDetailsResponse from \"./response/ClientDetailsResponse\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n *\n * @internal\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n\n /**\n * Fetches additional details about the client for an alert.\n *\n * @param id - The id of the emergency to get client details about\n * */\n public async clientDetails(id: string): Promise<ApiResponse<ClientDetailsResponse>> {\n return await this.getRequest<ClientDetailsResponse>(`/${id}/client`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n /**\n * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.\n */\n clientPortalPreferences: Record<string, unknown>;\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n TERMINATED,\n BLOCKED,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n\nexport interface RedeemedCode {\n code: string;\n type: CodeType;\n}\n\nexport enum CodeType {\n Unknown,\n CitizenCon2954,\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n registrationEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n children: SpaceLocation[];\n enabled: boolean;\n}\n\nexport enum SpaceLocationType {\n UNKNOWN = 0,\n SYSTEM = 1,\n PLANET = 2,\n MOON = 3,\n}\n\nexport enum ServiceStatus {\n UNKNOWN = 0,\n HEALTHY = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n"],"mappings":"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","names":["axios","LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","CodeType","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","ClientType"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts","../src/models/PromotionalCode.ts"],"sourcesContent":["import ApiClient from \"./api/ApiClient\";\nimport ApiConfig from \"./api/ApiConfig\";\nimport ApiResponse from \"./api/ApiResponse\";\nimport DefaultApiConfig from \"./api/endpoints/DefaultApiConfig\";\nimport MedrunnerApiClient from \"./api/MedrunnerApiClient\";\nimport PaginatedResponse from \"./api/PaginatedResponse\";\n\nexport { MedrunnerApiClient, ApiClient, ApiResponse, PaginatedResponse, ApiConfig, DefaultApiConfig };\n\nexport * from \"./Func\";\n\nimport ApiEndpoint from \"./api/endpoints/ApiEndpoint\";\nimport AuthEndpoint from \"./api/endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./api/endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./api/endpoints/chatMessage/ChatMessageEndpoint\";\nimport ChatMessageRequest from \"./api/endpoints/chatMessage/request/ChatMessageRequest\";\nimport ClientEndpoint from \"./api/endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./api/endpoints/code/CodeEndpoint\";\nimport EmergencyEndpoint from \"./api/endpoints/emergency/EmergencyEndpoint\";\nimport CreateEmergencyRequest from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nimport LocationDetail from \"./api/endpoints/emergency/response/LocationDetail\";\nimport TeamDetailsResponse from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nimport OrgSettingsEndpoint from \"./api/endpoints/orgSettings/OrgSettingsEndpoint\";\nimport MedalInformation from \"./api/endpoints/staff/response/MedalInformation\";\nimport StaffEndpoint from \"./api/endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./api/endpoints/websocket/WebsocketEndpoint\";\n\nexport * from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nexport * from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nexport * from \"./api/endpoints/emergency/response/LocationDetail\";\n\nexport {\n ApiEndpoint,\n CreateEmergencyRequest,\n TeamDetailsResponse,\n LocationDetail,\n EmergencyEndpoint,\n ChatMessageEndpoint,\n ChatMessageRequest,\n CodeEndpoint,\n OrgSettingsEndpoint,\n AuthEndpoint,\n ClientEndpoint,\n StaffEndpoint,\n MedalInformation,\n WebsocketEndpoint,\n TokenManager,\n};\n\nexport * from \"./models/CancellationReason\";\nexport * from \"./models/Class\";\nexport * from \"./models/Emergency\";\nexport * from \"./models/EmergencyStats\";\nexport * from \"./models/MissionStatus\";\nexport * from \"./models/Person\";\nexport * from \"./models/Level\";\nexport * from \"./models/ResponseRating\";\nexport * from \"./models/Team\";\nexport * from \"./models/TeamMember\";\nexport * from \"./models/ThreatLevel\";\nexport * from \"./models/OrgSettings\";\nexport * from \"./models/Deployment\";\nexport * from \"./models/PromotionalCode\";\n\nimport ApiToken from \"./models/ApiToken\";\nimport ChatMessage from \"./models/ChatMessage\";\nimport ClientHistory from \"./models/ClientHistory\";\nimport DbItem from \"./models/DbItem\";\nimport Deployment from \"./models/Deployment\";\nimport Emergency from \"./models/Emergency\";\nimport EmergencyStats from \"./models/EmergencyStats\";\nimport OrgSettings from \"./models/OrgSettings\";\nimport Person from \"./models/Person\";\nimport PromotionalCode from \"./models/PromotionalCode\";\nimport Team from \"./models/Team\";\nimport TeamMember from \"./models/TeamMember\";\nimport TokenGrant from \"./models/TokenGrant\";\nimport WritableDbItem from \"./models/WritableDbItem\";\n\nexport {\n ApiToken,\n ChatMessage,\n Deployment,\n DbItem,\n Emergency,\n EmergencyStats,\n OrgSettings,\n ClientHistory,\n Person,\n PromotionalCode,\n Team,\n TeamMember,\n TokenGrant,\n WritableDbItem,\n};\n","import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n * */\n public async getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>> {\n return await this.getRequest<PromotionalCode[]>(\"/redeemed\");\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport { CodeType } from \"./PromotionalCode\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n /**\n * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.\n */\n clientPortalPreferences: Record<string, unknown>;\n /**\n * @deprecated Fetch this information via {@link client.getRedeemedCodes} instead.\n */\n redeemedCodes: RedeemedCode[];\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n TERMINATED,\n BLOCKED,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n\nexport interface RedeemedCode {\n code: string;\n type: CodeType;\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n registrationEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n children: SpaceLocation[];\n enabled: boolean;\n}\n\nexport enum SpaceLocationType {\n UNKNOWN = 0,\n SYSTEM = 1,\n PLANET = 2,\n MOON = 3,\n}\n\nexport enum ServiceStatus {\n UNKNOWN = 0,\n HEALTHY = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n redeemerId: string;\n type: CodeType;\n}\n\nexport enum CodeType {\n Unknown,\n CitizenCon2954,\n}\n"],"mappings":"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","names":["axios","LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","ClientType","CodeType"]}
package/dist/index.mjs CHANGED
@@ -387,6 +387,12 @@ var CodeEndpoint = class extends ApiEndpoint {
387
387
  endpoint() {
388
388
  return "code";
389
389
  }
390
+ /**
391
+ * Gets the redeemed codes for the current user.
392
+ * */
393
+ async getRedeemedCodes() {
394
+ return await this.getRequest("/redeemed");
395
+ }
390
396
  /**
391
397
  * Redeems the specified promotional code for the current user
392
398
  *
@@ -454,8 +460,6 @@ var EmergencyEndpoint = class extends ApiEndpoint {
454
460
  * @param id - The id of the emergency to rate
455
461
  * @param rating - The rating to give the services provided
456
462
  * @param remarks - Additional remarks provided by the client
457
- *
458
- * @internal
459
463
  * */
460
464
  async rateServices(id, rating, remarks) {
461
465
  return await this.postRequest(`/${id}/rate/`, {
@@ -471,14 +475,6 @@ var EmergencyEndpoint = class extends ApiEndpoint {
471
475
  async teamDetails(id) {
472
476
  return await this.getRequest(`/${id}/teamDetails`);
473
477
  }
474
- /**
475
- * Fetches additional details about the client for an alert.
476
- *
477
- * @param id - The id of the emergency to get client details about
478
- * */
479
- async clientDetails(id) {
480
- return await this.getRequest(`/${id}/client`);
481
- }
482
478
  };
483
479
 
484
480
  // src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts
@@ -731,11 +727,6 @@ var AccountDeactivationReason = /* @__PURE__ */ ((AccountDeactivationReason2) =>
731
727
  AccountDeactivationReason2[AccountDeactivationReason2["BLOCKED"] = 3] = "BLOCKED";
732
728
  return AccountDeactivationReason2;
733
729
  })(AccountDeactivationReason || {});
734
- var CodeType = /* @__PURE__ */ ((CodeType2) => {
735
- CodeType2[CodeType2["Unknown"] = 0] = "Unknown";
736
- CodeType2[CodeType2["CitizenCon2954"] = 1] = "CitizenCon2954";
737
- return CodeType2;
738
- })(CodeType || {});
739
730
 
740
731
  // src/models/Level.ts
741
732
  var Level = /* @__PURE__ */ ((Level2) => {
@@ -813,6 +804,13 @@ var ClientType = /* @__PURE__ */ ((ClientType2) => {
813
804
  ClientType2[ClientType2["STAFF_PORTAL"] = 2] = "STAFF_PORTAL";
814
805
  return ClientType2;
815
806
  })(ClientType || {});
807
+
808
+ // src/models/PromotionalCode.ts
809
+ var CodeType = /* @__PURE__ */ ((CodeType2) => {
810
+ CodeType2[CodeType2["Unknown"] = 0] = "Unknown";
811
+ CodeType2[CodeType2["CitizenCon2954"] = 1] = "CitizenCon2954";
812
+ return CodeType2;
813
+ })(CodeType || {});
816
814
  export {
817
815
  AccountDeactivationReason,
818
816
  ApiEndpoint,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts"],"sourcesContent":["import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport ClientDetailsResponse from \"./response/ClientDetailsResponse\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n *\n * @internal\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n\n /**\n * Fetches additional details about the client for an alert.\n *\n * @param id - The id of the emergency to get client details about\n * */\n public async clientDetails(id: string): Promise<ApiResponse<ClientDetailsResponse>> {\n return await this.getRequest<ClientDetailsResponse>(`/${id}/client`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n /**\n * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.\n */\n clientPortalPreferences: Record<string, unknown>;\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n TERMINATED,\n BLOCKED,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n\nexport interface RedeemedCode {\n code: string;\n type: CodeType;\n}\n\nexport enum CodeType {\n Unknown,\n CitizenCon2954,\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n registrationEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n children: SpaceLocation[];\n enabled: boolean;\n}\n\nexport enum SpaceLocationType {\n UNKNOWN = 0,\n SYSTEM = 1,\n PLANET = 2,\n MOON = 3,\n}\n\nexport enum ServiceStatus {\n UNKNOWN = 0,\n HEALTHY = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n"],"mappings":"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","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","CodeType","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","ClientType"]}
1
+ {"version":3,"sources":["../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts","../src/models/PromotionalCode.ts"],"sourcesContent":["import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n * */\n public async getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>> {\n return await this.getRequest<PromotionalCode[]>(\"/redeemed\");\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport { CodeType } from \"./PromotionalCode\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n /**\n * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.\n */\n clientPortalPreferences: Record<string, unknown>;\n /**\n * @deprecated Fetch this information via {@link client.getRedeemedCodes} instead.\n */\n redeemedCodes: RedeemedCode[];\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n TERMINATED,\n BLOCKED,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n\nexport interface RedeemedCode {\n code: string;\n type: CodeType;\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n registrationEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n children: SpaceLocation[];\n enabled: boolean;\n}\n\nexport enum SpaceLocationType {\n UNKNOWN = 0,\n SYSTEM = 1,\n PLANET = 2,\n MOON = 3,\n}\n\nexport enum ServiceStatus {\n UNKNOWN = 0,\n HEALTHY = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n redeemerId: string;\n type: CodeType;\n}\n\nexport enum CodeType {\n Unknown,\n CitizenCon2954,\n}\n"],"mappings":"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","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","ClientType","CodeType"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medrunner/api-client",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "description": "Wrapper library for the Medrunner API",
5
5
  "scripts": {
6
6
  "build": "tsup",