@medrunner/api-client 0.3.8 → 0.4.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
@@ -235,15 +235,13 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
235
235
  constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider);
236
236
  protected endpoint(): string;
237
237
  /**
238
- * Gets the specified amount of chat messages for a given emergency.
238
+ * Fetch a chat message
239
239
  *
240
- * @deprecated Use {@link getMessageHistory} instead
240
+ * @param id - The id of the message
241
+ * @returns The chat message
241
242
  *
242
- * @param emergencyId - The emergency for which to fetch the chat history
243
- * @param limit - The number of emergencies to get
244
- * @param paginationToken - The number to use for pagination
245
243
  * */
246
- getHistory(emergencyId: string, limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ChatMessage>>>;
244
+ getMessage(id: string): Promise<ApiResponse<ChatMessage>>;
247
245
  /**
248
246
  * Gets the specified amount of chat messages for a given emergency.
249
247
  *
@@ -269,6 +267,13 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
269
267
  *
270
268
  * */
271
269
  updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>>;
270
+ /**
271
+ * Delete a chat message
272
+ *
273
+ * @param id - The id of the message to delete
274
+ *
275
+ * */
276
+ deleteMessage(id: string): Promise<ApiResponse>;
272
277
  }
273
278
 
274
279
  interface ClientHistory extends DbItem {
@@ -369,15 +374,6 @@ declare class ClientEndpoint extends ApiEndpoint {
369
374
  *
370
375
  * */
371
376
  linkClient(rsiHandle: string): Promise<ApiResponse<Person>>;
372
- /**
373
- * Updates the settings of the current user for the Client Portal.
374
- *
375
- * @deprecated Use {@link setUserSettings} instead
376
- * @param settings - The stringfied new object settings that will replace the old one
377
- * @returns The updated settings object
378
- *
379
- * */
380
- setSettings(settings: Record<string, unknown>): Promise<ApiResponse<Record<string, unknown>>>;
381
377
  /**
382
378
  * Updates the settings of the current user for the Client Portal.
383
379
  *
@@ -484,10 +480,6 @@ interface Emergency extends WritableDbItem {
484
480
  clientMessage?: MessageCache;
485
481
  coordinationThread?: MessageCache;
486
482
  afterActionReportMessage?: MessageCache;
487
- /**
488
- * @deprecated Will be removed in a future update.
489
- */
490
- interactionMessageId?: string;
491
483
  respondingTeam: Team;
492
484
  respondingTeams: RespondingTeam[];
493
485
  creationTimestamp: number;
@@ -598,45 +590,6 @@ interface Location {
598
590
  tertiaryLocation?: string;
599
591
  }
600
592
 
601
- /**
602
- * A supported location from which an emergency may be submitted.
603
- * */
604
- interface LocationDetail {
605
- /**
606
- * The name of this location
607
- * */
608
- name: string;
609
- /**
610
- * The type of this location
611
- * */
612
- type: LocationType;
613
- /**
614
- * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)
615
- * */
616
- children: LocationDetail[];
617
- }
618
- /**
619
- * The type of location.
620
- * */
621
- declare enum LocationType {
622
- /**
623
- * The location type is not known
624
- * */
625
- UNKNOWN = 0,
626
- /**
627
- * A system, e.g. Stanton
628
- * */
629
- SYSTEM = 1,
630
- /**
631
- * A planet, e.g. Crusader
632
- * */
633
- PLANET = 2,
634
- /**
635
- * A moon, e.g. Daymar
636
- * */
637
- MOON = 3
638
- }
639
-
640
593
  declare enum Level {
641
594
  None = 0,
642
595
  Tier1Section1 = 101,
@@ -758,12 +711,6 @@ declare class EmergencyEndpoint extends ApiEndpoint {
758
711
  * @param id - The id of the emergency to get team details about
759
712
  * */
760
713
  teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>>;
761
- /**
762
- * Gets a tree of valid locations from which an emergency may be submitted.
763
- *
764
- * @deprecated Use {@link getPublicSettings} instead.
765
- * */
766
- emergencyLocations(): Promise<ApiResponse<LocationDetail[]>>;
767
714
  }
768
715
 
769
716
  interface OrgSettings extends WritableDbItem {
@@ -895,6 +842,45 @@ declare class MedrunnerApiClient<TEmergency extends EmergencyEndpoint = Emergenc
895
842
  static buildClient(config: ApiConfig, refreshCallback?: AsyncAction<TokenGrant>, log?: Logger): MedrunnerApiClient;
896
843
  }
897
844
 
845
+ /**
846
+ * A supported location from which an emergency may be submitted.
847
+ * */
848
+ interface LocationDetail {
849
+ /**
850
+ * The name of this location
851
+ * */
852
+ name: string;
853
+ /**
854
+ * The type of this location
855
+ * */
856
+ type: LocationType;
857
+ /**
858
+ * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)
859
+ * */
860
+ children: LocationDetail[];
861
+ }
862
+ /**
863
+ * The type of location.
864
+ * */
865
+ declare enum LocationType {
866
+ /**
867
+ * The location type is not known
868
+ * */
869
+ UNKNOWN = 0,
870
+ /**
871
+ * A system, e.g. Stanton
872
+ * */
873
+ SYSTEM = 1,
874
+ /**
875
+ * A planet, e.g. Crusader
876
+ * */
877
+ PLANET = 2,
878
+ /**
879
+ * A moon, e.g. Daymar
880
+ * */
881
+ MOON = 3
882
+ }
883
+
898
884
  interface Deployment {
899
885
  clientType: ClientType;
900
886
  version: string;
package/dist/index.d.ts CHANGED
@@ -235,15 +235,13 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
235
235
  constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider);
236
236
  protected endpoint(): string;
237
237
  /**
238
- * Gets the specified amount of chat messages for a given emergency.
238
+ * Fetch a chat message
239
239
  *
240
- * @deprecated Use {@link getMessageHistory} instead
240
+ * @param id - The id of the message
241
+ * @returns The chat message
241
242
  *
242
- * @param emergencyId - The emergency for which to fetch the chat history
243
- * @param limit - The number of emergencies to get
244
- * @param paginationToken - The number to use for pagination
245
243
  * */
246
- getHistory(emergencyId: string, limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ChatMessage>>>;
244
+ getMessage(id: string): Promise<ApiResponse<ChatMessage>>;
247
245
  /**
248
246
  * Gets the specified amount of chat messages for a given emergency.
249
247
  *
@@ -269,6 +267,13 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
269
267
  *
270
268
  * */
271
269
  updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>>;
270
+ /**
271
+ * Delete a chat message
272
+ *
273
+ * @param id - The id of the message to delete
274
+ *
275
+ * */
276
+ deleteMessage(id: string): Promise<ApiResponse>;
272
277
  }
273
278
 
274
279
  interface ClientHistory extends DbItem {
@@ -369,15 +374,6 @@ declare class ClientEndpoint extends ApiEndpoint {
369
374
  *
370
375
  * */
371
376
  linkClient(rsiHandle: string): Promise<ApiResponse<Person>>;
372
- /**
373
- * Updates the settings of the current user for the Client Portal.
374
- *
375
- * @deprecated Use {@link setUserSettings} instead
376
- * @param settings - The stringfied new object settings that will replace the old one
377
- * @returns The updated settings object
378
- *
379
- * */
380
- setSettings(settings: Record<string, unknown>): Promise<ApiResponse<Record<string, unknown>>>;
381
377
  /**
382
378
  * Updates the settings of the current user for the Client Portal.
383
379
  *
@@ -484,10 +480,6 @@ interface Emergency extends WritableDbItem {
484
480
  clientMessage?: MessageCache;
485
481
  coordinationThread?: MessageCache;
486
482
  afterActionReportMessage?: MessageCache;
487
- /**
488
- * @deprecated Will be removed in a future update.
489
- */
490
- interactionMessageId?: string;
491
483
  respondingTeam: Team;
492
484
  respondingTeams: RespondingTeam[];
493
485
  creationTimestamp: number;
@@ -598,45 +590,6 @@ interface Location {
598
590
  tertiaryLocation?: string;
599
591
  }
600
592
 
601
- /**
602
- * A supported location from which an emergency may be submitted.
603
- * */
604
- interface LocationDetail {
605
- /**
606
- * The name of this location
607
- * */
608
- name: string;
609
- /**
610
- * The type of this location
611
- * */
612
- type: LocationType;
613
- /**
614
- * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)
615
- * */
616
- children: LocationDetail[];
617
- }
618
- /**
619
- * The type of location.
620
- * */
621
- declare enum LocationType {
622
- /**
623
- * The location type is not known
624
- * */
625
- UNKNOWN = 0,
626
- /**
627
- * A system, e.g. Stanton
628
- * */
629
- SYSTEM = 1,
630
- /**
631
- * A planet, e.g. Crusader
632
- * */
633
- PLANET = 2,
634
- /**
635
- * A moon, e.g. Daymar
636
- * */
637
- MOON = 3
638
- }
639
-
640
593
  declare enum Level {
641
594
  None = 0,
642
595
  Tier1Section1 = 101,
@@ -758,12 +711,6 @@ declare class EmergencyEndpoint extends ApiEndpoint {
758
711
  * @param id - The id of the emergency to get team details about
759
712
  * */
760
713
  teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>>;
761
- /**
762
- * Gets a tree of valid locations from which an emergency may be submitted.
763
- *
764
- * @deprecated Use {@link getPublicSettings} instead.
765
- * */
766
- emergencyLocations(): Promise<ApiResponse<LocationDetail[]>>;
767
714
  }
768
715
 
769
716
  interface OrgSettings extends WritableDbItem {
@@ -895,6 +842,45 @@ declare class MedrunnerApiClient<TEmergency extends EmergencyEndpoint = Emergenc
895
842
  static buildClient(config: ApiConfig, refreshCallback?: AsyncAction<TokenGrant>, log?: Logger): MedrunnerApiClient;
896
843
  }
897
844
 
845
+ /**
846
+ * A supported location from which an emergency may be submitted.
847
+ * */
848
+ interface LocationDetail {
849
+ /**
850
+ * The name of this location
851
+ * */
852
+ name: string;
853
+ /**
854
+ * The type of this location
855
+ * */
856
+ type: LocationType;
857
+ /**
858
+ * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)
859
+ * */
860
+ children: LocationDetail[];
861
+ }
862
+ /**
863
+ * The type of location.
864
+ * */
865
+ declare enum LocationType {
866
+ /**
867
+ * The location type is not known
868
+ * */
869
+ UNKNOWN = 0,
870
+ /**
871
+ * A system, e.g. Stanton
872
+ * */
873
+ SYSTEM = 1,
874
+ /**
875
+ * A planet, e.g. Crusader
876
+ * */
877
+ PLANET = 2,
878
+ /**
879
+ * A moon, e.g. Daymar
880
+ * */
881
+ MOON = 3
882
+ }
883
+
898
884
  interface Deployment {
899
885
  clientType: ClientType;
900
886
  version: string;
package/dist/index.js CHANGED
@@ -326,16 +326,14 @@ var ChatMessageEndpoint = class extends ApiEndpoint {
326
326
  return "chatMessage";
327
327
  }
328
328
  /**
329
- * Gets the specified amount of chat messages for a given emergency.
329
+ * Fetch a chat message
330
330
  *
331
- * @deprecated Use {@link getMessageHistory} instead
331
+ * @param id - The id of the message
332
+ * @returns The chat message
332
333
  *
333
- * @param emergencyId - The emergency for which to fetch the chat history
334
- * @param limit - The number of emergencies to get
335
- * @param paginationToken - The number to use for pagination
336
334
  * */
337
- async getHistory(emergencyId, limit, paginationToken) {
338
- return await this.getRequest(emergencyId, { limit, paginationToken });
335
+ async getMessage(id) {
336
+ return await this.getRequest(id);
339
337
  }
340
338
  /**
341
339
  * Gets the specified amount of chat messages for a given emergency.
@@ -371,6 +369,15 @@ var ChatMessageEndpoint = class extends ApiEndpoint {
371
369
  async updateMessage(id, contents) {
372
370
  return await this.putRequest(id, { contents });
373
371
  }
372
+ /**
373
+ * Delete a chat message
374
+ *
375
+ * @param id - The id of the message to delete
376
+ *
377
+ * */
378
+ async deleteMessage(id) {
379
+ return await this.deleteRequest(id);
380
+ }
374
381
  };
375
382
 
376
383
  // src/api/endpoints/client/ClientEndpoint.ts
@@ -414,17 +421,6 @@ var ClientEndpoint = class extends ApiEndpoint {
414
421
  async linkClient(rsiHandle) {
415
422
  return await this.postRequest("/link", { rsiHandle });
416
423
  }
417
- /**
418
- * Updates the settings of the current user for the Client Portal.
419
- *
420
- * @deprecated Use {@link setUserSettings} instead
421
- * @param settings - The stringfied new object settings that will replace the old one
422
- * @returns The updated settings object
423
- *
424
- * */
425
- async setSettings(settings) {
426
- return await this.patchRequest("/settings/clientPortal", settings);
427
- }
428
424
  /**
429
425
  * Updates the settings of the current user for the Client Portal.
430
426
  *
@@ -537,14 +533,6 @@ var EmergencyEndpoint = class extends ApiEndpoint {
537
533
  async teamDetails(id) {
538
534
  return await this.getRequest(`/${id}/teamDetails`);
539
535
  }
540
- /**
541
- * Gets a tree of valid locations from which an emergency may be submitted.
542
- *
543
- * @deprecated Use {@link getPublicSettings} instead.
544
- * */
545
- async emergencyLocations() {
546
- return await this.getRequest("/meta/locations");
547
- }
548
536
  };
549
537
 
550
538
  // src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts
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 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\";\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 * Gets the specified amount of chat messages for a given emergency.\n *\n * @deprecated Use {@link getMessageHistory} instead\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 getHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(emergencyId, { limit, paginationToken });\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","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 * @deprecated Use {@link setUserSettings} instead\n * @param settings - The stringfied new object settings that will replace the old one\n * @returns The updated settings object\n *\n * */\n public async setSettings(settings: Record<string, unknown>): Promise<ApiResponse<Record<string, unknown>>> {\n return await this.patchRequest<Record<string, unknown>>(\"/settings/clientPortal\", settings);\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 LocationDetail from \"./response/LocationDetail\";\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 * Gets a tree of valid locations from which an emergency may be submitted.\n *\n * @deprecated Use {@link getPublicSettings} instead.\n * */\n public async emergencyLocations(): Promise<ApiResponse<LocationDetail[]>> {\n return await this.getRequest<LocationDetail[]>(\"/meta/locations\");\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 remarks?: string;\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 /**\n * @deprecated Will be removed in a future update.\n */\n interactionMessageId?: string;\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 redeemedCodes: RedeemedCode[];\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"],"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\";\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 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","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 remarks?: string;\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 redeemedCodes: RedeemedCode[];\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"]}
package/dist/index.mjs CHANGED
@@ -264,16 +264,14 @@ var ChatMessageEndpoint = class extends ApiEndpoint {
264
264
  return "chatMessage";
265
265
  }
266
266
  /**
267
- * Gets the specified amount of chat messages for a given emergency.
267
+ * Fetch a chat message
268
268
  *
269
- * @deprecated Use {@link getMessageHistory} instead
269
+ * @param id - The id of the message
270
+ * @returns The chat message
270
271
  *
271
- * @param emergencyId - The emergency for which to fetch the chat history
272
- * @param limit - The number of emergencies to get
273
- * @param paginationToken - The number to use for pagination
274
272
  * */
275
- async getHistory(emergencyId, limit, paginationToken) {
276
- return await this.getRequest(emergencyId, { limit, paginationToken });
273
+ async getMessage(id) {
274
+ return await this.getRequest(id);
277
275
  }
278
276
  /**
279
277
  * Gets the specified amount of chat messages for a given emergency.
@@ -309,6 +307,15 @@ var ChatMessageEndpoint = class extends ApiEndpoint {
309
307
  async updateMessage(id, contents) {
310
308
  return await this.putRequest(id, { contents });
311
309
  }
310
+ /**
311
+ * Delete a chat message
312
+ *
313
+ * @param id - The id of the message to delete
314
+ *
315
+ * */
316
+ async deleteMessage(id) {
317
+ return await this.deleteRequest(id);
318
+ }
312
319
  };
313
320
 
314
321
  // src/api/endpoints/client/ClientEndpoint.ts
@@ -352,17 +359,6 @@ var ClientEndpoint = class extends ApiEndpoint {
352
359
  async linkClient(rsiHandle) {
353
360
  return await this.postRequest("/link", { rsiHandle });
354
361
  }
355
- /**
356
- * Updates the settings of the current user for the Client Portal.
357
- *
358
- * @deprecated Use {@link setUserSettings} instead
359
- * @param settings - The stringfied new object settings that will replace the old one
360
- * @returns The updated settings object
361
- *
362
- * */
363
- async setSettings(settings) {
364
- return await this.patchRequest("/settings/clientPortal", settings);
365
- }
366
362
  /**
367
363
  * Updates the settings of the current user for the Client Portal.
368
364
  *
@@ -475,14 +471,6 @@ var EmergencyEndpoint = class extends ApiEndpoint {
475
471
  async teamDetails(id) {
476
472
  return await this.getRequest(`/${id}/teamDetails`);
477
473
  }
478
- /**
479
- * Gets a tree of valid locations from which an emergency may be submitted.
480
- *
481
- * @deprecated Use {@link getPublicSettings} instead.
482
- * */
483
- async emergencyLocations() {
484
- return await this.getRequest("/meta/locations");
485
- }
486
474
  };
487
475
 
488
476
  // src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts
@@ -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 * Gets the specified amount of chat messages for a given emergency.\n *\n * @deprecated Use {@link getMessageHistory} instead\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 getHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(emergencyId, { limit, paginationToken });\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","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 * @deprecated Use {@link setUserSettings} instead\n * @param settings - The stringfied new object settings that will replace the old one\n * @returns The updated settings object\n *\n * */\n public async setSettings(settings: Record<string, unknown>): Promise<ApiResponse<Record<string, unknown>>> {\n return await this.patchRequest<Record<string, unknown>>(\"/settings/clientPortal\", settings);\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 LocationDetail from \"./response/LocationDetail\";\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 * Gets a tree of valid locations from which an emergency may be submitted.\n *\n * @deprecated Use {@link getPublicSettings} instead.\n * */\n public async emergencyLocations(): Promise<ApiResponse<LocationDetail[]>> {\n return await this.getRequest<LocationDetail[]>(\"/meta/locations\");\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 remarks?: string;\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 /**\n * @deprecated Will be removed in a future update.\n */\n interactionMessageId?: string;\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 redeemedCodes: RedeemedCode[];\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"],"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 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","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 remarks?: string;\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 redeemedCodes: RedeemedCode[];\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medrunner/api-client",
3
- "version": "0.3.8",
3
+ "version": "0.4.0",
4
4
  "description": "Wrapper library for the Medrunner API",
5
5
  "scripts": {
6
6
  "build": "tsup",