@contentpass/react-native-contentpass 0.2.5

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 (110) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +134 -0
  3. package/contentpass-react-native-contentpass.podspec +41 -0
  4. package/lib/commonjs/Contentpass.js +173 -0
  5. package/lib/commonjs/Contentpass.js.map +1 -0
  6. package/lib/commonjs/OidcAuthStateStorage.js +26 -0
  7. package/lib/commonjs/OidcAuthStateStorage.js.map +1 -0
  8. package/lib/commonjs/consts/oidcConsts.js +10 -0
  9. package/lib/commonjs/consts/oidcConsts.js.map +1 -0
  10. package/lib/commonjs/index.js +28 -0
  11. package/lib/commonjs/index.js.map +1 -0
  12. package/lib/commonjs/sdkContext/ContentpassSdkProvider.js +32 -0
  13. package/lib/commonjs/sdkContext/ContentpassSdkProvider.js.map +1 -0
  14. package/lib/commonjs/sdkContext/useContentpassSdk.js +17 -0
  15. package/lib/commonjs/sdkContext/useContentpassSdk.js.map +1 -0
  16. package/lib/commonjs/sentryIntegration.js +61 -0
  17. package/lib/commonjs/sentryIntegration.js.map +1 -0
  18. package/lib/commonjs/types/ContentpassConfig.js +2 -0
  19. package/lib/commonjs/types/ContentpassConfig.js.map +1 -0
  20. package/lib/commonjs/types/ContentpassState.js +15 -0
  21. package/lib/commonjs/types/ContentpassState.js.map +1 -0
  22. package/lib/commonjs/types/RefreshTokenStrategy.js +14 -0
  23. package/lib/commonjs/types/RefreshTokenStrategy.js.map +1 -0
  24. package/lib/commonjs/utils/fetchContentpassToken.js +29 -0
  25. package/lib/commonjs/utils/fetchContentpassToken.js.map +1 -0
  26. package/lib/commonjs/utils/parseContentpassToken.js +19 -0
  27. package/lib/commonjs/utils/parseContentpassToken.js.map +1 -0
  28. package/lib/commonjs/utils/validateSubscription.js +23 -0
  29. package/lib/commonjs/utils/validateSubscription.js.map +1 -0
  30. package/lib/module/Contentpass.js +167 -0
  31. package/lib/module/Contentpass.js.map +1 -0
  32. package/lib/module/OidcAuthStateStorage.js +20 -0
  33. package/lib/module/OidcAuthStateStorage.js.map +1 -0
  34. package/lib/module/consts/oidcConsts.js +6 -0
  35. package/lib/module/consts/oidcConsts.js.map +1 -0
  36. package/lib/module/index.js +6 -0
  37. package/lib/module/index.js.map +1 -0
  38. package/lib/module/sdkContext/ContentpassSdkProvider.js +24 -0
  39. package/lib/module/sdkContext/ContentpassSdkProvider.js.map +1 -0
  40. package/lib/module/sdkContext/useContentpassSdk.js +13 -0
  41. package/lib/module/sdkContext/useContentpassSdk.js.map +1 -0
  42. package/lib/module/sentryIntegration.js +54 -0
  43. package/lib/module/sentryIntegration.js.map +1 -0
  44. package/lib/module/types/ContentpassConfig.js +2 -0
  45. package/lib/module/types/ContentpassConfig.js.map +1 -0
  46. package/lib/module/types/ContentpassState.js +12 -0
  47. package/lib/module/types/ContentpassState.js.map +1 -0
  48. package/lib/module/types/RefreshTokenStrategy.js +11 -0
  49. package/lib/module/types/RefreshTokenStrategy.js.map +1 -0
  50. package/lib/module/utils/fetchContentpassToken.js +25 -0
  51. package/lib/module/utils/fetchContentpassToken.js.map +1 -0
  52. package/lib/module/utils/parseContentpassToken.js +15 -0
  53. package/lib/module/utils/parseContentpassToken.js.map +1 -0
  54. package/lib/module/utils/validateSubscription.js +18 -0
  55. package/lib/module/utils/validateSubscription.js.map +1 -0
  56. package/lib/typescript/commonjs/package.json +1 -0
  57. package/lib/typescript/commonjs/src/Contentpass.d.ts +24 -0
  58. package/lib/typescript/commonjs/src/Contentpass.d.ts.map +1 -0
  59. package/lib/typescript/commonjs/src/OidcAuthStateStorage.d.ts +15 -0
  60. package/lib/typescript/commonjs/src/OidcAuthStateStorage.d.ts.map +1 -0
  61. package/lib/typescript/commonjs/src/consts/oidcConsts.d.ts +4 -0
  62. package/lib/typescript/commonjs/src/consts/oidcConsts.d.ts.map +1 -0
  63. package/lib/typescript/commonjs/src/index.d.ts +7 -0
  64. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  65. package/lib/typescript/commonjs/src/sdkContext/ContentpassSdkProvider.d.ts +9 -0
  66. package/lib/typescript/commonjs/src/sdkContext/ContentpassSdkProvider.d.ts.map +1 -0
  67. package/lib/typescript/commonjs/src/sdkContext/useContentpassSdk.d.ts +3 -0
  68. package/lib/typescript/commonjs/src/sdkContext/useContentpassSdk.d.ts.map +1 -0
  69. package/lib/typescript/commonjs/src/sentryIntegration.d.ts +7 -0
  70. package/lib/typescript/commonjs/src/sentryIntegration.d.ts.map +1 -0
  71. package/lib/typescript/commonjs/src/types/ContentpassConfig.d.ts +6 -0
  72. package/lib/typescript/commonjs/src/types/ContentpassConfig.d.ts.map +1 -0
  73. package/lib/typescript/commonjs/src/types/ContentpassState.d.ts +28 -0
  74. package/lib/typescript/commonjs/src/types/ContentpassState.d.ts.map +1 -0
  75. package/lib/typescript/commonjs/src/types/RefreshTokenStrategy.d.ts +6 -0
  76. package/lib/typescript/commonjs/src/types/RefreshTokenStrategy.d.ts.map +1 -0
  77. package/lib/typescript/commonjs/src/utils/fetchContentpassToken.d.ts +6 -0
  78. package/lib/typescript/commonjs/src/utils/fetchContentpassToken.d.ts.map +1 -0
  79. package/lib/typescript/commonjs/src/utils/parseContentpassToken.d.ts +17 -0
  80. package/lib/typescript/commonjs/src/utils/parseContentpassToken.d.ts.map +1 -0
  81. package/lib/typescript/commonjs/src/utils/validateSubscription.d.ts +2 -0
  82. package/lib/typescript/commonjs/src/utils/validateSubscription.d.ts.map +1 -0
  83. package/lib/typescript/module/package.json +1 -0
  84. package/lib/typescript/module/src/Contentpass.d.ts +24 -0
  85. package/lib/typescript/module/src/Contentpass.d.ts.map +1 -0
  86. package/lib/typescript/module/src/OidcAuthStateStorage.d.ts +15 -0
  87. package/lib/typescript/module/src/OidcAuthStateStorage.d.ts.map +1 -0
  88. package/lib/typescript/module/src/consts/oidcConsts.d.ts +4 -0
  89. package/lib/typescript/module/src/consts/oidcConsts.d.ts.map +1 -0
  90. package/lib/typescript/module/src/index.d.ts +7 -0
  91. package/lib/typescript/module/src/index.d.ts.map +1 -0
  92. package/lib/typescript/module/src/sdkContext/ContentpassSdkProvider.d.ts +9 -0
  93. package/lib/typescript/module/src/sdkContext/ContentpassSdkProvider.d.ts.map +1 -0
  94. package/lib/typescript/module/src/sdkContext/useContentpassSdk.d.ts +3 -0
  95. package/lib/typescript/module/src/sdkContext/useContentpassSdk.d.ts.map +1 -0
  96. package/lib/typescript/module/src/sentryIntegration.d.ts +7 -0
  97. package/lib/typescript/module/src/sentryIntegration.d.ts.map +1 -0
  98. package/lib/typescript/module/src/types/ContentpassConfig.d.ts +6 -0
  99. package/lib/typescript/module/src/types/ContentpassConfig.d.ts.map +1 -0
  100. package/lib/typescript/module/src/types/ContentpassState.d.ts +28 -0
  101. package/lib/typescript/module/src/types/ContentpassState.d.ts.map +1 -0
  102. package/lib/typescript/module/src/types/RefreshTokenStrategy.d.ts +6 -0
  103. package/lib/typescript/module/src/types/RefreshTokenStrategy.d.ts.map +1 -0
  104. package/lib/typescript/module/src/utils/fetchContentpassToken.d.ts +6 -0
  105. package/lib/typescript/module/src/utils/fetchContentpassToken.d.ts.map +1 -0
  106. package/lib/typescript/module/src/utils/parseContentpassToken.d.ts +17 -0
  107. package/lib/typescript/module/src/utils/parseContentpassToken.d.ts.map +1 -0
  108. package/lib/typescript/module/src/utils/validateSubscription.d.ts +2 -0
  109. package/lib/typescript/module/src/utils/validateSubscription.d.ts.map +1 -0
  110. package/package.json +154 -0
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = fetchContentpassToken;
7
+ var _oidcConsts = require("../consts/oidcConsts.js");
8
+ async function fetchContentpassToken({
9
+ idToken,
10
+ propertyId,
11
+ issuer
12
+ }) {
13
+ const tokenEndpointResponse = await fetch(`${issuer}${_oidcConsts.TOKEN_ENDPOINT}`, {
14
+ method: 'POST',
15
+ headers: {
16
+ 'Content-Type': 'application/x-www-form-urlencoded'
17
+ },
18
+ body: new URLSearchParams({
19
+ grant_type: 'contentpass_token',
20
+ subject_token: idToken,
21
+ client_id: propertyId
22
+ }).toString()
23
+ });
24
+ const {
25
+ contentpass_token
26
+ } = await tokenEndpointResponse.json();
27
+ return contentpass_token;
28
+ }
29
+ //# sourceMappingURL=fetchContentpassToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_oidcConsts","require","fetchContentpassToken","idToken","propertyId","issuer","tokenEndpointResponse","fetch","TOKEN_ENDPOINT","method","headers","body","URLSearchParams","grant_type","subject_token","client_id","toString","contentpass_token","json"],"sourceRoot":"../../../src","sources":["utils/fetchContentpassToken.ts"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEe,eAAeC,qBAAqBA,CAAC;EAClDC,OAAO;EACPC,UAAU;EACVC;AAKF,CAAC,EAAE;EACD,MAAMC,qBAAqB,GAAG,MAAMC,KAAK,CAAC,GAAGF,MAAM,GAAGG,0BAAc,EAAE,EAAE;IACtEC,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE;MACP,cAAc,EAAE;IAClB,CAAC;IACDC,IAAI,EAAE,IAAIC,eAAe,CAAC;MACxBC,UAAU,EAAE,mBAAmB;MAC/BC,aAAa,EAAEX,OAAO;MACtBY,SAAS,EAAEX;IACb,CAAC,CAAC,CAACY,QAAQ,CAAC;EACd,CAAC,CAAC;EAEF,MAAM;IAAEC;EAAkB,CAAC,GAAG,MAAMX,qBAAqB,CAACY,IAAI,CAAC,CAAC;EAEhE,OAAOD,iBAAiB;AAC1B","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = parseContentpassToken;
7
+ function parseContentpassToken(contentpassToken) {
8
+ const tokenParts = contentpassToken.split('.');
9
+ if (tokenParts.length < 3) {
10
+ throw new Error('Invalid token, token should have at least 3 parts');
11
+ }
12
+ const header = JSON.parse(atob(tokenParts[0]));
13
+ const body = JSON.parse(atob(tokenParts[1]));
14
+ return {
15
+ header,
16
+ body
17
+ };
18
+ }
19
+ //# sourceMappingURL=parseContentpassToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseContentpassToken","contentpassToken","tokenParts","split","length","Error","header","JSON","parse","atob","body"],"sourceRoot":"../../../src","sources":["utils/parseContentpassToken.ts"],"mappings":";;;;;;AAee,SAASA,qBAAqBA,CAC3CC,gBAAwB,EACX;EACb,MAAMC,UAAU,GAAGD,gBAAgB,CAACE,KAAK,CAAC,GAAG,CAAC;EAC9C,IAAID,UAAU,CAACE,MAAM,GAAG,CAAC,EAAE;IACzB,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;EACtE;EAEA,MAAMC,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACC,IAAI,CAACP,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC;EAC/C,MAAMQ,IAAI,GAAGH,IAAI,CAACC,KAAK,CAACC,IAAI,CAACP,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC;EAE7C,OAAO;IACLI,MAAM;IACNI;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = validateSubscription;
7
+ var _parseContentpassToken = _interopRequireDefault(require("./parseContentpassToken.js"));
8
+ var _sentryIntegration = require("../sentryIntegration.js");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ function validateSubscription(contentpassToken) {
11
+ try {
12
+ const {
13
+ body
14
+ } = (0, _parseContentpassToken.default)(contentpassToken);
15
+ return !!body.auth && !!body.plans.length;
16
+ } catch (err) {
17
+ (0, _sentryIntegration.reportError)(err, {
18
+ msg: 'Failed to validate subscription'
19
+ });
20
+ return false;
21
+ }
22
+ }
23
+ //# sourceMappingURL=validateSubscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_parseContentpassToken","_interopRequireDefault","require","_sentryIntegration","e","__esModule","default","validateSubscription","contentpassToken","body","parseContentpassToken","auth","plans","length","err","reportError","msg"],"sourceRoot":"../../../src","sources":["utils/validateSubscription.ts"],"mappings":";;;;;;AAAA,IAAAA,sBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AAAmD,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEpC,SAASG,oBAAoBA,CAACC,gBAAwB,EAAE;EACrE,IAAI;IACF,MAAM;MAAEC;IAAK,CAAC,GAAG,IAAAC,8BAAqB,EAACF,gBAAgB,CAAC;IACxD,OAAO,CAAC,CAACC,IAAI,CAACE,IAAI,IAAI,CAAC,CAACF,IAAI,CAACG,KAAK,CAACC,MAAM;EAC3C,CAAC,CAAC,OAAOC,GAAQ,EAAE;IACjB,IAAAC,8BAAW,EAACD,GAAG,EAAE;MAAEE,GAAG,EAAE;IAAkC,CAAC,CAAC;IAC5D,OAAO,KAAK;EACd;AACF","ignoreList":[]}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+
3
+ import OidcAuthStateStorage from "./OidcAuthStateStorage.js";
4
+ import { ContentpassStateType } from "./types/ContentpassState.js";
5
+ import { authorize, refresh } from 'react-native-app-auth';
6
+ import { REFRESH_TOKEN_RETRIES, SCOPES } from "./consts/oidcConsts.js";
7
+ import { RefreshTokenStrategy } from "./types/RefreshTokenStrategy.js";
8
+ import fetchContentpassToken from "./utils/fetchContentpassToken.js";
9
+ import validateSubscription from "./utils/validateSubscription.js";
10
+ import { reportError, setSentryExtraAttribute } from "./sentryIntegration.js";
11
+ export default class Contentpass {
12
+ contentpassState = {
13
+ state: ContentpassStateType.INITIALISING
14
+ };
15
+ contentpassStateObservers = [];
16
+ oidcAuthState = null;
17
+ refreshTimer = null;
18
+ constructor(config) {
19
+ this.authStateStorage = new OidcAuthStateStorage(config.propertyId);
20
+ this.config = config;
21
+ setSentryExtraAttribute('propertyId', config.propertyId);
22
+ this.initialiseAuthState();
23
+ }
24
+ authenticate = async () => {
25
+ let result;
26
+ try {
27
+ result = await authorize({
28
+ clientId: this.config.propertyId,
29
+ redirectUrl: this.config.redirectUrl,
30
+ issuer: this.config.issuer,
31
+ scopes: SCOPES,
32
+ additionalParameters: {
33
+ cp_route: 'login',
34
+ prompt: 'consent',
35
+ cp_property: this.config.propertyId
36
+ }
37
+ });
38
+ } catch (err) {
39
+ reportError(err, {
40
+ msg: 'Failed to authorize'
41
+ });
42
+ this.changeContentpassState({
43
+ state: ContentpassStateType.ERROR,
44
+ error: err
45
+ });
46
+ throw err;
47
+ }
48
+ await this.onNewAuthState(result);
49
+ };
50
+ registerObserver(observer) {
51
+ if (this.contentpassStateObservers.includes(observer)) {
52
+ return;
53
+ }
54
+ observer(this.contentpassState);
55
+ this.contentpassStateObservers.push(observer);
56
+ }
57
+ unregisterObserver(observer) {
58
+ this.contentpassStateObservers = this.contentpassStateObservers.filter(o => o !== observer);
59
+ }
60
+ logout = async () => {
61
+ await this.authStateStorage.clearOidcAuthState();
62
+ this.changeContentpassState({
63
+ state: ContentpassStateType.UNAUTHENTICATED,
64
+ hasValidSubscription: false
65
+ });
66
+ };
67
+ recoverFromError = async () => {
68
+ this.changeContentpassState({
69
+ state: ContentpassStateType.INITIALISING
70
+ });
71
+ await this.initialiseAuthState();
72
+ };
73
+ initialiseAuthState = async () => {
74
+ const authState = await this.authStateStorage.getOidcAuthState();
75
+ if (authState) {
76
+ await this.onNewAuthState(authState);
77
+ return;
78
+ }
79
+ this.changeContentpassState({
80
+ state: ContentpassStateType.UNAUTHENTICATED,
81
+ hasValidSubscription: false
82
+ });
83
+ };
84
+ onNewAuthState = async authState => {
85
+ this.oidcAuthState = authState;
86
+ await this.authStateStorage.storeOidcAuthState(authState);
87
+ const strategy = this.setupRefreshTimer();
88
+ // if instant refresh, no need to check subscription as it will happen in the refresh
89
+ if (strategy === RefreshTokenStrategy.INSTANTLY) {
90
+ return;
91
+ }
92
+ try {
93
+ const contentpassToken = await fetchContentpassToken({
94
+ issuer: this.config.issuer,
95
+ propertyId: this.config.propertyId,
96
+ idToken: this.oidcAuthState.idToken
97
+ });
98
+ const hasValidSubscription = validateSubscription(contentpassToken);
99
+ this.changeContentpassState({
100
+ state: ContentpassStateType.AUTHENTICATED,
101
+ hasValidSubscription
102
+ });
103
+ } catch (err) {
104
+ this.changeContentpassState({
105
+ state: ContentpassStateType.ERROR,
106
+ error: err
107
+ });
108
+ }
109
+ };
110
+ setupRefreshTimer = () => {
111
+ const accessTokenExpirationDate = this.oidcAuthState?.accessTokenExpirationDate;
112
+ if (!accessTokenExpirationDate) {
113
+ return RefreshTokenStrategy.NO_REFRESH;
114
+ }
115
+ const now = new Date();
116
+ const expirationDate = new Date(accessTokenExpirationDate);
117
+ const timeDiff = expirationDate.getTime() - now.getTime();
118
+ if (timeDiff <= 0) {
119
+ this.refreshToken(0);
120
+ return RefreshTokenStrategy.INSTANTLY;
121
+ }
122
+ if (this.refreshTimer) {
123
+ clearTimeout(this.refreshTimer);
124
+ }
125
+ this.refreshTimer = setTimeout(async () => {
126
+ await this.refreshToken(0);
127
+ }, timeDiff);
128
+ return RefreshTokenStrategy.TIMER_SET;
129
+ };
130
+ refreshToken = async counter => {
131
+ if (!this.oidcAuthState?.refreshToken) {
132
+ reportError(new Error('No Refresh Token in oidcAuthState provided'));
133
+ return;
134
+ }
135
+ try {
136
+ const refreshResult = await refresh({
137
+ clientId: this.config.propertyId,
138
+ redirectUrl: this.config.redirectUrl,
139
+ issuer: this.config.issuer,
140
+ scopes: SCOPES
141
+ }, {
142
+ refreshToken: this.oidcAuthState.refreshToken
143
+ });
144
+ await this.onNewAuthState(refreshResult);
145
+ } catch (err) {
146
+ await this.onRefreshTokenError(counter, err);
147
+ }
148
+ };
149
+ onRefreshTokenError = async (counter, err) => {
150
+ reportError(err, {
151
+ msg: `Failed to refresh token after ${counter} retries`
152
+ });
153
+ // FIXME: add handling for specific error to not retry in every case
154
+ if (counter < REFRESH_TOKEN_RETRIES) {
155
+ const delay = counter * 1000 * 10;
156
+ await new Promise(resolve => setTimeout(resolve, delay));
157
+ await this.refreshToken(counter + 1);
158
+ return;
159
+ }
160
+ await this.logout();
161
+ };
162
+ changeContentpassState = state => {
163
+ this.contentpassState = state;
164
+ this.contentpassStateObservers.forEach(observer => observer(state));
165
+ };
166
+ }
167
+ //# sourceMappingURL=Contentpass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OidcAuthStateStorage","ContentpassStateType","authorize","refresh","REFRESH_TOKEN_RETRIES","SCOPES","RefreshTokenStrategy","fetchContentpassToken","validateSubscription","reportError","setSentryExtraAttribute","Contentpass","contentpassState","state","INITIALISING","contentpassStateObservers","oidcAuthState","refreshTimer","constructor","config","authStateStorage","propertyId","initialiseAuthState","authenticate","result","clientId","redirectUrl","issuer","scopes","additionalParameters","cp_route","prompt","cp_property","err","msg","changeContentpassState","ERROR","error","onNewAuthState","registerObserver","observer","includes","push","unregisterObserver","filter","o","logout","clearOidcAuthState","UNAUTHENTICATED","hasValidSubscription","recoverFromError","authState","getOidcAuthState","storeOidcAuthState","strategy","setupRefreshTimer","INSTANTLY","contentpassToken","idToken","AUTHENTICATED","accessTokenExpirationDate","NO_REFRESH","now","Date","expirationDate","timeDiff","getTime","refreshToken","clearTimeout","setTimeout","TIMER_SET","counter","Error","refreshResult","onRefreshTokenError","delay","Promise","resolve","forEach"],"sourceRoot":"../../src","sources":["Contentpass.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ import EncryptedStorage from 'react-native-encrypted-storage';
4
+ const AUTH_STATE_KEY = 'OIDCAuthState';
5
+ export default class OidcAuthStateStorage {
6
+ constructor(clientId) {
7
+ this.key = `de.contentpass.${clientId}-${AUTH_STATE_KEY}`;
8
+ }
9
+ async storeOidcAuthState(authState) {
10
+ await EncryptedStorage.setItem(this.key, JSON.stringify(authState));
11
+ }
12
+ async getOidcAuthState() {
13
+ const oidcAuthStateString = await EncryptedStorage.getItem(this.key);
14
+ return oidcAuthStateString ? JSON.parse(oidcAuthStateString) : undefined;
15
+ }
16
+ async clearOidcAuthState() {
17
+ await EncryptedStorage.removeItem(this.key);
18
+ }
19
+ }
20
+ //# sourceMappingURL=OidcAuthStateStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EncryptedStorage","AUTH_STATE_KEY","OidcAuthStateStorage","constructor","clientId","key","storeOidcAuthState","authState","setItem","JSON","stringify","getOidcAuthState","oidcAuthStateString","getItem","parse","undefined","clearOidcAuthState","removeItem"],"sourceRoot":"../../src","sources":["OidcAuthStateStorage.ts"],"mappings":";;AAAA,OAAOA,gBAAgB,MAAM,gCAAgC;AAE7D,MAAMC,cAAc,GAAG,eAAe;AAUtC,eAAe,MAAMC,oBAAoB,CAAC;EAGxCC,WAAWA,CAACC,QAAgB,EAAE;IAC5B,IAAI,CAACC,GAAG,GAAG,kBAAkBD,QAAQ,IAAIH,cAAc,EAAE;EAC3D;EAEA,MAAaK,kBAAkBA,CAACC,SAAwB,EAAE;IACxD,MAAMP,gBAAgB,CAACQ,OAAO,CAAC,IAAI,CAACH,GAAG,EAAEI,IAAI,CAACC,SAAS,CAACH,SAAS,CAAC,CAAC;EACrE;EAEA,MAAaI,gBAAgBA,CAAA,EAAuC;IAClE,MAAMC,mBAAmB,GAAG,MAAMZ,gBAAgB,CAACa,OAAO,CAAC,IAAI,CAACR,GAAG,CAAC;IAEpE,OAAOO,mBAAmB,GAAGH,IAAI,CAACK,KAAK,CAACF,mBAAmB,CAAC,GAAGG,SAAS;EAC1E;EAEA,MAAaC,kBAAkBA,CAAA,EAAG;IAChC,MAAMhB,gBAAgB,CAACiB,UAAU,CAAC,IAAI,CAACZ,GAAG,CAAC;EAC7C;AACF","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ export const SCOPES = ['openid', 'offline_access', 'contentpass'];
4
+ export const TOKEN_ENDPOINT = `/auth/oidc/token`;
5
+ export const REFRESH_TOKEN_RETRIES = 6;
6
+ //# sourceMappingURL=oidcConsts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SCOPES","TOKEN_ENDPOINT","REFRESH_TOKEN_RETRIES"],"sourceRoot":"../../../src","sources":["consts/oidcConsts.ts"],"mappings":";;AAAA,OAAO,MAAMA,MAAM,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,CAAC;AACjE,OAAO,MAAMC,cAAc,GAAG,kBAAkB;AAChD,OAAO,MAAMC,qBAAqB,GAAG,CAAC","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ export { ContentpassStateType } from "./types/ContentpassState.js";
4
+ export { ContentpassSdkProvider } from "./sdkContext/ContentpassSdkProvider.js";
5
+ export { default as useContentpassSdk } from "./sdkContext/useContentpassSdk.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ContentpassStateType","ContentpassSdkProvider","default","useContentpassSdk"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAQA,SAASA,oBAAoB,QAAQ,6BAA0B;AAS/D,SAASC,sBAAsB,QAAQ,wCAAqC;AAE5E,SAASC,OAAO,IAAIC,iBAAiB,QAAQ,mCAAgC","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ import React, { createContext, useEffect, useState } from 'react';
4
+ import Contentpass from "../Contentpass.js";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export const contentpassSdkContext = /*#__PURE__*/createContext(undefined);
7
+ export const ContentpassSdkProvider = ({
8
+ children,
9
+ contentpassConfig
10
+ }) => {
11
+ const [contentpassSdk, setContentpassSdk] = useState();
12
+ useEffect(() => {
13
+ const contentpass = new Contentpass(contentpassConfig);
14
+ setContentpassSdk(contentpass);
15
+ }, [contentpassConfig]);
16
+ if (!contentpassSdk) {
17
+ return null;
18
+ }
19
+ return /*#__PURE__*/_jsx(contentpassSdkContext.Provider, {
20
+ value: contentpassSdk,
21
+ children: children
22
+ });
23
+ };
24
+ //# sourceMappingURL=ContentpassSdkProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createContext","useEffect","useState","Contentpass","jsx","_jsx","contentpassSdkContext","undefined","ContentpassSdkProvider","children","contentpassConfig","contentpassSdk","setContentpassSdk","contentpass","Provider","value"],"sourceRoot":"../../../src","sources":["sdkContext/ContentpassSdkProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAEjE,OAAOC,WAAW,MAAM,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEzC,OAAO,MAAMC,qBAAqB,gBAAGN,aAAa,CAChDO,SACF,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAGA,CAAC;EACrCC,QAAQ;EACRC;AAIF,CAAC,KAAK;EACJ,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAGV,QAAQ,CAElD,CAAC;EAEHD,SAAS,CAAC,MAAM;IACd,MAAMY,WAAW,GAAG,IAAIV,WAAW,CAACO,iBAAiB,CAAC;IAEtDE,iBAAiB,CAACC,WAAW,CAAC;EAChC,CAAC,EAAE,CAACH,iBAAiB,CAAC,CAAC;EAEvB,IAAI,CAACC,cAAc,EAAE;IACnB,OAAO,IAAI;EACb;EAEA,oBACEN,IAAA,CAACC,qBAAqB,CAACQ,QAAQ;IAACC,KAAK,EAAEJ,cAAe;IAAAF,QAAA,EACnDA;EAAQ,CACqB,CAAC;AAErC,CAAC","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ import { useContext } from 'react';
4
+ import { contentpassSdkContext } from "./ContentpassSdkProvider.js";
5
+ const useContentpassSdk = () => {
6
+ const contentpassSdk = useContext(contentpassSdkContext);
7
+ if (!contentpassSdk) {
8
+ throw new Error('useContentpassSdk must be used within a ContentpassSdkProvider');
9
+ }
10
+ return contentpassSdk;
11
+ };
12
+ export default useContentpassSdk;
13
+ //# sourceMappingURL=useContentpassSdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useContext","contentpassSdkContext","useContentpassSdk","contentpassSdk","Error"],"sourceRoot":"../../../src","sources":["sdkContext/useContentpassSdk.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,qBAAqB,QAAQ,6BAA0B;AAEhE,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;EAC9B,MAAMC,cAAc,GAAGH,UAAU,CAACC,qBAAqB,CAAC;EAExD,IAAI,CAACE,cAAc,EAAE;IACnB,MAAM,IAAIC,KAAK,CACb,gEACF,CAAC;EACH;EAEA,OAAOD,cAAc;AACvB,CAAC;AAED,eAAeD,iBAAiB","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ import * as Sentry from '@sentry/react-native';
4
+ import { defaultStackParser, makeFetchTransport } from '@sentry/react';
5
+ import { getDefaultIntegrations } from '@sentry/react-native/dist/js/integrations/default';
6
+
7
+ // as it's only the open source package, we want to have minimal sentry configuration here to not override sentry instance,
8
+ // which can be used in the application
9
+ const options = {
10
+ attachStacktrace: true,
11
+ autoInitializeNativeSdk: false,
12
+ dsn: 'https://74ab84b55b30a3800255a25eac4d089c@sentry.tools.contentpass.dev/8',
13
+ enableAppStartTracking: false,
14
+ enableAutoPerformanceTracing: false,
15
+ enableCaptureFailedRequests: false,
16
+ enableNative: false,
17
+ enableNativeCrashHandling: false,
18
+ enableNativeFramesTracking: false,
19
+ enableNativeNagger: false,
20
+ enableNdk: false,
21
+ enableStallTracking: true,
22
+ enableUserInteractionTracing: false,
23
+ enableWatchdogTerminationTracking: false,
24
+ maxQueueSize: 30,
25
+ parentSpanIsAlwaysRootSpan: true,
26
+ patchGlobalPromise: true,
27
+ sendClientReports: true,
28
+ stackParser: defaultStackParser,
29
+ transport: makeFetchTransport,
30
+ integrations: []
31
+ };
32
+ const sentryClient = new Sentry.ReactNativeClient({
33
+ ...options,
34
+ integrations: getDefaultIntegrations(options)
35
+ });
36
+ const sentryScope = new Sentry.Scope();
37
+ sentryScope.setClient(sentryClient);
38
+ sentryClient.init();
39
+ export const reportError = (err, {
40
+ msg
41
+ } = {}) => {
42
+ if (msg) {
43
+ sentryScope.addBreadcrumb({
44
+ category: 'Error',
45
+ message: msg,
46
+ level: 'log'
47
+ });
48
+ }
49
+ sentryScope.captureException(err);
50
+ };
51
+ export const setSentryExtraAttribute = (key, value) => {
52
+ sentryScope.setExtra(key, value);
53
+ };
54
+ //# sourceMappingURL=sentryIntegration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Sentry","defaultStackParser","makeFetchTransport","getDefaultIntegrations","options","attachStacktrace","autoInitializeNativeSdk","dsn","enableAppStartTracking","enableAutoPerformanceTracing","enableCaptureFailedRequests","enableNative","enableNativeCrashHandling","enableNativeFramesTracking","enableNativeNagger","enableNdk","enableStallTracking","enableUserInteractionTracing","enableWatchdogTerminationTracking","maxQueueSize","parentSpanIsAlwaysRootSpan","patchGlobalPromise","sendClientReports","stackParser","transport","integrations","sentryClient","ReactNativeClient","sentryScope","Scope","setClient","init","reportError","err","msg","addBreadcrumb","category","message","level","captureException","setSentryExtraAttribute","key","value","setExtra"],"sourceRoot":"../../src","sources":["sentryIntegration.ts"],"mappings":";;AAAA,OAAO,KAAKA,MAAM,MAAM,sBAAsB;AAC9C,SAASC,kBAAkB,EAAEC,kBAAkB,QAAQ,eAAe;AACtE,SAASC,sBAAsB,QAAQ,mDAAmD;;AAE1F;AACA;AACA,MAAMC,OAAO,GAAG;EACdC,gBAAgB,EAAE,IAAI;EACtBC,uBAAuB,EAAE,KAAK;EAC9BC,GAAG,EAAE,yEAAyE;EAC9EC,sBAAsB,EAAE,KAAK;EAC7BC,4BAA4B,EAAE,KAAK;EACnCC,2BAA2B,EAAE,KAAK;EAClCC,YAAY,EAAE,KAAK;EACnBC,yBAAyB,EAAE,KAAK;EAChCC,0BAA0B,EAAE,KAAK;EACjCC,kBAAkB,EAAE,KAAK;EACzBC,SAAS,EAAE,KAAK;EAChBC,mBAAmB,EAAE,IAAI;EACzBC,4BAA4B,EAAE,KAAK;EACnCC,iCAAiC,EAAE,KAAK;EACxCC,YAAY,EAAE,EAAE;EAChBC,0BAA0B,EAAE,IAAI;EAChCC,kBAAkB,EAAE,IAAI;EACxBC,iBAAiB,EAAE,IAAI;EACvBC,WAAW,EAAEtB,kBAAkB;EAC/BuB,SAAS,EAAEtB,kBAAkB;EAC7BuB,YAAY,EAAE;AAChB,CAAC;AAED,MAAMC,YAAY,GAAG,IAAI1B,MAAM,CAAC2B,iBAAiB,CAAC;EAChD,GAAGvB,OAAO;EACVqB,YAAY,EAAEtB,sBAAsB,CAACC,OAAO;AAC9C,CAAC,CAAC;AAEF,MAAMwB,WAAW,GAAG,IAAI5B,MAAM,CAAC6B,KAAK,CAAC,CAAC;AACtCD,WAAW,CAACE,SAAS,CAACJ,YAAY,CAAC;AAEnCA,YAAY,CAACK,IAAI,CAAC,CAAC;AAMnB,OAAO,MAAMC,WAAW,GAAGA,CAACC,GAAU,EAAE;EAAEC;AAAwB,CAAC,GAAG,CAAC,CAAC,KAAK;EAC3E,IAAIA,GAAG,EAAE;IACPN,WAAW,CAACO,aAAa,CAAC;MACxBC,QAAQ,EAAE,OAAO;MACjBC,OAAO,EAAEH,GAAG;MACZI,KAAK,EAAE;IACT,CAAC,CAAC;EACJ;EAEAV,WAAW,CAACW,gBAAgB,CAACN,GAAG,CAAC;AACnC,CAAC;AAED,OAAO,MAAMO,uBAAuB,GAAGA,CAACC,GAAW,EAAEC,KAAa,KAAK;EACrEd,WAAW,CAACe,QAAQ,CAACF,GAAG,EAAEC,KAAK,CAAC;AAClC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=ContentpassConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/ContentpassConfig.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ /* istanbul ignore file */
4
+
5
+ export let ContentpassStateType = /*#__PURE__*/function (ContentpassStateType) {
6
+ ContentpassStateType["INITIALISING"] = "INITIALISING";
7
+ ContentpassStateType["UNAUTHENTICATED"] = "UNAUTHENTICATED";
8
+ ContentpassStateType["AUTHENTICATED"] = "AUTHENTICATED";
9
+ ContentpassStateType["ERROR"] = "ERROR";
10
+ return ContentpassStateType;
11
+ }({});
12
+ //# sourceMappingURL=ContentpassState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ContentpassStateType"],"sourceRoot":"../../../src","sources":["types/ContentpassState.ts"],"mappings":";;AAAA;;AAEA,WAAYA,oBAAoB,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ /* istanbul ignore file */
4
+
5
+ export let RefreshTokenStrategy = /*#__PURE__*/function (RefreshTokenStrategy) {
6
+ RefreshTokenStrategy["INSTANTLY"] = "INSTANTLY";
7
+ RefreshTokenStrategy["TIMER_SET"] = "TIMER_SET";
8
+ RefreshTokenStrategy["NO_REFRESH"] = "NO_REFRESH";
9
+ return RefreshTokenStrategy;
10
+ }({});
11
+ //# sourceMappingURL=RefreshTokenStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RefreshTokenStrategy"],"sourceRoot":"../../../src","sources":["types/RefreshTokenStrategy.ts"],"mappings":";;AAAA;;AAEA,WAAYA,oBAAoB,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ import { TOKEN_ENDPOINT } from "../consts/oidcConsts.js";
4
+ export default async function fetchContentpassToken({
5
+ idToken,
6
+ propertyId,
7
+ issuer
8
+ }) {
9
+ const tokenEndpointResponse = await fetch(`${issuer}${TOKEN_ENDPOINT}`, {
10
+ method: 'POST',
11
+ headers: {
12
+ 'Content-Type': 'application/x-www-form-urlencoded'
13
+ },
14
+ body: new URLSearchParams({
15
+ grant_type: 'contentpass_token',
16
+ subject_token: idToken,
17
+ client_id: propertyId
18
+ }).toString()
19
+ });
20
+ const {
21
+ contentpass_token
22
+ } = await tokenEndpointResponse.json();
23
+ return contentpass_token;
24
+ }
25
+ //# sourceMappingURL=fetchContentpassToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TOKEN_ENDPOINT","fetchContentpassToken","idToken","propertyId","issuer","tokenEndpointResponse","fetch","method","headers","body","URLSearchParams","grant_type","subject_token","client_id","toString","contentpass_token","json"],"sourceRoot":"../../../src","sources":["utils/fetchContentpassToken.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,yBAAsB;AAErD,eAAe,eAAeC,qBAAqBA,CAAC;EAClDC,OAAO;EACPC,UAAU;EACVC;AAKF,CAAC,EAAE;EACD,MAAMC,qBAAqB,GAAG,MAAMC,KAAK,CAAC,GAAGF,MAAM,GAAGJ,cAAc,EAAE,EAAE;IACtEO,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE;MACP,cAAc,EAAE;IAClB,CAAC;IACDC,IAAI,EAAE,IAAIC,eAAe,CAAC;MACxBC,UAAU,EAAE,mBAAmB;MAC/BC,aAAa,EAAEV,OAAO;MACtBW,SAAS,EAAEV;IACb,CAAC,CAAC,CAACW,QAAQ,CAAC;EACd,CAAC,CAAC;EAEF,MAAM;IAAEC;EAAkB,CAAC,GAAG,MAAMV,qBAAqB,CAACW,IAAI,CAAC,CAAC;EAEhE,OAAOD,iBAAiB;AAC1B","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ export default function parseContentpassToken(contentpassToken) {
4
+ const tokenParts = contentpassToken.split('.');
5
+ if (tokenParts.length < 3) {
6
+ throw new Error('Invalid token, token should have at least 3 parts');
7
+ }
8
+ const header = JSON.parse(atob(tokenParts[0]));
9
+ const body = JSON.parse(atob(tokenParts[1]));
10
+ return {
11
+ header,
12
+ body
13
+ };
14
+ }
15
+ //# sourceMappingURL=parseContentpassToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseContentpassToken","contentpassToken","tokenParts","split","length","Error","header","JSON","parse","atob","body"],"sourceRoot":"../../../src","sources":["utils/parseContentpassToken.ts"],"mappings":";;AAeA,eAAe,SAASA,qBAAqBA,CAC3CC,gBAAwB,EACX;EACb,MAAMC,UAAU,GAAGD,gBAAgB,CAACE,KAAK,CAAC,GAAG,CAAC;EAC9C,IAAID,UAAU,CAACE,MAAM,GAAG,CAAC,EAAE;IACzB,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;EACtE;EAEA,MAAMC,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACC,IAAI,CAACP,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC;EAC/C,MAAMQ,IAAI,GAAGH,IAAI,CAACC,KAAK,CAACC,IAAI,CAACP,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC;EAE7C,OAAO;IACLI,MAAM;IACNI;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import parseContentpassToken from "./parseContentpassToken.js";
4
+ import { reportError } from "../sentryIntegration.js";
5
+ export default function validateSubscription(contentpassToken) {
6
+ try {
7
+ const {
8
+ body
9
+ } = parseContentpassToken(contentpassToken);
10
+ return !!body.auth && !!body.plans.length;
11
+ } catch (err) {
12
+ reportError(err, {
13
+ msg: 'Failed to validate subscription'
14
+ });
15
+ return false;
16
+ }
17
+ }
18
+ //# sourceMappingURL=validateSubscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseContentpassToken","reportError","validateSubscription","contentpassToken","body","auth","plans","length","err","msg"],"sourceRoot":"../../../src","sources":["utils/validateSubscription.ts"],"mappings":";;AAAA,OAAOA,qBAAqB,MAAM,4BAAyB;AAC3D,SAASC,WAAW,QAAQ,yBAAsB;AAElD,eAAe,SAASC,oBAAoBA,CAACC,gBAAwB,EAAE;EACrE,IAAI;IACF,MAAM;MAAEC;IAAK,CAAC,GAAGJ,qBAAqB,CAACG,gBAAgB,CAAC;IACxD,OAAO,CAAC,CAACC,IAAI,CAACC,IAAI,IAAI,CAAC,CAACD,IAAI,CAACE,KAAK,CAACC,MAAM;EAC3C,CAAC,CAAC,OAAOC,GAAQ,EAAE;IACjBP,WAAW,CAACO,GAAG,EAAE;MAAEC,GAAG,EAAE;IAAkC,CAAC,CAAC;IAC5D,OAAO,KAAK;EACd;AACF","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,24 @@
1
+ import { type ContentpassState } from './types/ContentpassState';
2
+ import type { ContentpassConfig } from './types/ContentpassConfig';
3
+ export type ContentpassObserver = (state: ContentpassState) => void;
4
+ export default class Contentpass {
5
+ private authStateStorage;
6
+ private readonly config;
7
+ private contentpassState;
8
+ private contentpassStateObservers;
9
+ private oidcAuthState;
10
+ private refreshTimer;
11
+ constructor(config: ContentpassConfig);
12
+ authenticate: () => Promise<void>;
13
+ registerObserver(observer: ContentpassObserver): void;
14
+ unregisterObserver(observer: ContentpassObserver): void;
15
+ logout: () => Promise<void>;
16
+ recoverFromError: () => Promise<void>;
17
+ private initialiseAuthState;
18
+ private onNewAuthState;
19
+ private setupRefreshTimer;
20
+ private refreshToken;
21
+ private onRefreshTokenError;
22
+ private changeContentpassState;
23
+ }
24
+ //# sourceMappingURL=Contentpass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Contentpass.d.ts","sourceRoot":"","sources":["../../../../src/Contentpass.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAUlC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAE3C,OAAO,CAAC,gBAAgB,CAEtB;IACF,OAAO,CAAC,yBAAyB,CAA6B;IAC9D,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAA+B;gBAEvC,MAAM,EAAE,iBAAiB;IAO9B,YAAY,QAAa,OAAO,CAAC,IAAI,CAAC,CA0B3C;IAEK,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB;IAS9C,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB;IAMhD,MAAM,sBAMX;IAEK,gBAAgB,sBAMrB;IAEF,OAAO,CAAC,mBAAmB,CAWzB;IAEF,OAAO,CAAC,cAAc,CA2BpB;IAEF,OAAO,CAAC,iBAAiB,CAyBvB;IAEF,OAAO,CAAC,YAAY,CAsBlB;IAEF,OAAO,CAAC,mBAAmB,CAazB;IAEF,OAAO,CAAC,sBAAsB,CAG5B;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":["../../../../src/OidcAuthStateStorage.ts"],"names":[],"mappings":"AAIA,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;CAGhC"}
@@ -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":["../../../../../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,7 @@
1
+ export type { ContentpassState, ErrorState, AuthenticatedState, InitialisingState, UnauthenticatedState, } from './types/ContentpassState';
2
+ export { ContentpassStateType } from './types/ContentpassState';
3
+ export type { ContentpassConfig } from './types/ContentpassConfig';
4
+ export { type default as Contentpass, type ContentpassObserver, } from './Contentpass';
5
+ export { ContentpassSdkProvider } from './sdkContext/ContentpassSdkProvider';
6
+ export { default as useContentpassSdk } from './sdkContext/useContentpassSdk';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EACL,KAAK,OAAO,IAAI,WAAW,EAC3B,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { ContentpassConfig } from '../types/ContentpassConfig';
3
+ import Contentpass from '../Contentpass';
4
+ export declare const contentpassSdkContext: React.Context<Contentpass | undefined>;
5
+ export declare const ContentpassSdkProvider: ({ children, contentpassConfig, }: {
6
+ children: React.ReactNode;
7
+ contentpassConfig: ContentpassConfig;
8
+ }) => import("react/jsx-runtime").JSX.Element | null;
9
+ //# sourceMappingURL=ContentpassSdkProvider.d.ts.map