@contentpass/react-native-contentpass 0.3.16 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/docs/CONTRIBUTING.md +7 -7
  2. package/lib/commonjs/Contentpass.js +38 -25
  3. package/lib/commonjs/Contentpass.js.map +1 -1
  4. package/lib/commonjs/Contentpass.test.js +455 -0
  5. package/lib/commonjs/Contentpass.test.js.map +1 -0
  6. package/lib/commonjs/OidcAuthStateStorage.test.js +59 -0
  7. package/lib/commonjs/OidcAuthStateStorage.test.js.map +1 -0
  8. package/lib/commonjs/contentpassTokenUtils/fetchContentpassToken.test.js +45 -0
  9. package/lib/commonjs/contentpassTokenUtils/fetchContentpassToken.test.js.map +1 -0
  10. package/lib/commonjs/contentpassTokenUtils/parseContentpassToken.test.js +31 -0
  11. package/lib/commonjs/contentpassTokenUtils/parseContentpassToken.test.js.map +1 -0
  12. package/lib/commonjs/contentpassTokenUtils/validateSubscription.test.js +73 -0
  13. package/lib/commonjs/contentpassTokenUtils/validateSubscription.test.js.map +1 -0
  14. package/lib/commonjs/countImpressionUtils/sendPageViewEvent.test.js +35 -0
  15. package/lib/commonjs/countImpressionUtils/sendPageViewEvent.test.js.map +1 -0
  16. package/lib/commonjs/countImpressionUtils/sendStats.js +1 -1
  17. package/lib/commonjs/countImpressionUtils/sendStats.js.map +1 -1
  18. package/lib/commonjs/countImpressionUtils/sendStats.test.js +39 -0
  19. package/lib/commonjs/countImpressionUtils/sendStats.test.js.map +1 -0
  20. package/lib/commonjs/index.js +2 -0
  21. package/lib/commonjs/index.js.map +1 -1
  22. package/lib/commonjs/logger.test.js +42 -0
  23. package/lib/commonjs/logger.test.js.map +1 -0
  24. package/lib/commonjs/package.json +1 -0
  25. package/lib/commonjs/sdkContext/ContentpassSdkProvder.test.js +33 -0
  26. package/lib/commonjs/sdkContext/ContentpassSdkProvder.test.js.map +1 -0
  27. package/lib/commonjs/sdkContext/useContentpassSdk.test.js +37 -0
  28. package/lib/commonjs/sdkContext/useContentpassSdk.test.js.map +1 -0
  29. package/lib/commonjs/sdkContext/useContentpassState.js +26 -0
  30. package/lib/commonjs/sdkContext/useContentpassState.js.map +1 -0
  31. package/lib/commonjs/sentryIntegration.test.js +131 -0
  32. package/lib/commonjs/sentryIntegration.test.js.map +1 -0
  33. package/lib/commonjs/types/CmpAdapter.js +2 -0
  34. package/lib/commonjs/types/CmpAdapter.js.map +1 -0
  35. package/lib/module/Contentpass.js +38 -25
  36. package/lib/module/Contentpass.js.map +1 -1
  37. package/lib/module/Contentpass.test.js +448 -0
  38. package/lib/module/Contentpass.test.js.map +1 -0
  39. package/lib/module/OidcAuthStateStorage.test.js +56 -0
  40. package/lib/module/OidcAuthStateStorage.test.js.map +1 -0
  41. package/lib/module/contentpassTokenUtils/fetchContentpassToken.test.js +44 -0
  42. package/lib/module/contentpassTokenUtils/fetchContentpassToken.test.js.map +1 -0
  43. package/lib/module/contentpassTokenUtils/parseContentpassToken.test.js +30 -0
  44. package/lib/module/contentpassTokenUtils/parseContentpassToken.test.js.map +1 -0
  45. package/lib/module/contentpassTokenUtils/validateSubscription.test.js +70 -0
  46. package/lib/module/contentpassTokenUtils/validateSubscription.test.js.map +1 -0
  47. package/lib/module/countImpressionUtils/sendPageViewEvent.test.js +34 -0
  48. package/lib/module/countImpressionUtils/sendPageViewEvent.test.js.map +1 -0
  49. package/lib/module/countImpressionUtils/sendStats.js +1 -1
  50. package/lib/module/countImpressionUtils/sendStats.js.map +1 -1
  51. package/lib/module/countImpressionUtils/sendStats.test.js +38 -0
  52. package/lib/module/countImpressionUtils/sendStats.test.js.map +1 -0
  53. package/lib/module/index.js +6 -3
  54. package/lib/module/index.js.map +1 -1
  55. package/lib/module/logger.test.js +40 -0
  56. package/lib/module/logger.test.js.map +1 -0
  57. package/lib/module/package.json +1 -0
  58. package/lib/module/sdkContext/ContentpassSdkProvder.test.js +32 -0
  59. package/lib/module/sdkContext/ContentpassSdkProvder.test.js.map +1 -0
  60. package/lib/module/sdkContext/useContentpassSdk.test.js +36 -0
  61. package/lib/module/sdkContext/useContentpassSdk.test.js.map +1 -0
  62. package/lib/module/sdkContext/useContentpassState.js +21 -0
  63. package/lib/module/sdkContext/useContentpassState.js.map +1 -0
  64. package/lib/module/sentryIntegration.test.js +128 -0
  65. package/lib/module/sentryIntegration.test.js.map +1 -0
  66. package/lib/module/types/CmpAdapter.js +2 -0
  67. package/lib/module/types/CmpAdapter.js.map +1 -0
  68. package/lib/typescript/commonjs/src/Contentpass.d.ts +8 -5
  69. package/lib/typescript/commonjs/src/Contentpass.d.ts.map +1 -1
  70. package/lib/typescript/commonjs/src/countImpressionUtils/sendStats.d.ts +1 -0
  71. package/lib/typescript/commonjs/src/countImpressionUtils/sendStats.d.ts.map +1 -1
  72. package/lib/typescript/commonjs/src/index.d.ts +11 -6
  73. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  74. package/lib/typescript/commonjs/src/logger.d.ts.map +1 -1
  75. package/lib/typescript/commonjs/src/sdkContext/ContentpassSdkProvider.d.ts.map +1 -1
  76. package/lib/typescript/commonjs/src/sdkContext/useContentpassState.d.ts +4 -0
  77. package/lib/typescript/commonjs/src/sdkContext/useContentpassState.d.ts.map +1 -0
  78. package/lib/typescript/commonjs/src/sentryIntegration.d.ts.map +1 -1
  79. package/lib/typescript/commonjs/src/types/CmpAdapter.d.ts +14 -0
  80. package/lib/typescript/commonjs/src/types/CmpAdapter.d.ts.map +1 -0
  81. package/lib/typescript/module/src/Contentpass.d.ts +8 -5
  82. package/lib/typescript/module/src/Contentpass.d.ts.map +1 -1
  83. package/lib/typescript/module/src/countImpressionUtils/sendStats.d.ts +1 -0
  84. package/lib/typescript/module/src/countImpressionUtils/sendStats.d.ts.map +1 -1
  85. package/lib/typescript/module/src/index.d.ts +11 -6
  86. package/lib/typescript/module/src/index.d.ts.map +1 -1
  87. package/lib/typescript/module/src/logger.d.ts.map +1 -1
  88. package/lib/typescript/module/src/sdkContext/ContentpassSdkProvider.d.ts.map +1 -1
  89. package/lib/typescript/module/src/sdkContext/useContentpassState.d.ts +4 -0
  90. package/lib/typescript/module/src/sdkContext/useContentpassState.d.ts.map +1 -0
  91. package/lib/typescript/module/src/sentryIntegration.d.ts.map +1 -1
  92. package/lib/typescript/module/src/types/CmpAdapter.d.ts +14 -0
  93. package/lib/typescript/module/src/types/CmpAdapter.d.ts.map +1 -0
  94. package/package.json +24 -59
  95. package/LICENSE +0 -20
  96. package/README.md +0 -150
@@ -41,18 +41,18 @@ yarn
41
41
 
42
42
  > Since the project relies on Yarn workspaces, you cannot use [`npm`](https://github.com/npm/cli) for development.
43
43
 
44
- The [example app](/example/) and [expo example app](/expoExample/) demonstrates usage of the library. You need to run it to test any changes you make.
45
- The default [configuration](../sharedExample/src/contentpassConfig.ts) in example apps points to contentpass testing environment.
44
+ The [example app](/examples/example/) and [expo example app](/examples/expoExample/) demonstrates usage of the library. You need to run it to test any changes you make.
45
+ The default [configuration](../../../examples/sharedExample/src/contentpassConfig.ts) in example apps points to contentpass testing environment.
46
46
  You can change it to any other environment by updating the `contentpassConfig.ts` file.
47
47
 
48
48
  It is configured to use the local version of the library, so any changes you make to the library's source code will be reflected in the example apps.
49
49
  Changes to the library's JavaScript code will be reflected in the example apps without a rebuild, but native code changes will require a rebuild of the example app.
50
50
 
51
51
  If you want to use Android Studio or XCode to edit the native code, you can open the
52
- - `example/android`
53
- - `example/ios`
54
- - `expoExample/android`
55
- - `expoExample/ios`
52
+ - `examples/example/android`
53
+ - `examples/example/ios`
54
+ - `examples/expoExample/android`
55
+ - `examples/expoExample/ios`
56
56
  directories respectively in those editors. To edit the Objective-C or Swift files, open `ios/ContentpassExample.xcworkspace` in XCode and find the source files at `Pods > Development Pods > contentpass-react-native-contentpass`.
57
57
 
58
58
  To edit the Java or Kotlin files, open `android` in Android studio and find the source files at `@contentpass/react-native-contentpass` under `Android`.
@@ -88,7 +88,7 @@ yarn expo-example android
88
88
 
89
89
  To run the example apps on iOS:
90
90
 
91
- **NOTE**: You need to run `bundle install` in the `example/ios` directory before running the following command.
91
+ **NOTE**: You need to run `bundle install` in the `examples/example/ios` directory before running the following command.
92
92
  `bundle install` commands is responsible for installing the required dependencies for the iOS project.
93
93
 
94
94
  ```sh
@@ -31,6 +31,8 @@ class Contentpass {
31
31
  if (config.logLevel) {
32
32
  (0, _logger.enableLogger)(config.logLevel);
33
33
  }
34
+ this.config = config;
35
+ this.instanceId = _reactNativeUuid.default.v4();
34
36
  _logger.default.debug('Contentpass initialised with config', config);
35
37
  if (config.samplingRate && (config.samplingRate < 0 || config.samplingRate > 1)) {
36
38
  _logger.default.error('Sampling rate must be between 0 and 1');
@@ -38,13 +40,12 @@ class Contentpass {
38
40
  }
39
41
  this.samplingRate = config.samplingRate || DEFAULT_SAMPLING_RATE;
40
42
  this.authStateStorage = new _OidcAuthStateStorage.default(config.propertyId);
41
- this.config = config;
42
43
  (0, _sentryIntegration.initSentry)({
43
44
  propertyId: config.propertyId
44
45
  });
45
46
  this.initialiseAuthState();
46
47
  }
47
- authenticate = async () => {
48
+ authenticate = async route => {
48
49
  _logger.default.info('Starting authentication flow');
49
50
  let result;
50
51
  try {
@@ -54,7 +55,7 @@ class Contentpass {
54
55
  issuer: this.config.issuer,
55
56
  scopes: _oidcConsts.SCOPES,
56
57
  additionalParameters: {
57
- cp_route: 'login',
58
+ cp_route: route || 'login',
58
59
  prompt: 'consent',
59
60
  cp_property: this.config.propertyId,
60
61
  cp_plan: this.config.planId
@@ -73,6 +74,35 @@ class Contentpass {
73
74
  _logger.default.info('Authentication flow finished, checking subscription...');
74
75
  await this.onNewAuthState(result);
75
76
  };
77
+ event = async (eventCategory, eventAction, eventLabel, samplingRate) => {
78
+ const generatedSample = Math.random();
79
+ const activeSamplingRate = samplingRate ?? this.samplingRate;
80
+ if (generatedSample >= activeSamplingRate) {
81
+ return;
82
+ }
83
+ _logger.default.info('Sending event', {
84
+ eventCategory,
85
+ eventAction,
86
+ eventLabel,
87
+ samplingRate: activeSamplingRate
88
+ });
89
+ const publicId = this.config.propertyId.slice(0, 8);
90
+ const payload = {
91
+ ea: eventAction,
92
+ ec: eventCategory,
93
+ el: eventLabel,
94
+ cpabid: this.instanceId,
95
+ cppid: publicId,
96
+ cpsr: activeSamplingRate
97
+ };
98
+ try {
99
+ await (0, _sendStats.default)(this.config.apiUrl, payload);
100
+ } catch (err) {
101
+ (0, _sentryIntegration.reportError)(err, {
102
+ msg: 'Failed to send event'
103
+ });
104
+ }
105
+ };
76
106
  registerObserver(observer) {
77
107
  _logger.default.info('Registering observer');
78
108
  if (this.contentpassStateObservers.includes(observer)) {
@@ -101,6 +131,9 @@ class Contentpass {
101
131
  await this.initialiseAuthState();
102
132
  };
103
133
  countImpression = async () => {
134
+ // Generate a new impression id to be used per impression
135
+ // This mimics the behaviour of the web SDK when in SPA mode
136
+ this.instanceId = _reactNativeUuid.default.v4();
104
137
  await Promise.all([this.countPaidImpressionWhenUserHasValidSub(), this.countSampledImpression()]);
105
138
  };
106
139
  countPaidImpressionWhenUserHasValidSub = async () => {
@@ -108,11 +141,10 @@ class Contentpass {
108
141
  return;
109
142
  }
110
143
  _logger.default.info('Counting paid impression');
111
- const impressionId = _reactNativeUuid.default.v4();
112
144
  try {
113
145
  await (0, _sendPageViewEvent.default)(this.config.apiUrl, {
114
146
  propertyId: this.config.propertyId,
115
- impressionId,
147
+ impressionId: this.instanceId,
116
148
  accessToken: this.oidcAuthState.accessToken
117
149
  });
118
150
  } catch (err) {
@@ -122,26 +154,7 @@ class Contentpass {
122
154
  }
123
155
  };
124
156
  countSampledImpression = async () => {
125
- const generatedSample = Math.random();
126
- const publicId = this.config.propertyId.slice(0, 8);
127
- const instanceId = _reactNativeUuid.default.v4();
128
- if (generatedSample >= this.samplingRate) {
129
- return;
130
- }
131
- _logger.default.info('Counting sampled impression');
132
- try {
133
- await (0, _sendStats.default)(this.config.apiUrl, {
134
- ea: 'load',
135
- ec: 'tcf-sampled',
136
- cpabid: instanceId,
137
- cppid: publicId,
138
- cpsr: this.samplingRate
139
- });
140
- } catch (err) {
141
- (0, _sentryIntegration.reportError)(err, {
142
- msg: 'Failed to count sampled impression'
143
- });
144
- }
157
+ this.event('tcf-sampled', 'load');
145
158
  };
146
159
  initialiseAuthState = async () => {
147
160
  const authState = await this.authStateStorage.getOidcAuthState();
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeUuid","_interopRequireDefault","require","_OidcAuthStateStorage","_ContentpassState","_reactNativeAppAuth","_oidcConsts","_RefreshTokenStrategy","_fetchContentpassToken","_validateSubscription","_sentryIntegration","_sendStats","_sendPageViewEvent","_logger","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","DEFAULT_SAMPLING_RATE","Contentpass","contentpassState","state","ContentpassStateType","INITIALISING","contentpassStateObservers","oidcAuthState","refreshTimer","constructor","config","logLevel","enableLogger","logger","debug","samplingRate","error","Error","authStateStorage","OidcAuthStateStorage","propertyId","initSentry","initialiseAuthState","authenticate","info","result","authorize","clientId","redirectUrl","issuer","scopes","SCOPES","additionalParameters","cp_route","prompt","cp_property","cp_plan","planId","err","reportError","msg","changeContentpassState","ERROR","onNewAuthState","registerObserver","observer","includes","push","unregisterObserver","filter","o","logout","clearOidcAuthState","UNAUTHENTICATED","hasValidSubscription","recoverFromError","countImpression","Promise","all","countPaidImpressionWhenUserHasValidSub","countSampledImpression","hasValidSubscriptionAndAccessToken","impressionId","uuid","v4","sendPageViewEvent","apiUrl","accessToken","generatedSample","Math","random","publicId","slice","instanceId","sendStats","ea","ec","cpabid","cppid","cpsr","authState","getOidcAuthState","storeOidcAuthState","strategy","setupRefreshTimer","RefreshTokenStrategy","INSTANTLY","contentpassToken","fetchContentpassToken","idToken","validateSubscription","AUTHENTICATED","accessTokenExpirationDate","warn","NO_REFRESH","now","Date","expirationDate","timeDiff","getTime","refreshToken","clearTimeout","setTimeout","TIMER_SET","counter","refreshResult","refresh","onRefreshTokenError","REFRESH_TOKEN_RETRIES","delay","resolve","forEach","exports"],"sourceRoot":"../../src","sources":["Contentpass.ts"],"mappings":";;;;;;AAAA,IAAAA,gBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,qBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAGA,IAAAE,iBAAA,GAAAF,OAAA;AAIA,IAAAG,mBAAA,GAAAH,OAAA;AAKA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,qBAAA,GAAAL,OAAA;AACA,IAAAM,sBAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,qBAAA,GAAAR,sBAAA,CAAAC,OAAA;AAEA,IAAAQ,kBAAA,GAAAR,OAAA;AACA,IAAAS,UAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,kBAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,OAAA,GAAAC,uBAAA,CAAAZ,OAAA;AAAgD,SAAAa,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAF,wBAAAE,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAvB,uBAAAe,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAI,UAAA,GAAAJ,CAAA,KAAAK,OAAA,EAAAL,CAAA;AAEhD,MAAMmB,qBAAqB,GAAG,IAAI;AAanB,MAAMC,WAAW,CAAiC;EAKvDC,gBAAgB,GAAqB;IAC3CC,KAAK,EAAEC,sCAAoB,CAACC;EAC9B,CAAC;EACOC,yBAAyB,GAA0B,EAAE;EACrDC,aAAa,GAAyB,IAAI;EAC1CC,YAAY,GAA0B,IAAI;EAElDC,WAAWA,CAACC,MAAyB,EAAE;IACrC,IAAIA,MAAM,CAACC,QAAQ,EAAE;MACnB,IAAAC,oBAAY,EAACF,MAAM,CAACC,QAAQ,CAAC;IAC/B;IAEAE,eAAM,CAACC,KAAK,CAAC,qCAAqC,EAAEJ,MAAM,CAAC;IAC3D,IACEA,MAAM,CAACK,YAAY,KAClBL,MAAM,CAACK,YAAY,GAAG,CAAC,IAAIL,MAAM,CAACK,YAAY,GAAG,CAAC,CAAC,EACpD;MACAF,eAAM,CAACG,KAAK,CAAC,uCAAuC,CAAC;MACrD,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC;IAC1D;IACA,IAAI,CAACF,YAAY,GAAGL,MAAM,CAACK,YAAY,IAAIf,qBAAqB;IAChE,IAAI,CAACkB,gBAAgB,GAAG,IAAIC,6BAAoB,CAACT,MAAM,CAACU,UAAU,CAAC;IACnE,IAAI,CAACV,MAAM,GAAGA,MAAM;IACpB,IAAAW,6BAAU,EAAC;MAAED,UAAU,EAAEV,MAAM,CAACU;IAAW,CAAC,CAAC;IAC7C,IAAI,CAACE,mBAAmB,CAAC,CAAC;EAC5B;EAEOC,YAAY,GAAG,MAAAA,CAAA,KAA2B;IAC/CV,eAAM,CAACW,IAAI,CAAC,8BAA8B,CAAC;IAC3C,IAAIC,MAAuB;IAE3B,IAAI;MACFA,MAAM,GAAG,MAAM,IAAAC,6BAAS,EAAC;QACvBC,QAAQ,EAAE,IAAI,CAACjB,MAAM,CAACU,UAAU;QAChCQ,WAAW,EAAE,IAAI,CAAClB,MAAM,CAACkB,WAAW;QACpCC,MAAM,EAAE,IAAI,CAACnB,MAAM,CAACmB,MAAM;QAC1BC,MAAM,EAAEC,kBAAM;QACdC,oBAAoB,EAAE;UACpBC,QAAQ,EAAE,OAAO;UACjBC,MAAM,EAAE,SAAS;UACjBC,WAAW,EAAE,IAAI,CAACzB,MAAM,CAACU,UAAU;UACnCgB,OAAO,EAAE,IAAI,CAAC1B,MAAM,CAAC2B;QACvB;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOC,GAAQ,EAAE;MACjB,IAAAC,8BAAW,EAACD,GAAG,EAAE;QAAEE,GAAG,EAAE;MAAsB,CAAC,CAAC;MAChD,IAAI,CAACC,sBAAsB,CAAC;QAC1BtC,KAAK,EAAEC,sCAAoB,CAACsC,KAAK;QACjC1B,KAAK,EAAEsB;MACT,CAAC,CAAC;MAEF,MAAMA,GAAG;IACX;IACAzB,eAAM,CAACW,IAAI,CAAC,wDAAwD,CAAC;IAErE,MAAM,IAAI,CAACmB,cAAc,CAAClB,MAAM,CAAC;EACnC,CAAC;EAEMmB,gBAAgBA,CAACC,QAA6B,EAAE;IACrDhC,eAAM,CAACW,IAAI,CAAC,sBAAsB,CAAC;IACnC,IAAI,IAAI,CAAClB,yBAAyB,CAACwC,QAAQ,CAACD,QAAQ,CAAC,EAAE;MACrD;IACF;IAEAA,QAAQ,CAAC,IAAI,CAAC3C,gBAAgB,CAAC;IAC/B,IAAI,CAACI,yBAAyB,CAACyC,IAAI,CAACF,QAAQ,CAAC;EAC/C;EAEOG,kBAAkBA,CAACH,QAA6B,EAAE;IACvDhC,eAAM,CAACW,IAAI,CAAC,wBAAwB,CAAC;IACrC,IAAI,CAAClB,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAAC2C,MAAM,CACnEC,CAAC,IAAKA,CAAC,KAAKL,QACf,CAAC;EACH;EAEOM,MAAM,GAAG,MAAAA,CAAA,KAAY;IAC1BtC,eAAM,CAACW,IAAI,CAAC,qCAAqC,CAAC;IAClD,MAAM,IAAI,CAACN,gBAAgB,CAACkC,kBAAkB,CAAC,CAAC;IAChD,IAAI,CAACX,sBAAsB,CAAC;MAC1BtC,KAAK,EAAEC,sCAAoB,CAACiD,eAAe;MAC3CC,oBAAoB,EAAE;IACxB,CAAC,CAAC;EACJ,CAAC;EAEMC,gBAAgB,GAAG,MAAAA,CAAA,KAAY;IACpC1C,eAAM,CAACW,IAAI,CAAC,uBAAuB,CAAC;IACpC,IAAI,CAACiB,sBAAsB,CAAC;MAC1BtC,KAAK,EAAEC,sCAAoB,CAACC;IAC9B,CAAC,CAAC;IAEF,MAAM,IAAI,CAACiB,mBAAmB,CAAC,CAAC;EAClC,CAAC;EAEMkC,eAAe,GAAG,MAAAA,CAAA,KAAY;IACnC,MAAMC,OAAO,CAACC,GAAG,CAAC,CAChB,IAAI,CAACC,sCAAsC,CAAC,CAAC,EAC7C,IAAI,CAACC,sBAAsB,CAAC,CAAC,CAC9B,CAAC;EACJ,CAAC;EAEOD,sCAAsC,GAAG,MAAAA,CAAA,KAAY;IAC3D,IAAI,CAAC,IAAI,CAACE,kCAAkC,CAAC,CAAC,EAAE;MAC9C;IACF;IAEAhD,eAAM,CAACW,IAAI,CAAC,0BAA0B,CAAC;IACvC,MAAMsC,YAAY,GAAGC,wBAAI,CAACC,EAAE,CAAC,CAAC;IAE9B,IAAI;MACF,MAAM,IAAAC,0BAAiB,EAAC,IAAI,CAACvD,MAAM,CAACwD,MAAM,EAAE;QAC1C9C,UAAU,EAAE,IAAI,CAACV,MAAM,CAACU,UAAU;QAClC0C,YAAY;QACZK,WAAW,EAAE,IAAI,CAAC5D,aAAa,CAAE4D;MACnC,CAAC,CAAC;IACJ,CAAC,CAAC,OAAO7B,GAAQ,EAAE;MACjB,IAAAC,8BAAW,EAACD,GAAG,EAAE;QAAEE,GAAG,EAAE;MAAkC,CAAC,CAAC;IAC9D;EACF,CAAC;EAEOoB,sBAAsB,GAAG,MAAAA,CAAA,KAAY;IAC3C,MAAMQ,eAAe,GAAGC,IAAI,CAACC,MAAM,CAAC,CAAC;IACrC,MAAMC,QAAQ,GAAG,IAAI,CAAC7D,MAAM,CAACU,UAAU,CAACoD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACnD,MAAMC,UAAU,GAAGV,wBAAI,CAACC,EAAE,CAAC,CAAC;IAE5B,IAAII,eAAe,IAAI,IAAI,CAACrD,YAAY,EAAE;MACxC;IACF;IAEAF,eAAM,CAACW,IAAI,CAAC,6BAA6B,CAAC;IAC1C,IAAI;MACF,MAAM,IAAAkD,kBAAS,EAAC,IAAI,CAAChE,MAAM,CAACwD,MAAM,EAAE;QAClCS,EAAE,EAAE,MAAM;QACVC,EAAE,EAAE,aAAa;QACjBC,MAAM,EAAEJ,UAAU;QAClBK,KAAK,EAAEP,QAAQ;QACfQ,IAAI,EAAE,IAAI,CAAChE;MACb,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOuB,GAAQ,EAAE;MACjB,IAAAC,8BAAW,EAACD,GAAG,EAAE;QAAEE,GAAG,EAAE;MAAqC,CAAC,CAAC;IACjE;EACF,CAAC;EAEOlB,mBAAmB,GAAG,MAAAA,CAAA,KAAY;IACxC,MAAM0D,SAAS,GAAG,MAAM,IAAI,CAAC9D,gBAAgB,CAAC+D,gBAAgB,CAAC,CAAC;IAChE,IAAID,SAAS,EAAE;MACbnE,eAAM,CAACC,KAAK,CAAC,mDAAmD,CAAC;MACjE,MAAM,IAAI,CAAC6B,cAAc,CAACqC,SAAS,CAAC;MACpC;IACF;IAEAnE,eAAM,CAACC,KAAK,CACV,8DACF,CAAC;IACD,IAAI,CAAC2B,sBAAsB,CAAC;MAC1BtC,KAAK,EAAEC,sCAAoB,CAACiD,eAAe;MAC3CC,oBAAoB,EAAE;IACxB,CAAC,CAAC;EACJ,CAAC;EAEOX,cAAc,GAAG,MAAOqC,SAAwB,IAAK;IAC3DnE,eAAM,CAACC,KAAK,CAAC,yBAAyB,CAAC;IACvC,IAAI,CAACP,aAAa,GAAGyE,SAAS;IAC9B,MAAM,IAAI,CAAC9D,gBAAgB,CAACgE,kBAAkB,CAACF,SAAS,CAAC;IAEzD,MAAMG,QAAQ,GAAG,IAAI,CAACC,iBAAiB,CAAC,CAAC;IACzC;IACA,IAAID,QAAQ,KAAKE,0CAAoB,CAACC,SAAS,EAAE;MAC/CzE,eAAM,CAACC,KAAK,CAAC,8CAA8C,CAAC;MAC5D;IACF;IAEA,IAAI;MACFD,eAAM,CAACW,IAAI,CAAC,uBAAuB,CAAC;MACpC,MAAM+D,gBAAgB,GAAG,MAAM,IAAAC,8BAAqB,EAAC;QACnD3D,MAAM,EAAE,IAAI,CAACnB,MAAM,CAACmB,MAAM;QAC1BT,UAAU,EAAE,IAAI,CAACV,MAAM,CAACU,UAAU;QAClCqE,OAAO,EAAE,IAAI,CAAClF,aAAa,CAACkF;MAC9B,CAAC,CAAC;MACF,MAAMnC,oBAAoB,GAAG,IAAAoC,6BAAoB,EAACH,gBAAgB,CAAC;MACnE1E,eAAM,CAACW,IAAI,CAAC;QAAE8B;MAAqB,CAAC,EAAE,+BAA+B,CAAC;MACtE,IAAI,CAACb,sBAAsB,CAAC;QAC1BtC,KAAK,EAAEC,sCAAoB,CAACuF,aAAa;QACzCrC;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOhB,GAAQ,EAAE;MACjB,IAAAC,8BAAW,EAACD,GAAG,EAAE;QACfE,GAAG,EAAE;MACP,CAAC,CAAC;MACF,IAAI,CAACC,sBAAsB,CAAC;QAC1BtC,KAAK,EAAEC,sCAAoB,CAACsC,KAAK;QACjC1B,KAAK,EAAEsB;MACT,CAAC,CAAC;IACJ;EACF,CAAC;EAEO8C,iBAAiB,GAAGA,CAAA,KAA4B;IACtD,MAAMQ,yBAAyB,GAC7B,IAAI,CAACrF,aAAa,EAAEqF,yBAAyB;IAE/C,IAAI,CAACA,yBAAyB,EAAE;MAC9B/E,eAAM,CAACgF,IAAI,CAAC,0CAA0C,CAAC;MACvD,OAAOR,0CAAoB,CAACS,UAAU;IACxC;IAEA,MAAMC,GAAG,GAAG,IAAIC,IAAI,CAAC,CAAC;IACtB,MAAMC,cAAc,GAAG,IAAID,IAAI,CAACJ,yBAAyB,CAAC;IAC1D,MAAMM,QAAQ,GAAGD,cAAc,CAACE,OAAO,CAAC,CAAC,GAAGJ,GAAG,CAACI,OAAO,CAAC,CAAC;IACzD,IAAID,QAAQ,IAAI,CAAC,EAAE;MACjBrF,eAAM,CAACC,KAAK,CAAC,4CAA4C,CAAC;MAC1D,IAAI,CAACsF,YAAY,CAAC,CAAC,CAAC;MACpB,OAAOf,0CAAoB,CAACC,SAAS;IACvC;IAEA,IAAI,IAAI,CAAC9E,YAAY,EAAE;MACrB6F,YAAY,CAAC,IAAI,CAAC7F,YAAY,CAAC;IACjC;IAEAK,eAAM,CAACC,KAAK,CAAC;MAAEoF;IAAS,CAAC,EAAE,0BAA0B,CAAC;IACtD,IAAI,CAAC1F,YAAY,GAAG8F,UAAU,CAAC,YAAY;MACzC,MAAM,IAAI,CAACF,YAAY,CAAC,CAAC,CAAC;IAC5B,CAAC,EAAEF,QAAQ,CAAC;IAEZ,OAAOb,0CAAoB,CAACkB,SAAS;EACvC,CAAC;EAEOH,YAAY,GAAG,MAAOI,OAAe,IAAK;IAChD,IAAI,CAAC,IAAI,CAACjG,aAAa,EAAE6F,YAAY,EAAE;MACrC,IAAA7D,8BAAW,EAAC,IAAItB,KAAK,CAAC,4CAA4C,CAAC,CAAC;MACpE;IACF;IAEA,IAAI;MACFJ,eAAM,CAACW,IAAI,CAAC,kBAAkB,CAAC;MAC/B,MAAMiF,aAAa,GAAG,MAAM,IAAAC,2BAAO,EACjC;QACE/E,QAAQ,EAAE,IAAI,CAACjB,MAAM,CAACU,UAAU;QAChCQ,WAAW,EAAE,IAAI,CAAClB,MAAM,CAACkB,WAAW;QACpCC,MAAM,EAAE,IAAI,CAACnB,MAAM,CAACmB,MAAM;QAC1BC,MAAM,EAAEC;MACV,CAAC,EACD;QACEqE,YAAY,EAAE,IAAI,CAAC7F,aAAa,CAAC6F;MACnC,CACF,CAAC;MACD,MAAM,IAAI,CAACzD,cAAc,CAAC8D,aAAa,CAAC;MACxC5F,eAAM,CAACW,IAAI,CAAC,8BAA8B,CAAC;IAC7C,CAAC,CAAC,OAAOc,GAAQ,EAAE;MACjB,MAAM,IAAI,CAACqE,mBAAmB,CAACH,OAAO,EAAElE,GAAG,CAAC;IAC9C;EACF,CAAC;EAEOqE,mBAAmB,GAAG,MAAAA,CAAOH,OAAe,EAAElE,GAAU,KAAK;IACnE;IACA,IAAIkE,OAAO,GAAGI,iCAAqB,EAAE;MACnC/F,eAAM,CAACgF,IAAI,CAAC;QAAEvD,GAAG;QAAEkE;MAAQ,CAAC,EAAE,mCAAmC,CAAC;MAClE,MAAMK,KAAK,GAAGL,OAAO,GAAG,IAAI,GAAG,EAAE;MACjC,MAAM,IAAI/C,OAAO,CAAEqD,OAAO,IAAKR,UAAU,CAACQ,OAAO,EAAED,KAAK,CAAC,CAAC;MAC1D,MAAM,IAAI,CAACT,YAAY,CAACI,OAAO,GAAG,CAAC,CAAC;MACpC;IACF;IAEA,IAAAjE,8BAAW,EAACD,GAAG,EAAE;MACfE,GAAG,EAAE,iCAAiCgE,OAAO;IAC/C,CAAC,CAAC;IAEF,MAAM,IAAI,CAACrD,MAAM,CAAC,CAAC;EACrB,CAAC;EAEOV,sBAAsB,GAAItC,KAAuB,IAAK;IAC5D,IAAI,CAACD,gBAAgB,GAAGC,KAAK;IAC7B,IAAI,CAACG,yBAAyB,CAACyG,OAAO,CAAElE,QAAQ,IAAKA,QAAQ,CAAC1C,KAAK,CAAC,CAAC;EACvE,CAAC;EAEO0D,kCAAkC,GAAGA,CAAA,KAAM;IACjD,OACE,IAAI,CAAC3D,gBAAgB,CAACC,KAAK,KAAKC,sCAAoB,CAACuF,aAAa,IAClE,IAAI,CAACzF,gBAAgB,CAACoD,oBAAoB,IAC1C,IAAI,CAAC/C,aAAa,EAAE4D,WAAW;EAEnC,CAAC;AACH;AAAC6C,OAAA,CAAA9H,OAAA,GAAAe,WAAA","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeUuid","_interopRequireDefault","require","_OidcAuthStateStorage","_ContentpassState","_reactNativeAppAuth","_oidcConsts","_RefreshTokenStrategy","_fetchContentpassToken","_validateSubscription","_sentryIntegration","_sendStats","_sendPageViewEvent","_logger","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","DEFAULT_SAMPLING_RATE","Contentpass","contentpassState","state","ContentpassStateType","INITIALISING","contentpassStateObservers","oidcAuthState","refreshTimer","constructor","config","logLevel","enableLogger","instanceId","uuid","v4","logger","debug","samplingRate","error","Error","authStateStorage","OidcAuthStateStorage","propertyId","initSentry","initialiseAuthState","authenticate","route","info","result","authorize","clientId","redirectUrl","issuer","scopes","SCOPES","additionalParameters","cp_route","prompt","cp_property","cp_plan","planId","err","reportError","msg","changeContentpassState","ERROR","onNewAuthState","event","eventCategory","eventAction","eventLabel","generatedSample","Math","random","activeSamplingRate","publicId","slice","payload","ea","ec","el","cpabid","cppid","cpsr","sendStats","apiUrl","registerObserver","observer","includes","push","unregisterObserver","filter","o","logout","clearOidcAuthState","UNAUTHENTICATED","hasValidSubscription","recoverFromError","countImpression","Promise","all","countPaidImpressionWhenUserHasValidSub","countSampledImpression","hasValidSubscriptionAndAccessToken","sendPageViewEvent","impressionId","accessToken","authState","getOidcAuthState","storeOidcAuthState","strategy","setupRefreshTimer","RefreshTokenStrategy","INSTANTLY","contentpassToken","fetchContentpassToken","idToken","validateSubscription","AUTHENTICATED","accessTokenExpirationDate","warn","NO_REFRESH","now","Date","expirationDate","timeDiff","getTime","refreshToken","clearTimeout","setTimeout","TIMER_SET","counter","refreshResult","refresh","onRefreshTokenError","REFRESH_TOKEN_RETRIES","delay","resolve","forEach","exports"],"sourceRoot":"../../src","sources":["Contentpass.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,455 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CONTENTPASS_TOKEN_WITHOUT_PLANS = void 0;
7
+ var _Contentpass = _interopRequireDefault(require("./Contentpass.js"));
8
+ var AppAuthModule = _interopRequireWildcard(require("react-native-app-auth"));
9
+ var OidcAuthStateStorageModule = _interopRequireWildcard(require("./OidcAuthStateStorage.js"));
10
+ var FetchContentpassTokenModule = _interopRequireWildcard(require("./contentpassTokenUtils/fetchContentpassToken.js"));
11
+ var _oidcConsts = require("./consts/oidcConsts.js");
12
+ var SentryIntegrationModule = _interopRequireWildcard(require("./sentryIntegration.js"));
13
+ var SendStatsModule = _interopRequireWildcard(require("./countImpressionUtils/sendStats.js"));
14
+ var SendPageViewEventModule = _interopRequireWildcard(require("./countImpressionUtils/sendPageViewEvent.js"));
15
+ var LoggerModule = _interopRequireWildcard(require("./logger.js"));
16
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
17
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
+ const config = {
20
+ propertyId: '5803179c-5b9f-40be-9a91-e67e8ea20593',
21
+ planId: 'planId-1',
22
+ redirectUrl: 'de.test.net://oauth',
23
+ issuer: 'https://issuer.net',
24
+ apiUrl: 'https://cp.property.com',
25
+ samplingRate: 1
26
+ };
27
+ const NOW = new Date('2024-12-02T11:53:56.272Z').getTime();
28
+ const EXAMPLE_AUTH_RESULT = {
29
+ accessToken: 'eyJhbGciOiJSUzI1NiIsInR5cCI6ImF0K2p3dCIsImtpZCI6IjY5NzUwYTZjLTNmYjctNDUyNi05NWY4LTVhZmYxMmIyZjFjOSJ9.eyJqdGkiOiIwNXdQZk83SFNvcVBjUlE3ci00TmEiLCJzdWIiOiI4OWNiNjZkNi05NzgzLTRkMjktODQ0Zi0zYjc0MWUxYmQxNjMiLCJpYXQiOjE3MzMxMzc3MzAsImV4cCI6MTczMzE0MTMzMCwic2NvcGUiOiJvcGVuaWQgY29udGVudHBhc3Mgb2ZmbGluZV9hY2Nlc3MiLCJjbGllbnRfaWQiOiJjYzNmYzRhZC1jYmU1LTRkMDktYmY4NS1hNDk3OTY2MDNiMTkiLCJpc3MiOiJodHRwczovL215LmNvbnRlbnRwYXNzLmRldiIsImF1ZCI6ImNjM2ZjNGFkLWNiZTUtNGQwOS1iZjg1LWE0OTc5NjYwM2IxOSJ9.F7NdahJ2xB9CuhXkZXKZH2F20Az1MlWb4GUrYpK1ZdY_nbFNZFjUSNubVxlilGzgevLXl4yh2ANr7e3Kbl6dc-1AwzGfBJRNc2Zch9UHRIqZk_4uOIMgNtDOvBqzC9aZAS--MM3wEdriTEIBdubuMLSiKDPq2AgKAminL7fu6aSAFAhqe0ynVtB8IwUaAfoDHH0XtnKVaBQz03CNmepwaXJ4UEk2Ko8o_AW8eLjOX85ITegNSCCiFGW-zDmELF1mgRxzLDEuUAKyX3p8rtlT-DJdJD6u-gwEWW6g27WBlB4qnIm2tsjZrPjKL4-ZC4jabwKdZNes8D5kahQuFfoRSw',
30
+ accessTokenExpirationDate: '2024-12-02T12:08:50Z',
31
+ authorizeAdditionalParameters: {
32
+ iss: 'https://my.demo.dev'
33
+ },
34
+ idToken: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjY5NzUwYTZjLTNmYjctNDUyNi05NWY4LTVhZmYxMmIyZjFjOSJ9.eyJzdWIiOiI4OWNiNjZkNi05NzgzLTRkMjktODQ0Zi0zYjc0MWUxYmQxNjMiLCJzdWJzY3JpcHRpb25zIjpbXSwiY2FuY2VsbGVkU3Vic2NyaXB0aW9ucyI6W10sImlzY3AiOnRydWUsImlzQWRtaW4iOmZhbHNlLCJub25jZSI6InRtbVluZjc1WUNXS0hDSmZaN1RSUGFVVUFheDZ1RVVPcFM4QjZVTW5EWGsiLCJhdF9oYXNoIjoiN1hFcjJBaWZtMWZtaG94QXV2TG9TdyIsImF1ZCI6ImNjM2ZjNGFkLWNiZTUtNGQwOS1iZjg1LWE0OTc5NjYwM2IxOSIsImV4cCI6MTczMzMxNDEzMCwiaWF0IjoxNzMzMTM3NzMwLCJpc3MiOiJodHRwczovL215LmNvbnRlbnRwYXNzLmRldiJ9.ZC3QZN7OTmgLXqBouHzzmhGKWR9vTvJ_OrNB6cM5A90TTD-jPRx5-5lXoZEUuI1LGUMu3TDGphTzr945Ck0C5ArRACiilJy2RHUZPh_cEgdMXQLuMxwBT1Uw5uQAXXMdjjUV2GV3a7KNxJmcWkueHqvJBDmIK5iLUwDuhks_Qs6mE6XpPDdJSToIIaM2x5J2eD5XNaY6YcE93Uum6Qwbu_NrpWE77OwzA2NWqBnpPnTJ-U4BcZcAt1u_j9X-EZygWUF34cZvyZb6REFBDA3IuxGSZ-ZVmVKoPvOpgNoxoNf0l5Cg-0WqE7mgY1M9aFiirwnEbDHYeqYgoPopm3KoKw',
35
+ refreshToken: 'vSYGtY9lMOsVQaolJJO_TwTjtO0UrjS1Ie5HQ4Yg4WQ',
36
+ scopes: [],
37
+ tokenAdditionalParameters: {},
38
+ tokenType: 'Bearer',
39
+ authorizationCode: ''
40
+ };
41
+ const EXAMPLE_REFRESH_RESULT = {
42
+ ...EXAMPLE_AUTH_RESULT,
43
+ accessTokenExpirationDate: '2024-12-03T10:00:50Z'
44
+ };
45
+ const CONTENTPASS_TOKEN_WITH_PLANS = 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjY5NzUwYTZjLTNmYjctNDUyNi05NWY4LTVhZmYxMmIyZjFjOSJ9.eyJhdXRoIjp0cnVlLCJ0eXBlIjoiY3AiLCJwbGFucyI6WyIwYWNhZTkxNy1iZTk5LTQ4ZWEtYjhmMS0yMGZhNjhhNDdkM2EiLCI0NDIxNjI4Yy05NjA2LTRjMDEtOGU1ZC1jMmE5YmNhNjhhYjQiLCI3ZThkZTBjYy0zZTk3LTQ5YTItODgxZC05ZmZiNWI4NDE1MTUiLCJhNDcyMWRiNS02N2RmLTQxNDUtYmJiZi1jYmQwOWY3ZTAzOTciLCJjNGQzYjBmNS05ODlhLTRmN2ItOGFjNy0zZDhmZmE5NTcxN2YiLCI2NGRkOTkwNS05NmUxLTRmYjItOTgwZC01MDdmMTYzNzVmZTkiXSwiYXVkIjoiY2MzZmM0YWQiLCJpYXQiOjE3MzMxMzU2ODEsImV4cCI6MTczMzMxMjA4MX0.CMtH7HRLf2HVgw3_cZRN0en8tml_SQKM73iLGJAp72-vJuRJaq85xBp6Jgy9WD3L7x4itRlBAYZxX8tLxZGogU0WP4_dMGFQ2QlcwKshwJygwRM1YqvxGWX2Az_KxEMc2QGHvpE1qe2MAr_xOU7VFfc0-vWxFc3hRzpAM5j7YHctj2t1v6h9-M7V2Hkcn37569QmtgU8gJkUxXsgUTufbb1ikjjjAvnjvTluHJo51_utbimpUbCk3EFxXVCVEI_pAqiZQXNninUQ6dbSujLb3L2UlEdQzLeUiBdYroeFzSyruLrR841ledLQ5ZP2OqzF5oUMuAGVOOhmgGdwGMCDRQ';
46
+ const CONTENTPASS_TOKEN_WITHOUT_PLANS = exports.CONTENTPASS_TOKEN_WITHOUT_PLANS = 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjY5NzUwYTZjLTNmYjctNDUyNi05NWY4LTVhZmYxMmIyZjFjOSJ9.eyJhdXRoIjp0cnVlLCJ0eXBlIjoiY3AiLCJwbGFucyI6W10sImF1ZCI6ImNjM2ZjNGFkIiwiaWF0IjoxNzMzMTM1NjgxLCJleHAiOjE3MzMzMTIwODF9.CMtH7HRLf2HVgw3_cZRN0en8tml_SQKM73iLGJAp72-vJuRJaq85xBp6Jgy9WD3L7x4itRlBAYZxX8tLxZGogU0WP4_dMGFQ2QlcwKshwJygwRM1YqvxGWX2Az_KxEMc2QGHvpE1qe2MAr_xOU7VFfc0-vWxFc3hRzpAM5j7YHctj2t1v6h9-M7V2Hkcn37569QmtgU8gJkUxXsgUTufbb1ikjjjAvnjvTluHJo51_utbimpUbCk3EFxXVCVEI_pAqiZQXNninUQ6dbSujLb3L2UlEdQzLeUiBdYroeFzSyruLrR841ledLQ5ZP2OqzF5oUMuAGVOOhmgGdwGMCDRQ';
47
+ describe('Contentpass', () => {
48
+ let contentpass;
49
+ let authorizeSpy;
50
+ let refreshSpy;
51
+ let reportErrorSpy;
52
+ let fetchContentpassTokenSpy;
53
+ let oidcAuthStorageMock;
54
+ let sendStatsSpy;
55
+ let sendPageViewEventSpy;
56
+ let enableLoggerSpy;
57
+ let initSentrySpy;
58
+ beforeEach(() => {
59
+ jest.useFakeTimers({
60
+ now: NOW
61
+ });
62
+ authorizeSpy = jest.spyOn(AppAuthModule, 'authorize').mockResolvedValue(EXAMPLE_AUTH_RESULT);
63
+ refreshSpy = jest.spyOn(AppAuthModule, 'refresh').mockResolvedValue(EXAMPLE_REFRESH_RESULT);
64
+ reportErrorSpy = jest.spyOn(SentryIntegrationModule, 'reportError').mockReturnValue(undefined);
65
+ initSentrySpy = jest.spyOn(SentryIntegrationModule, 'initSentry').mockReturnValue(undefined);
66
+ oidcAuthStorageMock = {
67
+ storeOidcAuthState: jest.fn(),
68
+ getOidcAuthState: jest.fn(),
69
+ clearOidcAuthState: jest.fn()
70
+ };
71
+ jest.spyOn(OidcAuthStateStorageModule, 'default').mockReturnValue(oidcAuthStorageMock);
72
+ fetchContentpassTokenSpy = jest.spyOn(FetchContentpassTokenModule, 'default').mockResolvedValue(CONTENTPASS_TOKEN_WITH_PLANS);
73
+ sendStatsSpy = jest.spyOn(SendStatsModule, 'default').mockResolvedValue({
74
+ ok: true
75
+ });
76
+ sendPageViewEventSpy = jest.spyOn(SendPageViewEventModule, 'default').mockResolvedValue({
77
+ ok: true
78
+ });
79
+ enableLoggerSpy = jest.spyOn(LoggerModule, 'enableLogger').mockReturnValue(undefined);
80
+ contentpass = new _Contentpass.default(config);
81
+ });
82
+ afterEach(() => {
83
+ jest.resetAllMocks();
84
+ jest.restoreAllMocks();
85
+ jest.useRealTimers();
86
+ });
87
+ describe('constructor', () => {
88
+ it('should throw an error if sampling rate is not between 0 and 1', () => {
89
+ expect(() => new _Contentpass.default({
90
+ ...config,
91
+ samplingRate: -1
92
+ })).toThrow('Sampling rate must be between 0 and 1');
93
+ expect(() => new _Contentpass.default({
94
+ ...config,
95
+ samplingRate: 2
96
+ })).toThrow('Sampling rate must be between 0 and 1');
97
+ });
98
+ it('should initialise sentry', () => {
99
+ expect(initSentrySpy).toHaveBeenCalledWith({
100
+ propertyId: config.propertyId
101
+ });
102
+ });
103
+ it('should initialise contentpass state', () => {
104
+ const contentpassStates = [];
105
+ contentpass.registerObserver(state => {
106
+ contentpassStates.push(state);
107
+ });
108
+ expect(contentpassStates).toHaveLength(1);
109
+ expect(contentpassStates[0]).toEqual({
110
+ state: 'UNAUTHENTICATED',
111
+ hasValidSubscription: false
112
+ });
113
+ });
114
+ it('should initialise with previous state if exists in storage', async () => {
115
+ oidcAuthStorageMock.getOidcAuthState.mockResolvedValue(EXAMPLE_AUTH_RESULT);
116
+ contentpass = new _Contentpass.default(config);
117
+ const contentpassStates = [];
118
+ contentpass.registerObserver(state => {
119
+ contentpassStates.push(state);
120
+ });
121
+ await jest.advanceTimersByTimeAsync(100);
122
+ expect(contentpassStates).toHaveLength(2);
123
+ expect(contentpassStates[0]).toEqual({
124
+ state: 'INITIALISING'
125
+ });
126
+ expect(contentpassStates[1]).toEqual({
127
+ state: 'AUTHENTICATED',
128
+ hasValidSubscription: true
129
+ });
130
+ });
131
+ it('should refresh token instantly if the token from previous state expired', async () => {
132
+ oidcAuthStorageMock.getOidcAuthState.mockResolvedValue({
133
+ ...EXAMPLE_AUTH_RESULT,
134
+ accessTokenExpirationDate: '2024-12-02T11:53:56.272Z'
135
+ });
136
+ contentpass = new _Contentpass.default(config);
137
+ const contentpassStates = [];
138
+ contentpass.registerObserver(state => {
139
+ contentpassStates.push(state);
140
+ });
141
+ expect(contentpassStates).toHaveLength(1);
142
+ expect(contentpassStates[0]).toEqual({
143
+ state: 'INITIALISING'
144
+ });
145
+ await jest.advanceTimersByTimeAsync(100);
146
+ expect(refreshSpy).toHaveBeenCalledTimes(1);
147
+ expect(refreshSpy).toHaveBeenCalledWith({
148
+ clientId: config.propertyId,
149
+ redirectUrl: config.redirectUrl,
150
+ issuer: config.issuer,
151
+ scopes: _oidcConsts.SCOPES
152
+ }, {
153
+ refreshToken: EXAMPLE_AUTH_RESULT.refreshToken
154
+ });
155
+ expect(contentpassStates).toHaveLength(2);
156
+ expect(contentpassStates[1]).toEqual({
157
+ state: 'AUTHENTICATED',
158
+ hasValidSubscription: true
159
+ });
160
+ });
161
+ it('should enable logger if logLevel is set', () => {
162
+ contentpass = new _Contentpass.default({
163
+ ...config,
164
+ logLevel: 'info'
165
+ });
166
+ expect(enableLoggerSpy).toHaveBeenCalledWith('info');
167
+ });
168
+ });
169
+ describe('authenticate', () => {
170
+ it('should call authorize with the correct parameters', async () => {
171
+ await contentpass.authenticate('login');
172
+ expect(authorizeSpy).toHaveBeenCalledWith({
173
+ additionalParameters: {
174
+ cp_property: config.propertyId,
175
+ cp_plan: config.planId,
176
+ cp_route: 'login',
177
+ prompt: 'consent'
178
+ },
179
+ clientId: config.propertyId,
180
+ issuer: config.issuer,
181
+ redirectUrl: config.redirectUrl,
182
+ scopes: ['openid', 'offline_access', 'contentpass']
183
+ });
184
+ });
185
+ it('should change contentpass state to error when authorize throws an error', async () => {
186
+ const contentpassStates = [];
187
+ const error = new Error('Authorize error');
188
+ authorizeSpy.mockRejectedValue(error);
189
+ contentpass.registerObserver(state => {
190
+ contentpassStates.push(state);
191
+ });
192
+ await expect(async () => {
193
+ await contentpass.authenticate();
194
+ }).rejects.toThrow(error);
195
+ expect(reportErrorSpy).toHaveBeenCalledWith(error, {
196
+ msg: 'Failed to authorize'
197
+ });
198
+ expect(contentpassStates).toHaveLength(2);
199
+ expect(contentpassStates[1]).toEqual({
200
+ state: 'ERROR',
201
+ error
202
+ });
203
+ });
204
+ it('should fetch contentpass token and validate it after successful authorize', async () => {
205
+ const contentpassStates = [];
206
+ contentpass.registerObserver(state => {
207
+ contentpassStates.push(state);
208
+ });
209
+ await contentpass.authenticate();
210
+ expect(oidcAuthStorageMock.storeOidcAuthState).toHaveBeenCalledWith(EXAMPLE_AUTH_RESULT);
211
+ expect(contentpassStates).toHaveLength(2);
212
+ expect(contentpassStates[1]).toEqual({
213
+ state: 'AUTHENTICATED',
214
+ hasValidSubscription: true
215
+ });
216
+ });
217
+ it('should set error state if fetching contentpass token fails after successful authorize', async () => {
218
+ const contentpassStates = [];
219
+ contentpass.registerObserver(state => {
220
+ contentpassStates.push(state);
221
+ });
222
+ const error = new Error('Fetch error');
223
+ fetchContentpassTokenSpy.mockRejectedValue(error);
224
+ await contentpass.authenticate();
225
+ expect(oidcAuthStorageMock.storeOidcAuthState).toHaveBeenCalledWith(EXAMPLE_AUTH_RESULT);
226
+ expect(contentpassStates).toHaveLength(2);
227
+ expect(contentpassStates[1]).toEqual({
228
+ state: 'ERROR',
229
+ error
230
+ });
231
+ });
232
+ it('should setup a refresh token timer', async () => {
233
+ const contentpassStates = [];
234
+ contentpass.registerObserver(state => {
235
+ contentpassStates.push(state);
236
+ });
237
+ await contentpass.authenticate();
238
+ const expirationDate = new Date(EXAMPLE_AUTH_RESULT.accessTokenExpirationDate).getTime();
239
+ const expectedDelay = expirationDate - NOW;
240
+ expect(refreshSpy).toHaveBeenCalledTimes(0);
241
+ jest.advanceTimersByTime(expectedDelay);
242
+ expect(refreshSpy).toHaveBeenCalledTimes(1);
243
+ expect(refreshSpy).toHaveBeenCalledWith({
244
+ clientId: config.propertyId,
245
+ redirectUrl: config.redirectUrl,
246
+ issuer: config.issuer,
247
+ scopes: _oidcConsts.SCOPES
248
+ }, {
249
+ refreshToken: EXAMPLE_AUTH_RESULT.refreshToken
250
+ });
251
+ expect(contentpassStates).toHaveLength(2);
252
+ expect(contentpassStates[1]).toEqual({
253
+ state: 'AUTHENTICATED',
254
+ hasValidSubscription: true
255
+ });
256
+ });
257
+ it('should not setup a refresh token timer if no expiration date is available', async () => {
258
+ const contentpassStates = [];
259
+ contentpass.registerObserver(state => {
260
+ contentpassStates.push(state);
261
+ });
262
+ authorizeSpy.mockResolvedValue({
263
+ ...EXAMPLE_AUTH_RESULT,
264
+ accessTokenExpirationDate: undefined
265
+ });
266
+ await contentpass.authenticate();
267
+ expect(refreshSpy).toHaveBeenCalledTimes(0);
268
+ expect(contentpassStates).toHaveLength(2);
269
+ expect(contentpassStates[1]).toEqual({
270
+ state: 'AUTHENTICATED',
271
+ hasValidSubscription: true
272
+ });
273
+ });
274
+ it('should set error state if refresh token fails', async () => {
275
+ const contentpassStates = [];
276
+ contentpass.registerObserver(state => {
277
+ contentpassStates.push(state);
278
+ });
279
+ await contentpass.authenticate();
280
+ expect(contentpassStates).toHaveLength(2);
281
+ expect(contentpassStates[1]).toEqual({
282
+ state: 'AUTHENTICATED',
283
+ hasValidSubscription: true
284
+ });
285
+ const expirationDate = new Date(EXAMPLE_AUTH_RESULT.accessTokenExpirationDate).getTime();
286
+ const expectedDelay = expirationDate - NOW;
287
+ const refreshError = new Error('Refresh error');
288
+ refreshSpy.mockRejectedValue(refreshError);
289
+ await jest.advanceTimersByTimeAsync(expectedDelay);
290
+ expect(contentpassStates).toHaveLength(2);
291
+ expect(contentpassStates[1]).toEqual({
292
+ state: 'AUTHENTICATED',
293
+ hasValidSubscription: true
294
+ });
295
+ await jest.advanceTimersByTimeAsync(30000);
296
+ expect(contentpassStates).toHaveLength(2);
297
+ expect(contentpassStates[1]).toEqual({
298
+ state: 'AUTHENTICATED',
299
+ hasValidSubscription: true
300
+ });
301
+
302
+ // after 6 retries the state should change to error
303
+ await jest.advanceTimersByTimeAsync(120001);
304
+ expect(reportErrorSpy).toHaveBeenCalledTimes(1);
305
+ expect(reportErrorSpy).toHaveBeenCalledWith(refreshError, {
306
+ msg: 'Failed to refresh token after 6 retries'
307
+ });
308
+ expect(contentpassStates).toHaveLength(3);
309
+ expect(contentpassStates[2]).toEqual({
310
+ state: 'UNAUTHENTICATED',
311
+ hasValidSubscription: false
312
+ });
313
+ });
314
+ });
315
+ describe('registerObserver', () => {
316
+ it('should call the observer with the current state', () => {
317
+ const observer = jest.fn();
318
+ contentpass.registerObserver(observer);
319
+ expect(observer).toHaveBeenCalledWith({
320
+ state: 'UNAUTHENTICATED',
321
+ hasValidSubscription: false
322
+ });
323
+ });
324
+ it('should call the observer with the new state when the state changes', async () => {
325
+ const observer = jest.fn();
326
+ contentpass.registerObserver(observer);
327
+ await contentpass.authenticate();
328
+ expect(observer).toHaveBeenLastCalledWith({
329
+ state: 'AUTHENTICATED',
330
+ hasValidSubscription: true
331
+ });
332
+ });
333
+ it('should not add the same observer twice', () => {
334
+ const observer = jest.fn();
335
+ contentpass.registerObserver(observer);
336
+ contentpass.registerObserver(observer);
337
+ expect(observer).toHaveBeenCalledTimes(1);
338
+ });
339
+ });
340
+ describe('unregisterObserver', () => {
341
+ it('should remove the observer', () => {
342
+ const observer = jest.fn();
343
+ contentpass.registerObserver(observer);
344
+ expect(observer).toHaveBeenCalledTimes(1);
345
+ contentpass.unregisterObserver(observer);
346
+ contentpass.authenticate();
347
+ expect(observer).toHaveBeenCalledTimes(1);
348
+ });
349
+ });
350
+ describe('logout', () => {
351
+ it('should clear the auth state and change the state', async () => {
352
+ const contentpassStates = [];
353
+ contentpass.registerObserver(state => {
354
+ contentpassStates.push(state);
355
+ });
356
+ await contentpass.authenticate();
357
+ expect(contentpassStates[1]).toEqual({
358
+ state: 'AUTHENTICATED',
359
+ hasValidSubscription: true
360
+ });
361
+ await contentpass.logout();
362
+ expect(oidcAuthStorageMock.clearOidcAuthState).toHaveBeenCalled();
363
+ expect(contentpassStates).toHaveLength(3);
364
+ expect(contentpassStates[2]).toEqual({
365
+ state: 'UNAUTHENTICATED',
366
+ hasValidSubscription: false
367
+ });
368
+ });
369
+ });
370
+ describe('recoverFromError', () => {
371
+ it('should change the state to INITIALISING and call initialiseAuthState', async () => {
372
+ const contentpassStates = [];
373
+ contentpass.registerObserver(state => {
374
+ contentpassStates.push(state);
375
+ });
376
+ const error = new Error('Authorize error');
377
+ authorizeSpy.mockRejectedValue(error);
378
+ await expect(async () => {
379
+ await contentpass.authenticate();
380
+ }).rejects.toThrow(error);
381
+ expect(contentpassStates[1]).toEqual({
382
+ state: 'ERROR',
383
+ error
384
+ });
385
+ await contentpass.recoverFromError();
386
+ expect(contentpassStates).toHaveLength(4);
387
+ expect(contentpassStates[2]).toEqual({
388
+ state: 'INITIALISING'
389
+ });
390
+ expect(contentpassStates[3]).toEqual({
391
+ state: 'UNAUTHENTICATED',
392
+ hasValidSubscription: false
393
+ });
394
+ });
395
+ });
396
+ describe('countImpression', () => {
397
+ it('should count paid impression if user has valid subscription and access token', async () => {
398
+ await contentpass.authenticate();
399
+ await contentpass.countImpression();
400
+ expect(sendPageViewEventSpy).toHaveBeenCalledWith(config.apiUrl, {
401
+ propertyId: config.propertyId,
402
+ impressionId: expect.any(String),
403
+ accessToken: EXAMPLE_AUTH_RESULT.accessToken
404
+ });
405
+ expect(sendStatsSpy).toHaveBeenCalled();
406
+ });
407
+ it('should not count paid impression if user is authenticated, but does not have valid subscription', async () => {
408
+ fetchContentpassTokenSpy.mockResolvedValue(CONTENTPASS_TOKEN_WITHOUT_PLANS);
409
+ await contentpass.authenticate();
410
+ await contentpass.countImpression();
411
+ expect(sendPageViewEventSpy).not.toHaveBeenCalled();
412
+ expect(sendStatsSpy).toHaveBeenCalled();
413
+ });
414
+ it('should report error if counting paid impression fails', async () => {
415
+ await contentpass.authenticate();
416
+ const error = new Error('Send page view event error');
417
+ sendPageViewEventSpy.mockRejectedValue(error);
418
+ await contentpass.countImpression();
419
+ expect(reportErrorSpy).toHaveBeenCalledWith(error, {
420
+ msg: 'Failed to count paid impression'
421
+ });
422
+ expect(sendStatsSpy).toHaveBeenCalled();
423
+ });
424
+ it('should count sampled impression even if user does not have valid subscription', async () => {
425
+ await contentpass.countImpression();
426
+ expect(sendPageViewEventSpy).not.toHaveBeenCalled();
427
+ expect(sendStatsSpy).toHaveBeenCalledWith(config.apiUrl, {
428
+ cpabid: expect.any(String),
429
+ cppid: '5803179c',
430
+ cpsr: config.samplingRate,
431
+ ea: 'load',
432
+ ec: 'tcf-sampled'
433
+ });
434
+ });
435
+ it('should report error if counting sampled impression fails', async () => {
436
+ const error = new Error('Send stats error');
437
+ sendStatsSpy.mockRejectedValue(error);
438
+ await contentpass.countImpression();
439
+ expect(reportErrorSpy).toHaveBeenCalledWith(error, {
440
+ msg: 'Failed to send event'
441
+ });
442
+ });
443
+ it('should not send sampled impression when generatedSample is higher than samplingRate', async () => {
444
+ jest.spyOn(Math, 'random').mockReturnValue(0.5);
445
+ contentpass = new _Contentpass.default({
446
+ ...config,
447
+ samplingRate: 0.4
448
+ });
449
+ await contentpass.countImpression();
450
+ expect(sendStatsSpy).not.toHaveBeenCalled();
451
+ expect(sendPageViewEventSpy).not.toHaveBeenCalled();
452
+ });
453
+ });
454
+ });
455
+ //# sourceMappingURL=Contentpass.test.js.map