@medrunner/api-client 0.7.0-beta.1 → 0.7.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +51 -21
- package/dist/index.d.ts +51 -21
- package/dist/index.js +38 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +36 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +15 -15
package/dist/index.d.mts
CHANGED
|
@@ -14,7 +14,11 @@ interface DbItem {
|
|
|
14
14
|
created: string;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
interface
|
|
17
|
+
interface WritableDbItem extends DbItem {
|
|
18
|
+
updated: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface ApiToken extends WritableDbItem {
|
|
18
22
|
/**
|
|
19
23
|
* The user who created the token
|
|
20
24
|
* */
|
|
@@ -24,13 +28,43 @@ interface ApiToken extends DbItem {
|
|
|
24
28
|
* */
|
|
25
29
|
name: string;
|
|
26
30
|
/**
|
|
27
|
-
* The
|
|
31
|
+
* The date at which the token will expire
|
|
28
32
|
* */
|
|
29
|
-
expirationDate?:
|
|
33
|
+
expirationDate?: string;
|
|
30
34
|
/**
|
|
31
35
|
* When the token was last used to generate a new access token, iso-8601 timestamp
|
|
32
36
|
* */
|
|
33
37
|
lastUsed?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the token has expired
|
|
40
|
+
* */
|
|
41
|
+
expired: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* The version of the token
|
|
44
|
+
* */
|
|
45
|
+
version: TokenVersion;
|
|
46
|
+
/**
|
|
47
|
+
* The scopes granted to the token
|
|
48
|
+
* */
|
|
49
|
+
scopes: TokenScope[];
|
|
50
|
+
}
|
|
51
|
+
declare enum TokenVersion {
|
|
52
|
+
UNKNOWN = -1,
|
|
53
|
+
LEGACY = 0,
|
|
54
|
+
V3 = 3,
|
|
55
|
+
V4 = 4
|
|
56
|
+
}
|
|
57
|
+
declare enum TokenScope {
|
|
58
|
+
CLIENT_READ = "client:read",
|
|
59
|
+
CLIENT_WRITE = "client:write",
|
|
60
|
+
CLIENT_PROFILE_READ = "client:profile:read",
|
|
61
|
+
CLIENT_PROFILE_WRITE = "client:profile:write",
|
|
62
|
+
CLIENT_ORGSETTINGS_READ = "client:orgsettings:read",
|
|
63
|
+
STAFF_READ = "staff:read",
|
|
64
|
+
STAFF_WRITE = "staff:write",
|
|
65
|
+
STAFF_PROFILE_READ = "staff:profile:read",
|
|
66
|
+
STAFF_PROFILE_WRITE = "staff:profile:write",
|
|
67
|
+
STAFF_ORGSETTINGS_READ = "staff:orgsettings:read"
|
|
34
68
|
}
|
|
35
69
|
|
|
36
70
|
interface ApiResponse<T = unknown> {
|
|
@@ -129,6 +163,10 @@ interface CreateApiTokenRequest {
|
|
|
129
163
|
* Optional expiration date for the token
|
|
130
164
|
* */
|
|
131
165
|
expirationDate?: Date;
|
|
166
|
+
/**
|
|
167
|
+
* List of scopes for the token
|
|
168
|
+
* */
|
|
169
|
+
scopes: TokenScope[];
|
|
132
170
|
}
|
|
133
171
|
|
|
134
172
|
/**
|
|
@@ -176,7 +214,7 @@ declare class AuthEndpoint extends ApiEndpoint {
|
|
|
176
214
|
deleteApiToken(id: string): Promise<ApiResponse>;
|
|
177
215
|
}
|
|
178
216
|
|
|
179
|
-
interface ChatMessage extends
|
|
217
|
+
interface ChatMessage extends WritableDbItem {
|
|
180
218
|
/**
|
|
181
219
|
* The emergency associated with the chat message
|
|
182
220
|
* */
|
|
@@ -185,10 +223,6 @@ interface ChatMessage extends DbItem {
|
|
|
185
223
|
* The user id of the message sender
|
|
186
224
|
* */
|
|
187
225
|
senderId: string;
|
|
188
|
-
/**
|
|
189
|
-
* The timestamp at which the message was sent in Unix seconds
|
|
190
|
-
* */
|
|
191
|
-
messageSentTimestamp: number;
|
|
192
226
|
/**
|
|
193
227
|
* The contents of the message
|
|
194
228
|
* */
|
|
@@ -250,7 +284,7 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
|
|
|
250
284
|
*
|
|
251
285
|
* @param emergencyId - The emergency for which to fetch the chat history
|
|
252
286
|
* @param limit - The number of emergencies to get, max 100
|
|
253
|
-
* @param paginationToken - The
|
|
287
|
+
* @param paginationToken - The string to use for pagination
|
|
254
288
|
* */
|
|
255
289
|
getMessageHistory(emergencyId: string, limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ChatMessage>>>;
|
|
256
290
|
/**
|
|
@@ -282,7 +316,6 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
|
|
|
282
316
|
interface ClientHistory extends DbItem {
|
|
283
317
|
emergencyId: string;
|
|
284
318
|
clientId: string;
|
|
285
|
-
emergencyCreationTimestamp: string;
|
|
286
319
|
}
|
|
287
320
|
|
|
288
321
|
interface EmergencyStats {
|
|
@@ -295,10 +328,6 @@ interface EmergencyStats {
|
|
|
295
328
|
canceled: number;
|
|
296
329
|
}
|
|
297
330
|
|
|
298
|
-
interface WritableDbItem extends DbItem {
|
|
299
|
-
updated: string;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
331
|
interface Person extends WritableDbItem {
|
|
303
332
|
discordId: string;
|
|
304
333
|
rsiHandle?: string;
|
|
@@ -348,7 +377,7 @@ declare class ClientEndpoint extends ApiEndpoint {
|
|
|
348
377
|
/**
|
|
349
378
|
* Gets the specified amount of emergencies the client has created.
|
|
350
379
|
* @param limit - The number of emergencies to get, defaults to 10
|
|
351
|
-
* @param paginationToken - The
|
|
380
|
+
* @param paginationToken - The string to use for pagination
|
|
352
381
|
* */
|
|
353
382
|
getHistory(limit?: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ClientHistory>>>;
|
|
354
383
|
/**
|
|
@@ -392,8 +421,11 @@ declare class CodeEndpoint extends ApiEndpoint {
|
|
|
392
421
|
protected endpoint(): string;
|
|
393
422
|
/**
|
|
394
423
|
* Gets the redeemed codes for the current user.
|
|
424
|
+
*
|
|
425
|
+
* @param limit - The number of codes to get, max 100
|
|
426
|
+
* @param paginationToken - The string to use for pagination
|
|
395
427
|
* */
|
|
396
|
-
getRedeemedCodes(): Promise<ApiResponse<PromotionalCode
|
|
428
|
+
getRedeemedCodes(limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<PromotionalCode>>>;
|
|
397
429
|
/**
|
|
398
430
|
* Redeems the specified promotional code for the current user
|
|
399
431
|
*
|
|
@@ -484,12 +516,10 @@ interface Emergency extends WritableDbItem {
|
|
|
484
516
|
afterActionReportMessage?: DiscordMessage;
|
|
485
517
|
respondingTeam: Team;
|
|
486
518
|
respondingTeams: RespondingTeam[];
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
completionTimestamp?: number;
|
|
519
|
+
acceptedOn?: string;
|
|
520
|
+
completedOn?: string;
|
|
490
521
|
rating: ResponseRating;
|
|
491
522
|
ratingRemarks?: string;
|
|
492
|
-
test: boolean;
|
|
493
523
|
origin: Origin;
|
|
494
524
|
clientData?: ClientData;
|
|
495
525
|
missionName?: string;
|
|
@@ -890,4 +920,4 @@ declare enum ClientType {
|
|
|
890
920
|
STAFF_PORTAL = 2
|
|
891
921
|
}
|
|
892
922
|
|
|
893
|
-
export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type DiscordMessage, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, LocationCharacteristic, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
|
|
923
|
+
export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type DiscordMessage, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, LocationCharacteristic, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, TokenScope, TokenVersion, UserRoles, WebsocketEndpoint, type WritableDbItem };
|
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,11 @@ interface DbItem {
|
|
|
14
14
|
created: string;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
interface
|
|
17
|
+
interface WritableDbItem extends DbItem {
|
|
18
|
+
updated: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface ApiToken extends WritableDbItem {
|
|
18
22
|
/**
|
|
19
23
|
* The user who created the token
|
|
20
24
|
* */
|
|
@@ -24,13 +28,43 @@ interface ApiToken extends DbItem {
|
|
|
24
28
|
* */
|
|
25
29
|
name: string;
|
|
26
30
|
/**
|
|
27
|
-
* The
|
|
31
|
+
* The date at which the token will expire
|
|
28
32
|
* */
|
|
29
|
-
expirationDate?:
|
|
33
|
+
expirationDate?: string;
|
|
30
34
|
/**
|
|
31
35
|
* When the token was last used to generate a new access token, iso-8601 timestamp
|
|
32
36
|
* */
|
|
33
37
|
lastUsed?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the token has expired
|
|
40
|
+
* */
|
|
41
|
+
expired: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* The version of the token
|
|
44
|
+
* */
|
|
45
|
+
version: TokenVersion;
|
|
46
|
+
/**
|
|
47
|
+
* The scopes granted to the token
|
|
48
|
+
* */
|
|
49
|
+
scopes: TokenScope[];
|
|
50
|
+
}
|
|
51
|
+
declare enum TokenVersion {
|
|
52
|
+
UNKNOWN = -1,
|
|
53
|
+
LEGACY = 0,
|
|
54
|
+
V3 = 3,
|
|
55
|
+
V4 = 4
|
|
56
|
+
}
|
|
57
|
+
declare enum TokenScope {
|
|
58
|
+
CLIENT_READ = "client:read",
|
|
59
|
+
CLIENT_WRITE = "client:write",
|
|
60
|
+
CLIENT_PROFILE_READ = "client:profile:read",
|
|
61
|
+
CLIENT_PROFILE_WRITE = "client:profile:write",
|
|
62
|
+
CLIENT_ORGSETTINGS_READ = "client:orgsettings:read",
|
|
63
|
+
STAFF_READ = "staff:read",
|
|
64
|
+
STAFF_WRITE = "staff:write",
|
|
65
|
+
STAFF_PROFILE_READ = "staff:profile:read",
|
|
66
|
+
STAFF_PROFILE_WRITE = "staff:profile:write",
|
|
67
|
+
STAFF_ORGSETTINGS_READ = "staff:orgsettings:read"
|
|
34
68
|
}
|
|
35
69
|
|
|
36
70
|
interface ApiResponse<T = unknown> {
|
|
@@ -129,6 +163,10 @@ interface CreateApiTokenRequest {
|
|
|
129
163
|
* Optional expiration date for the token
|
|
130
164
|
* */
|
|
131
165
|
expirationDate?: Date;
|
|
166
|
+
/**
|
|
167
|
+
* List of scopes for the token
|
|
168
|
+
* */
|
|
169
|
+
scopes: TokenScope[];
|
|
132
170
|
}
|
|
133
171
|
|
|
134
172
|
/**
|
|
@@ -176,7 +214,7 @@ declare class AuthEndpoint extends ApiEndpoint {
|
|
|
176
214
|
deleteApiToken(id: string): Promise<ApiResponse>;
|
|
177
215
|
}
|
|
178
216
|
|
|
179
|
-
interface ChatMessage extends
|
|
217
|
+
interface ChatMessage extends WritableDbItem {
|
|
180
218
|
/**
|
|
181
219
|
* The emergency associated with the chat message
|
|
182
220
|
* */
|
|
@@ -185,10 +223,6 @@ interface ChatMessage extends DbItem {
|
|
|
185
223
|
* The user id of the message sender
|
|
186
224
|
* */
|
|
187
225
|
senderId: string;
|
|
188
|
-
/**
|
|
189
|
-
* The timestamp at which the message was sent in Unix seconds
|
|
190
|
-
* */
|
|
191
|
-
messageSentTimestamp: number;
|
|
192
226
|
/**
|
|
193
227
|
* The contents of the message
|
|
194
228
|
* */
|
|
@@ -250,7 +284,7 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
|
|
|
250
284
|
*
|
|
251
285
|
* @param emergencyId - The emergency for which to fetch the chat history
|
|
252
286
|
* @param limit - The number of emergencies to get, max 100
|
|
253
|
-
* @param paginationToken - The
|
|
287
|
+
* @param paginationToken - The string to use for pagination
|
|
254
288
|
* */
|
|
255
289
|
getMessageHistory(emergencyId: string, limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ChatMessage>>>;
|
|
256
290
|
/**
|
|
@@ -282,7 +316,6 @@ declare class ChatMessageEndpoint extends ApiEndpoint {
|
|
|
282
316
|
interface ClientHistory extends DbItem {
|
|
283
317
|
emergencyId: string;
|
|
284
318
|
clientId: string;
|
|
285
|
-
emergencyCreationTimestamp: string;
|
|
286
319
|
}
|
|
287
320
|
|
|
288
321
|
interface EmergencyStats {
|
|
@@ -295,10 +328,6 @@ interface EmergencyStats {
|
|
|
295
328
|
canceled: number;
|
|
296
329
|
}
|
|
297
330
|
|
|
298
|
-
interface WritableDbItem extends DbItem {
|
|
299
|
-
updated: string;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
331
|
interface Person extends WritableDbItem {
|
|
303
332
|
discordId: string;
|
|
304
333
|
rsiHandle?: string;
|
|
@@ -348,7 +377,7 @@ declare class ClientEndpoint extends ApiEndpoint {
|
|
|
348
377
|
/**
|
|
349
378
|
* Gets the specified amount of emergencies the client has created.
|
|
350
379
|
* @param limit - The number of emergencies to get, defaults to 10
|
|
351
|
-
* @param paginationToken - The
|
|
380
|
+
* @param paginationToken - The string to use for pagination
|
|
352
381
|
* */
|
|
353
382
|
getHistory(limit?: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ClientHistory>>>;
|
|
354
383
|
/**
|
|
@@ -392,8 +421,11 @@ declare class CodeEndpoint extends ApiEndpoint {
|
|
|
392
421
|
protected endpoint(): string;
|
|
393
422
|
/**
|
|
394
423
|
* Gets the redeemed codes for the current user.
|
|
424
|
+
*
|
|
425
|
+
* @param limit - The number of codes to get, max 100
|
|
426
|
+
* @param paginationToken - The string to use for pagination
|
|
395
427
|
* */
|
|
396
|
-
getRedeemedCodes(): Promise<ApiResponse<PromotionalCode
|
|
428
|
+
getRedeemedCodes(limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<PromotionalCode>>>;
|
|
397
429
|
/**
|
|
398
430
|
* Redeems the specified promotional code for the current user
|
|
399
431
|
*
|
|
@@ -484,12 +516,10 @@ interface Emergency extends WritableDbItem {
|
|
|
484
516
|
afterActionReportMessage?: DiscordMessage;
|
|
485
517
|
respondingTeam: Team;
|
|
486
518
|
respondingTeams: RespondingTeam[];
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
completionTimestamp?: number;
|
|
519
|
+
acceptedOn?: string;
|
|
520
|
+
completedOn?: string;
|
|
490
521
|
rating: ResponseRating;
|
|
491
522
|
ratingRemarks?: string;
|
|
492
|
-
test: boolean;
|
|
493
523
|
origin: Origin;
|
|
494
524
|
clientData?: ClientData;
|
|
495
525
|
missionName?: string;
|
|
@@ -890,4 +920,4 @@ declare enum ClientType {
|
|
|
890
920
|
STAFF_PORTAL = 2
|
|
891
921
|
}
|
|
892
922
|
|
|
893
|
-
export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type DiscordMessage, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, LocationCharacteristic, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, UserRoles, WebsocketEndpoint, type WritableDbItem };
|
|
923
|
+
export { AccountDeactivationReason, type AfterActionReport, type AfterActionReportEdit, type ApiClient, type ApiConfig, ApiEndpoint, type ApiResponse, type ApiToken, type AsyncAction, type AsyncProvider, AuthEndpoint, type BlockedStatus, CancellationReason, type ChatMessage, ChatMessageEndpoint, type ChatMessageRequest, Class, type ClientData, ClientEndpoint, type ClientHistory, type ClientStats, ClientType, CodeEndpoint, CodeType, type CreateEmergencyRequest, type DateRange, type DbItem, DefaultApiConfig, type Deployment, type DiscordMessage, type Emergency, EmergencyEndpoint, type EmergencyStats, type Func, type HeaderProvider, type Headers, Level, type Location, LocationCharacteristic, type LocationDetail, type LocationSettings, LocationType, type MedalInformation, MedrunnerApiClient, type MessageOfTheDay, MissionServices, MissionStatus, type OrgSettings, OrgSettingsEndpoint, Origin, type PaginatedResponse, type Person, PersonType, type PromotionalCode, type PublicOrgSettings, type ResponderDetails, type RespondingTeam, ResponseRating, ServiceStatus, type SpaceLocation, SpaceLocationType, StaffEndpoint, SubmissionSource, type Team, type TeamDetailsResponse, type TeamMember, ThreatLevel, type TokenGrant, TokenManager, TokenScope, TokenVersion, UserRoles, WebsocketEndpoint, type WritableDbItem };
|
package/dist/index.js
CHANGED
|
@@ -59,6 +59,8 @@ __export(index_exports, {
|
|
|
59
59
|
SubmissionSource: () => SubmissionSource,
|
|
60
60
|
ThreatLevel: () => ThreatLevel,
|
|
61
61
|
TokenManager: () => TokenManager,
|
|
62
|
+
TokenScope: () => TokenScope,
|
|
63
|
+
TokenVersion: () => TokenVersion,
|
|
62
64
|
UserRoles: () => UserRoles,
|
|
63
65
|
WebsocketEndpoint: () => WebsocketEndpoint
|
|
64
66
|
});
|
|
@@ -215,7 +217,8 @@ var AuthEndpoint = class extends ApiEndpoint {
|
|
|
215
217
|
async createApiToken(newToken) {
|
|
216
218
|
return await this.postRequest("/apiTokens", {
|
|
217
219
|
name: newToken.name,
|
|
218
|
-
expirationDate: newToken.expirationDate?.toISOString()
|
|
220
|
+
expirationDate: newToken.expirationDate?.toISOString(),
|
|
221
|
+
scopes: newToken.scopes
|
|
219
222
|
});
|
|
220
223
|
}
|
|
221
224
|
/**
|
|
@@ -341,7 +344,7 @@ var ChatMessageEndpoint = class extends ApiEndpoint {
|
|
|
341
344
|
*
|
|
342
345
|
* @param emergencyId - The emergency for which to fetch the chat history
|
|
343
346
|
* @param limit - The number of emergencies to get, max 100
|
|
344
|
-
* @param paginationToken - The
|
|
347
|
+
* @param paginationToken - The string to use for pagination
|
|
345
348
|
* */
|
|
346
349
|
async getMessageHistory(emergencyId, limit, paginationToken) {
|
|
347
350
|
return await this.getRequest(`/conversation/${emergencyId}`, {
|
|
@@ -401,7 +404,7 @@ var ClientEndpoint = class extends ApiEndpoint {
|
|
|
401
404
|
/**
|
|
402
405
|
* Gets the specified amount of emergencies the client has created.
|
|
403
406
|
* @param limit - The number of emergencies to get, defaults to 10
|
|
404
|
-
* @param paginationToken - The
|
|
407
|
+
* @param paginationToken - The string to use for pagination
|
|
405
408
|
* */
|
|
406
409
|
async getHistory(limit, paginationToken) {
|
|
407
410
|
return await this.getRequest("/history", { limit, paginationToken });
|
|
@@ -452,9 +455,15 @@ var CodeEndpoint = class extends ApiEndpoint {
|
|
|
452
455
|
}
|
|
453
456
|
/**
|
|
454
457
|
* Gets the redeemed codes for the current user.
|
|
458
|
+
*
|
|
459
|
+
* @param limit - The number of codes to get, max 100
|
|
460
|
+
* @param paginationToken - The string to use for pagination
|
|
455
461
|
* */
|
|
456
|
-
async getRedeemedCodes() {
|
|
457
|
-
return await this.getRequest("/redeemed"
|
|
462
|
+
async getRedeemedCodes(limit, paginationToken) {
|
|
463
|
+
return await this.getRequest("/redeemed", {
|
|
464
|
+
limit,
|
|
465
|
+
paginationToken
|
|
466
|
+
});
|
|
458
467
|
}
|
|
459
468
|
/**
|
|
460
469
|
* Redeems the specified promotional code for the current user
|
|
@@ -880,6 +889,28 @@ var CodeType = /* @__PURE__ */ ((CodeType2) => {
|
|
|
880
889
|
CodeType2[CodeType2["CITIZEN_CON_2954"] = 1] = "CITIZEN_CON_2954";
|
|
881
890
|
return CodeType2;
|
|
882
891
|
})(CodeType || {});
|
|
892
|
+
|
|
893
|
+
// src/models/ApiToken.ts
|
|
894
|
+
var TokenVersion = /* @__PURE__ */ ((TokenVersion2) => {
|
|
895
|
+
TokenVersion2[TokenVersion2["UNKNOWN"] = -1] = "UNKNOWN";
|
|
896
|
+
TokenVersion2[TokenVersion2["LEGACY"] = 0] = "LEGACY";
|
|
897
|
+
TokenVersion2[TokenVersion2["V3"] = 3] = "V3";
|
|
898
|
+
TokenVersion2[TokenVersion2["V4"] = 4] = "V4";
|
|
899
|
+
return TokenVersion2;
|
|
900
|
+
})(TokenVersion || {});
|
|
901
|
+
var TokenScope = /* @__PURE__ */ ((TokenScope2) => {
|
|
902
|
+
TokenScope2["CLIENT_READ"] = "client:read";
|
|
903
|
+
TokenScope2["CLIENT_WRITE"] = "client:write";
|
|
904
|
+
TokenScope2["CLIENT_PROFILE_READ"] = "client:profile:read";
|
|
905
|
+
TokenScope2["CLIENT_PROFILE_WRITE"] = "client:profile:write";
|
|
906
|
+
TokenScope2["CLIENT_ORGSETTINGS_READ"] = "client:orgsettings:read";
|
|
907
|
+
TokenScope2["STAFF_READ"] = "staff:read";
|
|
908
|
+
TokenScope2["STAFF_WRITE"] = "staff:write";
|
|
909
|
+
TokenScope2["STAFF_PROFILE_READ"] = "staff:profile:read";
|
|
910
|
+
TokenScope2["STAFF_PROFILE_WRITE"] = "staff:profile:write";
|
|
911
|
+
TokenScope2["STAFF_ORGSETTINGS_READ"] = "staff:orgsettings:read";
|
|
912
|
+
return TokenScope2;
|
|
913
|
+
})(TokenScope || {});
|
|
883
914
|
// Annotate the CommonJS export names for ESM import in node:
|
|
884
915
|
0 && (module.exports = {
|
|
885
916
|
AccountDeactivationReason,
|
|
@@ -910,6 +941,8 @@ var CodeType = /* @__PURE__ */ ((CodeType2) => {
|
|
|
910
941
|
SubmissionSource,
|
|
911
942
|
ThreatLevel,
|
|
912
943
|
TokenManager,
|
|
944
|
+
TokenScope,
|
|
945
|
+
TokenVersion,
|
|
913
946
|
UserRoles,
|
|
914
947
|
WebsocketEndpoint
|
|
915
948
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts","../src/models/PromotionalCode.ts"],"sourcesContent":["import ApiClient from \"./api/ApiClient\";\nimport ApiConfig from \"./api/ApiConfig\";\nimport ApiResponse from \"./api/ApiResponse\";\nimport DefaultApiConfig from \"./api/endpoints/DefaultApiConfig\";\nimport MedrunnerApiClient from \"./api/MedrunnerApiClient\";\nimport PaginatedResponse from \"./api/PaginatedResponse\";\n\nexport { MedrunnerApiClient, ApiClient, ApiResponse, PaginatedResponse, ApiConfig, DefaultApiConfig };\n\nexport * from \"./Func\";\n\nimport ApiEndpoint from \"./api/endpoints/ApiEndpoint\";\nimport AuthEndpoint from \"./api/endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./api/endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./api/endpoints/chatMessage/ChatMessageEndpoint\";\nimport ChatMessageRequest from \"./api/endpoints/chatMessage/request/ChatMessageRequest\";\nimport ClientEndpoint from \"./api/endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./api/endpoints/code/CodeEndpoint\";\nimport EmergencyEndpoint from \"./api/endpoints/emergency/EmergencyEndpoint\";\nimport CreateEmergencyRequest from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nimport LocationDetail from \"./api/endpoints/emergency/response/LocationDetail\";\nimport TeamDetailsResponse from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nimport OrgSettingsEndpoint from \"./api/endpoints/orgSettings/OrgSettingsEndpoint\";\nimport MedalInformation from \"./api/endpoints/staff/response/MedalInformation\";\nimport StaffEndpoint from \"./api/endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./api/endpoints/websocket/WebsocketEndpoint\";\n\nexport * from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nexport * from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nexport * from \"./api/endpoints/emergency/response/LocationDetail\";\n\nexport {\n ApiEndpoint,\n CreateEmergencyRequest,\n TeamDetailsResponse,\n LocationDetail,\n EmergencyEndpoint,\n ChatMessageEndpoint,\n ChatMessageRequest,\n CodeEndpoint,\n OrgSettingsEndpoint,\n AuthEndpoint,\n ClientEndpoint,\n StaffEndpoint,\n MedalInformation,\n WebsocketEndpoint,\n TokenManager,\n};\n\nexport * from \"./models/CancellationReason\";\nexport * from \"./models/Class\";\nexport * from \"./models/Emergency\";\nexport * from \"./models/EmergencyStats\";\nexport * from \"./models/MissionStatus\";\nexport * from \"./models/Person\";\nexport * from \"./models/Level\";\nexport * from \"./models/ResponseRating\";\nexport * from \"./models/Team\";\nexport * from \"./models/TeamMember\";\nexport * from \"./models/ThreatLevel\";\nexport * from \"./models/OrgSettings\";\nexport * from \"./models/Deployment\";\nexport * from \"./models/PromotionalCode\";\n\nimport ApiToken from \"./models/ApiToken\";\nimport ChatMessage from \"./models/ChatMessage\";\nimport ClientHistory from \"./models/ClientHistory\";\nimport DbItem from \"./models/DbItem\";\nimport Deployment from \"./models/Deployment\";\nimport Emergency from \"./models/Emergency\";\nimport EmergencyStats from \"./models/EmergencyStats\";\nimport OrgSettings from \"./models/OrgSettings\";\nimport Person from \"./models/Person\";\nimport PromotionalCode from \"./models/PromotionalCode\";\nimport Team from \"./models/Team\";\nimport TeamMember from \"./models/TeamMember\";\nimport TokenGrant from \"./models/TokenGrant\";\nimport WritableDbItem from \"./models/WritableDbItem\";\n\nexport {\n ApiToken,\n ChatMessage,\n Deployment,\n DbItem,\n Emergency,\n EmergencyStats,\n OrgSettings,\n ClientHistory,\n Person,\n PromotionalCode,\n Team,\n TeamMember,\n TokenGrant,\n WritableDbItem,\n};\n","import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get, max 100\n * @param paginationToken - The number to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get, defaults to 10\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n limit?: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The stringified object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n * */\n public async getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>> {\n return await this.getRequest<PromotionalCode[]>(\"/redeemed\");\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n alertMessage?: DiscordMessage;\n clientMessage?: DiscordMessage;\n coordinationThread?: DiscordMessage;\n afterActionReportMessage?: DiscordMessage;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n origin: Origin;\n clientData?: ClientData;\n missionName?: string;\n isComplete: boolean;\n afterActionReport?: AfterActionReport;\n}\n\nexport interface DiscordMessage {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n reported: boolean;\n userSid?: string;\n}\n\nexport interface AfterActionReport {\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n remarks?: string;\n submitterStaffId: string;\n submittedOn?: string;\n editHistory: AfterActionReportEdit[];\n hasBeenEdited: boolean;\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: string;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n CEO = 1 << 50,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n registrationEnabled: boolean;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n children: SpaceLocation[];\n enabled: boolean;\n characteristics: LocationCharacteristic[];\n}\n\nexport enum SpaceLocationType {\n UNKNOWN = 0,\n SYSTEM = 1,\n PLANET = 2,\n MOON = 3,\n}\n\nexport enum ServiceStatus {\n UNKNOWN = 0,\n OPERATIONAL = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n\nexport enum LocationCharacteristic {\n UNKNOWN = 0,\n HIGH_TEMPERATURE = 1,\n LOW_TEMPERATURE = 2,\n HOSTILE_ATMOSPHERE = 3,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n type: CodeType;\n}\n\nexport enum CodeType {\n UNKNOWN,\n CITIZEN_CON_2954,\n}\n"],"mappings":"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","names":["axios","LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts","../src/models/PromotionalCode.ts","../src/models/ApiToken.ts"],"sourcesContent":["import ApiClient from \"./api/ApiClient\";\nimport ApiConfig from \"./api/ApiConfig\";\nimport ApiResponse from \"./api/ApiResponse\";\nimport DefaultApiConfig from \"./api/endpoints/DefaultApiConfig\";\nimport MedrunnerApiClient from \"./api/MedrunnerApiClient\";\nimport PaginatedResponse from \"./api/PaginatedResponse\";\n\nexport { MedrunnerApiClient, ApiClient, ApiResponse, PaginatedResponse, ApiConfig, DefaultApiConfig };\n\nexport * from \"./Func\";\n\nimport ApiEndpoint from \"./api/endpoints/ApiEndpoint\";\nimport AuthEndpoint from \"./api/endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./api/endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./api/endpoints/chatMessage/ChatMessageEndpoint\";\nimport ChatMessageRequest from \"./api/endpoints/chatMessage/request/ChatMessageRequest\";\nimport ClientEndpoint from \"./api/endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./api/endpoints/code/CodeEndpoint\";\nimport EmergencyEndpoint from \"./api/endpoints/emergency/EmergencyEndpoint\";\nimport CreateEmergencyRequest from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nimport LocationDetail from \"./api/endpoints/emergency/response/LocationDetail\";\nimport TeamDetailsResponse from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nimport OrgSettingsEndpoint from \"./api/endpoints/orgSettings/OrgSettingsEndpoint\";\nimport MedalInformation from \"./api/endpoints/staff/response/MedalInformation\";\nimport StaffEndpoint from \"./api/endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./api/endpoints/websocket/WebsocketEndpoint\";\n\nexport * from \"./api/endpoints/emergency/request/CreateEmergencyRequest\";\nexport * from \"./api/endpoints/emergency/response/TeamDetailsResponse\";\nexport * from \"./api/endpoints/emergency/response/LocationDetail\";\n\nexport {\n ApiEndpoint,\n CreateEmergencyRequest,\n TeamDetailsResponse,\n LocationDetail,\n EmergencyEndpoint,\n ChatMessageEndpoint,\n ChatMessageRequest,\n CodeEndpoint,\n OrgSettingsEndpoint,\n AuthEndpoint,\n ClientEndpoint,\n StaffEndpoint,\n MedalInformation,\n WebsocketEndpoint,\n TokenManager,\n};\n\nexport * from \"./models/CancellationReason\";\nexport * from \"./models/Class\";\nexport * from \"./models/Emergency\";\nexport * from \"./models/EmergencyStats\";\nexport * from \"./models/MissionStatus\";\nexport * from \"./models/Person\";\nexport * from \"./models/Level\";\nexport * from \"./models/ResponseRating\";\nexport * from \"./models/Team\";\nexport * from \"./models/TeamMember\";\nexport * from \"./models/ThreatLevel\";\nexport * from \"./models/OrgSettings\";\nexport * from \"./models/Deployment\";\nexport * from \"./models/PromotionalCode\";\nexport * from \"./models/ApiToken\";\n\nimport ApiToken from \"./models/ApiToken\";\nimport ChatMessage from \"./models/ChatMessage\";\nimport ClientHistory from \"./models/ClientHistory\";\nimport DbItem from \"./models/DbItem\";\nimport Deployment from \"./models/Deployment\";\nimport Emergency from \"./models/Emergency\";\nimport EmergencyStats from \"./models/EmergencyStats\";\nimport OrgSettings from \"./models/OrgSettings\";\nimport Person from \"./models/Person\";\nimport PromotionalCode from \"./models/PromotionalCode\";\nimport Team from \"./models/Team\";\nimport TeamMember from \"./models/TeamMember\";\nimport TokenGrant from \"./models/TokenGrant\";\nimport WritableDbItem from \"./models/WritableDbItem\";\n\nexport {\n ApiToken,\n ChatMessage,\n Deployment,\n DbItem,\n Emergency,\n EmergencyStats,\n OrgSettings,\n ClientHistory,\n Person,\n PromotionalCode,\n Team,\n TeamMember,\n TokenGrant,\n WritableDbItem,\n};\n","import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n scopes: newToken.scopes,\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get, max 100\n * @param paginationToken - The string to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get, defaults to 10\n * @param paginationToken - The string to use for pagination\n * */\n public async getHistory(\n limit?: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The stringified object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n *\n * @param limit - The number of codes to get, max 100\n * @param paginationToken - The string to use for pagination\n * */\n public async getRedeemedCodes(\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<PromotionalCode>>> {\n return await this.getRequest<PaginatedResponse<PromotionalCode>>(\"/redeemed\", {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket> {\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n alertMessage?: DiscordMessage;\n clientMessage?: DiscordMessage;\n coordinationThread?: DiscordMessage;\n afterActionReportMessage?: DiscordMessage;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n acceptedOn?: string;\n completedOn?: string;\n rating: ResponseRating;\n ratingRemarks?: string;\n origin: Origin;\n clientData?: ClientData;\n missionName?: string;\n isComplete: boolean;\n afterActionReport?: AfterActionReport;\n}\n\nexport interface DiscordMessage {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n reported: boolean;\n userSid?: string;\n}\n\nexport interface AfterActionReport {\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n remarks?: string;\n submitterStaffId: string;\n submittedOn?: string;\n editHistory: AfterActionReportEdit[];\n hasBeenEdited: boolean;\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: string;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n CEO = 1 << 50,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n registrationEnabled: boolean;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n children: SpaceLocation[];\n enabled: boolean;\n characteristics: LocationCharacteristic[];\n}\n\nexport enum SpaceLocationType {\n UNKNOWN = 0,\n SYSTEM = 1,\n PLANET = 2,\n MOON = 3,\n}\n\nexport enum ServiceStatus {\n UNKNOWN = 0,\n OPERATIONAL = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n\nexport enum LocationCharacteristic {\n UNKNOWN = 0,\n HIGH_TEMPERATURE = 1,\n LOW_TEMPERATURE = 2,\n HOSTILE_ATMOSPHERE = 3,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n type: CodeType;\n}\n\nexport enum CodeType {\n UNKNOWN,\n CITIZEN_CON_2954,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface ApiToken extends WritableDbItem {\n /**\n * The user who created the token\n * */\n userId: string;\n\n /**\n * Human-readable name for the token, assigned by the user\n * */\n name: string;\n\n /**\n * The date at which the token will expire\n * */\n expirationDate?: string;\n\n /**\n * When the token was last used to generate a new access token, iso-8601 timestamp\n * */\n lastUsed?: string;\n\n /**\n * Whether the token has expired\n * */\n expired: boolean;\n\n /**\n * The version of the token\n * */\n version: TokenVersion;\n\n /**\n * The scopes granted to the token\n * */\n scopes: TokenScope[];\n}\n\nexport enum TokenVersion {\n UNKNOWN = -1,\n LEGACY = 0,\n V3 = 3,\n V4 = 4,\n}\n\nexport enum TokenScope {\n CLIENT_READ = \"client:read\",\n CLIENT_WRITE = \"client:write\",\n CLIENT_PROFILE_READ = \"client:profile:read\",\n CLIENT_PROFILE_WRITE = \"client:profile:write\",\n CLIENT_ORGSETTINGS_READ = \"client:orgsettings:read\",\n STAFF_READ = \"staff:read\",\n STAFF_WRITE = \"staff:write\",\n STAFF_PROFILE_READ = \"staff:profile:read\",\n STAFF_PROFILE_WRITE = \"staff:profile:write\",\n STAFF_ORGSETTINGS_READ = \"staff:orgsettings:read\",\n}\n"],"mappings":"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","names":["axios","LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType","TokenVersion","TokenScope"]}
|
package/dist/index.mjs
CHANGED
|
@@ -152,7 +152,8 @@ var AuthEndpoint = class extends ApiEndpoint {
|
|
|
152
152
|
async createApiToken(newToken) {
|
|
153
153
|
return await this.postRequest("/apiTokens", {
|
|
154
154
|
name: newToken.name,
|
|
155
|
-
expirationDate: newToken.expirationDate?.toISOString()
|
|
155
|
+
expirationDate: newToken.expirationDate?.toISOString(),
|
|
156
|
+
scopes: newToken.scopes
|
|
156
157
|
});
|
|
157
158
|
}
|
|
158
159
|
/**
|
|
@@ -278,7 +279,7 @@ var ChatMessageEndpoint = class extends ApiEndpoint {
|
|
|
278
279
|
*
|
|
279
280
|
* @param emergencyId - The emergency for which to fetch the chat history
|
|
280
281
|
* @param limit - The number of emergencies to get, max 100
|
|
281
|
-
* @param paginationToken - The
|
|
282
|
+
* @param paginationToken - The string to use for pagination
|
|
282
283
|
* */
|
|
283
284
|
async getMessageHistory(emergencyId, limit, paginationToken) {
|
|
284
285
|
return await this.getRequest(`/conversation/${emergencyId}`, {
|
|
@@ -338,7 +339,7 @@ var ClientEndpoint = class extends ApiEndpoint {
|
|
|
338
339
|
/**
|
|
339
340
|
* Gets the specified amount of emergencies the client has created.
|
|
340
341
|
* @param limit - The number of emergencies to get, defaults to 10
|
|
341
|
-
* @param paginationToken - The
|
|
342
|
+
* @param paginationToken - The string to use for pagination
|
|
342
343
|
* */
|
|
343
344
|
async getHistory(limit, paginationToken) {
|
|
344
345
|
return await this.getRequest("/history", { limit, paginationToken });
|
|
@@ -389,9 +390,15 @@ var CodeEndpoint = class extends ApiEndpoint {
|
|
|
389
390
|
}
|
|
390
391
|
/**
|
|
391
392
|
* Gets the redeemed codes for the current user.
|
|
393
|
+
*
|
|
394
|
+
* @param limit - The number of codes to get, max 100
|
|
395
|
+
* @param paginationToken - The string to use for pagination
|
|
392
396
|
* */
|
|
393
|
-
async getRedeemedCodes() {
|
|
394
|
-
return await this.getRequest("/redeemed"
|
|
397
|
+
async getRedeemedCodes(limit, paginationToken) {
|
|
398
|
+
return await this.getRequest("/redeemed", {
|
|
399
|
+
limit,
|
|
400
|
+
paginationToken
|
|
401
|
+
});
|
|
395
402
|
}
|
|
396
403
|
/**
|
|
397
404
|
* Redeems the specified promotional code for the current user
|
|
@@ -817,6 +824,28 @@ var CodeType = /* @__PURE__ */ ((CodeType2) => {
|
|
|
817
824
|
CodeType2[CodeType2["CITIZEN_CON_2954"] = 1] = "CITIZEN_CON_2954";
|
|
818
825
|
return CodeType2;
|
|
819
826
|
})(CodeType || {});
|
|
827
|
+
|
|
828
|
+
// src/models/ApiToken.ts
|
|
829
|
+
var TokenVersion = /* @__PURE__ */ ((TokenVersion2) => {
|
|
830
|
+
TokenVersion2[TokenVersion2["UNKNOWN"] = -1] = "UNKNOWN";
|
|
831
|
+
TokenVersion2[TokenVersion2["LEGACY"] = 0] = "LEGACY";
|
|
832
|
+
TokenVersion2[TokenVersion2["V3"] = 3] = "V3";
|
|
833
|
+
TokenVersion2[TokenVersion2["V4"] = 4] = "V4";
|
|
834
|
+
return TokenVersion2;
|
|
835
|
+
})(TokenVersion || {});
|
|
836
|
+
var TokenScope = /* @__PURE__ */ ((TokenScope2) => {
|
|
837
|
+
TokenScope2["CLIENT_READ"] = "client:read";
|
|
838
|
+
TokenScope2["CLIENT_WRITE"] = "client:write";
|
|
839
|
+
TokenScope2["CLIENT_PROFILE_READ"] = "client:profile:read";
|
|
840
|
+
TokenScope2["CLIENT_PROFILE_WRITE"] = "client:profile:write";
|
|
841
|
+
TokenScope2["CLIENT_ORGSETTINGS_READ"] = "client:orgsettings:read";
|
|
842
|
+
TokenScope2["STAFF_READ"] = "staff:read";
|
|
843
|
+
TokenScope2["STAFF_WRITE"] = "staff:write";
|
|
844
|
+
TokenScope2["STAFF_PROFILE_READ"] = "staff:profile:read";
|
|
845
|
+
TokenScope2["STAFF_PROFILE_WRITE"] = "staff:profile:write";
|
|
846
|
+
TokenScope2["STAFF_ORGSETTINGS_READ"] = "staff:orgsettings:read";
|
|
847
|
+
return TokenScope2;
|
|
848
|
+
})(TokenScope || {});
|
|
820
849
|
export {
|
|
821
850
|
AccountDeactivationReason,
|
|
822
851
|
ApiEndpoint,
|
|
@@ -846,6 +875,8 @@ export {
|
|
|
846
875
|
SubmissionSource,
|
|
847
876
|
ThreatLevel,
|
|
848
877
|
TokenManager,
|
|
878
|
+
TokenScope,
|
|
879
|
+
TokenVersion,
|
|
849
880
|
UserRoles,
|
|
850
881
|
WebsocketEndpoint
|
|
851
882
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts","../src/models/PromotionalCode.ts"],"sourcesContent":["import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get, max 100\n * @param paginationToken - The number to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get, defaults to 10\n * @param paginationToken - The number to use for pagination\n * */\n public async getHistory(\n limit?: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The stringified object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n * */\n public async getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>> {\n return await this.getRequest<PromotionalCode[]>(\"/redeemed\");\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket>\n{\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n alertMessage?: DiscordMessage;\n clientMessage?: DiscordMessage;\n coordinationThread?: DiscordMessage;\n afterActionReportMessage?: DiscordMessage;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n creationTimestamp: number;\n acceptedTimestamp?: number;\n completionTimestamp?: number;\n rating: ResponseRating;\n ratingRemarks?: string;\n test: boolean;\n origin: Origin;\n clientData?: ClientData;\n missionName?: string;\n isComplete: boolean;\n afterActionReport?: AfterActionReport;\n}\n\nexport interface DiscordMessage {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n reported: boolean;\n userSid?: string;\n}\n\nexport interface AfterActionReport {\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n remarks?: string;\n submitterStaffId: string;\n submittedOn?: string;\n editHistory: AfterActionReportEdit[];\n hasBeenEdited: boolean;\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: string;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n CEO = 1 << 50,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n registrationEnabled: boolean;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n children: SpaceLocation[];\n enabled: boolean;\n characteristics: LocationCharacteristic[];\n}\n\nexport enum SpaceLocationType {\n UNKNOWN = 0,\n SYSTEM = 1,\n PLANET = 2,\n MOON = 3,\n}\n\nexport enum ServiceStatus {\n UNKNOWN = 0,\n OPERATIONAL = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n\nexport enum LocationCharacteristic {\n UNKNOWN = 0,\n HIGH_TEMPERATURE = 1,\n LOW_TEMPERATURE = 2,\n HOSTILE_ATMOSPHERE = 3,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n type: CodeType;\n}\n\nexport enum CodeType {\n UNKNOWN,\n CITIZEN_CON_2954,\n}\n"],"mappings":"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","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType"]}
|
|
1
|
+
{"version":3,"sources":["../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts","../src/models/PromotionalCode.ts","../src/models/ApiToken.ts"],"sourcesContent":["import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n scopes: newToken.scopes,\n });\n }\n\n /**\n * Delete an api token.\n *\n * @param id - The id of the api token to delete\n *\n * */\n public async deleteApiToken(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(`/apiTokens/${id}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction, HeaderProvider } from \"../../../Func\";\nimport TokenGrant from \"../../../models/TokenGrant\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nexport default class TokenManager extends ApiEndpoint {\n private accessToken?: string;\n private refreshToken?: string;\n private accessTokenExpiration?: string;\n private refreshTokenExpiration?: string;\n private tokenFetchPromise?: Promise<TokenGrant>;\n\n public constructor(\n config: DefaultApiConfig,\n private readonly refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n headerProvider?: HeaderProvider,\n ) {\n // todo: I dunno fix this someday I guess?\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n super(config, null!, log, headerProvider);\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n public async getAccessToken(source: string = \"unknown\"): Promise<string | undefined> {\n this.log?.debug(`getAccessToken: New token requested from ${source}`);\n\n if (this.config.cookieAuth) {\n this.accessTokenExpiration = localStorage.getItem(\"accessTokenExpiration\") ?? undefined;\n this.refreshTokenExpiration = localStorage.getItem(\"refreshTokenExpiration\") ?? undefined;\n }\n\n if ((this.accessToken !== undefined || this.config.cookieAuth) && this.accessTokenExpiration) {\n const exp = Math.trunc(new Date(this.accessTokenExpiration).getTime() / 1000);\n const now = Math.trunc(Date.now() / 1000);\n\n if (exp > now) {\n this.log?.debug(`getAccessToken: ${source} => Token valid and simply returned`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n }\n\n // if the refresh token isn't present, nothing we can do\n if (this.refreshToken === undefined && !this.config.cookieAuth) {\n this.log?.debug(`getAccessToken: ${source} => Missing refresh token, returning stored access token`);\n return this.accessToken;\n }\n\n // token is expired (or will expire soon) and there is not already one fetching, so fetch a new one\n if (!this.tokenFetchPromise) {\n this.log?.debug(`getAccessToken: ${source} => No current token fetch, starting new fetch`);\n this.tokenFetchPromise = this.fetchToken(this.refreshToken, source);\n }\n\n try {\n this.log?.debug(`getAccessToken: ${source} => Waiting for token fetch to complete`);\n const tokens = await this.tokenFetchPromise;\n\n this.log?.debug(`getAccessToken: ${source} => Setting new tokens in memory if no cookieAuth`);\n if (!this.config.cookieAuth) {\n this.accessToken = tokens.accessToken;\n this.refreshToken = tokens.refreshToken;\n } else {\n this.log?.debug(`getAccessToken: ${source} => Setting new token expirations in local storage`);\n localStorage.setItem(\"accessTokenExpiration\", tokens.accessTokenExpiration);\n if (tokens.refreshTokenExpiration)\n localStorage.setItem(\"refreshTokenExpiration\", tokens.refreshTokenExpiration);\n }\n\n this.accessTokenExpiration = tokens.accessTokenExpiration;\n if (tokens.refreshTokenExpiration) this.refreshTokenExpiration = tokens.refreshTokenExpiration;\n\n if (this.refreshCallback !== undefined) {\n this.log?.debug(`getAccessToken: ${source} => Calling refresh callback with new tokens`);\n await this.refreshCallback(tokens);\n }\n } finally {\n this.tokenFetchPromise = undefined;\n }\n\n this.log?.debug(`getAccessToken: ${source} => Returning new access token`);\n if (!this.config.cookieAuth) {\n return this.accessToken;\n } else {\n return undefined;\n }\n }\n\n private async fetchToken(refreshToken?: string, source: string = \"unknown\"): Promise<TokenGrant> {\n this.log?.debug(`getAccessToken: ${source} => Fetching new tokens`);\n const body = this.config.cookieAuth ? undefined : { refreshToken: refreshToken };\n const result = await this.postRequest<TokenGrant>(\"/exchange\", body, true);\n\n if (!result.success || result.data === undefined) {\n throw Error(result.statusCode?.toString());\n }\n\n this.log?.debug(`getAccessToken: ${source} => Successfully fetched new tokens`);\n return result.data;\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ChatMessage from \"../../../models/ChatMessage\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport ChatMessageRequest from \"./request/ChatMessageRequest\";\n\n/**\n * Endpoints for interacting with chat messages.\n * */\nexport default class ChatMessageEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"chatMessage\";\n }\n\n /**\n * Fetch a chat message\n *\n * @param id - The id of the message\n * @returns The chat message\n *\n * */\n public async getMessage(id: string): Promise<ApiResponse<ChatMessage>> {\n return await this.getRequest<ChatMessage>(id);\n }\n\n /**\n * Gets the specified amount of chat messages for a given emergency.\n *\n * @param emergencyId - The emergency for which to fetch the chat history\n * @param limit - The number of emergencies to get, max 100\n * @param paginationToken - The string to use for pagination\n * */\n public async getMessageHistory(\n emergencyId: string,\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ChatMessage>>> {\n return await this.getRequest<PaginatedResponse<ChatMessage>>(`/conversation/${emergencyId}`, {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Sends a new chat message\n *\n * @param message - The message to send\n * @returns The newly-created chat message\n *\n * */\n public async sendMessage(message: ChatMessageRequest): Promise<ApiResponse<ChatMessage>> {\n return await this.postRequest<ChatMessage>(\"\", message);\n }\n\n /**\n * Update a chat message\n *\n * @param id - The id of the message to update\n * @param contents - The new content of the message\n * @returns The updated chat message\n *\n * */\n public async updateMessage(id: string, contents: string): Promise<ApiResponse<ChatMessage>> {\n return await this.putRequest<ChatMessage>(id, { contents });\n }\n\n /**\n * Delete a chat message\n *\n * @param id - The id of the message to delete\n *\n * */\n public async deleteMessage(id: string): Promise<ApiResponse> {\n return await this.deleteRequest(id);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ClientHistory from \"../../../models/ClientHistory\";\nimport Person, { BlockedStatus } from \"../../../models/Person\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with clients.\n * */\nexport default class ClientEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"client\";\n }\n\n /**\n * Gets the current client.\n * */\n public async get(): Promise<ApiResponse<Person>> {\n return await this.getRequest<Person>(\"\");\n }\n\n /**\n * Gets the specified amount of emergencies the client has created.\n * @param limit - The number of emergencies to get, defaults to 10\n * @param paginationToken - The string to use for pagination\n * */\n public async getHistory(\n limit?: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<ClientHistory>>> {\n return await this.getRequest<PaginatedResponse<ClientHistory>>(\"/history\", { limit, paginationToken });\n }\n\n /**\n * Gets the blocklist status of the current client.\n * */\n public async getBlockedStatus(): Promise<ApiResponse<BlockedStatus>> {\n return await this.getRequest<BlockedStatus>(\"/blocked\");\n }\n\n /**\n * Links the current user to a rsiHandle.\n *\n * @param rsiHandle - The RSI handle of the client\n * @returns The updated Person object of the client\n *\n * */\n public async linkClient(rsiHandle: string): Promise<ApiResponse<Person>> {\n return await this.postRequest<Person>(\"/link\", { rsiHandle });\n }\n\n /**\n * Updates the settings of the current user for the Client Portal.\n *\n * @param settings - The stringified object settings to add or update\n *\n * */\n public async setUserSettings(settings: string): Promise<ApiResponse> {\n return await this.putRequest(\"/settings/clientPortal\", { settingsBlob: settings });\n }\n\n /**\n * Deactivate the current client.\n * */\n public async deactivate(): Promise<ApiResponse> {\n return await this.deleteRequest(\"\");\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport PromotionalCode from \"../../../models/PromotionalCode\";\nimport ApiResponse from \"../../ApiResponse\";\nimport PaginatedResponse from \"../../PaginatedResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with promotional codes.\n * */\nexport default class CodeEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"code\";\n }\n\n /**\n * Gets the redeemed codes for the current user.\n *\n * @param limit - The number of codes to get, max 100\n * @param paginationToken - The string to use for pagination\n * */\n public async getRedeemedCodes(\n limit: number,\n paginationToken?: string,\n ): Promise<ApiResponse<PaginatedResponse<PromotionalCode>>> {\n return await this.getRequest<PaginatedResponse<PromotionalCode>>(\"/redeemed\", {\n limit,\n paginationToken,\n });\n }\n\n /**\n * Redeems the specified promotional code for the current user\n *\n * @param code - The code to redeem.\n * */\n public async redeem(code: string): Promise<ApiResponse> {\n return await this.postRequest(`/redeem/${code}`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { CancellationReason } from \"../../../models/CancellationReason\";\nimport Emergency from \"../../../models/Emergency\";\nimport { ResponseRating } from \"../../../models/ResponseRating\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateEmergencyRequest from \"./request/CreateEmergencyRequest\";\nimport TeamDetailsResponse from \"./response/TeamDetailsResponse\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class EmergencyEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"emergency\";\n }\n\n /**\n * Gets an emergency by id.\n *\n * @param id - The id of the emergency to retrieve\n * */\n public async getEmergency(id: string): Promise<ApiResponse<Emergency>> {\n return await this.getRequest<Emergency>(`/${id}`);\n }\n\n /**\n * Bulk fetches emergencies by id.\n *\n * @param ids - a list of emergencies to retrieve\n * */\n public async getEmergencies(ids: string[]): Promise<ApiResponse<Emergency[]>> {\n return await this.getRequest<Emergency[]>(`/bulk?id=${ids.join(\"&id=\")}`);\n }\n\n /**\n * Creates a new emergency.\n *\n * @param newEmergency - Emergency details for the new emergency\n * @returns The newly-created emergency\n *\n * */\n public async createEmergency(newEmergency: CreateEmergencyRequest): Promise<ApiResponse<Emergency>> {\n return await this.postRequest<Emergency>(\"\", newEmergency);\n }\n\n /**\n * Cancels an existing emergency.\n *\n * @remarks\n * Emergency must still be in the {@link MissionStatus.RECEIVED} state in order to be canceled.\n *\n * @param id - The id of the emergency to cancel\n * @param reason - The reason the emergency was canceled\n * */\n public async cancelEmergencyWithReason(id: string, reason: CancellationReason): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/cancelWithReason`, {\n reason: reason,\n });\n }\n\n /**\n * Allows the client to rate their emergency.\n *\n * @param id - The id of the emergency to rate\n * @param rating - The rating to give the services provided\n * @param remarks - Additional remarks provided by the client\n * */\n public async rateServices(id: string, rating: ResponseRating, remarks?: string): Promise<ApiResponse> {\n return await this.postRequest(`/${id}/rate/`, {\n rating: rating,\n remarks: remarks,\n });\n }\n\n /**\n * Fetches additional details about the responding team for an alert.\n *\n * @param id - The id of the emergency to get team details about\n * */\n public async teamDetails(id: string): Promise<ApiResponse<TeamDetailsResponse>> {\n return await this.getRequest<TeamDetailsResponse>(`/${id}/teamDetails`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport { PublicOrgSettings } from \"../../../models/OrgSettings\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\n/**\n * Endpoints for interacting with the public org settings.\n * */\nexport default class OrgSettingsEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"orgSettings\";\n }\n\n /**\n * Get the public org settings.\n *\n * */\n public async getPublicSettings(): Promise<ApiResponse<PublicOrgSettings>> {\n return await this.getRequest<PublicOrgSettings>(`/public`);\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport MedalInformation from \"./response/MedalInformation\";\n\n/**\n * Endpoints for interacting with staff.\n * */\nexport default class StaffEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"staff\";\n }\n\n /**\n * Gets detailed information about medals.\n * */\n public async medalsInformation(): Promise<ApiResponse<MedalInformation[]>> {\n return await this.getRequest<MedalInformation[]>(\"/meta/medals\");\n }\n}\n","import { type HubConnection, HubConnectionBuilder, ILogger, LogLevel } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\n\nclass WSLogger implements ILogger {\n constructor(private logger?: Logger) {}\n\n log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Trace:\n this.logger?.trace(`Websocket: ${message}`);\n break;\n case LogLevel.Information:\n this.logger?.info(`Websocket: ${message}`);\n break;\n case LogLevel.Warning:\n this.logger?.warn(`Websocket: ${message}`);\n break;\n case LogLevel.Error || LogLevel.Critical:\n this.logger?.error(`Websocket: ${message}`);\n break;\n case LogLevel.Debug:\n this.logger?.debug(`Websocket: ${message}`);\n break;\n }\n }\n}\n\nexport default class WebsocketManager {\n private tokenManager: TokenManager;\n protected readonly logger?: Logger;\n\n public constructor(\n private readonly config: DefaultApiConfig,\n tokenManager: TokenManager,\n logger?: Logger,\n ) {\n this.tokenManager = tokenManager;\n this.logger = logger;\n }\n\n public async establishConnection(): Promise<HubConnection> {\n return new HubConnectionBuilder()\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: retryContext => {\n if (retryContext.previousRetryCount >= 10) return null;\n return Math.min(500 * Math.pow(2, retryContext.previousRetryCount), 5000);\n },\n })\n .withUrl(`${this.config.baseUrl}/hub/emergency`, {\n withCredentials: this.config.cookieAuth,\n\n accessTokenFactory: async (): Promise<string> =>\n (await this.tokenManager.getAccessToken(\"WS accessTokenFactory\")) ?? \"\",\n })\n .configureLogging(new WSLogger(this.logger))\n .build();\n }\n}\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport WebsocketManager from \".//WebsocketManager\";\n\n/**\n * Endpoints for interacting with emergencies.\n * */\nexport default class WebsocketEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n private websocketManager = new WebsocketManager(this.config, this.tokenManager, this.log);\n\n protected override endpoint(): string {\n return \"websocket\";\n }\n\n /**\n * Gets realtime updates.\n *\n * */\n public async initialize(): Promise<HubConnection> {\n if (this.websocketManager === undefined) {\n throw new Error(\"WebsocketManager is undefined\");\n }\n return await this.websocketManager.establishConnection();\n }\n}\n","import { Logger } from \"ts-log\";\n\nimport { AsyncAction } from \"../Func\";\nimport TokenGrant from \"../models/TokenGrant\";\nimport ApiClient from \"./ApiClient\";\nimport ApiConfig from \"./ApiConfig\";\nimport AuthEndpoint from \"./endpoints/auth/AuthEndpoint\";\nimport TokenManager from \"./endpoints/auth/TokenManager\";\nimport ChatMessageEndpoint from \"./endpoints/chatMessage/ChatMessageEndpoint\";\nimport ClientEndpoint from \"./endpoints/client/ClientEndpoint\";\nimport CodeEndpoint from \"./endpoints/code/CodeEndpoint\";\nimport DefaultApiConfig from \"./endpoints/DefaultApiConfig\";\nimport EmergencyEndpoint from \"./endpoints/emergency/EmergencyEndpoint\";\nimport OrgSettingsEndpoint from \"./endpoints/orgSettings/OrgSettingsEndpoint\";\nimport StaffEndpoint from \"./endpoints/staff/StaffEndpoint\";\nimport WebsocketEndpoint from \"./endpoints/websocket/WebsocketEndpoint\";\n\n/**\n * An API client for basic client interactions with the Medrunner API.\n * */\nexport default class MedrunnerApiClient<\n TEmergency extends EmergencyEndpoint = EmergencyEndpoint,\n TClient extends ClientEndpoint = ClientEndpoint,\n TStaff extends StaffEndpoint = StaffEndpoint,\n TOrgSettings extends OrgSettingsEndpoint = OrgSettingsEndpoint,\n TChatMessage extends ChatMessageEndpoint = ChatMessageEndpoint,\n TCode extends CodeEndpoint = CodeEndpoint,\n TAuth extends AuthEndpoint = AuthEndpoint,\n TWebsocket extends WebsocketEndpoint = WebsocketEndpoint,\n> implements ApiClient<TEmergency, TClient, TStaff, TOrgSettings, TChatMessage, TCode, TAuth, TWebsocket> {\n protected constructor(\n public readonly emergency: TEmergency,\n public readonly client: TClient,\n public readonly staff: TStaff,\n public readonly orgSettings: TOrgSettings,\n public readonly chatMessage: TChatMessage,\n public readonly code: TCode,\n public readonly auth: TAuth,\n public readonly websocket: TWebsocket,\n ) {}\n\n /**\n * Constructs a new API client.\n *\n * @param config - The API configuration\n * @param refreshCallback - a callback function called whenever a refresh token exchange is performed\n * @param log - A logger which logs request details\n * */\n public static buildClient(\n config: ApiConfig,\n refreshCallback?: AsyncAction<TokenGrant>,\n log?: Logger,\n ): MedrunnerApiClient {\n const configWithDefaults = new DefaultApiConfig(config);\n\n const tokenManager = new TokenManager(configWithDefaults, refreshCallback, log);\n\n return new MedrunnerApiClient(\n new EmergencyEndpoint(configWithDefaults, tokenManager, log),\n new ClientEndpoint(configWithDefaults, tokenManager, log),\n new StaffEndpoint(configWithDefaults, tokenManager, log),\n new OrgSettingsEndpoint(configWithDefaults, tokenManager, log),\n new ChatMessageEndpoint(configWithDefaults, tokenManager, log),\n new CodeEndpoint(configWithDefaults, tokenManager, log),\n new AuthEndpoint(configWithDefaults, tokenManager, log),\n new WebsocketEndpoint(configWithDefaults, tokenManager, log),\n );\n }\n}\n","/**\n * A supported location from which an emergency may be submitted.\n * */\nexport default interface LocationDetail {\n /**\n * The name of this location\n * */\n name: string;\n\n /**\n * The type of this location\n * */\n type: LocationType;\n\n /**\n * Additional locations which are within this location (e.g. moons of a planet, or planets of a system)\n * */\n children: LocationDetail[];\n}\n\n/**\n * The type of location.\n * */\nexport enum LocationType {\n /**\n * The location type is not known\n * */\n UNKNOWN,\n /**\n * A system, e.g. Stanton\n * */\n SYSTEM,\n /**\n * A planet, e.g. Crusader\n * */\n PLANET,\n /**\n * A moon, e.g. Daymar\n * */\n MOON,\n}\n","export enum CancellationReason {\n NONE,\n OTHER,\n SUCCUMBED_TO_WOUNDS,\n SERVER_ERROR,\n RESPAWNED,\n RESCUED,\n}\n","export enum Class {\n NONE,\n MEDIC,\n SECURITY,\n PILOT,\n LEAD,\n DISPATCH,\n DISPATCH_LEAD,\n DISPATCH_TRAINEE,\n DISPATCH_OBSERVER,\n QRF,\n LOGISTICS,\n}\n","import { CancellationReason } from \"./CancellationReason\";\nimport { MissionStatus } from \"./MissionStatus\";\nimport { ResponseRating } from \"./ResponseRating\";\nimport Team from \"./Team\";\nimport { ThreatLevel } from \"./ThreatLevel\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Emergency extends WritableDbItem {\n system: string;\n subsystem: string;\n tertiaryLocation?: string;\n threatLevel: ThreatLevel;\n clientRsiHandle: string;\n clientDiscordId?: string;\n clientId?: string;\n subscriptionTier: string;\n status: MissionStatus;\n cancellationReason: CancellationReason;\n refusalReason?: string;\n alertMessage?: DiscordMessage;\n clientMessage?: DiscordMessage;\n coordinationThread?: DiscordMessage;\n afterActionReportMessage?: DiscordMessage;\n respondingTeam: Team;\n respondingTeams: RespondingTeam[];\n acceptedOn?: string;\n completedOn?: string;\n rating: ResponseRating;\n ratingRemarks?: string;\n origin: Origin;\n clientData?: ClientData;\n missionName?: string;\n isComplete: boolean;\n afterActionReport?: AfterActionReport;\n}\n\nexport interface DiscordMessage {\n id: string;\n channelId: string;\n}\n\nexport interface ClientData {\n rsiHandle: string;\n rsiProfileLink: string;\n gotClientData: boolean;\n reported: boolean;\n userSid?: string;\n}\n\nexport interface AfterActionReport {\n servicesProvided: MissionServices;\n suspectedTrap: boolean;\n remarks?: string;\n submitterStaffId: string;\n submittedOn?: string;\n editHistory: AfterActionReportEdit[];\n hasBeenEdited: boolean;\n}\n\nexport interface AfterActionReportEdit {\n editorStaffId: string;\n editTime: string;\n}\n\nexport enum MissionServices {\n NONE = 0,\n PVE = 1 << 0,\n PVP = 1 << 1,\n REVIVED_HEALED = 1 << 2,\n HEALED_IN_SHIP = 1 << 3,\n EXTRACT_SAFE_ZONE = 1 << 4,\n}\n\nexport enum Origin {\n UNKNOWN,\n REPORT,\n BEACON,\n EVALUATION,\n}\n\nexport enum SubmissionSource {\n UNKNOWN,\n API,\n BOT,\n}\n\nexport interface RespondingTeam {\n id: string;\n teamName: string;\n}\n","export enum MissionStatus {\n CREATED,\n RECEIVED,\n IN_PROGRESS,\n SUCCESS,\n FAILED,\n NO_CONTACT,\n CANCELED,\n REFUSED,\n ABORTED,\n SERVER_ERROR,\n}\n","import EmergencyStats from \"./EmergencyStats\";\nimport WritableDbItem from \"./WritableDbItem\";\n\nexport default interface Person extends WritableDbItem {\n discordId: string;\n rsiHandle?: string;\n roles: UserRoles;\n personType: PersonType;\n active: boolean;\n deactivationReason: AccountDeactivationReason;\n clientStats: ClientStats;\n activeEmergency?: string;\n clientPortalPreferencesBlob?: string;\n allowAnonymousAlert: boolean;\n initialJoinDate?: string;\n}\n\nexport enum UserRoles {\n CLIENT = 1 << 0,\n STAFF = 1 << 1,\n //@ts-expect-error - valid range\n CEO = 1 << 50,\n //@ts-expect-error - valid range\n DEVELOPER = 1 << 51,\n //@ts-expect-error - valid range\n BOT = 1 << 52,\n}\n\nexport enum PersonType {\n CLIENT,\n STAFF,\n BOT,\n}\n\nexport enum AccountDeactivationReason {\n NONE,\n CLIENT_DRIVEN_DELETION,\n}\n\nexport interface ClientStats {\n missions: EmergencyStats;\n}\n\nexport interface BlockedStatus {\n blocked: boolean;\n}\n","export enum Level {\n None,\n Tier1Section1 = 101,\n Tier1Section2,\n Tier1Section3,\n Tier2Section1 = 201,\n Tier2Section2,\n Tier2Section3,\n Tier3Section1 = 301,\n Tier3Section2,\n Tier3Section3,\n Tier4Section1 = 401,\n Tier4Section2,\n Tier4Section3,\n Tier5Section1 = 501,\n Tier5Section2,\n Tier5Section3,\n Tier6Section1 = 601,\n Tier6Section2,\n Tier6Section3,\n Tier7Section1 = 701,\n Tier7Section2,\n Tier7Section3,\n Tier8Section1 = 801,\n Tier8Section2,\n Tier8Section3,\n Tier9Section1 = 901,\n Tier9Section2,\n Tier9Section3,\n Tier10Section1 = 1001,\n Tier10Section2,\n Tier10Section3,\n}\n","export enum ResponseRating {\n NONE,\n GOOD,\n BAD,\n}\n","export enum ThreatLevel {\n UNKNOWN,\n LOW,\n MEDIUM,\n HIGH,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface OrgSettings extends WritableDbItem {\n public: PublicOrgSettings;\n}\n\nexport interface PublicOrgSettings {\n status: ServiceStatus;\n emergenciesEnabled: boolean;\n anonymousAlertsEnabled: boolean;\n messageOfTheDay?: MessageOfTheDay;\n locationSettings: LocationSettings;\n registrationEnabled: boolean;\n}\n\nexport interface MessageOfTheDay {\n message: string;\n dateRange?: DateRange;\n}\n\nexport interface DateRange {\n startDate: string;\n endDate: string;\n}\n\nexport interface LocationSettings {\n locations: SpaceLocation[];\n}\n\nexport interface SpaceLocation {\n name: string;\n type: SpaceLocationType;\n children: SpaceLocation[];\n enabled: boolean;\n characteristics: LocationCharacteristic[];\n}\n\nexport enum SpaceLocationType {\n UNKNOWN = 0,\n SYSTEM = 1,\n PLANET = 2,\n MOON = 3,\n}\n\nexport enum ServiceStatus {\n UNKNOWN = 0,\n OPERATIONAL = 1,\n SLIGHTLY_DEGRADED = 2,\n HEAVILY_DEGRADED = 3,\n OFFLINE = 4,\n}\n\nexport enum LocationCharacteristic {\n UNKNOWN = 0,\n HIGH_TEMPERATURE = 1,\n LOW_TEMPERATURE = 2,\n HOSTILE_ATMOSPHERE = 3,\n}\n","export default interface Deployment {\n clientType: ClientType;\n version: string;\n}\n\nexport enum ClientType {\n CLIENT_PORTAL = 1,\n STAFF_PORTAL = 2,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface PromotionalCode extends WritableDbItem {\n type: CodeType;\n}\n\nexport enum CodeType {\n UNKNOWN,\n CITIZEN_CON_2954,\n}\n","import WritableDbItem from \"./WritableDbItem\";\n\nexport default interface ApiToken extends WritableDbItem {\n /**\n * The user who created the token\n * */\n userId: string;\n\n /**\n * Human-readable name for the token, assigned by the user\n * */\n name: string;\n\n /**\n * The date at which the token will expire\n * */\n expirationDate?: string;\n\n /**\n * When the token was last used to generate a new access token, iso-8601 timestamp\n * */\n lastUsed?: string;\n\n /**\n * Whether the token has expired\n * */\n expired: boolean;\n\n /**\n * The version of the token\n * */\n version: TokenVersion;\n\n /**\n * The scopes granted to the token\n * */\n scopes: TokenScope[];\n}\n\nexport enum TokenVersion {\n UNKNOWN = -1,\n LEGACY = 0,\n V3 = 3,\n V4 = 4,\n}\n\nexport enum TokenScope {\n CLIENT_READ = \"client:read\",\n CLIENT_WRITE = \"client:write\",\n CLIENT_PROFILE_READ = \"client:profile:read\",\n CLIENT_PROFILE_WRITE = \"client:profile:write\",\n CLIENT_ORGSETTINGS_READ = \"client:orgsettings:read\",\n STAFF_READ = \"staff:read\",\n STAFF_WRITE = \"staff:write\",\n STAFF_PROFILE_READ = \"staff:profile:read\",\n STAFF_PROFILE_WRITE = \"staff:profile:write\",\n STAFF_ORGSETTINGS_READ = \"staff:orgsettings:read\",\n}\n"],"mappings":"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","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType","TokenVersion","TokenScope"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@medrunner/api-client",
|
|
3
|
-
"version": "0.7.0-beta.
|
|
3
|
+
"version": "0.7.0-beta.10",
|
|
4
4
|
"description": "Wrapper library for the Medrunner API",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsup",
|
|
@@ -48,25 +48,25 @@
|
|
|
48
48
|
],
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@microsoft/signalr": "^8.0.17",
|
|
51
|
-
"axios": "^1.
|
|
51
|
+
"axios": "^1.13.2",
|
|
52
52
|
"ts-log": "^2.2.7"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@eslint/eslintrc": "^3.3.
|
|
56
|
-
"@eslint/js": "^9.
|
|
57
|
-
"@types/node": "^24.
|
|
58
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
59
|
-
"@typescript-eslint/parser": "^8.
|
|
60
|
-
"eslint": "^9.
|
|
55
|
+
"@eslint/eslintrc": "^3.3.3",
|
|
56
|
+
"@eslint/js": "^9.39.2",
|
|
57
|
+
"@types/node": "^24.10.4",
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "^8.50.1",
|
|
59
|
+
"@typescript-eslint/parser": "^8.50.1",
|
|
60
|
+
"eslint": "^9.39.2",
|
|
61
61
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
62
|
-
"eslint-plugin-tsdoc": "^0.
|
|
63
|
-
"prettier": "^3.
|
|
62
|
+
"eslint-plugin-tsdoc": "^0.5.0",
|
|
63
|
+
"prettier": "^3.7.4",
|
|
64
64
|
"ts-node": "^10.9.2",
|
|
65
65
|
"tslib": "^2.8.1",
|
|
66
|
-
"tsup": "^8.5.
|
|
67
|
-
"typedoc": "^0.28.
|
|
68
|
-
"typedoc-plugin-markdown": "^4.
|
|
69
|
-
"typescript": "^5.9.
|
|
70
|
-
"vitepress": "^1.6.
|
|
66
|
+
"tsup": "^8.5.1",
|
|
67
|
+
"typedoc": "^0.28.15",
|
|
68
|
+
"typedoc-plugin-markdown": "^4.9.0",
|
|
69
|
+
"typescript": "^5.9.3",
|
|
70
|
+
"vitepress": "^1.6.4"
|
|
71
71
|
}
|
|
72
72
|
}
|