@medrunner/api-client 0.1.1 → 0.1.3
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 +1 -1
- package/dist/index.d.mts +22 -4
- package/dist/index.d.ts +22 -4
- package/dist/index.js +50 -14
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48 -14
- package/dist/index.mjs.map +1 -1
- package/package.json +16 -13
package/README.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -44,6 +44,7 @@ declare class TokenManager extends ApiEndpoint {
|
|
|
44
44
|
private readonly refreshCallback?;
|
|
45
45
|
private accessToken?;
|
|
46
46
|
private refreshToken?;
|
|
47
|
+
private tokenFetchPromise?;
|
|
47
48
|
constructor(config: ApiConfig, refreshCallback?: AsyncAction<TokenGrant> | undefined, log?: Logger, headerProvider?: HeaderProvider);
|
|
48
49
|
protected endpoint(): string;
|
|
49
50
|
getAccessToken(): Promise<string | undefined>;
|
|
@@ -147,6 +148,7 @@ interface Person extends WritableDbItem {
|
|
|
147
148
|
clientStats: ClientStats;
|
|
148
149
|
activeEmergency?: string;
|
|
149
150
|
clientPortalPreferences: Record<string, unknown>;
|
|
151
|
+
redeemedCodes: RedeemedCode[];
|
|
150
152
|
}
|
|
151
153
|
declare enum UserRoles {
|
|
152
154
|
CLIENT = 1,
|
|
@@ -171,6 +173,14 @@ interface ClientStats {
|
|
|
171
173
|
interface BlockedStatus {
|
|
172
174
|
blocked: boolean;
|
|
173
175
|
}
|
|
176
|
+
interface RedeemedCode {
|
|
177
|
+
code: string;
|
|
178
|
+
type: CodeType;
|
|
179
|
+
}
|
|
180
|
+
declare enum CodeType {
|
|
181
|
+
Unknown = 0,
|
|
182
|
+
CitizenCon2954 = 1
|
|
183
|
+
}
|
|
174
184
|
|
|
175
185
|
declare class ClientEndpoint extends ApiEndpoint {
|
|
176
186
|
constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider);
|
|
@@ -183,6 +193,12 @@ declare class ClientEndpoint extends ApiEndpoint {
|
|
|
183
193
|
deactivate(): Promise<ApiResponse>;
|
|
184
194
|
}
|
|
185
195
|
|
|
196
|
+
declare class CodeEndpoint extends ApiEndpoint {
|
|
197
|
+
constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider);
|
|
198
|
+
protected endpoint(): string;
|
|
199
|
+
redeem(code: string): Promise<ApiResponse>;
|
|
200
|
+
}
|
|
201
|
+
|
|
186
202
|
declare enum CancellationReason {
|
|
187
203
|
NONE = 0,
|
|
188
204
|
OTHER = 1,
|
|
@@ -426,24 +442,26 @@ declare class WebsocketEndpoint extends ApiEndpoint {
|
|
|
426
442
|
initialize(): Promise<HubConnection>;
|
|
427
443
|
}
|
|
428
444
|
|
|
429
|
-
interface ApiClient<TEmergency extends EmergencyEndpoint = EmergencyEndpoint, TClient extends ClientEndpoint = ClientEndpoint, TStaff extends StaffEndpoint = StaffEndpoint, TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint, TAuth extends AuthEndpoint = AuthEndpoint, TWebsocket extends WebsocketEndpoint = WebsocketEndpoint> {
|
|
445
|
+
interface ApiClient<TEmergency extends EmergencyEndpoint = EmergencyEndpoint, TClient extends ClientEndpoint = ClientEndpoint, TStaff extends StaffEndpoint = StaffEndpoint, TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint, TCode extends CodeEndpoint = CodeEndpoint, TAuth extends AuthEndpoint = AuthEndpoint, TWebsocket extends WebsocketEndpoint = WebsocketEndpoint> {
|
|
430
446
|
emergency: TEmergency;
|
|
431
447
|
client: TClient;
|
|
432
448
|
staff: TStaff;
|
|
433
449
|
chatMessage: TChatMessage;
|
|
450
|
+
code: TCode;
|
|
434
451
|
auth: TAuth;
|
|
435
452
|
websocket: TWebsocket;
|
|
436
453
|
}
|
|
437
454
|
|
|
438
|
-
declare class MedrunnerApiClient<TEmergency extends EmergencyEndpoint = EmergencyEndpoint, TClient extends ClientEndpoint = ClientEndpoint, TStaff extends StaffEndpoint = StaffEndpoint, TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint, TAuth extends AuthEndpoint = AuthEndpoint, TWebsocket extends WebsocketEndpoint = WebsocketEndpoint> implements ApiClient<TEmergency, TClient, TStaff, TChatMessage, TAuth, TWebsocket> {
|
|
455
|
+
declare class MedrunnerApiClient<TEmergency extends EmergencyEndpoint = EmergencyEndpoint, TClient extends ClientEndpoint = ClientEndpoint, TStaff extends StaffEndpoint = StaffEndpoint, TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint, TCode extends CodeEndpoint = CodeEndpoint, TAuth extends AuthEndpoint = AuthEndpoint, TWebsocket extends WebsocketEndpoint = WebsocketEndpoint> implements ApiClient<TEmergency, TClient, TStaff, TChatMessage, TCode, TAuth, TWebsocket> {
|
|
439
456
|
readonly emergency: TEmergency;
|
|
440
457
|
readonly client: TClient;
|
|
441
458
|
readonly staff: TStaff;
|
|
442
459
|
readonly chatMessage: TChatMessage;
|
|
460
|
+
readonly code: TCode;
|
|
443
461
|
readonly auth: TAuth;
|
|
444
462
|
readonly websocket: TWebsocket;
|
|
445
|
-
protected constructor(emergency: TEmergency, client: TClient, staff: TStaff, chatMessage: TChatMessage, auth: TAuth, websocket: TWebsocket);
|
|
463
|
+
protected constructor(emergency: TEmergency, client: TClient, staff: TStaff, chatMessage: TChatMessage, code: TCode, auth: TAuth, websocket: TWebsocket);
|
|
446
464
|
static buildClient(config: ApiConfig, refreshCallback?: AsyncAction<TokenGrant>, log?: Logger): MedrunnerApiClient;
|
|
447
465
|
}
|
|
448
466
|
|
|
449
|
-
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, type CreateEmergencyRequest, type DbItem, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, type LocationDetail, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, MissionServices, MissionStatus, Origin, type PaginatedResponse, type Person, PersonType, type ResponderDetails, type RespondingTeam, ResponseRating, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
|
|
467
|
+
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, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DbItem, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, type LocationDetail, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, MissionServices, MissionStatus, Origin, type PaginatedResponse, type Person, PersonType, type RedeemedCode, type ResponderDetails, type RespondingTeam, ResponseRating, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
|
package/dist/index.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ declare class TokenManager extends ApiEndpoint {
|
|
|
44
44
|
private readonly refreshCallback?;
|
|
45
45
|
private accessToken?;
|
|
46
46
|
private refreshToken?;
|
|
47
|
+
private tokenFetchPromise?;
|
|
47
48
|
constructor(config: ApiConfig, refreshCallback?: AsyncAction<TokenGrant> | undefined, log?: Logger, headerProvider?: HeaderProvider);
|
|
48
49
|
protected endpoint(): string;
|
|
49
50
|
getAccessToken(): Promise<string | undefined>;
|
|
@@ -147,6 +148,7 @@ interface Person extends WritableDbItem {
|
|
|
147
148
|
clientStats: ClientStats;
|
|
148
149
|
activeEmergency?: string;
|
|
149
150
|
clientPortalPreferences: Record<string, unknown>;
|
|
151
|
+
redeemedCodes: RedeemedCode[];
|
|
150
152
|
}
|
|
151
153
|
declare enum UserRoles {
|
|
152
154
|
CLIENT = 1,
|
|
@@ -171,6 +173,14 @@ interface ClientStats {
|
|
|
171
173
|
interface BlockedStatus {
|
|
172
174
|
blocked: boolean;
|
|
173
175
|
}
|
|
176
|
+
interface RedeemedCode {
|
|
177
|
+
code: string;
|
|
178
|
+
type: CodeType;
|
|
179
|
+
}
|
|
180
|
+
declare enum CodeType {
|
|
181
|
+
Unknown = 0,
|
|
182
|
+
CitizenCon2954 = 1
|
|
183
|
+
}
|
|
174
184
|
|
|
175
185
|
declare class ClientEndpoint extends ApiEndpoint {
|
|
176
186
|
constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider);
|
|
@@ -183,6 +193,12 @@ declare class ClientEndpoint extends ApiEndpoint {
|
|
|
183
193
|
deactivate(): Promise<ApiResponse>;
|
|
184
194
|
}
|
|
185
195
|
|
|
196
|
+
declare class CodeEndpoint extends ApiEndpoint {
|
|
197
|
+
constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider);
|
|
198
|
+
protected endpoint(): string;
|
|
199
|
+
redeem(code: string): Promise<ApiResponse>;
|
|
200
|
+
}
|
|
201
|
+
|
|
186
202
|
declare enum CancellationReason {
|
|
187
203
|
NONE = 0,
|
|
188
204
|
OTHER = 1,
|
|
@@ -426,24 +442,26 @@ declare class WebsocketEndpoint extends ApiEndpoint {
|
|
|
426
442
|
initialize(): Promise<HubConnection>;
|
|
427
443
|
}
|
|
428
444
|
|
|
429
|
-
interface ApiClient<TEmergency extends EmergencyEndpoint = EmergencyEndpoint, TClient extends ClientEndpoint = ClientEndpoint, TStaff extends StaffEndpoint = StaffEndpoint, TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint, TAuth extends AuthEndpoint = AuthEndpoint, TWebsocket extends WebsocketEndpoint = WebsocketEndpoint> {
|
|
445
|
+
interface ApiClient<TEmergency extends EmergencyEndpoint = EmergencyEndpoint, TClient extends ClientEndpoint = ClientEndpoint, TStaff extends StaffEndpoint = StaffEndpoint, TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint, TCode extends CodeEndpoint = CodeEndpoint, TAuth extends AuthEndpoint = AuthEndpoint, TWebsocket extends WebsocketEndpoint = WebsocketEndpoint> {
|
|
430
446
|
emergency: TEmergency;
|
|
431
447
|
client: TClient;
|
|
432
448
|
staff: TStaff;
|
|
433
449
|
chatMessage: TChatMessage;
|
|
450
|
+
code: TCode;
|
|
434
451
|
auth: TAuth;
|
|
435
452
|
websocket: TWebsocket;
|
|
436
453
|
}
|
|
437
454
|
|
|
438
|
-
declare class MedrunnerApiClient<TEmergency extends EmergencyEndpoint = EmergencyEndpoint, TClient extends ClientEndpoint = ClientEndpoint, TStaff extends StaffEndpoint = StaffEndpoint, TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint, TAuth extends AuthEndpoint = AuthEndpoint, TWebsocket extends WebsocketEndpoint = WebsocketEndpoint> implements ApiClient<TEmergency, TClient, TStaff, TChatMessage, TAuth, TWebsocket> {
|
|
455
|
+
declare class MedrunnerApiClient<TEmergency extends EmergencyEndpoint = EmergencyEndpoint, TClient extends ClientEndpoint = ClientEndpoint, TStaff extends StaffEndpoint = StaffEndpoint, TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint, TCode extends CodeEndpoint = CodeEndpoint, TAuth extends AuthEndpoint = AuthEndpoint, TWebsocket extends WebsocketEndpoint = WebsocketEndpoint> implements ApiClient<TEmergency, TClient, TStaff, TChatMessage, TCode, TAuth, TWebsocket> {
|
|
439
456
|
readonly emergency: TEmergency;
|
|
440
457
|
readonly client: TClient;
|
|
441
458
|
readonly staff: TStaff;
|
|
442
459
|
readonly chatMessage: TChatMessage;
|
|
460
|
+
readonly code: TCode;
|
|
443
461
|
readonly auth: TAuth;
|
|
444
462
|
readonly websocket: TWebsocket;
|
|
445
|
-
protected constructor(emergency: TEmergency, client: TClient, staff: TStaff, chatMessage: TChatMessage, auth: TAuth, websocket: TWebsocket);
|
|
463
|
+
protected constructor(emergency: TEmergency, client: TClient, staff: TStaff, chatMessage: TChatMessage, code: TCode, auth: TAuth, websocket: TWebsocket);
|
|
446
464
|
static buildClient(config: ApiConfig, refreshCallback?: AsyncAction<TokenGrant>, log?: Logger): MedrunnerApiClient;
|
|
447
465
|
}
|
|
448
466
|
|
|
449
|
-
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, type CreateEmergencyRequest, type DbItem, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, type LocationDetail, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, MissionServices, MissionStatus, Origin, type PaginatedResponse, type Person, PersonType, type ResponderDetails, type RespondingTeam, ResponseRating, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
|
|
467
|
+
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, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DbItem, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, type LocationDetail, LocationType, type MedalInformation, MedrunnerApiClient, type MessageCache, MissionServices, MissionStatus, Origin, type PaginatedResponse, type Person, PersonType, type RedeemedCode, type ResponderDetails, type RespondingTeam, ResponseRating, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
|
package/dist/index.js
CHANGED
|
@@ -38,6 +38,8 @@ __export(src_exports, {
|
|
|
38
38
|
ChatMessageEndpoint: () => ChatMessageEndpoint,
|
|
39
39
|
Class: () => Class,
|
|
40
40
|
ClientEndpoint: () => ClientEndpoint,
|
|
41
|
+
CodeEndpoint: () => CodeEndpoint,
|
|
42
|
+
CodeType: () => CodeType,
|
|
41
43
|
EmergencyEndpoint: () => EmergencyEndpoint,
|
|
42
44
|
Level: () => Level,
|
|
43
45
|
LocationType: () => LocationType,
|
|
@@ -218,24 +220,28 @@ var TokenManager = class _TokenManager extends ApiEndpoint {
|
|
|
218
220
|
}
|
|
219
221
|
accessToken;
|
|
220
222
|
refreshToken;
|
|
223
|
+
tokenFetchPromise;
|
|
221
224
|
endpoint() {
|
|
222
225
|
return "auth";
|
|
223
226
|
}
|
|
224
227
|
async getAccessToken() {
|
|
225
228
|
if (this.accessToken !== void 0) {
|
|
226
229
|
const exp = _TokenManager.getJwtFromAccessToken(this.accessToken).exp;
|
|
227
|
-
if (exp > Date.now() / 1e3 - 60 * 5)
|
|
228
|
-
return this.accessToken;
|
|
230
|
+
if (exp > Date.now() / 1e3 - 60 * 5) return this.accessToken;
|
|
229
231
|
}
|
|
230
|
-
if (this.refreshToken === void 0)
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
232
|
+
if (this.refreshToken === void 0) return this.accessToken;
|
|
233
|
+
if (!this.tokenFetchPromise) this.tokenFetchPromise = this.fetchToken(this.refreshToken);
|
|
234
|
+
try {
|
|
235
|
+
const tokens = await this.tokenFetchPromise;
|
|
236
|
+
this.accessToken = tokens.accessToken;
|
|
237
|
+
this.refreshToken = tokens.refreshToken;
|
|
238
|
+
if (this.refreshCallback !== void 0) {
|
|
239
|
+
await this.refreshCallback(tokens);
|
|
240
|
+
}
|
|
241
|
+
} finally {
|
|
242
|
+
this.tokenFetchPromise = void 0;
|
|
235
243
|
}
|
|
236
|
-
this.accessToken
|
|
237
|
-
this.refreshToken = tokens.refreshToken;
|
|
238
|
-
return tokens.accessToken;
|
|
244
|
+
return this.accessToken;
|
|
239
245
|
}
|
|
240
246
|
async fetchToken(refreshToken) {
|
|
241
247
|
const result = await this.postRequest("/exchange", { refreshToken }, true);
|
|
@@ -340,6 +346,27 @@ var ClientEndpoint = class extends ApiEndpoint {
|
|
|
340
346
|
}
|
|
341
347
|
};
|
|
342
348
|
|
|
349
|
+
// src/api/endpoints/code/CodeEndpoint.ts
|
|
350
|
+
var CodeEndpoint = class extends ApiEndpoint {
|
|
351
|
+
static {
|
|
352
|
+
__name(this, "CodeEndpoint");
|
|
353
|
+
}
|
|
354
|
+
constructor(baseUrl, tokenManager, log, headerProvider) {
|
|
355
|
+
super(baseUrl, tokenManager, log, headerProvider);
|
|
356
|
+
}
|
|
357
|
+
endpoint() {
|
|
358
|
+
return "code";
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Redeems the specified promotional code for the current user
|
|
362
|
+
*
|
|
363
|
+
* @param code - The code to redeem.
|
|
364
|
+
* */
|
|
365
|
+
async redeem(code) {
|
|
366
|
+
return await this.postRequest(`/redeem/${code}`);
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
|
|
343
370
|
// src/api/endpoints/emergency/EmergencyEndpoint.ts
|
|
344
371
|
var EmergencyEndpoint = class extends ApiEndpoint {
|
|
345
372
|
static {
|
|
@@ -376,7 +403,7 @@ var EmergencyEndpoint = class extends ApiEndpoint {
|
|
|
376
403
|
* @virtual
|
|
377
404
|
* */
|
|
378
405
|
async createEmergency(newEmergency) {
|
|
379
|
-
return await this.postRequest("
|
|
406
|
+
return await this.postRequest("", newEmergency);
|
|
380
407
|
}
|
|
381
408
|
/**
|
|
382
409
|
* Cancels an existing emergency.
|
|
@@ -484,9 +511,9 @@ var WebsocketManager = class {
|
|
|
484
511
|
logger;
|
|
485
512
|
async establishConnection() {
|
|
486
513
|
return new import_signalr.HubConnectionBuilder().withAutomaticReconnect({
|
|
487
|
-
nextRetryDelayInMilliseconds: (retryContext) => retryContext.previousRetryCount > 5 ? null : 2e3
|
|
514
|
+
nextRetryDelayInMilliseconds: /* @__PURE__ */ __name((retryContext) => retryContext.previousRetryCount > 5 ? null : 2e3, "nextRetryDelayInMilliseconds")
|
|
488
515
|
}).withUrl(`${this.baseUrl}/hub/emergency`, {
|
|
489
|
-
accessTokenFactory: async () => await this.tokenManager.getAccessToken() ?? ""
|
|
516
|
+
accessTokenFactory: /* @__PURE__ */ __name(async () => await this.tokenManager.getAccessToken() ?? "", "accessTokenFactory")
|
|
490
517
|
}).configureLogging(new WSLogger(this.logger)).build();
|
|
491
518
|
}
|
|
492
519
|
};
|
|
@@ -517,11 +544,12 @@ var WebsocketEndpoint = class extends ApiEndpoint {
|
|
|
517
544
|
|
|
518
545
|
// src/api/MedrunnerApiClient.ts
|
|
519
546
|
var MedrunnerApiClient = class _MedrunnerApiClient {
|
|
520
|
-
constructor(emergency, client, staff, chatMessage, auth, websocket) {
|
|
547
|
+
constructor(emergency, client, staff, chatMessage, code, auth, websocket) {
|
|
521
548
|
this.emergency = emergency;
|
|
522
549
|
this.client = client;
|
|
523
550
|
this.staff = staff;
|
|
524
551
|
this.chatMessage = chatMessage;
|
|
552
|
+
this.code = code;
|
|
525
553
|
this.auth = auth;
|
|
526
554
|
this.websocket = websocket;
|
|
527
555
|
}
|
|
@@ -542,6 +570,7 @@ var MedrunnerApiClient = class _MedrunnerApiClient {
|
|
|
542
570
|
new ClientEndpoint(config.baseUrl, tokenManager, log),
|
|
543
571
|
new StaffEndpoint(config.baseUrl, tokenManager, log),
|
|
544
572
|
new ChatMessageEndpoint(config.baseUrl, tokenManager, log),
|
|
573
|
+
new CodeEndpoint(config.baseUrl, tokenManager, log),
|
|
545
574
|
new AuthEndpoint(config.baseUrl, tokenManager, log),
|
|
546
575
|
new WebsocketEndpoint(config.baseUrl, tokenManager, log)
|
|
547
576
|
);
|
|
@@ -644,6 +673,11 @@ var AccountDeactivationReason = /* @__PURE__ */ ((AccountDeactivationReason2) =>
|
|
|
644
673
|
AccountDeactivationReason2[AccountDeactivationReason2["BLOCKED"] = 3] = "BLOCKED";
|
|
645
674
|
return AccountDeactivationReason2;
|
|
646
675
|
})(AccountDeactivationReason || {});
|
|
676
|
+
var CodeType = /* @__PURE__ */ ((CodeType2) => {
|
|
677
|
+
CodeType2[CodeType2["Unknown"] = 0] = "Unknown";
|
|
678
|
+
CodeType2[CodeType2["CitizenCon2954"] = 1] = "CitizenCon2954";
|
|
679
|
+
return CodeType2;
|
|
680
|
+
})(CodeType || {});
|
|
647
681
|
|
|
648
682
|
// src/models/Level.ts
|
|
649
683
|
var Level = /* @__PURE__ */ ((Level2) => {
|
|
@@ -706,6 +740,8 @@ var ThreatLevel = /* @__PURE__ */ ((ThreatLevel2) => {
|
|
|
706
740
|
ChatMessageEndpoint,
|
|
707
741
|
Class,
|
|
708
742
|
ClientEndpoint,
|
|
743
|
+
CodeEndpoint,
|
|
744
|
+
CodeType,
|
|
709
745
|
EmergencyEndpoint,
|
|
710
746
|
Level,
|
|
711
747
|
LocationType,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.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/emergency/EmergencyEndpoint.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"],"sourcesContent":["import ApiClient from \"./api/ApiClient\";\nimport ApiConfig from \"./api/ApiConfig\";\nimport ApiResponse from \"./api/ApiResponse\";\nimport MedrunnerApiClient from \"./api/MedrunnerApiClient\";\nimport PaginatedResponse from \"./api/PaginatedResponse\";\n\nexport { MedrunnerApiClient, ApiClient, ApiResponse, PaginatedResponse, ApiConfig };\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 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 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 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\";\n\nimport ApiToken from \"./models/ApiToken\";\nimport ChatMessage from \"./models/ChatMessage\";\nimport ClientHistory from \"./models/ClientHistory\";\nimport DbItem from \"./models/DbItem\";\nimport Emergency from \"./models/Emergency\";\nimport EmergencyStats from \"./models/EmergencyStats\";\nimport Person from \"./models/Person\";\nimport Team from \"./models/Team\";\nimport TeamMember from \"./models/TeamMember\";\nimport TokenGrant from \"./models/TokenGrant\";\nimport WritableDbItem from \"./models/WritableDbItem\";\n\nexport {\n ApiToken,\n ChatMessage,\n DbItem,\n Emergency,\n EmergencyStats,\n ClientHistory,\n Person,\n Team,\n TeamMember,\n TokenGrant,\n WritableDbItem,\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\";\n\nexport default abstract class ApiEndpoint {\n public readonly baseUrl: string;\n\n protected constructor(\n baseUrl: string | undefined,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.baseUrl = baseUrl ?? \"https://api.medrunner.space\";\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.baseUrl,\n headers: {},\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken();\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 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(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 * @virtual\n * */\n public async signOut(oldToken: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken);\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 * @virtual\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 ApiConfig from \"../../ApiConfig\";\nimport ApiEndpoint from \"../ApiEndpoint\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n\n public constructor(\n config: ApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config.baseUrl, 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(): Promise<string | undefined> {\n if (this.accessToken !== undefined) {\n const exp = TokenManager.getJwtFromAccessToken(this.accessToken).exp;\n\n // check expiration minus 5 minutes to guard against race condition or timing issues creating unnecessary 403s\n if (exp > Date.now() / 1000 - 60 * 5) return this.accessToken;\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined) return this.accessToken;\n\n // token is expired (or will expire soon), so fetch a new one\n const tokens = await this.fetchToken(this.refreshToken);\n\n if (this.refreshCallback !== undefined) {\n await this.refreshCallback(tokens);\n }\n\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n\n return tokens.accessToken;\n }\n\n private async fetchToken(refreshToken: string): Promise<TokenGrant> {\n const result = await this.postRequest<TokenGrant>(\"/exchange\", { refreshToken: refreshToken }, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n return result.data;\n }\n\n private static getJwtFromAccessToken(accessToken: string): Jwt {\n return JSON.parse(atob(accessToken.split(\".\")[1]));\n }\n}\n\ninterface Jwt {\n exp: number;\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 ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/${emergencyId}`, { limit, paginationToken });\n }\n\n /**\n * 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","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\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse> {\n return await this.postRequest(\"/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 * @returns The updated settings object\n *\n * */\n public async setSettings(settings: Record<string, unknown>): Promise<ApiResponse<Record<string, unknown>>> {\n return await this.patchRequest<Record<string, unknown>>(\"/settings/clientPortal\", settings);\n }\n\n /**\n * 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 { 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 CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport LocationDetail from \"./response/LocationDetail\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 * @virtual\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"create\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n *\n * @internal\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n\n /**\n * Gets a tree of valid locations from which an emergency may be submitted.\n * */\n public async emergencyLocations(): Promise<ApiResponse<LocationDetail[]>> {\n return await this.getRequest<LocationDetail[]>(\"/meta/locations\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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\";\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(private readonly baseUrl: string, tokenManager: TokenManager, logger?: Logger) {\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 => (retryContext.previousRetryCount > 5 ? null : 2000),\n })\n .withUrl(`${this.baseUrl}/hub/emergency`, {\n accessTokenFactory: async () => (await this.tokenManager.getAccessToken()) ?? \"\",\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 WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.baseUrl, 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 EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\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 TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TChatMessage, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly chatMessage: TChatMessage,\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 tokenManager = new TokenManager(config, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(config.baseUrl, tokenManager, log),\n new ClientEndpoint(config.baseUrl, tokenManager, log),\n new StaffEndpoint(config.baseUrl, tokenManager, log),\n new ChatMessageEndpoint(config.baseUrl, tokenManager, log),\n new AuthEndpoint(config.baseUrl, tokenManager, log),\n new WebsocketEndpoint(config.baseUrl, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n remarks?: string;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n interactionMessageId?: string;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n clientPortalPreferences: Record<string, unknown>;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n DEVELOPER = 1 << 51,\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","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"],"mappings":"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","names":["axios","LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.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/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"],"sourcesContent":["import ApiClient from \"./api/ApiClient\";\nimport ApiConfig from \"./api/ApiConfig\";\nimport ApiResponse from \"./api/ApiResponse\";\nimport MedrunnerApiClient from \"./api/MedrunnerApiClient\";\nimport PaginatedResponse from \"./api/PaginatedResponse\";\n\nexport { MedrunnerApiClient, ApiClient, ApiResponse, PaginatedResponse, ApiConfig };\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 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 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\";\n\nimport ApiToken from \"./models/ApiToken\";\nimport ChatMessage from \"./models/ChatMessage\";\nimport ClientHistory from \"./models/ClientHistory\";\nimport DbItem from \"./models/DbItem\";\nimport Emergency from \"./models/Emergency\";\nimport EmergencyStats from \"./models/EmergencyStats\";\nimport Person from \"./models/Person\";\nimport Team from \"./models/Team\";\nimport TeamMember from \"./models/TeamMember\";\nimport TokenGrant from \"./models/TokenGrant\";\nimport WritableDbItem from \"./models/WritableDbItem\";\n\nexport {\n ApiToken,\n ChatMessage,\n DbItem,\n Emergency,\n EmergencyStats,\n ClientHistory,\n Person,\n Team,\n TeamMember,\n TokenGrant,\n WritableDbItem,\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\";\n\nexport default abstract class ApiEndpoint {\n public readonly baseUrl: string;\n\n protected constructor(\n baseUrl: string | undefined,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.baseUrl = baseUrl ?? \"https://api.medrunner.space\";\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.baseUrl,\n headers: {},\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken();\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 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(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 * @virtual\n * */\n public async signOut(oldToken: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken);\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 * @virtual\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 ApiConfig from \"../../ApiConfig\";\nimport ApiEndpoint from \"../ApiEndpoint\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: ApiConfig,\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.baseUrl, 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(): Promise<string | undefined> {\n if (this.accessToken !== undefined) {\n const exp = TokenManager.getJwtFromAccessToken(this.accessToken).exp;\n\n // check expiration minus 5 minutes to guard against race condition or timing issues creating unnecessary 403s\n if (exp > Date.now() / 1000 - 60 * 5) return this.accessToken;\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined) return this.accessToken;\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) this.tokenFetchPromise = this.fetchToken(this.refreshToken);\n\n try {\n const tokens = await this.tokenFetchPromise;\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n\n if (this.refreshCallback !== undefined) {\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n return this.accessToken;\n }\n\n private async fetchToken(refreshToken: string): Promise<TokenGrant> {\n const result = await this.postRequest<TokenGrant>(\"/exchange\", { refreshToken: refreshToken }, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n return result.data;\n }\n\n private static getJwtFromAccessToken(accessToken: string): Jwt {\n return JSON.parse(atob(accessToken.split(\".\")[1]));\n }\n}\n\ninterface Jwt {\n exp: number;\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 ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/${emergencyId}`, { limit, paginationToken });\n }\n\n /**\n * 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","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\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse> {\n return await this.postRequest(\"/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 * @returns The updated settings object\n *\n * */\n public async setSettings(settings: Record<string, unknown>): Promise<ApiResponse<Record<string, unknown>>> {\n return await this.patchRequest<Record<string, unknown>>(\"/settings/clientPortal\", settings);\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport LocationDetail from \"./response/LocationDetail\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 * @virtual\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n *\n * @internal\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n\n /**\n * Gets a tree of valid locations from which an emergency may be submitted.\n * */\n public async emergencyLocations(): Promise<ApiResponse<LocationDetail[]>> {\n return await this.getRequest<LocationDetail[]>(\"/meta/locations\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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\";\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 baseUrl: string,\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 => (retryContext.previousRetryCount > 5 ? null : 2000),\n })\n .withUrl(`${this.baseUrl}/hub/emergency`, {\n accessTokenFactory: async () => (await this.tokenManager.getAccessToken()) ?? \"\",\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 WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.baseUrl, 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 EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\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 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, 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 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 tokenManager = new TokenManager(config, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(config.baseUrl, tokenManager, log),\n new ClientEndpoint(config.baseUrl, tokenManager, log),\n new StaffEndpoint(config.baseUrl, tokenManager, log),\n new ChatMessageEndpoint(config.baseUrl, tokenManager, log),\n new CodeEndpoint(config.baseUrl, tokenManager, log),\n new AuthEndpoint(config.baseUrl, tokenManager, log),\n new WebsocketEndpoint(config.baseUrl, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n remarks?: string;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n interactionMessageId?: string;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n clientPortalPreferences: Record<string, unknown>;\n redeemedCodes: RedeemedCode[];\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n DEVELOPER = 1 << 51,\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n TERMINATED,\n BLOCKED,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n\nexport interface RedeemedCode {\n code: string;\n type: CodeType;\n}\n\nexport enum CodeType {\n Unknown,\n CitizenCon2954,\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n"],"mappings":"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","names":["axios","LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","CodeType","Level","ResponseRating","ThreatLevel"]}
|
package/dist/index.mjs
CHANGED
|
@@ -163,24 +163,28 @@ var TokenManager = class _TokenManager extends ApiEndpoint {
|
|
|
163
163
|
}
|
|
164
164
|
accessToken;
|
|
165
165
|
refreshToken;
|
|
166
|
+
tokenFetchPromise;
|
|
166
167
|
endpoint() {
|
|
167
168
|
return "auth";
|
|
168
169
|
}
|
|
169
170
|
async getAccessToken() {
|
|
170
171
|
if (this.accessToken !== void 0) {
|
|
171
172
|
const exp = _TokenManager.getJwtFromAccessToken(this.accessToken).exp;
|
|
172
|
-
if (exp > Date.now() / 1e3 - 60 * 5)
|
|
173
|
-
return this.accessToken;
|
|
173
|
+
if (exp > Date.now() / 1e3 - 60 * 5) return this.accessToken;
|
|
174
174
|
}
|
|
175
|
-
if (this.refreshToken === void 0)
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
175
|
+
if (this.refreshToken === void 0) return this.accessToken;
|
|
176
|
+
if (!this.tokenFetchPromise) this.tokenFetchPromise = this.fetchToken(this.refreshToken);
|
|
177
|
+
try {
|
|
178
|
+
const tokens = await this.tokenFetchPromise;
|
|
179
|
+
this.accessToken = tokens.accessToken;
|
|
180
|
+
this.refreshToken = tokens.refreshToken;
|
|
181
|
+
if (this.refreshCallback !== void 0) {
|
|
182
|
+
await this.refreshCallback(tokens);
|
|
183
|
+
}
|
|
184
|
+
} finally {
|
|
185
|
+
this.tokenFetchPromise = void 0;
|
|
180
186
|
}
|
|
181
|
-
this.accessToken
|
|
182
|
-
this.refreshToken = tokens.refreshToken;
|
|
183
|
-
return tokens.accessToken;
|
|
187
|
+
return this.accessToken;
|
|
184
188
|
}
|
|
185
189
|
async fetchToken(refreshToken) {
|
|
186
190
|
const result = await this.postRequest("/exchange", { refreshToken }, true);
|
|
@@ -285,6 +289,27 @@ var ClientEndpoint = class extends ApiEndpoint {
|
|
|
285
289
|
}
|
|
286
290
|
};
|
|
287
291
|
|
|
292
|
+
// src/api/endpoints/code/CodeEndpoint.ts
|
|
293
|
+
var CodeEndpoint = class extends ApiEndpoint {
|
|
294
|
+
static {
|
|
295
|
+
__name(this, "CodeEndpoint");
|
|
296
|
+
}
|
|
297
|
+
constructor(baseUrl, tokenManager, log, headerProvider) {
|
|
298
|
+
super(baseUrl, tokenManager, log, headerProvider);
|
|
299
|
+
}
|
|
300
|
+
endpoint() {
|
|
301
|
+
return "code";
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Redeems the specified promotional code for the current user
|
|
305
|
+
*
|
|
306
|
+
* @param code - The code to redeem.
|
|
307
|
+
* */
|
|
308
|
+
async redeem(code) {
|
|
309
|
+
return await this.postRequest(`/redeem/${code}`);
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
|
|
288
313
|
// src/api/endpoints/emergency/EmergencyEndpoint.ts
|
|
289
314
|
var EmergencyEndpoint = class extends ApiEndpoint {
|
|
290
315
|
static {
|
|
@@ -321,7 +346,7 @@ var EmergencyEndpoint = class extends ApiEndpoint {
|
|
|
321
346
|
* @virtual
|
|
322
347
|
* */
|
|
323
348
|
async createEmergency(newEmergency) {
|
|
324
|
-
return await this.postRequest("
|
|
349
|
+
return await this.postRequest("", newEmergency);
|
|
325
350
|
}
|
|
326
351
|
/**
|
|
327
352
|
* Cancels an existing emergency.
|
|
@@ -429,9 +454,9 @@ var WebsocketManager = class {
|
|
|
429
454
|
logger;
|
|
430
455
|
async establishConnection() {
|
|
431
456
|
return new HubConnectionBuilder().withAutomaticReconnect({
|
|
432
|
-
nextRetryDelayInMilliseconds: (retryContext) => retryContext.previousRetryCount > 5 ? null : 2e3
|
|
457
|
+
nextRetryDelayInMilliseconds: /* @__PURE__ */ __name((retryContext) => retryContext.previousRetryCount > 5 ? null : 2e3, "nextRetryDelayInMilliseconds")
|
|
433
458
|
}).withUrl(`${this.baseUrl}/hub/emergency`, {
|
|
434
|
-
accessTokenFactory: async () => await this.tokenManager.getAccessToken() ?? ""
|
|
459
|
+
accessTokenFactory: /* @__PURE__ */ __name(async () => await this.tokenManager.getAccessToken() ?? "", "accessTokenFactory")
|
|
435
460
|
}).configureLogging(new WSLogger(this.logger)).build();
|
|
436
461
|
}
|
|
437
462
|
};
|
|
@@ -462,11 +487,12 @@ var WebsocketEndpoint = class extends ApiEndpoint {
|
|
|
462
487
|
|
|
463
488
|
// src/api/MedrunnerApiClient.ts
|
|
464
489
|
var MedrunnerApiClient = class _MedrunnerApiClient {
|
|
465
|
-
constructor(emergency, client, staff, chatMessage, auth, websocket) {
|
|
490
|
+
constructor(emergency, client, staff, chatMessage, code, auth, websocket) {
|
|
466
491
|
this.emergency = emergency;
|
|
467
492
|
this.client = client;
|
|
468
493
|
this.staff = staff;
|
|
469
494
|
this.chatMessage = chatMessage;
|
|
495
|
+
this.code = code;
|
|
470
496
|
this.auth = auth;
|
|
471
497
|
this.websocket = websocket;
|
|
472
498
|
}
|
|
@@ -487,6 +513,7 @@ var MedrunnerApiClient = class _MedrunnerApiClient {
|
|
|
487
513
|
new ClientEndpoint(config.baseUrl, tokenManager, log),
|
|
488
514
|
new StaffEndpoint(config.baseUrl, tokenManager, log),
|
|
489
515
|
new ChatMessageEndpoint(config.baseUrl, tokenManager, log),
|
|
516
|
+
new CodeEndpoint(config.baseUrl, tokenManager, log),
|
|
490
517
|
new AuthEndpoint(config.baseUrl, tokenManager, log),
|
|
491
518
|
new WebsocketEndpoint(config.baseUrl, tokenManager, log)
|
|
492
519
|
);
|
|
@@ -589,6 +616,11 @@ var AccountDeactivationReason = /* @__PURE__ */ ((AccountDeactivationReason2) =>
|
|
|
589
616
|
AccountDeactivationReason2[AccountDeactivationReason2["BLOCKED"] = 3] = "BLOCKED";
|
|
590
617
|
return AccountDeactivationReason2;
|
|
591
618
|
})(AccountDeactivationReason || {});
|
|
619
|
+
var CodeType = /* @__PURE__ */ ((CodeType2) => {
|
|
620
|
+
CodeType2[CodeType2["Unknown"] = 0] = "Unknown";
|
|
621
|
+
CodeType2[CodeType2["CitizenCon2954"] = 1] = "CitizenCon2954";
|
|
622
|
+
return CodeType2;
|
|
623
|
+
})(CodeType || {});
|
|
592
624
|
|
|
593
625
|
// src/models/Level.ts
|
|
594
626
|
var Level = /* @__PURE__ */ ((Level2) => {
|
|
@@ -650,6 +682,8 @@ export {
|
|
|
650
682
|
ChatMessageEndpoint,
|
|
651
683
|
Class,
|
|
652
684
|
ClientEndpoint,
|
|
685
|
+
CodeEndpoint,
|
|
686
|
+
CodeType,
|
|
653
687
|
EmergencyEndpoint,
|
|
654
688
|
Level,
|
|
655
689
|
LocationType,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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/emergency/EmergencyEndpoint.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"],"sourcesContent":["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\";\n\nexport default abstract class ApiEndpoint {\n public readonly baseUrl: string;\n\n protected constructor(\n baseUrl: string | undefined,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.baseUrl = baseUrl ?? \"https://api.medrunner.space\";\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.baseUrl,\n headers: {},\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken();\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 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(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 * @virtual\n * */\n public async signOut(oldToken: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken);\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 * @virtual\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 ApiConfig from \"../../ApiConfig\";\nimport ApiEndpoint from \"../ApiEndpoint\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n\n public constructor(\n config: ApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config.baseUrl, 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(): Promise<string | undefined> {\n if (this.accessToken !== undefined) {\n const exp = TokenManager.getJwtFromAccessToken(this.accessToken).exp;\n\n // check expiration minus 5 minutes to guard against race condition or timing issues creating unnecessary 403s\n if (exp > Date.now() / 1000 - 60 * 5) return this.accessToken;\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined) return this.accessToken;\n\n // token is expired (or will expire soon), so fetch a new one\n const tokens = await this.fetchToken(this.refreshToken);\n\n if (this.refreshCallback !== undefined) {\n await this.refreshCallback(tokens);\n }\n\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n\n return tokens.accessToken;\n }\n\n private async fetchToken(refreshToken: string): Promise<TokenGrant> {\n const result = await this.postRequest<TokenGrant>(\"/exchange\", { refreshToken: refreshToken }, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n return result.data;\n }\n\n private static getJwtFromAccessToken(accessToken: string): Jwt {\n return JSON.parse(atob(accessToken.split(\".\")[1]));\n }\n}\n\ninterface Jwt {\n exp: number;\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 ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/${emergencyId}`, { limit, paginationToken });\n }\n\n /**\n * 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","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\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse> {\n return await this.postRequest(\"/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 * @returns The updated settings object\n *\n * */\n public async setSettings(settings: Record<string, unknown>): Promise<ApiResponse<Record<string, unknown>>> {\n return await this.patchRequest<Record<string, unknown>>(\"/settings/clientPortal\", settings);\n }\n\n /**\n * 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 { 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 CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport LocationDetail from \"./response/LocationDetail\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 * @virtual\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"create\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n *\n * @internal\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n\n /**\n * Gets a tree of valid locations from which an emergency may be submitted.\n * */\n public async emergencyLocations(): Promise<ApiResponse<LocationDetail[]>> {\n return await this.getRequest<LocationDetail[]>(\"/meta/locations\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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\";\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(private readonly baseUrl: string, tokenManager: TokenManager, logger?: Logger) {\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 => (retryContext.previousRetryCount > 5 ? null : 2000),\n })\n .withUrl(`${this.baseUrl}/hub/emergency`, {\n accessTokenFactory: async () => (await this.tokenManager.getAccessToken()) ?? \"\",\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 WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.baseUrl, 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 EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\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 TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TChatMessage, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly chatMessage: TChatMessage,\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 tokenManager = new TokenManager(config, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(config.baseUrl, tokenManager, log),\n new ClientEndpoint(config.baseUrl, tokenManager, log),\n new StaffEndpoint(config.baseUrl, tokenManager, log),\n new ChatMessageEndpoint(config.baseUrl, tokenManager, log),\n new AuthEndpoint(config.baseUrl, tokenManager, log),\n new WebsocketEndpoint(config.baseUrl, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n remarks?: string;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n interactionMessageId?: string;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n clientPortalPreferences: Record<string, unknown>;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n DEVELOPER = 1 << 51,\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","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"],"mappings":"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","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel"]}
|
|
1
|
+
{"version":3,"sources":["../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/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"],"sourcesContent":["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\";\n\nexport default abstract class ApiEndpoint {\n public readonly baseUrl: string;\n\n protected constructor(\n baseUrl: string | undefined,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.baseUrl = baseUrl ?? \"https://api.medrunner.space\";\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.baseUrl,\n headers: {},\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken();\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 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(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 * @virtual\n * */\n public async signOut(oldToken: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken);\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 * @virtual\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 ApiConfig from \"../../ApiConfig\";\nimport ApiEndpoint from \"../ApiEndpoint\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: ApiConfig,\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.baseUrl, 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(): Promise<string | undefined> {\n if (this.accessToken !== undefined) {\n const exp = TokenManager.getJwtFromAccessToken(this.accessToken).exp;\n\n // check expiration minus 5 minutes to guard against race condition or timing issues creating unnecessary 403s\n if (exp > Date.now() / 1000 - 60 * 5) return this.accessToken;\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined) return this.accessToken;\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) this.tokenFetchPromise = this.fetchToken(this.refreshToken);\n\n try {\n const tokens = await this.tokenFetchPromise;\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n\n if (this.refreshCallback !== undefined) {\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n return this.accessToken;\n }\n\n private async fetchToken(refreshToken: string): Promise<TokenGrant> {\n const result = await this.postRequest<TokenGrant>(\"/exchange\", { refreshToken: refreshToken }, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n return result.data;\n }\n\n private static getJwtFromAccessToken(accessToken: string): Jwt {\n return JSON.parse(atob(accessToken.split(\".\")[1]));\n }\n}\n\ninterface Jwt {\n exp: number;\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 ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/${emergencyId}`, { limit, paginationToken });\n }\n\n /**\n * 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","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\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse> {\n return await this.postRequest(\"/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 * @returns The updated settings object\n *\n * */\n public async setSettings(settings: Record<string, unknown>): Promise<ApiResponse<Record<string, unknown>>> {\n return await this.patchRequest<Record<string, unknown>>(\"/settings/clientPortal\", settings);\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport LocationDetail from \"./response/LocationDetail\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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 * @virtual\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n *\n * @internal\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n\n /**\n * Gets a tree of valid locations from which an emergency may be submitted.\n * */\n public async emergencyLocations(): Promise<ApiResponse<LocationDetail[]>> {\n return await this.getRequest<LocationDetail[]>(\"/meta/locations\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, 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\";\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 baseUrl: string,\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 => (retryContext.previousRetryCount > 5 ? null : 2000),\n })\n .withUrl(`${this.baseUrl}/hub/emergency`, {\n accessTokenFactory: async () => (await this.tokenManager.getAccessToken()) ?? \"\",\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 WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(baseUrl: string | undefined, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(baseUrl, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.baseUrl, 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 EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\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 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, 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 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 tokenManager = new TokenManager(config, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(config.baseUrl, tokenManager, log),\n new ClientEndpoint(config.baseUrl, tokenManager, log),\n new StaffEndpoint(config.baseUrl, tokenManager, log),\n new ChatMessageEndpoint(config.baseUrl, tokenManager, log),\n new CodeEndpoint(config.baseUrl, tokenManager, log),\n new AuthEndpoint(config.baseUrl, tokenManager, log),\n new WebsocketEndpoint(config.baseUrl, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n remarks?: string;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n alertMessage?: MessageCache;\n clientMessage?: MessageCache;\n coordinationThread?: MessageCache;\n afterActionReportMessage?: MessageCache;\n interactionMessageId?: string;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n origin: Origin;\n clientData?: ClientData;\n isComplete: boolean;\n missionName?: string;\n afterActionReport?: AfterActionReport;\n submissionSource: SubmissionSource;\n}\n\nexport interface MessageCache {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n redactedOrgOnProfile: boolean;\n reported: boolean;\n}\n\nexport interface AfterActionReport {\n remarks?: string;\n submitterStaffId: string;\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n hasBeenEdited: boolean;\n submittedOn: number;\n editHistory: AfterActionReportEdit[];\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: number;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n clientPortalPreferences: Record<string, unknown>;\n redeemedCodes: RedeemedCode[];\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n DEVELOPER = 1 << 51,\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n TERMINATED,\n BLOCKED,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n\nexport interface RedeemedCode {\n code: string;\n type: CodeType;\n}\n\nexport enum CodeType {\n Unknown,\n CitizenCon2954,\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n"],"mappings":"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","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","CodeType","Level","ResponseRating","ThreatLevel"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@medrunner/api-client",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Wrapper library for the Medrunner API",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsup",
|
|
@@ -47,21 +47,24 @@
|
|
|
47
47
|
"dist"
|
|
48
48
|
],
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@
|
|
50
|
+
"@eslint/eslintrc": "^3.1.0",
|
|
51
|
+
"@eslint/js": "^9.11.1",
|
|
52
|
+
"@microsoft/signalr": "^8.0.7",
|
|
51
53
|
"axios": "^1.4.0",
|
|
52
54
|
"ts-log": "^2.2.5"
|
|
53
55
|
},
|
|
54
56
|
"devDependencies": {
|
|
55
|
-
"@types/node": "^20.
|
|
56
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
57
|
-
"@typescript-eslint/parser": "^
|
|
58
|
-
"eslint": "^
|
|
59
|
-
"eslint-plugin-simple-import-sort": "^
|
|
60
|
-
"eslint-plugin-tsdoc": "^0.
|
|
61
|
-
"prettier": "^
|
|
62
|
-
"ts-node": "^10.9.
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
57
|
+
"@types/node": "^20.16.7",
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "^8.7.0",
|
|
59
|
+
"@typescript-eslint/parser": "^8.7.0",
|
|
60
|
+
"eslint": "^9.11.1",
|
|
61
|
+
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
62
|
+
"eslint-plugin-tsdoc": "^0.3.0",
|
|
63
|
+
"prettier": "^3.3.3",
|
|
64
|
+
"ts-node": "^10.9.2",
|
|
65
|
+
"tslib": "^2.7.0",
|
|
66
|
+
"tsup": "^8.3.0",
|
|
67
|
+
"typescript": "~5.5.4",
|
|
68
|
+
"vitepress": "^1.3.4"
|
|
66
69
|
}
|
|
67
70
|
}
|