@time2win/t2w 1.4.22 → 1.5.0

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.5.0 - 2025-06-12
9
+ ### Added
10
+ ```getEventDataWithCache()``` method to fetch event data with caching support
11
+
12
+ ## 1.4.23 - 2025-05-22
13
+ ### Added
14
+ field ```gender``` to team types
15
+
8
16
  ## 1.4.22 - 2025-04-09
9
17
  ### Added
10
18
  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)
package/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export default class Time2WinAPI {
5
5
  private readonly pageSize;
6
6
  constructor(apiKey: string, pageSize?: number);
7
7
  getEventData(eventId: number, dataExtra?: ('prices' | 'splits' | 'categories' | 'attributes')[]): Promise<T2WEvent>;
8
+ getEventDataWithCache(eventId: number, dataExtra?: ('prices' | 'splits' | 'categories' | 'attributes')[], maxAge?: number): Promise<T2WEvent>;
8
9
  getTeamResult(eventId: number, raceId: number, dataExtra?: ('splits' | 'attributes' | 'laps')[], teamType?: 'M' | 'F' | 'U', page?: number): Promise<T2WTeamResultsResponse>;
9
10
  getTeamsWithMembers(eventId: number, raceId?: number, dataExtra?: ('teammembers' | 'attributes')[], page?: number): Promise<T2WTeamResponse>;
10
11
  getIndividualResults(eventId: number, raceId: number, dataExtra?: ('splits' | 'laps' | 'positions' | 'attributes')[], gender?: 'M' | 'F' | 'U', page?: number): Promise<T2WIndividualResultResponse>;
package/index.js CHANGED
@@ -60,7 +60,46 @@ var Time2WinAPI = /** @class */ (function () {
60
60
  return __generator(this, function (_a) {
61
61
  return [2 /*return*/, new Promise(function (resolve, reject) {
62
62
  var queryParams = { 'data_extra': (dataExtra === null || dataExtra === void 0 ? void 0 : dataExtra.join(',')) || '', 'page_size': _this.pageSize };
63
- fetch(_this.getUrl("event/".concat(eventId, "/eventdata"), queryParams))
63
+ fetch(_this.getUrl(_this.apiUrl, "event/".concat(eventId, "/eventdata"), queryParams))
64
+ .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
65
+ var body;
66
+ return __generator(this, function (_a) {
67
+ switch (_a.label) {
68
+ case 0: return [4 /*yield*/, response.json()];
69
+ case 1:
70
+ body = _a.sent();
71
+ if (response.status === 403) {
72
+ reject(body);
73
+ return [2 /*return*/];
74
+ }
75
+ // Convert strings to dates
76
+ body.races = body.races.map(function (r) {
77
+ return __assign(__assign({}, r), { starttime: new Date(r.starttime) });
78
+ });
79
+ body.registration_start = new Date("".concat(body.registration_start, "Z"));
80
+ body.registration_end = new Date("".concat(body.registration_end, "Z"));
81
+ resolve(body);
82
+ return [2 /*return*/];
83
+ }
84
+ });
85
+ }); })
86
+ .catch(function (reason) { return reject(reason); });
87
+ })];
88
+ });
89
+ });
90
+ };
91
+ Time2WinAPI.prototype.getEventDataWithCache = function (eventId, dataExtra, maxAge) {
92
+ if (maxAge === void 0) { maxAge = 0; }
93
+ return __awaiter(this, void 0, void 0, function () {
94
+ var _this = this;
95
+ return __generator(this, function (_a) {
96
+ return [2 /*return*/, new Promise(function (resolve, reject) {
97
+ var queryParams = {
98
+ data_extra: (dataExtra === null || dataExtra === void 0 ? void 0 : dataExtra.join(',')) || '',
99
+ page_size: _this.pageSize,
100
+ max_age: maxAge
101
+ };
102
+ fetch(_this.getUrl('https://t2wserver.ddns.net/server/{{route}}', "events/".concat(eventId), queryParams))
64
103
  .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
65
104
  var body;
66
105
  return __generator(this, function (_a) {
@@ -101,7 +140,7 @@ var Time2WinAPI = /** @class */ (function () {
101
140
  'team_type': teamType || '',
102
141
  'page_size': _this.pageSize
103
142
  };
104
- fetch(_this.getUrl("results/".concat(eventId, "/teams"), queryParams))
143
+ fetch(_this.getUrl(_this.apiUrl, "results/".concat(eventId, "/teams"), queryParams))
105
144
  .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
106
145
  var body, _a, _b, _c;
107
146
  var _d;
@@ -126,7 +165,7 @@ var Time2WinAPI = /** @class */ (function () {
126
165
  _e.label = 3;
127
166
  case 3:
128
167
  body.list = body.list.map(function (p) {
129
- return __assign(__assign({}, p), { racenumNumeric: _this.getNumericBib(p.racenum) });
168
+ return __assign(__assign({}, p), { racenumNumeric: _this.getNumericBib(p.racenum), gender: p.team_type });
130
169
  });
131
170
  resolve(body);
132
171
  return [2 /*return*/];
@@ -150,7 +189,7 @@ var Time2WinAPI = /** @class */ (function () {
150
189
  'page_size': _this.pageSize,
151
190
  page: page
152
191
  };
153
- fetch(_this.getUrl("participants/".concat(eventId, "/teams"), queryParams))
192
+ fetch(_this.getUrl(_this.apiUrl, "participants/".concat(eventId, "/teams"), queryParams))
154
193
  .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
155
194
  var body, _a, _b, _c;
156
195
  var _d;
@@ -177,7 +216,7 @@ var Time2WinAPI = /** @class */ (function () {
177
216
  case 3:
178
217
  body.list = body.list.map(function (p) {
179
218
  var _a;
180
- return __assign(__assign({}, p), { racenumNumeric: _this.getNumericBib(p.racenum), members: ((_a = p.members) === null || _a === void 0 ? void 0 : _a.map(function (m) {
219
+ return __assign(__assign({}, p), { racenumNumeric: _this.getNumericBib(p.racenum), gender: p.team_type, members: ((_a = p.members) === null || _a === void 0 ? void 0 : _a.map(function (m) {
181
220
  return __assign(__assign({}, m), { racenumNumeric: _this.getNumericBib(m.racenum) });
182
221
  })) || [] });
183
222
  });
@@ -233,7 +272,7 @@ var Time2WinAPI = /** @class */ (function () {
233
272
  to.setDate(to.getDate() + 7);
234
273
  }
235
274
  return [2 /*return*/, new Promise(function (resolve, reject) {
236
- fetch(_this.getUrl("/events/list?from=".concat(_this.formatDate(from), "&to=").concat(_this.formatDate(to), "&page=").concat(page)))
275
+ fetch(_this.getUrl(_this.apiUrl, "/events/list?from=".concat(_this.formatDate(from), "&to=").concat(_this.formatDate(to), "&page=").concat(page)))
237
276
  .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
238
277
  var body, _a, _b, _c;
239
278
  var _d;
@@ -280,7 +319,7 @@ var Time2WinAPI = /** @class */ (function () {
280
319
  'gender': gender || '',
281
320
  'page_size': _this.pageSize
282
321
  };
283
- fetch(_this.getUrl("results/".concat(event.event_id, "/individuals"), queryParams))
322
+ fetch(_this.getUrl(_this.apiUrl, "results/".concat(event.event_id, "/individuals"), queryParams))
284
323
  .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
285
324
  var body, _a, _b, _c;
286
325
  var _d;
@@ -334,14 +373,16 @@ var Time2WinAPI = /** @class */ (function () {
334
373
  page: page,
335
374
  'page_size': this.pageSize
336
375
  };
337
- fetch(this.getUrl("/participants/".concat(event.event_id, "/individuals"), queryParams))
376
+ fetch(this.getUrl(this.apiUrl, "/participants/".concat(event.event_id, "/individuals"), queryParams))
338
377
  .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
339
378
  var body, _a, _b, _c;
340
379
  var _d;
341
380
  var _this = this;
342
381
  return __generator(this, function (_e) {
343
382
  switch (_e.label) {
344
- case 0: return [4 /*yield*/, response.json()];
383
+ case 0:
384
+ console.log(response.status);
385
+ return [4 /*yield*/, response.json()];
345
386
  case 1:
346
387
  body = _e.sent();
347
388
  if (response.status === 403) {
@@ -375,8 +416,8 @@ var Time2WinAPI = /** @class */ (function () {
375
416
  });
376
417
  });
377
418
  };
378
- Time2WinAPI.prototype.getUrl = function (route, queryParams) {
379
- var url = this.apiUrl.replace('{{route}}', route);
419
+ Time2WinAPI.prototype.getUrl = function (apiUrl, route, queryParams) {
420
+ var url = apiUrl.replace('{{route}}', route);
380
421
  if (url.endsWith('/')) {
381
422
  url = url.slice(0, -1);
382
423
  }
package/models.d.ts CHANGED
@@ -98,6 +98,7 @@ export interface T2WTeamResultSplit {
98
98
  export interface T2WTeamResult {
99
99
  id: number;
100
100
  team_type: gender;
101
+ gender: gender;
101
102
  name_team: string;
102
103
  organization: string | null;
103
104
  race_id: number;
@@ -146,6 +147,7 @@ export interface T2WTeam {
146
147
  name_team: string;
147
148
  organization: string | null;
148
149
  team_type: gender;
150
+ gender: gender;
149
151
  attr_1: string | null;
150
152
  attr_2: string | null;
151
153
  members: T2WTeamMember[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@time2win/t2w",
3
- "version": "1.4.22",
3
+ "version": "1.5.0",
4
4
  "description": "providing latest-state models and advanced methods to interact with the T2W API",
5
5
  "keywords": [
6
6
  "time2win",
@@ -11,7 +11,7 @@
11
11
  "main": "index.js",
12
12
  "types": "models.d.ts, index.d.ts",
13
13
  "scripts": {
14
- "start:dev": "nodemon --watch src src/index.ts",
14
+ "start:dev": "nodemon --watch src src/test.ts",
15
15
  "start": "node dist/index.js",
16
16
  "build": "tsc",
17
17
  "publish": "npm publish --access public"
package/test.js CHANGED
@@ -5,6 +5,9 @@ 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(function (res) {
9
- console.log(res.list[0]);
10
- });
8
+ // api.getIndividualResults(38, 161).then(res => {
9
+ // console.log(res.list[0]);
10
+ // });
11
+ api.getEventDataWithCache(664, ['splits'], 5).then(function (res) {
12
+ console.log(res);
13
+ }).catch(console.log);