@contentpass/react-native-contentpass 0.3.18 → 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.
- package/docs/CONTRIBUTING.md +7 -7
- package/lib/commonjs/Contentpass.js +38 -25
- package/lib/commonjs/Contentpass.js.map +1 -1
- package/lib/commonjs/Contentpass.test.js +455 -0
- package/lib/commonjs/Contentpass.test.js.map +1 -0
- package/lib/commonjs/OidcAuthStateStorage.test.js +59 -0
- package/lib/commonjs/OidcAuthStateStorage.test.js.map +1 -0
- package/lib/commonjs/contentpassTokenUtils/fetchContentpassToken.test.js +45 -0
- package/lib/commonjs/contentpassTokenUtils/fetchContentpassToken.test.js.map +1 -0
- package/lib/commonjs/contentpassTokenUtils/parseContentpassToken.test.js +31 -0
- package/lib/commonjs/contentpassTokenUtils/parseContentpassToken.test.js.map +1 -0
- package/lib/commonjs/contentpassTokenUtils/validateSubscription.test.js +73 -0
- package/lib/commonjs/contentpassTokenUtils/validateSubscription.test.js.map +1 -0
- package/lib/commonjs/countImpressionUtils/sendPageViewEvent.test.js +35 -0
- package/lib/commonjs/countImpressionUtils/sendPageViewEvent.test.js.map +1 -0
- package/lib/commonjs/countImpressionUtils/sendStats.js +1 -1
- package/lib/commonjs/countImpressionUtils/sendStats.js.map +1 -1
- package/lib/commonjs/countImpressionUtils/sendStats.test.js +39 -0
- package/lib/commonjs/countImpressionUtils/sendStats.test.js.map +1 -0
- package/lib/commonjs/index.js +2 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/logger.test.js +42 -0
- package/lib/commonjs/logger.test.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/sdkContext/ContentpassSdkProvder.test.js +33 -0
- package/lib/commonjs/sdkContext/ContentpassSdkProvder.test.js.map +1 -0
- package/lib/commonjs/sdkContext/useContentpassSdk.test.js +37 -0
- package/lib/commonjs/sdkContext/useContentpassSdk.test.js.map +1 -0
- package/lib/commonjs/sdkContext/useContentpassState.js +26 -0
- package/lib/commonjs/sdkContext/useContentpassState.js.map +1 -0
- package/lib/commonjs/sentryIntegration.test.js +131 -0
- package/lib/commonjs/sentryIntegration.test.js.map +1 -0
- package/lib/commonjs/types/CmpAdapter.js +2 -0
- package/lib/commonjs/types/CmpAdapter.js.map +1 -0
- package/lib/module/Contentpass.js +38 -25
- package/lib/module/Contentpass.js.map +1 -1
- package/lib/module/Contentpass.test.js +448 -0
- package/lib/module/Contentpass.test.js.map +1 -0
- package/lib/module/OidcAuthStateStorage.test.js +56 -0
- package/lib/module/OidcAuthStateStorage.test.js.map +1 -0
- package/lib/module/contentpassTokenUtils/fetchContentpassToken.test.js +44 -0
- package/lib/module/contentpassTokenUtils/fetchContentpassToken.test.js.map +1 -0
- package/lib/module/contentpassTokenUtils/parseContentpassToken.test.js +30 -0
- package/lib/module/contentpassTokenUtils/parseContentpassToken.test.js.map +1 -0
- package/lib/module/contentpassTokenUtils/validateSubscription.test.js +70 -0
- package/lib/module/contentpassTokenUtils/validateSubscription.test.js.map +1 -0
- package/lib/module/countImpressionUtils/sendPageViewEvent.test.js +34 -0
- package/lib/module/countImpressionUtils/sendPageViewEvent.test.js.map +1 -0
- package/lib/module/countImpressionUtils/sendStats.js +1 -1
- package/lib/module/countImpressionUtils/sendStats.js.map +1 -1
- package/lib/module/countImpressionUtils/sendStats.test.js +38 -0
- package/lib/module/countImpressionUtils/sendStats.test.js.map +1 -0
- package/lib/module/index.js +6 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/logger.test.js +40 -0
- package/lib/module/logger.test.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/sdkContext/ContentpassSdkProvder.test.js +32 -0
- package/lib/module/sdkContext/ContentpassSdkProvder.test.js.map +1 -0
- package/lib/module/sdkContext/useContentpassSdk.test.js +36 -0
- package/lib/module/sdkContext/useContentpassSdk.test.js.map +1 -0
- package/lib/module/sdkContext/useContentpassState.js +21 -0
- package/lib/module/sdkContext/useContentpassState.js.map +1 -0
- package/lib/module/sentryIntegration.test.js +128 -0
- package/lib/module/sentryIntegration.test.js.map +1 -0
- package/lib/module/types/CmpAdapter.js +2 -0
- package/lib/module/types/CmpAdapter.js.map +1 -0
- package/lib/typescript/commonjs/src/Contentpass.d.ts +8 -5
- package/lib/typescript/commonjs/src/Contentpass.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/countImpressionUtils/sendStats.d.ts +1 -0
- package/lib/typescript/commonjs/src/countImpressionUtils/sendStats.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +11 -6
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/logger.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/sdkContext/ContentpassSdkProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/sdkContext/useContentpassState.d.ts +4 -0
- package/lib/typescript/commonjs/src/sdkContext/useContentpassState.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/sentryIntegration.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/CmpAdapter.d.ts +14 -0
- package/lib/typescript/commonjs/src/types/CmpAdapter.d.ts.map +1 -0
- package/lib/typescript/module/src/Contentpass.d.ts +8 -5
- package/lib/typescript/module/src/Contentpass.d.ts.map +1 -1
- package/lib/typescript/module/src/countImpressionUtils/sendStats.d.ts +1 -0
- package/lib/typescript/module/src/countImpressionUtils/sendStats.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +11 -6
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/logger.d.ts.map +1 -1
- package/lib/typescript/module/src/sdkContext/ContentpassSdkProvider.d.ts.map +1 -1
- package/lib/typescript/module/src/sdkContext/useContentpassState.d.ts +4 -0
- package/lib/typescript/module/src/sdkContext/useContentpassState.d.ts.map +1 -0
- package/lib/typescript/module/src/sentryIntegration.d.ts.map +1 -1
- package/lib/typescript/module/src/types/CmpAdapter.d.ts +14 -0
- package/lib/typescript/module/src/types/CmpAdapter.d.ts.map +1 -0
- package/package.json +24 -59
- package/LICENSE +0 -20
- package/README.md +0 -150
package/docs/CONTRIBUTING.md
CHANGED
|
@@ -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](
|
|
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
|
-
|
|
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":"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","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
|