@keiser/metrics-sdk-admin-typescript 5.0.12
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/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
- package/.github/ISSUE_TEMPLATE/enhancement.md +46 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +46 -0
- package/.github/workflows/main.yml +63 -0
- package/README.md +202 -0
- package/dist/apis/MetricsAdminApi.d.ts +328 -0
- package/dist/apis/index.d.ts +1 -0
- package/dist/connection.d.ts +110 -0
- package/dist/error.d.ts +134 -0
- package/dist/event.d.ts +51 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8429 -0
- package/dist/index.mjs +7939 -0
- package/dist/jwt.d.ts +1 -0
- package/dist/models/A500DataSetData.d.ts +93 -0
- package/dist/models/A500MachineStateData.d.ts +88 -0
- package/dist/models/A500RepDataPointData.d.ts +169 -0
- package/dist/models/A500TestResultData.d.ts +103 -0
- package/dist/models/A500TimeSeriesPointData.d.ts +145 -0
- package/dist/models/AcceptedTermsVersionData.d.ts +43 -0
- package/dist/models/BodyCompositionMeasurementData.d.ts +211 -0
- package/dist/models/CacheKeysResponse.d.ts +43 -0
- package/dist/models/CacheObject.d.ts +55 -0
- package/dist/models/CacheObjectResponse.d.ts +44 -0
- package/dist/models/CardioExerciseData.d.ts +65 -0
- package/dist/models/CardioExerciseVariantData.d.ts +77 -0
- package/dist/models/CardioMachineData.d.ts +83 -0
- package/dist/models/EmailAddressData.d.ts +49 -0
- package/dist/models/ExerciseAliasData.d.ts +73 -0
- package/dist/models/ExerciseOrdinalSetAssignmentData.d.ts +65 -0
- package/dist/models/ExerciseOrdinalSetData.d.ts +56 -0
- package/dist/models/FacilityConfigurationData.d.ts +101 -0
- package/dist/models/FacilityData.d.ts +65 -0
- package/dist/models/FacilityLicenseData.d.ts +83 -0
- package/dist/models/FacilityLicenseListResponse.d.ts +51 -0
- package/dist/models/FacilityLicenseListResponseMeta.d.ts +89 -0
- package/dist/models/FacilityLicenseResponse.d.ts +44 -0
- package/dist/models/FacilityLicenseSorting.d.ts +25 -0
- package/dist/models/FacilityProfileData.d.ts +73 -0
- package/dist/models/FacilityRelationshipData.d.ts +99 -0
- package/dist/models/FacilitySessionUserData.d.ts +112 -0
- package/dist/models/FacilityStrengthMachineConfigurationData.d.ts +94 -0
- package/dist/models/FacilityStrengthMachineData.d.ts +99 -0
- package/dist/models/FingerprintData.d.ts +69 -0
- package/dist/models/GlobalAccessControlCreationResponse.d.ts +51 -0
- package/dist/models/GlobalAccessControlData.d.ts +148 -0
- package/dist/models/GlobalAccessControlListResponse.d.ts +51 -0
- package/dist/models/GlobalAccessControlListResponseMeta.d.ts +62 -0
- package/dist/models/GlobalAccessControlResponse.d.ts +44 -0
- package/dist/models/GlobalAccessControlSecretData.d.ts +37 -0
- package/dist/models/GlobalAccessControlSecretResponse.d.ts +44 -0
- package/dist/models/GlobalAccessControlSorting.d.ts +23 -0
- package/dist/models/HeartRateDataPointData.d.ts +49 -0
- package/dist/models/HeartRateDataSetData.d.ts +81 -0
- package/dist/models/HeartRateDataSetSessionData.d.ts +56 -0
- package/dist/models/HeightMeasurementData.d.ts +55 -0
- package/dist/models/High.d.ts +31 -0
- package/dist/models/Low.d.ts +31 -0
- package/dist/models/MSeriesDataPointData.d.ts +103 -0
- package/dist/models/MSeriesDataSetData.d.ts +222 -0
- package/dist/models/MSeriesDataSetSegmentData.d.ts +129 -0
- package/dist/models/MSeriesFtpMeasurementData.d.ts +74 -0
- package/dist/models/MuscleArea.d.ts +24 -0
- package/dist/models/MuscleData.d.ts +67 -0
- package/dist/models/MuscleGroup.d.ts +35 -0
- package/dist/models/MuscleIdentifier.d.ts +86 -0
- package/dist/models/OAuthServiceData.d.ts +73 -0
- package/dist/models/PrimaryEmailAddressData.d.ts +37 -0
- package/dist/models/ProfileData.d.ts +67 -0
- package/dist/models/Queue.d.ts +23 -0
- package/dist/models/ResqueDetailsData.d.ts +45 -0
- package/dist/models/ResqueDetailsResponse.d.ts +44 -0
- package/dist/models/SessionData.d.ts +135 -0
- package/dist/models/SessionPlanActivitySetData.d.ts +31 -0
- package/dist/models/SessionPlanCardioSetData.d.ts +57 -0
- package/dist/models/SessionPlanData.d.ts +118 -0
- package/dist/models/SessionPlanSequenceAssignmentData.d.ts +44 -0
- package/dist/models/SessionPlanSequenceData.d.ts +63 -0
- package/dist/models/SessionPlanSequenceInstanceData.d.ts +82 -0
- package/dist/models/SessionPlanSetData.d.ts +81 -0
- package/dist/models/SessionPlanSetInstanceData.d.ts +87 -0
- package/dist/models/SessionPlanStrengthSetData.d.ts +67 -0
- package/dist/models/SessionPlanStretchSetData.d.ts +31 -0
- package/dist/models/StatData.d.ts +97 -0
- package/dist/models/StatListResponse.d.ts +51 -0
- package/dist/models/StatListResponseMeta.d.ts +68 -0
- package/dist/models/StatSorting.d.ts +23 -0
- package/dist/models/StrengthExerciseData.d.ts +125 -0
- package/dist/models/StrengthExerciseVariantData.d.ts +115 -0
- package/dist/models/StrengthMachineData.d.ts +88 -0
- package/dist/models/StrengthMachineDataSetData.d.ts +199 -0
- package/dist/models/StrengthMachineDataSetTestData.d.ts +54 -0
- package/dist/models/StrengthMachineDataSetTestSubsetData.d.ts +49 -0
- package/dist/models/StrengthMachineModelData.d.ts +31 -0
- package/dist/models/StretchExerciseData.d.ts +58 -0
- package/dist/models/StretchExerciseVariantData.d.ts +70 -0
- package/dist/models/TaskFailedResponse.d.ts +51 -0
- package/dist/models/TaskFailure.d.ts +69 -0
- package/dist/models/TaskPayload.d.ts +44 -0
- package/dist/models/TaskQueueResponse.d.ts +51 -0
- package/dist/models/TaskQueueResponseMeta.d.ts +68 -0
- package/dist/models/TaskQueues.d.ts +39 -0
- package/dist/models/TaskStats.d.ts +37 -0
- package/dist/models/UserData.d.ts +112 -0
- package/dist/models/UserListResponse.d.ts +51 -0
- package/dist/models/UserListResponseMeta.d.ts +68 -0
- package/dist/models/UserResponse.d.ts +44 -0
- package/dist/models/UserSorting.d.ts +24 -0
- package/dist/models/WeightMeasurementData.d.ts +68 -0
- package/dist/models/WorkersResponse.d.ts +43 -0
- package/dist/models/index.d.ts +96 -0
- package/dist/runtime.d.ts +134 -0
- package/docs/A500DataSetData.md +41 -0
- package/docs/A500MachineStateData.md +46 -0
- package/docs/A500RepDataPointData.md +56 -0
- package/docs/A500TestResultData.md +22 -0
- package/docs/A500TimeSeriesPointData.md +29 -0
- package/docs/AcceptedTermsVersionData.md +12 -0
- package/docs/BodyCompositionMeasurementData.md +40 -0
- package/docs/CacheKeysResponse.md +12 -0
- package/docs/CacheObject.md +14 -0
- package/docs/CacheObjectResponse.md +12 -0
- package/docs/CardioExerciseData.md +15 -0
- package/docs/CardioExerciseVariantData.md +25 -0
- package/docs/CardioMachineData.md +36 -0
- package/docs/EmailAddressData.md +13 -0
- package/docs/ExerciseAliasData.md +28 -0
- package/docs/ExerciseOrdinalSetAssignmentData.md +15 -0
- package/docs/ExerciseOrdinalSetData.md +14 -0
- package/docs/FacilityConfigurationData.md +41 -0
- package/docs/FacilityData.md +15 -0
- package/docs/FacilityLicenseData.md +30 -0
- package/docs/FacilityLicenseListResponse.md +13 -0
- package/docs/FacilityLicenseListResponseMeta.md +31 -0
- package/docs/FacilityLicenseResponse.md +12 -0
- package/docs/FacilityLicenseSorting.md +15 -0
- package/docs/FacilityProfileData.md +17 -0
- package/docs/FacilityRelationshipData.md +36 -0
- package/docs/FacilitySessionUserData.md +22 -0
- package/docs/FacilityStrengthMachineConfigurationData.md +47 -0
- package/docs/FacilityStrengthMachineData.md +21 -0
- package/docs/FingerprintData.md +24 -0
- package/docs/GlobalAccessControlCreationResponse.md +13 -0
- package/docs/GlobalAccessControlData.md +103 -0
- package/docs/GlobalAccessControlListResponse.md +13 -0
- package/docs/GlobalAccessControlListResponseMeta.md +15 -0
- package/docs/GlobalAccessControlResponse.md +12 -0
- package/docs/GlobalAccessControlSecretData.md +11 -0
- package/docs/GlobalAccessControlSecretResponse.md +12 -0
- package/docs/GlobalAccessControlSorting.md +11 -0
- package/docs/HeartRateDataPointData.md +13 -0
- package/docs/HeartRateDataSetData.md +18 -0
- package/docs/HeartRateDataSetSessionData.md +14 -0
- package/docs/HeightMeasurementData.md +14 -0
- package/docs/High.md +10 -0
- package/docs/Low.md +10 -0
- package/docs/MSeriesDataPointData.md +22 -0
- package/docs/MSeriesDataSetData.md +41 -0
- package/docs/MSeriesDataSetSegmentData.md +26 -0
- package/docs/MSeriesFtpMeasurementData.md +17 -0
- package/docs/MetricsAdminApi.md +1576 -0
- package/docs/MuscleArea.md +13 -0
- package/docs/MuscleData.md +27 -0
- package/docs/MuscleGroup.md +35 -0
- package/docs/MuscleIdentifier.md +137 -0
- package/docs/OAuthServiceData.md +17 -0
- package/docs/PrimaryEmailAddressData.md +11 -0
- package/docs/ProfileData.md +16 -0
- package/docs/Queue.md +11 -0
- package/docs/ResqueDetailsData.md +12 -0
- package/docs/ResqueDetailsResponse.md +12 -0
- package/docs/SessionData.md +26 -0
- package/docs/SessionPlanActivitySetData.md +10 -0
- package/docs/SessionPlanCardioSetData.md +14 -0
- package/docs/SessionPlanData.md +24 -0
- package/docs/SessionPlanSequenceAssignmentData.md +12 -0
- package/docs/SessionPlanSequenceData.md +15 -0
- package/docs/SessionPlanSequenceInstanceData.md +18 -0
- package/docs/SessionPlanSetData.md +31 -0
- package/docs/SessionPlanSetInstanceData.md +32 -0
- package/docs/SessionPlanStrengthSetData.md +29 -0
- package/docs/SessionPlanStretchSetData.md +10 -0
- package/docs/StatData.md +21 -0
- package/docs/StatListResponse.md +13 -0
- package/docs/StatListResponseMeta.md +16 -0
- package/docs/StatSorting.md +11 -0
- package/docs/StrengthExerciseData.md +71 -0
- package/docs/StrengthExerciseVariantData.md +69 -0
- package/docs/StrengthMachineData.md +38 -0
- package/docs/StrengthMachineDataSetData.md +60 -0
- package/docs/StrengthMachineDataSetTestData.md +27 -0
- package/docs/StrengthMachineDataSetTestSubsetData.md +13 -0
- package/docs/StrengthMachineModelData.md +10 -0
- package/docs/StretchExerciseData.md +14 -0
- package/docs/StretchExerciseVariantData.md +24 -0
- package/docs/TaskFailedResponse.md +13 -0
- package/docs/TaskFailure.md +16 -0
- package/docs/TaskPayload.md +12 -0
- package/docs/TaskQueueResponse.md +13 -0
- package/docs/TaskQueueResponseMeta.md +24 -0
- package/docs/TaskQueues.md +11 -0
- package/docs/TaskStats.md +11 -0
- package/docs/UserData.md +22 -0
- package/docs/UserListResponse.md +13 -0
- package/docs/UserListResponseMeta.md +16 -0
- package/docs/UserResponse.md +12 -0
- package/docs/UserSorting.md +13 -0
- package/docs/WeightMeasurementData.md +16 -0
- package/docs/WorkersResponse.md +12 -0
- package/package.json +37 -0
- package/rollup.config.mjs +32 -0
- package/src/apis/MetricsAdminApi.ts +1735 -0
- package/src/apis/index.ts +3 -0
- package/src/connection.ts +256 -0
- package/src/error.ts +248 -0
- package/src/event.ts +267 -0
- package/src/index.ts +9 -0
- package/src/jwt.ts +17 -0
- package/src/models/A500DataSetData.ts +164 -0
- package/src/models/A500MachineStateData.ts +150 -0
- package/src/models/A500RepDataPointData.ts +264 -0
- package/src/models/A500TestResultData.ts +174 -0
- package/src/models/A500TimeSeriesPointData.ts +233 -0
- package/src/models/AcceptedTermsVersionData.ts +83 -0
- package/src/models/BodyCompositionMeasurementData.ts +336 -0
- package/src/models/CacheKeysResponse.ts +82 -0
- package/src/models/CacheObject.ts +102 -0
- package/src/models/CacheObjectResponse.ts +89 -0
- package/src/models/CardioExerciseData.ts +131 -0
- package/src/models/CardioExerciseVariantData.ts +144 -0
- package/src/models/CardioMachineData.ts +143 -0
- package/src/models/EmailAddressData.ts +93 -0
- package/src/models/ExerciseAliasData.ts +138 -0
- package/src/models/ExerciseOrdinalSetAssignmentData.ts +132 -0
- package/src/models/ExerciseOrdinalSetData.ts +107 -0
- package/src/models/FacilityConfigurationData.ts +167 -0
- package/src/models/FacilityData.ts +132 -0
- package/src/models/FacilityLicenseData.ts +144 -0
- package/src/models/FacilityLicenseListResponse.ts +104 -0
- package/src/models/FacilityLicenseListResponseMeta.ts +152 -0
- package/src/models/FacilityLicenseResponse.ts +89 -0
- package/src/models/FacilityLicenseSorting.ts +40 -0
- package/src/models/FacilityProfileData.ts +121 -0
- package/src/models/FacilityRelationshipData.ts +175 -0
- package/src/models/FacilitySessionUserData.ts +216 -0
- package/src/models/FacilityStrengthMachineConfigurationData.ts +159 -0
- package/src/models/FacilityStrengthMachineData.ts +170 -0
- package/src/models/FingerprintData.ts +127 -0
- package/src/models/GlobalAccessControlCreationResponse.ts +104 -0
- package/src/models/GlobalAccessControlData.ts +217 -0
- package/src/models/GlobalAccessControlListResponse.ts +104 -0
- package/src/models/GlobalAccessControlListResponseMeta.ts +113 -0
- package/src/models/GlobalAccessControlResponse.ts +89 -0
- package/src/models/GlobalAccessControlSecretData.ts +75 -0
- package/src/models/GlobalAccessControlSecretResponse.ts +89 -0
- package/src/models/GlobalAccessControlSorting.ts +38 -0
- package/src/models/HeartRateDataPointData.ts +91 -0
- package/src/models/HeartRateDataSetData.ts +148 -0
- package/src/models/HeartRateDataSetSessionData.ts +108 -0
- package/src/models/HeightMeasurementData.ts +102 -0
- package/src/models/High.ts +66 -0
- package/src/models/Low.ts +66 -0
- package/src/models/MSeriesDataPointData.ts +167 -0
- package/src/models/MSeriesDataSetData.ts +363 -0
- package/src/models/MSeriesDataSetSegmentData.ts +219 -0
- package/src/models/MSeriesFtpMeasurementData.ts +133 -0
- package/src/models/MuscleArea.ts +39 -0
- package/src/models/MuscleData.ts +131 -0
- package/src/models/MuscleGroup.ts +50 -0
- package/src/models/MuscleIdentifier.ts +101 -0
- package/src/models/OAuthServiceData.ts +126 -0
- package/src/models/PrimaryEmailAddressData.ts +75 -0
- package/src/models/ProfileData.ts +115 -0
- package/src/models/Queue.ts +38 -0
- package/src/models/ResqueDetailsData.ts +97 -0
- package/src/models/ResqueDetailsResponse.ts +89 -0
- package/src/models/SessionData.ts +249 -0
- package/src/models/SessionPlanActivitySetData.ts +66 -0
- package/src/models/SessionPlanCardioSetData.ts +113 -0
- package/src/models/SessionPlanData.ts +205 -0
- package/src/models/SessionPlanSequenceAssignmentData.ts +90 -0
- package/src/models/SessionPlanSequenceData.ts +122 -0
- package/src/models/SessionPlanSequenceInstanceData.ts +154 -0
- package/src/models/SessionPlanSetData.ts +153 -0
- package/src/models/SessionPlanSetInstanceData.ts +162 -0
- package/src/models/SessionPlanStrengthSetData.ts +126 -0
- package/src/models/SessionPlanStretchSetData.ts +66 -0
- package/src/models/StatData.ts +165 -0
- package/src/models/StatListResponse.ts +104 -0
- package/src/models/StatListResponseMeta.ts +121 -0
- package/src/models/StatSorting.ts +38 -0
- package/src/models/StrengthExerciseData.ts +208 -0
- package/src/models/StrengthExerciseVariantData.ts +189 -0
- package/src/models/StrengthMachineData.ts +154 -0
- package/src/models/StrengthMachineDataSetData.ts +331 -0
- package/src/models/StrengthMachineDataSetTestData.ts +104 -0
- package/src/models/StrengthMachineDataSetTestSubsetData.ts +93 -0
- package/src/models/StrengthMachineModelData.ts +66 -0
- package/src/models/StretchExerciseData.ts +117 -0
- package/src/models/StretchExerciseVariantData.ts +130 -0
- package/src/models/TaskFailedResponse.ts +104 -0
- package/src/models/TaskFailure.ts +133 -0
- package/src/models/TaskPayload.ts +91 -0
- package/src/models/TaskQueueResponse.ts +104 -0
- package/src/models/TaskQueueResponseMeta.ts +117 -0
- package/src/models/TaskQueues.ts +88 -0
- package/src/models/TaskStats.ts +73 -0
- package/src/models/UserData.ts +217 -0
- package/src/models/UserListResponse.ts +104 -0
- package/src/models/UserListResponseMeta.ts +121 -0
- package/src/models/UserResponse.ts +89 -0
- package/src/models/UserSorting.ts +39 -0
- package/src/models/WeightMeasurementData.ts +125 -0
- package/src/models/WorkersResponse.ts +82 -0
- package/src/models/index.ts +98 -0
- package/src/runtime.ts +473 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { DecodeJWT } from './jwt'
|
|
2
|
+
import { SessionError } from './error'
|
|
3
|
+
import { EventDispatcher } from './event'
|
|
4
|
+
import { DEFAULT_REQUEST_TIMEOUT, ConnectionEvent, ConnectionOptions, MetricsConnection, PushDataEvent, HTTPMethod, HTTPHeaders } from './runtime'
|
|
5
|
+
export const JWT_TTL_LIMIT = 5000
|
|
6
|
+
const MAX_TIMEOUT = 2147483647;
|
|
7
|
+
|
|
8
|
+
/** @ignore */
|
|
9
|
+
const MODEL_UPDATE_ROOM_REGEX = /^sub:/
|
|
10
|
+
export interface AuthenticatedResponse {
|
|
11
|
+
accessToken: string
|
|
12
|
+
refreshToken?: string
|
|
13
|
+
}
|
|
14
|
+
export interface SubscriptionResponse extends AuthenticatedResponse {
|
|
15
|
+
subscriptionKey: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface AuthPrefillParams {
|
|
19
|
+
email: string
|
|
20
|
+
returnUrl: string
|
|
21
|
+
requiresElevated?: boolean
|
|
22
|
+
name?: string
|
|
23
|
+
birthday?: string
|
|
24
|
+
gender?: string
|
|
25
|
+
language?: string
|
|
26
|
+
units?: string
|
|
27
|
+
metricWeight?: number
|
|
28
|
+
bodyFatPercentage?: number
|
|
29
|
+
metricHeight?: number
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface AccessTokenChangeEvent {
|
|
33
|
+
accessToken: string
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface RefreshTokenChangeEvent {
|
|
37
|
+
refreshToken: string
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface KioskTokenChangeEvent {
|
|
41
|
+
kioskToken: string
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface StrengthMachineTokenChangeEvent {
|
|
45
|
+
accessToken: string
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface JWTFacility {
|
|
49
|
+
id: number
|
|
50
|
+
licensedUntil: string
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface JWTToken {
|
|
54
|
+
iss: string
|
|
55
|
+
jti: string
|
|
56
|
+
exp: number
|
|
57
|
+
type: 'access' | 'refresh' | 'kiosk' | 'machine'
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
export interface SessionToken extends JWTToken {
|
|
62
|
+
user: { id: number }
|
|
63
|
+
facility?: {id:number, licencedUntil: string} | null
|
|
64
|
+
facilityRole?: string | null
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface AccessToken extends SessionToken {
|
|
68
|
+
type: 'access'
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface RefreshToken extends SessionToken {
|
|
72
|
+
type: 'refresh'
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface ModelChangeEvent {
|
|
76
|
+
id: number
|
|
77
|
+
name: string
|
|
78
|
+
mutation: 'create' | 'update' | 'delete'
|
|
79
|
+
occurredAt: number
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
interface ModelChangeEventHandler {
|
|
83
|
+
onChangeCallbacks: Set<(modelChangeEvent: ModelChangeEvent) => void>
|
|
84
|
+
onReconnectCallback: () => Promise<SubscriptionResponse>
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface ModelSubscribeParameters {
|
|
88
|
+
model: string
|
|
89
|
+
id: number
|
|
90
|
+
userId?: number
|
|
91
|
+
facilityRelationshipId?: number
|
|
92
|
+
actionOverride?: string
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface ListSubscribeParameters {
|
|
96
|
+
parentModel: string
|
|
97
|
+
parentId: number
|
|
98
|
+
model: string
|
|
99
|
+
actionOverride?: string
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
export class AuthenticatedConnection {
|
|
104
|
+
protected readonly _connection: MetricsConnection
|
|
105
|
+
private _keepAlive: boolean = true
|
|
106
|
+
private _accessToken: string = ''
|
|
107
|
+
private _refreshToken: string | null = null
|
|
108
|
+
private _accessTokenTimeout: ReturnType<typeof setTimeout> | null = null
|
|
109
|
+
private readonly _modelChangeEventHandlerMap = new Map<string, ModelChangeEventHandler>()
|
|
110
|
+
private readonly _onAccessTokenChangeEvent = new EventDispatcher<AccessTokenChangeEvent>()
|
|
111
|
+
private readonly _onRefreshTokenChangeEvent = new EventDispatcher<RefreshTokenChangeEvent>()
|
|
112
|
+
|
|
113
|
+
constructor (params: {options?: ConnectionOptions, keepAlive?: boolean, authenticatedResponse?: AuthenticatedResponse}) {
|
|
114
|
+
const {options, keepAlive, authenticatedResponse} = params
|
|
115
|
+
this._connection = new MetricsConnection(options)
|
|
116
|
+
this._keepAlive = keepAlive ?? true
|
|
117
|
+
this._connection.onDisposeEvent.one(() => this.close())
|
|
118
|
+
this._connection.onConnectionChangeEvent.subscribe(connectionEvent => this.handleConnectionEvent(connectionEvent))
|
|
119
|
+
this._connection.onPushDataEvent.subscribe(data => this.dispatchPushData(data))
|
|
120
|
+
if (authenticatedResponse) {
|
|
121
|
+
this.updateTokens(authenticatedResponse)
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async initializeAuthenticatedSession( refreshToken: string) : Promise<AuthenticatedResponse> {
|
|
126
|
+
this.updateTokens({accessToken: refreshToken})
|
|
127
|
+
const authenticatedResponse: AuthenticatedResponse = await this.keepAccessTokenAlive();
|
|
128
|
+
return authenticatedResponse;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private updateTokens (response: AuthenticatedResponse) {
|
|
132
|
+
this._accessToken = response.accessToken
|
|
133
|
+
this._onAccessTokenChangeEvent.dispatchAsync({ accessToken: this._accessToken })
|
|
134
|
+
|
|
135
|
+
if (this._accessTokenTimeout !== null) {
|
|
136
|
+
clearTimeout(this._accessTokenTimeout)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (this._keepAlive) {
|
|
140
|
+
const tokenTTL = this.decodedAccessToken.exp * 1000 - Date.now() - JWT_TTL_LIMIT
|
|
141
|
+
if(tokenTTL < MAX_TIMEOUT ) {
|
|
142
|
+
this._accessTokenTimeout = setTimeout(() => { void this.keepAccessTokenAlive() }, tokenTTL)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (typeof response.refreshToken !== 'undefined') {
|
|
147
|
+
this._refreshToken = response.refreshToken
|
|
148
|
+
this._onRefreshTokenChangeEvent.dispatchAsync({ refreshToken: this._refreshToken })
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private async keepAccessTokenAlive(): Promise<AuthenticatedResponse> {
|
|
153
|
+
if (this._keepAlive) {
|
|
154
|
+
try {
|
|
155
|
+
const response: AuthenticatedResponse = await this.authenticatedAction('auth:keepAlive', `/auth/keep-alive`, 'POST', {}, {}, {})
|
|
156
|
+
return response;
|
|
157
|
+
} catch (error) {
|
|
158
|
+
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private handleConnectionEvent (connectionEvent: ConnectionEvent) {
|
|
164
|
+
if (connectionEvent.socketConnection) {
|
|
165
|
+
this._modelChangeEventHandlerMap.forEach(e => void e.onReconnectCallback())
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
private dispatchPushData (pushData: PushDataEvent) {
|
|
170
|
+
if (MODEL_UPDATE_ROOM_REGEX.test(pushData.room)) {
|
|
171
|
+
const modelChangeEventHandler = this._modelChangeEventHandlerMap.get(pushData.room)
|
|
172
|
+
if (typeof modelChangeEventHandler !== 'undefined') {
|
|
173
|
+
modelChangeEventHandler.onChangeCallbacks.forEach(e => e(pushData.message))
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
get connection () {
|
|
179
|
+
return this._connection
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
get keepAlive () {
|
|
183
|
+
return this._keepAlive
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
set keepAlive (value: boolean) {
|
|
187
|
+
this._keepAlive = value
|
|
188
|
+
if (!this._keepAlive && this._accessTokenTimeout !== null) {
|
|
189
|
+
clearTimeout(this._accessTokenTimeout)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
get decodedAccessToken (){
|
|
194
|
+
return DecodeJWT(this.accessToken) as AccessToken
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
get accessToken () {
|
|
198
|
+
return this._accessToken
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
get refreshToken () {
|
|
202
|
+
return this._refreshToken
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
get onRefreshTokenChangeEvent () {
|
|
206
|
+
return this._onRefreshTokenChangeEvent.asEvent()
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
get onAccessTokenChangeEvent () {
|
|
210
|
+
return this._onAccessTokenChangeEvent.asEvent()
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
close () {
|
|
214
|
+
if (this._accessTokenTimeout !== null) {
|
|
215
|
+
clearTimeout(this._accessTokenTimeout)
|
|
216
|
+
}
|
|
217
|
+
this.keepAlive = false
|
|
218
|
+
this._accessToken = ''
|
|
219
|
+
this._refreshToken = null
|
|
220
|
+
this.connection.dispose()
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
async authenticatedAction (action: string, route: string, method: HTTPMethod, params: Object = { }, pathParams: Object = { }, headers: HTTPHeaders) {
|
|
224
|
+
let response
|
|
225
|
+
if (this._keepAlive && this._accessTokenTimeout !== null && this.decodedAccessToken.exp * 1000 - Date.now() <= JWT_TTL_LIMIT + DEFAULT_REQUEST_TIMEOUT) {
|
|
226
|
+
clearTimeout(this._accessTokenTimeout)
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
const authParams = { authorization: this._accessToken, ...params }
|
|
230
|
+
response = await this._connection.action(action, route, method, authParams, pathParams, headers)
|
|
231
|
+
} catch (error) {
|
|
232
|
+
if (error instanceof SessionError && this._refreshToken !== null && (DecodeJWT(this._refreshToken) as RefreshToken).exp * 1000 - Date.now() > 0) {
|
|
233
|
+
const authParams = { authorization: this._refreshToken, ...params }
|
|
234
|
+
response = await this._connection.action(action, route, method, authParams, pathParams, headers)
|
|
235
|
+
} else {
|
|
236
|
+
throw error
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
this.updateTokens(response)
|
|
240
|
+
return response
|
|
241
|
+
}
|
|
242
|
+
async action (action: string, route: string, method: HTTPMethod, params: Object = { }, pathParams: Object = { }, headers: HTTPHeaders) {
|
|
243
|
+
let response
|
|
244
|
+
|
|
245
|
+
try {
|
|
246
|
+
response = await this._connection.action(action, route, method, params, pathParams, headers)
|
|
247
|
+
} catch (error) {
|
|
248
|
+
throw error
|
|
249
|
+
}
|
|
250
|
+
if (response.accessToken) {
|
|
251
|
+
this.updateTokens(response)
|
|
252
|
+
}
|
|
253
|
+
return response
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
}
|
package/src/error.ts
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
export interface ActionErrorProperties {
|
|
2
|
+
code?: number
|
|
3
|
+
name: string
|
|
4
|
+
message: string
|
|
5
|
+
explanation?: string
|
|
6
|
+
params?: string[]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export class BaseMetricsError extends Error {
|
|
10
|
+
static readonly code: number = 600
|
|
11
|
+
readonly message: string
|
|
12
|
+
readonly explanation: string
|
|
13
|
+
readonly params: string[]
|
|
14
|
+
|
|
15
|
+
constructor (errorProperties: ActionErrorProperties) {
|
|
16
|
+
super(errorProperties.name)
|
|
17
|
+
this.message = errorProperties.message ?? ''
|
|
18
|
+
this.explanation = errorProperties.explanation ?? ''
|
|
19
|
+
this.params = errorProperties.params ?? []
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
toString () {
|
|
23
|
+
return this.name + ': ' + this.message + (this.params?.length > 0 ? ' [' + this.params.join(', ') + ']' : '')
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
get code () {
|
|
27
|
+
return (this.constructor as typeof BaseMetricsError).code
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** @hidden */
|
|
32
|
+
export function GetErrorInstance (errorProperties: ActionErrorProperties) {
|
|
33
|
+
const ErrorType = [
|
|
34
|
+
MissingParamsError,
|
|
35
|
+
UnknownActionError,
|
|
36
|
+
InvalidCredentialsError,
|
|
37
|
+
ValidationError,
|
|
38
|
+
UnknownEntityError,
|
|
39
|
+
DuplicateEntityError,
|
|
40
|
+
CSRFError,
|
|
41
|
+
UnsupportedTypeError,
|
|
42
|
+
ServerShutdownError,
|
|
43
|
+
PendingActionOverflowError,
|
|
44
|
+
DataSizeLimitError,
|
|
45
|
+
OTPTokenExpiredError,
|
|
46
|
+
UnauthorizedTokenError,
|
|
47
|
+
InvalidAuthorizationCodeError,
|
|
48
|
+
BlacklistTokenError,
|
|
49
|
+
TokenInvalidError,
|
|
50
|
+
ParseError,
|
|
51
|
+
OAuthInvalidLoginError,
|
|
52
|
+
InvalidExchangeCodeError,
|
|
53
|
+
UnauthorizedResourceError,
|
|
54
|
+
OAuthCollisionError,
|
|
55
|
+
OAuthRequestError,
|
|
56
|
+
OAuthRefreshTokenError,
|
|
57
|
+
DuplicateActionError,
|
|
58
|
+
ActionPreventedError,
|
|
59
|
+
DemoActionPreventedError,
|
|
60
|
+
SessionDataMissingError,
|
|
61
|
+
FacilityLicenseExpiredError,
|
|
62
|
+
FacilityAccessControlError,
|
|
63
|
+
UnhealthyNodeError,
|
|
64
|
+
InvalidReturnUrlError,
|
|
65
|
+
SubscribePreventedError,
|
|
66
|
+
DatabaseError
|
|
67
|
+
].find(c => c.code === errorProperties.code)
|
|
68
|
+
|
|
69
|
+
if (typeof ErrorType !== 'undefined') {
|
|
70
|
+
return new ErrorType(errorProperties)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return new ConnectionError(errorProperties)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Category Errors
|
|
77
|
+
|
|
78
|
+
export class RequestError extends BaseMetricsError {
|
|
79
|
+
// For errors where the issue is in the action or parameters
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export class SessionError extends BaseMetricsError {
|
|
83
|
+
// For errors where the issue is in the token lifecycle
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export class ServerError extends BaseMetricsError {
|
|
87
|
+
// For errors that are a result of the server's health
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export class ConnectionError extends BaseMetricsError {
|
|
91
|
+
// For errors that are a result of a faulty connection
|
|
92
|
+
static readonly code = 0
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Remote Errors
|
|
96
|
+
|
|
97
|
+
export class MissingParamsError extends RequestError {
|
|
98
|
+
static readonly code = 601
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export class UnknownActionError extends RequestError {
|
|
102
|
+
static readonly code = 602
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export class InvalidCredentialsError extends RequestError {
|
|
106
|
+
static readonly code = 603
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export class ValidationError extends RequestError {
|
|
110
|
+
static readonly code = 604
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export class UnknownEntityError extends RequestError {
|
|
114
|
+
static readonly code = 605
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export class DuplicateEntityError extends RequestError {
|
|
118
|
+
static readonly code = 606
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export class CSRFError extends SessionError {
|
|
122
|
+
static readonly code = 607
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export class UnsupportedTypeError extends RequestError {
|
|
126
|
+
static readonly code = 608
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export class ServerShutdownError extends ServerError {
|
|
130
|
+
static readonly code = 609
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export class PendingActionOverflowError extends ServerError {
|
|
134
|
+
static readonly code = 610
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export class DataSizeLimitError extends RequestError {
|
|
138
|
+
static readonly code = 611
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export class OTPTokenExpiredError extends RequestError {
|
|
142
|
+
static readonly code = 612
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export class UnauthorizedTokenError extends SessionError {
|
|
146
|
+
static readonly code = 613
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export class InvalidAuthorizationCodeError extends RequestError {
|
|
150
|
+
static readonly code = 614
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export class BlacklistTokenError extends SessionError {
|
|
154
|
+
static readonly code = 615
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export class TokenInvalidError extends SessionError {
|
|
158
|
+
static readonly code = 616
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export class ParseError extends RequestError {
|
|
162
|
+
static readonly code = 617
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export class OAuthInvalidLoginError extends RequestError {
|
|
166
|
+
static readonly code = 618
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export class InvalidExchangeCodeError extends RequestError {
|
|
170
|
+
static readonly code = 619
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export class UnauthorizedResourceError extends RequestError {
|
|
174
|
+
static readonly code = 620
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export class OAuthCollisionError extends RequestError {
|
|
178
|
+
static readonly code = 621
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export class OAuthRequestError extends RequestError {
|
|
182
|
+
static readonly code = 622
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export class OAuthRefreshTokenError extends SessionError {
|
|
186
|
+
static readonly code = 623
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export class DuplicateActionError extends RequestError {
|
|
190
|
+
static readonly code = 624
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export class ActionPreventedError extends RequestError {
|
|
194
|
+
static readonly code = 625
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export class DemoActionPreventedError extends RequestError {
|
|
198
|
+
static readonly code = 626
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export class SessionDataMissingError extends SessionError {
|
|
202
|
+
static readonly code = 627
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export class FacilityLicenseExpiredError extends SessionError {
|
|
206
|
+
static readonly code = 628
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export class FacilityAccessControlError extends RequestError {
|
|
210
|
+
static readonly code = 629
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export class UnhealthyNodeError extends ServerError {
|
|
214
|
+
static readonly code = 630
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export class InvalidReturnUrlError extends RequestError {
|
|
218
|
+
static readonly code = 631
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export class SubscribePreventedError extends RequestError {
|
|
222
|
+
static readonly code = 632
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export class DatabaseError extends RequestError {
|
|
226
|
+
static readonly code = 633
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Local Errors
|
|
230
|
+
|
|
231
|
+
export class ClientSideActionPrevented extends RequestError {
|
|
232
|
+
constructor ({ explanation }: { explanation?: string }) {
|
|
233
|
+
super({
|
|
234
|
+
name: 'InvalidGACSession',
|
|
235
|
+
message: 'is not a valid GAC session',
|
|
236
|
+
explanation
|
|
237
|
+
})
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export class ConnectionFaultError extends ConnectionError {
|
|
242
|
+
constructor () {
|
|
243
|
+
super({
|
|
244
|
+
name: 'ConnectionFault',
|
|
245
|
+
message: 'connection to server failed'
|
|
246
|
+
})
|
|
247
|
+
}
|
|
248
|
+
}
|