@radarlabs/plugin-fraud 5.0.0-beta.1

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 ADDED
@@ -0,0 +1,54 @@
1
+ # @radarlabs/plugin-fraud
2
+
3
+ Fraud detection plugin for [radar-sdk-js](https://github.com/radarlabs/radar-sdk-js). Provides verified location tracking via the Radar Verify companion app.
4
+
5
+ ## Installation
6
+
7
+ ### npm
8
+
9
+ ```bash
10
+ npm install @radarlabs/plugin-fraud radar-sdk-js
11
+ ```
12
+
13
+ ### CDN
14
+
15
+ Include after the core SDK:
16
+
17
+ ```html
18
+ <script src="https://js.radar.com/v5.0.0-beta.1/radar.min.js"></script>
19
+ <script src="https://js.radar.com/plugins/fraud/v5.0.0-beta.1/radar-fraud.min.js"></script>
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ ### ESM
25
+
26
+ ```ts
27
+ import Radar from 'radar-sdk-js';
28
+ import { createFraudPlugin } from '@radarlabs/plugin-fraud';
29
+
30
+ Radar.registerPlugin(createFraudPlugin());
31
+ Radar.initialize('prj_live_pk_...');
32
+
33
+ const token = await Radar.fraud.trackVerified();
34
+ ```
35
+
36
+ ### CDN
37
+
38
+ The CDN bundle auto-registers when loaded after `radar.min.js`:
39
+
40
+ ```html
41
+ <script src="https://js.radar.com/v5.0.0-beta.1/radar.min.js"></script>
42
+ <script src="https://js.radar.com/plugins/fraud/v5.0.0-beta.1/radar-fraud.min.js"></script>
43
+ <script>
44
+ Radar.initialize('prj_live_pk_...');
45
+
46
+ Radar.fraud.trackVerified().then((token) => {
47
+ console.log(token);
48
+ });
49
+ </script>
50
+ ```
51
+
52
+ ## Deprecated Root-Level API
53
+
54
+ For backwards compatibility, all methods are also available directly on `Radar` (e.g., `Radar.trackVerified()`). These are deprecated — use `Radar.fraud.*` instead.
@@ -0,0 +1,14 @@
1
+ (function (_0x16d3df) {
2
+ 'use strict';
3
+
4
+ (function(_0x4200e4,_0x7ad07a){var _0x453647=_0x4458,_0x45bc2c=_0x4200e4();while(!![]){try{var _0x1f4308=parseInt(_0x453647(0x182))/0x1*(-parseInt(_0x453647(0x17d))/0x2)+parseInt(_0x453647(0x172))/0x3*(parseInt(_0x453647(0x175))/0x4)+-parseInt(_0x453647(0x177))/0x5*(parseInt(_0x453647(0x17a))/0x6)+-parseInt(_0x453647(0x17f))/0x7+parseInt(_0x453647(0x170))/0x8*(parseInt(_0x453647(0x17b))/0x9)+parseInt(_0x453647(0x17c))/0xa*(parseInt(_0x453647(0x180))/0xb)+parseInt(_0x453647(0x178))/0xc*(parseInt(_0x453647(0x181))/0xd);if(_0x1f4308===_0x7ad07a)break;else _0x45bc2c['push'](_0x45bc2c['shift']());}catch(_0x47b648){_0x45bc2c['push'](_0x45bc2c['shift']());}}}(_0x5368,0xbdfb7));function _0x4458(_0x4fc89a,_0x1e0928){_0x4fc89a=_0x4fc89a-0x170;var _0x536822=_0x5368();var _0x4458d1=_0x536822[_0x4fc89a];return _0x4458d1;}function _0x5368(){var _0x2da661=['4mIfmsp','ERROR_VERIFY_APP','46475DiOfDF','12HsrJEj','JUrbJ','66qOlhVn','55845GvysVp','10909670rOZsjd','3000962iAzyfI','TPcZi','3573955ruqCtv','11ARRgsg','15041533vyxmpn','1mTtEIg','name','664aQtVGr','ZWAAC','385305GNwsie','status','RadarVerifyAppError'];_0x5368=function(){return _0x2da661;};return _0x5368();}class RadarVerifyAppError extends _0x16d3df.RadarError{constructor(){var _0x2922b4=_0x4458,_0x5a331a={'TPcZi':'Radar\x20Verify\x20app\x20not\x20running.','ZWAAC':_0x2922b4(0x174),'JUrbJ':_0x2922b4(0x176)};super(_0x5a331a[_0x2922b4(0x17e)]),this[_0x2922b4(0x183)]=_0x5a331a[_0x2922b4(0x171)],this[_0x2922b4(0x173)]=_0x5a331a[_0x2922b4(0x179)];}}
5
+
6
+ const _0x339879=_0x48f3;(function(_0x4c6ac8,_0x2d505d){const _0x599549=_0x48f3,_0x5c2cd6=_0x4c6ac8();while(!![]){try{const _0x4e8554=-parseInt(_0x599549(0x8b))/0x1*(parseInt(_0x599549(0xd0))/0x2)+parseInt(_0x599549(0xc4))/0x3+parseInt(_0x599549(0x96))/0x4*(-parseInt(_0x599549(0x92))/0x5)+parseInt(_0x599549(0xdf))/0x6*(parseInt(_0x599549(0xad))/0x7)+-parseInt(_0x599549(0x8a))/0x8*(-parseInt(_0x599549(0xc1))/0x9)+-parseInt(_0x599549(0x7b))/0xa+parseInt(_0x599549(0xde))/0xb*(parseInt(_0x599549(0xe0))/0xc);if(_0x4e8554===_0x2d505d)break;else _0x5c2cd6['push'](_0x5c2cd6['shift']());}catch(_0x29c2c3){_0x5c2cd6['push'](_0x5c2cd6['shift']());}}}(_0x291d,0xd8932));function _0x48f3(_0x90873e,_0x475759){_0x90873e=_0x90873e-0x75;const _0x291dca=_0x291d();let _0x48f3bf=_0x291dca[_0x90873e];return _0x48f3bf;}class VerifyApi{constructor(_0x361a20){const _0x66d20c=_0x48f3;this[_0x66d20c(0x8f)]=null,this[_0x66d20c(0xd4)]=null,this['isTrackingVerified']=!![],this[_0x66d20c(0x78)]=null,this[_0x66d20c(0xb1)]=null,this['lastTokenNow']=0x0,this[_0x66d20c(0xc0)]=null,this[_0x66d20c(0x8e)]=null,this[_0x66d20c(0xc5)]=null,this['ctx']=_0x361a20;}async['checkIpChanges'](){const _0x299f36=_0x48f3,_0x23cb6e={'IwcUB':_0x299f36(0xd1),'lXvlV':_0x299f36(0x86),'rcULb':function(_0x3ada16,_0x2ef1c7){return _0x3ada16(_0x2ef1c7);},'afTvf':function(_0x3897e2,_0x39c720){return _0x3897e2!==_0x39c720;},'UFGmD':function(_0x554a14,_0x5ce9b2){return _0x554a14??_0x5ce9b2;}},{Http:_0x98f7bc,Logger:_0x10ddb8}=this['ctx'];try{const _0x38699c=await _0x98f7bc['request']({'method':_0x23cb6e[_0x299f36(0xca)],'path':_0x23cb6e[_0x299f36(0xdb)]}),_0x1fb373=_0x38699c['ip'],_0x4e3402=_0x23cb6e['rcULb'](Boolean,this[_0x299f36(0xc5)])&&_0x23cb6e[_0x299f36(0xb7)](_0x1fb373,this[_0x299f36(0xc5)]);return _0x4e3402&&(_0x10ddb8['info']('IP\x20changed\x20from\x20'+this[_0x299f36(0xc5)]+_0x299f36(0xe4)+_0x1fb373),this[_0x299f36(0xb1)]=null),this[_0x299f36(0xc5)]=_0x23cb6e[_0x299f36(0xaf)](_0x1fb373,null),_0x4e3402;}catch(_0x261fed){_0x10ddb8[_0x299f36(0x89)](_0x299f36(0xe5)+_0x23cb6e[_0x299f36(0xa0)](String,_0x261fed));}return ![];}async[_0x339879(0x9c)](_0x8424a1={},_0x54aa11=![]){const _0x1cee64=_0x339879,_0x4be1cb={'CaZbA':function(_0x264bfe){return _0x264bfe();},'uVlqU':function(_0x37c139,_0x471b56){return _0x37c139===_0x471b56;},'JZupT':_0x1cee64(0x97),'vavPC':function(_0x4e48df,_0x5d95f5){return _0x4e48df??_0x5d95f5;},'BvFhh':function(_0x18d192,_0x444015){return _0x18d192!==_0x444015;},'msCAR':_0x1cee64(0x82),'aQXdt':'mac','ynBdE':_0x1cee64(0x75),'pBnMf':_0x1cee64(0x9a),'tlNkR':_0x1cee64(0xb9),'MSSNj':'http://localhost:52516','lVDOE':'ZtdPe'},{Config:_0x4fe1ee,Http:_0xeedd88,Device:_0x3c7055,Session:_0xd89032,Storage:_0x10b715,Logger:_0xa4fe91,SDK_VERSION:_0x40512d,apis:_0x45d3d2}=this[_0x1cee64(0x98)];try{const _0x114007=_0x4fe1ee[_0x1cee64(0xe1)](),{skipVerifyApp:_0x2e5ce5,reason:_0x39ac7e,transactionId:_0x529907}=_0x8424a1,_0x51c4c2=_0x8424a1['userId']||_0x10b715[_0x1cee64(0xa6)](_0x10b715[_0x1cee64(0xbf)]),_0x21a5d7=_0x3c7055[_0x1cee64(0xbc)](),_0x3bdfcf=_0x3c7055[_0x1cee64(0xc9)](),_0x85667a=_0xd89032['getSessionId'](),_0x126dae=_0x8424a1[_0x1cee64(0x79)]||_0x10b715[_0x1cee64(0xa6)](_0x10b715[_0x1cee64(0x80)]);!_0x51c4c2?_0x4be1cb[_0x1cee64(0xa1)](_0x4be1cb[_0x1cee64(0xe6)],'MWJvJ')?_0xa4fe91[_0x1cee64(0x77)]('userId\x20not\x20provided\x20for\x20trackVerified.'):(this[_0x1cee64(0xc0)]=_0x28d70f||null,this[_0x1cee64(0x8e)]=_0x3cd769||null):_0x10b715[_0x1cee64(0x84)](_0x10b715[_0x1cee64(0xbf)],_0x51c4c2);const _0x458e70=_0x8424a1[_0x1cee64(0x81)]||_0x10b715[_0x1cee64(0xa3)](_0x10b715[_0x1cee64(0x9e)]);let _0x43a6db;if(_0x2e5ce5)_0x43a6db=await _0x45d3d2[_0x1cee64(0x9b)][_0x1cee64(0x7f)]({'userId':_0x4be1cb[_0x1cee64(0xbe)](_0x51c4c2,undefined),'description':_0x126dae??undefined,'metadata':_0x458e70,'fraud':!![],'reason':_0x39ac7e,'transactionId':_0x529907});else {if(_0x4be1cb[_0x1cee64(0xbd)]('rljZA',_0x4be1cb[_0x1cee64(0xd6)])){const _0x4610c1={..._0x8424a1,'description':_0x126dae,'deviceId':_0x21a5d7,'foreground':!![],'installId':_0x3bdfcf,'sessionId':_0x85667a,'metadata':_0x458e70,'sdkVersion':_0x40512d,'stopped':!![],'userId':_0x51c4c2,'encrypted':_0x54aa11,'expectedCountryCode':this['expectedCountryCode'],'expectedStateCode':this[_0x1cee64(0x8e)]},{userAgent:_0x1d4aa6}=navigator,_0x13128e=_0x1d4aa6&&(_0x1d4aa6['toLowerCase']()[_0x1cee64(0xce)](_0x4be1cb[_0x1cee64(0xd7)])||_0x1d4aa6['toLowerCase']()[_0x1cee64(0xce)](_0x4be1cb[_0x1cee64(0x83)])||_0x1d4aa6[_0x1cee64(0xdd)]()[_0x1cee64(0xce)](_0x4be1cb['pBnMf'])||_0x1d4aa6[_0x1cee64(0xdd)]()[_0x1cee64(0xce)](_0x4be1cb['tlNkR'])),_0x49365d=await _0xeedd88[_0x1cee64(0x8d)]({'method':'GET','path':'verify','data':_0x4610c1,'host':_0x13128e?_0x1cee64(0xda):_0x4be1cb['MSSNj']}),{user:_0x251b96,events:_0x3d47d3,token:_0x3b7793,expiresAt:_0x34ef31,expiresIn:_0x207bd7,passed:_0x208816,failureReasons:_0x224deb,_id:_0x101526}=_0x49365d;let _0x4a25ce;_0x251b96&&_0x251b96[_0x1cee64(0xd8)]&&_0x251b96[_0x1cee64(0xd8)][_0x1cee64(0xa4)]&&_0x251b96['locationAccuracy']&&(_0x4a25ce={'latitude':_0x251b96[_0x1cee64(0xd8)][_0x1cee64(0xa4)][0x1],'longitude':_0x251b96['location'][_0x1cee64(0xa4)][0x0],'accuracy':_0x251b96[_0x1cee64(0xae)]}),_0x43a6db={'user':_0x251b96,'events':_0x3d47d3,'location':_0x4a25ce,'token':_0x3b7793,'expiresAt':_0x34ef31?new Date(_0x34ef31):undefined,'expiresIn':_0x207bd7,'passed':_0x208816,'failureReasons':_0x224deb,'_id':_0x101526},_0x114007[_0x1cee64(0xcf)]&&(_0x4be1cb[_0x1cee64(0xbd)](_0x1cee64(0x9f),_0x4be1cb[_0x1cee64(0xcd)])?_0x43a6db[_0x1cee64(0x9d)]=_0x49365d:_0x1526b1=0xa);}else void _0x4be1cb['CaZbA'](_0x7ccdb7);}return this['lastToken']=_0x43a6db,this[_0x1cee64(0xa2)]=performance[_0x1cee64(0xba)](),this[_0x1cee64(0x78)]&&this['tokenCallback'](_0x43a6db),_0x43a6db;}catch(_0x5e355a){_0x4fe1ee['sendError'](_0x5e355a);throw _0x5e355a;}}[_0x339879(0xb0)](_0x574093){const _0x29ed81=_0x339879,_0x6e4ca2={'rMZzB':function(_0x202779,_0x202bb4){return _0x202779(_0x202bb4);},'wJBEz':function(_0x50b7c1,_0x4cb92c){return _0x50b7c1===_0x4cb92c;},'scYqN':_0x29ed81(0x7c),'udpqw':function(_0x11210d,_0x4f3cc7){return _0x11210d/_0x4f3cc7;},'CosrW':function(_0x247236,_0x37ca90){return _0x247236-_0x37ca90;},'pRQpc':function(_0x40bb93,_0x324270){return _0x40bb93-_0x324270;},'UxIRR':function(_0x56de64,_0xade9d6){return _0x56de64<_0xade9d6;},'LKdYN':function(_0x49b1cc,_0x2f3152){return _0x49b1cc!==_0x2f3152;},'eEybZ':_0x29ed81(0x7e),'EoeIW':function(_0x37be0b,_0xe3bcf){return _0x37be0b===_0xe3bcf;},'ZVRid':_0x29ed81(0xd3),'ZiXpm':function(_0x510f0d,_0x211a94,_0x19573b){return _0x510f0d(_0x211a94,_0x19573b);},'bnLUT':function(_0x58568b,_0x14a3b8){return _0x58568b*_0x14a3b8;},'zBzlk':function(_0x178425,_0x85737c){return _0x178425===_0x85737c;},'pspln':_0x29ed81(0xc2),'eoVul':function(_0x80f9ea,_0x38a9e7){return _0x80f9ea!==_0x38a9e7;},'JhsvJ':_0x29ed81(0xa5),'SfTKy':function(_0x3083a9,_0x5ad8d5){return _0x3083a9 instanceof _0x5ad8d5;},'gqHiz':function(_0x2aff6f){return _0x2aff6f();},'KosYW':_0x29ed81(0xb6),'UQLns':function(_0x54f8da){return _0x54f8da();},'fVxFa':_0x29ed81(0xbb)},{Logger:_0x2428c8}=this['ctx'];this[_0x29ed81(0xb2)]=!![];const _0x8a0cbd=async()=>{const _0x3e8699=_0x29ed81;if(_0x6e4ca2[_0x3e8699(0xa9)](_0x3e8699(0xc6),_0x6e4ca2['scYqN']))_0x6e4ca2[_0x3e8699(0xb3)](_0x27955d,this[_0x3e8699(0xd4)]);else {const {interval:interval=0x14}=_0x574093;let _0x493608=interval;if(this[_0x3e8699(0xb1)]){const _0x1c6e54=_0x6e4ca2['udpqw'](performance['now']()-this[_0x3e8699(0xa2)],0x3e8),_0x8b6f2f=this[_0x3e8699(0xb1)][_0x3e8699(0xe3)]||0x0;_0x493608=Math['min'](_0x6e4ca2['CosrW'](_0x8b6f2f,_0x1c6e54),interval);}_0x493608=_0x6e4ca2['pRQpc'](_0x493608,0xa),_0x6e4ca2[_0x3e8699(0xac)](_0x493608,0xa)&&(_0x6e4ca2[_0x3e8699(0xd2)](_0x6e4ca2[_0x3e8699(0x94)],'KYWVb')?_0x493608=0xa:void _0x23a21f()),this[_0x3e8699(0x8f)]&&clearTimeout(this[_0x3e8699(0x8f)]),this[_0x3e8699(0xb2)]&&(_0x6e4ca2[_0x3e8699(0x99)](_0x6e4ca2[_0x3e8699(0xb5)],_0x6e4ca2[_0x3e8699(0xb5)])?this[_0x3e8699(0x8f)]=_0x6e4ca2[_0x3e8699(0xaa)](setTimeout,_0x439247,_0x6e4ca2['bnLUT'](_0x493608,0x3e8)):_0x17714a[_0x3e8699(0x77)](_0x3e8699(0xe7)));}},_0x439247=async()=>{const _0x3de909=_0x29ed81;if(_0x6e4ca2[_0x3de909(0x88)](_0x3de909(0x7d),_0x6e4ca2[_0x3de909(0xc3)]))return this['lastToken'];else {try{_0x6e4ca2[_0x3de909(0x95)](_0x6e4ca2[_0x3de909(0x87)],'KtTCN')?this[_0x3de909(0xb1)]=null:await this[_0x3de909(0x9c)](_0x574093);}catch(_0x469651){const _0x19de4f=_0x6e4ca2[_0x3de909(0x85)](_0x469651,Error)?_0x469651[_0x3de909(0x76)]:String(_0x469651);_0x2428c8[_0x3de909(0x89)](_0x3de909(0x7a)+_0x19de4f);}void _0x6e4ca2[_0x3de909(0x91)](_0x8a0cbd);}};_0x574093?.[_0x29ed81(0xa8)]&&(this['ipChangesIntervalId']&&_0x6e4ca2['rMZzB'](clearInterval,this[_0x29ed81(0xd4)]),this['ipChangesIntervalId']=_0x6e4ca2[_0x29ed81(0xaa)](setInterval,async()=>{const _0xaafb42=_0x29ed81,_0x7e29d5={'cjpwQ':function(_0x10a811,_0x2921fe){const _0x2c45f3=_0x48f3;return _0x6e4ca2[_0x2c45f3(0xc7)](_0x10a811,_0x2921fe);},'aUmhJ':function(_0x1f8ef8,_0x2e6683){return _0x1f8ef8-_0x2e6683;}},_0x1de974=await this[_0xaafb42(0xb4)]();if(_0x1de974){if(_0x6e4ca2['LKdYN'](_0x6e4ca2[_0xaafb42(0x8c)],_0x6e4ca2['KosYW'])){if(!this[_0xaafb42(0xb1)])return ![];const _0x15abf6=_0x7e29d5[_0xaafb42(0xab)](_0x7e29d5[_0xaafb42(0xdc)](_0x1399ce[_0xaafb42(0xba)](),this['lastTokenNow']),0x3e8);return this[_0xaafb42(0xb1)]['passed']&&_0x15abf6<(this[_0xaafb42(0xb1)][_0xaafb42(0xe3)]||0x0);}else void _0x439247();}},0x2710)),this[_0x29ed81(0xa7)]()?void _0x6e4ca2[_0x29ed81(0xd9)](_0x8a0cbd):_0x6e4ca2[_0x29ed81(0x95)](_0x6e4ca2['fVxFa'],'ENTDa')?void _0x6e4ca2[_0x29ed81(0xd9)](_0x439247):this[_0x29ed81(0x78)]=_0x553681;}[_0x339879(0xb8)](){const _0x5dc635=_0x339879,_0x79e0c7={'gWtWq':function(_0x252e48,_0x59e368){return _0x252e48(_0x59e368);}};this[_0x5dc635(0xb2)]=![],this[_0x5dc635(0x8f)]&&_0x79e0c7[_0x5dc635(0xc8)](clearTimeout,this[_0x5dc635(0x8f)]),this[_0x5dc635(0xd4)]&&_0x79e0c7[_0x5dc635(0xc8)](clearInterval,this['ipChangesIntervalId']);}async[_0x339879(0xcc)](_0x52e98d={}){const _0x233ba3=_0x339879;if(this[_0x233ba3(0xa7)]())return this['lastToken'];return this[_0x233ba3(0x9c)](_0x52e98d);}[_0x339879(0x90)](){const _0x5c2444=_0x339879;this[_0x5c2444(0xb1)]=null;}[_0x339879(0xa7)](){const _0x208ccc=_0x339879,_0x2c0302={'QdpJj':function(_0x1cfc1a,_0x223ba9){return _0x1cfc1a/_0x223ba9;},'ijtTF':function(_0x5b60c6,_0x41e555){return _0x5b60c6-_0x41e555;}};if(!this[_0x208ccc(0xb1)])return ![];const _0x35cde0=_0x2c0302[_0x208ccc(0xe2)](_0x2c0302[_0x208ccc(0xcb)](performance[_0x208ccc(0xba)](),this[_0x208ccc(0xa2)]),0x3e8);return this['lastToken'][_0x208ccc(0x93)]&&_0x35cde0<(this[_0x208ccc(0xb1)]['expiresIn']||0x0);}['setExpectedJurisdiction'](_0x10c946,_0xd65052){const _0x4387b9=_0x339879,_0x417abe={'HVrWw':function(_0x5f3069,_0x2403e1){return _0x5f3069||_0x2403e1;}};this[_0x4387b9(0xc0)]=_0x417abe[_0x4387b9(0xd5)](_0x10c946,null),this['expectedStateCode']=_0x417abe[_0x4387b9(0xd5)](_0xd65052,null);}['onTokenUpdated'](_0x3888c9){this['tokenCallback']=_0x3888c9;}}function _0x291d(){const _0x5504ba=['39483OLazTg','davSQ','pspln','2752038kCjXrk','lastIp','TDVWa','udpqw','gWtWq','getInstallId','IwcUB','ijtTF','getVerifiedLocationToken','lVDOE','includes','debug','177542ngHqcR','GET','LKdYN','qPffi','ipChangesIntervalId','HVrWw','msCAR','aQXdt','location','UQLns','https://radar-verify.com:52516','lXvlV','aUmhJ','toLowerCase','11pZClGd','696YKFYBl','28251396FiWhry','get','QdpJj','expiresIn','\x20to\x20','Error\x20checking\x20IP:\x20','JZupT','userId\x20not\x20provided\x20for\x20trackVerified.','iphone','message','warn','tokenCallback','description','trackVerified\x20error:\x20','2390530RMxBQp','prtGV','sODKr','XcUnv','trackOnce','DESCRIPTION','metadata','ypfMm','ynBdE','setItem','SfTKy','ping','JhsvJ','zBzlk','error','1432ZtNMAp','17JSkJlu','KosYW','request','expectedStateCode','tokenTimeoutId','clearVerifiedLocationToken','gqHiz','7665060PUEAvo','passed','eEybZ','eoVul','4NyfjRx','MWJvJ','ctx','EoeIW','ipod','Track','trackVerified','response','METADATA','HXfRh','rcULb','uVlqU','lastTokenNow','getJSON','coordinates','KtTCN','getItem','isLastTokenValid','ipChanges','wJBEz','ZiXpm','cjpwQ','UxIRR','6720JuiaID','locationAccuracy','UFGmD','startTrackingVerified','lastToken','isTrackingVerified','rMZzB','checkIpChanges','ZVRid','RHFcQ','afTvf','stopTrackingVerified','ipad','now','RnhQF','getDeviceId','BvFhh','vavPC','USER_ID','expectedCountryCode'];_0x291d=function(){return _0x5504ba;};return _0x291d();}
7
+
8
+ var _0x48bca6=_0x5236;function _0x1c77(){var _0x213937=['8HUvabm','1077363mbiCTB','126mKDMWr','504oYTzyu','5909qaiaZk','130164KTZcDp','15534528PCoUXh','1028082qXTqmI','15310ByinDA','66yhUIfB','166hGKOQJ','5.0.0-beta.1','3370fnaFwq'];_0x1c77=function(){return _0x213937;};return _0x1c77();}(function(_0x5c4046,_0x2925fa){var _0x39246f=_0x5236,_0x16ba43=_0x5c4046();while(!![]){try{var _0x3f0513=-parseInt(_0x39246f(0x16f))/0x1*(parseInt(_0x39246f(0x168))/0x2)+-parseInt(_0x39246f(0x172))/0x3+parseInt(_0x39246f(0x16e))/0x4*(parseInt(_0x39246f(0x173))/0x5)+-parseInt(_0x39246f(0x170))/0x6*(parseInt(_0x39246f(0x16d))/0x7)+-parseInt(_0x39246f(0x16b))/0x8*(parseInt(_0x39246f(0x16c))/0x9)+-parseInt(_0x39246f(0x16a))/0xa*(parseInt(_0x39246f(0x174))/0xb)+parseInt(_0x39246f(0x171))/0xc;if(_0x3f0513===_0x2925fa)break;else _0x16ba43['push'](_0x16ba43['shift']());}catch(_0x2c4772){_0x16ba43['push'](_0x16ba43['shift']());}}}(_0x1c77,0x51c92));function _0x5236(_0x24fa2f,_0x3ffa6d){_0x24fa2f=_0x24fa2f-0x168;var _0x1c7765=_0x1c77();var _0x523626=_0x1c7765[_0x24fa2f];return _0x523626;}var _0x28707b = _0x48bca6(0x169);
9
+
10
+ (function(_0x340442,_0x566fdf){const _0x3e6436=_0x4580,_0x566fcc=_0x340442();while(!![]){try{const _0xfefb01=-parseInt(_0x3e6436(0xd0))/0x1*(parseInt(_0x3e6436(0xd6))/0x2)+parseInt(_0x3e6436(0xc0))/0x3*(-parseInt(_0x3e6436(0xcd))/0x4)+-parseInt(_0x3e6436(0xd9))/0x5*(-parseInt(_0x3e6436(0xda))/0x6)+-parseInt(_0x3e6436(0xc5))/0x7*(parseInt(_0x3e6436(0xc4))/0x8)+parseInt(_0x3e6436(0xc9))/0x9*(-parseInt(_0x3e6436(0xc7))/0xa)+-parseInt(_0x3e6436(0xcc))/0xb*(parseInt(_0x3e6436(0xd1))/0xc)+parseInt(_0x3e6436(0xc2))/0xd;if(_0xfefb01===_0x566fdf)break;else _0x566fcc['push'](_0x566fcc['shift']());}catch(_0x1da701){_0x566fcc['push'](_0x566fcc['shift']());}}}(_0x51e9,0xab17d));function _0x4580(_0x5490b0,_0x15aaac){_0x5490b0=_0x5490b0-0xbe;const _0x51e952=_0x51e9();let _0x4580f1=_0x51e952[_0x5490b0];return _0x4580f1;}function _0x51e9(){const _0x50aec7=['9790856HvAlFF','7PEYGCh','bind','20yTkyBN','registerErrorInterceptor','1711494dzykjQ','Http','errors','93302onPjIp','8FnVBsP','stopTrackingVerified','startTrackingVerified','185bBjrQg','1920JzPCNl','eMdjZ','aadSp','52516','onTokenUpdated','6660UvWOUg','trackVerified','setExpectedJurisdiction','10UPieRq','2598588aFBaHg','getVerifiedLocationToken','RadarNetworkError','fraud','947409HhVilZ','Radar','52566358OlOQMj','clearVerifiedLocationToken'];_0x51e9=function(){return _0x50aec7;};return _0x51e9();}function createFraudPlugin(){const _0x3ffb6d=_0x4580,_0x2fbc31={'aadSp':_0x3ffb6d(0xd4),'eMdjZ':_0x3ffb6d(0xbf)};return {'name':_0x2fbc31[_0x3ffb6d(0xd2)],'version':_0x28707b,'install'(_0x5e310f){const _0x484837=_0x3ffb6d,_0xbbed3c=new VerifyApi(_0x5e310f);_0x5e310f[_0x484837(0xc1)][_0x484837(0xbf)]={'trackVerified':_0xbbed3c['trackVerified'][_0x484837(0xc6)](_0xbbed3c),'startTrackingVerified':_0xbbed3c['startTrackingVerified'][_0x484837(0xc6)](_0xbbed3c),'stopTrackingVerified':_0xbbed3c[_0x484837(0xce)][_0x484837(0xc6)](_0xbbed3c),'getVerifiedLocationToken':_0xbbed3c['getVerifiedLocationToken'][_0x484837(0xc6)](_0xbbed3c),'clearVerifiedLocationToken':_0xbbed3c[_0x484837(0xc3)]['bind'](_0xbbed3c),'setExpectedJurisdiction':_0xbbed3c[_0x484837(0xd8)]['bind'](_0xbbed3c),'onTokenUpdated':_0xbbed3c[_0x484837(0xd5)][_0x484837(0xc6)](_0xbbed3c)},_0x5e310f[_0x484837(0xc1)][_0x484837(0xd7)]=_0xbbed3c[_0x484837(0xd7)]['bind'](_0xbbed3c),_0x5e310f['Radar']['startTrackingVerified']=_0xbbed3c[_0x484837(0xcf)][_0x484837(0xc6)](_0xbbed3c),_0x5e310f['Radar'][_0x484837(0xce)]=_0xbbed3c[_0x484837(0xce)][_0x484837(0xc6)](_0xbbed3c),_0x5e310f[_0x484837(0xc1)][_0x484837(0xdb)]=_0xbbed3c[_0x484837(0xdb)][_0x484837(0xc6)](_0xbbed3c),_0x5e310f[_0x484837(0xc1)][_0x484837(0xc3)]=_0xbbed3c[_0x484837(0xc3)]['bind'](_0xbbed3c),_0x5e310f[_0x484837(0xc1)][_0x484837(0xd8)]=_0xbbed3c[_0x484837(0xd8)][_0x484837(0xc6)](_0xbbed3c),_0x5e310f[_0x484837(0xc1)][_0x484837(0xd5)]=_0xbbed3c[_0x484837(0xd5)][_0x484837(0xc6)](_0xbbed3c),_0x5e310f[_0x484837(0xca)][_0x484837(0xc8)](_0x2fbc31[_0x484837(0xd3)],_0x4104da=>_0x4104da?new RadarVerifyAppError():new _0x5e310f[(_0x484837(0xcb))][(_0x484837(0xbe))]());}};}
11
+
12
+ (function(_0x476df5,_0x2c1daa){var _0x39c2a9=_0x412a,_0x1cc6eb=_0x476df5();while(!![]){try{var _0xba6267=parseInt(_0x39c2a9(0x1af))/0x1+parseInt(_0x39c2a9(0x1ad))/0x2+parseInt(_0x39c2a9(0x1aa))/0x3+-parseInt(_0x39c2a9(0x1a9))/0x4+-parseInt(_0x39c2a9(0x1ae))/0x5+parseInt(_0x39c2a9(0x1ab))/0x6*(parseInt(_0x39c2a9(0x1a8))/0x7)+-parseInt(_0x39c2a9(0x1ac))/0x8;if(_0xba6267===_0x2c1daa)break;else _0x1cc6eb['push'](_0x1cc6eb['shift']());}catch(_0x4701b4){_0x1cc6eb['push'](_0x1cc6eb['shift']());}}}(_0x43e6,0x37b41));function _0x412a(_0x50d81c,_0x428ca3){_0x50d81c=_0x50d81c-0x1a8;var _0x43e69f=_0x43e6();var _0x412a40=_0x43e69f[_0x50d81c];return _0x412a40;}_0x16d3df['registerPlugin'](createFraudPlugin());function _0x43e6(){var _0x313823=['2398182jdoFhC','3069224rUBmjZ','549120xajwNO','1004985pOpuOU','9495mPHMLJ','7XkyavA','205796AbxxOm','541524gKvHEA'];_0x43e6=function(){return _0x313823;};return _0x43e6();}
13
+
14
+ })(Radar);
@@ -0,0 +1 @@
1
+ !function(t){"use strict";function n(t,n){return t-=368,e()[t]}function e(){var t=["4mIfmsp","ERROR_VERIFY_APP","46475DiOfDF","12HsrJEj","JUrbJ","66qOlhVn","55845GvysVp","10909670rOZsjd","3000962iAzyfI","TPcZi","3573955ruqCtv","11ARRgsg","15041533vyxmpn","1mTtEIg","name","664aQtVGr","ZWAAC","385305GNwsie","status","RadarVerifyAppError"];return(e=function(){return t})()}!function(t){for(var e=n,r=t();;)try{if(778167===parseInt(e(386))/1*(-parseInt(e(381))/2)+parseInt(e(370))/3*(parseInt(e(373))/4)+-parseInt(e(375))/5*(parseInt(e(378))/6)+-parseInt(e(383))/7+parseInt(e(368))/8*(parseInt(e(379))/9)+parseInt(e(380))/10*(parseInt(e(384))/11)+parseInt(e(376))/12*(parseInt(e(385))/13))break;r.push(r.shift())}catch(t){r.push(r.shift())}}(e);class r extends t.RadarError{constructor(){var t=n,e={TPcZi:"Radar Verify app not running.",ZWAAC:t(372),JUrbJ:t(374)};super(e[t(382)]),this[t(387)]=e[t(369)],this[t(371)]=e[t(377)]}}const i=s;function s(t,n){t-=117;return o()[t]}!function(t){const n=s,e=t();for(;;)try{if(887090===-parseInt(n(139))/1*(parseInt(n(208))/2)+parseInt(n(196))/3+parseInt(n(150))/4*(-parseInt(n(146))/5)+parseInt(n(223))/6*(parseInt(n(173))/7)+-parseInt(n(138))/8*(-parseInt(n(193))/9)+-parseInt(n(123))/10+parseInt(n(222))/11*(parseInt(n(224))/12))break;e.push(e.shift())}catch(t){e.push(e.shift())}}(o);class a{constructor(t){const n=s;this[n(143)]=null,this[n(212)]=null,this.isTrackingVerified=!0,this[n(120)]=null,this[n(177)]=null,this.lastTokenNow=0,this[n(192)]=null,this[n(142)]=null,this[n(197)]=null,this.ctx=t}async checkIpChanges(){const t=s,n={IwcUB:t(209),lXvlV:t(134),rcULb:function(t,n){return t(n)},afTvf:function(t,n){return t!==n},UFGmD:function(t,n){return t??n}},{Http:e,Logger:r}=this.ctx;try{const i=(await e.request({method:n[t(202)],path:n[t(219)]})).ip,s=n.rcULb(Boolean,this[t(197)])&&n[t(183)](i,this[t(197)]);return s&&(r.info("IP changed from "+this[t(197)]+t(228)+i),this[t(177)]=null),this[t(197)]=n[t(175)](i,null),s}catch(e){r[t(137)](t(229)+n[t(160)](String,e))}return!1}async[i(156)](t={},n=!1){const e=i,r={CaZbA:function(t){return t()},uVlqU:function(t,n){return t===n},JZupT:e(151),vavPC:function(t,n){return t??n},BvFhh:function(t,n){return t!==n},msCAR:e(130),aQXdt:"mac",ynBdE:e(117),pBnMf:e(154),tlNkR:e(185),MSSNj:"http://localhost:52516",lVDOE:"ZtdPe"},{Config:s,Http:a,Device:o,Session:c,Storage:u,Logger:p,SDK_VERSION:d,apis:f}=this[e(152)];try{const i=s[e(225)](),{skipVerifyApp:h,reason:l,transactionId:I}=t,k=t.userId||u[e(166)](u[e(191)]),g=o[e(188)](),T=o[e(201)](),v=c.getSessionId(),V=t[e(121)]||u[e(166)](u[e(128)]);k?u[e(132)](u[e(191)],k):r[e(161)](r[e(230)],"MWJvJ")?p[e(119)]("userId not provided for trackVerified."):(this[e(192)]=_0x28d70f||null,this[e(142)]=_0x3cd769||null);const y=t[e(129)]||u[e(163)](u[e(158)]);let C;if(h)C=await f[e(155)][e(127)]({userId:r[e(190)](k,void 0),description:V??void 0,metadata:y,fraud:!0,reason:l,transactionId:I});else if(r[e(189)]("rljZA",r[e(214)])){const s={...t,description:V,deviceId:g,foreground:!0,installId:T,sessionId:v,metadata:y,sdkVersion:d,stopped:!0,userId:k,encrypted:n,expectedCountryCode:this.expectedCountryCode,expectedStateCode:this[e(142)]},{userAgent:o}=navigator,c=o&&(o.toLowerCase()[e(206)](r[e(215)])||o.toLowerCase()[e(206)](r[e(131)])||o[e(221)]()[e(206)](r.pBnMf)||o[e(221)]()[e(206)](r.tlNkR)),u=await a[e(141)]({method:"GET",path:"verify",data:s,host:c?e(218):r.MSSNj}),{user:p,events:f,token:h,expiresAt:l,expiresIn:I,passed:m,failureReasons:x,_id:R}=u;let w;p&&p[e(216)]&&p[e(216)][e(164)]&&p.locationAccuracy&&(w={latitude:p[e(216)][e(164)][1],longitude:p.location[e(164)][0],accuracy:p[e(174)]}),C={user:p,events:f,location:w,token:h,expiresAt:l?new Date(l):void 0,expiresIn:I,passed:m,failureReasons:x,_id:R},i[e(207)]&&(r[e(189)](e(159),r[e(205)])?C[e(157)]=u:_0x1526b1=10)}else r.CaZbA(_0x7ccdb7);return this.lastToken=C,this[e(162)]=performance[e(186)](),this[e(120)]&&this.tokenCallback(C),C}catch(t){throw s.sendError(t),t}}[i(176)](t){const n=i,e={rMZzB:function(t,n){return t(n)},wJBEz:function(t,n){return t===n},scYqN:n(124),udpqw:function(t,n){return t/n},CosrW:function(t,n){return t-n},pRQpc:function(t,n){return t-n},UxIRR:function(t,n){return t<n},LKdYN:function(t,n){return t!==n},eEybZ:n(126),EoeIW:function(t,n){return t===n},ZVRid:n(211),ZiXpm:function(t,n,e){return t(n,e)},bnLUT:function(t,n){return t*n},zBzlk:function(t,n){return t===n},pspln:n(194),eoVul:function(t,n){return t!==n},JhsvJ:n(165),SfTKy:function(t,n){return t instanceof n},gqHiz:function(t){return t()},KosYW:n(182),UQLns:function(t){return t()},fVxFa:n(187)},{Logger:r}=this.ctx;this[n(178)]=!0;const a=async()=>{const r=n;if(e[r(169)](r(198),e.scYqN))e[r(179)](_0x27955d,this[r(212)]);else{const{interval:n=20}=t;let i=n;if(this[r(177)]){const t=e.udpqw(performance.now()-this[r(162)],1e3),s=this[r(177)][r(227)]||0;i=Math.min(e.CosrW(s,t),n)}i=e.pRQpc(i,10),e[r(172)](i,10)&&(e[r(210)](e[r(148)],"KYWVb")?i=10:_0x23a21f()),this[r(143)]&&clearTimeout(this[r(143)]),this[r(178)]&&(e[r(153)](e[r(181)],e[r(181)])?this[r(143)]=e[r(170)](setTimeout,o,e.bnLUT(i,1e3)):_0x17714a[r(119)](r(231)))}},o=async()=>{const i=n;if(e[i(136)](i(125),e[i(195)]))return this.lastToken;try{e[i(149)](e[i(135)],"KtTCN")?this[i(177)]=null:await this[i(156)](t)}catch(t){const n=e[i(133)](t,Error)?t[i(118)]:String(t);r[i(137)](i(122)+n)}e[i(145)](a)};t?.[n(168)]&&(this.ipChangesIntervalId&&e.rMZzB(clearInterval,this[n(212)]),this.ipChangesIntervalId=e[n(170)](setInterval,async()=>{const t=n,r={cjpwQ:function(t,n){return e[s(199)](t,n)},aUmhJ:function(t,n){return t-n}};if(await this[t(180)]()){if(e.LKdYN(e[t(140)],e.KosYW)){if(!this[t(177)])return!1;const n=r[t(171)](r[t(220)](_0x1399ce[t(186)](),this.lastTokenNow),1e3);return this[t(177)].passed&&n<(this[t(177)][t(227)]||0)}o()}},1e4)),this[n(167)]()?e[n(217)](a):e[n(149)](e.fVxFa,"ENTDa")?e[n(217)](o):this[n(120)]=_0x553681}[i(184)](){const t=i,n={gWtWq:function(t,n){return t(n)}};this[t(178)]=!1,this[t(143)]&&n[t(200)](clearTimeout,this[t(143)]),this[t(212)]&&n[t(200)](clearInterval,this.ipChangesIntervalId)}async[i(204)](t={}){const n=i;return this[n(167)]()?this.lastToken:this[n(156)](t)}[i(144)](){this[i(177)]=null}[i(167)](){const t=i,n={QdpJj:function(t,n){return t/n},ijtTF:function(t,n){return t-n}};if(!this[t(177)])return!1;const e=n[t(226)](n[t(203)](performance[t(186)](),this[t(162)]),1e3);return this.lastToken[t(147)]&&e<(this[t(177)].expiresIn||0)}setExpectedJurisdiction(t,n){const e=i,r={HVrWw:function(t,n){return t||n}};this[e(192)]=r[e(213)](t,null),this.expectedStateCode=r[e(213)](n,null)}onTokenUpdated(t){this.tokenCallback=t}}function o(){const t=["39483OLazTg","davSQ","pspln","2752038kCjXrk","lastIp","TDVWa","udpqw","gWtWq","getInstallId","IwcUB","ijtTF","getVerifiedLocationToken","lVDOE","includes","debug","177542ngHqcR","GET","LKdYN","qPffi","ipChangesIntervalId","HVrWw","msCAR","aQXdt","location","UQLns","https://radar-verify.com:52516","lXvlV","aUmhJ","toLowerCase","11pZClGd","696YKFYBl","28251396FiWhry","get","QdpJj","expiresIn"," to ","Error checking IP: ","JZupT","userId not provided for trackVerified.","iphone","message","warn","tokenCallback","description","trackVerified error: ","2390530RMxBQp","prtGV","sODKr","XcUnv","trackOnce","DESCRIPTION","metadata","ypfMm","ynBdE","setItem","SfTKy","ping","JhsvJ","zBzlk","error","1432ZtNMAp","17JSkJlu","KosYW","request","expectedStateCode","tokenTimeoutId","clearVerifiedLocationToken","gqHiz","7665060PUEAvo","passed","eEybZ","eoVul","4NyfjRx","MWJvJ","ctx","EoeIW","ipod","Track","trackVerified","response","METADATA","HXfRh","rcULb","uVlqU","lastTokenNow","getJSON","coordinates","KtTCN","getItem","isLastTokenValid","ipChanges","wJBEz","ZiXpm","cjpwQ","UxIRR","6720JuiaID","locationAccuracy","UFGmD","startTrackingVerified","lastToken","isTrackingVerified","rMZzB","checkIpChanges","ZVRid","RHFcQ","afTvf","stopTrackingVerified","ipad","now","RnhQF","getDeviceId","BvFhh","vavPC","USER_ID","expectedCountryCode"];return(o=function(){return t})()}var c=p;function u(){var t=["8HUvabm","1077363mbiCTB","126mKDMWr","504oYTzyu","5909qaiaZk","130164KTZcDp","15534528PCoUXh","1028082qXTqmI","15310ByinDA","66yhUIfB","166hGKOQJ","5.0.0-beta.1","3370fnaFwq"];return(u=function(){return t})()}function p(t,n){return t-=360,u()[t]}!function(t){for(var n=p,e=t();;)try{if(334994===-parseInt(n(367))/1*(parseInt(n(360))/2)+-parseInt(n(370))/3+parseInt(n(366))/4*(parseInt(n(371))/5)+-parseInt(n(368))/6*(parseInt(n(365))/7)+-parseInt(n(363))/8*(parseInt(n(364))/9)+-parseInt(n(362))/10*(parseInt(n(372))/11)+parseInt(n(369))/12)break;e.push(e.shift())}catch(t){e.push(e.shift())}}(u);var d=c(361);function f(t,n){t-=190;return h()[t]}function h(){const t=["9790856HvAlFF","7PEYGCh","bind","20yTkyBN","registerErrorInterceptor","1711494dzykjQ","Http","errors","93302onPjIp","8FnVBsP","stopTrackingVerified","startTrackingVerified","185bBjrQg","1920JzPCNl","eMdjZ","aadSp","52516","onTokenUpdated","6660UvWOUg","trackVerified","setExpectedJurisdiction","10UPieRq","2598588aFBaHg","getVerifiedLocationToken","RadarNetworkError","fraud","947409HhVilZ","Radar","52566358OlOQMj","clearVerifiedLocationToken"];return(h=function(){return t})()}function l(t,n){return t-=424,I()[t]}function I(){var t=["2398182jdoFhC","3069224rUBmjZ","549120xajwNO","1004985pOpuOU","9495mPHMLJ","7XkyavA","205796AbxxOm","541524gKvHEA"];return(I=function(){return t})()}!function(t){const n=f,e=t();for(;;)try{if(700797===-parseInt(n(208))/1*(parseInt(n(214))/2)+parseInt(n(192))/3*(-parseInt(n(205))/4)+-parseInt(n(217))/5*(-parseInt(n(218))/6)+-parseInt(n(197))/7*(parseInt(n(196))/8)+parseInt(n(201))/9*(-parseInt(n(199))/10)+-parseInt(n(204))/11*(parseInt(n(209))/12)+parseInt(n(194))/13)break;e.push(e.shift())}catch(t){e.push(e.shift())}}(h),function(t){for(var n=l,e=t();;)try{if(228161===parseInt(n(431))/1+parseInt(n(429))/2+parseInt(n(426))/3+-parseInt(n(425))/4+-parseInt(n(430))/5+parseInt(n(427))/6*(parseInt(n(424))/7)+-parseInt(n(428))/8)break;e.push(e.shift())}catch(t){e.push(e.shift())}}(I),t.registerPlugin(function(){const t=f,n={aadSp:t(212),eMdjZ:t(191)};return{name:n[t(210)],version:d,install(e){const i=t,s=new a(e);e[i(193)][i(191)]={trackVerified:s.trackVerified[i(198)](s),startTrackingVerified:s.startTrackingVerified[i(198)](s),stopTrackingVerified:s[i(206)][i(198)](s),getVerifiedLocationToken:s.getVerifiedLocationToken[i(198)](s),clearVerifiedLocationToken:s[i(195)].bind(s),setExpectedJurisdiction:s[i(216)].bind(s),onTokenUpdated:s[i(213)][i(198)](s)},e[i(193)][i(215)]=s[i(215)].bind(s),e.Radar.startTrackingVerified=s[i(207)][i(198)](s),e.Radar[i(206)]=s[i(206)][i(198)](s),e[i(193)][i(219)]=s[i(219)][i(198)](s),e[i(193)][i(195)]=s[i(195)].bind(s),e[i(193)][i(216)]=s[i(216)][i(198)](s),e[i(193)][i(213)]=s[i(213)][i(198)](s),e[i(202)][i(200)](n[i(211)],t=>t?new r:new(e[i(203)][i(190)]))}}}())}(Radar);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { RadarError } from 'radar-sdk-js';
2
+ export declare class RadarVerifyAppError extends RadarError {
3
+ constructor();
4
+ }
@@ -0,0 +1,33 @@
1
+ import type { RadarTrackVerifiedParams, RadarStartTrackingVerifiedParams, RadarTrackVerifiedResponse } from './types';
2
+ import type { RadarPlugin } from 'radar-sdk-js';
3
+ export interface RadarFraud {
4
+ trackVerified(params?: RadarTrackVerifiedParams, encrypted?: boolean): Promise<RadarTrackVerifiedResponse>;
5
+ startTrackingVerified(params: RadarStartTrackingVerifiedParams): void;
6
+ stopTrackingVerified(): void;
7
+ getVerifiedLocationToken(params?: RadarTrackVerifiedParams): Promise<RadarTrackVerifiedResponse | null>;
8
+ clearVerifiedLocationToken(): void;
9
+ setExpectedJurisdiction(countryCode?: string, stateCode?: string): void;
10
+ onTokenUpdated(callback: (token: RadarTrackVerifiedResponse) => void): void;
11
+ }
12
+ declare module 'radar-sdk-js' {
13
+ namespace Radar {
14
+ let fraud: RadarFraud;
15
+ /** @deprecated Use Radar.fraud.trackVerified() */
16
+ function trackVerified(params?: RadarTrackVerifiedParams, encrypted?: boolean): Promise<RadarTrackVerifiedResponse>;
17
+ /** @deprecated Use Radar.fraud.startTrackingVerified() */
18
+ function startTrackingVerified(params: RadarStartTrackingVerifiedParams): void;
19
+ /** @deprecated Use Radar.fraud.stopTrackingVerified() */
20
+ function stopTrackingVerified(): void;
21
+ /** @deprecated Use Radar.fraud.getVerifiedLocationToken() */
22
+ function getVerifiedLocationToken(params?: RadarTrackVerifiedParams): Promise<RadarTrackVerifiedResponse | null>;
23
+ /** @deprecated Use Radar.fraud.clearVerifiedLocationToken() */
24
+ function clearVerifiedLocationToken(): void;
25
+ /** @deprecated Use Radar.fraud.setExpectedJurisdiction() */
26
+ function setExpectedJurisdiction(countryCode?: string, stateCode?: string): void;
27
+ /** @deprecated Use Radar.fraud.onTokenUpdated() */
28
+ function onTokenUpdated(callback: (token: RadarTrackVerifiedResponse) => void): void;
29
+ }
30
+ }
31
+ export declare function createFraudPlugin(): RadarPlugin;
32
+ export { RadarVerifyAppError } from './errors';
33
+ export type { RadarTrackVerifiedParams, RadarStartTrackingVerifiedParams, RadarTrackVerifiedResponse } from './types';
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ import { RadarError } from 'radar-sdk-js';
2
+
3
+ (function(_0x30d8f3,_0x2a7d09){var _0x5c7e23=_0x1998,_0x565f6e=_0x30d8f3();while(!![]){try{var _0x85e424=-parseInt(_0x5c7e23(0x1f9))/0x1+parseInt(_0x5c7e23(0x1f6))/0x2*(-parseInt(_0x5c7e23(0x1fc))/0x3)+parseInt(_0x5c7e23(0x1f8))/0x4*(-parseInt(_0x5c7e23(0x1ee))/0x5)+-parseInt(_0x5c7e23(0x1f2))/0x6+parseInt(_0x5c7e23(0x1f0))/0x7+-parseInt(_0x5c7e23(0x1ef))/0x8*(parseInt(_0x5c7e23(0x1fa))/0x9)+-parseInt(_0x5c7e23(0x1fb))/0xa*(-parseInt(_0x5c7e23(0x1f4))/0xb);if(_0x85e424===_0x2a7d09)break;else _0x565f6e['push'](_0x565f6e['shift']());}catch(_0x3ee073){_0x565f6e['push'](_0x565f6e['shift']());}}}(_0x6f1d,0xb10aa));function _0x6f1d(){var _0x18e0c0=['ZdkIQ','3292DXpBzS','878427YsVGzq','9xbrTcJ','20vAoUxc','798AlHgXS','4430OXrHeY','3877456VbMkzZ','3953649GSBVKI','gaCLi','5096208bKRcCi','ERROR_VERIFY_APP','23028632ukhScT','name','8158ocZDGA'];_0x6f1d=function(){return _0x18e0c0;};return _0x6f1d();}function _0x1998(_0x176b7a,_0x2f3d45){_0x176b7a=_0x176b7a-0x1ee;var _0x6f1d37=_0x6f1d();var _0x1998b5=_0x6f1d37[_0x176b7a];return _0x1998b5;}class RadarVerifyAppError extends RadarError{constructor(){var _0x4845ca=_0x1998,_0x1ad271={'gaCLi':'Radar\x20Verify\x20app\x20not\x20running.','hPxsC':'RadarVerifyAppError','ZdkIQ':_0x4845ca(0x1f3)};super(_0x1ad271[_0x4845ca(0x1f1)]),this[_0x4845ca(0x1f5)]=_0x1ad271['hPxsC'],this['status']=_0x1ad271[_0x4845ca(0x1f7)];}}
4
+
5
+ const _0x3d9843=_0x2ed6;(function(_0x2d0e8d,_0x5db04b){const _0x37c936=_0x2ed6,_0x253749=_0x2d0e8d();while(!![]){try{const _0x158c23=-parseInt(_0x37c936(0x212))/0x1*(parseInt(_0x37c936(0x1f9))/0x2)+-parseInt(_0x37c936(0x1e8))/0x3*(parseInt(_0x37c936(0x20f))/0x4)+parseInt(_0x37c936(0x1ea))/0x5+-parseInt(_0x37c936(0x210))/0x6+-parseInt(_0x37c936(0x1f5))/0x7+-parseInt(_0x37c936(0x1bd))/0x8+-parseInt(_0x37c936(0x1e1))/0x9*(-parseInt(_0x37c936(0x1e7))/0xa);if(_0x158c23===_0x5db04b)break;else _0x253749['push'](_0x253749['shift']());}catch(_0x14fc81){_0x253749['push'](_0x253749['shift']());}}}(_0x55b7,0x2e30b));class VerifyApi{constructor(_0x25edbb){const _0x255415=_0x2ed6;this[_0x255415(0x1d2)]=null,this[_0x255415(0x1da)]=null,this['isTrackingVerified']=!![],this[_0x255415(0x205)]=null,this[_0x255415(0x1a5)]=null,this[_0x255415(0x1a9)]=0x0,this[_0x255415(0x1ee)]=null,this[_0x255415(0x211)]=null,this[_0x255415(0x1eb)]=null,this[_0x255415(0x207)]=_0x25edbb;}async[_0x3d9843(0x1d5)](){const _0x82c489=_0x3d9843,_0x4f7c33={'mNZsn':function(_0x43f2c8,_0x2875e3){return _0x43f2c8(_0x2875e3);},'AiSJE':'YVdyF','Nftko':_0x82c489(0x19f),'jPrcU':_0x82c489(0x1c3),'VdouU':_0x82c489(0x1cf),'qlnbu':function(_0x2306a0,_0x57de9d){return _0x2306a0!==_0x57de9d;},'CSoub':function(_0x465d5d,_0x2ce09d){return _0x465d5d??_0x2ce09d;}},{Http:_0x2c4c79,Logger:_0x58a5aa}=this[_0x82c489(0x207)];try{if(_0x4f7c33[_0x82c489(0x1b3)]===_0x4f7c33[_0x82c489(0x1a1)])_0x4f7c33[_0x82c489(0x20d)](_0x4bf035,this['ipChangesIntervalId']);else {const _0x5509b0=await _0x2c4c79[_0x82c489(0x1b7)]({'method':_0x4f7c33[_0x82c489(0x1d6)],'path':_0x4f7c33[_0x82c489(0x201)]}),_0x39ee9b=_0x5509b0['ip'],_0x336dbb=Boolean(this['lastIp'])&&_0x4f7c33[_0x82c489(0x1f2)](_0x39ee9b,this[_0x82c489(0x1eb)]);return _0x336dbb&&(_0x58a5aa[_0x82c489(0x1e9)](_0x82c489(0x1f4)+this[_0x82c489(0x1eb)]+_0x82c489(0x1d1)+_0x39ee9b),this['lastToken']=null),this['lastIp']=_0x4f7c33[_0x82c489(0x1ec)](_0x39ee9b,null),_0x336dbb;}}catch(_0x3a7ee7){_0x58a5aa[_0x82c489(0x1a8)]('Error\x20checking\x20IP:\x20'+_0x4f7c33[_0x82c489(0x20d)](String,_0x3a7ee7));}return ![];}async[_0x3d9843(0x19d)](_0x26b636={},_0x50b9e8=![]){const _0x453bba=_0x3d9843,_0x100bb7={'SCFFt':function(_0x156099,_0x23fa89){return _0x156099||_0x23fa89;},'QEJCB':function(_0x4f6b0d,_0x467754){return _0x4f6b0d===_0x467754;},'xXNbg':_0x453bba(0x1a3),'HGwbo':function(_0x656821,_0x52d7fc){return _0x656821!==_0x52d7fc;},'JpuyD':_0x453bba(0x19b),'DpiaP':_0x453bba(0x202),'ZZQet':function(_0x3d5f5b,_0x1ab42e){return _0x3d5f5b??_0x1ab42e;},'pfFDs':_0x453bba(0x213),'RRmNJ':_0x453bba(0x1a7),'RcSEY':_0x453bba(0x1ff),'nssup':_0x453bba(0x1dc),'oKyFu':'http://localhost:52516','sautM':function(_0x226155,_0x31e30f){return _0x226155===_0x31e30f;}},{Config:_0xed0bed,Http:_0x4c7d18,Device:_0x2ebf68,Session:_0x344ae0,Storage:_0x96ca83,Logger:_0x5416be,SDK_VERSION:_0x15cb2e,apis:_0x8df898}=this['ctx'];try{const _0x4fa8ba=_0xed0bed[_0x453bba(0x1f1)](),{skipVerifyApp:_0x2d07d,reason:_0x43f51f,transactionId:_0x5d9a57}=_0x26b636,_0xe68ab0=_0x26b636[_0x453bba(0x1ef)]||_0x96ca83['getItem'](_0x96ca83[_0x453bba(0x1ed)]),_0x4087fe=_0x2ebf68[_0x453bba(0x1fa)](),_0x1bd320=_0x2ebf68[_0x453bba(0x1a0)](),_0x2c87d5=_0x344ae0[_0x453bba(0x1e6)](),_0x18bb50=_0x26b636[_0x453bba(0x1b2)]||_0x96ca83[_0x453bba(0x1db)](_0x96ca83[_0x453bba(0x1c9)]);!_0xe68ab0?_0x100bb7[_0x453bba(0x1aa)](_0x100bb7['xXNbg'],_0x100bb7[_0x453bba(0x1ca)])?_0x5416be[_0x453bba(0x20b)](_0x453bba(0x1c2)):_0x1c3c5d[_0x453bba(0x1be)]=_0x2945cb:_0x100bb7[_0x453bba(0x1dd)](_0x100bb7[_0x453bba(0x1fb)],_0x100bb7['DpiaP'])?_0x96ca83[_0x453bba(0x1a4)](_0x96ca83[_0x453bba(0x1ed)],_0xe68ab0):_0x2b78f8(this[_0x453bba(0x1d2)]);const _0x1aeaee=_0x26b636[_0x453bba(0x1ab)]||_0x96ca83[_0x453bba(0x200)](_0x96ca83['METADATA']);let _0x9deda7;if(_0x2d07d)_0x9deda7=await _0x8df898[_0x453bba(0x1b0)][_0x453bba(0x1a2)]({'userId':_0x100bb7[_0x453bba(0x1c0)](_0xe68ab0,undefined),'description':_0x100bb7[_0x453bba(0x1c0)](_0x18bb50,undefined),'metadata':_0x1aeaee,'fraud':!![],'reason':_0x43f51f,'transactionId':_0x5d9a57});else {const _0x3e5e39={..._0x26b636,'description':_0x18bb50,'deviceId':_0x4087fe,'foreground':!![],'installId':_0x1bd320,'sessionId':_0x2c87d5,'metadata':_0x1aeaee,'sdkVersion':_0x15cb2e,'stopped':!![],'userId':_0xe68ab0,'encrypted':_0x50b9e8,'expectedCountryCode':this[_0x453bba(0x1ee)],'expectedStateCode':this[_0x453bba(0x211)]},{userAgent:_0x400d90}=navigator,_0x37ab99=_0x400d90&&(_0x400d90[_0x453bba(0x1d3)]()[_0x453bba(0x1e5)](_0x453bba(0x1b4))||_0x400d90[_0x453bba(0x1d3)]()[_0x453bba(0x1e5)](_0x100bb7['pfFDs'])||_0x400d90[_0x453bba(0x1d3)]()[_0x453bba(0x1e5)](_0x100bb7['RRmNJ'])||_0x400d90[_0x453bba(0x1d3)]()[_0x453bba(0x1e5)](_0x100bb7[_0x453bba(0x1bf)])),_0x26fb0f=await _0x4c7d18[_0x453bba(0x1b7)]({'method':_0x453bba(0x1c3),'path':_0x453bba(0x1fd),'data':_0x3e5e39,'host':_0x37ab99?_0x100bb7[_0x453bba(0x1e4)]:_0x100bb7['oKyFu']}),{user:_0x5c8e21,events:_0x2a4808,token:_0x39eb6f,expiresAt:_0x5a7331,expiresIn:_0x26eb03,passed:_0x38e738,failureReasons:_0x128e7d,_id:_0x2da9dc}=_0x26fb0f;let _0xb3a6d1;_0x5c8e21&&_0x5c8e21[_0x453bba(0x1e2)]&&_0x5c8e21[_0x453bba(0x1e2)][_0x453bba(0x1cc)]&&_0x5c8e21['locationAccuracy']&&(_0xb3a6d1={'latitude':_0x5c8e21[_0x453bba(0x1e2)][_0x453bba(0x1cc)][0x1],'longitude':_0x5c8e21[_0x453bba(0x1e2)][_0x453bba(0x1cc)][0x0],'accuracy':_0x5c8e21['locationAccuracy']}),_0x9deda7={'user':_0x5c8e21,'events':_0x2a4808,'location':_0xb3a6d1,'token':_0x39eb6f,'expiresAt':_0x5a7331?new Date(_0x5a7331):undefined,'expiresIn':_0x26eb03,'passed':_0x38e738,'failureReasons':_0x128e7d,'_id':_0x2da9dc},_0x4fa8ba[_0x453bba(0x1a6)]&&(_0x9deda7[_0x453bba(0x1be)]=_0x26fb0f);}return this[_0x453bba(0x1a5)]=_0x9deda7,this[_0x453bba(0x1a9)]=performance[_0x453bba(0x1b1)](),this[_0x453bba(0x205)]&&(_0x100bb7[_0x453bba(0x19e)](_0x453bba(0x204),_0x453bba(0x1b5))?(this[_0x453bba(0x1ee)]=_0x100bb7[_0x453bba(0x1ba)](_0x5e9cfe,null),this['expectedStateCode']=_0x100bb7['SCFFt'](_0x9c7654,null)):this[_0x453bba(0x205)](_0x9deda7)),_0x9deda7;}catch(_0x3fa8e5){_0xed0bed[_0x453bba(0x1de)](_0x3fa8e5);throw _0x3fa8e5;}}[_0x3d9843(0x209)](_0x45b0eb){const _0x5d80fc=_0x3d9843,_0x4d184a={'Kfzjw':function(_0x1e2406){return _0x1e2406();},'ZTjmr':function(_0x1b9a81,_0xe7c80c){return _0x1b9a81===_0xe7c80c;},'wCjgW':'OTRjR','osKTf':function(_0x3ae8ff,_0x3afc0f){return _0x3ae8ff-_0x3afc0f;},'ydLmG':function(_0x4b1b4e,_0x438d3c){return _0x4b1b4e<_0x438d3c;},'vMMXf':'kxBUG','NIXop':'jYwTN','jwqWp':function(_0x443957,_0x3f2ea5){return _0x443957(_0x3f2ea5);},'KCcgV':function(_0x30e873,_0x592abe,_0x2a6acd){return _0x30e873(_0x592abe,_0x2a6acd);},'DoNZh':function(_0x9a04d0,_0x1dc9fe){return _0x9a04d0*_0x1dc9fe;},'BGrYP':function(_0xd95e6f,_0x797f42){return _0xd95e6f(_0x797f42);},'tFWUH':_0x5d80fc(0x208),'kbJoF':_0x5d80fc(0x1f0),'TQpxL':'VQpSX','ApTDo':function(_0x352d1d,_0x39ee9e){return _0x352d1d instanceof _0x39ee9e;},'VgCKJ':function(_0x20e836,_0xbd85ff){return _0x20e836(_0xbd85ff);},'DfRIY':function(_0x213087){return _0x213087();},'wmvkH':function(_0x1c579b){return _0x1c579b();},'WjgqC':function(_0x3a6c66,_0x53cbc5){return _0x3a6c66(_0x53cbc5);},'gRDOE':function(_0x3ea757){return _0x3ea757();}},{Logger:_0xe0a691}=this[_0x5d80fc(0x207)];this[_0x5d80fc(0x20e)]=!![];const _0xba4eb4=async()=>{const _0x4f3127=_0x5d80fc,{interval:interval=0x14}=_0x45b0eb;let _0x5426fe=interval;if(this['lastToken']){if(_0x4d184a[_0x4f3127(0x1c4)](_0x4d184a[_0x4f3127(0x1cd)],_0x4d184a['wCjgW'])){const _0x253cfa=_0x4d184a[_0x4f3127(0x1d9)](performance[_0x4f3127(0x1b1)](),this[_0x4f3127(0x1a9)])/0x3e8,_0x36c2ef=this[_0x4f3127(0x1a5)][_0x4f3127(0x1c1)]||0x0;_0x5426fe=Math[_0x4f3127(0x1e0)](_0x4d184a[_0x4f3127(0x1d9)](_0x36c2ef,_0x253cfa),interval);}else void _0x4d184a[_0x4f3127(0x1f6)](_0x4cce42);}_0x5426fe=_0x4d184a[_0x4f3127(0x1d9)](_0x5426fe,0xa),_0x4d184a['ydLmG'](_0x5426fe,0xa)&&(_0x5426fe=0xa),this[_0x4f3127(0x1d2)]&&(_0x4d184a[_0x4f3127(0x1bc)]!==_0x4d184a[_0x4f3127(0x1ce)]?_0x4d184a[_0x4f3127(0x1fe)](clearTimeout,this[_0x4f3127(0x1d2)]):void _0x146937()),this['isTrackingVerified']&&(this[_0x4f3127(0x1d2)]=_0x4d184a[_0x4f3127(0x206)](setTimeout,_0x379003,_0x4d184a[_0x4f3127(0x1e3)](_0x5426fe,0x3e8)));},_0x379003=async()=>{const _0x2710e3=_0x5d80fc;if(_0x4d184a[_0x2710e3(0x1b6)]!==_0x4d184a[_0x2710e3(0x1c5)]){try{_0x4d184a['TQpxL']!==_0x4d184a[_0x2710e3(0x1ad)]?(this[_0x2710e3(0x20e)]=![],this['tokenTimeoutId']&&_0x40b599(this[_0x2710e3(0x1d2)]),this[_0x2710e3(0x1da)]&&_0x4d184a[_0x2710e3(0x1b8)](_0x5391f8,this['ipChangesIntervalId'])):await this[_0x2710e3(0x19d)](_0x45b0eb);}catch(_0x5ad0c1){const _0x24395d=_0x4d184a[_0x2710e3(0x1c6)](_0x5ad0c1,Error)?_0x5ad0c1[_0x2710e3(0x1df)]:_0x4d184a[_0x2710e3(0x214)](String,_0x5ad0c1);_0xe0a691[_0x2710e3(0x1a8)]('trackVerified\x20error:\x20'+_0x24395d);}void _0x4d184a[_0x2710e3(0x1f8)](_0xba4eb4);}else {if(this[_0x2710e3(0x1d4)]())return this['lastToken'];return this[_0x2710e3(0x19d)](_0x5cbe02);}};_0x45b0eb?.['ipChanges']&&(this[_0x5d80fc(0x1da)]&&_0x4d184a[_0x5d80fc(0x1af)](clearInterval,this['ipChangesIntervalId']),this[_0x5d80fc(0x1da)]=_0x4d184a[_0x5d80fc(0x206)](setInterval,async()=>{const _0x39f169=_0x5d80fc,_0x469720=await this['checkIpChanges']();_0x469720&&void _0x4d184a[_0x39f169(0x1bb)](_0x379003);},0x2710)),this[_0x5d80fc(0x1d4)]()?void _0x4d184a['gRDOE'](_0xba4eb4):void _0x379003();}[_0x3d9843(0x20a)](){const _0x37e0d3=_0x3d9843,_0xd78105={'TILVx':function(_0x36834d,_0x51d8e6){return _0x36834d(_0x51d8e6);},'TDmow':function(_0x20e1f2,_0x5a9673){return _0x20e1f2!==_0x5a9673;},'SoPGu':'rJDVT','ddWPv':'yzmbK'};this['isTrackingVerified']=![];this['tokenTimeoutId']&&(_0xd78105[_0x37e0d3(0x20c)](_0xd78105[_0x37e0d3(0x1b9)],_0xd78105['SoPGu'])?_0xd78105[_0x37e0d3(0x199)](_0xfe06ac,this[_0x37e0d3(0x1da)]):clearTimeout(this[_0x37e0d3(0x1d2)]));if(this['ipChangesIntervalId']){if(_0xd78105[_0x37e0d3(0x20c)](_0x37e0d3(0x1d0),_0xd78105[_0x37e0d3(0x1f7)]))_0xd78105[_0x37e0d3(0x199)](clearInterval,this[_0x37e0d3(0x1da)]);else return ![];}}async[_0x3d9843(0x1ac)](_0x742561={}){const _0x2c84f7=_0x3d9843,_0x4e8661={'eiTTb':function(_0x3e77fc){return _0x3e77fc();},'RoKEG':function(_0x506fce,_0x595155){return _0x506fce===_0x595155;},'imGRP':_0x2c84f7(0x19c)};if(this[_0x2c84f7(0x1d4)]()){if(_0x4e8661[_0x2c84f7(0x1c8)](_0x4e8661[_0x2c84f7(0x1f3)],_0x2c84f7(0x19a)))void FMozCI['eiTTb'](_0x3f1971);else return this[_0x2c84f7(0x1a5)];}return this[_0x2c84f7(0x19d)](_0x742561);}[_0x3d9843(0x1cb)](){const _0x4bcccf=_0x3d9843;this[_0x4bcccf(0x1a5)]=null;}[_0x3d9843(0x1d4)](){const _0x17847a=_0x3d9843,_0xeadcea={'IhceJ':function(_0xdadde,_0x43cef8){return _0xdadde(_0x43cef8);},'sVGrv':function(_0x4b92a9,_0x4b5490){return _0x4b92a9!==_0x4b5490;},'oNIBQ':'gBWuU','JhphX':function(_0x29733f,_0x5beb52){return _0x29733f/_0x5beb52;},'iQpeM':function(_0x1f6217,_0x55d94e){return _0x1f6217<_0x55d94e;}};if(!this[_0x17847a(0x1a5)]){if(_0xeadcea[_0x17847a(0x215)]('gBWuU',_0xeadcea['oNIBQ']))_0x465328[_0x17847a(0x1a8)]('Error\x20checking\x20IP:\x20'+iYpNdr[_0x17847a(0x1c7)](_0xb094fe,_0x5b7e67));else return ![];}const _0x37367f=_0xeadcea[_0x17847a(0x1d7)](performance[_0x17847a(0x1b1)]()-this[_0x17847a(0x1a9)],0x3e8);return this[_0x17847a(0x1a5)][_0x17847a(0x203)]&&_0xeadcea['iQpeM'](_0x37367f,this[_0x17847a(0x1a5)]['expiresIn']||0x0);}[_0x3d9843(0x1fc)](_0x50de9b,_0x259bff){const _0x2e5ed2=_0x3d9843,_0xa5a805={'NmRjX':function(_0x1738fd,_0x333181){return _0x1738fd||_0x333181;}};this['expectedCountryCode']=_0xa5a805[_0x2e5ed2(0x1d8)](_0x50de9b,null),this[_0x2e5ed2(0x211)]=_0x259bff||null;}[_0x3d9843(0x1ae)](_0x4d19d3){this['tokenCallback']=_0x4d19d3;}}function _0x2ed6(_0x17524d,_0x1bc180){_0x17524d=_0x17524d-0x199;const _0x55b71d=_0x55b7();let _0x2ed6e9=_0x55b71d[_0x17524d];return _0x2ed6e9;}function _0x55b7(){const _0x15b3d7=['RcSEY','ZZQet','expiresIn','userId\x20not\x20provided\x20for\x20trackVerified.','GET','ZTjmr','kbJoF','ApTDo','IhceJ','RoKEG','DESCRIPTION','xXNbg','clearVerifiedLocationToken','coordinates','wCjgW','NIXop','ping','OkfDV','\x20to\x20','tokenTimeoutId','toLowerCase','isLastTokenValid','checkIpChanges','jPrcU','JhphX','NmRjX','osKTf','ipChangesIntervalId','getItem','https://radar-verify.com:52516','HGwbo','sendError','message','min','9qmrJkd','location','DoNZh','nssup','includes','getSessionId','8179540mXyssz','963MRRSXO','info','1559595wJWgWT','lastIp','CSoub','USER_ID','expectedCountryCode','userId','mGyPQ','get','qlnbu','imGRP','IP\x20changed\x20from\x20','485625CQcGpS','Kfzjw','ddWPv','DfRIY','84254GrnDma','getDeviceId','JpuyD','setExpectedJurisdiction','verify','jwqWp','ipad','getJSON','VdouU','uxpwX','passed','MFMgp','tokenCallback','KCcgV','ctx','pISFr','startTrackingVerified','stopTrackingVerified','warn','TDmow','mNZsn','isTrackingVerified','3356BBgcta','1256256GKypRA','expectedStateCode','7nBguUM','iphone','VgCKJ','sVGrv','TILVx','ofKus','lCgNp','yfqLT','trackVerified','sautM','RXHCg','getInstallId','Nftko','trackOnce','qfbmC','setItem','lastToken','debug','ipod','error','lastTokenNow','QEJCB','metadata','getVerifiedLocationToken','TQpxL','onTokenUpdated','WjgqC','Track','now','description','AiSJE','mac','VRtem','tFWUH','request','BGrYP','SoPGu','SCFFt','wmvkH','vMMXf','781752jFpzsx','response'];_0x55b7=function(){return _0x15b3d7;};return _0x55b7();}
6
+
7
+ var _0x252873=_0x6f9a;(function(_0x1289e2,_0x2ab291){var _0x50eac0=_0x6f9a,_0x3fb1dd=_0x1289e2();while(!![]){try{var _0x22ee44=parseInt(_0x50eac0(0x1ec))/0x1*(parseInt(_0x50eac0(0x1eb))/0x2)+parseInt(_0x50eac0(0x1ee))/0x3+-parseInt(_0x50eac0(0x1ea))/0x4*(parseInt(_0x50eac0(0x1e2))/0x5)+parseInt(_0x50eac0(0x1e3))/0x6*(parseInt(_0x50eac0(0x1e9))/0x7)+parseInt(_0x50eac0(0x1e5))/0x8*(parseInt(_0x50eac0(0x1e4))/0x9)+parseInt(_0x50eac0(0x1e7))/0xa+-parseInt(_0x50eac0(0x1ed))/0xb*(parseInt(_0x50eac0(0x1e6))/0xc);if(_0x22ee44===_0x2ab291)break;else _0x3fb1dd['push'](_0x3fb1dd['shift']());}catch(_0x6f41c4){_0x3fb1dd['push'](_0x3fb1dd['shift']());}}}(_0x173a,0xed465));function _0x6f9a(_0x29306a,_0x3759cd){_0x29306a=_0x29306a-0x1e2;var _0x173a58=_0x173a();var _0x6f9a75=_0x173a58[_0x29306a];return _0x6f9a75;}var _0x1e2ebc = _0x252873(0x1e8);function _0x173a(){var _0x36a438=['15636830wmiykl','5.0.0-beta.1','112322QRJQci','215988xmBuDd','1181842kqNhVR','3fkRmAY','109659DqPTpu','5717388oGTMaA','65xWIsUN','30ycWnbD','158751HjSezE','104gDOcju','4668HgEyXn'];_0x173a=function(){return _0x36a438;};return _0x173a();}
8
+
9
+ (function(_0x14fb41,_0x13e299){const _0x2079ee=_0x4dd8,_0x254a12=_0x14fb41();while(!![]){try{const _0x3e13ab=parseInt(_0x2079ee(0x1ef))/0x1+-parseInt(_0x2079ee(0x203))/0x2*(-parseInt(_0x2079ee(0x200))/0x3)+-parseInt(_0x2079ee(0x1f5))/0x4*(parseInt(_0x2079ee(0x1fe))/0x5)+-parseInt(_0x2079ee(0x1f4))/0x6*(parseInt(_0x2079ee(0x1fa))/0x7)+parseInt(_0x2079ee(0x1f3))/0x8*(-parseInt(_0x2079ee(0x207))/0x9)+parseInt(_0x2079ee(0x1ff))/0xa*(-parseInt(_0x2079ee(0x20a))/0xb)+-parseInt(_0x2079ee(0x1f6))/0xc*(-parseInt(_0x2079ee(0x208))/0xd);if(_0x3e13ab===_0x13e299)break;else _0x254a12['push'](_0x254a12['shift']());}catch(_0x22c52a){_0x254a12['push'](_0x254a12['shift']());}}}(_0x41b8,0xc444c));function _0x41b8(){const _0x1508b4=['55ZpQYKP','1269126EEIQta','Http','getVerifiedLocationToken','errors','10129192FdAmTc','2598ZquTuS','6333568pWyldS','12023196ctZamk','startTrackingVerified','onTokenUpdated','trackVerified','8197OYHRBt','stopTrackingVerified','Radar','RadarNetworkError','5osdZFd','734220bNpqep','2538vNtkIj','setExpectedJurisdiction','registerErrorInterceptor','2966dJreVu','clearVerifiedLocationToken','52516','bind','9eNnSFk','26WQbQjo','beGsj'];_0x41b8=function(){return _0x1508b4;};return _0x41b8();}function _0x4dd8(_0x250e9c,_0xe0e9ee){_0x250e9c=_0x250e9c-0x1ef;const _0x41b823=_0x41b8();let _0x4dd8b7=_0x41b823[_0x250e9c];return _0x4dd8b7;}function createFraudPlugin(){const _0x177911=_0x4dd8,_0x231ab6={'beGsj':'fraud'};return {'name':_0x231ab6[_0x177911(0x209)],'version':_0x1e2ebc,'install'(_0x2dec72){const _0x40339a=_0x177911,_0x1d9d2b=new VerifyApi(_0x2dec72);_0x2dec72['Radar']['fraud']={'trackVerified':_0x1d9d2b[_0x40339a(0x1f9)][_0x40339a(0x206)](_0x1d9d2b),'startTrackingVerified':_0x1d9d2b[_0x40339a(0x1f7)][_0x40339a(0x206)](_0x1d9d2b),'stopTrackingVerified':_0x1d9d2b['stopTrackingVerified'][_0x40339a(0x206)](_0x1d9d2b),'getVerifiedLocationToken':_0x1d9d2b[_0x40339a(0x1f1)][_0x40339a(0x206)](_0x1d9d2b),'clearVerifiedLocationToken':_0x1d9d2b[_0x40339a(0x204)][_0x40339a(0x206)](_0x1d9d2b),'setExpectedJurisdiction':_0x1d9d2b[_0x40339a(0x201)][_0x40339a(0x206)](_0x1d9d2b),'onTokenUpdated':_0x1d9d2b['onTokenUpdated'][_0x40339a(0x206)](_0x1d9d2b)},_0x2dec72[_0x40339a(0x1fc)][_0x40339a(0x1f9)]=_0x1d9d2b[_0x40339a(0x1f9)][_0x40339a(0x206)](_0x1d9d2b),_0x2dec72[_0x40339a(0x1fc)][_0x40339a(0x1f7)]=_0x1d9d2b[_0x40339a(0x1f7)]['bind'](_0x1d9d2b),_0x2dec72[_0x40339a(0x1fc)]['stopTrackingVerified']=_0x1d9d2b[_0x40339a(0x1fb)][_0x40339a(0x206)](_0x1d9d2b),_0x2dec72[_0x40339a(0x1fc)]['getVerifiedLocationToken']=_0x1d9d2b[_0x40339a(0x1f1)][_0x40339a(0x206)](_0x1d9d2b),_0x2dec72[_0x40339a(0x1fc)][_0x40339a(0x204)]=_0x1d9d2b[_0x40339a(0x204)]['bind'](_0x1d9d2b),_0x2dec72['Radar'][_0x40339a(0x201)]=_0x1d9d2b[_0x40339a(0x201)][_0x40339a(0x206)](_0x1d9d2b),_0x2dec72[_0x40339a(0x1fc)][_0x40339a(0x1f8)]=_0x1d9d2b[_0x40339a(0x1f8)][_0x40339a(0x206)](_0x1d9d2b),_0x2dec72[_0x40339a(0x1f0)][_0x40339a(0x202)](_0x40339a(0x205),_0x40c8f5=>_0x40c8f5?new RadarVerifyAppError():new _0x2dec72[(_0x40339a(0x1f2))][(_0x40339a(0x1fd))]());}};}
10
+
11
+ export { RadarVerifyAppError, createFraudPlugin };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/errors.ts","../src/verify.ts","../src/version.ts","../src/index.ts"],"sourcesContent":["import { RadarError } from 'radar-sdk-js';\n\nexport class RadarVerifyAppError extends RadarError {\n constructor() {\n super('Radar Verify app not running.');\n this.name = 'RadarVerifyAppError';\n this.status = 'ERROR_VERIFY_APP';\n }\n}\n","import { Location } from 'radar-sdk-js';\n\nimport type { RadarTrackVerifiedParams, RadarStartTrackingVerifiedParams, RadarTrackVerifiedResponse } from './types';\nimport type { RadarPluginContext } from 'radar-sdk-js';\n\nclass VerifyApi {\n private ctx: RadarPluginContext;\n private tokenTimeoutId: ReturnType<typeof setTimeout> | null = null;\n private ipChangesIntervalId: ReturnType<typeof setInterval> | null = null;\n private isTrackingVerified = true;\n private tokenCallback: ((token: RadarTrackVerifiedResponse) => void) | null = null;\n private lastToken: RadarTrackVerifiedResponse | null = null;\n private lastTokenNow: number = 0;\n private expectedCountryCode: string | null = null;\n private expectedStateCode: string | null = null;\n private lastIp: string | null = null;\n\n constructor(ctx: RadarPluginContext) {\n this.ctx = ctx;\n }\n\n async checkIpChanges(): Promise<boolean> {\n const { Http, Logger } = this.ctx;\n\n try {\n const response: any = await Http.request({\n method: 'GET',\n path: 'ping',\n });\n const ip = response.ip;\n\n const ipChanged = Boolean(this.lastIp) && ip !== this.lastIp;\n if (ipChanged) {\n Logger.info(`IP changed from ${this.lastIp} to ${ip}`);\n this.lastToken = null;\n }\n\n this.lastIp = ip ?? null;\n return ipChanged;\n } catch (err) {\n Logger.error(`Error checking IP: ${String(err)}`);\n }\n\n return false;\n }\n\n async trackVerified(params: RadarTrackVerifiedParams = {}, encrypted: boolean = false) {\n const { Config, Http, Device, Session, Storage, Logger, SDK_VERSION, apis } = this.ctx;\n\n try {\n const options = Config.get();\n const { skipVerifyApp, reason, transactionId } = params;\n\n const userId = params.userId || Storage.getItem(Storage.USER_ID);\n const deviceId = Device.getDeviceId();\n const installId = Device.getInstallId();\n const sessionId = Session.getSessionId();\n const description = params.description || Storage.getItem(Storage.DESCRIPTION);\n\n if (!userId) {\n Logger.warn('userId not provided for trackVerified.');\n } else {\n Storage.setItem(Storage.USER_ID, userId);\n }\n\n const metadata = params.metadata || Storage.getJSON(Storage.METADATA);\n\n let trackRes: RadarTrackVerifiedResponse;\n if (skipVerifyApp) {\n trackRes = await apis.Track.trackOnce({\n userId: userId ?? undefined,\n description: description ?? undefined,\n metadata: metadata,\n fraud: true,\n reason,\n transactionId,\n });\n } else {\n const body = {\n ...params,\n description,\n deviceId,\n foreground: true,\n installId,\n sessionId,\n metadata,\n sdkVersion: SDK_VERSION,\n stopped: true,\n userId,\n encrypted,\n expectedCountryCode: this.expectedCountryCode,\n expectedStateCode: this.expectedStateCode,\n };\n\n const { userAgent } = navigator;\n const apple =\n userAgent &&\n (userAgent.toLowerCase().includes('mac') ||\n userAgent.toLowerCase().includes('iphone') ||\n userAgent.toLowerCase().includes('ipod') ||\n userAgent.toLowerCase().includes('ipad'));\n\n const response: any = await Http.request({\n method: 'GET',\n path: 'verify',\n data: body,\n host: apple ? 'https://radar-verify.com:52516' : 'http://localhost:52516',\n });\n\n const { user, events, token, expiresAt, expiresIn, passed, failureReasons, _id } = response;\n\n let location: Location | undefined;\n if (user && user.location && user.location.coordinates && user.locationAccuracy) {\n location = {\n latitude: user.location.coordinates[1],\n longitude: user.location.coordinates[0],\n accuracy: user.locationAccuracy,\n };\n }\n\n trackRes = {\n user,\n events,\n location,\n token,\n expiresAt: expiresAt ? new Date(expiresAt) : undefined,\n expiresIn,\n passed,\n failureReasons,\n _id,\n };\n\n if (options.debug) {\n trackRes.response = response;\n }\n }\n\n this.lastToken = trackRes;\n this.lastTokenNow = performance.now();\n\n if (this.tokenCallback) {\n this.tokenCallback(trackRes);\n }\n\n return trackRes;\n } catch (err: unknown) {\n Config.sendError(err);\n throw err;\n }\n }\n\n startTrackingVerified(params: RadarStartTrackingVerifiedParams) {\n const { Logger } = this.ctx;\n this.isTrackingVerified = true;\n\n const scheduleNextIntervalWithLastToken = async () => {\n const { interval = 20 } = params;\n\n let minInterval = interval;\n\n if (this.lastToken) {\n const lastTokenElapsed = (performance.now() - this.lastTokenNow) / 1000;\n const expiresIn = this.lastToken.expiresIn || 0;\n\n minInterval = Math.min(expiresIn - lastTokenElapsed, interval);\n }\n\n minInterval = minInterval - 10;\n\n if (minInterval < 10) {\n minInterval = 10;\n }\n\n if (this.tokenTimeoutId) {\n clearTimeout(this.tokenTimeoutId);\n }\n\n if (this.isTrackingVerified) {\n this.tokenTimeoutId = setTimeout(doTrackVerified, minInterval * 1000);\n }\n };\n\n const doTrackVerified = async () => {\n try {\n await this.trackVerified(params);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n Logger.error(`trackVerified error: ${message}`);\n }\n\n void scheduleNextIntervalWithLastToken();\n };\n\n if (params?.ipChanges) {\n if (this.ipChangesIntervalId) {\n clearInterval(this.ipChangesIntervalId);\n }\n\n this.ipChangesIntervalId = setInterval(async () => {\n const ipChanged = await this.checkIpChanges();\n\n if (ipChanged) {\n void doTrackVerified();\n }\n }, 10_000);\n }\n\n if (this.isLastTokenValid()) {\n void scheduleNextIntervalWithLastToken();\n } else {\n void doTrackVerified();\n }\n }\n\n stopTrackingVerified() {\n this.isTrackingVerified = false;\n\n if (this.tokenTimeoutId) {\n clearTimeout(this.tokenTimeoutId);\n }\n\n if (this.ipChangesIntervalId) {\n clearInterval(this.ipChangesIntervalId);\n }\n }\n\n async getVerifiedLocationToken(params: RadarTrackVerifiedParams = {}) {\n if (this.isLastTokenValid()) {\n return this.lastToken;\n }\n\n return this.trackVerified(params);\n }\n\n clearVerifiedLocationToken() {\n this.lastToken = null;\n }\n\n isLastTokenValid() {\n if (!this.lastToken) {\n return false;\n }\n\n const lastTokenElapsed = (performance.now() - this.lastTokenNow) / 1000;\n return this.lastToken.passed && lastTokenElapsed < (this.lastToken.expiresIn || 0);\n }\n\n setExpectedJurisdiction(countryCode?: string, stateCode?: string) {\n this.expectedCountryCode = countryCode || null;\n this.expectedStateCode = stateCode || null;\n }\n\n onTokenUpdated(callback: (token: RadarTrackVerifiedResponse) => void) {\n this.tokenCallback = callback;\n }\n}\n\nexport default VerifyApi;\n","export default '5.0.0-beta.1';\n","import { RadarVerifyAppError } from './errors';\nimport VerifyAPI from './verify';\nimport version from './version';\n\nimport type { RadarTrackVerifiedParams, RadarStartTrackingVerifiedParams, RadarTrackVerifiedResponse } from './types';\nimport type { RadarPlugin } from 'radar-sdk-js';\n\nexport interface RadarFraud {\n trackVerified(params?: RadarTrackVerifiedParams, encrypted?: boolean): Promise<RadarTrackVerifiedResponse>;\n startTrackingVerified(params: RadarStartTrackingVerifiedParams): void;\n stopTrackingVerified(): void;\n getVerifiedLocationToken(params?: RadarTrackVerifiedParams): Promise<RadarTrackVerifiedResponse | null>;\n clearVerifiedLocationToken(): void;\n setExpectedJurisdiction(countryCode?: string, stateCode?: string): void;\n onTokenUpdated(callback: (token: RadarTrackVerifiedResponse) => void): void;\n}\n\ndeclare module 'radar-sdk-js' {\n namespace Radar {\n // oxlint-disable-next-line no-unused-vars -- for declaration merging\n let fraud: RadarFraud;\n\n /** @deprecated Use Radar.fraud.trackVerified() */\n function trackVerified(params?: RadarTrackVerifiedParams, encrypted?: boolean): Promise<RadarTrackVerifiedResponse>;\n /** @deprecated Use Radar.fraud.startTrackingVerified() */\n function startTrackingVerified(params: RadarStartTrackingVerifiedParams): void;\n /** @deprecated Use Radar.fraud.stopTrackingVerified() */\n function stopTrackingVerified(): void;\n /** @deprecated Use Radar.fraud.getVerifiedLocationToken() */\n function getVerifiedLocationToken(params?: RadarTrackVerifiedParams): Promise<RadarTrackVerifiedResponse | null>;\n /** @deprecated Use Radar.fraud.clearVerifiedLocationToken() */\n function clearVerifiedLocationToken(): void;\n /** @deprecated Use Radar.fraud.setExpectedJurisdiction() */\n function setExpectedJurisdiction(countryCode?: string, stateCode?: string): void;\n /** @deprecated Use Radar.fraud.onTokenUpdated() */\n function onTokenUpdated(callback: (token: RadarTrackVerifiedResponse) => void): void;\n }\n}\n\nexport function createFraudPlugin(): RadarPlugin {\n return {\n name: 'fraud',\n version,\n install(ctx) {\n const api = new VerifyAPI(ctx);\n\n ctx.Radar.fraud = {\n trackVerified: api.trackVerified.bind(api),\n startTrackingVerified: api.startTrackingVerified.bind(api),\n stopTrackingVerified: api.stopTrackingVerified.bind(api),\n getVerifiedLocationToken: api.getVerifiedLocationToken.bind(api),\n clearVerifiedLocationToken: api.clearVerifiedLocationToken.bind(api),\n setExpectedJurisdiction: api.setExpectedJurisdiction.bind(api),\n onTokenUpdated: api.onTokenUpdated.bind(api),\n };\n\n // root-level backwards compat (deprecated)\n ctx.Radar.trackVerified = api.trackVerified.bind(api);\n ctx.Radar.startTrackingVerified = api.startTrackingVerified.bind(api);\n ctx.Radar.stopTrackingVerified = api.stopTrackingVerified.bind(api);\n ctx.Radar.getVerifiedLocationToken = api.getVerifiedLocationToken.bind(api);\n ctx.Radar.clearVerifiedLocationToken = api.clearVerifiedLocationToken.bind(api);\n ctx.Radar.setExpectedJurisdiction = api.setExpectedJurisdiction.bind(api);\n ctx.Radar.onTokenUpdated = api.onTokenUpdated.bind(api);\n\n ctx.Http.registerErrorInterceptor('52516', (online: boolean) =>\n online ? new RadarVerifyAppError() : new ctx.errors.RadarNetworkError(),\n );\n },\n };\n}\n\nexport { RadarVerifyAppError } from './errors';\nexport type { RadarTrackVerifiedParams, RadarStartTrackingVerifiedParams, RadarTrackVerifiedResponse } from './types';\n"],"names":["RadarVerifyAppError","RadarError","constructor","VerifyApi","_0x25edbb","Http","_0x2c4c79","Logger","_0x58a5aa","_0x4bf035","_0x5509b0","_0x39ee9b","_0x336dbb","Boolean","_0x3a7ee7","String","_0x26b636","_0x50b9e8","Config","_0xed0bed","_0x4c7d18","Device","_0x2ebf68","Session","_0x344ae0","Storage","_0x96ca83","_0x5416be","SDK_VERSION","_0x15cb2e","apis","_0x8df898","_0x4fa8ba","skipVerifyApp","_0x2d07d","reason","_0x43f51f","transactionId","_0x5d9a57","_0xe68ab0","_0x4087fe","_0x1bd320","_0x2c87d5","_0x18bb50","_0x1c3c5d","_0x2945cb","_0x2b78f8","_0x1aeaee","_0x9deda7","undefined","_0x3e5e39","userAgent","_0x400d90","navigator","_0x37ab99","_0x26fb0f","user","_0x5c8e21","events","_0x2a4808","token","_0x39eb6f","expiresAt","_0x5a7331","expiresIn","_0x26eb03","passed","_0x38e738","failureReasons","_0x128e7d","_id","_0x2da9dc","_0xb3a6d1","Date","performance","_0x5e9cfe","_0x9c7654","_0x3fa8e5","_0x45b0eb","_0xe0a691","_0xba4eb4","interval","_0x5426fe","_0x253cfa","_0x36c2ef","Math","_0x4cce42","clearTimeout","_0x146937","setTimeout","_0x379003","_0x40b599","_0x5391f8","_0x5ad0c1","_0x24395d","Error","_0x5cbe02","clearInterval","setInterval","_0x469720","_0xfe06ac","_0x742561","_0x3f1971","_0x465328","_0xb094fe","_0x5b7e67","_0x37367f","_0x50de9b","_0x259bff","_0x4d19d3","createFraudPlugin","_0x1e2ebc","_0x2dec72","_0x1d9d2b","_0x1c5198","_0x40c8f5"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { RadarTrackResponse, RadarMetadata } from 'radar-sdk-js';
2
+ export interface RadarTrackVerifiedParams {
3
+ userId?: string;
4
+ description?: string;
5
+ metadata?: RadarMetadata;
6
+ skipVerifyApp?: boolean;
7
+ reason?: string;
8
+ transactionId?: string;
9
+ }
10
+ export interface RadarStartTrackingVerifiedParams {
11
+ interval?: number;
12
+ skipVerifyApp?: boolean;
13
+ ipChanges?: boolean;
14
+ }
15
+ export interface RadarTrackVerifiedResponse extends RadarTrackResponse {
16
+ token?: string;
17
+ expiresAt?: Date;
18
+ expiresIn?: number;
19
+ passed?: boolean;
20
+ failureReasons?: string[];
21
+ _id?: string;
22
+ }
@@ -0,0 +1,25 @@
1
+ import type { RadarTrackVerifiedParams, RadarStartTrackingVerifiedParams, RadarTrackVerifiedResponse } from './types';
2
+ import type { RadarPluginContext } from 'radar-sdk-js';
3
+ declare class VerifyApi {
4
+ private ctx;
5
+ private tokenTimeoutId;
6
+ private ipChangesIntervalId;
7
+ private isTrackingVerified;
8
+ private tokenCallback;
9
+ private lastToken;
10
+ private lastTokenNow;
11
+ private expectedCountryCode;
12
+ private expectedStateCode;
13
+ private lastIp;
14
+ constructor(ctx: RadarPluginContext);
15
+ checkIpChanges(): Promise<boolean>;
16
+ trackVerified(params?: RadarTrackVerifiedParams, encrypted?: boolean): Promise<RadarTrackVerifiedResponse>;
17
+ startTrackingVerified(params: RadarStartTrackingVerifiedParams): void;
18
+ stopTrackingVerified(): void;
19
+ getVerifiedLocationToken(params?: RadarTrackVerifiedParams): Promise<RadarTrackVerifiedResponse | null>;
20
+ clearVerifiedLocationToken(): void;
21
+ isLastTokenValid(): boolean | undefined;
22
+ setExpectedJurisdiction(countryCode?: string, stateCode?: string): void;
23
+ onTokenUpdated(callback: (token: RadarTrackVerifiedResponse) => void): void;
24
+ }
25
+ export default VerifyApi;
@@ -0,0 +1,2 @@
1
+ declare const _default: "5.0.0-beta.1";
2
+ export default _default;
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@radarlabs/plugin-fraud",
3
+ "version": "5.0.0-beta.1",
4
+ "description": "Fraud detection plugin for radar-sdk-js",
5
+ "files": [
6
+ "dist",
7
+ "cdn",
8
+ "src"
9
+ ],
10
+ "type": "module",
11
+ "module": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ }
18
+ },
19
+ "scripts": {
20
+ "build": "rollup -c",
21
+ "lint": "oxlint --type-aware --type-check",
22
+ "lint:fix": "oxlint --type-aware --fix",
23
+ "fmt": "oxfmt",
24
+ "fmt:check": "oxfmt --check",
25
+ "typecheck": "tsc --noEmit",
26
+ "check-latest-tag": "node ./scripts/check-latest-tag.cjs",
27
+ "check-beta-tag": "node ./scripts/check-beta-tag.cjs",
28
+ "bump-version": "node ./scripts/bump-version.cjs",
29
+ "knip": "knip",
30
+ "prepare": "husky"
31
+ },
32
+ "devDependencies": {
33
+ "@rollup/plugin-node-resolve": "^16.0.3",
34
+ "@rollup/plugin-terser": "^0.4.4",
35
+ "@rollup/plugin-typescript": "^12.3.0",
36
+ "@types/node": "^25.2.3",
37
+ "husky": "^9.1.7",
38
+ "knip": "^5.83.1",
39
+ "oxfmt": "^0.32.0",
40
+ "oxlint": "^1.47.0",
41
+ "oxlint-tsgolint": "^0.12.1",
42
+ "radar-sdk-js": "^5.0.0-beta.4",
43
+ "rollup": "^4.57.1",
44
+ "rollup-plugin-obfuscator": "^1.1.0",
45
+ "tslib": "^2.8.1",
46
+ "typescript": "^5.9.3"
47
+ },
48
+ "peerDependencies": {
49
+ "radar-sdk-js": ">=5.0.0-beta.1"
50
+ }
51
+ }
@@ -0,0 +1,5 @@
1
+ import Radar from 'radar-sdk-js';
2
+
3
+ import { createFraudPlugin } from './index';
4
+
5
+ Radar.registerPlugin(createFraudPlugin());
package/src/errors.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { RadarError } from 'radar-sdk-js';
2
+
3
+ export class RadarVerifyAppError extends RadarError {
4
+ constructor() {
5
+ super('Radar Verify app not running.');
6
+ this.name = 'RadarVerifyAppError';
7
+ this.status = 'ERROR_VERIFY_APP';
8
+ }
9
+ }
package/src/index.ts ADDED
@@ -0,0 +1,74 @@
1
+ import { RadarVerifyAppError } from './errors';
2
+ import VerifyAPI from './verify';
3
+ import version from './version';
4
+
5
+ import type { RadarTrackVerifiedParams, RadarStartTrackingVerifiedParams, RadarTrackVerifiedResponse } from './types';
6
+ import type { RadarPlugin } from 'radar-sdk-js';
7
+
8
+ export interface RadarFraud {
9
+ trackVerified(params?: RadarTrackVerifiedParams, encrypted?: boolean): Promise<RadarTrackVerifiedResponse>;
10
+ startTrackingVerified(params: RadarStartTrackingVerifiedParams): void;
11
+ stopTrackingVerified(): void;
12
+ getVerifiedLocationToken(params?: RadarTrackVerifiedParams): Promise<RadarTrackVerifiedResponse | null>;
13
+ clearVerifiedLocationToken(): void;
14
+ setExpectedJurisdiction(countryCode?: string, stateCode?: string): void;
15
+ onTokenUpdated(callback: (token: RadarTrackVerifiedResponse) => void): void;
16
+ }
17
+
18
+ declare module 'radar-sdk-js' {
19
+ namespace Radar {
20
+ // oxlint-disable-next-line no-unused-vars -- for declaration merging
21
+ let fraud: RadarFraud;
22
+
23
+ /** @deprecated Use Radar.fraud.trackVerified() */
24
+ function trackVerified(params?: RadarTrackVerifiedParams, encrypted?: boolean): Promise<RadarTrackVerifiedResponse>;
25
+ /** @deprecated Use Radar.fraud.startTrackingVerified() */
26
+ function startTrackingVerified(params: RadarStartTrackingVerifiedParams): void;
27
+ /** @deprecated Use Radar.fraud.stopTrackingVerified() */
28
+ function stopTrackingVerified(): void;
29
+ /** @deprecated Use Radar.fraud.getVerifiedLocationToken() */
30
+ function getVerifiedLocationToken(params?: RadarTrackVerifiedParams): Promise<RadarTrackVerifiedResponse | null>;
31
+ /** @deprecated Use Radar.fraud.clearVerifiedLocationToken() */
32
+ function clearVerifiedLocationToken(): void;
33
+ /** @deprecated Use Radar.fraud.setExpectedJurisdiction() */
34
+ function setExpectedJurisdiction(countryCode?: string, stateCode?: string): void;
35
+ /** @deprecated Use Radar.fraud.onTokenUpdated() */
36
+ function onTokenUpdated(callback: (token: RadarTrackVerifiedResponse) => void): void;
37
+ }
38
+ }
39
+
40
+ export function createFraudPlugin(): RadarPlugin {
41
+ return {
42
+ name: 'fraud',
43
+ version,
44
+ install(ctx) {
45
+ const api = new VerifyAPI(ctx);
46
+
47
+ ctx.Radar.fraud = {
48
+ trackVerified: api.trackVerified.bind(api),
49
+ startTrackingVerified: api.startTrackingVerified.bind(api),
50
+ stopTrackingVerified: api.stopTrackingVerified.bind(api),
51
+ getVerifiedLocationToken: api.getVerifiedLocationToken.bind(api),
52
+ clearVerifiedLocationToken: api.clearVerifiedLocationToken.bind(api),
53
+ setExpectedJurisdiction: api.setExpectedJurisdiction.bind(api),
54
+ onTokenUpdated: api.onTokenUpdated.bind(api),
55
+ };
56
+
57
+ // root-level backwards compat (deprecated)
58
+ ctx.Radar.trackVerified = api.trackVerified.bind(api);
59
+ ctx.Radar.startTrackingVerified = api.startTrackingVerified.bind(api);
60
+ ctx.Radar.stopTrackingVerified = api.stopTrackingVerified.bind(api);
61
+ ctx.Radar.getVerifiedLocationToken = api.getVerifiedLocationToken.bind(api);
62
+ ctx.Radar.clearVerifiedLocationToken = api.clearVerifiedLocationToken.bind(api);
63
+ ctx.Radar.setExpectedJurisdiction = api.setExpectedJurisdiction.bind(api);
64
+ ctx.Radar.onTokenUpdated = api.onTokenUpdated.bind(api);
65
+
66
+ ctx.Http.registerErrorInterceptor('52516', (online: boolean) =>
67
+ online ? new RadarVerifyAppError() : new ctx.errors.RadarNetworkError(),
68
+ );
69
+ },
70
+ };
71
+ }
72
+
73
+ export { RadarVerifyAppError } from './errors';
74
+ export type { RadarTrackVerifiedParams, RadarStartTrackingVerifiedParams, RadarTrackVerifiedResponse } from './types';
package/src/types.ts ADDED
@@ -0,0 +1,25 @@
1
+ import type { RadarTrackResponse, RadarMetadata } from 'radar-sdk-js';
2
+
3
+ export interface RadarTrackVerifiedParams {
4
+ userId?: string;
5
+ description?: string;
6
+ metadata?: RadarMetadata;
7
+ skipVerifyApp?: boolean;
8
+ reason?: string;
9
+ transactionId?: string;
10
+ }
11
+
12
+ export interface RadarStartTrackingVerifiedParams {
13
+ interval?: number;
14
+ skipVerifyApp?: boolean;
15
+ ipChanges?: boolean;
16
+ }
17
+
18
+ export interface RadarTrackVerifiedResponse extends RadarTrackResponse {
19
+ token?: string;
20
+ expiresAt?: Date;
21
+ expiresIn?: number;
22
+ passed?: boolean;
23
+ failureReasons?: string[];
24
+ _id?: string;
25
+ }
package/src/verify.ts ADDED
@@ -0,0 +1,258 @@
1
+ import { Location } from 'radar-sdk-js';
2
+
3
+ import type { RadarTrackVerifiedParams, RadarStartTrackingVerifiedParams, RadarTrackVerifiedResponse } from './types';
4
+ import type { RadarPluginContext } from 'radar-sdk-js';
5
+
6
+ class VerifyApi {
7
+ private ctx: RadarPluginContext;
8
+ private tokenTimeoutId: ReturnType<typeof setTimeout> | null = null;
9
+ private ipChangesIntervalId: ReturnType<typeof setInterval> | null = null;
10
+ private isTrackingVerified = true;
11
+ private tokenCallback: ((token: RadarTrackVerifiedResponse) => void) | null = null;
12
+ private lastToken: RadarTrackVerifiedResponse | null = null;
13
+ private lastTokenNow: number = 0;
14
+ private expectedCountryCode: string | null = null;
15
+ private expectedStateCode: string | null = null;
16
+ private lastIp: string | null = null;
17
+
18
+ constructor(ctx: RadarPluginContext) {
19
+ this.ctx = ctx;
20
+ }
21
+
22
+ async checkIpChanges(): Promise<boolean> {
23
+ const { Http, Logger } = this.ctx;
24
+
25
+ try {
26
+ const response: any = await Http.request({
27
+ method: 'GET',
28
+ path: 'ping',
29
+ });
30
+ const ip = response.ip;
31
+
32
+ const ipChanged = Boolean(this.lastIp) && ip !== this.lastIp;
33
+ if (ipChanged) {
34
+ Logger.info(`IP changed from ${this.lastIp} to ${ip}`);
35
+ this.lastToken = null;
36
+ }
37
+
38
+ this.lastIp = ip ?? null;
39
+ return ipChanged;
40
+ } catch (err) {
41
+ Logger.error(`Error checking IP: ${String(err)}`);
42
+ }
43
+
44
+ return false;
45
+ }
46
+
47
+ async trackVerified(params: RadarTrackVerifiedParams = {}, encrypted: boolean = false) {
48
+ const { Config, Http, Device, Session, Storage, Logger, SDK_VERSION, apis } = this.ctx;
49
+
50
+ try {
51
+ const options = Config.get();
52
+ const { skipVerifyApp, reason, transactionId } = params;
53
+
54
+ const userId = params.userId || Storage.getItem(Storage.USER_ID);
55
+ const deviceId = Device.getDeviceId();
56
+ const installId = Device.getInstallId();
57
+ const sessionId = Session.getSessionId();
58
+ const description = params.description || Storage.getItem(Storage.DESCRIPTION);
59
+
60
+ if (!userId) {
61
+ Logger.warn('userId not provided for trackVerified.');
62
+ } else {
63
+ Storage.setItem(Storage.USER_ID, userId);
64
+ }
65
+
66
+ const metadata = params.metadata || Storage.getJSON(Storage.METADATA);
67
+
68
+ let trackRes: RadarTrackVerifiedResponse;
69
+ if (skipVerifyApp) {
70
+ trackRes = await apis.Track.trackOnce({
71
+ userId: userId ?? undefined,
72
+ description: description ?? undefined,
73
+ metadata: metadata,
74
+ fraud: true,
75
+ reason,
76
+ transactionId,
77
+ });
78
+ } else {
79
+ const body = {
80
+ ...params,
81
+ description,
82
+ deviceId,
83
+ foreground: true,
84
+ installId,
85
+ sessionId,
86
+ metadata,
87
+ sdkVersion: SDK_VERSION,
88
+ stopped: true,
89
+ userId,
90
+ encrypted,
91
+ expectedCountryCode: this.expectedCountryCode,
92
+ expectedStateCode: this.expectedStateCode,
93
+ };
94
+
95
+ const { userAgent } = navigator;
96
+ const apple =
97
+ userAgent &&
98
+ (userAgent.toLowerCase().includes('mac') ||
99
+ userAgent.toLowerCase().includes('iphone') ||
100
+ userAgent.toLowerCase().includes('ipod') ||
101
+ userAgent.toLowerCase().includes('ipad'));
102
+
103
+ const response: any = await Http.request({
104
+ method: 'GET',
105
+ path: 'verify',
106
+ data: body,
107
+ host: apple ? 'https://radar-verify.com:52516' : 'http://localhost:52516',
108
+ });
109
+
110
+ const { user, events, token, expiresAt, expiresIn, passed, failureReasons, _id } = response;
111
+
112
+ let location: Location | undefined;
113
+ if (user && user.location && user.location.coordinates && user.locationAccuracy) {
114
+ location = {
115
+ latitude: user.location.coordinates[1],
116
+ longitude: user.location.coordinates[0],
117
+ accuracy: user.locationAccuracy,
118
+ };
119
+ }
120
+
121
+ trackRes = {
122
+ user,
123
+ events,
124
+ location,
125
+ token,
126
+ expiresAt: expiresAt ? new Date(expiresAt) : undefined,
127
+ expiresIn,
128
+ passed,
129
+ failureReasons,
130
+ _id,
131
+ };
132
+
133
+ if (options.debug) {
134
+ trackRes.response = response;
135
+ }
136
+ }
137
+
138
+ this.lastToken = trackRes;
139
+ this.lastTokenNow = performance.now();
140
+
141
+ if (this.tokenCallback) {
142
+ this.tokenCallback(trackRes);
143
+ }
144
+
145
+ return trackRes;
146
+ } catch (err: unknown) {
147
+ Config.sendError(err);
148
+ throw err;
149
+ }
150
+ }
151
+
152
+ startTrackingVerified(params: RadarStartTrackingVerifiedParams) {
153
+ const { Logger } = this.ctx;
154
+ this.isTrackingVerified = true;
155
+
156
+ const scheduleNextIntervalWithLastToken = async () => {
157
+ const { interval = 20 } = params;
158
+
159
+ let minInterval = interval;
160
+
161
+ if (this.lastToken) {
162
+ const lastTokenElapsed = (performance.now() - this.lastTokenNow) / 1000;
163
+ const expiresIn = this.lastToken.expiresIn || 0;
164
+
165
+ minInterval = Math.min(expiresIn - lastTokenElapsed, interval);
166
+ }
167
+
168
+ minInterval = minInterval - 10;
169
+
170
+ if (minInterval < 10) {
171
+ minInterval = 10;
172
+ }
173
+
174
+ if (this.tokenTimeoutId) {
175
+ clearTimeout(this.tokenTimeoutId);
176
+ }
177
+
178
+ if (this.isTrackingVerified) {
179
+ this.tokenTimeoutId = setTimeout(doTrackVerified, minInterval * 1000);
180
+ }
181
+ };
182
+
183
+ const doTrackVerified = async () => {
184
+ try {
185
+ await this.trackVerified(params);
186
+ } catch (err: unknown) {
187
+ const message = err instanceof Error ? err.message : String(err);
188
+ Logger.error(`trackVerified error: ${message}`);
189
+ }
190
+
191
+ void scheduleNextIntervalWithLastToken();
192
+ };
193
+
194
+ if (params?.ipChanges) {
195
+ if (this.ipChangesIntervalId) {
196
+ clearInterval(this.ipChangesIntervalId);
197
+ }
198
+
199
+ this.ipChangesIntervalId = setInterval(async () => {
200
+ const ipChanged = await this.checkIpChanges();
201
+
202
+ if (ipChanged) {
203
+ void doTrackVerified();
204
+ }
205
+ }, 10_000);
206
+ }
207
+
208
+ if (this.isLastTokenValid()) {
209
+ void scheduleNextIntervalWithLastToken();
210
+ } else {
211
+ void doTrackVerified();
212
+ }
213
+ }
214
+
215
+ stopTrackingVerified() {
216
+ this.isTrackingVerified = false;
217
+
218
+ if (this.tokenTimeoutId) {
219
+ clearTimeout(this.tokenTimeoutId);
220
+ }
221
+
222
+ if (this.ipChangesIntervalId) {
223
+ clearInterval(this.ipChangesIntervalId);
224
+ }
225
+ }
226
+
227
+ async getVerifiedLocationToken(params: RadarTrackVerifiedParams = {}) {
228
+ if (this.isLastTokenValid()) {
229
+ return this.lastToken;
230
+ }
231
+
232
+ return this.trackVerified(params);
233
+ }
234
+
235
+ clearVerifiedLocationToken() {
236
+ this.lastToken = null;
237
+ }
238
+
239
+ isLastTokenValid() {
240
+ if (!this.lastToken) {
241
+ return false;
242
+ }
243
+
244
+ const lastTokenElapsed = (performance.now() - this.lastTokenNow) / 1000;
245
+ return this.lastToken.passed && lastTokenElapsed < (this.lastToken.expiresIn || 0);
246
+ }
247
+
248
+ setExpectedJurisdiction(countryCode?: string, stateCode?: string) {
249
+ this.expectedCountryCode = countryCode || null;
250
+ this.expectedStateCode = stateCode || null;
251
+ }
252
+
253
+ onTokenUpdated(callback: (token: RadarTrackVerifiedResponse) => void) {
254
+ this.tokenCallback = callback;
255
+ }
256
+ }
257
+
258
+ export default VerifyApi;
package/src/version.ts ADDED
@@ -0,0 +1 @@
1
+ export default '5.0.0-beta.1';