radar-sdk-js 4.2.1-beta.0 → 4.2.1-beta.2

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/README.md CHANGED
@@ -56,7 +56,7 @@ Radar.initialize('prj_test_pk_...', { /* options */ });
56
56
 
57
57
  Add the following script in your `html` file
58
58
  ```html
59
- <script src="https://js.radar.com/v4.2.1-beta.0/radar.min.js"></script>
59
+ <script src="https://js.radar.com/v4.2.1-beta.2/radar.min.js"></script>
60
60
  ```
61
61
 
62
62
  Then initialize the Radar SDK
@@ -73,8 +73,8 @@ To create a map, first initialize the Radar SDK with your publishable key. Then
73
73
  ```html
74
74
  <html>
75
75
  <head>
76
- <link href="https://js.radar.com/v4.2.1-beta.0/radar.css" rel="stylesheet">
77
- <script src="https://js.radar.com/v4.2.1-beta.0/radar.min.js"></script>
76
+ <link href="https://js.radar.com/v4.2.1-beta.2/radar.css" rel="stylesheet">
77
+ <script src="https://js.radar.com/v4.2.1-beta.2/radar.min.js"></script>
78
78
  </head>
79
79
 
80
80
  <body>
@@ -98,8 +98,8 @@ To create an autocomplete input, first initialize the Radar SDK with your publis
98
98
  ```html
99
99
  <html>
100
100
  <head>
101
- <link href="https://js.radar.com/v4.2.1-beta.0/radar.css" rel="stylesheet">
102
- <script src="https://js.radar.com/v4.2.1-beta.0/radar.min.js"></script>
101
+ <link href="https://js.radar.com/v4.2.1-beta.2/radar.css" rel="stylesheet">
102
+ <script src="https://js.radar.com/v4.2.1-beta.2/radar.min.js"></script>
103
103
  </head>
104
104
 
105
105
  <body>
@@ -130,8 +130,8 @@ To power [geofencing](https://radar.com/documentation/geofencing/overview) exper
130
130
  ```html
131
131
  <html>
132
132
  <head>
133
- <link href="https://js.radar.com/v4.2.1-beta.0/radar.css" rel="stylesheet">
134
- <script src="https://js.radar.com/v4.2.1-beta.0/radar.min.js"></script>
133
+ <link href="https://js.radar.com/v4.2.1-beta.2/radar.css" rel="stylesheet">
134
+ <script src="https://js.radar.com/v4.2.1-beta.2/radar.min.js"></script>
135
135
  </head>
136
136
 
137
137
  <body>
@@ -1,5 +1,5 @@
1
- import type { RadarTrackParams, RadarTrackResponse, RadarTrackTokenResponse } from '../types';
1
+ import type { RadarTrackParams, RadarTrackVerifiedResponse } from '../types';
2
2
  declare class VerifyAPI {
3
- static trackVerified(params: RadarTrackParams, encrypted?: Boolean): Promise<RadarTrackTokenResponse | RadarTrackResponse>;
3
+ static trackVerified(params: RadarTrackParams, encrypted?: Boolean): Promise<RadarTrackVerifiedResponse>;
4
4
  }
5
5
  export default VerifyAPI;
package/dist/errors.d.ts CHANGED
@@ -8,10 +8,10 @@ export declare class RadarPublishableKeyError extends RadarError {
8
8
  export declare class RadarLocationError extends RadarError {
9
9
  constructor(message: string);
10
10
  }
11
- export declare class RadarLocationPermissionsError extends RadarError {
11
+ export declare class RadarPermissionsError extends RadarError {
12
12
  constructor(message: string);
13
13
  }
14
- export declare class RadarDesktopAppError extends RadarError {
14
+ export declare class RadarVerifyAppError extends RadarError {
15
15
  constructor();
16
16
  }
17
17
  export declare class RadarBadRequestError extends RadarError {
@@ -49,7 +49,7 @@ export declare class RadarServerError extends RadarError {
49
49
  response?: any;
50
50
  constructor(response?: any);
51
51
  }
52
- export declare class RadarTimeoutError extends RadarError {
52
+ export declare class RadarNetworkError extends RadarError {
53
53
  constructor();
54
54
  }
55
55
  export declare class RadarUnknownError extends RadarError {
package/dist/http.d.ts CHANGED
@@ -4,11 +4,12 @@ interface HttpResponse {
4
4
  data: any;
5
5
  }
6
6
  declare class Http {
7
- static request({ method, path, data, host, }: {
7
+ static request({ method, path, data, host, headers, }: {
8
8
  method: HttpMethod;
9
9
  path: string;
10
10
  data?: any;
11
11
  host?: string;
12
+ headers?: Record<string, string>;
12
13
  }): Promise<HttpResponse>;
13
14
  }
14
15
  export default Http;
package/dist/index.d.ts CHANGED
@@ -62,8 +62,7 @@ declare class Radar {
62
62
  static setMetadata(metadata?: RadarMetadata): void;
63
63
  static getLocation(): Promise<import("./types").NavigatorPosition>;
64
64
  static trackOnce(params?: RadarTrackParams): Promise<import("./types").RadarTrackResponse>;
65
- static trackVerified(params?: RadarTrackParams): Promise<import("./types").RadarTrackResponse | import("./types").RadarTrackTokenResponse>;
66
- static trackVerifiedToken(params?: RadarTrackParams): Promise<import("./types").RadarTrackResponse | import("./types").RadarTrackTokenResponse>;
65
+ static trackVerified(params?: RadarTrackParams): Promise<import("./types").RadarTrackVerifiedResponse>;
67
66
  static getContext(params: Location): Promise<import("./types").RadarContextResponse>;
68
67
  static setTripOptions(tripOptions?: RadarTripOptions): void;
69
68
  static clearTripOptions(): void;
package/dist/radar.js CHANGED
@@ -298,25 +298,25 @@ var RadarLocationError = /** @class */ (function (_super) {
298
298
  }
299
299
  return RadarLocationError;
300
300
  }(RadarError));
301
- var RadarLocationPermissionsError = /** @class */ (function (_super) {
302
- __extends(RadarLocationPermissionsError, _super);
303
- function RadarLocationPermissionsError(message) {
301
+ var RadarPermissionsError = /** @class */ (function (_super) {
302
+ __extends(RadarPermissionsError, _super);
303
+ function RadarPermissionsError(message) {
304
304
  var _this = _super.call(this, message) || this;
305
- _this.name = 'RadarLocationPermissionsError';
305
+ _this.name = 'RadarPermissionsError';
306
306
  _this.status = 'ERROR_PERMISSIONS';
307
307
  return _this;
308
308
  }
309
- return RadarLocationPermissionsError;
309
+ return RadarPermissionsError;
310
310
  }(RadarError));
311
- var RadarDesktopAppError = /** @class */ (function (_super) {
312
- __extends(RadarDesktopAppError, _super);
313
- function RadarDesktopAppError() {
314
- var _this = _super.call(this, 'Desktop app not running.') || this;
315
- _this.name = 'RadarDesktopAppError';
316
- _this.status = 'ERROR_DESKTOP_APP';
311
+ var RadarVerifyAppError = /** @class */ (function (_super) {
312
+ __extends(RadarVerifyAppError, _super);
313
+ function RadarVerifyAppError() {
314
+ var _this = _super.call(this, 'Radar Verify app not running.') || this;
315
+ _this.name = 'RadarVerifyAppError';
316
+ _this.status = 'ERROR_VERIFY_APP';
317
317
  return _this;
318
318
  }
319
- return RadarDesktopAppError;
319
+ return RadarVerifyAppError;
320
320
  }(RadarError));
321
321
  // HTTP Errors
322
322
  var RadarBadRequestError = /** @class */ (function (_super) {
@@ -417,15 +417,15 @@ var RadarServerError = /** @class */ (function (_super) {
417
417
  }
418
418
  return RadarServerError;
419
419
  }(RadarError));
420
- var RadarTimeoutError = /** @class */ (function (_super) {
421
- __extends(RadarTimeoutError, _super);
422
- function RadarTimeoutError() {
420
+ var RadarNetworkError = /** @class */ (function (_super) {
421
+ __extends(RadarNetworkError, _super);
422
+ function RadarNetworkError() {
423
423
  var _this = _super.call(this, 'Request timed out.') || this;
424
- _this.name = 'RadarTimeoutError';
425
- _this.status = 'ERROR_TIMED_OUT';
424
+ _this.name = 'RadarNetworkError';
425
+ _this.status = 'ERROR_NETWORK';
426
426
  return _this;
427
427
  }
428
- return RadarTimeoutError;
428
+ return RadarNetworkError;
429
429
  }(RadarError));
430
430
  var RadarUnknownError = /** @class */ (function (_super) {
431
431
  __extends(RadarUnknownError, _super);
@@ -451,12 +451,6 @@ var RadarAutocompleteContainerNotFound = /** @class */ (function (_super) {
451
451
  return RadarAutocompleteContainerNotFound;
452
452
  }(RadarError));
453
453
 
454
- // https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPositionError
455
- var PERMISSION_ERROR_MESSAGES = {
456
- 1: 'Permission denied.',
457
- 2: 'Position unavailable.',
458
- 3: 'Timeout.',
459
- };
460
454
  var DEFAULT_POSITION_OPTIONS = {
461
455
  maximumAge: 0,
462
456
  timeout: 1000 * 30,
@@ -526,9 +520,11 @@ var Navigator = /** @class */ (function () {
526
520
  }
527
521
  return resolve({ latitude: latitude, longitude: longitude, accuracy: accuracy });
528
522
  }, function (err) {
529
- if (err && err.code) {
530
- var message = PERMISSION_ERROR_MESSAGES[err.code.toString()] || 'unknown';
531
- return reject(new RadarLocationPermissionsError(message));
523
+ if (err && err.code === 1) {
524
+ // https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPositionError
525
+ // code 1 means location permissions denied
526
+ // codes 2 and 3 mean location unavailable or timeout
527
+ return reject(new RadarPermissionsError('Location permissions denied.'));
532
528
  }
533
529
  return reject(new RadarLocationError('Could not determine location.'));
534
530
  }, positionOptions);
@@ -565,13 +561,13 @@ var Navigator = /** @class */ (function () {
565
561
  return Navigator;
566
562
  }());
567
563
 
568
- var SDK_VERSION = '4.2.1-beta.0';
564
+ var SDK_VERSION = '4.2.1-beta.2';
569
565
 
570
566
  var Http = /** @class */ (function () {
571
567
  function Http() {
572
568
  }
573
569
  Http.request = function (_a) {
574
- var method = _a.method, path = _a.path, data = _a.data, host = _a.host;
570
+ var method = _a.method, path = _a.path, data = _a.data, host = _a.host, headers = _a.headers;
575
571
  return __awaiter(this, void 0, void 0, function () {
576
572
  return __generator(this, function (_b) {
577
573
  return [2 /*return*/, new Promise(function (resolve, reject) {
@@ -605,12 +601,19 @@ var Http = /** @class */ (function () {
605
601
  }
606
602
  var xhr = new XMLHttpRequest();
607
603
  xhr.open(method, url, true);
608
- // set headers
604
+ // set standard headers
609
605
  xhr.setRequestHeader('Authorization', publishableKey);
610
606
  xhr.setRequestHeader('Content-Type', 'application/json');
611
607
  xhr.setRequestHeader('X-Radar-Device-Type', 'Web');
612
608
  xhr.setRequestHeader('X-Radar-SDK-Version', SDK_VERSION);
613
- // set custom headers if present
609
+ // set passed custom headers if present
610
+ if (headers) {
611
+ Object.keys(headers).forEach(function (key) {
612
+ var val = headers[key];
613
+ xhr.setRequestHeader(key, val);
614
+ });
615
+ }
616
+ // set config custom headers if present
614
617
  if (typeof options.getRequestHeaders === 'function') {
615
618
  var headers_1 = options.getRequestHeaders();
616
619
  Object.keys(headers_1 || {}).forEach(function (key) {
@@ -628,13 +631,13 @@ var Http = /** @class */ (function () {
628
631
  }
629
632
  var error = (_a = response === null || response === void 0 ? void 0 : response.meta) === null || _a === void 0 ? void 0 : _a.error;
630
633
  if (error === 'ERROR_PERMISSIONS') {
631
- return reject(new RadarLocationPermissionsError('Location permissions not granted.'));
634
+ return reject(new RadarPermissionsError('Location permissions not granted.'));
632
635
  }
633
636
  else if (error === 'ERROR_LOCATION') {
634
637
  return reject(new RadarLocationError('Could not determine location.'));
635
638
  }
636
639
  else if (error === 'ERROR_NETWORK') {
637
- return reject(new RadarTimeoutError());
640
+ return reject(new RadarNetworkError());
638
641
  }
639
642
  if (xhr.status == 200) {
640
643
  return resolve(response);
@@ -669,15 +672,15 @@ var Http = /** @class */ (function () {
669
672
  }
670
673
  };
671
674
  xhr.onerror = function () {
672
- if (host && host === 'https://radar-verify.com:52516') {
673
- reject(new RadarDesktopAppError());
675
+ if (host && (host === 'http://localhost:52516' || host === 'https://radar-verify.com:52516')) {
676
+ reject(new RadarVerifyAppError());
674
677
  }
675
678
  else {
676
679
  reject(new RadarServerError());
677
680
  }
678
681
  };
679
682
  xhr.ontimeout = function () {
680
- reject(new RadarTimeoutError());
683
+ reject(new RadarVerifyAppError());
681
684
  };
682
685
  xhr.send(JSON.stringify(body));
683
686
  })];
@@ -1157,12 +1160,12 @@ var SearchAPI = /** @class */ (function () {
1157
1160
  }
1158
1161
  SearchAPI.autocomplete = function (params) {
1159
1162
  return __awaiter(this, void 0, void 0, function () {
1160
- var options, query, near, limit, layers, countryCode, expandUnits, response, autocompleteRes;
1163
+ var options, query, near, limit, layers, countryCode, expandUnits, mailable, response, autocompleteRes;
1161
1164
  return __generator(this, function (_a) {
1162
1165
  switch (_a.label) {
1163
1166
  case 0:
1164
1167
  options = Config.get();
1165
- query = params.query, near = params.near, limit = params.limit, layers = params.layers, countryCode = params.countryCode, expandUnits = params.expandUnits;
1168
+ query = params.query, near = params.near, limit = params.limit, layers = params.layers, countryCode = params.countryCode, expandUnits = params.expandUnits, mailable = params.mailable;
1166
1169
  // near can be provided as a string or Location object
1167
1170
  // if "near" is not provided, request will fallback to IP based location
1168
1171
  if (near && typeof near !== 'string') {
@@ -1180,6 +1183,7 @@ var SearchAPI = /** @class */ (function () {
1180
1183
  layers: layers,
1181
1184
  countryCode: countryCode,
1182
1185
  expandUnits: expandUnits,
1186
+ mailable: mailable,
1183
1187
  },
1184
1188
  })];
1185
1189
  case 1:
@@ -1197,12 +1201,12 @@ var SearchAPI = /** @class */ (function () {
1197
1201
  };
1198
1202
  SearchAPI.searchGeofences = function (params) {
1199
1203
  return __awaiter(this, void 0, void 0, function () {
1200
- var options, near, radius, tags, metadata, limit, _a, latitude, longitude, latitude, longitude, response, geofencesSearchRes;
1204
+ var options, near, radius, tags, metadata, limit, includeGeometry, _a, latitude, longitude, latitude, longitude, response, geofencesSearchRes;
1201
1205
  return __generator(this, function (_b) {
1202
1206
  switch (_b.label) {
1203
1207
  case 0:
1204
1208
  options = Config.get();
1205
- near = params.near, radius = params.radius, tags = params.tags, metadata = params.metadata, limit = params.limit;
1209
+ near = params.near, radius = params.radius, tags = params.tags, metadata = params.metadata, limit = params.limit, includeGeometry = params.includeGeometry;
1206
1210
  if (!!near) return [3 /*break*/, 2];
1207
1211
  return [4 /*yield*/, Navigator.getCurrentPosition()];
1208
1212
  case 1:
@@ -1229,6 +1233,7 @@ var SearchAPI = /** @class */ (function () {
1229
1233
  tags: tags,
1230
1234
  metadata: metadata,
1231
1235
  limit: limit,
1236
+ includeGeometry: includeGeometry,
1232
1237
  },
1233
1238
  })];
1234
1239
  case 4:
@@ -1469,33 +1474,107 @@ var TripsAPI = /** @class */ (function () {
1469
1474
  return TripsAPI;
1470
1475
  }());
1471
1476
 
1477
+ var base64Encode = function (str) {
1478
+ return btoa(str).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
1479
+ };
1480
+ var signJWT = function (payload, key) { return __awaiter(void 0, void 0, void 0, function () {
1481
+ var encoder, encodedHeader, encodedPayload, keyData, messageData, cryptoKey, signatureArrayBuffer, signature;
1482
+ return __generator(this, function (_a) {
1483
+ switch (_a.label) {
1484
+ case 0:
1485
+ encoder = new TextEncoder();
1486
+ encodedHeader = base64Encode(JSON.stringify({
1487
+ alg: 'HS256',
1488
+ typ: 'JWT',
1489
+ }));
1490
+ encodedPayload = base64Encode(JSON.stringify(payload));
1491
+ keyData = encoder.encode(key);
1492
+ messageData = encoder.encode("".concat(encodedHeader, ".").concat(encodedPayload));
1493
+ return [4 /*yield*/, crypto.subtle.importKey('raw', keyData, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign'])];
1494
+ case 1:
1495
+ cryptoKey = _a.sent();
1496
+ return [4 /*yield*/, crypto.subtle.sign('HMAC', cryptoKey, messageData)];
1497
+ case 2:
1498
+ signatureArrayBuffer = _a.sent();
1499
+ signature = base64Encode(String.fromCharCode.apply(String, Array.from(new Uint8Array(signatureArrayBuffer))));
1500
+ return [2 /*return*/, "".concat(encodedHeader, ".").concat(encodedPayload, ".").concat(signature)];
1501
+ }
1502
+ });
1503
+ }); };
1504
+
1505
+ var ping = function (host) {
1506
+ return new Promise(function (resolve) {
1507
+ var socket = new WebSocket(host);
1508
+ var pings = 0;
1509
+ var latencies = [];
1510
+ var pingInterval;
1511
+ var timeoutInterval;
1512
+ var ping = function () {
1513
+ pings++;
1514
+ var start = Date.now();
1515
+ socket.send('ping');
1516
+ socket.onmessage = function (event) {
1517
+ if (event.data === 'pong') {
1518
+ var latency = Date.now() - start;
1519
+ latencies.push(latency);
1520
+ if (pings >= 3) {
1521
+ clearInterval(pingInterval);
1522
+ clearInterval(timeoutInterval);
1523
+ var median = latencies.sort(function (a, b) { return a - b; })[1];
1524
+ socket.close();
1525
+ resolve(median);
1526
+ }
1527
+ }
1528
+ };
1529
+ };
1530
+ var timeout = function () {
1531
+ Logger.warn('Socket timeout');
1532
+ clearInterval(pingInterval);
1533
+ clearInterval(timeoutInterval);
1534
+ socket.close();
1535
+ resolve(-1);
1536
+ };
1537
+ socket.onerror = function (err) {
1538
+ Logger.warn('Error opening socket');
1539
+ socket.close();
1540
+ resolve(-1);
1541
+ };
1542
+ socket.onopen = function () {
1543
+ ping();
1544
+ pingInterval = setInterval(ping, 1000);
1545
+ timeoutInterval = setInterval(timeout, 10000);
1546
+ };
1547
+ });
1548
+ };
1549
+
1472
1550
  var TrackAPI = /** @class */ (function () {
1473
1551
  function TrackAPI() {
1474
1552
  }
1475
1553
  TrackAPI.trackOnce = function (params) {
1554
+ var _a, _b, _c;
1476
1555
  return __awaiter(this, void 0, void 0, function () {
1477
- var options, latitude, longitude, accuracy, desiredAccuracy, deviceLocation, locationAuthorization, err_1, userId, deviceId, installId, sessionId, deviceType, description, metadata, tripOptions, body, response, user, events, location, trackRes;
1478
- return __generator(this, function (_a) {
1479
- switch (_a.label) {
1556
+ var options, latitude, longitude, accuracy, desiredAccuracy, fraud, deviceLocation, locationAuthorization, err_1, userId, deviceId, installId, sessionId, deviceType, description, timeZone, metadata, tripOptions, body, response, host, pingHost, lang, langs, dk, sclVal, cslVal, _d, sclRes, csl, scl, payload, reqToken, user_1, events_1, token, expiresAt, location_1, passed, expiresIn, trackRes_1, user, events, location, trackRes;
1557
+ return __generator(this, function (_e) {
1558
+ switch (_e.label) {
1480
1559
  case 0:
1481
1560
  options = Config.get();
1482
- latitude = params.latitude, longitude = params.longitude, accuracy = params.accuracy, desiredAccuracy = params.desiredAccuracy;
1561
+ latitude = params.latitude, longitude = params.longitude, accuracy = params.accuracy, desiredAccuracy = params.desiredAccuracy, fraud = params.fraud;
1483
1562
  if (!(!latitude || !longitude)) return [3 /*break*/, 2];
1484
1563
  return [4 /*yield*/, Navigator.getCurrentPosition({ desiredAccuracy: desiredAccuracy })];
1485
1564
  case 1:
1486
- deviceLocation = _a.sent();
1565
+ deviceLocation = _e.sent();
1487
1566
  latitude = deviceLocation.latitude;
1488
1567
  longitude = deviceLocation.longitude;
1489
1568
  accuracy = deviceLocation.accuracy;
1490
- _a.label = 2;
1569
+ _e.label = 2;
1491
1570
  case 2:
1492
- _a.trys.push([2, 4, , 5]);
1571
+ _e.trys.push([2, 4, , 5]);
1493
1572
  return [4 /*yield*/, Navigator.getPermissionStatus()];
1494
1573
  case 3:
1495
- locationAuthorization = _a.sent();
1574
+ locationAuthorization = _e.sent();
1496
1575
  return [3 /*break*/, 5];
1497
1576
  case 4:
1498
- err_1 = _a.sent();
1577
+ err_1 = _e.sent();
1499
1578
  Logger.warn("Location authorization error: ".concat(err_1.message));
1500
1579
  return [3 /*break*/, 5];
1501
1580
  case 5:
@@ -1505,6 +1584,12 @@ var TrackAPI = /** @class */ (function () {
1505
1584
  sessionId = Session.getSessionId();
1506
1585
  deviceType = params.deviceType || 'Web';
1507
1586
  description = params.description || Storage.getItem(Storage.DESCRIPTION);
1587
+ try {
1588
+ timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
1589
+ }
1590
+ catch (err) {
1591
+ Logger.warn("Error getting time zone: ".concat(err.message));
1592
+ }
1508
1593
  // save userId for trip tracking
1509
1594
  if (!userId) {
1510
1595
  Logger.warn('userId not provided for trackOnce.');
@@ -1517,14 +1602,108 @@ var TrackAPI = /** @class */ (function () {
1517
1602
  if (tripOptions) {
1518
1603
  tripOptions.version = '2';
1519
1604
  }
1520
- body = __assign(__assign({}, params), { locationAuthorization: locationAuthorization, accuracy: accuracy, description: description, deviceId: deviceId, deviceType: deviceType, foreground: true, installId: installId, sessionId: sessionId, latitude: latitude, longitude: longitude, metadata: metadata, sdkVersion: SDK_VERSION, stopped: true, userId: userId, tripOptions: tripOptions });
1605
+ body = __assign(__assign({}, params), { locationAuthorization: locationAuthorization, accuracy: accuracy, description: description, deviceId: deviceId, deviceType: deviceType, foreground: true, installId: installId, sessionId: sessionId, latitude: latitude, longitude: longitude, metadata: metadata, sdkVersion: SDK_VERSION, stopped: true, userId: userId, tripOptions: tripOptions, timeZone: timeZone });
1606
+ if (!fraud) return [3 /*break*/, 13];
1607
+ host = 'https://api-verified.radar.io';
1608
+ pingHost = 'ping.radar-verify.com';
1609
+ lang = navigator.language;
1610
+ langs = navigator.languages;
1521
1611
  return [4 /*yield*/, Http.request({
1612
+ host: host,
1613
+ method: 'GET',
1614
+ path: 'config',
1615
+ data: {
1616
+ deviceId: deviceId,
1617
+ installId: installId,
1618
+ sessionId: sessionId,
1619
+ locationAuthorization: locationAuthorization,
1620
+ },
1621
+ headers: {
1622
+ 'X-Radar-Desktop-Device-Type': 'Web',
1623
+ },
1624
+ })];
1625
+ case 6:
1626
+ dk = (_e.sent()).dk;
1627
+ sclVal = -1;
1628
+ cslVal = -1;
1629
+ _e.label = 7;
1630
+ case 7:
1631
+ _e.trys.push([7, 9, , 10]);
1632
+ return [4 /*yield*/, Promise.all([
1633
+ Http.request({
1634
+ host: "https://".concat(pingHost),
1635
+ method: 'GET',
1636
+ path: 'ping',
1637
+ }),
1638
+ ping("wss://".concat(pingHost)),
1639
+ ])];
1640
+ case 8:
1641
+ _d = _e.sent(), sclRes = _d[0], csl = _d[1];
1642
+ scl = sclRes.scl;
1643
+ sclVal = scl;
1644
+ cslVal = csl;
1645
+ return [3 /*break*/, 10];
1646
+ case 9:
1647
+ _e.sent();
1648
+ return [3 /*break*/, 10];
1649
+ case 10:
1650
+ payload = {
1651
+ payload: JSON.stringify(__assign(__assign({}, body), { scl: sclVal, csl: cslVal, lang: lang, langs: langs })),
1652
+ };
1653
+ return [4 /*yield*/, signJWT(payload, dk)];
1654
+ case 11:
1655
+ reqToken = _e.sent();
1656
+ return [4 /*yield*/, Http.request({
1657
+ host: host,
1522
1658
  method: 'POST',
1523
1659
  path: 'track',
1524
- data: body,
1660
+ data: {
1661
+ token: reqToken,
1662
+ },
1663
+ headers: {
1664
+ 'X-Radar-Body-Is-Token': 'true',
1665
+ },
1525
1666
  })];
1526
- case 6:
1527
- response = _a.sent();
1667
+ case 12:
1668
+ response = _e.sent();
1669
+ if (options.debug && response && response.user) {
1670
+ if (!response.user.metadata) {
1671
+ response.user.metadata = {};
1672
+ }
1673
+ response.user.metadata['radar:debug'] = {
1674
+ sclVal: sclVal,
1675
+ cslVal: cslVal,
1676
+ };
1677
+ }
1678
+ user_1 = response.user, events_1 = response.events, token = response.token, expiresAt = response.expiresAt;
1679
+ location_1 = { latitude: latitude, longitude: longitude, accuracy: accuracy };
1680
+ passed = void 0;
1681
+ expiresIn = void 0;
1682
+ if (expiresAt) {
1683
+ expiresAt = new Date(expiresAt);
1684
+ passed = ((_a = user_1 === null || user_1 === void 0 ? void 0 : user_1.fraud) === null || _a === void 0 ? void 0 : _a.passed) && ((_b = user_1 === null || user_1 === void 0 ? void 0 : user_1.country) === null || _b === void 0 ? void 0 : _b.passed) && ((_c = user_1 === null || user_1 === void 0 ? void 0 : user_1.state) === null || _c === void 0 ? void 0 : _c.passed);
1685
+ expiresIn = (expiresAt.getTime() - Date.now()) / 1000;
1686
+ }
1687
+ trackRes_1 = {
1688
+ user: user_1,
1689
+ events: events_1,
1690
+ location: location_1,
1691
+ token: token,
1692
+ expiresAt: expiresAt,
1693
+ expiresIn: expiresIn,
1694
+ passed: passed,
1695
+ };
1696
+ if (options.debug) {
1697
+ trackRes_1.response = response;
1698
+ }
1699
+ return [2 /*return*/, trackRes_1];
1700
+ case 13: return [4 /*yield*/, Http.request({
1701
+ method: 'POST',
1702
+ path: 'track',
1703
+ data: body,
1704
+ })];
1705
+ case 14:
1706
+ response = _e.sent();
1528
1707
  user = response.user, events = response.events;
1529
1708
  location = { latitude: latitude, longitude: longitude, accuracy: accuracy };
1530
1709
  trackRes = {
@@ -1547,11 +1726,12 @@ var VerifyAPI = /** @class */ (function () {
1547
1726
  function VerifyAPI() {
1548
1727
  }
1549
1728
  VerifyAPI.trackVerified = function (params, encrypted) {
1729
+ var _a, _b, _c;
1550
1730
  if (encrypted === void 0) { encrypted = false; }
1551
1731
  return __awaiter(this, void 0, void 0, function () {
1552
- var options, userId, deviceId, installId, sessionId, description, metadata, body, userAgent, mac, response, user, events, token, location, trackTokenRes, trackRes;
1553
- return __generator(this, function (_a) {
1554
- switch (_a.label) {
1732
+ var options, userId, deviceId, installId, sessionId, description, metadata, body, userAgent, apple, response, user, events, token, expiresAt, location, passed, expiresIn, trackRes;
1733
+ return __generator(this, function (_d) {
1734
+ switch (_d.label) {
1555
1735
  case 0:
1556
1736
  options = Config.get();
1557
1737
  userId = params.userId || Storage.getItem(Storage.USER_ID);
@@ -1569,16 +1749,16 @@ var VerifyAPI = /** @class */ (function () {
1569
1749
  metadata = params.metadata || Storage.getJSON(Storage.METADATA);
1570
1750
  body = __assign(__assign({}, params), { description: description, deviceId: deviceId, foreground: true, installId: installId, sessionId: sessionId, metadata: metadata, sdkVersion: SDK_VERSION, stopped: true, userId: userId, encrypted: encrypted });
1571
1751
  userAgent = navigator.userAgent;
1572
- mac = userAgent && userAgent.toLowerCase().includes('mac');
1752
+ apple = userAgent && (userAgent.toLowerCase().includes('mac') || userAgent.toLowerCase().includes('iphone') || userAgent.toLowerCase().includes('ipod') || userAgent.toLowerCase().includes('ipad'));
1573
1753
  return [4 /*yield*/, Http.request({
1574
1754
  method: 'GET',
1575
1755
  path: 'verify',
1576
1756
  data: body,
1577
- host: mac ? 'https://radar-verify.com:52516' : 'http://localhost:52516',
1757
+ host: apple ? 'https://radar-verify.com:52516' : 'http://localhost:52516',
1578
1758
  })];
1579
1759
  case 1:
1580
- response = _a.sent();
1581
- user = response.user, events = response.events, token = response.token;
1760
+ response = _d.sent();
1761
+ user = response.user, events = response.events, token = response.token, expiresAt = response.expiresAt;
1582
1762
  if (user && user.location && user.location.coordinates && user.locationAccuracy) {
1583
1763
  location = {
1584
1764
  latitude: user.location.coordinates[1],
@@ -1586,19 +1766,19 @@ var VerifyAPI = /** @class */ (function () {
1586
1766
  accuracy: user.locationAccuracy,
1587
1767
  };
1588
1768
  }
1589
- if (encrypted) {
1590
- trackTokenRes = {
1591
- token: token,
1592
- };
1593
- if (options.debug) {
1594
- trackTokenRes.response = response;
1595
- }
1596
- return [2 /*return*/, trackTokenRes];
1769
+ if (expiresAt) {
1770
+ expiresAt = new Date(expiresAt);
1771
+ passed = ((_a = user === null || user === void 0 ? void 0 : user.fraud) === null || _a === void 0 ? void 0 : _a.passed) && ((_b = user === null || user === void 0 ? void 0 : user.country) === null || _b === void 0 ? void 0 : _b.passed) && ((_c = user === null || user === void 0 ? void 0 : user.state) === null || _c === void 0 ? void 0 : _c.passed);
1772
+ expiresIn = (expiresAt.getTime() - Date.now()) / 1000;
1597
1773
  }
1598
1774
  trackRes = {
1599
1775
  user: user,
1600
1776
  events: events,
1601
1777
  location: location,
1778
+ token: token,
1779
+ expiresAt: expiresAt,
1780
+ expiresIn: expiresIn,
1781
+ passed: passed,
1602
1782
  };
1603
1783
  if (options.debug) {
1604
1784
  trackRes.response = response;
@@ -1934,17 +2114,18 @@ var AutocompleteUI = /** @class */ (function () {
1934
2114
  };
1935
2115
  AutocompleteUI.prototype.fetchResults = function (query) {
1936
2116
  return __awaiter(this, void 0, void 0, function () {
1937
- var _a, limit, layers, countryCode, expandUnits, onRequest, params, addresses;
2117
+ var _a, limit, layers, countryCode, expandUnits, mailable, onRequest, params, addresses;
1938
2118
  return __generator(this, function (_b) {
1939
2119
  switch (_b.label) {
1940
2120
  case 0:
1941
- _a = this.config, limit = _a.limit, layers = _a.layers, countryCode = _a.countryCode, expandUnits = _a.expandUnits, onRequest = _a.onRequest;
2121
+ _a = this.config, limit = _a.limit, layers = _a.layers, countryCode = _a.countryCode, expandUnits = _a.expandUnits, mailable = _a.mailable, onRequest = _a.onRequest;
1942
2122
  params = {
1943
2123
  query: query,
1944
2124
  limit: limit,
1945
2125
  layers: layers,
1946
2126
  countryCode: countryCode,
1947
2127
  expandUnits: expandUnits,
2128
+ mailable: mailable,
1948
2129
  };
1949
2130
  if (this.near) {
1950
2131
  params.near = this.near;
@@ -2321,10 +2502,6 @@ var Radar = /** @class */ (function () {
2321
2502
  if (params === void 0) { params = {}; }
2322
2503
  return VerifyAPI.trackVerified(params);
2323
2504
  };
2324
- Radar.trackVerifiedToken = function (params) {
2325
- if (params === void 0) { params = {}; }
2326
- return VerifyAPI.trackVerified(params, true);
2327
- };
2328
2505
  Radar.getContext = function (params) {
2329
2506
  return ContextAPI.getContext(params);
2330
2507
  };