@medrunner/api-client 0.6.3 → 0.7.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,3 +19,22 @@ const self = await api.client.get();
19
19
 
20
20
  console.log(self);
21
21
  ```
22
+
23
+ ## Creating a new package version
24
+
25
+ Follow these steps to publish a new version of the package:
26
+
27
+ - Merge your changes into the `main` branch with a pull request
28
+ - Create a new github release and a new tag at the same time in the UI
29
+ - In the case of a beta release:
30
+ - the tag name should be `v1.0.0-beta.1`, where the version number should match the package.json version and the beta number simply increments from beta releases of this same version.
31
+ - set the github release as a pre-release
32
+ - In the case of a stable release:
33
+ - the tag name should be `v1.0.0`, where the version number should match the package.json version.
34
+ - The package will be published with the new version once the release is published.
35
+
36
+ The package will not publish if the release information and package version do not match:
37
+
38
+ - If the release tag has a different version than the package.json version, without taking into account the tags, the package will not be published.
39
+ - If the release tag contains the tag `beta` but the github release is not marked as a pre-release, the package will not be published.
40
+ - If the release is stable but the github release is marked as a pre-release, the package will not be published.
package/dist/index.d.mts CHANGED
@@ -12,7 +12,6 @@ type Headers = {
12
12
  interface DbItem {
13
13
  id: string;
14
14
  created: string;
15
- updated: string;
16
15
  }
17
16
 
18
17
  interface ApiToken extends DbItem {
@@ -250,7 +249,7 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
250
249
  * Gets the specified amount of chat messages for a given emergency.
251
250
  *
252
251
  * @param emergencyId - The emergency for which to fetch the chat history
253
- * @param limit - The number of emergencies to get
252
+ * @param limit - The number of emergencies to get, max 100
254
253
  * @param paginationToken - The number to use for pagination
255
254
  * */
256
255
  getMessageHistory(emergencyId: string, limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ChatMessage>>>;
@@ -300,15 +299,6 @@ interface WritableDbItem extends DbItem {
300
299
  updated: string;
301
300
  }
302
301
 
303
- interface PromotionalCode extends WritableDbItem {
304
- redeemerId: string;
305
- type: CodeType;
306
- }
307
- declare enum CodeType {
308
- Unknown = 0,
309
- CitizenCon2954 = 1
310
- }
311
-
312
302
  interface Person extends WritableDbItem {
313
303
  discordId: string;
314
304
  rsiHandle?: string;
@@ -318,14 +308,6 @@ interface Person extends WritableDbItem {
318
308
  deactivationReason: AccountDeactivationReason;
319
309
  clientStats: ClientStats;
320
310
  activeEmergency?: string;
321
- /**
322
- * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.
323
- */
324
- clientPortalPreferences: Record<string, unknown>;
325
- /**
326
- * @deprecated Fetch this information via {@link client.getRedeemedCodes} instead.
327
- */
328
- redeemedCodes: RedeemedCode[];
329
311
  clientPortalPreferencesBlob?: string;
330
312
  allowAnonymousAlert: boolean;
331
313
  initialJoinDate?: string;
@@ -333,6 +315,7 @@ interface Person extends WritableDbItem {
333
315
  declare enum UserRoles {
334
316
  CLIENT = 1,
335
317
  STAFF = 2,
318
+ CEO = 262144,
336
319
  DEVELOPER = 524288,
337
320
  BOT = 1048576
338
321
  }
@@ -343,9 +326,7 @@ declare enum PersonType {
343
326
  }
344
327
  declare enum AccountDeactivationReason {
345
328
  NONE = 0,
346
- CLIENT_DRIVEN_DELETION = 1,
347
- TERMINATED = 2,
348
- BLOCKED = 3
329
+ CLIENT_DRIVEN_DELETION = 1
349
330
  }
350
331
  interface ClientStats {
351
332
  missions: EmergencyStats;
@@ -353,10 +334,6 @@ interface ClientStats {
353
334
  interface BlockedStatus {
354
335
  blocked: boolean;
355
336
  }
356
- interface RedeemedCode {
357
- code: string;
358
- type: CodeType;
359
- }
360
337
 
361
338
  /**
362
339
  * Endpoints for interacting with clients.
@@ -370,10 +347,10 @@ declare class ClientEndpoint extends ApiEndpoint {
370
347
  get(): Promise<ApiResponse<Person>>;
371
348
  /**
372
349
  * Gets the specified amount of emergencies the client has created.
373
- * @param limit - The number of emergencies to get
350
+ * @param limit - The number of emergencies to get, defaults to 10
374
351
  * @param paginationToken - The number to use for pagination
375
352
  * */
376
- getHistory(limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ClientHistory>>>;
353
+ getHistory(limit?: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ClientHistory>>>;
377
354
  /**
378
355
  * Gets the blocklist status of the current client.
379
356
  * */
@@ -389,7 +366,7 @@ declare class ClientEndpoint extends ApiEndpoint {
389
366
  /**
390
367
  * Updates the settings of the current user for the Client Portal.
391
368
  *
392
- * @param settings - The object settings to add or update
369
+ * @param settings - The stringified object settings to add or update
393
370
  *
394
371
  * */
395
372
  setUserSettings(settings: string): Promise<ApiResponse>;
@@ -399,6 +376,14 @@ declare class ClientEndpoint extends ApiEndpoint {
399
376
  deactivate(): Promise<ApiResponse>;
400
377
  }
401
378
 
379
+ interface PromotionalCode extends WritableDbItem {
380
+ type: CodeType;
381
+ }
382
+ declare enum CodeType {
383
+ UNKNOWN = 0,
384
+ CITIZEN_CON_2954 = 1
385
+ }
386
+
402
387
  /**
403
388
  * Endpoints for interacting with promotional codes.
404
389
  * */
@@ -462,16 +447,16 @@ declare enum Class {
462
447
  interface TeamMember {
463
448
  discordId: string;
464
449
  id: string;
465
- rsiHandle?: string;
450
+ rsiHandle: string;
466
451
  class: Class;
467
- teamId?: string;
452
+ updated: string;
468
453
  }
469
454
 
470
455
  interface Team {
456
+ maxMembers: number;
471
457
  staff: TeamMember[];
472
458
  dispatchers: TeamMember[];
473
459
  allMembers: TeamMember[];
474
- maxMembers: number;
475
460
  }
476
461
 
477
462
  declare enum ThreatLevel {
@@ -491,10 +476,12 @@ interface Emergency extends WritableDbItem {
491
476
  clientId?: string;
492
477
  subscriptionTier: string;
493
478
  status: MissionStatus;
494
- alertMessage?: MessageCache;
495
- clientMessage?: MessageCache;
496
- coordinationThread?: MessageCache;
497
- afterActionReportMessage?: MessageCache;
479
+ cancellationReason: CancellationReason;
480
+ refusalReason?: string;
481
+ alertMessage?: DiscordMessage;
482
+ clientMessage?: DiscordMessage;
483
+ coordinationThread?: DiscordMessage;
484
+ afterActionReportMessage?: DiscordMessage;
498
485
  respondingTeam: Team;
499
486
  respondingTeams: RespondingTeam[];
500
487
  creationTimestamp: number;
@@ -503,16 +490,13 @@ interface Emergency extends WritableDbItem {
503
490
  rating: ResponseRating;
504
491
  ratingRemarks?: string;
505
492
  test: boolean;
506
- cancellationReason: CancellationReason;
507
- refusalReason?: string;
508
493
  origin: Origin;
509
494
  clientData?: ClientData;
510
- isComplete: boolean;
511
495
  missionName?: string;
496
+ isComplete: boolean;
512
497
  afterActionReport?: AfterActionReport;
513
- submissionSource: SubmissionSource;
514
498
  }
515
- interface MessageCache {
499
+ interface DiscordMessage {
516
500
  id: string;
517
501
  channelId: string;
518
502
  }
@@ -520,21 +504,21 @@ interface ClientData {
520
504
  rsiHandle: string;
521
505
  rsiProfileLink: string;
522
506
  gotClientData: boolean;
523
- redactedOrgOnProfile: boolean;
524
507
  reported: boolean;
508
+ userSid?: string;
525
509
  }
526
510
  interface AfterActionReport {
527
- remarks?: string;
528
- submitterStaffId: string;
529
511
  servicesProvided: MissionServices;
530
512
  suspectedTrap: boolean;
531
- hasBeenEdited: boolean;
532
- submittedOn: number;
513
+ remarks?: string;
514
+ submitterStaffId: string;
515
+ submittedOn?: string;
533
516
  editHistory: AfterActionReportEdit[];
517
+ hasBeenEdited: boolean;
534
518
  }
535
519
  interface AfterActionReportEdit {
536
520
  editorStaffId: string;
537
- editTime: number;
521
+ editTime: string;
538
522
  }
539
523
  declare enum MissionServices {
540
524
  NONE = 0,
@@ -729,9 +713,9 @@ interface PublicOrgSettings {
729
713
  status: ServiceStatus;
730
714
  emergenciesEnabled: boolean;
731
715
  anonymousAlertsEnabled: boolean;
732
- registrationEnabled: boolean;
733
716
  messageOfTheDay?: MessageOfTheDay;
734
717
  locationSettings: LocationSettings;
718
+ registrationEnabled: boolean;
735
719
  }
736
720
  interface MessageOfTheDay {
737
721
  message: string;
@@ -747,9 +731,9 @@ interface LocationSettings {
747
731
  interface SpaceLocation {
748
732
  name: string;
749
733
  type: SpaceLocationType;
750
- characteristics: LocationCharacteristic[];
751
734
  children: SpaceLocation[];
752
735
  enabled: boolean;
736
+ characteristics: LocationCharacteristic[];
753
737
  }
754
738
  declare enum SpaceLocationType {
755
739
  UNKNOWN = 0,
@@ -759,7 +743,7 @@ declare enum SpaceLocationType {
759
743
  }
760
744
  declare enum ServiceStatus {
761
745
  UNKNOWN = 0,
762
- HEALTHY = 1,
746
+ OPERATIONAL = 1,
763
747
  SLIGHTLY_DEGRADED = 2,
764
748
  HEAVILY_DEGRADED = 3,
765
749
  OFFLINE = 4
@@ -906,4 +890,4 @@ declare enum ClientType {
906
890
  STAFF_PORTAL = 2
907
891
  }
908
892
 
909
- export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, LocationCharacteristic, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type RedeemedCode, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
893
+ export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type DiscordMessage, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, LocationCharacteristic, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
package/dist/index.d.ts CHANGED
@@ -12,7 +12,6 @@ type Headers = {
12
12
  interface DbItem {
13
13
  id: string;
14
14
  created: string;
15
- updated: string;
16
15
  }
17
16
 
18
17
  interface ApiToken extends DbItem {
@@ -250,7 +249,7 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
250
249
  * Gets the specified amount of chat messages for a given emergency.
251
250
  *
252
251
  * @param emergencyId - The emergency for which to fetch the chat history
253
- * @param limit - The number of emergencies to get
252
+ * @param limit - The number of emergencies to get, max 100
254
253
  * @param paginationToken - The number to use for pagination
255
254
  * */
256
255
  getMessageHistory(emergencyId: string, limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ChatMessage>>>;
@@ -300,15 +299,6 @@ interface WritableDbItem extends DbItem {
300
299
  updated: string;
301
300
  }
302
301
 
303
- interface PromotionalCode extends WritableDbItem {
304
- redeemerId: string;
305
- type: CodeType;
306
- }
307
- declare enum CodeType {
308
- Unknown = 0,
309
- CitizenCon2954 = 1
310
- }
311
-
312
302
  interface Person extends WritableDbItem {
313
303
  discordId: string;
314
304
  rsiHandle?: string;
@@ -318,14 +308,6 @@ interface Person extends WritableDbItem {
318
308
  deactivationReason: AccountDeactivationReason;
319
309
  clientStats: ClientStats;
320
310
  activeEmergency?: string;
321
- /**
322
- * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.
323
- */
324
- clientPortalPreferences: Record<string, unknown>;
325
- /**
326
- * @deprecated Fetch this information via {@link client.getRedeemedCodes} instead.
327
- */
328
- redeemedCodes: RedeemedCode[];
329
311
  clientPortalPreferencesBlob?: string;
330
312
  allowAnonymousAlert: boolean;
331
313
  initialJoinDate?: string;
@@ -333,6 +315,7 @@ interface Person extends WritableDbItem {
333
315
  declare enum UserRoles {
334
316
  CLIENT = 1,
335
317
  STAFF = 2,
318
+ CEO = 262144,
336
319
  DEVELOPER = 524288,
337
320
  BOT = 1048576
338
321
  }
@@ -343,9 +326,7 @@ declare enum PersonType {
343
326
  }
344
327
  declare enum AccountDeactivationReason {
345
328
  NONE = 0,
346
- CLIENT_DRIVEN_DELETION = 1,
347
- TERMINATED = 2,
348
- BLOCKED = 3
329
+ CLIENT_DRIVEN_DELETION = 1
349
330
  }
350
331
  interface ClientStats {
351
332
  missions: EmergencyStats;
@@ -353,10 +334,6 @@ interface ClientStats {
353
334
  interface BlockedStatus {
354
335
  blocked: boolean;
355
336
  }
356
- interface RedeemedCode {
357
- code: string;
358
- type: CodeType;
359
- }
360
337
 
361
338
  /**
362
339
  * Endpoints for interacting with clients.
@@ -370,10 +347,10 @@ declare class ClientEndpoint extends ApiEndpoint {
370
347
  get(): Promise<ApiResponse<Person>>;
371
348
  /**
372
349
  * Gets the specified amount of emergencies the client has created.
373
- * @param limit - The number of emergencies to get
350
+ * @param limit - The number of emergencies to get, defaults to 10
374
351
  * @param paginationToken - The number to use for pagination
375
352
  * */
376
- getHistory(limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ClientHistory>>>;
353
+ getHistory(limit?: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ClientHistory>>>;
377
354
  /**
378
355
  * Gets the blocklist status of the current client.
379
356
  * */
@@ -389,7 +366,7 @@ declare class ClientEndpoint extends ApiEndpoint {
389
366
  /**
390
367
  * Updates the settings of the current user for the Client Portal.
391
368
  *
392
- * @param settings - The object settings to add or update
369
+ * @param settings - The stringified object settings to add or update
393
370
  *
394
371
  * */
395
372
  setUserSettings(settings: string): Promise<ApiResponse>;
@@ -399,6 +376,14 @@ declare class ClientEndpoint extends ApiEndpoint {
399
376
  deactivate(): Promise<ApiResponse>;
400
377
  }
401
378
 
379
+ interface PromotionalCode extends WritableDbItem {
380
+ type: CodeType;
381
+ }
382
+ declare enum CodeType {
383
+ UNKNOWN = 0,
384
+ CITIZEN_CON_2954 = 1
385
+ }
386
+
402
387
  /**
403
388
  * Endpoints for interacting with promotional codes.
404
389
  * */
@@ -462,16 +447,16 @@ declare enum Class {
462
447
  interface TeamMember {
463
448
  discordId: string;
464
449
  id: string;
465
- rsiHandle?: string;
450
+ rsiHandle: string;
466
451
  class: Class;
467
- teamId?: string;
452
+ updated: string;
468
453
  }
469
454
 
470
455
  interface Team {
456
+ maxMembers: number;
471
457
  staff: TeamMember[];
472
458
  dispatchers: TeamMember[];
473
459
  allMembers: TeamMember[];
474
- maxMembers: number;
475
460
  }
476
461
 
477
462
  declare enum ThreatLevel {
@@ -491,10 +476,12 @@ interface Emergency extends WritableDbItem {
491
476
  clientId?: string;
492
477
  subscriptionTier: string;
493
478
  status: MissionStatus;
494
- alertMessage?: MessageCache;
495
- clientMessage?: MessageCache;
496
- coordinationThread?: MessageCache;
497
- afterActionReportMessage?: MessageCache;
479
+ cancellationReason: CancellationReason;
480
+ refusalReason?: string;
481
+ alertMessage?: DiscordMessage;
482
+ clientMessage?: DiscordMessage;
483
+ coordinationThread?: DiscordMessage;
484
+ afterActionReportMessage?: DiscordMessage;
498
485
  respondingTeam: Team;
499
486
  respondingTeams: RespondingTeam[];
500
487
  creationTimestamp: number;
@@ -503,16 +490,13 @@ interface Emergency extends WritableDbItem {
503
490
  rating: ResponseRating;
504
491
  ratingRemarks?: string;
505
492
  test: boolean;
506
- cancellationReason: CancellationReason;
507
- refusalReason?: string;
508
493
  origin: Origin;
509
494
  clientData?: ClientData;
510
- isComplete: boolean;
511
495
  missionName?: string;
496
+ isComplete: boolean;
512
497
  afterActionReport?: AfterActionReport;
513
- submissionSource: SubmissionSource;
514
498
  }
515
- interface MessageCache {
499
+ interface DiscordMessage {
516
500
  id: string;
517
501
  channelId: string;
518
502
  }
@@ -520,21 +504,21 @@ interface ClientData {
520
504
  rsiHandle: string;
521
505
  rsiProfileLink: string;
522
506
  gotClientData: boolean;
523
- redactedOrgOnProfile: boolean;
524
507
  reported: boolean;
508
+ userSid?: string;
525
509
  }
526
510
  interface AfterActionReport {
527
- remarks?: string;
528
- submitterStaffId: string;
529
511
  servicesProvided: MissionServices;
530
512
  suspectedTrap: boolean;
531
- hasBeenEdited: boolean;
532
- submittedOn: number;
513
+ remarks?: string;
514
+ submitterStaffId: string;
515
+ submittedOn?: string;
533
516
  editHistory: AfterActionReportEdit[];
517
+ hasBeenEdited: boolean;
534
518
  }
535
519
  interface AfterActionReportEdit {
536
520
  editorStaffId: string;
537
- editTime: number;
521
+ editTime: string;
538
522
  }
539
523
  declare enum MissionServices {
540
524
  NONE = 0,
@@ -729,9 +713,9 @@ interface PublicOrgSettings {
729
713
  status: ServiceStatus;
730
714
  emergenciesEnabled: boolean;
731
715
  anonymousAlertsEnabled: boolean;
732
- registrationEnabled: boolean;
733
716
  messageOfTheDay?: MessageOfTheDay;
734
717
  locationSettings: LocationSettings;
718
+ registrationEnabled: boolean;
735
719
  }
736
720
  interface MessageOfTheDay {
737
721
  message: string;
@@ -747,9 +731,9 @@ interface LocationSettings {
747
731
  interface SpaceLocation {
748
732
  name: string;
749
733
  type: SpaceLocationType;
750
- characteristics: LocationCharacteristic[];
751
734
  children: SpaceLocation[];
752
735
  enabled: boolean;
736
+ characteristics: LocationCharacteristic[];
753
737
  }
754
738
  declare enum SpaceLocationType {
755
739
  UNKNOWN = 0,
@@ -759,7 +743,7 @@ declare enum SpaceLocationType {
759
743
  }
760
744
  declare enum ServiceStatus {
761
745
  UNKNOWN = 0,
762
- HEALTHY = 1,
746
+ OPERATIONAL = 1,
763
747
  SLIGHTLY_DEGRADED = 2,
764
748
  HEAVILY_DEGRADED = 3,
765
749
  OFFLINE = 4
@@ -906,4 +890,4 @@ declare enum ClientType {
906
890
  STAFF_PORTAL = 2
907
891
  }
908
892
 
909
- export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, LocationCharacteristic, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type RedeemedCode, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
893
+ export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type DiscordMessage, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, LocationCharacteristic, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
package/dist/index.js CHANGED
@@ -340,7 +340,7 @@ var ChatMessageEndpoint = class extends ApiEndpoint {
340
340
  * Gets the specified amount of chat messages for a given emergency.
341
341
  *
342
342
  * @param emergencyId - The emergency for which to fetch the chat history
343
- * @param limit - The number of emergencies to get
343
+ * @param limit - The number of emergencies to get, max 100
344
344
  * @param paginationToken - The number to use for pagination
345
345
  * */
346
346
  async getMessageHistory(emergencyId, limit, paginationToken) {
@@ -400,7 +400,7 @@ var ClientEndpoint = class extends ApiEndpoint {
400
400
  }
401
401
  /**
402
402
  * Gets the specified amount of emergencies the client has created.
403
- * @param limit - The number of emergencies to get
403
+ * @param limit - The number of emergencies to get, defaults to 10
404
404
  * @param paginationToken - The number to use for pagination
405
405
  * */
406
406
  async getHistory(limit, paginationToken) {
@@ -425,7 +425,7 @@ var ClientEndpoint = class extends ApiEndpoint {
425
425
  /**
426
426
  * Updates the settings of the current user for the Client Portal.
427
427
  *
428
- * @param settings - The object settings to add or update
428
+ * @param settings - The stringified object settings to add or update
429
429
  *
430
430
  * */
431
431
  async setUserSettings(settings) {
@@ -773,6 +773,7 @@ var MissionStatus = /* @__PURE__ */ ((MissionStatus2) => {
773
773
  var UserRoles = /* @__PURE__ */ ((UserRoles2) => {
774
774
  UserRoles2[UserRoles2["CLIENT"] = 1] = "CLIENT";
775
775
  UserRoles2[UserRoles2["STAFF"] = 2] = "STAFF";
776
+ UserRoles2[UserRoles2["CEO"] = 262144] = "CEO";
776
777
  UserRoles2[UserRoles2["DEVELOPER"] = 524288] = "DEVELOPER";
777
778
  UserRoles2[UserRoles2["BOT"] = 1048576] = "BOT";
778
779
  return UserRoles2;
@@ -786,8 +787,6 @@ var PersonType = /* @__PURE__ */ ((PersonType2) => {
786
787
  var AccountDeactivationReason = /* @__PURE__ */ ((AccountDeactivationReason2) => {
787
788
  AccountDeactivationReason2[AccountDeactivationReason2["NONE"] = 0] = "NONE";
788
789
  AccountDeactivationReason2[AccountDeactivationReason2["CLIENT_DRIVEN_DELETION"] = 1] = "CLIENT_DRIVEN_DELETION";
789
- AccountDeactivationReason2[AccountDeactivationReason2["TERMINATED"] = 2] = "TERMINATED";
790
- AccountDeactivationReason2[AccountDeactivationReason2["BLOCKED"] = 3] = "BLOCKED";
791
790
  return AccountDeactivationReason2;
792
791
  })(AccountDeactivationReason || {});
793
792
 
@@ -854,7 +853,7 @@ var SpaceLocationType = /* @__PURE__ */ ((SpaceLocationType2) => {
854
853
  })(SpaceLocationType || {});
855
854
  var ServiceStatus = /* @__PURE__ */ ((ServiceStatus2) => {
856
855
  ServiceStatus2[ServiceStatus2["UNKNOWN"] = 0] = "UNKNOWN";
857
- ServiceStatus2[ServiceStatus2["HEALTHY"] = 1] = "HEALTHY";
856
+ ServiceStatus2[ServiceStatus2["OPERATIONAL"] = 1] = "OPERATIONAL";
858
857
  ServiceStatus2[ServiceStatus2["SLIGHTLY_DEGRADED"] = 2] = "SLIGHTLY_DEGRADED";
859
858
  ServiceStatus2[ServiceStatus2["HEAVILY_DEGRADED"] = 3] = "HEAVILY_DEGRADED";
860
859
  ServiceStatus2[ServiceStatus2["OFFLINE"] = 4] = "OFFLINE";
@@ -877,8 +876,8 @@ var ClientType = /* @__PURE__ */ ((ClientType2) => {
877
876
 
878
877
  // src/models/PromotionalCode.ts
879
878
  var CodeType = /* @__PURE__ */ ((CodeType2) => {
880
- CodeType2[CodeType2["Unknown"] = 0] = "Unknown";
881
- CodeType2[CodeType2["CitizenCon2954"] = 1] = "CitizenCon2954";
879
+ CodeType2[CodeType2["UNKNOWN"] = 0] = "UNKNOWN";
880
+ CodeType2[CodeType2["CITIZEN_CON_2954"] = 1] = "CITIZEN_CON_2954";
882
881
  return CodeType2;
883
882
  })(CodeType || {});
884
883
  // Annotate the CommonJS export names for ESM import in node:
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","../src/models/PromotionalCode.ts"],"sourcesContent":["import ApiClient from \"./api/ApiClient\";\nimport ApiConfig from \"./api/ApiConfig\";\nimport ApiResponse from \"./api/ApiResponse\";\nimport DefaultApiConfig from \"./api/endpoints/DefaultApiConfig\";\nimport MedrunnerApiClient from \"./api/MedrunnerApiClient\";\nimport PaginatedResponse from \"./api/PaginatedResponse\";\n\nexport { MedrunnerApiClient, ApiClient, ApiResponse, PaginatedResponse, ApiConfig, DefaultApiConfig };\n\nexport * from \"./Func\";\n\nimport ApiEndpoint from \"./api/endpoints/ApiEndpoint\";\nimport AuthEndpoint from \"./api/endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./api/endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./api/endpoints/chatMessage/ChatMessageEndpoint\";\nimport ChatMessageRequest from \"./api/endpoints/chatMessage/request/ChatMessageRequest\";\nimport ClientEndpoint from \"./api/endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./api/endpoints/code/CodeEndpoint\";\nimport EmergencyEndpoint from \"./api/endpoints/emergency/EmergencyEndpoint\";\nimport CreateEmergencyRequest from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nimport LocationDetail from \"./api/endpoints/emergency/response/LocationDetail\";\nimport TeamDetailsResponse from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nimport OrgSettingsEndpoint from \"./api/endpoints/orgSettings/OrgSettingsEndpoint\";\nimport MedalInformation from \"./api/endpoints/staff/response/MedalInformation\";\nimport StaffEndpoint from \"./api/endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./api/endpoints/websocket/WebsocketEndpoint\";\n\nexport * from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nexport * from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nexport * from \"./api/endpoints/emergency/response/LocationDetail\";\n\nexport {\n ApiEndpoint,\n CreateEmergencyRequest,\n TeamDetailsResponse,\n LocationDetail,\n EmergencyEndpoint,\n ChatMessageEndpoint,\n ChatMessageRequest,\n CodeEndpoint,\n OrgSettingsEndpoint,\n AuthEndpoint,\n ClientEndpoint,\n StaffEndpoint,\n MedalInformation,\n WebsocketEndpoint,\n TokenManager,\n};\n\nexport * from \"./models/CancellationReason\";\nexport * from \"./models/Class\";\nexport * from \"./models/Emergency\";\nexport * from \"./models/EmergencyStats\";\nexport * from \"./models/MissionStatus\";\nexport * from \"./models/Person\";\nexport * from \"./models/Level\";\nexport * from \"./models/ResponseRating\";\nexport * from \"./models/Team\";\nexport * from \"./models/TeamMember\";\nexport * from \"./models/ThreatLevel\";\nexport * from \"./models/OrgSettings\";\nexport * from \"./models/Deployment\";\nexport * from \"./models/PromotionalCode\";\n\nimport ApiToken from \"./models/ApiToken\";\nimport ChatMessage from \"./models/ChatMessage\";\nimport ClientHistory from \"./models/ClientHistory\";\nimport DbItem from \"./models/DbItem\";\nimport Deployment from \"./models/Deployment\";\nimport Emergency from \"./models/Emergency\";\nimport EmergencyStats from \"./models/EmergencyStats\";\nimport OrgSettings from \"./models/OrgSettings\";\nimport Person from \"./models/Person\";\nimport PromotionalCode from \"./models/PromotionalCode\";\nimport Team from \"./models/Team\";\nimport TeamMember from \"./models/TeamMember\";\nimport TokenGrant from \"./models/TokenGrant\";\nimport WritableDbItem from \"./models/WritableDbItem\";\n\nexport {\n ApiToken,\n ChatMessage,\n Deployment,\n DbItem,\n Emergency,\n EmergencyStats,\n OrgSettings,\n ClientHistory,\n Person,\n PromotionalCode,\n Team,\n TeamMember,\n TokenGrant,\n WritableDbItem,\n};\n","import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n * */\n public async getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>> {\n return await this.getRequest<PromotionalCode[]>(\"/redeemed\");\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport { CodeType } from \"./PromotionalCode\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n /**\n * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.\n */\n clientPortalPreferences: Record<string, unknown>;\n /**\n * @deprecated Fetch this information via {@link client.getRedeemedCodes} instead.\n */\n redeemedCodes: RedeemedCode[];\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n TERMINATED,\n BLOCKED,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n\nexport interface RedeemedCode {\n code: string;\n type: CodeType;\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n registrationEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n characteristics: LocationCharacteristic[];\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\nexport enum LocationCharacteristic {\n UNKNOWN = 0,\n HIGH_TEMPERATURE = 1,\n LOW_TEMPERATURE = 2,\n HOSTILE_ATMOSPHERE = 3,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n redeemerId: string;\n type: CodeType;\n}\n\nexport enum CodeType {\n Unknown,\n CitizenCon2954,\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAqB,mBAArB,MAAsC;AAAA,EAFtC,OAEsC;AAAA;AAAA;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,QAAmB;AAC7B,SAAK,UAAU,OAAO,WAAW;AACjC,SAAK,cAAc,OAAO;AAC1B,SAAK,eAAe,OAAO;AAC3B,SAAK,aAAa,OAAO,cAAc;AAAA,EACzC;AACF;;;ACdA,mBAAsD;AAQtD,IAA8B,cAA9B,MAA0C;AAAA,EAG9B,YACR,QACgB,cACG,KACF,gBACjB;AAHgB;AACG;AACF;AAEjB,SAAK,SAAS;AAAA,EAChB;AAAA,EAlBF,OAQ0C;AAAA;AAAA;AAAA,EACxB;AAAA,EAaN,cAAsB;AAC9B,WAAO,GAAG,KAAK,OAAO,OAAO,IAAI,KAAK,SAAS,CAAC;AAAA,EAClD;AAAA,EAEA,MAAc,kBAAkB,kBAAwD;AACtF,UAAM,SAA6B;AAAA,MACjC,SAAS,KAAK,OAAO;AAAA,MACrB,SAAS,CAAC;AAAA,MACV,iBAAiB,KAAK,OAAO;AAAA,IAC/B;AAEA,QAAI,OAAO,YAAY,QAAW;AAChC,UAAI,CAAC,kBAAkB;AACrB,cAAM,cAAc,MAAM,KAAK,aAAa,eAAe,iBAAiB;AAC5E,YAAI,gBAAgB,QAAW;AAE7B,iBAAO,QAAQ,gBAAgB,UAAU,WAAW;AAAA,QACtD;AAAA,MACF;AAEA,UAAI,KAAK,mBAAmB,QAAW;AACrC,mBAAW,UAAU,OAAO,QAAQ,MAAM,KAAK,eAAe,CAAC,GAAG;AAChE,iBAAO,QAAQ,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,WACd,UACA,aACA,kBACyB;AACzB,WAAO,MAAM,KAAK,uBAA0B,UAAU,OAAO,aAAAA,QAAM,KAAK,aAAa,gBAAgB;AAAA,EACvG;AAAA,EAEA,MAAgB,YACd,UACA,MACA,kBACyB;AACzB,WAAO,MAAM,KAAK,oBAAuB,UAAU,QAAQ,aAAAA,QAAM,MAAM,MAAM,gBAAgB;AAAA,EAC/F;AAAA,EAEA,MAAgB,WACd,UACA,MACA,kBACyB;AACzB,WAAO,MAAM,KAAK,oBAAuB,UAAU,OAAO,aAAAA,QAAM,KAAK,MAAM,gBAAgB;AAAA,EAC7F;AAAA,EAEA,MAAgB,aACd,UACA,MACA,kBACyB;AACzB,WAAO,MAAM,KAAK,oBAAuB,UAAU,SAAS,aAAAA,QAAM,OAAO,MAAM,gBAAgB;AAAA,EACjG;AAAA,EAEA,MAAgB,cACd,UACA,aACA,kBACsB;AACtB,WAAO,MAAM,KAAK,uBAAuB,UAAU,UAAU,aAAAA,QAAM,QAAQ,aAAa,gBAAgB;AAAA,EAC1G;AAAA,EAEA,MAAc,oBACZ,UACA,aACA,cACA,MACA,kBACyB;AACzB,UAAM,iBAAkC,8BAAO,YAAY,WAAW,MAAM,aAAa,YAAY,MAAM,MAAM,GAAzE;AACxC,WAAO,MAAM,KAAK,YAAe,UAAU,aAAa,gBAAgB,QAAW,gBAAgB;AAAA,EACrG;AAAA,EAEA,MAAc,uBACZ,UACA,aACA,cACA,aACA,kBACyB;AACzB,UAAM,iBAAkC,8BAAO,YAAY,WAAW,MAAM,aAAa,YAAY,MAAM,GAAnE;AACxC,WAAO,MAAM,KAAK,YAAe,UAAU,aAAa,gBAAgB,aAAa,gBAAgB;AAAA,EACvG;AAAA,EAEQ,SAAS,UAA0B;AACzC,UAAM,UAAU,KAAK,YAAY;AAEjC,QAAI,QAAQ,SAAS,GAAG,GAAG;AACzB,UAAI,SAAS,WAAW,GAAG,GAAG;AAC5B,eAAO,GAAG,OAAO,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MAC3C;AAEA,aAAO,GAAG,OAAO,GAAG,QAAQ;AAAA,IAC9B;AAEA,QAAI,SAAS,WAAW,GAAG,GAAG;AAC5B,aAAO,GAAG,OAAO,GAAG,QAAQ;AAAA,IAC9B;AAEA,WAAO,GAAG,OAAO,IAAI,QAAQ;AAAA,EAC/B;AAAA,EAEA,MAAc,YACZ,UACA,aACA,SACA,aACA,mBAAmB,OACM;AACzB,UAAM,aAAa,KAAK,SAAS,QAAQ;AAEzC,SAAK,KAAK,MAAM,WAAW,WAAW,eAAe,UAAU,EAAE;AACjE,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,kBAAkB,gBAAgB;AAC5D,UAAI,gBAAgB,QAAW;AAC7B,eAAO,SAAS;AAAA,MAClB;AAEA,YAAM,SAAS,MAAM,QAAQ,YAAY,MAAM;AAE/C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,OAAO;AAAA,MACf;AAAA,IACF,SAAS,GAAG;AACV,WAAK,KAAK,KAAK,aAAa,WAAW,eAAe,UAAU,KAAK,CAAC,EAAE;AACxE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,cAAc,aAAa,0BAAa,EAAE,UAAU,OAAO;AAAA,QAC3D,YAAY,aAAa,0BAAa,EAAE,UAAU,SAAS;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AACF;;;ACrJA,IAAqB,eAArB,cAA0C,YAAY;AAAA,EAdtD,OAcsD;AAAA;AAAA;AAAA,EACpD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,QAAQ,UAAiD;AACpE,WAAO,MAAM,KAAK,YAAoB,YAAY,YAAY,IAAI;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,eAAiD;AAC5D,WAAO,MAAM,KAAK,WAAuB,YAAY;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,eAAe,UAA+D;AACzF,WAAO,MAAM,KAAK,YAAoB,cAAc;AAAA,MAClD,MAAM,SAAS;AAAA,MACf,gBAAgB,SAAS,gBAAgB,YAAY;AAAA,IACvD,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,eAAe,IAAkC;AAC5D,WAAO,MAAM,KAAK,cAAc,cAAc,EAAE,EAAE;AAAA,EACpD;AACF;;;ACzDA,IAAqB,eAArB,cAA0C,YAAY;AAAA,EAO7C,YACL,QACiB,iBACjB,KACA,gBACA;AAIA,UAAM,QAAQ,MAAO,KAAK,cAAc;AAPvB;AAQjB,SAAK,cAAc,OAAO;AAC1B,SAAK,eAAe,OAAO;AAAA,EAC7B;AAAA,EA1BF,OAOsD;AAAA;AAAA;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAgBW,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,eAAe,SAAiB,WAAwC;AACnF,SAAK,KAAK,MAAM,4CAA4C,MAAM,EAAE;AAEpE,QAAI,KAAK,OAAO,YAAY;AAC1B,WAAK,wBAAwB,aAAa,QAAQ,uBAAuB,KAAK;AAC9E,WAAK,yBAAyB,aAAa,QAAQ,wBAAwB,KAAK;AAAA,IAClF;AAEA,SAAK,KAAK,gBAAgB,UAAa,KAAK,OAAO,eAAe,KAAK,uBAAuB;AAC5F,YAAM,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,qBAAqB,EAAE,QAAQ,IAAI,GAAI;AAC5E,YAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AAExC,UAAI,MAAM,KAAK;AACb,aAAK,KAAK,MAAM,mBAAmB,MAAM,qCAAqC;AAC9E,YAAI,CAAC,KAAK,OAAO,YAAY;AAC3B,iBAAO,KAAK;AAAA,QACd,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,iBAAiB,UAAa,CAAC,KAAK,OAAO,YAAY;AAC9D,WAAK,KAAK,MAAM,mBAAmB,MAAM,0DAA0D;AACnG,aAAO,KAAK;AAAA,IACd;AAGA,QAAI,CAAC,KAAK,mBAAmB;AAC3B,WAAK,KAAK,MAAM,mBAAmB,MAAM,gDAAgD;AACzF,WAAK,oBAAoB,KAAK,WAAW,KAAK,cAAc,MAAM;AAAA,IACpE;AAEA,QAAI;AACF,WAAK,KAAK,MAAM,mBAAmB,MAAM,yCAAyC;AAClF,YAAM,SAAS,MAAM,KAAK;AAE1B,WAAK,KAAK,MAAM,mBAAmB,MAAM,mDAAmD;AAC5F,UAAI,CAAC,KAAK,OAAO,YAAY;AAC3B,aAAK,cAAc,OAAO;AAC1B,aAAK,eAAe,OAAO;AAAA,MAC7B,OAAO;AACL,aAAK,KAAK,MAAM,mBAAmB,MAAM,oDAAoD;AAC7F,qBAAa,QAAQ,yBAAyB,OAAO,qBAAqB;AAC1E,YAAI,OAAO;AACT,uBAAa,QAAQ,0BAA0B,OAAO,sBAAsB;AAAA,MAChF;AAEA,WAAK,wBAAwB,OAAO;AACpC,UAAI,OAAO,uBAAwB,MAAK,yBAAyB,OAAO;AAExE,UAAI,KAAK,oBAAoB,QAAW;AACtC,aAAK,KAAK,MAAM,mBAAmB,MAAM,8CAA8C;AACvF,cAAM,KAAK,gBAAgB,MAAM;AAAA,MACnC;AAAA,IACF,UAAE;AACA,WAAK,oBAAoB;AAAA,IAC3B;AAEA,SAAK,KAAK,MAAM,mBAAmB,MAAM,gCAAgC;AACzE,QAAI,CAAC,KAAK,OAAO,YAAY;AAC3B,aAAO,KAAK;AAAA,IACd,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,WAAW,cAAuB,SAAiB,WAAgC;AAC/F,SAAK,KAAK,MAAM,mBAAmB,MAAM,yBAAyB;AAClE,UAAM,OAAO,KAAK,OAAO,aAAa,SAAY,EAAE,aAA2B;AAC/E,UAAM,SAAS,MAAM,KAAK,YAAwB,aAAa,MAAM,IAAI;AAEzE,QAAI,CAAC,OAAO,WAAW,OAAO,SAAS,QAAW;AAChD,YAAM,MAAM,OAAO,YAAY,SAAS,CAAC;AAAA,IAC3C;AAEA,SAAK,KAAK,MAAM,mBAAmB,MAAM,qCAAqC;AAC9E,WAAO,OAAO;AAAA,EAChB;AACF;;;AClGA,IAAqB,sBAArB,cAAiD,YAAY;AAAA,EAd7D,OAc6D;AAAA;AAAA;AAAA,EAC3D,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,WAAW,IAA+C;AACrE,WAAO,MAAM,KAAK,WAAwB,EAAE;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,kBACX,aACA,OACA,iBACsD;AACtD,WAAO,MAAM,KAAK,WAA2C,iBAAiB,WAAW,IAAI;AAAA,MAC3F;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,YAAY,SAAgE;AACvF,WAAO,MAAM,KAAK,YAAyB,IAAI,OAAO;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAa,cAAc,IAAY,UAAqD;AAC1F,WAAO,MAAM,KAAK,WAAwB,IAAI,EAAE,SAAS,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,cAAc,IAAkC;AAC3D,WAAO,MAAM,KAAK,cAAc,EAAE;AAAA,EACpC;AACF;;;ACtEA,IAAqB,iBAArB,cAA4C,YAAY;AAAA,EAdxD,OAcwD;AAAA;AAAA;AAAA,EACtD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,MAAoC;AAC/C,WAAO,MAAM,KAAK,WAAmB,EAAE;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,WACX,OACA,iBACwD;AACxD,WAAO,MAAM,KAAK,WAA6C,YAAY,EAAE,OAAO,gBAAgB,CAAC;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,mBAAwD;AACnE,WAAO,MAAM,KAAK,WAA0B,UAAU;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,WAAW,WAAiD;AACvE,WAAO,MAAM,KAAK,YAAoB,SAAS,EAAE,UAAU,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,gBAAgB,UAAwC;AACnE,WAAO,MAAM,KAAK,WAAW,0BAA0B,EAAE,cAAc,SAAS,CAAC;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,aAAmC;AAC9C,WAAO,MAAM,KAAK,cAAc,EAAE;AAAA,EACpC;AACF;;;AChEA,IAAqB,eAArB,cAA0C,YAAY;AAAA,EAZtD,OAYsD;AAAA;AAAA;AAAA,EACpD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,mBAA4D;AACvE,WAAO,MAAM,KAAK,WAA8B,WAAW;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,OAAO,MAAoC;AACtD,WAAO,MAAM,KAAK,YAAY,WAAW,IAAI,EAAE;AAAA,EACjD;AACF;;;ACpBA,IAAqB,oBAArB,cAA+C,YAAY;AAAA,EAhB3D,OAgB2D;AAAA;AAAA;AAAA,EACzD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,aAAa,IAA6C;AACrE,WAAO,MAAM,KAAK,WAAsB,IAAI,EAAE,EAAE;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,eAAe,KAAkD;AAC5E,WAAO,MAAM,KAAK,WAAwB,YAAY,IAAI,KAAK,MAAM,CAAC,EAAE;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,gBAAgB,cAAuE;AAClG,WAAO,MAAM,KAAK,YAAuB,IAAI,YAAY;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,0BAA0B,IAAY,QAAkD;AACnG,WAAO,MAAM,KAAK,YAAY,IAAI,EAAE,qBAAqB;AAAA,MACvD;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,aAAa,IAAY,QAAwB,SAAwC;AACpG,WAAO,MAAM,KAAK,YAAY,IAAI,EAAE,UAAU;AAAA,MAC5C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,YAAY,IAAuD;AAC9E,WAAO,MAAM,KAAK,WAAgC,IAAI,EAAE,cAAc;AAAA,EACxE;AACF;;;AC/EA,IAAqB,sBAArB,cAAiD,YAAY;AAAA,EAZ7D,OAY6D;AAAA;AAAA;AAAA,EAC3D,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,oBAA6D;AACxE,WAAO,MAAM,KAAK,WAA8B,SAAS;AAAA,EAC3D;AACF;;;AChBA,IAAqB,gBAArB,cAA2C,YAAY;AAAA,EAZvD,OAYuD;AAAA;AAAA;AAAA,EACrD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,oBAA8D;AACzE,WAAO,MAAM,KAAK,WAA+B,cAAc;AAAA,EACjE;AACF;;;AC3BA,qBAA4E;AAM5E,IAAM,WAAN,MAAkC;AAAA,EAChC,YAAoB,QAAiB;AAAjB;AAAA,EAAkB;AAAA,EAPxC,OAMkC;AAAA;AAAA;AAAA,EAGhC,IAAI,UAAoB,SAAuB;AAC7C,YAAQ,UAAU;AAAA,MAChB,KAAK,wBAAS;AACZ,aAAK,QAAQ,MAAM,cAAc,OAAO,EAAE;AAC1C;AAAA,MACF,KAAK,wBAAS;AACZ,aAAK,QAAQ,KAAK,cAAc,OAAO,EAAE;AACzC;AAAA,MACF,KAAK,wBAAS;AACZ,aAAK,QAAQ,KAAK,cAAc,OAAO,EAAE;AACzC;AAAA,MACF,MAAK,wBAAS,SAAS,wBAAS;AAC9B,aAAK,QAAQ,MAAM,cAAc,OAAO,EAAE;AAC1C;AAAA,MACF,KAAK,wBAAS;AACZ,aAAK,QAAQ,MAAM,cAAc,OAAO,EAAE;AAC1C;AAAA,IACJ;AAAA,EACF;AACF;AAEA,IAAqB,mBAArB,MAAsC;AAAA,EAI7B,YACY,QACjB,cACA,QACA;AAHiB;AAIjB,SAAK,eAAe;AACpB,SAAK,SAAS;AAAA,EAChB;AAAA,EAzCF,OA8BsC;AAAA;AAAA;AAAA,EAC5B;AAAA,EACW;AAAA,EAWnB,MAAa,sBAA8C;AACzD,WAAO,IAAI,oCAAqB,EAC7B,uBAAuB;AAAA,MACtB,8BAA8B,yCAAgB;AAC5C,YAAI,aAAa,sBAAsB,GAAI,QAAO;AAClD,eAAO,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,aAAa,kBAAkB,GAAG,GAAI;AAAA,MAC1E,GAH8B;AAAA,IAIhC,CAAC,EACA,QAAQ,GAAG,KAAK,OAAO,OAAO,kBAAkB;AAAA,MAC/C,iBAAiB,KAAK,OAAO;AAAA,MAE7B,oBAAoB,mCACjB,MAAM,KAAK,aAAa,eAAe,uBAAuB,KAAM,IADnD;AAAA,IAEtB,CAAC,EACA,iBAAiB,IAAI,SAAS,KAAK,MAAM,CAAC,EAC1C,MAAM;AAAA,EACX;AACF;;;AChDA,IAAqB,oBAArB,cAA+C,YAAY;AAAA,EAZ3D,OAY2D;AAAA;AAAA;AAAA,EACzD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEQ,mBAAmB,IAAI,iBAAiB,KAAK,QAAQ,KAAK,cAAc,KAAK,GAAG;AAAA,EAErE,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,aAAqC;AAChD,QAAI,KAAK,qBAAqB,QAAW;AACvC,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AACA,WAAO,MAAM,KAAK,iBAAiB,oBAAoB;AAAA,EACzD;AACF;;;ACbA,IAAqB,qBAArB,MAAqB,oBAUrB;AAAA,EACY,YACQ,WACA,QACA,OACA,aACA,aACA,MACA,MACA,WAChB;AARgB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EACf;AAAA,EAxCL,OA8BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBE,OAAc,YACZ,QACA,iBACA,KACoB;AACpB,UAAM,qBAAqB,IAAI,iBAAiB,MAAM;AAEtD,UAAM,eAAe,IAAI,aAAa,oBAAoB,iBAAiB,GAAG;AAE9E,WAAO,IAAI;AAAA,MACT,IAAI,kBAAkB,oBAAoB,cAAc,GAAG;AAAA,MAC3D,IAAI,eAAe,oBAAoB,cAAc,GAAG;AAAA,MACxD,IAAI,cAAc,oBAAoB,cAAc,GAAG;AAAA,MACvD,IAAI,oBAAoB,oBAAoB,cAAc,GAAG;AAAA,MAC7D,IAAI,oBAAoB,oBAAoB,cAAc,GAAG;AAAA,MAC7D,IAAI,aAAa,oBAAoB,cAAc,GAAG;AAAA,MACtD,IAAI,aAAa,oBAAoB,cAAc,GAAG;AAAA,MACtD,IAAI,kBAAkB,oBAAoB,cAAc,GAAG;AAAA,IAC7D;AAAA,EACF;AACF;;;AC9CO,IAAK,eAAL,kBAAKC,kBAAL;AAIL,EAAAA,4BAAA;AAIA,EAAAA,4BAAA;AAIA,EAAAA,4BAAA;AAIA,EAAAA,4BAAA;AAhBU,SAAAA;AAAA,GAAA;;;ACvBL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AANU,SAAAA;AAAA,GAAA;;;ACAL,IAAK,QAAL,kBAAKC,WAAL;AACL,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AAXU,SAAAA;AAAA,GAAA;;;ACmEL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,kCAAA,UAAO,KAAP;AACA,EAAAA,kCAAA,SAAM,KAAN;AACA,EAAAA,kCAAA,SAAM,KAAN;AACA,EAAAA,kCAAA,oBAAiB,KAAjB;AACA,EAAAA,kCAAA,oBAAiB,KAAjB;AACA,EAAAA,kCAAA,uBAAoB,MAApB;AANU,SAAAA;AAAA,GAAA;AASL,IAAK,SAAL,kBAAKC,YAAL;AACL,EAAAA,gBAAA;AACA,EAAAA,gBAAA;AACA,EAAAA,gBAAA;AACA,EAAAA,gBAAA;AAJU,SAAAA;AAAA,GAAA;AAOL,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,oCAAA;AACA,EAAAA,oCAAA;AACA,EAAAA,oCAAA;AAHU,SAAAA;AAAA,GAAA;;;ACnFL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AAVU,SAAAA;AAAA,GAAA;;;AC0BL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,sBAAA,YAAS,KAAT;AACA,EAAAA,sBAAA,WAAQ,KAAR;AAEA,EAAAA,sBAAA,eAAY,UAAZ;AAEA,EAAAA,sBAAA,SAAM,WAAN;AANU,SAAAA;AAAA,GAAA;AASL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AAHU,SAAAA;AAAA,GAAA;AAML,IAAK,4BAAL,kBAAKC,+BAAL;AACL,EAAAA,sDAAA;AACA,EAAAA,sDAAA;AACA,EAAAA,sDAAA;AACA,EAAAA,sDAAA;AAJU,SAAAA;AAAA,GAAA;;;ACzCL,IAAK,QAAL,kBAAKC,WAAL;AACL,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,oBAAiB,QAAjB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AA/BU,SAAAA;AAAA,GAAA;;;ACAL,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gCAAA;AACA,EAAAA,gCAAA;AACA,EAAAA,gCAAA;AAHU,SAAAA;AAAA,GAAA;;;ACAL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,0BAAA;AACA,EAAAA,0BAAA;AACA,EAAAA,0BAAA;AACA,EAAAA,0BAAA;AAJU,SAAAA;AAAA,GAAA;;;ACqCL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,sCAAA,aAAU,KAAV;AACA,EAAAA,sCAAA,YAAS,KAAT;AACA,EAAAA,sCAAA,YAAS,KAAT;AACA,EAAAA,sCAAA,UAAO,KAAP;AAJU,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,8BAAA,aAAU,KAAV;AACA,EAAAA,8BAAA,aAAU,KAAV;AACA,EAAAA,8BAAA,uBAAoB,KAApB;AACA,EAAAA,8BAAA,sBAAmB,KAAnB;AACA,EAAAA,8BAAA,aAAU,KAAV;AALU,SAAAA;AAAA,GAAA;AAQL,IAAK,yBAAL,kBAAKC,4BAAL;AACL,EAAAA,gDAAA,aAAU,KAAV;AACA,EAAAA,gDAAA,sBAAmB,KAAnB;AACA,EAAAA,gDAAA,qBAAkB,KAAlB;AACA,EAAAA,gDAAA,wBAAqB,KAArB;AAJU,SAAAA;AAAA,GAAA;;;AC/CL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA,mBAAgB,KAAhB;AACA,EAAAA,wBAAA,kBAAe,KAAf;AAFU,SAAAA;AAAA,GAAA;;;ACEL,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AAFU,SAAAA;AAAA,GAAA;","names":["axios","LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts","../src/models/PromotionalCode.ts"],"sourcesContent":["import ApiClient from \"./api/ApiClient\";\nimport ApiConfig from \"./api/ApiConfig\";\nimport ApiResponse from \"./api/ApiResponse\";\nimport DefaultApiConfig from \"./api/endpoints/DefaultApiConfig\";\nimport MedrunnerApiClient from \"./api/MedrunnerApiClient\";\nimport PaginatedResponse from \"./api/PaginatedResponse\";\n\nexport { MedrunnerApiClient, ApiClient, ApiResponse, PaginatedResponse, ApiConfig, DefaultApiConfig };\n\nexport * from \"./Func\";\n\nimport ApiEndpoint from \"./api/endpoints/ApiEndpoint\";\nimport AuthEndpoint from \"./api/endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./api/endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./api/endpoints/chatMessage/ChatMessageEndpoint\";\nimport ChatMessageRequest from \"./api/endpoints/chatMessage/request/ChatMessageRequest\";\nimport ClientEndpoint from \"./api/endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./api/endpoints/code/CodeEndpoint\";\nimport EmergencyEndpoint from \"./api/endpoints/emergency/EmergencyEndpoint\";\nimport CreateEmergencyRequest from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nimport LocationDetail from \"./api/endpoints/emergency/response/LocationDetail\";\nimport TeamDetailsResponse from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nimport OrgSettingsEndpoint from \"./api/endpoints/orgSettings/OrgSettingsEndpoint\";\nimport MedalInformation from \"./api/endpoints/staff/response/MedalInformation\";\nimport StaffEndpoint from \"./api/endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./api/endpoints/websocket/WebsocketEndpoint\";\n\nexport * from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nexport * from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nexport * from \"./api/endpoints/emergency/response/LocationDetail\";\n\nexport {\n ApiEndpoint,\n CreateEmergencyRequest,\n TeamDetailsResponse,\n LocationDetail,\n EmergencyEndpoint,\n ChatMessageEndpoint,\n ChatMessageRequest,\n CodeEndpoint,\n OrgSettingsEndpoint,\n AuthEndpoint,\n ClientEndpoint,\n StaffEndpoint,\n MedalInformation,\n WebsocketEndpoint,\n TokenManager,\n};\n\nexport * from \"./models/CancellationReason\";\nexport * from \"./models/Class\";\nexport * from \"./models/Emergency\";\nexport * from \"./models/EmergencyStats\";\nexport * from \"./models/MissionStatus\";\nexport * from \"./models/Person\";\nexport * from \"./models/Level\";\nexport * from \"./models/ResponseRating\";\nexport * from \"./models/Team\";\nexport * from \"./models/TeamMember\";\nexport * from \"./models/ThreatLevel\";\nexport * from \"./models/OrgSettings\";\nexport * from \"./models/Deployment\";\nexport * from \"./models/PromotionalCode\";\n\nimport ApiToken from \"./models/ApiToken\";\nimport ChatMessage from \"./models/ChatMessage\";\nimport ClientHistory from \"./models/ClientHistory\";\nimport DbItem from \"./models/DbItem\";\nimport Deployment from \"./models/Deployment\";\nimport Emergency from \"./models/Emergency\";\nimport EmergencyStats from \"./models/EmergencyStats\";\nimport OrgSettings from \"./models/OrgSettings\";\nimport Person from \"./models/Person\";\nimport PromotionalCode from \"./models/PromotionalCode\";\nimport Team from \"./models/Team\";\nimport TeamMember from \"./models/TeamMember\";\nimport TokenGrant from \"./models/TokenGrant\";\nimport WritableDbItem from \"./models/WritableDbItem\";\n\nexport {\n ApiToken,\n ChatMessage,\n Deployment,\n DbItem,\n Emergency,\n EmergencyStats,\n OrgSettings,\n ClientHistory,\n Person,\n PromotionalCode,\n Team,\n TeamMember,\n TokenGrant,\n WritableDbItem,\n};\n","import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get, max 100\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, defaults to 10\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 stringified object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n * */\n public async getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>> {\n return await this.getRequest<PromotionalCode[]>(\"/redeemed\");\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n alertMessage?: DiscordMessage;\n clientMessage?: DiscordMessage;\n coordinationThread?: DiscordMessage;\n afterActionReportMessage?: DiscordMessage;\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 origin: Origin;\n clientData?: ClientData;\n missionName?: string;\n isComplete: boolean;\n afterActionReport?: AfterActionReport;\n}\n\nexport interface DiscordMessage {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n reported: boolean;\n userSid?: string;\n}\n\nexport interface AfterActionReport {\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n remarks?: string;\n submitterStaffId: string;\n submittedOn?: string;\n editHistory: AfterActionReportEdit[];\n hasBeenEdited: boolean;\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: string;\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 clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n CEO = 1 << 50,\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}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\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 messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n registrationEnabled: boolean;\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 characteristics: LocationCharacteristic[];\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 OPERATIONAL = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n\nexport enum LocationCharacteristic {\n UNKNOWN = 0,\n HIGH_TEMPERATURE = 1,\n LOW_TEMPERATURE = 2,\n HOSTILE_ATMOSPHERE = 3,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n type: CodeType;\n}\n\nexport enum CodeType {\n UNKNOWN,\n CITIZEN_CON_2954,\n}\n"],"mappings":"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","names":["axios","LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType"]}
package/dist/index.mjs CHANGED
@@ -277,7 +277,7 @@ var ChatMessageEndpoint = class extends ApiEndpoint {
277
277
  * Gets the specified amount of chat messages for a given emergency.
278
278
  *
279
279
  * @param emergencyId - The emergency for which to fetch the chat history
280
- * @param limit - The number of emergencies to get
280
+ * @param limit - The number of emergencies to get, max 100
281
281
  * @param paginationToken - The number to use for pagination
282
282
  * */
283
283
  async getMessageHistory(emergencyId, limit, paginationToken) {
@@ -337,7 +337,7 @@ var ClientEndpoint = class extends ApiEndpoint {
337
337
  }
338
338
  /**
339
339
  * Gets the specified amount of emergencies the client has created.
340
- * @param limit - The number of emergencies to get
340
+ * @param limit - The number of emergencies to get, defaults to 10
341
341
  * @param paginationToken - The number to use for pagination
342
342
  * */
343
343
  async getHistory(limit, paginationToken) {
@@ -362,7 +362,7 @@ var ClientEndpoint = class extends ApiEndpoint {
362
362
  /**
363
363
  * Updates the settings of the current user for the Client Portal.
364
364
  *
365
- * @param settings - The object settings to add or update
365
+ * @param settings - The stringified object settings to add or update
366
366
  *
367
367
  * */
368
368
  async setUserSettings(settings) {
@@ -710,6 +710,7 @@ var MissionStatus = /* @__PURE__ */ ((MissionStatus2) => {
710
710
  var UserRoles = /* @__PURE__ */ ((UserRoles2) => {
711
711
  UserRoles2[UserRoles2["CLIENT"] = 1] = "CLIENT";
712
712
  UserRoles2[UserRoles2["STAFF"] = 2] = "STAFF";
713
+ UserRoles2[UserRoles2["CEO"] = 262144] = "CEO";
713
714
  UserRoles2[UserRoles2["DEVELOPER"] = 524288] = "DEVELOPER";
714
715
  UserRoles2[UserRoles2["BOT"] = 1048576] = "BOT";
715
716
  return UserRoles2;
@@ -723,8 +724,6 @@ var PersonType = /* @__PURE__ */ ((PersonType2) => {
723
724
  var AccountDeactivationReason = /* @__PURE__ */ ((AccountDeactivationReason2) => {
724
725
  AccountDeactivationReason2[AccountDeactivationReason2["NONE"] = 0] = "NONE";
725
726
  AccountDeactivationReason2[AccountDeactivationReason2["CLIENT_DRIVEN_DELETION"] = 1] = "CLIENT_DRIVEN_DELETION";
726
- AccountDeactivationReason2[AccountDeactivationReason2["TERMINATED"] = 2] = "TERMINATED";
727
- AccountDeactivationReason2[AccountDeactivationReason2["BLOCKED"] = 3] = "BLOCKED";
728
727
  return AccountDeactivationReason2;
729
728
  })(AccountDeactivationReason || {});
730
729
 
@@ -791,7 +790,7 @@ var SpaceLocationType = /* @__PURE__ */ ((SpaceLocationType2) => {
791
790
  })(SpaceLocationType || {});
792
791
  var ServiceStatus = /* @__PURE__ */ ((ServiceStatus2) => {
793
792
  ServiceStatus2[ServiceStatus2["UNKNOWN"] = 0] = "UNKNOWN";
794
- ServiceStatus2[ServiceStatus2["HEALTHY"] = 1] = "HEALTHY";
793
+ ServiceStatus2[ServiceStatus2["OPERATIONAL"] = 1] = "OPERATIONAL";
795
794
  ServiceStatus2[ServiceStatus2["SLIGHTLY_DEGRADED"] = 2] = "SLIGHTLY_DEGRADED";
796
795
  ServiceStatus2[ServiceStatus2["HEAVILY_DEGRADED"] = 3] = "HEAVILY_DEGRADED";
797
796
  ServiceStatus2[ServiceStatus2["OFFLINE"] = 4] = "OFFLINE";
@@ -814,8 +813,8 @@ var ClientType = /* @__PURE__ */ ((ClientType2) => {
814
813
 
815
814
  // src/models/PromotionalCode.ts
816
815
  var CodeType = /* @__PURE__ */ ((CodeType2) => {
817
- CodeType2[CodeType2["Unknown"] = 0] = "Unknown";
818
- CodeType2[CodeType2["CitizenCon2954"] = 1] = "CitizenCon2954";
816
+ CodeType2[CodeType2["UNKNOWN"] = 0] = "UNKNOWN";
817
+ CodeType2[CodeType2["CITIZEN_CON_2954"] = 1] = "CITIZEN_CON_2954";
819
818
  return CodeType2;
820
819
  })(CodeType || {});
821
820
  export {
@@ -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","../src/models/PromotionalCode.ts"],"sourcesContent":["import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n * */\n public async getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>> {\n return await this.getRequest<PromotionalCode[]>(\"/redeemed\");\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport { CodeType } from \"./PromotionalCode\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n /**\n * @deprecated Use {@link Person.clientPortalPreferencesBlob} instead.\n */\n clientPortalPreferences: Record<string, unknown>;\n /**\n * @deprecated Fetch this information via {@link client.getRedeemedCodes} instead.\n */\n redeemedCodes: RedeemedCode[];\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n TERMINATED,\n BLOCKED,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n\nexport interface RedeemedCode {\n code: string;\n type: CodeType;\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n registrationEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n characteristics: LocationCharacteristic[];\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\nexport enum LocationCharacteristic {\n UNKNOWN = 0,\n HIGH_TEMPERATURE = 1,\n LOW_TEMPERATURE = 2,\n HOSTILE_ATMOSPHERE = 3,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n redeemerId: string;\n type: CodeType;\n}\n\nexport enum CodeType {\n Unknown,\n CitizenCon2954,\n}\n"],"mappings":"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","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType"]}
1
+ {"version":3,"sources":["../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts","../src/models/PromotionalCode.ts"],"sourcesContent":["import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get, max 100\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, defaults to 10\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 stringified object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n * */\n public async getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>> {\n return await this.getRequest<PromotionalCode[]>(\"/redeemed\");\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n alertMessage?: DiscordMessage;\n clientMessage?: DiscordMessage;\n coordinationThread?: DiscordMessage;\n afterActionReportMessage?: DiscordMessage;\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 origin: Origin;\n clientData?: ClientData;\n missionName?: string;\n isComplete: boolean;\n afterActionReport?: AfterActionReport;\n}\n\nexport interface DiscordMessage {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n reported: boolean;\n userSid?: string;\n}\n\nexport interface AfterActionReport {\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n remarks?: string;\n submitterStaffId: string;\n submittedOn?: string;\n editHistory: AfterActionReportEdit[];\n hasBeenEdited: boolean;\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: string;\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 clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n CEO = 1 << 50,\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}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\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 messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n registrationEnabled: boolean;\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 characteristics: LocationCharacteristic[];\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 OPERATIONAL = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n\nexport enum LocationCharacteristic {\n UNKNOWN = 0,\n HIGH_TEMPERATURE = 1,\n LOW_TEMPERATURE = 2,\n HOSTILE_ATMOSPHERE = 3,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n type: CodeType;\n}\n\nexport enum CodeType {\n UNKNOWN,\n CITIZEN_CON_2954,\n}\n"],"mappings":"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","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType"]}
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "@medrunner/api-client",
3
- "version": "0.6.3",
3
+ "version": "0.7.0-beta.1",
4
4
  "description": "Wrapper library for the Medrunner API",
5
5
  "scripts": {
6
6
  "build": "tsup",
7
7
  "build:docs": "tsc -p tsconfig.docs.json",
8
- "prepare": "npm run build",
9
8
  "lint": "npx eslint src",
10
9
  "lint:fix": "npm run lint -- --fix",
11
10
  "prettier": "npx prettier src --check",
@@ -48,16 +47,16 @@
48
47
  "dist"
49
48
  ],
50
49
  "dependencies": {
51
- "@microsoft/signalr": "^8.0.7",
50
+ "@microsoft/signalr": "^8.0.17",
52
51
  "axios": "^1.11.0",
53
52
  "ts-log": "^2.2.7"
54
53
  },
55
54
  "devDependencies": {
56
55
  "@eslint/eslintrc": "^3.3.1",
57
56
  "@eslint/js": "^9.32.0",
58
- "@types/node": "^24.1.0",
59
- "@typescript-eslint/eslint-plugin": "^8.38.0",
60
- "@typescript-eslint/parser": "^8.38.0",
57
+ "@types/node": "^24.2.0",
58
+ "@typescript-eslint/eslint-plugin": "^8.39.0",
59
+ "@typescript-eslint/parser": "^8.39.0",
61
60
  "eslint": "^9.32.0",
62
61
  "eslint-plugin-simple-import-sort": "^12.1.1",
63
62
  "eslint-plugin-tsdoc": "^0.4.0",
@@ -65,9 +64,9 @@
65
64
  "ts-node": "^10.9.2",
66
65
  "tslib": "^2.8.1",
67
66
  "tsup": "^8.5.0",
68
- "typedoc": "^0.28.7",
69
- "typedoc-plugin-markdown": "^4.7.1",
70
- "typescript": "^5.8.3",
67
+ "typedoc": "^0.28.9",
68
+ "typedoc-plugin-markdown": "^4.8.0",
69
+ "typescript": "^5.9.2",
71
70
  "vitepress": "^1.6.3"
72
71
  }
73
72
  }