@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.
Files changed (317) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
  2. package/.github/ISSUE_TEMPLATE/enhancement.md +46 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +46 -0
  4. package/.github/workflows/main.yml +63 -0
  5. package/README.md +202 -0
  6. package/dist/apis/MetricsAdminApi.d.ts +328 -0
  7. package/dist/apis/index.d.ts +1 -0
  8. package/dist/connection.d.ts +110 -0
  9. package/dist/error.d.ts +134 -0
  10. package/dist/event.d.ts +51 -0
  11. package/dist/index.d.ts +7 -0
  12. package/dist/index.js +8429 -0
  13. package/dist/index.mjs +7939 -0
  14. package/dist/jwt.d.ts +1 -0
  15. package/dist/models/A500DataSetData.d.ts +93 -0
  16. package/dist/models/A500MachineStateData.d.ts +88 -0
  17. package/dist/models/A500RepDataPointData.d.ts +169 -0
  18. package/dist/models/A500TestResultData.d.ts +103 -0
  19. package/dist/models/A500TimeSeriesPointData.d.ts +145 -0
  20. package/dist/models/AcceptedTermsVersionData.d.ts +43 -0
  21. package/dist/models/BodyCompositionMeasurementData.d.ts +211 -0
  22. package/dist/models/CacheKeysResponse.d.ts +43 -0
  23. package/dist/models/CacheObject.d.ts +55 -0
  24. package/dist/models/CacheObjectResponse.d.ts +44 -0
  25. package/dist/models/CardioExerciseData.d.ts +65 -0
  26. package/dist/models/CardioExerciseVariantData.d.ts +77 -0
  27. package/dist/models/CardioMachineData.d.ts +83 -0
  28. package/dist/models/EmailAddressData.d.ts +49 -0
  29. package/dist/models/ExerciseAliasData.d.ts +73 -0
  30. package/dist/models/ExerciseOrdinalSetAssignmentData.d.ts +65 -0
  31. package/dist/models/ExerciseOrdinalSetData.d.ts +56 -0
  32. package/dist/models/FacilityConfigurationData.d.ts +101 -0
  33. package/dist/models/FacilityData.d.ts +65 -0
  34. package/dist/models/FacilityLicenseData.d.ts +83 -0
  35. package/dist/models/FacilityLicenseListResponse.d.ts +51 -0
  36. package/dist/models/FacilityLicenseListResponseMeta.d.ts +89 -0
  37. package/dist/models/FacilityLicenseResponse.d.ts +44 -0
  38. package/dist/models/FacilityLicenseSorting.d.ts +25 -0
  39. package/dist/models/FacilityProfileData.d.ts +73 -0
  40. package/dist/models/FacilityRelationshipData.d.ts +99 -0
  41. package/dist/models/FacilitySessionUserData.d.ts +112 -0
  42. package/dist/models/FacilityStrengthMachineConfigurationData.d.ts +94 -0
  43. package/dist/models/FacilityStrengthMachineData.d.ts +99 -0
  44. package/dist/models/FingerprintData.d.ts +69 -0
  45. package/dist/models/GlobalAccessControlCreationResponse.d.ts +51 -0
  46. package/dist/models/GlobalAccessControlData.d.ts +148 -0
  47. package/dist/models/GlobalAccessControlListResponse.d.ts +51 -0
  48. package/dist/models/GlobalAccessControlListResponseMeta.d.ts +62 -0
  49. package/dist/models/GlobalAccessControlResponse.d.ts +44 -0
  50. package/dist/models/GlobalAccessControlSecretData.d.ts +37 -0
  51. package/dist/models/GlobalAccessControlSecretResponse.d.ts +44 -0
  52. package/dist/models/GlobalAccessControlSorting.d.ts +23 -0
  53. package/dist/models/HeartRateDataPointData.d.ts +49 -0
  54. package/dist/models/HeartRateDataSetData.d.ts +81 -0
  55. package/dist/models/HeartRateDataSetSessionData.d.ts +56 -0
  56. package/dist/models/HeightMeasurementData.d.ts +55 -0
  57. package/dist/models/High.d.ts +31 -0
  58. package/dist/models/Low.d.ts +31 -0
  59. package/dist/models/MSeriesDataPointData.d.ts +103 -0
  60. package/dist/models/MSeriesDataSetData.d.ts +222 -0
  61. package/dist/models/MSeriesDataSetSegmentData.d.ts +129 -0
  62. package/dist/models/MSeriesFtpMeasurementData.d.ts +74 -0
  63. package/dist/models/MuscleArea.d.ts +24 -0
  64. package/dist/models/MuscleData.d.ts +67 -0
  65. package/dist/models/MuscleGroup.d.ts +35 -0
  66. package/dist/models/MuscleIdentifier.d.ts +86 -0
  67. package/dist/models/OAuthServiceData.d.ts +73 -0
  68. package/dist/models/PrimaryEmailAddressData.d.ts +37 -0
  69. package/dist/models/ProfileData.d.ts +67 -0
  70. package/dist/models/Queue.d.ts +23 -0
  71. package/dist/models/ResqueDetailsData.d.ts +45 -0
  72. package/dist/models/ResqueDetailsResponse.d.ts +44 -0
  73. package/dist/models/SessionData.d.ts +135 -0
  74. package/dist/models/SessionPlanActivitySetData.d.ts +31 -0
  75. package/dist/models/SessionPlanCardioSetData.d.ts +57 -0
  76. package/dist/models/SessionPlanData.d.ts +118 -0
  77. package/dist/models/SessionPlanSequenceAssignmentData.d.ts +44 -0
  78. package/dist/models/SessionPlanSequenceData.d.ts +63 -0
  79. package/dist/models/SessionPlanSequenceInstanceData.d.ts +82 -0
  80. package/dist/models/SessionPlanSetData.d.ts +81 -0
  81. package/dist/models/SessionPlanSetInstanceData.d.ts +87 -0
  82. package/dist/models/SessionPlanStrengthSetData.d.ts +67 -0
  83. package/dist/models/SessionPlanStretchSetData.d.ts +31 -0
  84. package/dist/models/StatData.d.ts +97 -0
  85. package/dist/models/StatListResponse.d.ts +51 -0
  86. package/dist/models/StatListResponseMeta.d.ts +68 -0
  87. package/dist/models/StatSorting.d.ts +23 -0
  88. package/dist/models/StrengthExerciseData.d.ts +125 -0
  89. package/dist/models/StrengthExerciseVariantData.d.ts +115 -0
  90. package/dist/models/StrengthMachineData.d.ts +88 -0
  91. package/dist/models/StrengthMachineDataSetData.d.ts +199 -0
  92. package/dist/models/StrengthMachineDataSetTestData.d.ts +54 -0
  93. package/dist/models/StrengthMachineDataSetTestSubsetData.d.ts +49 -0
  94. package/dist/models/StrengthMachineModelData.d.ts +31 -0
  95. package/dist/models/StretchExerciseData.d.ts +58 -0
  96. package/dist/models/StretchExerciseVariantData.d.ts +70 -0
  97. package/dist/models/TaskFailedResponse.d.ts +51 -0
  98. package/dist/models/TaskFailure.d.ts +69 -0
  99. package/dist/models/TaskPayload.d.ts +44 -0
  100. package/dist/models/TaskQueueResponse.d.ts +51 -0
  101. package/dist/models/TaskQueueResponseMeta.d.ts +68 -0
  102. package/dist/models/TaskQueues.d.ts +39 -0
  103. package/dist/models/TaskStats.d.ts +37 -0
  104. package/dist/models/UserData.d.ts +112 -0
  105. package/dist/models/UserListResponse.d.ts +51 -0
  106. package/dist/models/UserListResponseMeta.d.ts +68 -0
  107. package/dist/models/UserResponse.d.ts +44 -0
  108. package/dist/models/UserSorting.d.ts +24 -0
  109. package/dist/models/WeightMeasurementData.d.ts +68 -0
  110. package/dist/models/WorkersResponse.d.ts +43 -0
  111. package/dist/models/index.d.ts +96 -0
  112. package/dist/runtime.d.ts +134 -0
  113. package/docs/A500DataSetData.md +41 -0
  114. package/docs/A500MachineStateData.md +46 -0
  115. package/docs/A500RepDataPointData.md +56 -0
  116. package/docs/A500TestResultData.md +22 -0
  117. package/docs/A500TimeSeriesPointData.md +29 -0
  118. package/docs/AcceptedTermsVersionData.md +12 -0
  119. package/docs/BodyCompositionMeasurementData.md +40 -0
  120. package/docs/CacheKeysResponse.md +12 -0
  121. package/docs/CacheObject.md +14 -0
  122. package/docs/CacheObjectResponse.md +12 -0
  123. package/docs/CardioExerciseData.md +15 -0
  124. package/docs/CardioExerciseVariantData.md +25 -0
  125. package/docs/CardioMachineData.md +36 -0
  126. package/docs/EmailAddressData.md +13 -0
  127. package/docs/ExerciseAliasData.md +28 -0
  128. package/docs/ExerciseOrdinalSetAssignmentData.md +15 -0
  129. package/docs/ExerciseOrdinalSetData.md +14 -0
  130. package/docs/FacilityConfigurationData.md +41 -0
  131. package/docs/FacilityData.md +15 -0
  132. package/docs/FacilityLicenseData.md +30 -0
  133. package/docs/FacilityLicenseListResponse.md +13 -0
  134. package/docs/FacilityLicenseListResponseMeta.md +31 -0
  135. package/docs/FacilityLicenseResponse.md +12 -0
  136. package/docs/FacilityLicenseSorting.md +15 -0
  137. package/docs/FacilityProfileData.md +17 -0
  138. package/docs/FacilityRelationshipData.md +36 -0
  139. package/docs/FacilitySessionUserData.md +22 -0
  140. package/docs/FacilityStrengthMachineConfigurationData.md +47 -0
  141. package/docs/FacilityStrengthMachineData.md +21 -0
  142. package/docs/FingerprintData.md +24 -0
  143. package/docs/GlobalAccessControlCreationResponse.md +13 -0
  144. package/docs/GlobalAccessControlData.md +103 -0
  145. package/docs/GlobalAccessControlListResponse.md +13 -0
  146. package/docs/GlobalAccessControlListResponseMeta.md +15 -0
  147. package/docs/GlobalAccessControlResponse.md +12 -0
  148. package/docs/GlobalAccessControlSecretData.md +11 -0
  149. package/docs/GlobalAccessControlSecretResponse.md +12 -0
  150. package/docs/GlobalAccessControlSorting.md +11 -0
  151. package/docs/HeartRateDataPointData.md +13 -0
  152. package/docs/HeartRateDataSetData.md +18 -0
  153. package/docs/HeartRateDataSetSessionData.md +14 -0
  154. package/docs/HeightMeasurementData.md +14 -0
  155. package/docs/High.md +10 -0
  156. package/docs/Low.md +10 -0
  157. package/docs/MSeriesDataPointData.md +22 -0
  158. package/docs/MSeriesDataSetData.md +41 -0
  159. package/docs/MSeriesDataSetSegmentData.md +26 -0
  160. package/docs/MSeriesFtpMeasurementData.md +17 -0
  161. package/docs/MetricsAdminApi.md +1576 -0
  162. package/docs/MuscleArea.md +13 -0
  163. package/docs/MuscleData.md +27 -0
  164. package/docs/MuscleGroup.md +35 -0
  165. package/docs/MuscleIdentifier.md +137 -0
  166. package/docs/OAuthServiceData.md +17 -0
  167. package/docs/PrimaryEmailAddressData.md +11 -0
  168. package/docs/ProfileData.md +16 -0
  169. package/docs/Queue.md +11 -0
  170. package/docs/ResqueDetailsData.md +12 -0
  171. package/docs/ResqueDetailsResponse.md +12 -0
  172. package/docs/SessionData.md +26 -0
  173. package/docs/SessionPlanActivitySetData.md +10 -0
  174. package/docs/SessionPlanCardioSetData.md +14 -0
  175. package/docs/SessionPlanData.md +24 -0
  176. package/docs/SessionPlanSequenceAssignmentData.md +12 -0
  177. package/docs/SessionPlanSequenceData.md +15 -0
  178. package/docs/SessionPlanSequenceInstanceData.md +18 -0
  179. package/docs/SessionPlanSetData.md +31 -0
  180. package/docs/SessionPlanSetInstanceData.md +32 -0
  181. package/docs/SessionPlanStrengthSetData.md +29 -0
  182. package/docs/SessionPlanStretchSetData.md +10 -0
  183. package/docs/StatData.md +21 -0
  184. package/docs/StatListResponse.md +13 -0
  185. package/docs/StatListResponseMeta.md +16 -0
  186. package/docs/StatSorting.md +11 -0
  187. package/docs/StrengthExerciseData.md +71 -0
  188. package/docs/StrengthExerciseVariantData.md +69 -0
  189. package/docs/StrengthMachineData.md +38 -0
  190. package/docs/StrengthMachineDataSetData.md +60 -0
  191. package/docs/StrengthMachineDataSetTestData.md +27 -0
  192. package/docs/StrengthMachineDataSetTestSubsetData.md +13 -0
  193. package/docs/StrengthMachineModelData.md +10 -0
  194. package/docs/StretchExerciseData.md +14 -0
  195. package/docs/StretchExerciseVariantData.md +24 -0
  196. package/docs/TaskFailedResponse.md +13 -0
  197. package/docs/TaskFailure.md +16 -0
  198. package/docs/TaskPayload.md +12 -0
  199. package/docs/TaskQueueResponse.md +13 -0
  200. package/docs/TaskQueueResponseMeta.md +24 -0
  201. package/docs/TaskQueues.md +11 -0
  202. package/docs/TaskStats.md +11 -0
  203. package/docs/UserData.md +22 -0
  204. package/docs/UserListResponse.md +13 -0
  205. package/docs/UserListResponseMeta.md +16 -0
  206. package/docs/UserResponse.md +12 -0
  207. package/docs/UserSorting.md +13 -0
  208. package/docs/WeightMeasurementData.md +16 -0
  209. package/docs/WorkersResponse.md +12 -0
  210. package/package.json +37 -0
  211. package/rollup.config.mjs +32 -0
  212. package/src/apis/MetricsAdminApi.ts +1735 -0
  213. package/src/apis/index.ts +3 -0
  214. package/src/connection.ts +256 -0
  215. package/src/error.ts +248 -0
  216. package/src/event.ts +267 -0
  217. package/src/index.ts +9 -0
  218. package/src/jwt.ts +17 -0
  219. package/src/models/A500DataSetData.ts +164 -0
  220. package/src/models/A500MachineStateData.ts +150 -0
  221. package/src/models/A500RepDataPointData.ts +264 -0
  222. package/src/models/A500TestResultData.ts +174 -0
  223. package/src/models/A500TimeSeriesPointData.ts +233 -0
  224. package/src/models/AcceptedTermsVersionData.ts +83 -0
  225. package/src/models/BodyCompositionMeasurementData.ts +336 -0
  226. package/src/models/CacheKeysResponse.ts +82 -0
  227. package/src/models/CacheObject.ts +102 -0
  228. package/src/models/CacheObjectResponse.ts +89 -0
  229. package/src/models/CardioExerciseData.ts +131 -0
  230. package/src/models/CardioExerciseVariantData.ts +144 -0
  231. package/src/models/CardioMachineData.ts +143 -0
  232. package/src/models/EmailAddressData.ts +93 -0
  233. package/src/models/ExerciseAliasData.ts +138 -0
  234. package/src/models/ExerciseOrdinalSetAssignmentData.ts +132 -0
  235. package/src/models/ExerciseOrdinalSetData.ts +107 -0
  236. package/src/models/FacilityConfigurationData.ts +167 -0
  237. package/src/models/FacilityData.ts +132 -0
  238. package/src/models/FacilityLicenseData.ts +144 -0
  239. package/src/models/FacilityLicenseListResponse.ts +104 -0
  240. package/src/models/FacilityLicenseListResponseMeta.ts +152 -0
  241. package/src/models/FacilityLicenseResponse.ts +89 -0
  242. package/src/models/FacilityLicenseSorting.ts +40 -0
  243. package/src/models/FacilityProfileData.ts +121 -0
  244. package/src/models/FacilityRelationshipData.ts +175 -0
  245. package/src/models/FacilitySessionUserData.ts +216 -0
  246. package/src/models/FacilityStrengthMachineConfigurationData.ts +159 -0
  247. package/src/models/FacilityStrengthMachineData.ts +170 -0
  248. package/src/models/FingerprintData.ts +127 -0
  249. package/src/models/GlobalAccessControlCreationResponse.ts +104 -0
  250. package/src/models/GlobalAccessControlData.ts +217 -0
  251. package/src/models/GlobalAccessControlListResponse.ts +104 -0
  252. package/src/models/GlobalAccessControlListResponseMeta.ts +113 -0
  253. package/src/models/GlobalAccessControlResponse.ts +89 -0
  254. package/src/models/GlobalAccessControlSecretData.ts +75 -0
  255. package/src/models/GlobalAccessControlSecretResponse.ts +89 -0
  256. package/src/models/GlobalAccessControlSorting.ts +38 -0
  257. package/src/models/HeartRateDataPointData.ts +91 -0
  258. package/src/models/HeartRateDataSetData.ts +148 -0
  259. package/src/models/HeartRateDataSetSessionData.ts +108 -0
  260. package/src/models/HeightMeasurementData.ts +102 -0
  261. package/src/models/High.ts +66 -0
  262. package/src/models/Low.ts +66 -0
  263. package/src/models/MSeriesDataPointData.ts +167 -0
  264. package/src/models/MSeriesDataSetData.ts +363 -0
  265. package/src/models/MSeriesDataSetSegmentData.ts +219 -0
  266. package/src/models/MSeriesFtpMeasurementData.ts +133 -0
  267. package/src/models/MuscleArea.ts +39 -0
  268. package/src/models/MuscleData.ts +131 -0
  269. package/src/models/MuscleGroup.ts +50 -0
  270. package/src/models/MuscleIdentifier.ts +101 -0
  271. package/src/models/OAuthServiceData.ts +126 -0
  272. package/src/models/PrimaryEmailAddressData.ts +75 -0
  273. package/src/models/ProfileData.ts +115 -0
  274. package/src/models/Queue.ts +38 -0
  275. package/src/models/ResqueDetailsData.ts +97 -0
  276. package/src/models/ResqueDetailsResponse.ts +89 -0
  277. package/src/models/SessionData.ts +249 -0
  278. package/src/models/SessionPlanActivitySetData.ts +66 -0
  279. package/src/models/SessionPlanCardioSetData.ts +113 -0
  280. package/src/models/SessionPlanData.ts +205 -0
  281. package/src/models/SessionPlanSequenceAssignmentData.ts +90 -0
  282. package/src/models/SessionPlanSequenceData.ts +122 -0
  283. package/src/models/SessionPlanSequenceInstanceData.ts +154 -0
  284. package/src/models/SessionPlanSetData.ts +153 -0
  285. package/src/models/SessionPlanSetInstanceData.ts +162 -0
  286. package/src/models/SessionPlanStrengthSetData.ts +126 -0
  287. package/src/models/SessionPlanStretchSetData.ts +66 -0
  288. package/src/models/StatData.ts +165 -0
  289. package/src/models/StatListResponse.ts +104 -0
  290. package/src/models/StatListResponseMeta.ts +121 -0
  291. package/src/models/StatSorting.ts +38 -0
  292. package/src/models/StrengthExerciseData.ts +208 -0
  293. package/src/models/StrengthExerciseVariantData.ts +189 -0
  294. package/src/models/StrengthMachineData.ts +154 -0
  295. package/src/models/StrengthMachineDataSetData.ts +331 -0
  296. package/src/models/StrengthMachineDataSetTestData.ts +104 -0
  297. package/src/models/StrengthMachineDataSetTestSubsetData.ts +93 -0
  298. package/src/models/StrengthMachineModelData.ts +66 -0
  299. package/src/models/StretchExerciseData.ts +117 -0
  300. package/src/models/StretchExerciseVariantData.ts +130 -0
  301. package/src/models/TaskFailedResponse.ts +104 -0
  302. package/src/models/TaskFailure.ts +133 -0
  303. package/src/models/TaskPayload.ts +91 -0
  304. package/src/models/TaskQueueResponse.ts +104 -0
  305. package/src/models/TaskQueueResponseMeta.ts +117 -0
  306. package/src/models/TaskQueues.ts +88 -0
  307. package/src/models/TaskStats.ts +73 -0
  308. package/src/models/UserData.ts +217 -0
  309. package/src/models/UserListResponse.ts +104 -0
  310. package/src/models/UserListResponseMeta.ts +121 -0
  311. package/src/models/UserResponse.ts +89 -0
  312. package/src/models/UserSorting.ts +39 -0
  313. package/src/models/WeightMeasurementData.ts +125 -0
  314. package/src/models/WorkersResponse.ts +82 -0
  315. package/src/models/index.ts +98 -0
  316. package/src/runtime.ts +473 -0
  317. 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
+ }