@medrunner/api-client 0.7.0-beta.4 → 0.7.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -14,7 +14,11 @@ interface DbItem {
14
14
  created: string;
15
15
  }
16
16
 
17
- interface ApiToken extends DbItem {
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
  * */
@@ -31,6 +35,36 @@ interface ApiToken extends DbItem {
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,10 +214,6 @@ declare class AuthEndpoint extends ApiEndpoint {
176
214
  deleteApiToken(id: string): Promise<ApiResponse>;
177
215
  }
178
216
 
179
- interface WritableDbItem extends DbItem {
180
- updated: string;
181
- }
182
-
183
217
  interface ChatMessage extends WritableDbItem {
184
218
  /**
185
219
  * The emergency associated with the chat message
@@ -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 number to use for pagination
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
  /**
@@ -343,7 +377,7 @@ declare class ClientEndpoint extends ApiEndpoint {
343
377
  /**
344
378
  * Gets the specified amount of emergencies the client has created.
345
379
  * @param limit - The number of emergencies to get, defaults to 10
346
- * @param paginationToken - The number to use for pagination
380
+ * @param paginationToken - The string to use for pagination
347
381
  * */
348
382
  getHistory(limit?: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ClientHistory>>>;
349
383
  /**
@@ -387,8 +421,11 @@ declare class CodeEndpoint extends ApiEndpoint {
387
421
  protected endpoint(): string;
388
422
  /**
389
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
390
427
  * */
391
- getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>>;
428
+ getRedeemedCodes(limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<PromotionalCode>>>;
392
429
  /**
393
430
  * Redeems the specified promotional code for the current user
394
431
  *
package/dist/index.d.ts CHANGED
@@ -14,7 +14,11 @@ interface DbItem {
14
14
  created: string;
15
15
  }
16
16
 
17
- interface ApiToken extends DbItem {
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
  * */
@@ -31,6 +35,36 @@ interface ApiToken extends DbItem {
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,10 +214,6 @@ declare class AuthEndpoint extends ApiEndpoint {
176
214
  deleteApiToken(id: string): Promise<ApiResponse>;
177
215
  }
178
216
 
179
- interface WritableDbItem extends DbItem {
180
- updated: string;
181
- }
182
-
183
217
  interface ChatMessage extends WritableDbItem {
184
218
  /**
185
219
  * The emergency associated with the chat message
@@ -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 number to use for pagination
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
  /**
@@ -343,7 +377,7 @@ declare class ClientEndpoint extends ApiEndpoint {
343
377
  /**
344
378
  * Gets the specified amount of emergencies the client has created.
345
379
  * @param limit - The number of emergencies to get, defaults to 10
346
- * @param paginationToken - The number to use for pagination
380
+ * @param paginationToken - The string to use for pagination
347
381
  * */
348
382
  getHistory(limit?: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<ClientHistory>>>;
349
383
  /**
@@ -387,8 +421,11 @@ declare class CodeEndpoint extends ApiEndpoint {
387
421
  protected endpoint(): string;
388
422
  /**
389
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
390
427
  * */
391
- getRedeemedCodes(): Promise<ApiResponse<PromotionalCode[]>>;
428
+ getRedeemedCodes(limit: number, paginationToken?: string): Promise<ApiResponse<PaginatedResponse<PromotionalCode>>>;
392
429
  /**
393
430
  * Redeems the specified promotional code for the current user
394
431
  *
package/dist/index.js CHANGED
@@ -215,7 +215,8 @@ var AuthEndpoint = class extends ApiEndpoint {
215
215
  async createApiToken(newToken) {
216
216
  return await this.postRequest("/apiTokens", {
217
217
  name: newToken.name,
218
- expirationDate: newToken.expirationDate?.toISOString()
218
+ expirationDate: newToken.expirationDate?.toISOString(),
219
+ scopes: newToken.scopes
219
220
  });
220
221
  }
221
222
  /**
@@ -341,7 +342,7 @@ var ChatMessageEndpoint = class extends ApiEndpoint {
341
342
  *
342
343
  * @param emergencyId - The emergency for which to fetch the chat history
343
344
  * @param limit - The number of emergencies to get, max 100
344
- * @param paginationToken - The number to use for pagination
345
+ * @param paginationToken - The string to use for pagination
345
346
  * */
346
347
  async getMessageHistory(emergencyId, limit, paginationToken) {
347
348
  return await this.getRequest(`/conversation/${emergencyId}`, {
@@ -401,7 +402,7 @@ var ClientEndpoint = class extends ApiEndpoint {
401
402
  /**
402
403
  * Gets the specified amount of emergencies the client has created.
403
404
  * @param limit - The number of emergencies to get, defaults to 10
404
- * @param paginationToken - The number to use for pagination
405
+ * @param paginationToken - The string to use for pagination
405
406
  * */
406
407
  async getHistory(limit, paginationToken) {
407
408
  return await this.getRequest("/history", { limit, paginationToken });
@@ -452,9 +453,15 @@ var CodeEndpoint = class extends ApiEndpoint {
452
453
  }
453
454
  /**
454
455
  * Gets the redeemed codes for the current user.
456
+ *
457
+ * @param limit - The number of codes to get, max 100
458
+ * @param paginationToken - The string to use for pagination
455
459
  * */
456
- async getRedeemedCodes() {
457
- return await this.getRequest("/redeemed");
460
+ async getRedeemedCodes(limit, paginationToken) {
461
+ return await this.getRequest("/redeemed", {
462
+ limit,
463
+ paginationToken
464
+ });
458
465
  }
459
466
  /**
460
467
  * Redeems the specified promotional code for the current user
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 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"],"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"],"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 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"],"mappings":"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","names":["axios","LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType"]}
package/dist/index.mjs CHANGED
@@ -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 number to use for pagination
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 number to use for pagination
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
@@ -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 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"],"mappings":";;;;AAEA,IAAqB,mBAArB,MAAsC;AAAA,EAFtC,OAEsC;AAAA;AAAA;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,QAAmB;AAC7B,SAAK,UAAU,OAAO,WAAW;AACjC,SAAK,cAAc,OAAO;AAC1B,SAAK,eAAe,OAAO;AAC3B,SAAK,aAAa,OAAO,cAAc;AAAA,EACzC;AACF;;;ACdA,OAAO,SAAS,kBAAsC;AAQtD,IAA8B,cAA9B,MAA0C;AAAA,EAG9B,YACR,QACgB,cACG,KACF,gBACjB;AAHgB;AACG;AACF;AAEjB,SAAK,SAAS;AAAA,EAChB;AAAA,EAlBF,OAQ0C;AAAA;AAAA;AAAA,EACxB;AAAA,EAaN,cAAsB;AAC9B,WAAO,GAAG,KAAK,OAAO,OAAO,IAAI,KAAK,SAAS,CAAC;AAAA,EAClD;AAAA,EAEA,MAAc,kBAAkB,kBAAwD;AACtF,UAAM,SAA6B;AAAA,MACjC,SAAS,KAAK,OAAO;AAAA,MACrB,SAAS,CAAC;AAAA,MACV,iBAAiB,KAAK,OAAO;AAAA,IAC/B;AAEA,QAAI,OAAO,YAAY,QAAW;AAChC,UAAI,CAAC,kBAAkB;AACrB,cAAM,cAAc,MAAM,KAAK,aAAa,eAAe,iBAAiB;AAC5E,YAAI,gBAAgB,QAAW;AAE7B,iBAAO,QAAQ,gBAAgB,UAAU,WAAW;AAAA,QACtD;AAAA,MACF;AAEA,UAAI,KAAK,mBAAmB,QAAW;AACrC,mBAAW,UAAU,OAAO,QAAQ,MAAM,KAAK,eAAe,CAAC,GAAG;AAChE,iBAAO,QAAQ,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,WACd,UACA,aACA,kBACyB;AACzB,WAAO,MAAM,KAAK,uBAA0B,UAAU,OAAO,MAAM,KAAK,aAAa,gBAAgB;AAAA,EACvG;AAAA,EAEA,MAAgB,YACd,UACA,MACA,kBACyB;AACzB,WAAO,MAAM,KAAK,oBAAuB,UAAU,QAAQ,MAAM,MAAM,MAAM,gBAAgB;AAAA,EAC/F;AAAA,EAEA,MAAgB,WACd,UACA,MACA,kBACyB;AACzB,WAAO,MAAM,KAAK,oBAAuB,UAAU,OAAO,MAAM,KAAK,MAAM,gBAAgB;AAAA,EAC7F;AAAA,EAEA,MAAgB,aACd,UACA,MACA,kBACyB;AACzB,WAAO,MAAM,KAAK,oBAAuB,UAAU,SAAS,MAAM,OAAO,MAAM,gBAAgB;AAAA,EACjG;AAAA,EAEA,MAAgB,cACd,UACA,aACA,kBACsB;AACtB,WAAO,MAAM,KAAK,uBAAuB,UAAU,UAAU,MAAM,QAAQ,aAAa,gBAAgB;AAAA,EAC1G;AAAA,EAEA,MAAc,oBACZ,UACA,aACA,cACA,MACA,kBACyB;AACzB,UAAM,iBAAkC,8BAAO,YAAY,WAAW,MAAM,aAAa,YAAY,MAAM,MAAM,GAAzE;AACxC,WAAO,MAAM,KAAK,YAAe,UAAU,aAAa,gBAAgB,QAAW,gBAAgB;AAAA,EACrG;AAAA,EAEA,MAAc,uBACZ,UACA,aACA,cACA,aACA,kBACyB;AACzB,UAAM,iBAAkC,8BAAO,YAAY,WAAW,MAAM,aAAa,YAAY,MAAM,GAAnE;AACxC,WAAO,MAAM,KAAK,YAAe,UAAU,aAAa,gBAAgB,aAAa,gBAAgB;AAAA,EACvG;AAAA,EAEQ,SAAS,UAA0B;AACzC,UAAM,UAAU,KAAK,YAAY;AAEjC,QAAI,QAAQ,SAAS,GAAG,GAAG;AACzB,UAAI,SAAS,WAAW,GAAG,GAAG;AAC5B,eAAO,GAAG,OAAO,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MAC3C;AAEA,aAAO,GAAG,OAAO,GAAG,QAAQ;AAAA,IAC9B;AAEA,QAAI,SAAS,WAAW,GAAG,GAAG;AAC5B,aAAO,GAAG,OAAO,GAAG,QAAQ;AAAA,IAC9B;AAEA,WAAO,GAAG,OAAO,IAAI,QAAQ;AAAA,EAC/B;AAAA,EAEA,MAAc,YACZ,UACA,aACA,SACA,aACA,mBAAmB,OACM;AACzB,UAAM,aAAa,KAAK,SAAS,QAAQ;AAEzC,SAAK,KAAK,MAAM,WAAW,WAAW,eAAe,UAAU,EAAE;AACjE,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,kBAAkB,gBAAgB;AAC5D,UAAI,gBAAgB,QAAW;AAC7B,eAAO,SAAS;AAAA,MAClB;AAEA,YAAM,SAAS,MAAM,QAAQ,YAAY,MAAM;AAE/C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,OAAO;AAAA,MACf;AAAA,IACF,SAAS,GAAG;AACV,WAAK,KAAK,KAAK,aAAa,WAAW,eAAe,UAAU,KAAK,CAAC,EAAE;AACxE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,cAAc,aAAa,aAAa,EAAE,UAAU,OAAO;AAAA,QAC3D,YAAY,aAAa,aAAa,EAAE,UAAU,SAAS;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AACF;;;ACrJA,IAAqB,eAArB,cAA0C,YAAY;AAAA,EAdtD,OAcsD;AAAA;AAAA;AAAA,EACpD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,QAAQ,UAAiD;AACpE,WAAO,MAAM,KAAK,YAAoB,YAAY,YAAY,IAAI;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,eAAiD;AAC5D,WAAO,MAAM,KAAK,WAAuB,YAAY;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,eAAe,UAA+D;AACzF,WAAO,MAAM,KAAK,YAAoB,cAAc;AAAA,MAClD,MAAM,SAAS;AAAA,MACf,gBAAgB,SAAS,gBAAgB,YAAY;AAAA,IACvD,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,eAAe,IAAkC;AAC5D,WAAO,MAAM,KAAK,cAAc,cAAc,EAAE,EAAE;AAAA,EACpD;AACF;;;ACzDA,IAAqB,eAArB,cAA0C,YAAY;AAAA,EAO7C,YACL,QACiB,iBACjB,KACA,gBACA;AAIA,UAAM,QAAQ,MAAO,KAAK,cAAc;AAPvB;AAQjB,SAAK,cAAc,OAAO;AAC1B,SAAK,eAAe,OAAO;AAAA,EAC7B;AAAA,EA1BF,OAOsD;AAAA;AAAA;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAgBW,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,eAAe,SAAiB,WAAwC;AACnF,SAAK,KAAK,MAAM,4CAA4C,MAAM,EAAE;AAEpE,QAAI,KAAK,OAAO,YAAY;AAC1B,WAAK,wBAAwB,aAAa,QAAQ,uBAAuB,KAAK;AAC9E,WAAK,yBAAyB,aAAa,QAAQ,wBAAwB,KAAK;AAAA,IAClF;AAEA,SAAK,KAAK,gBAAgB,UAAa,KAAK,OAAO,eAAe,KAAK,uBAAuB;AAC5F,YAAM,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,qBAAqB,EAAE,QAAQ,IAAI,GAAI;AAC5E,YAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AAExC,UAAI,MAAM,KAAK;AACb,aAAK,KAAK,MAAM,mBAAmB,MAAM,qCAAqC;AAC9E,YAAI,CAAC,KAAK,OAAO,YAAY;AAC3B,iBAAO,KAAK;AAAA,QACd,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,iBAAiB,UAAa,CAAC,KAAK,OAAO,YAAY;AAC9D,WAAK,KAAK,MAAM,mBAAmB,MAAM,0DAA0D;AACnG,aAAO,KAAK;AAAA,IACd;AAGA,QAAI,CAAC,KAAK,mBAAmB;AAC3B,WAAK,KAAK,MAAM,mBAAmB,MAAM,gDAAgD;AACzF,WAAK,oBAAoB,KAAK,WAAW,KAAK,cAAc,MAAM;AAAA,IACpE;AAEA,QAAI;AACF,WAAK,KAAK,MAAM,mBAAmB,MAAM,yCAAyC;AAClF,YAAM,SAAS,MAAM,KAAK;AAE1B,WAAK,KAAK,MAAM,mBAAmB,MAAM,mDAAmD;AAC5F,UAAI,CAAC,KAAK,OAAO,YAAY;AAC3B,aAAK,cAAc,OAAO;AAC1B,aAAK,eAAe,OAAO;AAAA,MAC7B,OAAO;AACL,aAAK,KAAK,MAAM,mBAAmB,MAAM,oDAAoD;AAC7F,qBAAa,QAAQ,yBAAyB,OAAO,qBAAqB;AAC1E,YAAI,OAAO;AACT,uBAAa,QAAQ,0BAA0B,OAAO,sBAAsB;AAAA,MAChF;AAEA,WAAK,wBAAwB,OAAO;AACpC,UAAI,OAAO,uBAAwB,MAAK,yBAAyB,OAAO;AAExE,UAAI,KAAK,oBAAoB,QAAW;AACtC,aAAK,KAAK,MAAM,mBAAmB,MAAM,8CAA8C;AACvF,cAAM,KAAK,gBAAgB,MAAM;AAAA,MACnC;AAAA,IACF,UAAE;AACA,WAAK,oBAAoB;AAAA,IAC3B;AAEA,SAAK,KAAK,MAAM,mBAAmB,MAAM,gCAAgC;AACzE,QAAI,CAAC,KAAK,OAAO,YAAY;AAC3B,aAAO,KAAK;AAAA,IACd,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,WAAW,cAAuB,SAAiB,WAAgC;AAC/F,SAAK,KAAK,MAAM,mBAAmB,MAAM,yBAAyB;AAClE,UAAM,OAAO,KAAK,OAAO,aAAa,SAAY,EAAE,aAA2B;AAC/E,UAAM,SAAS,MAAM,KAAK,YAAwB,aAAa,MAAM,IAAI;AAEzE,QAAI,CAAC,OAAO,WAAW,OAAO,SAAS,QAAW;AAChD,YAAM,MAAM,OAAO,YAAY,SAAS,CAAC;AAAA,IAC3C;AAEA,SAAK,KAAK,MAAM,mBAAmB,MAAM,qCAAqC;AAC9E,WAAO,OAAO;AAAA,EAChB;AACF;;;AClGA,IAAqB,sBAArB,cAAiD,YAAY;AAAA,EAd7D,OAc6D;AAAA;AAAA;AAAA,EAC3D,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,WAAW,IAA+C;AACrE,WAAO,MAAM,KAAK,WAAwB,EAAE;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,kBACX,aACA,OACA,iBACsD;AACtD,WAAO,MAAM,KAAK,WAA2C,iBAAiB,WAAW,IAAI;AAAA,MAC3F;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,YAAY,SAAgE;AACvF,WAAO,MAAM,KAAK,YAAyB,IAAI,OAAO;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAa,cAAc,IAAY,UAAqD;AAC1F,WAAO,MAAM,KAAK,WAAwB,IAAI,EAAE,SAAS,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,cAAc,IAAkC;AAC3D,WAAO,MAAM,KAAK,cAAc,EAAE;AAAA,EACpC;AACF;;;ACtEA,IAAqB,iBAArB,cAA4C,YAAY;AAAA,EAdxD,OAcwD;AAAA;AAAA;AAAA,EACtD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,MAAoC;AAC/C,WAAO,MAAM,KAAK,WAAmB,EAAE;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,WACX,OACA,iBACwD;AACxD,WAAO,MAAM,KAAK,WAA6C,YAAY,EAAE,OAAO,gBAAgB,CAAC;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,mBAAwD;AACnE,WAAO,MAAM,KAAK,WAA0B,UAAU;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,WAAW,WAAiD;AACvE,WAAO,MAAM,KAAK,YAAoB,SAAS,EAAE,UAAU,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,gBAAgB,UAAwC;AACnE,WAAO,MAAM,KAAK,WAAW,0BAA0B,EAAE,cAAc,SAAS,CAAC;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,aAAmC;AAC9C,WAAO,MAAM,KAAK,cAAc,EAAE;AAAA,EACpC;AACF;;;AChEA,IAAqB,eAArB,cAA0C,YAAY;AAAA,EAZtD,OAYsD;AAAA;AAAA;AAAA,EACpD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,mBAA4D;AACvE,WAAO,MAAM,KAAK,WAA8B,WAAW;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,OAAO,MAAoC;AACtD,WAAO,MAAM,KAAK,YAAY,WAAW,IAAI,EAAE;AAAA,EACjD;AACF;;;ACpBA,IAAqB,oBAArB,cAA+C,YAAY;AAAA,EAhB3D,OAgB2D;AAAA;AAAA;AAAA,EACzD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,aAAa,IAA6C;AACrE,WAAO,MAAM,KAAK,WAAsB,IAAI,EAAE,EAAE;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,eAAe,KAAkD;AAC5E,WAAO,MAAM,KAAK,WAAwB,YAAY,IAAI,KAAK,MAAM,CAAC,EAAE;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,gBAAgB,cAAuE;AAClG,WAAO,MAAM,KAAK,YAAuB,IAAI,YAAY;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,0BAA0B,IAAY,QAAkD;AACnG,WAAO,MAAM,KAAK,YAAY,IAAI,EAAE,qBAAqB;AAAA,MACvD;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,aAAa,IAAY,QAAwB,SAAwC;AACpG,WAAO,MAAM,KAAK,YAAY,IAAI,EAAE,UAAU;AAAA,MAC5C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,YAAY,IAAuD;AAC9E,WAAO,MAAM,KAAK,WAAgC,IAAI,EAAE,cAAc;AAAA,EACxE;AACF;;;AC/EA,IAAqB,sBAArB,cAAiD,YAAY;AAAA,EAZ7D,OAY6D;AAAA;AAAA;AAAA,EAC3D,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,oBAA6D;AACxE,WAAO,MAAM,KAAK,WAA8B,SAAS;AAAA,EAC3D;AACF;;;AChBA,IAAqB,gBAArB,cAA2C,YAAY;AAAA,EAZvD,OAYuD;AAAA;AAAA;AAAA,EACrD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEmB,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,oBAA8D;AACzE,WAAO,MAAM,KAAK,WAA+B,cAAc;AAAA,EACjE;AACF;;;AC3BA,SAA6B,sBAA+B,gBAAgB;AAM5E,IAAM,WAAN,MAAkC;AAAA,EAChC,YAAoB,QAAiB;AAAjB;AAAA,EAAkB;AAAA,EAPxC,OAMkC;AAAA;AAAA;AAAA,EAGhC,IAAI,UAAoB,SAAuB;AAC7C,YAAQ,UAAU;AAAA,MAChB,KAAK,SAAS;AACZ,aAAK,QAAQ,MAAM,cAAc,OAAO,EAAE;AAC1C;AAAA,MACF,KAAK,SAAS;AACZ,aAAK,QAAQ,KAAK,cAAc,OAAO,EAAE;AACzC;AAAA,MACF,KAAK,SAAS;AACZ,aAAK,QAAQ,KAAK,cAAc,OAAO,EAAE;AACzC;AAAA,MACF,MAAK,SAAS,SAAS,SAAS;AAC9B,aAAK,QAAQ,MAAM,cAAc,OAAO,EAAE;AAC1C;AAAA,MACF,KAAK,SAAS;AACZ,aAAK,QAAQ,MAAM,cAAc,OAAO,EAAE;AAC1C;AAAA,IACJ;AAAA,EACF;AACF;AAEA,IAAqB,mBAArB,MAAsC;AAAA,EAI7B,YACY,QACjB,cACA,QACA;AAHiB;AAIjB,SAAK,eAAe;AACpB,SAAK,SAAS;AAAA,EAChB;AAAA,EAzCF,OA8BsC;AAAA;AAAA;AAAA,EAC5B;AAAA,EACW;AAAA,EAWnB,MAAa,sBAA8C;AACzD,WAAO,IAAI,qBAAqB,EAC7B,uBAAuB;AAAA,MACtB,8BAA8B,yCAAgB;AAC5C,YAAI,aAAa,sBAAsB,GAAI,QAAO;AAClD,eAAO,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,aAAa,kBAAkB,GAAG,GAAI;AAAA,MAC1E,GAH8B;AAAA,IAIhC,CAAC,EACA,QAAQ,GAAG,KAAK,OAAO,OAAO,kBAAkB;AAAA,MAC/C,iBAAiB,KAAK,OAAO;AAAA,MAE7B,oBAAoB,mCACjB,MAAM,KAAK,aAAa,eAAe,uBAAuB,KAAM,IADnD;AAAA,IAEtB,CAAC,EACA,iBAAiB,IAAI,SAAS,KAAK,MAAM,CAAC,EAC1C,MAAM;AAAA,EACX;AACF;;;AChDA,IAAqB,oBAArB,cAA+C,YAAY;AAAA,EAZ3D,OAY2D;AAAA;AAAA;AAAA,EACzD,YAAY,QAA0B,cAA4B,KAAc,gBAAiC;AAC/G,UAAM,QAAQ,cAAc,KAAK,cAAc;AAAA,EACjD;AAAA,EAEQ,mBAAmB,IAAI,iBAAiB,KAAK,QAAQ,KAAK,cAAc,KAAK,GAAG;AAAA,EAErE,WAAmB;AACpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,aAAqC;AAChD,QAAI,KAAK,qBAAqB,QAAW;AACvC,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AACA,WAAO,MAAM,KAAK,iBAAiB,oBAAoB;AAAA,EACzD;AACF;;;ACbA,IAAqB,qBAArB,MAAqB,oBAUrB;AAAA,EACY,YACQ,WACA,QACA,OACA,aACA,aACA,MACA,MACA,WAChB;AARgB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EACf;AAAA,EAxCL,OA8BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBE,OAAc,YACZ,QACA,iBACA,KACoB;AACpB,UAAM,qBAAqB,IAAI,iBAAiB,MAAM;AAEtD,UAAM,eAAe,IAAI,aAAa,oBAAoB,iBAAiB,GAAG;AAE9E,WAAO,IAAI;AAAA,MACT,IAAI,kBAAkB,oBAAoB,cAAc,GAAG;AAAA,MAC3D,IAAI,eAAe,oBAAoB,cAAc,GAAG;AAAA,MACxD,IAAI,cAAc,oBAAoB,cAAc,GAAG;AAAA,MACvD,IAAI,oBAAoB,oBAAoB,cAAc,GAAG;AAAA,MAC7D,IAAI,oBAAoB,oBAAoB,cAAc,GAAG;AAAA,MAC7D,IAAI,aAAa,oBAAoB,cAAc,GAAG;AAAA,MACtD,IAAI,aAAa,oBAAoB,cAAc,GAAG;AAAA,MACtD,IAAI,kBAAkB,oBAAoB,cAAc,GAAG;AAAA,IAC7D;AAAA,EACF;AACF;;;AC9CO,IAAK,eAAL,kBAAKA,kBAAL;AAIL,EAAAA,4BAAA;AAIA,EAAAA,4BAAA;AAIA,EAAAA,4BAAA;AAIA,EAAAA,4BAAA;AAhBU,SAAAA;AAAA,GAAA;;;ACvBL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AACA,EAAAA,wCAAA;AANU,SAAAA;AAAA,GAAA;;;ACAL,IAAK,QAAL,kBAAKC,WAAL;AACL,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AAXU,SAAAA;AAAA,GAAA;;;ACgEL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,kCAAA,UAAO,KAAP;AACA,EAAAA,kCAAA,SAAM,KAAN;AACA,EAAAA,kCAAA,SAAM,KAAN;AACA,EAAAA,kCAAA,oBAAiB,KAAjB;AACA,EAAAA,kCAAA,oBAAiB,KAAjB;AACA,EAAAA,kCAAA,uBAAoB,MAApB;AANU,SAAAA;AAAA,GAAA;AASL,IAAK,SAAL,kBAAKC,YAAL;AACL,EAAAA,gBAAA;AACA,EAAAA,gBAAA;AACA,EAAAA,gBAAA;AACA,EAAAA,gBAAA;AAJU,SAAAA;AAAA,GAAA;AAOL,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,oCAAA;AACA,EAAAA,oCAAA;AACA,EAAAA,oCAAA;AAHU,SAAAA;AAAA,GAAA;;;AChFL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AAVU,SAAAA;AAAA,GAAA;;;ACiBL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,sBAAA,YAAS,KAAT;AACA,EAAAA,sBAAA,WAAQ,KAAR;AAEA,EAAAA,sBAAA,SAAM,UAAN;AAEA,EAAAA,sBAAA,eAAY,UAAZ;AAEA,EAAAA,sBAAA,SAAM,WAAN;AARU,SAAAA;AAAA,GAAA;AAWL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AAHU,SAAAA;AAAA,GAAA;AAML,IAAK,4BAAL,kBAAKC,+BAAL;AACL,EAAAA,sDAAA;AACA,EAAAA,sDAAA;AAFU,SAAAA;AAAA,GAAA;;;AClCL,IAAK,QAAL,kBAAKC,WAAL;AACL,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,mBAAgB,OAAhB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA,oBAAiB,QAAjB;AACA,EAAAA,cAAA;AACA,EAAAA,cAAA;AA/BU,SAAAA;AAAA,GAAA;;;ACAL,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gCAAA;AACA,EAAAA,gCAAA;AACA,EAAAA,gCAAA;AAHU,SAAAA;AAAA,GAAA;;;ACAL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,0BAAA;AACA,EAAAA,0BAAA;AACA,EAAAA,0BAAA;AACA,EAAAA,0BAAA;AAJU,SAAAA;AAAA,GAAA;;;ACqCL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,sCAAA,aAAU,KAAV;AACA,EAAAA,sCAAA,YAAS,KAAT;AACA,EAAAA,sCAAA,YAAS,KAAT;AACA,EAAAA,sCAAA,UAAO,KAAP;AAJU,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,8BAAA,aAAU,KAAV;AACA,EAAAA,8BAAA,iBAAc,KAAd;AACA,EAAAA,8BAAA,uBAAoB,KAApB;AACA,EAAAA,8BAAA,sBAAmB,KAAnB;AACA,EAAAA,8BAAA,aAAU,KAAV;AALU,SAAAA;AAAA,GAAA;AAQL,IAAK,yBAAL,kBAAKC,4BAAL;AACL,EAAAA,gDAAA,aAAU,KAAV;AACA,EAAAA,gDAAA,sBAAmB,KAAnB;AACA,EAAAA,gDAAA,qBAAkB,KAAlB;AACA,EAAAA,gDAAA,wBAAqB,KAArB;AAJU,SAAAA;AAAA,GAAA;;;AC/CL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA,mBAAgB,KAAhB;AACA,EAAAA,wBAAA,kBAAe,KAAf;AAFU,SAAAA;AAAA,GAAA;;;ACCL,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AAFU,SAAAA;AAAA,GAAA;","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType"]}
1
+ {"version":3,"sources":["../src/api/endpoints/DefaultApiConfig.ts","../src/api/endpoints/ApiEndpoint.ts","../src/api/endpoints/auth/AuthEndpoint.ts","../src/api/endpoints/auth/TokenManager.ts","../src/api/endpoints/chatMessage/ChatMessageEndpoint.ts","../src/api/endpoints/client/ClientEndpoint.ts","../src/api/endpoints/code/CodeEndpoint.ts","../src/api/endpoints/emergency/EmergencyEndpoint.ts","../src/api/endpoints/orgSettings/OrgSettingsEndpoint.ts","../src/api/endpoints/staff/StaffEndpoint.ts","../src/api/endpoints/websocket/WebsocketManager.ts","../src/api/endpoints/websocket/WebsocketEndpoint.ts","../src/api/MedrunnerApiClient.ts","../src/api/endpoints/emergency/response/LocationDetail.ts","../src/models/CancellationReason.ts","../src/models/Class.ts","../src/models/Emergency.ts","../src/models/MissionStatus.ts","../src/models/Person.ts","../src/models/Level.ts","../src/models/ResponseRating.ts","../src/models/ThreatLevel.ts","../src/models/OrgSettings.ts","../src/models/Deployment.ts","../src/models/PromotionalCode.ts"],"sourcesContent":["import ApiConfig from \"../ApiConfig\";\n\nexport default class DefaultApiConfig {\n public readonly baseUrl: string;\n public readonly accessToken?: string;\n public readonly refreshToken?: string;\n public readonly cookieAuth: boolean;\n\n constructor(config: ApiConfig) {\n this.baseUrl = config.baseUrl ?? \"https://api.medrunner.space\";\n this.accessToken = config.accessToken;\n this.refreshToken = config.refreshToken;\n this.cookieAuth = config.cookieAuth ?? false;\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig } from \"axios\";\nimport { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../Func\";\nimport ApiResponse from \"../ApiResponse\";\nimport TokenManager from \"./auth/TokenManager\";\nimport DefaultApiConfig from \"./DefaultApiConfig\";\n\nexport default abstract class ApiEndpoint {\n public readonly config: DefaultApiConfig;\n\n protected constructor(\n config: DefaultApiConfig,\n public readonly tokenManager: TokenManager,\n protected readonly log?: Logger,\n private readonly headerProvider?: HeaderProvider,\n ) {\n this.config = config;\n }\n\n protected abstract endpoint(): string;\n\n protected endpointUrl(): string {\n return `${this.config.baseUrl}/${this.endpoint()}`;\n }\n\n private async headersForRequest(noAuthentication: boolean): Promise<AxiosRequestConfig> {\n const config: AxiosRequestConfig = {\n baseURL: this.config.baseUrl,\n headers: {},\n withCredentials: this.config.cookieAuth,\n };\n\n if (config.headers !== undefined) {\n if (!noAuthentication) {\n const accessToken = await this.tokenManager.getAccessToken(\"API makeRequest\");\n if (accessToken !== undefined) {\n // only include auth header if we have a token\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n if (this.headerProvider !== undefined) {\n for (const header of Object.entries(await this.headerProvider())) {\n config.headers[header[0]] = header[1];\n }\n }\n }\n\n return config;\n }\n\n protected async getRequest<T = unknown>(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithoutBody<T>(endpoint, \"GET\", axios.get, queryParams, noAuthentication);\n }\n\n protected async postRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"POST\", axios.post, data, noAuthentication);\n }\n\n protected async putRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PUT\", axios.put, data, noAuthentication);\n }\n\n protected async patchRequest<T = unknown>(\n endpoint: string,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n return await this.makeRequestWithBody<T>(endpoint, \"PATCH\", axios.patch, data, noAuthentication);\n }\n\n protected async deleteRequest(\n endpoint: string,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse> {\n return await this.makeRequestWithoutBody(endpoint, \"DELETE\", axios.delete, queryParams, noAuthentication);\n }\n\n private async makeRequestWithBody<T = unknown>(\n endpoint: string,\n requestType: \"POST\" | \"PUT\" | \"PATCH\",\n axiosRequest: AxiosRequestWithBody<T>,\n data?: unknown,\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, data, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, undefined, noAuthentication);\n }\n\n private async makeRequestWithoutBody<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"DELETE\",\n axiosRequest: AxiosRequestWithoutBody<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication?: boolean,\n ): Promise<ApiResponse<T>> {\n const wrappedRequest: AxiosWrapper<T> = async (requestUrl, config) => await axiosRequest(requestUrl, config);\n return await this.makeRequest<T>(endpoint, requestType, wrappedRequest, queryParams, noAuthentication);\n }\n\n private buildUrl(endpoint: string): string {\n const baseUrl = this.endpointUrl();\n\n if (baseUrl.endsWith(\"/\")) {\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint.substring(1)}`;\n }\n\n return `${baseUrl}${endpoint}`;\n }\n\n if (endpoint.startsWith(\"/\")) {\n return `${baseUrl}${endpoint}`;\n }\n\n return `${baseUrl}/${endpoint}`;\n }\n\n private async makeRequest<T = unknown>(\n endpoint: string,\n requestType: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n request: AxiosWrapper<T>,\n queryParams?: { [key: string]: unknown },\n noAuthentication = false,\n ): Promise<ApiResponse<T>> {\n const requestUrl = this.buildUrl(endpoint);\n\n this.log?.debug(`sending ${requestType} request to ${requestUrl}`);\n try {\n const config = await this.headersForRequest(noAuthentication);\n if (queryParams !== undefined) {\n config.params = queryParams;\n }\n\n const result = await request(requestUrl, config);\n\n return {\n success: true,\n data: result.data,\n };\n } catch (e) {\n this.log?.warn(`Error for ${requestType} request to ${requestUrl}: ${e}`);\n return {\n success: false,\n errorMessage: e instanceof AxiosError ? e.response?.data : undefined,\n statusCode: e instanceof AxiosError ? e.response?.status : undefined,\n };\n }\n }\n}\n\ntype AxiosWrapper<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n\ntype AxiosRequestWithBody<T = unknown> = (\n url: string,\n data: unknown,\n config: AxiosRequestConfig,\n) => Promise<ApiResponse<T>>;\ntype AxiosRequestWithoutBody<T = unknown> = (url: string, config: AxiosRequestConfig) => Promise<ApiResponse<T>>;\n","import { Logger } from \"ts-log\";\n\nimport { HeaderProvider } from \"../../../Func\";\nimport ApiToken from \"../../../models/ApiToken\";\nimport ApiResponse from \"../../ApiResponse\";\nimport ApiEndpoint from \"../ApiEndpoint\";\nimport TokenManager from \"../auth/TokenManager\";\nimport DefaultApiConfig from \"../DefaultApiConfig\";\nimport CreateApiTokenRequest from \"./request/CreateApiTokenRequest\";\nimport SignOutRequest from \"./request/SignOutRequest\";\n\n/**\n * Endpoints for interacting with auth.\n * */\nexport default class AuthEndpoint extends ApiEndpoint {\n constructor(config: DefaultApiConfig, tokenManager: TokenManager, log?: Logger, headerProvider?: HeaderProvider) {\n super(config, tokenManager, log, headerProvider);\n }\n\n protected override endpoint(): string {\n return \"auth\";\n }\n\n /**\n * Invalidate a refresh token.\n *\n * @param oldToken - Token to be invalidated\n *\n * */\n public async signOut(oldToken?: SignOutRequest): Promise<ApiResponse> {\n return await this.postRequest<string>(\"/signOut\", oldToken ?? null);\n }\n\n /**\n * Gets all api tokens for the user.\n *\n * */\n public async getApiTokens(): Promise<ApiResponse<ApiToken[]>> {\n return await this.getRequest<ApiToken[]>(`/apiTokens`);\n }\n\n /**\n * Creates an api token.\n *\n * @param newToken - Emergency details for the new emergency\n * @returns The newly-created api token\n *\n * */\n public async createApiToken(newToken: CreateApiTokenRequest): Promise<ApiResponse<string>> {\n return await this.postRequest<string>(\"/apiTokens\", {\n name: newToken.name,\n expirationDate: newToken.expirationDate?.toISOString(),\n 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"],"mappings":"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","names":["LocationType","CancellationReason","Class","MissionServices","Origin","SubmissionSource","MissionStatus","UserRoles","PersonType","AccountDeactivationReason","Level","ResponseRating","ThreatLevel","SpaceLocationType","ServiceStatus","LocationCharacteristic","ClientType","CodeType"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medrunner/api-client",
3
- "version": "0.7.0-beta.4",
3
+ "version": "0.7.0-beta.9",
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.11.0",
51
+ "axios": "^1.13.2",
52
52
  "ts-log": "^2.2.7"
53
53
  },
54
54
  "devDependencies": {
55
- "@eslint/eslintrc": "^3.3.1",
56
- "@eslint/js": "^9.33.0",
57
- "@types/node": "^24.2.1",
58
- "@typescript-eslint/eslint-plugin": "^8.39.1",
59
- "@typescript-eslint/parser": "^8.39.1",
60
- "eslint": "^9.33.0",
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.4.0",
63
- "prettier": "^3.6.2",
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.0",
67
- "typedoc": "^0.28.10",
68
- "typedoc-plugin-markdown": "^4.8.1",
69
- "typescript": "^5.9.2",
66
+ "tsup": "^8.5.1",
67
+ "typedoc": "^0.28.15",
68
+ "typedoc-plugin-markdown": "^4.9.0",
69
+ "typescript": "^5.9.3",
70
70
  "vitepress": "^1.6.4"
71
71
  }
72
72
  }