@time2win/t2w 1.4.20 → 1.4.22

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/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## 1.4.22 - 2025-04-09
9
+ ### Added
10
+ wrapper methods for ```getParticipantInfos()``` and ```getIndividualResults()``` which are called by the user, internally the fetch methods will be called (prevents to call getEventData multiple times)
11
+
12
+ ## 1.4.21 - 2025-03-13
13
+ ### Modified
14
+ ```paceBrutto``` ```paceNetto``` ```speedBrutto``` ```speedNetto``` properties to support laps
15
+
8
16
  ## 1.4.20 - 2025-03-13
9
17
  ### Added
10
18
  ```paceBrutto``` ```paceNetto``` ```speedBrutto``` ```speedNetto``` properties for individual result
package/index.d.ts CHANGED
@@ -13,6 +13,8 @@ export default class Time2WinAPI {
13
13
  * if no params are given, the events in the next seven days are returned
14
14
  * */
15
15
  getUpcomingEvents(from?: Date, to?: Date, page?: number): Promise<T2WEventResponse>;
16
+ private fetchIndividualResults;
17
+ private fetchParticipantInfos;
16
18
  private getUrl;
17
19
  private calculateAge;
18
20
  private formatDate;
package/index.js CHANGED
@@ -194,116 +194,28 @@ var Time2WinAPI = /** @class */ (function () {
194
194
  Time2WinAPI.prototype.getIndividualResults = function (eventId, raceId, dataExtra, gender, page) {
195
195
  if (page === void 0) { page = 1; }
196
196
  return __awaiter(this, void 0, void 0, function () {
197
- var _this = this;
198
- return __generator(this, function (_a) {
199
- return [2 /*return*/, new Promise(function (resolve, reject) {
200
- var queryParams = {
201
- 'race_id': raceId,
202
- 'data_extra': (dataExtra === null || dataExtra === void 0 ? void 0 : dataExtra.join(',')) || '',
203
- page: page,
204
- 'gender': gender || '',
205
- 'page_size': _this.pageSize
206
- };
207
- fetch(_this.getUrl("results/".concat(eventId, "/individuals"), queryParams))
208
- .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
209
- var body, event, _a, _b, _c;
210
- var _d;
211
- var _this = this;
212
- return __generator(this, function (_e) {
213
- switch (_e.label) {
214
- case 0: return [4 /*yield*/, response.json()];
215
- case 1:
216
- body = _e.sent();
217
- if (response.status === 403) {
218
- reject(body);
219
- return [2 /*return*/];
220
- }
221
- return [4 /*yield*/, this.getEventData(eventId, ['splits'])];
222
- case 2:
223
- event = _e.sent();
224
- if (!(body.page < body.page_total)) return [3 /*break*/, 4];
225
- _b = (_a = (_d = body.list).push).apply;
226
- _c = [_d];
227
- return [4 /*yield*/, this.getIndividualResults(eventId, raceId, dataExtra, gender, body.page + 1)];
228
- case 3:
229
- _b.apply(_a, _c.concat([(_e.sent()).list]));
230
- body.page = Math.ceil(body.list.length / body.page_size);
231
- resolve(body);
232
- _e.label = 4;
233
- case 4:
234
- body.list = body.list.map(function (p) {
235
- return __assign(__assign({}, p), { birthdate: p.birthdate ? new Date(p.birthdate) : null, racenumNumeric: _this.getNumericBib(p.racenum), speedNetto: _this.calculateSpeed(p, event, 'speed', 'netto') + ' km/h', speedBrutto: _this.calculateSpeed(p, event, 'speed', 'brutto') + ' km/h', paceNetto: _this.calculateSpeed(p, event, 'pace', 'netto') + ' min/km', paceBrutto: _this.calculateSpeed(p, event, 'pace', 'brutto') + ' min/km' });
236
- });
237
- resolve(body);
238
- return [2 /*return*/];
239
- }
240
- });
241
- }); })
242
- .catch(function (reason) { return reject(reason); });
243
- })];
197
+ var _a;
198
+ return __generator(this, function (_b) {
199
+ switch (_b.label) {
200
+ case 0:
201
+ _a = this.fetchIndividualResults;
202
+ return [4 /*yield*/, this.getEventData(eventId, ['splits'])];
203
+ case 1: return [2 /*return*/, _a.apply(this, [_b.sent(), raceId, dataExtra, gender, page])];
204
+ }
244
205
  });
245
206
  });
246
207
  };
247
208
  Time2WinAPI.prototype.getParticipantInfos = function (eventId, raceId, dataExtra, gender, page) {
248
209
  if (page === void 0) { page = 1; }
249
210
  return __awaiter(this, void 0, void 0, function () {
250
- var _this = this;
251
- return __generator(this, function (_a) {
252
- return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
253
- var queryParams, races;
254
- var _this = this;
255
- return __generator(this, function (_a) {
256
- switch (_a.label) {
257
- case 0:
258
- queryParams = {
259
- 'race_id': raceId || '',
260
- 'data_extra': (dataExtra === null || dataExtra === void 0 ? void 0 : dataExtra.join(',')) || '',
261
- gender: gender || '',
262
- page: page,
263
- 'page_size': this.pageSize
264
- };
265
- return [4 /*yield*/, this.getEventData(eventId)];
266
- case 1:
267
- races = (_a.sent()).races;
268
- fetch(this.getUrl("/participants/".concat(eventId, "/individuals"), queryParams))
269
- .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
270
- var body, _a, _b, _c;
271
- var _d;
272
- var _this = this;
273
- return __generator(this, function (_e) {
274
- switch (_e.label) {
275
- case 0: return [4 /*yield*/, response.json()];
276
- case 1:
277
- body = _e.sent();
278
- if (response.status === 403) {
279
- reject(body);
280
- return [2 /*return*/];
281
- }
282
- if (!body.page_more) return [3 /*break*/, 3];
283
- _b = (_a = (_d = body.list).push).apply;
284
- _c = [_d];
285
- return [4 /*yield*/, this.getParticipantInfos(eventId, raceId, dataExtra, gender, body.page + 1)];
286
- case 2:
287
- _b.apply(_a, _c.concat([(_e.sent()).list]));
288
- body.page_more = false;
289
- body.page = Math.ceil(body.list.length / body.page_size);
290
- resolve(body);
291
- _e.label = 3;
292
- case 3:
293
- body.list = body.list.map(function (p) {
294
- var race = races.find(function (r) { return r.race_id === p.race_id; });
295
- return __assign(__assign({}, p), { birthdate: p.birthdate ? new Date(p.birthdate) : null, age: p.birthdate && race ? _this.calculateAge(new Date(p.birthdate), race.starttime) : null, year: p.birthdate ? new Date(p.birthdate).getFullYear() : null, order_date: p.order_date ? new Date(p.order_date) : null, racenumNumeric: _this.getNumericBib(p.racenum) });
296
- });
297
- resolve(body);
298
- return [2 /*return*/];
299
- }
300
- });
301
- }); })
302
- .catch(function (reason) { return reject(reason); });
303
- return [2 /*return*/];
304
- }
305
- });
306
- }); })];
211
+ var _a;
212
+ return __generator(this, function (_b) {
213
+ switch (_b.label) {
214
+ case 0:
215
+ _a = this.fetchParticipantInfos;
216
+ return [4 /*yield*/, this.getEventData(eventId)];
217
+ case 1: return [2 /*return*/, _a.apply(this, [_b.sent(), raceId, dataExtra, gender, page])];
218
+ }
307
219
  });
308
220
  });
309
221
  };
@@ -355,6 +267,114 @@ var Time2WinAPI = /** @class */ (function () {
355
267
  });
356
268
  });
357
269
  };
270
+ Time2WinAPI.prototype.fetchIndividualResults = function (event, raceId, dataExtra, gender, page) {
271
+ if (page === void 0) { page = 1; }
272
+ return __awaiter(this, void 0, void 0, function () {
273
+ var _this = this;
274
+ return __generator(this, function (_a) {
275
+ return [2 /*return*/, new Promise(function (resolve, reject) {
276
+ var queryParams = {
277
+ 'race_id': raceId,
278
+ 'data_extra': (dataExtra === null || dataExtra === void 0 ? void 0 : dataExtra.join(',')) || '',
279
+ page: page,
280
+ 'gender': gender || '',
281
+ 'page_size': _this.pageSize
282
+ };
283
+ fetch(_this.getUrl("results/".concat(event.event_id, "/individuals"), queryParams))
284
+ .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
285
+ var body, _a, _b, _c;
286
+ var _d;
287
+ var _this = this;
288
+ var _e;
289
+ return __generator(this, function (_f) {
290
+ switch (_f.label) {
291
+ case 0: return [4 /*yield*/, response.json()];
292
+ case 1:
293
+ body = _f.sent();
294
+ if (response.status === 403) {
295
+ reject(body);
296
+ return [2 /*return*/];
297
+ }
298
+ if (!(body.page < body.page_total)) return [3 /*break*/, 3];
299
+ _b = (_a = (_d = body.list).push).apply;
300
+ _c = [_d];
301
+ return [4 /*yield*/, this.fetchIndividualResults(event, raceId, dataExtra, gender, body.page + 1)];
302
+ case 2:
303
+ _b.apply(_a, _c.concat([(_f.sent()).list]));
304
+ body.page = Math.ceil(body.list.length / body.page_size);
305
+ resolve(body);
306
+ _f.label = 3;
307
+ case 3:
308
+ body.list = (_e = body.list) === null || _e === void 0 ? void 0 : _e.map(function (p) {
309
+ return __assign(__assign({}, p), { birthdate: p.birthdate ? new Date(p.birthdate) : null, racenumNumeric: _this.getNumericBib(p.racenum), speedNetto: _this.calculateSpeed(p, event, 'speed', 'netto') + ' km/h', speedBrutto: _this.calculateSpeed(p, event, 'speed', 'brutto') + ' km/h', paceNetto: _this.calculateSpeed(p, event, 'pace', 'netto') + ' min/km', paceBrutto: _this.calculateSpeed(p, event, 'pace', 'brutto') + ' min/km' });
310
+ });
311
+ resolve(body);
312
+ return [2 /*return*/];
313
+ }
314
+ });
315
+ }); })
316
+ .catch(function (reason) { return reject(reason); });
317
+ })];
318
+ });
319
+ });
320
+ };
321
+ Time2WinAPI.prototype.fetchParticipantInfos = function (event, raceId, dataExtra, gender, page) {
322
+ if (page === void 0) { page = 1; }
323
+ return __awaiter(this, void 0, void 0, function () {
324
+ var _this = this;
325
+ return __generator(this, function (_a) {
326
+ return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
327
+ var queryParams;
328
+ var _this = this;
329
+ return __generator(this, function (_a) {
330
+ queryParams = {
331
+ 'race_id': raceId || '',
332
+ 'data_extra': (dataExtra === null || dataExtra === void 0 ? void 0 : dataExtra.join(',')) || '',
333
+ gender: gender || '',
334
+ page: page,
335
+ 'page_size': this.pageSize
336
+ };
337
+ fetch(this.getUrl("/participants/".concat(event.event_id, "/individuals"), queryParams))
338
+ .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
339
+ var body, _a, _b, _c;
340
+ var _d;
341
+ var _this = this;
342
+ return __generator(this, function (_e) {
343
+ switch (_e.label) {
344
+ case 0: return [4 /*yield*/, response.json()];
345
+ case 1:
346
+ body = _e.sent();
347
+ if (response.status === 403) {
348
+ reject(body);
349
+ return [2 /*return*/];
350
+ }
351
+ if (!body.page_more) return [3 /*break*/, 3];
352
+ _b = (_a = (_d = body.list).push).apply;
353
+ _c = [_d];
354
+ return [4 /*yield*/, this.fetchParticipantInfos(event, raceId, dataExtra, gender, body.page + 1)];
355
+ case 2:
356
+ _b.apply(_a, _c.concat([(_e.sent()).list]));
357
+ body.page_more = false;
358
+ body.page = Math.ceil(body.list.length / body.page_size);
359
+ resolve(body);
360
+ _e.label = 3;
361
+ case 3:
362
+ body.list = body.list.map(function (p) {
363
+ var race = event.races.find(function (r) { return r.race_id === p.race_id; });
364
+ return __assign(__assign({}, p), { birthdate: p.birthdate ? new Date(p.birthdate) : null, age: p.birthdate && race ? _this.calculateAge(new Date(p.birthdate), race.starttime) : null, year: p.birthdate ? new Date(p.birthdate).getFullYear() : null, order_date: p.order_date ? new Date(p.order_date) : null, racenumNumeric: _this.getNumericBib(p.racenum) });
365
+ });
366
+ resolve(body);
367
+ return [2 /*return*/];
368
+ }
369
+ });
370
+ }); })
371
+ .catch(function (reason) { return reject(reason); });
372
+ return [2 /*return*/];
373
+ });
374
+ }); })];
375
+ });
376
+ });
377
+ };
358
378
  Time2WinAPI.prototype.getUrl = function (route, queryParams) {
359
379
  var url = this.apiUrl.replace('{{route}}', route);
360
380
  if (url.endsWith('/')) {
@@ -393,18 +413,19 @@ var Time2WinAPI = /** @class */ (function () {
393
413
  var time = timeType === 'netto' ? p.finishtime_fromchip_ms : p.finishtime_fromgun_ms;
394
414
  if (!race || !time)
395
415
  return '-';
416
+ var distance = race.distance * (p.laps_count || 1);
396
417
  // calculate speed in km/h
397
418
  if (returnType === 'speed') {
398
419
  // Convert time from milliseconds to hours
399
420
  var timeHours = time / (1000 * 60 * 60);
400
421
  // Convert distance from meters to kilometers
401
- var distanceKm = race.distance / 1000;
422
+ var distanceKm = distance / 1000;
402
423
  // Calculate speed in km/h
403
424
  return (distanceKm / timeHours).toFixed(2).replace('.00', '').replace('.', ',');
404
425
  }
405
426
  if (returnType === 'pace') {
406
427
  // Calculate pace in seconds per km
407
- var paceSecondsPerKm = (time / 1000) / (race.distance / 1000);
428
+ var paceSecondsPerKm = (time / 1000) / (distance / 1000);
408
429
  var paceMinutes = Math.floor(paceSecondsPerKm / 60);
409
430
  var paceSeconds = Math.round(paceSecondsPerKm % 60);
410
431
  // Format pace as mm:ss/km
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@time2win/t2w",
3
- "version": "1.4.20",
3
+ "version": "1.4.22",
4
4
  "description": "providing latest-state models and advanced methods to interact with the T2W API",
5
5
  "keywords": [
6
6
  "time2win",
package/test.js CHANGED
@@ -5,4 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  var index_1 = __importDefault(require("./index"));
7
7
  var api = new index_1.default('09f006ca-23ee-44da-bec5-4372580f4113');
8
- api.getIndividualResults(38, 161).then(console.log);
8
+ api.getIndividualResults(38, 161).then(function (res) {
9
+ console.log(res.list[0]);
10
+ });