@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
package/src/runtime.ts
ADDED
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/**
|
|
4
|
+
* metrics-sdk-admin
|
|
5
|
+
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
6
|
+
*
|
|
7
|
+
* The version of the OpenAPI document: 5.0.12
|
|
8
|
+
*
|
|
9
|
+
*
|
|
10
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
11
|
+
* https://openapi-generator.tech
|
|
12
|
+
* Do not edit the class manually.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import Axios, { AxiosError } from 'axios'
|
|
17
|
+
import { BrokenCircuitError, bulkhead, BulkheadRejectedError, circuitBreaker, ConsecutiveBreaker, handleWhen, IterableBackoff, retry, wrap } from 'cockatiel'
|
|
18
|
+
import { AuthenticatedConnection } from './connection'
|
|
19
|
+
import { ActionErrorProperties, ConnectionFaultError, GetErrorInstance, RequestError, SessionError } from './error'
|
|
20
|
+
import { EventDispatcher } from './event'
|
|
21
|
+
|
|
22
|
+
export const [DEFAULT_REST_ENDPOINT, DEFAULT_SOCKET_ENDPOINT] = [
|
|
23
|
+
'https://metrics-api-v3.keiser.com/api',
|
|
24
|
+
'wss://metrics-api-v3.keiser.com/ws',
|
|
25
|
+
]
|
|
26
|
+
export const DEFAULT_REQUEST_TIMEOUT = 5000
|
|
27
|
+
|
|
28
|
+
export const BASE_PATH = "https://metrics-api-v3.keiser.com/api".replace(/\/+$/, "");
|
|
29
|
+
|
|
30
|
+
export interface ConfigurationParameters {
|
|
31
|
+
basePath?: string; // override base path
|
|
32
|
+
username?: string; // parameter for basic security
|
|
33
|
+
password?: string; // parameter for basic security
|
|
34
|
+
apiKey?: string | ((name: string) => string); // parameter for apiKey security
|
|
35
|
+
accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string | Promise<string>); // parameter for oauth2 security
|
|
36
|
+
credentials?: RequestCredentials; //value for the credentials param we want to use on each request
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export class Configuration {
|
|
40
|
+
constructor(private configuration: ConfigurationParameters = {}) {}
|
|
41
|
+
|
|
42
|
+
set config(configuration: Configuration) {
|
|
43
|
+
this.configuration = configuration;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
get basePath(): string {
|
|
47
|
+
return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
get username(): string | undefined {
|
|
51
|
+
return this.configuration.username;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
get password(): string | undefined {
|
|
55
|
+
return this.configuration.password;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
get apiKey(): ((name: string) => string) | undefined {
|
|
59
|
+
const apiKey = this.configuration.apiKey;
|
|
60
|
+
if (apiKey) {
|
|
61
|
+
return typeof apiKey === 'function' ? apiKey : () => apiKey;
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
get accessToken(): ((name?: string, scopes?: string[]) => string | Promise<string>) | undefined {
|
|
67
|
+
const accessToken = this.configuration.accessToken;
|
|
68
|
+
if (accessToken) {
|
|
69
|
+
return typeof accessToken === 'function' ? accessToken : async () => accessToken;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
set accessToken(token: ((name?: string, scopes?: string[]) => string | Promise<string>) | undefined) {
|
|
75
|
+
this.configuration.accessToken = token;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
get credentials(): RequestCredentials | undefined {
|
|
79
|
+
return this.configuration.credentials;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** @ignore */
|
|
84
|
+
const PING_REGEX = /^primus::ping::(\d{13})$/
|
|
85
|
+
/** @ignore */
|
|
86
|
+
const ERROR_FILTER = (error: any) => typeof error.error === 'undefined' || error.error?.code === 0
|
|
87
|
+
|
|
88
|
+
//export interface ErrorResponse {
|
|
89
|
+
// error: {
|
|
90
|
+
// code: number
|
|
91
|
+
// explanation: string
|
|
92
|
+
// message: string
|
|
93
|
+
// name: string
|
|
94
|
+
// status: number
|
|
95
|
+
// }
|
|
96
|
+
//}
|
|
97
|
+
|
|
98
|
+
export interface ConnectionOptions {
|
|
99
|
+
restEndpoint?: string
|
|
100
|
+
socketEndpoint?: string
|
|
101
|
+
persistConnection?: boolean
|
|
102
|
+
requestTimeout?: number
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface ConnectionEvent {
|
|
106
|
+
socketConnection: boolean
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface PushDataEvent {
|
|
110
|
+
context: string
|
|
111
|
+
from: number
|
|
112
|
+
message: any
|
|
113
|
+
room: string
|
|
114
|
+
sentAt: number
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface SocketResponseMessage {
|
|
118
|
+
context: 'response'
|
|
119
|
+
messageId?: number
|
|
120
|
+
error?: any
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
interface SocketPushMessage {
|
|
124
|
+
context: 'user'
|
|
125
|
+
from: number
|
|
126
|
+
message: any
|
|
127
|
+
room: string
|
|
128
|
+
sentAt: number
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export class MetricsConnection {
|
|
132
|
+
private readonly _restEndpoint: string
|
|
133
|
+
private readonly _socketEndpoint: string
|
|
134
|
+
private _persistConnection: boolean
|
|
135
|
+
private readonly _requestTimeout: number
|
|
136
|
+
private _socket: WebSocket | null = null
|
|
137
|
+
private _lastMessageId = 0
|
|
138
|
+
private _checkCallbacksTimeoutInstance: NodeJS.Timeout | null = null
|
|
139
|
+
private _socketRetryAttempts: number = 0
|
|
140
|
+
private readonly _callbacks: Map<number, { expiresAt: number | null, callback: (success: any, fail?: any) => void }> = new Map()
|
|
141
|
+
private readonly _socketBulkhead = bulkhead(5, 25)
|
|
142
|
+
private readonly _retryStrategy = wrap(
|
|
143
|
+
retry(handleWhen(ERROR_FILTER), {backoff: new IterableBackoff([125, 1000, 5000]) }),
|
|
144
|
+
circuitBreaker(handleWhen(ERROR_FILTER), {halfOpenAfter: 15000, breaker: new ConsecutiveBreaker(10) })
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
private readonly _onDisposeEvent = new EventDispatcher<void>()
|
|
148
|
+
private readonly _onConnectionChangeEvent = new EventDispatcher<ConnectionEvent>()
|
|
149
|
+
private readonly _onPushDataEvent = new EventDispatcher<PushDataEvent>()
|
|
150
|
+
|
|
151
|
+
private accessToken: string | null = null
|
|
152
|
+
|
|
153
|
+
constructor (options?: ConnectionOptions) {
|
|
154
|
+
this._restEndpoint = options?.restEndpoint ?? DEFAULT_REST_ENDPOINT
|
|
155
|
+
this._socketEndpoint = options?.socketEndpoint ?? DEFAULT_SOCKET_ENDPOINT
|
|
156
|
+
this._persistConnection = !(options?.persistConnection === false)
|
|
157
|
+
this._requestTimeout = options?.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT
|
|
158
|
+
|
|
159
|
+
if (typeof WebSocket === 'undefined') {
|
|
160
|
+
this._persistConnection = false
|
|
161
|
+
}
|
|
162
|
+
void this.openConnection()
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
get token () {
|
|
166
|
+
return this.accessToken
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
set token (token: string | null) {
|
|
170
|
+
this.accessToken = token
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
get onDisposeEvent () {
|
|
174
|
+
return this._onDisposeEvent.asEvent()
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
dispose () {
|
|
178
|
+
this._persistConnection = false
|
|
179
|
+
this._onDisposeEvent.dispatchAsync()
|
|
180
|
+
this.closeConnection()
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
get socketConnected () {
|
|
184
|
+
return this._socket !== null && this._socket.readyState === WebSocket.OPEN
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
get persistConnection () {
|
|
188
|
+
return this._persistConnection
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
get onConnectionChangeEvent () {
|
|
192
|
+
return this._onConnectionChangeEvent.asEvent()
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
get onPushDataEvent () {
|
|
196
|
+
return this._onPushDataEvent.asEvent()
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
get baseUrl () {
|
|
200
|
+
return new URL(this._restEndpoint)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private async openConnection () {
|
|
204
|
+
if (this._persistConnection) {
|
|
205
|
+
this.checkCallbacks()
|
|
206
|
+
|
|
207
|
+
this._socket = new WebSocket(this._socketEndpoint)
|
|
208
|
+
this._socket.onopen = () => this.onSocketOpened()
|
|
209
|
+
this._socket.onclose = () => this.onSocketClosed()
|
|
210
|
+
this._socket.onmessage = (m) => this.onSocketMessage(m)
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
private onSocketOpened () {
|
|
215
|
+
this._socketRetryAttempts = 0
|
|
216
|
+
this.dispatchConnectionChange()
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
private onSocketClosed () {
|
|
220
|
+
this._socket = null
|
|
221
|
+
this.dispatchConnectionChange()
|
|
222
|
+
|
|
223
|
+
const retryTimeout = this._socketRetryAttempts++ < 3 ? 0 : (this._socketRetryAttempts < 24 ? 2000 : 30000)
|
|
224
|
+
setTimeout(() => void this.openConnection(), retryTimeout)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
private closeConnection () {
|
|
228
|
+
this._socket?.close()
|
|
229
|
+
this.checkCallbacks(true)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
private dispatchConnectionChange () {
|
|
233
|
+
this._onConnectionChangeEvent.dispatchAsync({
|
|
234
|
+
socketConnection: this.socketConnected
|
|
235
|
+
})
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
private onSocketMessage (messageEvent: MessageEvent) {
|
|
239
|
+
try {
|
|
240
|
+
const data = JSON.parse(messageEvent.data) as SocketResponseMessage | SocketPushMessage | string
|
|
241
|
+
if (typeof data === 'string') {
|
|
242
|
+
if (PING_REGEX.test(data)) {
|
|
243
|
+
const pingResults = PING_REGEX.exec(data)
|
|
244
|
+
if (pingResults !== null) {
|
|
245
|
+
this.pong(pingResults[1])
|
|
246
|
+
}
|
|
247
|
+
} else if (data === 'primus::server::close') {
|
|
248
|
+
this._socket?.close()
|
|
249
|
+
}
|
|
250
|
+
} else if (data.context === 'response') {
|
|
251
|
+
this.parseResponse(data)
|
|
252
|
+
} else if (data.context === 'user') {
|
|
253
|
+
this.parseMessage(data)
|
|
254
|
+
}
|
|
255
|
+
} catch (error) {
|
|
256
|
+
console.error('Unparsable Response', error)
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
async action (action: string, route: string, method: HTTPMethod, params: Object = { }, pathParams: Object = { }, headers: HTTPHeaders) {
|
|
261
|
+
try {
|
|
262
|
+
const result = await this._retryStrategy.execute(async () => {
|
|
263
|
+
return await new Promise((resolve, reject) => {
|
|
264
|
+
const callback = (success: any, fail?: any) => typeof fail !== 'undefined' ? reject(fail) : resolve(success)
|
|
265
|
+
if (this.socketConnected) {
|
|
266
|
+
const fullParams = {...params, ...pathParams}
|
|
267
|
+
void this.actionSocket(action, fullParams, callback)
|
|
268
|
+
} else {
|
|
269
|
+
if(method.toUpperCase() === 'PATCH') {
|
|
270
|
+
throw new ConnectionFaultError()
|
|
271
|
+
}
|
|
272
|
+
void this.actionRest(route, method, params, headers, callback)
|
|
273
|
+
}
|
|
274
|
+
})
|
|
275
|
+
})
|
|
276
|
+
|
|
277
|
+
if (result instanceof Error) {
|
|
278
|
+
throw result
|
|
279
|
+
}
|
|
280
|
+
return result
|
|
281
|
+
} catch (error) {
|
|
282
|
+
if (error instanceof BrokenCircuitError) {
|
|
283
|
+
throw new ConnectionFaultError()
|
|
284
|
+
}
|
|
285
|
+
throw error
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
private checkCallbacks (clear: boolean = false) {
|
|
290
|
+
if (this._checkCallbacksTimeoutInstance !== null) {
|
|
291
|
+
clearTimeout(this._checkCallbacksTimeoutInstance)
|
|
292
|
+
}
|
|
293
|
+
const now = Date.now()
|
|
294
|
+
|
|
295
|
+
this._callbacks.forEach((callback, key) => {
|
|
296
|
+
if (clear || (callback.expiresAt !== null && callback.expiresAt <= now)) {
|
|
297
|
+
try {
|
|
298
|
+
callback.callback(null, { error: { statusText: 'Request timed out.' } })
|
|
299
|
+
} finally {
|
|
300
|
+
this._callbacks.delete(key)
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
})
|
|
304
|
+
|
|
305
|
+
if (!clear) {
|
|
306
|
+
this._checkCallbacksTimeoutInstance = setTimeout(() => this.checkCallbacks(), 100)
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
private pong (time: string) {
|
|
311
|
+
this._socket?.send(`"primus::pong::${time}"`)
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
private parseResponse (data: { context: 'response', messageId?: number, error?: any }) {
|
|
315
|
+
if (typeof data.messageId !== 'undefined' && this._callbacks.has(data.messageId)) {
|
|
316
|
+
if (typeof data.error !== 'undefined') {
|
|
317
|
+
const errorInstance = GetErrorInstance(data.error as ActionErrorProperties)
|
|
318
|
+
if (errorInstance instanceof RequestError || errorInstance instanceof SessionError) {
|
|
319
|
+
this._callbacks.get(data.messageId)?.callback(errorInstance)
|
|
320
|
+
} else {
|
|
321
|
+
this._callbacks.get(data.messageId)?.callback(null, errorInstance)
|
|
322
|
+
}
|
|
323
|
+
} else {
|
|
324
|
+
this._callbacks.get(data.messageId)?.callback(data)
|
|
325
|
+
}
|
|
326
|
+
this._callbacks.delete(data.messageId)
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
private parseMessage (data: {context: 'user', message: any, room: string, from: number, sentAt: number}) {
|
|
331
|
+
this._onPushDataEvent.dispatchAsync(data as PushDataEvent)
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
private async actionSocket (action: string, params: Object, callback: (success: any, fail?: any) => void) {
|
|
335
|
+
try {
|
|
336
|
+
await this._socketBulkhead.execute(async () => await new Promise<void>(resolve => {
|
|
337
|
+
this._lastMessageId++
|
|
338
|
+
const args = {
|
|
339
|
+
messageId: this._lastMessageId,
|
|
340
|
+
event: 'action',
|
|
341
|
+
params: { action, ...params }
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
this._callbacks.set(this._lastMessageId, {
|
|
345
|
+
callback: (success: any, fail?: any) => {
|
|
346
|
+
callback(success, fail)
|
|
347
|
+
resolve()
|
|
348
|
+
},
|
|
349
|
+
expiresAt: Date.now() + this._requestTimeout
|
|
350
|
+
})
|
|
351
|
+
|
|
352
|
+
this._socket?.send(JSON.stringify(args))
|
|
353
|
+
}))
|
|
354
|
+
} catch (error) {
|
|
355
|
+
if (error instanceof BulkheadRejectedError) {
|
|
356
|
+
callback(null, { error: { statusText: 'Socket request queue is full.' } })
|
|
357
|
+
} else {
|
|
358
|
+
callback(null, { error })
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
private async actionRest (action: string, method: HTTPMethod, params: Object, headers: HTTPHeaders, callback: (success: any, fail?: any) => void) {
|
|
364
|
+
try {
|
|
365
|
+
const response = await Axios({
|
|
366
|
+
method: method,
|
|
367
|
+
headers:headers,
|
|
368
|
+
url: `${this._restEndpoint}${action}`,
|
|
369
|
+
params: params,
|
|
370
|
+
data: params,
|
|
371
|
+
timeout: this._requestTimeout
|
|
372
|
+
})
|
|
373
|
+
callback(response.data)
|
|
374
|
+
} catch (error) {
|
|
375
|
+
if (error instanceof Error) {
|
|
376
|
+
const actionError = (error as AxiosError<{error: ActionErrorProperties }>)?.response?.data?.error
|
|
377
|
+
if (typeof actionError !== 'undefined') {
|
|
378
|
+
const errorInstance = GetErrorInstance(actionError)
|
|
379
|
+
if (errorInstance instanceof RequestError || errorInstance instanceof SessionError) {
|
|
380
|
+
callback(errorInstance)
|
|
381
|
+
} else {
|
|
382
|
+
callback(null, errorInstance)
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
callback(null, { error })
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* This is the base class for all generated API classes.
|
|
393
|
+
*/
|
|
394
|
+
export class BaseAPI {
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
connection: AuthenticatedConnection;
|
|
398
|
+
|
|
399
|
+
constructor(connection: AuthenticatedConnection) {
|
|
400
|
+
this.connection = connection;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
protected async request(context: RequestOpts, authenticated: boolean = false): Promise<any> {
|
|
404
|
+
try {
|
|
405
|
+
if (authenticated) {
|
|
406
|
+
const response = await this.connection.authenticatedAction(context.action, context.path, context.method, context.query, context.pathParams, context.headers)
|
|
407
|
+
return response as any
|
|
408
|
+
} else {
|
|
409
|
+
const response = await this.connection.action(context.action, context.path, context.method, context.query, context.pathParams, context.headers)
|
|
410
|
+
return response as any
|
|
411
|
+
}
|
|
412
|
+
} catch (error) {
|
|
413
|
+
throw error
|
|
414
|
+
}
|
|
415
|
+
//const { url, init } = await this.createFetchParams(context, initOverrides);
|
|
416
|
+
//const response = await this.fetchApi(url, init);
|
|
417
|
+
//if (response && (response.status >= 200 && response.status < 300)) {
|
|
418
|
+
// return response;
|
|
419
|
+
//}
|
|
420
|
+
//throw new ResponseError(response, 'Response returned an error code');
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
export class ResponseError extends Error {
|
|
426
|
+
override name: "ResponseError" = "ResponseError";
|
|
427
|
+
constructor(public response: Response, msg?: string) {
|
|
428
|
+
super(msg);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export class FetchError extends Error {
|
|
433
|
+
override name: "FetchError" = "FetchError";
|
|
434
|
+
constructor(public cause: Error, msg?: string) {
|
|
435
|
+
super(msg);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
export class RequiredError extends Error {
|
|
440
|
+
override name: "RequiredError" = "RequiredError";
|
|
441
|
+
constructor(public field: string, msg?: string) {
|
|
442
|
+
super(msg);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
export type Json = any;
|
|
448
|
+
export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';
|
|
449
|
+
export type HTTPHeaders = { [key: string]: string };
|
|
450
|
+
export type HTTPQuery = { [key: string]: string | number | null | boolean | Array<string | number | null | boolean> | Set<string | number | null | boolean> | HTTPQuery };
|
|
451
|
+
export type HTTPBody = Json | FormData | URLSearchParams;
|
|
452
|
+
|
|
453
|
+
export interface RequestOpts {
|
|
454
|
+
path: string;
|
|
455
|
+
action: string;
|
|
456
|
+
method: HTTPMethod;
|
|
457
|
+
headers: HTTPHeaders;
|
|
458
|
+
query?: HTTPQuery;
|
|
459
|
+
pathParams?: HTTPQuery;
|
|
460
|
+
body?: HTTPBody;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
export function mapValues(data: any, fn: (item: any) => any) {
|
|
464
|
+
return Object.keys(data).reduce(
|
|
465
|
+
(acc, key) => ({ ...acc, [key]: fn(data[key]) }),
|
|
466
|
+
{}
|
|
467
|
+
);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
export function exists(json: any, key: string) {
|
|
471
|
+
const value = json[key];
|
|
472
|
+
return value !== null && value !== undefined;
|
|
473
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"declaration": true,
|
|
4
|
+
"target": "es6",
|
|
5
|
+
"module": "es6",
|
|
6
|
+
"moduleResolution": "node",
|
|
7
|
+
"outDir": "dist",
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"sourceMap": true,
|
|
10
|
+
"typeRoots": [
|
|
11
|
+
"node_modules/@types"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
"exclude": [
|
|
15
|
+
"dist",
|
|
16
|
+
"node_modules"
|
|
17
|
+
]
|
|
18
|
+
}
|