@gooin/garmin-connect 1.4.4 → 1.6.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.
Files changed (38) hide show
  1. package/README.md +225 -35
  2. package/dist/common/CFClient.d.ts +22 -0
  3. package/dist/common/CFClient.js +137 -140
  4. package/dist/common/CFClient.js.map +1 -0
  5. package/dist/common/DateUtils.d.ts +1 -0
  6. package/dist/common/DateUtils.js +11 -10
  7. package/dist/common/DateUtils.js.map +1 -0
  8. package/dist/common/HttpClient.d.ts +34 -0
  9. package/dist/common/HttpClient.js +299 -0
  10. package/dist/common/HttpClient.js.map +1 -0
  11. package/dist/garmin/GarminConnect.d.ts +40 -0
  12. package/dist/garmin/GarminConnect.js +178 -438
  13. package/dist/garmin/GarminConnect.js.map +1 -0
  14. package/dist/garmin/UrlClass.d.ts +25 -0
  15. package/dist/garmin/UrlClass.js +64 -0
  16. package/dist/garmin/UrlClass.js.map +1 -0
  17. package/dist/garmin/Urls.d.ts +64 -0
  18. package/dist/garmin/Urls.js +104 -102
  19. package/dist/garmin/Urls.js.map +1 -0
  20. package/dist/garmin/types.d.ts +706 -0
  21. package/dist/garmin/types.js +17 -0
  22. package/dist/garmin/types.js.map +1 -0
  23. package/dist/garmin/workouts/Running.d.ts +16 -0
  24. package/dist/garmin/workouts/Running.js +47 -53
  25. package/dist/garmin/workouts/Running.js.map +1 -0
  26. package/dist/garmin/workouts/templates/RunningTemplate.d.ts +68 -0
  27. package/dist/garmin/workouts/templates/RunningTemplate.js +78 -48
  28. package/dist/garmin/workouts/templates/RunningTemplate.js.map +1 -0
  29. package/dist/index.d.ts +1 -0
  30. package/dist/index.js +9 -3
  31. package/dist/index.js.map +1 -0
  32. package/dist/utils.d.ts +3 -0
  33. package/dist/utils.js +46 -0
  34. package/dist/utils.js.map +1 -0
  35. package/examples/example.js +21 -6
  36. package/package.json +66 -51
  37. package/dist/common/Client.js +0 -189
  38. package/dist/garmin/workouts/index.js +0 -5
@@ -1,438 +1,178 @@
1
- const appRoot = require('app-root-path');
2
- const fs = require('fs');
3
-
4
- let config = {};
5
- try {
6
- // eslint-disable-next-line
7
- config = require(`${appRoot}/garmin.config.json`);
8
- } catch (e) {
9
- // Do nothing
10
- }
11
-
12
- const CFClient = require('../common/CFClient');
13
- const { Running } = require('./workouts');
14
- const { toDateString } = require('../common/DateUtils');
15
- const urls = require('./Urls');
16
-
17
- const {
18
- username: configUsername,
19
- password: configPassword,
20
- } = config;
21
-
22
- const credentials = {
23
- username: configUsername,
24
- password: configPassword,
25
- embed: 'false',
26
- };
27
-
28
- class GarminConnect {
29
- constructor() {
30
- const headers = {
31
- origin: urls.GARMIN_SSO_ORIGIN,
32
- nk: 'NT',
33
- };
34
- this.client = new CFClient(headers);
35
- this.userHash = undefined;
36
- this.listeners = {};
37
- this.events = { sessionChange: 'sessionChange' };
38
- }
39
-
40
- get sessionJson() {
41
- const cookies = this.client.serializeCookies();
42
- return { cookies, userHash: this.userHash };
43
- }
44
-
45
- set sessionJson(json) {
46
- const {
47
- cookies,
48
- userHash,
49
- } = json || {};
50
- if (cookies && userHash) {
51
- this.userHash = userHash;
52
- this.client.importCookies(cookies);
53
- }
54
- }
55
-
56
- /**
57
- * Add an event listener callback
58
- * @param event
59
- * @param callback
60
- */
61
- on(event, callback) {
62
- if (event && callback && typeof event === 'string' && typeof callback === 'function') {
63
- if (!this.listeners[event]) {
64
- this.listeners[event] = [];
65
- }
66
- this.listeners[event].push(callback);
67
- }
68
- }
69
-
70
- /**
71
- * Method for triggering any event
72
- * @param event
73
- * @param data
74
- */
75
- triggerEvent(event, data) {
76
- const callbacks = this.listeners[event] || [];
77
- callbacks.forEach((cb) => cb(data));
78
- }
79
-
80
- /**
81
- * Add a callback to the 'sessionChange' event
82
- * @param callback
83
- */
84
- onSessionChange(callback) {
85
- this.on(this.events.sessionChange, callback);
86
- }
87
-
88
- /**
89
- * Restore an old session from storage and fallback to regular login
90
- * @param json
91
- * @param username
92
- * @param password
93
- * @returns {Promise<GarminConnect>}
94
- */
95
- async restoreOrLogin(json, username, password) {
96
- return this.restore(json).catch((e) => {
97
- console.warn(e);
98
- return this.login(username, password);
99
- });
100
- }
101
-
102
- /**
103
- * Restore an old session from storage
104
- * @param json
105
- * @returns {Promise<GarminConnect>}
106
- */
107
- async restore(json) {
108
- this.sessionJson = json;
109
- try {
110
- const info = await this.getUserInfo();
111
- const { displayName } = info || {};
112
- if (displayName && displayName === this.userHash) {
113
- // Session restoration was successful
114
- return this;
115
- }
116
- throw new Error('Unable to restore session, user hash do not match');
117
- } catch (e) {
118
- throw new Error(`Unable to restore session due to: ${e}`);
119
- }
120
- }
121
-
122
- /**
123
- * Login to Garmin Connect
124
- * @param username
125
- * @param password
126
- * @returns {Promise<*>}
127
- */
128
- async login(username, password) {
129
- let tempCredentials = { ...credentials, rememberme: 'on' };
130
- if (username && password) {
131
- tempCredentials = {
132
- ...credentials, username, password, rememberme: 'on',
133
- };
134
- }
135
- await this.client.get(urls.SIGNIN_URL);
136
- await this.client.post(urls.SIGNIN_URL, tempCredentials);
137
- const userPreferences = await this.getUserInfo();
138
- const { displayName } = userPreferences;
139
- this.userHash = displayName;
140
- return this;
141
- }
142
-
143
- // User info
144
- /**
145
- * Get basic user information
146
- * @returns {Promise<*>}
147
- */
148
- async getUserInfo() {
149
- return this.get(urls.userInfo());
150
- }
151
-
152
- /**
153
- * Get social user information
154
- * @returns {Promise<*>}
155
- */
156
- async getSocialProfile() {
157
- return this.get(urls.socialProfile(this.userHash));
158
- }
159
-
160
- /**
161
- * Get a list of all social connections
162
- * @returns {Promise<*>}
163
- */
164
- async getSocialConnections() {
165
- return this.get(urls.socialConnections(this.userHash));
166
- }
167
-
168
- // Devices
169
- /**
170
- * Get a list of all registered devices
171
- * @returns {Promise<*>}
172
- */
173
- async getDeviceInfo() {
174
- return this.get(urls.deviceInfo(this.userHash));
175
- }
176
-
177
- // Sleep data
178
- /**
179
- * Get detailed sleep data for a specific date
180
- * @param date
181
- * @returns {Promise<*>}
182
- */
183
- async getSleepData(date = new Date()) {
184
- const dateString = toDateString(date);
185
- return this.get(urls.dailySleepData(this.userHash), { date: dateString });
186
- }
187
-
188
- /**
189
- * Get sleep data summary for a specific date
190
- * @param date
191
- * @returns {Promise<*>}
192
- */
193
- async getSleep(date = new Date()) {
194
- const dateString = toDateString(date);
195
- return this.get(urls.dailySleep(), { date: dateString });
196
- }
197
-
198
- // Heart rate
199
- /**
200
- * Get heart rate measurements for a specific date
201
- * @param date
202
- * @returns {Promise<*>}
203
- */
204
- async getHeartRate(date = new Date()) {
205
- const dateString = toDateString(date);
206
- return this.get(urls.dailyHeartRate(this.userHash), { date: dateString });
207
- }
208
-
209
- // Weight
210
- /**
211
- * Post a new body weight
212
- * @param weight
213
- * @returns {Promise<*>}
214
- */
215
- async setBodyWeight(weight) {
216
- if (weight) {
217
- const roundWeight = Math.round(weight * 1000);
218
- const data = { userData: { weight: roundWeight } };
219
- return this.put(urls.userSettings(), data);
220
- }
221
- return Promise.reject();
222
- }
223
-
224
- // Activites
225
- /**
226
- * Get list of activites
227
- * @param start
228
- * @param limit
229
- * @returns {Promise<*>}
230
- */
231
- async getActivities(start, limit) {
232
- return this.get(urls.activities(), { start, limit });
233
- }
234
-
235
- /**
236
- * Get details about an activity
237
- * @param activity
238
- * @param maxChartSize
239
- * @param maxPolylineSize
240
- * @returns {Promise<*>}
241
- */
242
- async getActivity(activity, maxChartSize, maxPolylineSize) {
243
- const { activityId } = activity || {};
244
- if (activityId) {
245
- return this.get(urls.activityDetails(activityId), { maxChartSize, maxPolylineSize });
246
- }
247
- return Promise.reject();
248
- }
249
-
250
- /**
251
- * Get weather data from an activity
252
- * @param activity
253
- * @returns {Promise<*>}
254
- */
255
- async getActivityWeather(activity) {
256
- const { activityId } = activity || {};
257
- if (activityId) {
258
- return this.get(urls.weather(activityId));
259
- }
260
- return Promise.reject();
261
- }
262
-
263
- /**
264
- * Updates an activity
265
- * @param activity
266
- * @returns {Promise<*>}
267
- */
268
- async updateActivity(activity) {
269
- return this.put(urls.activity(activity.activityId), activity);
270
- }
271
-
272
- /**
273
- * Deletes an activity
274
- * @param activity
275
- * @returns {Promise<*>}
276
- */
277
- async deleteActivity(activity) {
278
- const { activityId } = activity || {};
279
- if (activityId) {
280
- const headers = { 'x-http-method-override': 'DELETE' };
281
- return this.client.postJson(urls.activity(activityId), undefined, undefined, headers);
282
- }
283
- return Promise.reject();
284
- }
285
-
286
- /**
287
- * Get list of activities in your news feed
288
- * @param start
289
- * @param limit
290
- * @returns {Promise<*>}
291
- */
292
- async getNewsFeed(start, limit) {
293
- return this.get(urls.newsFeed(), { start, limit });
294
- }
295
-
296
- // Steps
297
- /**
298
- * Get step count for a specific date
299
- * @param date
300
- * @returns {Promise<*>}
301
- */
302
- async getSteps(date = new Date()) {
303
- const dateString = toDateString(date);
304
- return this.get(urls.dailySummaryChart(this.userHash), { date: dateString });
305
- }
306
-
307
- // Workouts
308
- /**
309
- * Get list of workouts
310
- * @param start
311
- * @param limit
312
- * @returns {Promise<*>}
313
- */
314
- async getWorkouts(start, limit) {
315
- return this.get(urls.workouts(), { start, limit });
316
- }
317
-
318
- /**
319
- * Download original activity data to disk as zip
320
- * Resolves to absolute path for the downloaded file
321
- * @param activity : any
322
- * @param dir Will default to current working directory
323
- * @param type : string - Will default to 'zip'. Other possible values are 'tcx', 'gpx' or 'kml'.
324
- * @returns {Promise<*>}
325
- */
326
- async downloadOriginalActivityData(activity, dir, type = '') {
327
- const { activityId } = activity || {};
328
- if (activityId) {
329
- const url = type === '' || type === 'zip'
330
- ? urls.originalFile(activityId)
331
- : urls.exportFile(activityId, type);
332
- return this.client.downloadBlob(dir, url);
333
- }
334
- return Promise.reject();
335
- }
336
-
337
- /**
338
- * Uploads an activity file ('gpx', 'tcx', or 'fit')
339
- * @param file the file to upload
340
- * @param format the format of the file. If undefined, the extension of the file will be used.
341
- * @returns {Promise<*>}
342
- */
343
- async uploadActivity(file, format) {
344
- // throw new Error('uploadActivity method is disabled in this version');
345
-
346
- const detectedFormat = format || `.${file.split('.').pop()}`;
347
- if (detectedFormat !== '.gpx' && detectedFormat !== '.tcx' && detectedFormat !== '.fit') {
348
- Promise.reject();
349
- }
350
-
351
- const fileBinary = fs.createReadStream(file);
352
- return this.client.post(urls.upload(format), {
353
- file: fileBinary,
354
- });
355
- }
356
-
357
- /**
358
- * Adds a running workout with one step of completeing a set distance.
359
- * @param name
360
- * @param meters
361
- * @param description
362
- * @returns {Promise<*>}
363
- */
364
- async addRunningWorkout(name, meters, description) {
365
- const running = new Running();
366
- running.name = name;
367
- running.distance = meters;
368
- running.description = description;
369
- return this.addWorkout(running);
370
- }
371
-
372
- /**
373
- * Add a new workout preset.
374
- * @param workout
375
- * @returns {Promise<*>}
376
- */
377
- async addWorkout(workout) {
378
- if (workout.isValid()) {
379
- const data = { ...workout.toJson() };
380
- if (!data.description) {
381
- data.description = 'Added by garmin-connect for Node.js';
382
- }
383
- return this.post(urls.workout(), data);
384
- }
385
- return Promise.reject();
386
- }
387
-
388
- /**
389
- * Add a workout to your workout calendar.
390
- * @param workout
391
- * @param date
392
- * @returns {Promise<*>}
393
- */
394
- async scheduleWorkout(workout, date) {
395
- const { workoutId } = workout || {};
396
- if (workoutId && date) {
397
- const dateString = toDateString(date);
398
- return this.post(urls.schedule(workoutId), { date: dateString });
399
- }
400
- return Promise.reject();
401
- }
402
-
403
- /**
404
- * Delete a workout based on a workout object.
405
- * @param workout
406
- * @returns {Promise<*>}
407
- */
408
- async deleteWorkout(workout) {
409
- const { workoutId } = workout || {};
410
- if (workoutId) {
411
- const headers = { 'x-http-method-override': 'DELETE' };
412
- return this.client.postJson(urls.workout(workoutId), undefined, undefined, headers);
413
- }
414
- return Promise.reject();
415
- }
416
-
417
- // General methods
418
-
419
- async get(url, data) {
420
- const response = await this.client.get(url, data);
421
- this.triggerEvent(this.events.sessionChange, this.sessionJson);
422
- return response;
423
- }
424
-
425
- async post(url, data) {
426
- const response = await this.client.postJson(url, data);
427
- this.triggerEvent(this.events.sessionChange, this.sessionJson);
428
- return response;
429
- }
430
-
431
- async put(url, data) {
432
- const response = await this.client.putJson(url, data);
433
- this.triggerEvent(this.events.sessionChange, this.sessionJson);
434
- return response;
435
- }
436
- }
437
-
438
- module.exports = GarminConnect;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Event = void 0;
30
+ const app_root_path_1 = __importDefault(require("app-root-path"));
31
+ const form_data_1 = __importDefault(require("form-data"));
32
+ const luxon_1 = require("luxon");
33
+ const fs = __importStar(require("node:fs"));
34
+ const path = __importStar(require("node:path"));
35
+ const HttpClient_1 = require("../common/HttpClient");
36
+ const utils_1 = require("../utils");
37
+ const UrlClass_1 = require("./UrlClass");
38
+ const types_1 = require("./types");
39
+ const lodash_1 = __importDefault(require("lodash"));
40
+ let config = undefined;
41
+ try {
42
+ config = app_root_path_1.default.require('/garmin.config.json');
43
+ }
44
+ catch (e) {
45
+ // Do nothing
46
+ }
47
+ var Event;
48
+ (function (Event) {
49
+ Event["sessionChange"] = "sessionChange";
50
+ })(Event = exports.Event || (exports.Event = {}));
51
+ class GarminConnect {
52
+ // private oauth1: OAuth;
53
+ constructor(credentials = config, domain = 'garmin.com') {
54
+ if (!credentials) {
55
+ throw new Error('Missing credentials');
56
+ }
57
+ this.credentials = credentials;
58
+ this.url = new UrlClass_1.UrlClass(domain);
59
+ this.client = new HttpClient_1.HttpClient(this.url);
60
+ this._userHash = undefined;
61
+ this.listeners = {};
62
+ }
63
+ async login(username, password) {
64
+ if (username && password) {
65
+ this.credentials.username = username;
66
+ this.credentials.password = password;
67
+ }
68
+ await this.client.login(this.credentials.username, this.credentials.password);
69
+ return this;
70
+ }
71
+ exportTokenToFile(dirPath) {
72
+ if (!(0, utils_1.checkIsDirectory)(dirPath)) {
73
+ (0, utils_1.createDirectory)(dirPath);
74
+ }
75
+ // save oauth1 to json
76
+ if (this.client.oauth1Token) {
77
+ (0, utils_1.writeToFile)(path.join(dirPath, 'oauth1_token.json'), JSON.stringify(this.client.oauth1Token));
78
+ }
79
+ if (this.client.oauth2Token) {
80
+ (0, utils_1.writeToFile)(path.join(dirPath, 'oauth2_token.json'), JSON.stringify(this.client.oauth2Token));
81
+ }
82
+ }
83
+ loadTokenByFile(dirPath) {
84
+ if (!(0, utils_1.checkIsDirectory)(dirPath)) {
85
+ throw new Error('loadTokenByFile: Directory not found: ' + dirPath);
86
+ }
87
+ let oauth1Data = fs.readFileSync(path.join(dirPath, 'oauth1_token.json'));
88
+ const oauth1 = JSON.parse(oauth1Data);
89
+ this.client.oauth1Token = oauth1;
90
+ let oauth2Data = fs.readFileSync(path.join(dirPath, 'oauth2_token.json'));
91
+ const oauth2 = JSON.parse(oauth2Data);
92
+ this.client.oauth2Token = oauth2;
93
+ }
94
+ // from db or localstorage etc
95
+ loadToken(oauth1, oauth2) {
96
+ this.client.oauth1Token = oauth1;
97
+ this.client.oauth2Token = oauth2;
98
+ }
99
+ async getUserSettings() {
100
+ return this.client.get(this.url.USER_SETTINGS);
101
+ }
102
+ async getUserProfile() {
103
+ return this.client.get(this.url.USER_PROFILE);
104
+ }
105
+ async getActivities(start, limit) {
106
+ return this.client.get(this.url.ACTIVITIES, {
107
+ params: { start, limit }
108
+ });
109
+ }
110
+ async getActivity(activity) {
111
+ if (!activity.activityId)
112
+ throw new Error('Missing activityId');
113
+ return this.client.get(this.url.ACTIVITY + activity.activityId);
114
+ }
115
+ async countActivities() {
116
+ return this.client.get(this.url.STAT_ACTIVITIES, {
117
+ params: {
118
+ aggregation: 'lifetime',
119
+ startDate: '1970-01-01',
120
+ endDate: luxon_1.DateTime.now().toFormat('yyyy-MM-dd'),
121
+ metric: 'duration'
122
+ }
123
+ });
124
+ }
125
+ async downloadOriginalActivityData(activity, dir, type = 'zip') {
126
+ if (!activity.activityId)
127
+ throw new Error('Missing activityId');
128
+ if (!(0, utils_1.checkIsDirectory)(dir)) {
129
+ (0, utils_1.createDirectory)(dir);
130
+ }
131
+ let fileBuffer;
132
+ if (type === 'tcx') {
133
+ fileBuffer = await this.client.get(this.url.DOWNLOAD_TCX + activity.activityId);
134
+ }
135
+ else if (type === 'gpx') {
136
+ fileBuffer = await this.client.get(this.url.DOWNLOAD_GPX + activity.activityId);
137
+ }
138
+ else if (type === 'kml') {
139
+ fileBuffer = await this.client.get(this.url.DOWNLOAD_KML + activity.activityId);
140
+ }
141
+ else if (type === 'zip') {
142
+ fileBuffer = await this.client.get(this.url.DOWNLOAD_ZIP + activity.activityId, {
143
+ responseType: 'arraybuffer'
144
+ });
145
+ }
146
+ else {
147
+ throw new Error('downloadOriginalActivityData - Invalid type: ' + type);
148
+ }
149
+ (0, utils_1.writeToFile)(path.join(dir, `${activity.activityId}.${type}`), fileBuffer);
150
+ }
151
+ async uploadActivity(file, format = 'fit') {
152
+ var _a;
153
+ const detectedFormat = (_a = (format || path.extname(file))) === null || _a === void 0 ? void 0 : _a.toLowerCase();
154
+ if (!lodash_1.default.includes(types_1.UploadFileType, detectedFormat)) {
155
+ throw new Error('uploadActivity - Invalid format: ' + format);
156
+ }
157
+ const fileBuffer = fs.createReadStream(file);
158
+ const form = new form_data_1.default();
159
+ form.append('userfile', fileBuffer);
160
+ const response = this.client.post(this.url.UPLOAD + '.' + format, form, {
161
+ headers: {
162
+ 'Content-Type': form.getHeaders()['content-type']
163
+ }
164
+ });
165
+ return response;
166
+ }
167
+ async deleteActivity(activity) {
168
+ if (!activity.activityId)
169
+ throw new Error('Missing activityId');
170
+ await this.client.post(this.url.ACTIVITY + activity.activityId, null, {
171
+ headers: {
172
+ 'X-Http-Method-Override': 'DELETE'
173
+ }
174
+ });
175
+ }
176
+ }
177
+ exports.default = GarminConnect;
178
+ //# sourceMappingURL=GarminConnect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GarminConnect.js","sourceRoot":"","sources":["../../src/garmin/GarminConnect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { GarminDomain } from './types';
2
+ export declare class UrlClass {
3
+ private domain;
4
+ GC_MODERN: string;
5
+ GARMIN_SSO_ORIGIN: string;
6
+ GC_API: string;
7
+ constructor(domain?: GarminDomain);
8
+ get GARMIN_SSO(): string;
9
+ get GARMIN_SSO_EMBED(): string;
10
+ get BASE_URL(): string;
11
+ get SIGNIN_URL(): string;
12
+ get LOGIN_URL(): string;
13
+ get OAUTH_URL(): string;
14
+ get USER_SETTINGS(): string;
15
+ get USER_PROFILE(): string;
16
+ get ACTIVITIES(): string;
17
+ get ACTIVITY(): string;
18
+ get STAT_ACTIVITIES(): string;
19
+ get DOWNLOAD_ZIP(): string;
20
+ get DOWNLOAD_GPX(): string;
21
+ get DOWNLOAD_TCX(): string;
22
+ get DOWNLOAD_KML(): string;
23
+ get UPLOAD(): string;
24
+ get IMPORT_DATA(): string;
25
+ }