@modelhealth/modelhealth 0.1.17 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +23 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -63
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +18 -98
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -65
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/wasm/model_health_wasm.d.ts +94 -0
- package/wasm/model_health_wasm.js +988 -0
- package/wasm/model_health_wasm_bg.wasm +0 -0
- package/wasm/model_health_wasm_bg.wasm.d.ts +36 -0
package/dist/index.d.ts
CHANGED
|
@@ -10,17 +10,9 @@
|
|
|
10
10
|
* ```typescript
|
|
11
11
|
* import { ModelHealthService } from '@modelhealth/modelhealth';
|
|
12
12
|
*
|
|
13
|
-
* // Create and initialize client with API key
|
|
14
13
|
* const client = new ModelHealthService({ apiKey: "your-api-key-here" });
|
|
15
14
|
* await client.init();
|
|
16
15
|
*
|
|
17
|
-
* // Authenticate (optional - API key already provides authentication)
|
|
18
|
-
* const result = await client.login("user@example.com", "password");
|
|
19
|
-
* if (result === "verification_required") {
|
|
20
|
-
* await client.verify("123456", true);
|
|
21
|
-
* }
|
|
22
|
-
*
|
|
23
|
-
* // Get sessions
|
|
24
16
|
* const sessions = await client.sessionList();
|
|
25
17
|
* ```
|
|
26
18
|
*/
|
|
@@ -125,23 +117,7 @@ export declare class ModelHealthService {
|
|
|
125
117
|
*/
|
|
126
118
|
private ensureInitialized;
|
|
127
119
|
/**
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
* @returns `true` if authenticated, `false` otherwise
|
|
131
|
-
*
|
|
132
|
-
* @example
|
|
133
|
-
* ```typescript
|
|
134
|
-
* if (await client.isAuthenticated()) {
|
|
135
|
-
* // Proceed with authenticated operations
|
|
136
|
-
* const sessions = await client.sessionList();
|
|
137
|
-
* } else {
|
|
138
|
-
* // Show login screen
|
|
139
|
-
* }
|
|
140
|
-
* ```
|
|
141
|
-
*/
|
|
142
|
-
isAuthenticated(): Promise<boolean>;
|
|
143
|
-
/**
|
|
144
|
-
* Retrieves all sessions for the authenticated user.
|
|
120
|
+
* Retrieves all sessions for the account (API key).
|
|
145
121
|
*
|
|
146
122
|
* @returns An array of `Session` objects. Returns an empty array if no sessions exist.
|
|
147
123
|
* @throws If the request fails due to network issues, authentication problems,
|
|
@@ -192,10 +168,10 @@ export declare class ModelHealthService {
|
|
|
192
168
|
* const session = await client.createSession();
|
|
193
169
|
*
|
|
194
170
|
* // Proceed with calibration
|
|
195
|
-
* const details = {
|
|
171
|
+
* const details: CheckerboardDetails = {
|
|
196
172
|
* rows: 4,
|
|
197
173
|
* columns: 5,
|
|
198
|
-
*
|
|
174
|
+
* squareSize: 35,
|
|
199
175
|
* placement: "perpendicular"
|
|
200
176
|
* };
|
|
201
177
|
* // await client.calibrateCamera(session, details, (status) => { ... });
|
|
@@ -221,10 +197,10 @@ export declare class ModelHealthService {
|
|
|
221
197
|
* ```typescript
|
|
222
198
|
* const session = await client.createSession();
|
|
223
199
|
*
|
|
224
|
-
* const details = {
|
|
200
|
+
* const details: CheckerboardDetails = {
|
|
225
201
|
* rows: 4, // Internal corners, not squares (for 5×6 board)
|
|
226
202
|
* columns: 5, // Internal corners, not squares (for 5×6 board)
|
|
227
|
-
*
|
|
203
|
+
* squareSize: 35, // Measured in millimeters
|
|
228
204
|
* placement: "perpendicular"
|
|
229
205
|
* };
|
|
230
206
|
*
|
|
@@ -263,7 +239,7 @@ export declare class ModelHealthService {
|
|
|
263
239
|
*/
|
|
264
240
|
calibrateNeutralPose(subject: Subject, session: Session, statusCallback: (status: CalibrationStatus) => void): Promise<void>;
|
|
265
241
|
/**
|
|
266
|
-
* Retrieves all subjects associated with the
|
|
242
|
+
* Retrieves all subjects associated with the account.
|
|
267
243
|
*
|
|
268
244
|
* Subjects represent individuals being monitored or assessed. Each subject
|
|
269
245
|
* contains demographic information, physical measurements, and categorization tags.
|
|
@@ -279,7 +255,7 @@ export declare class ModelHealthService {
|
|
|
279
255
|
* }
|
|
280
256
|
*
|
|
281
257
|
* // Filter by tags
|
|
282
|
-
* const athletes = subjects.filter(s => s.
|
|
258
|
+
* const athletes = subjects.filter(s => s.subjectTags.includes("athlete"));
|
|
283
259
|
* ```
|
|
284
260
|
*/
|
|
285
261
|
subjectList(): Promise<Subject[]>;
|
|
@@ -296,15 +272,15 @@ export declare class ModelHealthService {
|
|
|
296
272
|
*
|
|
297
273
|
* @example
|
|
298
274
|
* ```typescript
|
|
299
|
-
* const params = {
|
|
275
|
+
* const params: SubjectParameters = {
|
|
300
276
|
* name: "John Doe",
|
|
301
277
|
* weight: 75.0, // kilograms
|
|
302
278
|
* height: 180.0, // centimeters
|
|
303
|
-
*
|
|
279
|
+
* birthYear: 1990,
|
|
304
280
|
* gender: "man",
|
|
305
|
-
*
|
|
281
|
+
* sexAtBirth: "man",
|
|
306
282
|
* characteristics: "Regular training schedule",
|
|
307
|
-
*
|
|
283
|
+
* subjectTags: ["athlete"],
|
|
308
284
|
* terms: true
|
|
309
285
|
* };
|
|
310
286
|
*
|
|
@@ -435,7 +411,7 @@ export declare class ModelHealthService {
|
|
|
435
411
|
*/
|
|
436
412
|
getActivityTags(): Promise<ActivityTag[]>;
|
|
437
413
|
/**
|
|
438
|
-
* Retrieves all movement activities associated with the
|
|
414
|
+
* Retrieves all movement activities associated with the account.
|
|
439
415
|
*
|
|
440
416
|
* Activities represent individual recording sessions and contain references to
|
|
441
417
|
* captured videos and analysis results. Use this to review past data or
|
|
@@ -507,7 +483,7 @@ export declare class ModelHealthService {
|
|
|
507
483
|
* const results = await client.downloadActivityResultData(activity, ["kinematics_mot"]);
|
|
508
484
|
*
|
|
509
485
|
* for (const result of results) {
|
|
510
|
-
* switch (result.
|
|
486
|
+
* switch (result.resultDataType) {
|
|
511
487
|
* case "kinematics_mot":
|
|
512
488
|
* // Use result.data directly as a .mot file
|
|
513
489
|
* break;
|
|
@@ -543,7 +519,7 @@ export declare class ModelHealthService {
|
|
|
543
519
|
* );
|
|
544
520
|
*
|
|
545
521
|
* for (const result of results) {
|
|
546
|
-
* switch (result.
|
|
522
|
+
* switch (result.resultDataType) {
|
|
547
523
|
* case "metrics":
|
|
548
524
|
* const json = JSON.parse(new TextDecoder().decode(result.data));
|
|
549
525
|
* break;
|
|
@@ -643,7 +619,7 @@ export declare class ModelHealthService {
|
|
|
643
619
|
* @example
|
|
644
620
|
* ```typescript
|
|
645
621
|
* const task = await client.startAnalysis(
|
|
646
|
-
*
|
|
622
|
+
* AnalysisType.CounterMovementJump,
|
|
647
623
|
* activity,
|
|
648
624
|
* session
|
|
649
625
|
* );
|
|
@@ -676,7 +652,7 @@ export declare class ModelHealthService {
|
|
|
676
652
|
* activity,
|
|
677
653
|
* ["metrics", "report"]
|
|
678
654
|
* );
|
|
679
|
-
* const metricsEntry = results.find((r) => r.
|
|
655
|
+
* const metricsEntry = results.find((r) => r.resultDataType === "metrics");
|
|
680
656
|
* if (metricsEntry?.data) {
|
|
681
657
|
* const metrics = JSON.parse(new TextDecoder().decode(metricsEntry.data));
|
|
682
658
|
* console.log("Metrics:", metrics);
|
|
@@ -690,11 +666,15 @@ export declare class ModelHealthService {
|
|
|
690
666
|
*/
|
|
691
667
|
getAnalysisStatus(task: AnalysisTask): Promise<AnalysisTaskStatus>;
|
|
692
668
|
/**
|
|
693
|
-
* Parse
|
|
669
|
+
* Parse a WASM response and normalise object keys to camelCase.
|
|
670
|
+
*
|
|
671
|
+
* The WASM layer serialises Rust structs using snake_case field names.
|
|
672
|
+
* This method converts them to idiomatic TypeScript camelCase before
|
|
673
|
+
* returning to the caller.
|
|
694
674
|
*
|
|
695
675
|
* @private
|
|
696
|
-
* @param value Value from WASM (
|
|
697
|
-
* @returns Parsed TypeScript object
|
|
676
|
+
* @param value Value from WASM (JsValue or JSON string)
|
|
677
|
+
* @returns Parsed, camelised TypeScript object
|
|
698
678
|
*/
|
|
699
679
|
private parseResponse;
|
|
700
680
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,17 +10,9 @@
|
|
|
10
10
|
* ```typescript
|
|
11
11
|
* import { ModelHealthService } from '@modelhealth/modelhealth';
|
|
12
12
|
*
|
|
13
|
-
* // Create and initialize client with API key
|
|
14
13
|
* const client = new ModelHealthService({ apiKey: "your-api-key-here" });
|
|
15
14
|
* await client.init();
|
|
16
15
|
*
|
|
17
|
-
* // Authenticate (optional - API key already provides authentication)
|
|
18
|
-
* const result = await client.login("user@example.com", "password");
|
|
19
|
-
* if (result === "verification_required") {
|
|
20
|
-
* await client.verify("123456", true);
|
|
21
|
-
* }
|
|
22
|
-
*
|
|
23
|
-
* // Get sessions
|
|
24
16
|
* const sessions = await client.sessionList();
|
|
25
17
|
* ```
|
|
26
18
|
*/
|
|
@@ -54,6 +46,53 @@ async function initWasm() {
|
|
|
54
46
|
})();
|
|
55
47
|
return wasmInitPromise;
|
|
56
48
|
}
|
|
49
|
+
// MARK: - Key Transformation Utilities
|
|
50
|
+
/**
|
|
51
|
+
* Convert a single snake_case string to camelCase.
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
function snakeToCamel(str) {
|
|
55
|
+
return str.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Convert a single camelCase string to snake_case.
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
function camelToSnake(str) {
|
|
62
|
+
return str.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Recursively convert all object keys from snake_case to camelCase.
|
|
66
|
+
* Used to normalise WASM responses to idiomatic TypeScript.
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
function camelizeKeys(value) {
|
|
70
|
+
if (Array.isArray(value))
|
|
71
|
+
return value.map(camelizeKeys);
|
|
72
|
+
if (value !== null && typeof value === "object") {
|
|
73
|
+
return Object.fromEntries(Object.entries(value).map(([k, v]) => [
|
|
74
|
+
snakeToCamel(k),
|
|
75
|
+
camelizeKeys(v),
|
|
76
|
+
]));
|
|
77
|
+
}
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Recursively convert all object keys from camelCase to snake_case.
|
|
82
|
+
* Used to convert TypeScript inputs back to the format expected by the WASM layer.
|
|
83
|
+
* @internal
|
|
84
|
+
*/
|
|
85
|
+
function decamelizeKeys(value) {
|
|
86
|
+
if (Array.isArray(value))
|
|
87
|
+
return value.map(decamelizeKeys);
|
|
88
|
+
if (value !== null && typeof value === "object") {
|
|
89
|
+
return Object.fromEntries(Object.entries(value).map(([k, v]) => [
|
|
90
|
+
camelToSnake(k),
|
|
91
|
+
decamelizeKeys(v),
|
|
92
|
+
]));
|
|
93
|
+
}
|
|
94
|
+
return value;
|
|
95
|
+
}
|
|
57
96
|
/**
|
|
58
97
|
* Model Health SDK Client for biomechanical analysis.
|
|
59
98
|
*
|
|
@@ -161,28 +200,9 @@ export class ModelHealthService {
|
|
|
161
200
|
}
|
|
162
201
|
}
|
|
163
202
|
// MARK: - Authentication
|
|
164
|
-
/**
|
|
165
|
-
* Checks if a user is currently authenticated.
|
|
166
|
-
*
|
|
167
|
-
* @returns `true` if authenticated, `false` otherwise
|
|
168
|
-
*
|
|
169
|
-
* @example
|
|
170
|
-
* ```typescript
|
|
171
|
-
* if (await client.isAuthenticated()) {
|
|
172
|
-
* // Proceed with authenticated operations
|
|
173
|
-
* const sessions = await client.sessionList();
|
|
174
|
-
* } else {
|
|
175
|
-
* // Show login screen
|
|
176
|
-
* }
|
|
177
|
-
* ```
|
|
178
|
-
*/
|
|
179
|
-
async isAuthenticated() {
|
|
180
|
-
this.ensureInitialized();
|
|
181
|
-
return await this.wasmClient.isAuthenticated();
|
|
182
|
-
}
|
|
183
203
|
// MARK: - Sessions
|
|
184
204
|
/**
|
|
185
|
-
* Retrieves all sessions for the
|
|
205
|
+
* Retrieves all sessions for the account (API key).
|
|
186
206
|
*
|
|
187
207
|
* @returns An array of `Session` objects. Returns an empty array if no sessions exist.
|
|
188
208
|
* @throws If the request fails due to network issues, authentication problems,
|
|
@@ -241,10 +261,10 @@ export class ModelHealthService {
|
|
|
241
261
|
* const session = await client.createSession();
|
|
242
262
|
*
|
|
243
263
|
* // Proceed with calibration
|
|
244
|
-
* const details = {
|
|
264
|
+
* const details: CheckerboardDetails = {
|
|
245
265
|
* rows: 4,
|
|
246
266
|
* columns: 5,
|
|
247
|
-
*
|
|
267
|
+
* squareSize: 35,
|
|
248
268
|
* placement: "perpendicular"
|
|
249
269
|
* };
|
|
250
270
|
* // await client.calibrateCamera(session, details, (status) => { ... });
|
|
@@ -274,10 +294,10 @@ export class ModelHealthService {
|
|
|
274
294
|
* ```typescript
|
|
275
295
|
* const session = await client.createSession();
|
|
276
296
|
*
|
|
277
|
-
* const details = {
|
|
297
|
+
* const details: CheckerboardDetails = {
|
|
278
298
|
* rows: 4, // Internal corners, not squares (for 5×6 board)
|
|
279
299
|
* columns: 5, // Internal corners, not squares (for 5×6 board)
|
|
280
|
-
*
|
|
300
|
+
* squareSize: 35, // Measured in millimeters
|
|
281
301
|
* placement: "perpendicular"
|
|
282
302
|
* };
|
|
283
303
|
*
|
|
@@ -292,7 +312,7 @@ export class ModelHealthService {
|
|
|
292
312
|
const jsCallback = (statusJson) => {
|
|
293
313
|
statusCallback(statusJson);
|
|
294
314
|
};
|
|
295
|
-
await wasmModule.calibrateCamera(this.config.apiKey, session, checkerboardDetails, jsCallback);
|
|
315
|
+
await wasmModule.calibrateCamera(this.config.apiKey, decamelizeKeys(session), decamelizeKeys(checkerboardDetails), jsCallback);
|
|
296
316
|
}
|
|
297
317
|
/**
|
|
298
318
|
* Captures the subject's neutral standing pose for model scaling.
|
|
@@ -325,11 +345,11 @@ export class ModelHealthService {
|
|
|
325
345
|
const jsCallback = (statusJson) => {
|
|
326
346
|
statusCallback(statusJson);
|
|
327
347
|
};
|
|
328
|
-
await wasmModule.calibrateNeutralPose(this.config.apiKey, subject, session, jsCallback);
|
|
348
|
+
await wasmModule.calibrateNeutralPose(this.config.apiKey, decamelizeKeys(subject), decamelizeKeys(session), jsCallback);
|
|
329
349
|
}
|
|
330
350
|
// MARK: - Subjects
|
|
331
351
|
/**
|
|
332
|
-
* Retrieves all subjects associated with the
|
|
352
|
+
* Retrieves all subjects associated with the account.
|
|
333
353
|
*
|
|
334
354
|
* Subjects represent individuals being monitored or assessed. Each subject
|
|
335
355
|
* contains demographic information, physical measurements, and categorization tags.
|
|
@@ -345,7 +365,7 @@ export class ModelHealthService {
|
|
|
345
365
|
* }
|
|
346
366
|
*
|
|
347
367
|
* // Filter by tags
|
|
348
|
-
* const athletes = subjects.filter(s => s.
|
|
368
|
+
* const athletes = subjects.filter(s => s.subjectTags.includes("athlete"));
|
|
349
369
|
* ```
|
|
350
370
|
*/
|
|
351
371
|
async subjectList() {
|
|
@@ -366,15 +386,15 @@ export class ModelHealthService {
|
|
|
366
386
|
*
|
|
367
387
|
* @example
|
|
368
388
|
* ```typescript
|
|
369
|
-
* const params = {
|
|
389
|
+
* const params: SubjectParameters = {
|
|
370
390
|
* name: "John Doe",
|
|
371
391
|
* weight: 75.0, // kilograms
|
|
372
392
|
* height: 180.0, // centimeters
|
|
373
|
-
*
|
|
393
|
+
* birthYear: 1990,
|
|
374
394
|
* gender: "man",
|
|
375
|
-
*
|
|
395
|
+
* sexAtBirth: "man",
|
|
376
396
|
* characteristics: "Regular training schedule",
|
|
377
|
-
*
|
|
397
|
+
* subjectTags: ["athlete"],
|
|
378
398
|
* terms: true
|
|
379
399
|
* };
|
|
380
400
|
*
|
|
@@ -387,7 +407,7 @@ export class ModelHealthService {
|
|
|
387
407
|
*/
|
|
388
408
|
async createSubject(parameters) {
|
|
389
409
|
this.ensureInitialized();
|
|
390
|
-
const result = await this.wasmClient.createSubject(parameters);
|
|
410
|
+
const result = await this.wasmClient.createSubject(decamelizeKeys(parameters));
|
|
391
411
|
return this.parseResponse(result);
|
|
392
412
|
}
|
|
393
413
|
// MARK: - Activity Management
|
|
@@ -476,7 +496,7 @@ export class ModelHealthService {
|
|
|
476
496
|
*/
|
|
477
497
|
async updateActivity(activity) {
|
|
478
498
|
this.ensureInitialized();
|
|
479
|
-
const result = await this.wasmClient.updateActivity(activity);
|
|
499
|
+
const result = await this.wasmClient.updateActivity(decamelizeKeys(activity));
|
|
480
500
|
return this.parseResponse(result);
|
|
481
501
|
}
|
|
482
502
|
/**
|
|
@@ -500,7 +520,7 @@ export class ModelHealthService {
|
|
|
500
520
|
*/
|
|
501
521
|
async deleteActivity(activity) {
|
|
502
522
|
this.ensureInitialized();
|
|
503
|
-
await this.wasmClient.deleteActivity(activity);
|
|
523
|
+
await this.wasmClient.deleteActivity(decamelizeKeys(activity));
|
|
504
524
|
}
|
|
505
525
|
/**
|
|
506
526
|
* Retrieves all available activity tags.
|
|
@@ -530,7 +550,7 @@ export class ModelHealthService {
|
|
|
530
550
|
}
|
|
531
551
|
// MARK: - Activities
|
|
532
552
|
/**
|
|
533
|
-
* Retrieves all movement activities associated with the
|
|
553
|
+
* Retrieves all movement activities associated with the account.
|
|
534
554
|
*
|
|
535
555
|
* Activities represent individual recording sessions and contain references to
|
|
536
556
|
* captured videos and analysis results. Use this to review past data or
|
|
@@ -586,7 +606,7 @@ export class ModelHealthService {
|
|
|
586
606
|
*/
|
|
587
607
|
async downloadActivityVideos(activity, version = "synced") {
|
|
588
608
|
this.ensureInitialized();
|
|
589
|
-
const result = await this.wasmClient.downloadTrialVideos(activity, version);
|
|
609
|
+
const result = await this.wasmClient.downloadTrialVideos(decamelizeKeys(activity), version);
|
|
590
610
|
const videos = [];
|
|
591
611
|
for (let i = 0; i < result.length; i++) {
|
|
592
612
|
videos.push(new Uint8Array(result[i]));
|
|
@@ -614,7 +634,7 @@ export class ModelHealthService {
|
|
|
614
634
|
* const results = await client.downloadActivityResultData(activity, ["kinematics_mot"]);
|
|
615
635
|
*
|
|
616
636
|
* for (const result of results) {
|
|
617
|
-
* switch (result.
|
|
637
|
+
* switch (result.resultDataType) {
|
|
618
638
|
* case "kinematics_mot":
|
|
619
639
|
* // Use result.data directly as a .mot file
|
|
620
640
|
* break;
|
|
@@ -635,7 +655,7 @@ export class ModelHealthService {
|
|
|
635
655
|
*/
|
|
636
656
|
async downloadActivityResultData(activity, dataTypes) {
|
|
637
657
|
this.ensureInitialized();
|
|
638
|
-
const result = await this.wasmClient.downloadActivityResultData(activity, dataTypes);
|
|
658
|
+
const result = await this.wasmClient.downloadActivityResultData(decamelizeKeys(activity), dataTypes);
|
|
639
659
|
return this.parseResponse(result);
|
|
640
660
|
}
|
|
641
661
|
/**
|
|
@@ -654,7 +674,7 @@ export class ModelHealthService {
|
|
|
654
674
|
* );
|
|
655
675
|
*
|
|
656
676
|
* for (const result of results) {
|
|
657
|
-
* switch (result.
|
|
677
|
+
* switch (result.resultDataType) {
|
|
658
678
|
* case "metrics":
|
|
659
679
|
* const json = JSON.parse(new TextDecoder().decode(result.data));
|
|
660
680
|
* break;
|
|
@@ -672,7 +692,7 @@ export class ModelHealthService {
|
|
|
672
692
|
*/
|
|
673
693
|
async downloadActivityAnalysisResultData(activity, dataTypes) {
|
|
674
694
|
this.ensureInitialized();
|
|
675
|
-
const result = await this.wasmClient.downloadTrialAnalysisResultData(activity, dataTypes);
|
|
695
|
+
const result = await this.wasmClient.downloadTrialAnalysisResultData(decamelizeKeys(activity), dataTypes);
|
|
676
696
|
return this.parseResponse(result);
|
|
677
697
|
}
|
|
678
698
|
// MARK: - Recording & Analysis
|
|
@@ -699,7 +719,7 @@ export class ModelHealthService {
|
|
|
699
719
|
*/
|
|
700
720
|
async record(activityName, session) {
|
|
701
721
|
this.ensureInitialized();
|
|
702
|
-
const result = await this.wasmClient.record(activityName, session);
|
|
722
|
+
const result = await this.wasmClient.record(activityName, decamelizeKeys(session));
|
|
703
723
|
return this.parseResponse(result);
|
|
704
724
|
}
|
|
705
725
|
/**
|
|
@@ -718,7 +738,7 @@ export class ModelHealthService {
|
|
|
718
738
|
*/
|
|
719
739
|
async stopRecording(session) {
|
|
720
740
|
this.ensureInitialized();
|
|
721
|
-
await this.wasmClient.stopRecording(session);
|
|
741
|
+
await this.wasmClient.stopRecording(decamelizeKeys(session));
|
|
722
742
|
}
|
|
723
743
|
/**
|
|
724
744
|
* Retrieves the current processing status of an activity.
|
|
@@ -752,7 +772,7 @@ export class ModelHealthService {
|
|
|
752
772
|
*/
|
|
753
773
|
async getStatus(activity) {
|
|
754
774
|
this.ensureInitialized();
|
|
755
|
-
const result = await this.wasmClient.getStatus(activity);
|
|
775
|
+
const result = await this.wasmClient.getStatus(decamelizeKeys(activity));
|
|
756
776
|
return this.parseResponse(result);
|
|
757
777
|
}
|
|
758
778
|
/**
|
|
@@ -770,7 +790,7 @@ export class ModelHealthService {
|
|
|
770
790
|
* @example
|
|
771
791
|
* ```typescript
|
|
772
792
|
* const task = await client.startAnalysis(
|
|
773
|
-
*
|
|
793
|
+
* AnalysisType.CounterMovementJump,
|
|
774
794
|
* activity,
|
|
775
795
|
* session
|
|
776
796
|
* );
|
|
@@ -781,7 +801,7 @@ export class ModelHealthService {
|
|
|
781
801
|
*/
|
|
782
802
|
async startAnalysis(analysisType, activity, session) {
|
|
783
803
|
this.ensureInitialized();
|
|
784
|
-
const result = await this.wasmClient.startAnalysis(analysisType, activity, session);
|
|
804
|
+
const result = await this.wasmClient.startAnalysis(analysisType, decamelizeKeys(activity), decamelizeKeys(session));
|
|
785
805
|
return this.parseResponse(result);
|
|
786
806
|
}
|
|
787
807
|
/**
|
|
@@ -807,7 +827,7 @@ export class ModelHealthService {
|
|
|
807
827
|
* activity,
|
|
808
828
|
* ["metrics", "report"]
|
|
809
829
|
* );
|
|
810
|
-
* const metricsEntry = results.find((r) => r.
|
|
830
|
+
* const metricsEntry = results.find((r) => r.resultDataType === "metrics");
|
|
811
831
|
* if (metricsEntry?.data) {
|
|
812
832
|
* const metrics = JSON.parse(new TextDecoder().decode(metricsEntry.data));
|
|
813
833
|
* console.log("Metrics:", metrics);
|
|
@@ -821,22 +841,24 @@ export class ModelHealthService {
|
|
|
821
841
|
*/
|
|
822
842
|
async getAnalysisStatus(task) {
|
|
823
843
|
this.ensureInitialized();
|
|
824
|
-
const result = await this.wasmClient.getAnalysisStatus(task);
|
|
844
|
+
const result = await this.wasmClient.getAnalysisStatus(decamelizeKeys(task));
|
|
825
845
|
return this.parseResponse(result);
|
|
826
846
|
}
|
|
827
847
|
// MARK: - Utilities
|
|
828
848
|
/**
|
|
829
|
-
* Parse
|
|
849
|
+
* Parse a WASM response and normalise object keys to camelCase.
|
|
850
|
+
*
|
|
851
|
+
* The WASM layer serialises Rust structs using snake_case field names.
|
|
852
|
+
* This method converts them to idiomatic TypeScript camelCase before
|
|
853
|
+
* returning to the caller.
|
|
830
854
|
*
|
|
831
855
|
* @private
|
|
832
|
-
* @param value Value from WASM (
|
|
833
|
-
* @returns Parsed TypeScript object
|
|
856
|
+
* @param value Value from WASM (JsValue or JSON string)
|
|
857
|
+
* @returns Parsed, camelised TypeScript object
|
|
834
858
|
*/
|
|
835
859
|
parseResponse(value) {
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
}
|
|
839
|
-
return value;
|
|
860
|
+
const parsed = typeof value === "string" ? JSON.parse(value) : value;
|
|
861
|
+
return camelizeKeys(parsed);
|
|
840
862
|
}
|
|
841
863
|
}
|
|
842
864
|
// MARK: - Exports
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|