@contentpass/react-native-contentpass-ui 0.1.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 (71) hide show
  1. package/README.md +28 -0
  2. package/lib/commonjs/components/ContentpassConsentGate.js +149 -0
  3. package/lib/commonjs/components/ContentpassConsentGate.js.map +1 -0
  4. package/lib/commonjs/components/ContentpassLayer.js +176 -0
  5. package/lib/commonjs/components/ContentpassLayer.js.map +1 -0
  6. package/lib/commonjs/components/ContentpassLayerEvents.js +2 -0
  7. package/lib/commonjs/components/ContentpassLayerEvents.js.map +1 -0
  8. package/lib/commonjs/components/buildFirstLayerUrl.js +35 -0
  9. package/lib/commonjs/components/buildFirstLayerUrl.js.map +1 -0
  10. package/lib/commonjs/components/buildFirstLayerUrl.test.js +92 -0
  11. package/lib/commonjs/components/buildFirstLayerUrl.test.js.map +1 -0
  12. package/lib/commonjs/index.js +21 -0
  13. package/lib/commonjs/index.js.map +1 -0
  14. package/lib/commonjs/package.json +1 -0
  15. package/lib/module/components/ContentpassConsentGate.js +142 -0
  16. package/lib/module/components/ContentpassConsentGate.js.map +1 -0
  17. package/lib/module/components/ContentpassLayer.js +171 -0
  18. package/lib/module/components/ContentpassLayer.js.map +1 -0
  19. package/lib/module/components/ContentpassLayerEvents.js +2 -0
  20. package/lib/module/components/ContentpassLayerEvents.js.map +1 -0
  21. package/lib/module/components/buildFirstLayerUrl.js +31 -0
  22. package/lib/module/components/buildFirstLayerUrl.js.map +1 -0
  23. package/lib/module/components/buildFirstLayerUrl.test.js +91 -0
  24. package/lib/module/components/buildFirstLayerUrl.test.js.map +1 -0
  25. package/lib/module/index.js +5 -0
  26. package/lib/module/index.js.map +1 -0
  27. package/lib/typescript/react-native-contentpass/src/Contentpass.d.ts +41 -0
  28. package/lib/typescript/react-native-contentpass/src/Contentpass.d.ts.map +1 -0
  29. package/lib/typescript/react-native-contentpass/src/OidcAuthStateStorage.d.ts +15 -0
  30. package/lib/typescript/react-native-contentpass/src/OidcAuthStateStorage.d.ts.map +1 -0
  31. package/lib/typescript/react-native-contentpass/src/consts/oidcConsts.d.ts +4 -0
  32. package/lib/typescript/react-native-contentpass/src/consts/oidcConsts.d.ts.map +1 -0
  33. package/lib/typescript/react-native-contentpass/src/contentpassTokenUtils/fetchContentpassToken.d.ts +6 -0
  34. package/lib/typescript/react-native-contentpass/src/contentpassTokenUtils/fetchContentpassToken.d.ts.map +1 -0
  35. package/lib/typescript/react-native-contentpass/src/contentpassTokenUtils/parseContentpassToken.d.ts +17 -0
  36. package/lib/typescript/react-native-contentpass/src/contentpassTokenUtils/parseContentpassToken.d.ts.map +1 -0
  37. package/lib/typescript/react-native-contentpass/src/contentpassTokenUtils/validateSubscription.d.ts +2 -0
  38. package/lib/typescript/react-native-contentpass/src/contentpassTokenUtils/validateSubscription.d.ts.map +1 -0
  39. package/lib/typescript/react-native-contentpass/src/countImpressionUtils/sendPageViewEvent.d.ts +8 -0
  40. package/lib/typescript/react-native-contentpass/src/countImpressionUtils/sendPageViewEvent.d.ts.map +1 -0
  41. package/lib/typescript/react-native-contentpass/src/countImpressionUtils/sendStats.d.ts +11 -0
  42. package/lib/typescript/react-native-contentpass/src/countImpressionUtils/sendStats.d.ts.map +1 -0
  43. package/lib/typescript/react-native-contentpass/src/index.d.ts +12 -0
  44. package/lib/typescript/react-native-contentpass/src/index.d.ts.map +1 -0
  45. package/lib/typescript/react-native-contentpass/src/logger.d.ts +8 -0
  46. package/lib/typescript/react-native-contentpass/src/logger.d.ts.map +1 -0
  47. package/lib/typescript/react-native-contentpass/src/sdkContext/ContentpassSdkProvider.d.ts +9 -0
  48. package/lib/typescript/react-native-contentpass/src/sdkContext/ContentpassSdkProvider.d.ts.map +1 -0
  49. package/lib/typescript/react-native-contentpass/src/sdkContext/useContentpassSdk.d.ts +3 -0
  50. package/lib/typescript/react-native-contentpass/src/sdkContext/useContentpassSdk.d.ts.map +1 -0
  51. package/lib/typescript/react-native-contentpass/src/sentryIntegration.d.ts +11 -0
  52. package/lib/typescript/react-native-contentpass/src/sentryIntegration.d.ts.map +1 -0
  53. package/lib/typescript/react-native-contentpass/src/types/CmpAdapter.d.ts +14 -0
  54. package/lib/typescript/react-native-contentpass/src/types/CmpAdapter.d.ts.map +1 -0
  55. package/lib/typescript/react-native-contentpass/src/types/ContentpassConfig.d.ts +11 -0
  56. package/lib/typescript/react-native-contentpass/src/types/ContentpassConfig.d.ts.map +1 -0
  57. package/lib/typescript/react-native-contentpass/src/types/ContentpassState.d.ts +28 -0
  58. package/lib/typescript/react-native-contentpass/src/types/ContentpassState.d.ts.map +1 -0
  59. package/lib/typescript/react-native-contentpass/src/types/RefreshTokenStrategy.d.ts +6 -0
  60. package/lib/typescript/react-native-contentpass/src/types/RefreshTokenStrategy.d.ts.map +1 -0
  61. package/lib/typescript/react-native-contentpass-ui/src/components/ContentpassConsentGate.d.ts +12 -0
  62. package/lib/typescript/react-native-contentpass-ui/src/components/ContentpassConsentGate.d.ts.map +1 -0
  63. package/lib/typescript/react-native-contentpass-ui/src/components/ContentpassLayer.d.ts +10 -0
  64. package/lib/typescript/react-native-contentpass-ui/src/components/ContentpassLayer.d.ts.map +1 -0
  65. package/lib/typescript/react-native-contentpass-ui/src/components/ContentpassLayerEvents.d.ts +7 -0
  66. package/lib/typescript/react-native-contentpass-ui/src/components/ContentpassLayerEvents.d.ts.map +1 -0
  67. package/lib/typescript/react-native-contentpass-ui/src/components/buildFirstLayerUrl.d.ts +8 -0
  68. package/lib/typescript/react-native-contentpass-ui/src/components/buildFirstLayerUrl.d.ts.map +1 -0
  69. package/lib/typescript/react-native-contentpass-ui/src/index.d.ts +3 -0
  70. package/lib/typescript/react-native-contentpass-ui/src/index.d.ts.map +1 -0
  71. package/package.json +90 -0
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ import React, { useEffect, useMemo, useState } from 'react';
4
+ import { StyleSheet, View } from 'react-native';
5
+ import { ContentpassStateType, useContentpassSdk } from '@contentpass/react-native-contentpass';
6
+ import ContentpassLayer from './ContentpassLayer';
7
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ export default function ContentpassConsentGate({
9
+ children,
10
+ cmpAdapter,
11
+ contentpassConfig,
12
+ hideAppWhenVisible = true,
13
+ onVisibilityChange
14
+ }) {
15
+ const sdk = useContentpassSdk();
16
+ const [cmpReady, setCmpReady] = useState(false);
17
+ const [hasFullConsent, setHasFullConsent] = useState(false);
18
+ const [isVisible, setIsVisible] = useState(false);
19
+ const [cpAuthState, setCpAuthState] = useState(null);
20
+ const [isShowingSecondLayer, setIsShowingSecondLayer] = useState(false);
21
+ const [isShowingContentpass, setIsShowingContentpass] = useState(false);
22
+ const [purposesList, setPurposesList] = useState([]);
23
+ const [vendorCount, setVendorCount] = useState(0);
24
+ const layerEvents = useMemo(() => {
25
+ return {
26
+ acceptAll: async () => {
27
+ try {
28
+ await cmpAdapter.acceptAll();
29
+ } catch (error) {
30
+ console.error('Failed to accept all in CMP', error);
31
+ }
32
+ },
33
+ contentpass: async route => {
34
+ try {
35
+ setIsShowingContentpass(true);
36
+ await sdk.authenticate(route);
37
+ } catch (error) {
38
+ console.error('Failed to authenticate Contentpass', error);
39
+ sdk.recoverFromError();
40
+ } finally {
41
+ setIsShowingContentpass(false);
42
+ }
43
+ },
44
+ showSecondLayer: async view => {
45
+ setIsShowingSecondLayer(true);
46
+ try {
47
+ await cmpAdapter.showSecondLayer(view);
48
+ } catch (error) {
49
+ console.error('Failed to show second layer in CMP', error);
50
+ } finally {
51
+ setIsShowingSecondLayer(false);
52
+ }
53
+ },
54
+ sendEvent: (eventCategory, eventAction, eventLabel) => {
55
+ sdk.event(eventCategory, eventAction, eventLabel);
56
+ }
57
+ };
58
+ }, [sdk, cmpAdapter]);
59
+
60
+ // Wait for the CMP to be ready
61
+ useEffect(() => {
62
+ if (cmpReady) {
63
+ return;
64
+ }
65
+ cmpAdapter?.waitForInit?.().then(() => {
66
+ setCmpReady(true);
67
+ });
68
+ }, [cmpReady, cmpAdapter]);
69
+
70
+ // Listen for consent status changes
71
+ useEffect(() => {
72
+ if (!cmpReady) {
73
+ return;
74
+ }
75
+ cmpAdapter?.onConsentStatusChange?.(v => setHasFullConsent(v));
76
+ cmpAdapter.getRequiredPurposes().then(v => setPurposesList(v));
77
+ cmpAdapter.getNumberOfVendors().then(v => setVendorCount(v));
78
+ }, [cmpReady, cmpAdapter, onVisibilityChange, isVisible]);
79
+
80
+ // Monitor the contentpass auth state
81
+ useEffect(() => {
82
+ sdk.registerObserver(state => {
83
+ setCpAuthState(state);
84
+ });
85
+ }, [sdk]);
86
+
87
+ // Policy for setting the visibility of the consent layer
88
+ useEffect(() => {
89
+ const invalidStates = [ContentpassStateType.INITIALISING, ContentpassStateType.ERROR];
90
+ if (!cmpReady || !cpAuthState || invalidStates.includes(cpAuthState.state)) {
91
+ return;
92
+ }
93
+
94
+ // FIXME do neither show app nor show the layer while
95
+ // second layer or contentpass funnel are shown
96
+ if (isShowingSecondLayer || isShowingContentpass) {
97
+ setIsVisible(false);
98
+ return;
99
+ }
100
+ const isFine = cpAuthState.state === ContentpassStateType.AUTHENTICATED || hasFullConsent;
101
+ const visible = !isFine;
102
+ console.log('>>> Changing visibility to', visible, isFine, cpAuthState.state, hasFullConsent);
103
+ if (visible !== isVisible) {
104
+ onVisibilityChange?.(visible);
105
+ }
106
+ setIsVisible(visible);
107
+ }, [cmpReady, cpAuthState, hasFullConsent, isShowingContentpass, isShowingSecondLayer, isVisible, onVisibilityChange]);
108
+ if (!isVisible) {
109
+ return /*#__PURE__*/_jsx(_Fragment, {
110
+ children: children
111
+ });
112
+ }
113
+ function renderContentpassLayer() {
114
+ return /*#__PURE__*/_jsx(ContentpassLayer, {
115
+ eventHandler: layerEvents,
116
+ baseUrl: contentpassConfig.apiUrl,
117
+ planId: contentpassConfig.planId,
118
+ propertyId: contentpassConfig.propertyId,
119
+ purposesList: purposesList,
120
+ vendorCount: vendorCount
121
+ });
122
+ }
123
+ if (hideAppWhenVisible) {
124
+ return renderContentpassLayer();
125
+ }
126
+ return /*#__PURE__*/_jsxs(View, {
127
+ style: styles.overlayContainer,
128
+ children: [children, /*#__PURE__*/_jsx(View, {
129
+ style: styles.overlay,
130
+ children: renderContentpassLayer()
131
+ })]
132
+ });
133
+ }
134
+ const styles = StyleSheet.create({
135
+ overlayContainer: {
136
+ flex: 1
137
+ },
138
+ overlay: {
139
+ ...StyleSheet.absoluteFillObject
140
+ }
141
+ });
142
+ //# sourceMappingURL=ContentpassConsentGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useEffect","useMemo","useState","StyleSheet","View","ContentpassStateType","useContentpassSdk","ContentpassLayer","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","ContentpassConsentGate","children","cmpAdapter","contentpassConfig","hideAppWhenVisible","onVisibilityChange","sdk","cmpReady","setCmpReady","hasFullConsent","setHasFullConsent","isVisible","setIsVisible","cpAuthState","setCpAuthState","isShowingSecondLayer","setIsShowingSecondLayer","isShowingContentpass","setIsShowingContentpass","purposesList","setPurposesList","vendorCount","setVendorCount","layerEvents","acceptAll","error","console","contentpass","route","authenticate","recoverFromError","showSecondLayer","view","sendEvent","eventCategory","eventAction","eventLabel","event","waitForInit","then","onConsentStatusChange","v","getRequiredPurposes","getNumberOfVendors","registerObserver","state","invalidStates","INITIALISING","ERROR","includes","isFine","AUTHENTICATED","visible","log","renderContentpassLayer","eventHandler","baseUrl","apiUrl","planId","propertyId","style","styles","overlayContainer","overlay","create","flex","absoluteFillObject"],"sourceRoot":"../../../src","sources":["components/ContentpassConsentGate.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet, Text, View } from 'react-native';
4
+ import { WebView } from 'react-native-webview';
5
+ import buildFirstLayerUrl from './buildFirstLayerUrl';
6
+ import { useMemo } from 'react';
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ const MESSAGE_PROTOCOL = 'contentpass-first-layer';
9
+ const buildGlueCodeJs = firstLayerUrl => `
10
+ (function () {
11
+ try {
12
+ if (window.location.href === 'about:blank') {
13
+ var encodedUrl = '${encodeURIComponent(firstLayerUrl)}';
14
+ var decodedUrl = decodeURIComponent(encodedUrl);
15
+ window.location.href = decodedUrl;
16
+ }
17
+ } catch (e) {}
18
+
19
+ const originalPostMessage = window.postMessage;
20
+ window.postMessage = function (data) {
21
+ try {
22
+ window.ReactNativeWebView.postMessage(
23
+ typeof data === 'string' ? data : JSON.stringify(data)
24
+ );
25
+ } catch (e) {}
26
+ if (originalPostMessage) {
27
+ originalPostMessage.apply(window, arguments);
28
+ }
29
+ };
30
+
31
+ true;
32
+ })();
33
+ `;
34
+ const styles = StyleSheet.create({
35
+ container: {
36
+ flex: 1,
37
+ backgroundColor: 'white'
38
+ },
39
+ webview: {
40
+ flex: 1,
41
+ backgroundColor: 'red'
42
+ },
43
+ error: {
44
+ flex: 1,
45
+ alignItems: 'center',
46
+ justifyContent: 'center',
47
+ padding: 16
48
+ },
49
+ errorText: {
50
+ fontSize: 14,
51
+ textAlign: 'center'
52
+ }
53
+ });
54
+ export default function ContentpassLayer({
55
+ baseUrl,
56
+ eventHandler,
57
+ planId,
58
+ propertyId,
59
+ purposesList,
60
+ vendorCount
61
+ }) {
62
+ const firstLayerUrl = useMemo(() => {
63
+ return buildFirstLayerUrl({
64
+ baseUrl,
65
+ propertyId,
66
+ planId,
67
+ purposesList,
68
+ vendorCount
69
+ });
70
+ }, [baseUrl, planId, propertyId, purposesList, vendorCount]);
71
+ const glueCodeJs = useMemo(() => {
72
+ return buildGlueCodeJs(firstLayerUrl);
73
+ }, [firstLayerUrl]);
74
+ function handleMessage(event) {
75
+ let msg;
76
+ try {
77
+ msg = JSON.parse(event.nativeEvent.data);
78
+ } catch (error) {
79
+ console.error('Error parsing WebView message', error);
80
+ return;
81
+ }
82
+ if (!msg || msg.protocol !== MESSAGE_PROTOCOL) {
83
+ console.log('WebView message with unknown protocol', msg.protocol, msg);
84
+ return;
85
+ }
86
+ if (msg.type !== 'REQUEST') {
87
+ console.warn('WebView message with unknown type', msg.type, msg);
88
+ return;
89
+ }
90
+ console.debug('WebView message', msg);
91
+ switch (msg.action) {
92
+ case 'ENABLE_SCROLL_ON_PROPERTY':
93
+ // Ignore this message
94
+ break;
95
+ case 'GO_TO':
96
+ switch (msg.payload?.options?.page) {
97
+ case 'login':
98
+ case 'signup':
99
+ eventHandler.contentpass(msg.payload?.options?.page);
100
+ break;
101
+ default:
102
+ console.warn('WebView message with unknown page', msg.payload?.options?.page, msg);
103
+ break;
104
+ }
105
+ break;
106
+ case 'ACCEPT_ALL':
107
+ eventHandler.acceptAll();
108
+ break;
109
+ case 'SHOW_CMP_TOOL':
110
+ eventHandler.showSecondLayer('purpose');
111
+ break;
112
+ case 'SHOW_VENDOR_LIST_TOOL':
113
+ eventHandler.showSecondLayer('vendor');
114
+ break;
115
+ case 'SEND_EVENT':
116
+ if (Array.isArray(msg.payload)) {
117
+ eventHandler.sendEvent(msg.payload[0], msg.payload[1], msg.payload[2]);
118
+ } else {
119
+ console.warn('WebView message with unknown payload', msg.payload);
120
+ }
121
+ break;
122
+ default:
123
+ console.warn('WebView message with unknown action', msg.action, msg);
124
+ break;
125
+ }
126
+ }
127
+ return /*#__PURE__*/_jsx(View, {
128
+ style: styles.container,
129
+ children: /*#__PURE__*/_jsx(WebView, {
130
+ source: {
131
+ uri: 'about:blank'
132
+ },
133
+ style: styles.webview,
134
+ originWhitelist: ['*'],
135
+ startInLoadingState: true,
136
+ javaScriptEnabled: true,
137
+ domStorageEnabled: true,
138
+ injectedJavaScript: glueCodeJs,
139
+ onMessage: event => {
140
+ handleMessage(event);
141
+ },
142
+ onShouldStartLoadWithRequest: request => {
143
+ console.debug('WebView request', request.url);
144
+ return true;
145
+ },
146
+ onLoadStart: () => {
147
+ console.debug('WebView load start');
148
+ },
149
+ onLoadEnd: () => {
150
+ console.debug('WebView load end');
151
+ },
152
+ onLoadProgress: event => {
153
+ console.debug('WebView progress', event.nativeEvent.progress);
154
+ },
155
+ onError: event => {
156
+ console.debug('WebView error', event.nativeEvent);
157
+ },
158
+ onHttpError: event => {
159
+ console.debug('WebView HTTP error', event.nativeEvent);
160
+ },
161
+ renderError: (errorDomain, errorCode, errorDesc) => /*#__PURE__*/_jsx(View, {
162
+ style: styles.error,
163
+ children: /*#__PURE__*/_jsx(Text, {
164
+ style: styles.errorText,
165
+ children: `WebView error (${errorDomain}:${errorCode}) ${errorDesc}`
166
+ })
167
+ })
168
+ })
169
+ });
170
+ }
171
+ //# sourceMappingURL=ContentpassLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","Text","View","WebView","buildFirstLayerUrl","useMemo","jsx","_jsx","MESSAGE_PROTOCOL","buildGlueCodeJs","firstLayerUrl","encodeURIComponent","styles","create","container","flex","backgroundColor","webview","error","alignItems","justifyContent","padding","errorText","fontSize","textAlign","ContentpassLayer","baseUrl","eventHandler","planId","propertyId","purposesList","vendorCount","glueCodeJs","handleMessage","event","msg","JSON","parse","nativeEvent","data","console","protocol","log","type","warn","debug","action","payload","options","page","contentpass","acceptAll","showSecondLayer","Array","isArray","sendEvent","style","children","source","uri","originWhitelist","startInLoadingState","javaScriptEnabled","domStorageEnabled","injectedJavaScript","onMessage","onShouldStartLoadWithRequest","request","url","onLoadStart","onLoadEnd","onLoadProgress","progress","onError","onHttpError","renderError","errorDomain","errorCode","errorDesc"],"sourceRoot":"../../../src","sources":["components/ContentpassLayer.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=ContentpassLayerEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["components/ContentpassLayerEvents.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ // const THEME = 'classic';
4
+ // const THEME = 'classic-app';
5
+ const THEME = 'steps';
6
+
7
+ // FIXME pass something from this SDK?
8
+ const SDK_VERSION = '20260203105802-ef26e7d899';
9
+ export default function buildFirstLayerUrl({
10
+ baseUrl,
11
+ propertyId,
12
+ planId,
13
+ purposesList,
14
+ vendorCount
15
+ }) {
16
+ // FIXME handle trailing slash in baseUrl
17
+ const url = new URL(`${baseUrl}/first-layer/`);
18
+ url.searchParams.set('start', 'true');
19
+ url.searchParams.set('theme', THEME);
20
+ url.searchParams.set('v', SDK_VERSION);
21
+ url.searchParams.set('locale', 'en-US');
22
+ url.searchParams.set('planId', planId);
23
+ url.searchParams.set('propertyId', propertyId);
24
+ url.searchParams.set('purposesList', encodeURIComponent(purposesList.join(',')));
25
+ url.searchParams.set('vendorCount', vendorCount.toString());
26
+ // url.searchParams.set('config', 'undefined');
27
+ // FIXME why is it not able to handle the start=true parameter?
28
+ const firstLayerUrl = url.toString().replace('?start=true', '?start');
29
+ return firstLayerUrl;
30
+ }
31
+ //# sourceMappingURL=buildFirstLayerUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["THEME","SDK_VERSION","buildFirstLayerUrl","baseUrl","propertyId","planId","purposesList","vendorCount","url","URL","searchParams","set","encodeURIComponent","join","toString","firstLayerUrl","replace"],"sourceRoot":"../../../src","sources":["components/buildFirstLayerUrl.ts"],"mappings":";;AAAA;AACA;AACA,MAAMA,KAAK,GAAG,OAAO;;AAErB;AACA,MAAMC,WAAW,GAAG,2BAA2B;AAE/C,eAAe,SAASC,kBAAkBA,CAAC;EACzCC,OAAO;EACPC,UAAU;EACVC,MAAM;EACNC,YAAY;EACZC;AAOF,CAAC,EAAU;EACT;EACA,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAAC,GAAGN,OAAO,eAAe,CAAC;EAC9CK,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;EACrCH,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,OAAO,EAAEX,KAAK,CAAC;EACpCQ,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,GAAG,EAAEV,WAAW,CAAC;EACtCO,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;EACvCH,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,QAAQ,EAAEN,MAAM,CAAC;EACtCG,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,YAAY,EAAEP,UAAU,CAAC;EAC9CI,GAAG,CAACE,YAAY,CAACC,GAAG,CAClB,cAAc,EACdC,kBAAkB,CAACN,YAAY,CAACO,IAAI,CAAC,GAAG,CAAC,CAC3C,CAAC;EACDL,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,aAAa,EAAEJ,WAAW,CAACO,QAAQ,CAAC,CAAC,CAAC;EAC3D;EACA;EACA,MAAMC,aAAa,GAAGP,GAAG,CAACM,QAAQ,CAAC,CAAC,CAACE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC;EAErE,OAAOD,aAAa;AACtB","ignoreList":[]}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ import buildFirstLayerUrl from './buildFirstLayerUrl';
4
+ describe('buildFirstLayerUrl', () => {
5
+ const defaultParams = {
6
+ baseUrl: 'https://example.com',
7
+ propertyId: 'prop-123',
8
+ planId: 'plan-456',
9
+ purposesList: ['analytics', 'marketing'],
10
+ vendorCount: 5
11
+ };
12
+ it('should build a URL with the correct base path', () => {
13
+ const url = buildFirstLayerUrl(defaultParams);
14
+ expect(url).toContain('https://example.com/first-layer/');
15
+ });
16
+ it('should include the start parameter without =true', () => {
17
+ const url = buildFirstLayerUrl(defaultParams);
18
+ expect(url).toContain('?start&');
19
+ expect(url).not.toContain('start=true');
20
+ });
21
+ it('should include the theme parameter', () => {
22
+ const url = buildFirstLayerUrl(defaultParams);
23
+ const parsed = new URL(url);
24
+ expect(parsed.searchParams.get('theme')).toBe('steps');
25
+ });
26
+ it('should include the SDK version parameter', () => {
27
+ const url = buildFirstLayerUrl(defaultParams);
28
+ const parsed = new URL(url);
29
+ expect(parsed.searchParams.get('v')).toBeTruthy();
30
+ });
31
+ it('should set locale to en-US', () => {
32
+ const url = buildFirstLayerUrl(defaultParams);
33
+ const parsed = new URL(url);
34
+ expect(parsed.searchParams.get('locale')).toBe('en-US');
35
+ });
36
+ it('should include the planId parameter', () => {
37
+ const url = buildFirstLayerUrl(defaultParams);
38
+ const parsed = new URL(url);
39
+ expect(parsed.searchParams.get('planId')).toBe('plan-456');
40
+ });
41
+ it('should include the propertyId parameter', () => {
42
+ const url = buildFirstLayerUrl(defaultParams);
43
+ const parsed = new URL(url);
44
+ expect(parsed.searchParams.get('propertyId')).toBe('prop-123');
45
+ });
46
+ it('should include the vendorCount as a string', () => {
47
+ const url = buildFirstLayerUrl(defaultParams);
48
+ const parsed = new URL(url);
49
+ expect(parsed.searchParams.get('vendorCount')).toBe('5');
50
+ });
51
+ it('should encode and join purposesList with commas', () => {
52
+ const url = buildFirstLayerUrl(defaultParams);
53
+ const parsed = new URL(url);
54
+ const purposesList = parsed.searchParams.get('purposesList');
55
+
56
+ // The value is double-encoded: encodeURIComponent is called before set()
57
+ expect(purposesList).toBe(encodeURIComponent('analytics,marketing'));
58
+ });
59
+ it('should handle a single purpose in the list', () => {
60
+ const url = buildFirstLayerUrl({
61
+ ...defaultParams,
62
+ purposesList: ['analytics']
63
+ });
64
+ const parsed = new URL(url);
65
+ expect(parsed.searchParams.get('purposesList')).toBe(encodeURIComponent('analytics'));
66
+ });
67
+ it('should handle an empty purposes list', () => {
68
+ const url = buildFirstLayerUrl({
69
+ ...defaultParams,
70
+ purposesList: []
71
+ });
72
+ const parsed = new URL(url);
73
+ expect(parsed.searchParams.get('purposesList')).toBe(encodeURIComponent(''));
74
+ });
75
+ it('should handle vendorCount of 0', () => {
76
+ const url = buildFirstLayerUrl({
77
+ ...defaultParams,
78
+ vendorCount: 0
79
+ });
80
+ const parsed = new URL(url);
81
+ expect(parsed.searchParams.get('vendorCount')).toBe('0');
82
+ });
83
+ it('should handle a baseUrl with a trailing path', () => {
84
+ const url = buildFirstLayerUrl({
85
+ ...defaultParams,
86
+ baseUrl: 'https://cdn.example.com/consent'
87
+ });
88
+ expect(url).toContain('https://cdn.example.com/consent/first-layer/');
89
+ });
90
+ });
91
+ //# sourceMappingURL=buildFirstLayerUrl.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["buildFirstLayerUrl","describe","defaultParams","baseUrl","propertyId","planId","purposesList","vendorCount","it","url","expect","toContain","not","parsed","URL","searchParams","get","toBe","toBeTruthy","encodeURIComponent"],"sourceRoot":"../../../src","sources":["components/buildFirstLayerUrl.test.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export { default as ContentpassLayer } from './components/ContentpassLayer';
4
+ export { default as ContentpassConsentGate } from './components/ContentpassConsentGate';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["default","ContentpassLayer","ContentpassConsentGate"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,OAAO,IAAIC,gBAAgB,QAAQ,+BAA+B;AAC3E,SAASD,OAAO,IAAIE,sBAAsB,QAAQ,qCAAqC","ignoreList":[]}
@@ -0,0 +1,41 @@
1
+ import { type ContentpassState } from './types/ContentpassState';
2
+ import type { ContentpassConfig } from './types/ContentpassConfig';
3
+ export type ContentpassObserver = (state: ContentpassState) => void;
4
+ interface ContentpassInterface {
5
+ authenticate: (route?: 'login' | 'signup') => Promise<void>;
6
+ countImpression: () => Promise<void>;
7
+ event: (eventCategory: string, eventAction: string, eventLabel?: string, samplingRate?: number) => Promise<void>;
8
+ logout: () => Promise<void>;
9
+ registerObserver: (observer: ContentpassObserver) => void;
10
+ recoverFromError: () => Promise<void>;
11
+ unregisterObserver: (observer: ContentpassObserver) => void;
12
+ }
13
+ export default class Contentpass implements ContentpassInterface {
14
+ private authStateStorage;
15
+ private readonly config;
16
+ private readonly samplingRate;
17
+ private instanceId;
18
+ private contentpassState;
19
+ private contentpassStateObservers;
20
+ private oidcAuthState;
21
+ private refreshTimer;
22
+ constructor(config: ContentpassConfig);
23
+ authenticate: (route?: "login" | "signup") => Promise<void>;
24
+ event: (eventCategory: string, eventAction: string, eventLabel?: string, samplingRate?: number) => Promise<void>;
25
+ registerObserver(observer: ContentpassObserver): void;
26
+ unregisterObserver(observer: ContentpassObserver): void;
27
+ logout: () => Promise<void>;
28
+ recoverFromError: () => Promise<void>;
29
+ countImpression: () => Promise<void>;
30
+ private countPaidImpressionWhenUserHasValidSub;
31
+ private countSampledImpression;
32
+ private initialiseAuthState;
33
+ private onNewAuthState;
34
+ private setupRefreshTimer;
35
+ private refreshToken;
36
+ private onRefreshTokenError;
37
+ private changeContentpassState;
38
+ private hasValidSubscriptionAndAccessToken;
39
+ }
40
+ export {};
41
+ //# sourceMappingURL=Contentpass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Contentpass.d.ts","sourceRoot":"","sources":["../../../../../react-native-contentpass/src/Contentpass.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAUlC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQnE,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE,UAAU,oBAAoB;IAC5B,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,KAAK,EAAE,CACL,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,gBAAgB,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC1D,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,CAAC,OAAO,OAAO,WAAY,YAAW,oBAAoB;IAC9D,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,gBAAgB,CAEtB;IACF,OAAO,CAAC,yBAAyB,CAA6B;IAC9D,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAA+B;gBAEvC,MAAM,EAAE,iBAAiB;IAqB9B,YAAY,GAAU,QAAQ,OAAO,GAAG,QAAQ,KAAG,OAAO,CAAC,IAAI,CAAC,CA6BrE;IAEK,KAAK,GACV,eAAe,MAAM,EACrB,aAAa,MAAM,EACnB,aAAa,MAAM,EACnB,eAAe,MAAM,mBA+BrB;IAEK,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB;IAU9C,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB;IAOhD,MAAM,sBAOX;IAEK,gBAAgB,sBAOrB;IAEK,eAAe,sBAQpB;IAEF,OAAO,CAAC,sCAAsC,CAgB5C;IAEF,OAAO,CAAC,sBAAsB,CAE5B;IAEF,OAAO,CAAC,mBAAmB,CAezB;IAEF,OAAO,CAAC,cAAc,CAkCpB;IAEF,OAAO,CAAC,iBAAiB,CA4BvB;IAEF,OAAO,CAAC,YAAY,CAwBlB;IAEF,OAAO,CAAC,mBAAmB,CAezB;IAEF,OAAO,CAAC,sBAAsB,CAG5B;IAEF,OAAO,CAAC,kCAAkC,CAMxC;CACH"}
@@ -0,0 +1,15 @@
1
+ export type OidcAuthState = {
2
+ accessToken: string;
3
+ accessTokenExpirationDate: string;
4
+ idToken: string;
5
+ refreshToken: string | null;
6
+ tokenType: string;
7
+ };
8
+ export default class OidcAuthStateStorage {
9
+ private readonly key;
10
+ constructor(clientId: string);
11
+ storeOidcAuthState(authState: OidcAuthState): Promise<void>;
12
+ getOidcAuthState(): Promise<OidcAuthState | undefined>;
13
+ clearOidcAuthState(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=OidcAuthStateStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OidcAuthStateStorage.d.ts","sourceRoot":"","sources":["../../../../../react-native-contentpass/src/OidcAuthStateStorage.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB,EAAE,MAAM,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAET,QAAQ,EAAE,MAAM;IAIf,kBAAkB,CAAC,SAAS,EAAE,aAAa;IAI3C,gBAAgB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAMtD,kBAAkB;CAShC"}
@@ -0,0 +1,4 @@
1
+ export declare const SCOPES: string[];
2
+ export declare const TOKEN_ENDPOINT = "/auth/oidc/token";
3
+ export declare const REFRESH_TOKEN_RETRIES = 6;
4
+ //# sourceMappingURL=oidcConsts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidcConsts.d.ts","sourceRoot":"","sources":["../../../../../../react-native-contentpass/src/consts/oidcConsts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,UAA8C,CAAC;AAClE,eAAO,MAAM,cAAc,qBAAqB,CAAC;AACjD,eAAO,MAAM,qBAAqB,IAAI,CAAC"}
@@ -0,0 +1,6 @@
1
+ export default function fetchContentpassToken({ idToken, propertyId, issuer, }: {
2
+ idToken: string;
3
+ propertyId: string;
4
+ issuer: string;
5
+ }): Promise<any>;
6
+ //# sourceMappingURL=fetchContentpassToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchContentpassToken.d.ts","sourceRoot":"","sources":["../../../../../../react-native-contentpass/src/contentpassTokenUtils/fetchContentpassToken.ts"],"names":[],"mappings":"AAEA,wBAA8B,qBAAqB,CAAC,EAClD,OAAO,EACP,UAAU,EACV,MAAM,GACP,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,gBAsBA"}
@@ -0,0 +1,17 @@
1
+ type ParsedToken = {
2
+ body: {
3
+ aud: string;
4
+ auth: boolean;
5
+ exp: number;
6
+ iat: number;
7
+ plans: string[];
8
+ type: string;
9
+ };
10
+ header: {
11
+ alg: string;
12
+ kid: string;
13
+ };
14
+ };
15
+ export default function parseContentpassToken(contentpassToken: string): ParsedToken;
16
+ export {};
17
+ //# sourceMappingURL=parseContentpassToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseContentpassToken.d.ts","sourceRoot":"","sources":["../../../../../../react-native-contentpass/src/contentpassTokenUtils/parseContentpassToken.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAC3C,gBAAgB,EAAE,MAAM,GACvB,WAAW,CAab"}
@@ -0,0 +1,2 @@
1
+ export default function validateSubscription(contentpassToken: string): boolean;
2
+ //# sourceMappingURL=validateSubscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateSubscription.d.ts","sourceRoot":"","sources":["../../../../../../react-native-contentpass/src/contentpassTokenUtils/validateSubscription.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,WAQpE"}
@@ -0,0 +1,8 @@
1
+ type HitEndpointArgs = {
2
+ propertyId: string;
3
+ impressionId: string;
4
+ accessToken: string;
5
+ };
6
+ export default function sendPageViewEvent(apiUrl: string, payload: HitEndpointArgs): Promise<Response>;
7
+ export {};
8
+ //# sourceMappingURL=sendPageViewEvent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendPageViewEvent.d.ts","sourceRoot":"","sources":["../../../../../../react-native-contentpass/src/countImpressionUtils/sendPageViewEvent.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAA8B,iBAAiB,CAC7C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,qBAkBzB"}
@@ -0,0 +1,11 @@
1
+ type StatsPayload = {
2
+ ea: string;
3
+ ec: string;
4
+ el?: string;
5
+ cpabid: string;
6
+ cppid: string;
7
+ cpsr: number;
8
+ };
9
+ export default function sendStats(apiUrl: string, payload: StatsPayload): Promise<Response>;
10
+ export {};
11
+ //# sourceMappingURL=sendStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendStats.d.ts","sourceRoot":"","sources":["../../../../../../react-native-contentpass/src/countImpressionUtils/sendStats.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAA8B,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,qBAc5E"}