@axa-fr/react-oidc 6.13.3 → 6.14.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 (51) hide show
  1. package/README.md +1 -0
  2. package/dist/OidcServiceWorker.js +36 -8
  3. package/dist/vanilla/crypto.d.ts +4 -0
  4. package/dist/vanilla/crypto.d.ts.map +1 -0
  5. package/dist/vanilla/crypto.js +81 -0
  6. package/dist/vanilla/crypto.js.map +1 -0
  7. package/dist/vanilla/initSession.d.ts +6 -4
  8. package/dist/vanilla/initSession.d.ts.map +1 -1
  9. package/dist/vanilla/initSession.js +22 -15
  10. package/dist/vanilla/initSession.js.map +1 -1
  11. package/dist/vanilla/initWorker.d.ts +4 -2
  12. package/dist/vanilla/initWorker.d.ts.map +1 -1
  13. package/dist/vanilla/initWorker.js +39 -18
  14. package/dist/vanilla/initWorker.js.map +1 -1
  15. package/dist/vanilla/login.d.ts +5 -1
  16. package/dist/vanilla/login.d.ts.map +1 -1
  17. package/dist/vanilla/login.js +70 -143
  18. package/dist/vanilla/login.js.map +1 -1
  19. package/dist/vanilla/oidc.d.ts +10 -6
  20. package/dist/vanilla/oidc.d.ts.map +1 -1
  21. package/dist/vanilla/oidc.js +14 -7
  22. package/dist/vanilla/oidc.js.map +1 -1
  23. package/dist/vanilla/requests.d.ts +14 -0
  24. package/dist/vanilla/requests.d.ts.map +1 -1
  25. package/dist/vanilla/requests.js +56 -1
  26. package/dist/vanilla/requests.js.map +1 -1
  27. package/dist/vanilla/route-utils.js +2 -2
  28. package/dist/vanilla/route-utils.js.map +1 -1
  29. package/dist/vanilla/types.d.ts +1 -0
  30. package/dist/vanilla/types.d.ts.map +1 -1
  31. package/package.json +2 -2
  32. package/src/oidc/vanilla/OidcServiceWorker.js +36 -8
  33. package/src/oidc/vanilla/crypto.ts +57 -0
  34. package/src/oidc/vanilla/initSession.ts +25 -15
  35. package/src/oidc/vanilla/initWorker.ts +43 -18
  36. package/src/oidc/vanilla/login.ts +76 -148
  37. package/src/oidc/vanilla/oidc.ts +22 -13
  38. package/src/oidc/vanilla/requests.spec.ts +4 -0
  39. package/src/oidc/vanilla/requests.ts +55 -0
  40. package/src/oidc/vanilla/route-utils.ts +2 -2
  41. package/src/oidc/vanilla/types.ts +1 -0
  42. package/dist/vanilla/memoryStorageBackend.d.ts +0 -11
  43. package/dist/vanilla/memoryStorageBackend.d.ts.map +0 -1
  44. package/dist/vanilla/memoryStorageBackend.js +0 -31
  45. package/dist/vanilla/memoryStorageBackend.js.map +0 -1
  46. package/dist/vanilla/noHashQueryStringUtils.d.ts +0 -8
  47. package/dist/vanilla/noHashQueryStringUtils.d.ts.map +0 -1
  48. package/dist/vanilla/noHashQueryStringUtils.js +0 -32
  49. package/dist/vanilla/noHashQueryStringUtils.js.map +0 -1
  50. package/src/oidc/vanilla/memoryStorageBackend.ts +0 -40
  51. package/src/oidc/vanilla/noHashQueryStringUtils.ts +0 -32
@@ -9,8 +9,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.performTokenRequestAsync = exports.performRevocationRequestAsync = exports.TOKEN_TYPE = exports.fetchFromIssuer = void 0;
12
+ exports.performFirstTokenRequestAsync = exports.performAuthorizationRequestAsync = exports.performTokenRequestAsync = exports.performRevocationRequestAsync = exports.TOKEN_TYPE = exports.fetchFromIssuer = void 0;
13
13
  const cache_1 = require("./cache");
14
+ const crypto_1 = require("./crypto");
14
15
  const oidc_1 = require("./oidc");
15
16
  const parseTokens_1 = require("./parseTokens");
16
17
  const oneHourSecond = 60 * 60;
@@ -116,4 +117,58 @@ const performTokenRequestAsync = (url, details, extras, oldTokens, tokenRenewMod
116
117
  };
117
118
  });
118
119
  exports.performTokenRequestAsync = performTokenRequestAsync;
120
+ const performAuthorizationRequestAsync = (storage) => (url, extras) => __awaiter(void 0, void 0, void 0, function* () {
121
+ extras = extras ? Object.assign({}, extras) : {};
122
+ const codeVerifier = (0, crypto_1.generateRandom)(128);
123
+ const codeChallenge = yield (0, crypto_1.deriveChallengeAsync)(codeVerifier);
124
+ yield storage.setCodeVerifierAsync(codeVerifier);
125
+ yield storage.setStateAsync(extras.state);
126
+ extras.code_challenge = codeChallenge;
127
+ extras.code_challenge_method = 'S256';
128
+ let queryString = '';
129
+ if (extras) {
130
+ for (const [key, value] of Object.entries(extras)) {
131
+ if (queryString === '') {
132
+ queryString += '?';
133
+ }
134
+ else {
135
+ queryString += '&';
136
+ }
137
+ queryString += `${key}=${encodeURIComponent(value)}`;
138
+ }
139
+ }
140
+ window.location.href = `${url}${queryString}`;
141
+ });
142
+ exports.performAuthorizationRequestAsync = performAuthorizationRequestAsync;
143
+ const performFirstTokenRequestAsync = (storage) => (url, extras, tokenRenewMode, timeoutMs = 10000) => __awaiter(void 0, void 0, void 0, function* () {
144
+ extras = extras ? Object.assign({}, extras) : {};
145
+ extras.code_verifier = yield storage.getCodeVerifierAsync();
146
+ const formBody = [];
147
+ for (const property in extras) {
148
+ const encodedKey = encodeURIComponent(property);
149
+ const encodedValue = encodeURIComponent(extras[property]);
150
+ formBody.push(`${encodedKey}=${encodedValue}`);
151
+ }
152
+ const formBodyString = formBody.join('&');
153
+ const response = yield internalFetch(url, {
154
+ method: 'POST',
155
+ headers: {
156
+ 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
157
+ },
158
+ body: formBodyString,
159
+ }, timeoutMs);
160
+ yield Promise.all([storage.setCodeVerifierAsync(null), storage.setStateAsync(null)]);
161
+ if (response.status !== 200) {
162
+ return { success: false, status: response.status };
163
+ }
164
+ const tokens = yield response.json();
165
+ return {
166
+ success: true,
167
+ data: {
168
+ state: extras.state,
169
+ tokens: (0, parseTokens_1.parseOriginalTokens)(tokens, null, tokenRenewMode),
170
+ },
171
+ };
172
+ });
173
+ exports.performFirstTokenRequestAsync = performFirstTokenRequestAsync;
119
174
  //# sourceMappingURL=requests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/oidc/vanilla/requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/oidc/vanilla/requests.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAiD;AACjD,qCAAgE;AAChE,iCAA+D;AAC/D,+CAAoD;AAGpD,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,CAAC;AACvB,MAAM,eAAe,GAAG,CAAO,eAAuB,EAAE,eAAe,GAAG,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC,cAAc,EAC5E,EAAE;IACjD,MAAM,OAAO,GAAG,GAAG,eAAe,mCAAmC,CAAC;IAEtE,MAAM,eAAe,GAAG,eAAe,eAAe,EAAE,CAAC;IACzD,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,eAAe,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACrE,IAAI,IAAI,EAAE;QACN,OAAO,IAAI,4CAAqC,CAAC,IAAI,CAAC,CAAC;KAC1D;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;QACzB,OAAO,IAAI,CAAC;KACf;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAErC,IAAA,gBAAQ,EAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,IAAI,4CAAqC,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC,CAAA,CAAC;AAnBW,QAAA,eAAe,mBAmB1B;AAEF,MAAM,aAAa,GAAG,CAAO,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,EAAE,EAAE;IAC7E,IAAI,QAAQ,CAAC;IACb,IAAI;QACA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAChD,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,kCAAO,OAAO,KAAE,MAAM,EAAE,UAAU,CAAC,MAAM,IAAG,CAAC;KAC1E;IAAC,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY;YAC1B,CAAC,CAAC,OAAO,KAAK,wBAAwB,EAAE;YACxC,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,OAAO,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;aACxE;iBAAM;gBACH,MAAM,CAAC,CAAC;aACX;SACJ;aAAM;YACH,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,kCAAkC;SAC9C;KACJ;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEW,QAAA,UAAU,GAAG;IACtB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;CAC/B,CAAC;AAEK,MAAM,6BAA6B,GAAG,CAAO,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,kBAAU,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,EAAE;IACnI,MAAM,OAAO,GAAG;QACZ,KAAK;QACL,eAAe,EAAE,UAAU;QAC3B,SAAS;KACZ,CAAC;IAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE;QAC5B,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,YAAY,EAAE,CAAC,CAAC;KAClD;IACD,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE;QACtC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,cAAc,EAAE,iDAAiD;SACpE;QACD,IAAI,EAAE,cAAc;KACvB,EAAE,SAAS,CAAC,CAAC;IACd,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAC7B;IACD,OAAO;QACH,OAAO,EAAE,IAAI;KAChB,CAAC;AACN,CAAC,CAAA,CAAC;AA5BW,QAAA,6BAA6B,iCA4BxC;AAEK,MAAM,wBAAwB,GAAG,CAAO,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,cAAsB,EAAE,SAAS,GAAG,KAAK,EAAE,EAAE;IACzH,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACxB;KACJ;IAED,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE;QAC5B,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,YAAY,EAAE,CAAC,CAAC;KAClD;IACD,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE;QACtC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,cAAc,EAAE,iDAAiD;SACpE;QACD,IAAI,EAAE,cAAc;KACvB,EAAE,SAAS,CAAC,CAAC;IACd,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;KACtD;IACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO;QACH,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAA,iCAAmB,EAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC;KAC/D,CAAC;AACN,CAAC,CAAA,CAAC;AA9BW,QAAA,wBAAwB,4BA8BnC;AAEK,MAAM,gCAAgC,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,CAAO,GAAG,EAAE,MAAiB,EAAE,EAAE;IAC/F,MAAM,GAAG,MAAM,CAAC,CAAC,mBAAM,MAAM,EAAG,CAAC,CAAC,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAoB,EAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,OAAO,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC;IACtC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,MAAM,EAAE;QACR,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC/C,IAAI,WAAW,KAAK,EAAE,EAAE;gBACpB,WAAW,IAAI,GAAG,CAAC;aACtB;iBAAM;gBACH,WAAW,IAAI,GAAG,CAAC;aACtB;YACD,WAAW,IAAI,GAAG,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;SACxD;KACJ;IACD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,WAAW,EAAE,CAAC;AAClD,CAAC,CAAA,CAAC;AApBW,QAAA,gCAAgC,oCAoB3C;AAEK,MAAM,6BAA6B,GAAG,CAAC,OAAW,EAAE,EAAE,CAAC,CAAO,GAAG,EAAE,MAAM,EAAE,cAAsB,EAAE,SAAS,GAAG,KAAK,EAAE,EAAE;IAC3H,MAAM,GAAG,MAAM,CAAC,CAAC,mBAAM,MAAM,EAAG,CAAC,CAAC,EAAE,CAAC;IACrC,MAAM,CAAC,aAAa,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE;QAC3B,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,YAAY,EAAE,CAAC,CAAC;KAClD;IACD,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE;QACtC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,cAAc,EAAE,iDAAiD;SACpE;QACD,IAAI,EAAE,cAAc;KACvB,EAAE,SAAS,CAAC,CAAC;IACd,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;KACtD;IACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO;QACH,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACF,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,IAAA,iCAAmB,EAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC;SACxD;KACR,CAAC;AACN,CAAC,CAAA,CAAC;AA7BW,QAAA,6BAA6B,iCA6BxC"}
@@ -17,7 +17,7 @@ const getLocation = (href) => {
17
17
  search = splits[1];
18
18
  }
19
19
  }
20
- if (search) {
20
+ if (search.startsWith('?')) {
21
21
  search = search.slice(1);
22
22
  }
23
23
  return (match && {
@@ -64,7 +64,7 @@ const parseQueryString = (queryString) => {
64
64
  // Convert the array of strings into an object
65
65
  for (i = 0, l = queries.length; i < l; i++) {
66
66
  temp = queries[i].split('=');
67
- params[decodeURIComponent(temp[0])] = temp[1];
67
+ params[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]);
68
68
  }
69
69
  return params;
70
70
  };
@@ -1 +1 @@
1
- {"version":3,"file":"route-utils.js","sourceRoot":"","sources":["../../src/oidc/vanilla/route-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-utils.js","sourceRoot":"","sources":["../../src/oidc/vanilla/route-utils.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ export declare type OidcConfiguration = {
12
12
  token_request_timeout?: number;
13
13
  service_worker_relative_url?: string;
14
14
  service_worker_only?: boolean;
15
+ service_worker_convert_all_requests_to_cors?: boolean;
15
16
  extras?: StringMap;
16
17
  token_request_extras?: StringMap;
17
18
  storage?: Storage;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/oidc/vanilla/types.ts"],"names":[],"mappings":"AACA,oBAAY,iBAAiB,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAC,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAC,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C,CAAC,EAAE,MAAM,CAAC;IACpD,uBAAuB,CAAC,EAAE,sBAAsB,CAAC;IACjD,+CAA+C,CAAC,EAAE,MAAM,CAAC;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,2BAA2B,CAAC,EAAC,MAAM,CAAC;IACpC,mBAAmB,CAAC,EAAC,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAC,SAAS,CAAC;IAClB,oBAAoB,CAAC,EAAC,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,SAAS;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACnC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAC,MAAM,CAAC;IAC7B,MAAM,EAAC,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/oidc/vanilla/types.ts"],"names":[],"mappings":"AACA,oBAAY,iBAAiB,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAC,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAC,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C,CAAC,EAAE,MAAM,CAAC;IACpD,uBAAuB,CAAC,EAAE,sBAAsB,CAAC;IACjD,+CAA+C,CAAC,EAAE,MAAM,CAAC;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,2BAA2B,CAAC,EAAC,MAAM,CAAC;IACpC,mBAAmB,CAAC,EAAC,OAAO,CAAC;IAC7B,2CAA2C,CAAC,EAAC,OAAO,CAAC;IACrD,MAAM,CAAC,EAAC,SAAS,CAAC;IAClB,oBAAoB,CAAC,EAAC,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,SAAS;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACnC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAC,MAAM,CAAC;IAC7B,MAAM,EAAC,MAAM,CAAC;CACjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axa-fr/react-oidc",
3
- "version": "6.13.3",
3
+ "version": "6.14.0",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "jsnext:main": "dist/index.js",
@@ -40,7 +40,7 @@
40
40
  "lint": "eslint src"
41
41
  },
42
42
  "dependencies": {
43
- "@openid/appauth": "1.3.1"
43
+ "base64-js": "1.5.1"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "react": "^17.0.0 || ^18.0.0",
@@ -22,7 +22,8 @@ const database = {
22
22
  configurationName: 'default',
23
23
  tokens: null,
24
24
  status: null,
25
- items: [],
25
+ state: null,
26
+ codeVerifier: null,
26
27
  nonce: null,
27
28
  oidcServerConfiguration: null,
28
29
  },
@@ -249,6 +250,7 @@ const serializeHeaders = (headers) => {
249
250
  const REFRESH_TOKEN = 'REFRESH_TOKEN_SECURED_BY_OIDC_SERVICE_WORKER';
250
251
  const ACCESS_TOKEN = 'ACCESS_TOKEN_SECURED_BY_OIDC_SERVICE_WORKER';
251
252
  const NONCE_TOKEN = 'NONCE_SECURED_BY_OIDC_SERVICE_WORKER';
253
+ const CODE_VERIFIER = 'CODE_VERIFIER_SECURED_BY_OIDC_SERVICE_WORKER';
252
254
 
253
255
  const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
254
256
 
@@ -286,6 +288,7 @@ const handleFetch = async (event) => {
286
288
  ...serializeHeaders(originalRequest.headers),
287
289
  authorization: 'Bearer ' + currentDatabaseForRequestAccessToken.tokens.access_token,
288
290
  },
291
+ mode: currentDatabaseForRequestAccessToken.oidcConfiguration.service_worker_convert_all_requests_to_cors ? "cors" : originalRequest.mode,
289
292
  });
290
293
  event.waitUntil(event.respondWith(fetch(newRequest)));
291
294
  return;
@@ -345,8 +348,16 @@ const handleFetch = async (event) => {
345
348
  } else if (actualBody.includes('code_verifier=') && currentLoginCallbackConfigurationName) {
346
349
  currentDatabase = database[currentLoginCallbackConfigurationName];
347
350
  currentLoginCallbackConfigurationName = null;
351
+ let newBody = actualBody;
352
+ if (currentDatabase && currentDatabase.codeVerifier != null) {
353
+ const keyCodeVerifier = CODE_VERIFIER + '_' + currentDatabase.configurationName;
354
+ if (actualBody.includes(keyCodeVerifier)) {
355
+ newBody = newBody.replace(keyCodeVerifier, currentDatabase.codeVerifier);
356
+ }
357
+ }
358
+
348
359
  return fetch(originalRequest, {
349
- body: actualBody,
360
+ body: newBody,
350
361
  method: clonedRequest.method,
351
362
  headers: {
352
363
  ...serializeHeaders(originalRequest.headers),
@@ -412,7 +423,8 @@ addEventListener('message', event => {
412
423
  if (!currentDatabase) {
413
424
  database[configurationName] = {
414
425
  tokens: null,
415
- items: [],
426
+ state: null,
427
+ codeVerifier: null,
416
428
  oidcServerConfiguration: null,
417
429
  oidcConfiguration: null,
418
430
  status: null,
@@ -425,12 +437,10 @@ addEventListener('message', event => {
425
437
  }
426
438
 
427
439
  switch (data.type) {
428
- case 'loadItems':
429
- port.postMessage(database[configurationName].items);
430
- return;
431
440
  case 'clear':
432
441
  currentDatabase.tokens = null;
433
- currentDatabase.items = null;
442
+ currentDatabase.state = null;
443
+ currentDatabase.codeVerifier = null;
434
444
  currentDatabase.status = data.data.status;
435
445
  port.postMessage({ configurationName });
436
446
  return;
@@ -478,7 +488,25 @@ addEventListener('message', event => {
478
488
  }
479
489
  return;
480
490
  }
481
-
491
+ case 'setState':
492
+ currentDatabase.state = data.data.state;
493
+ port.postMessage({ configurationName });
494
+ return;
495
+ case 'getState':
496
+ {
497
+ const state = currentDatabase.state;
498
+ port.postMessage({ configurationName, state });
499
+ return;
500
+ }
501
+ case 'setCodeVerifier':
502
+ currentDatabase.codeVerifier = data.data.codeVerifier;
503
+ port.postMessage({ configurationName });
504
+ return;
505
+ case 'getCodeVerifier':
506
+ {
507
+ port.postMessage({ configurationName, codeVerifier: CODE_VERIFIER + '_' + configurationName });
508
+ return;
509
+ }
482
510
  case 'setSessionState':
483
511
  currentDatabase.sessionState = data.data.sessionState;
484
512
  port.postMessage({ configurationName });
@@ -0,0 +1,57 @@
1
+ import * as base64 from 'base64-js';
2
+
3
+ const hasCrypto = typeof window !== 'undefined' && !!(window.crypto as any);
4
+ const hasSubtleCrypto = hasCrypto && !!(window.crypto.subtle as any);
5
+ const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
6
+
7
+ const bufferToString = (buffer: Uint8Array) => {
8
+ const state = [];
9
+ for (let i = 0; i < buffer.byteLength; i += 1) {
10
+ const index = buffer[i] % charset.length;
11
+ state.push(charset[index]);
12
+ }
13
+ return state.join('');
14
+ };
15
+
16
+ const urlSafe = (buffer: Uint8Array): string => {
17
+ const encoded = base64.fromByteArray(new Uint8Array(buffer));
18
+ console.log(encoded);
19
+ return encoded.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
20
+ };
21
+
22
+ export const generateRandom = (size: number) => {
23
+ const buffer = new Uint8Array(size);
24
+ if (hasCrypto) {
25
+ window.crypto.getRandomValues(buffer);
26
+ } else {
27
+ // fall back to Math.random() if nothing else is available
28
+ for (let i = 0; i < size; i += 1) {
29
+ buffer[i] = (Math.random() * charset.length) | 0;
30
+ }
31
+ }
32
+ return bufferToString(buffer);
33
+ };
34
+
35
+ export function textEncodeLite(str: string) {
36
+ const buf = new ArrayBuffer(str.length);
37
+ const bufView = new Uint8Array(buf);
38
+
39
+ for (let i = 0; i < str.length; i++) {
40
+ bufView[i] = str.charCodeAt(i);
41
+ }
42
+ return bufView;
43
+ }
44
+ export const deriveChallengeAsync = (code: string): Promise<string> => {
45
+ if (code.length < 43 || code.length > 128) {
46
+ return Promise.reject(new Error('Invalid code length.'));
47
+ }
48
+ if (!hasSubtleCrypto) {
49
+ return Promise.reject(new Error('window.crypto.subtle is unavailable.'));
50
+ }
51
+
52
+ return new Promise((resolve, reject) => {
53
+ crypto.subtle.digest('SHA-256', textEncodeLite(code)).then(buffer => {
54
+ return resolve(urlSafe(new Uint8Array(buffer)));
55
+ }, error => reject(error));
56
+ });
57
+ };
@@ -1,13 +1,5 @@
1
- export const initSession = (configurationName, storage = sessionStorage) => {
2
- const saveItemsAsync = (items) => {
3
- storage[`oidc.items.${configurationName}`] = JSON.stringify(items);
4
- return Promise.resolve();
5
- };
6
-
7
- const loadItemsAsync = () => {
8
- return Promise.resolve(JSON.parse(storage[`oidc.items.${configurationName}`]));
9
- };
10
1
 
2
+ export const initSession = (configurationName, storage = sessionStorage) => {
11
3
  const clearAsync = (status) => {
12
4
  storage[`oidc.${configurationName}`] = JSON.stringify({ tokens: null, status });
13
5
  return Promise.resolve();
@@ -26,11 +18,11 @@ export const initSession = (configurationName, storage = sessionStorage) => {
26
18
  storage[`oidc.${configurationName}`] = JSON.stringify({ tokens });
27
19
  };
28
20
 
29
- const setSessionState = (sessionState) => {
21
+ const setSessionStateAsync = async (sessionState) => {
30
22
  storage[`oidc.session_state.${configurationName}`] = sessionState;
31
23
  };
32
24
 
33
- const getSessionState = () => {
25
+ const getSessionStateAsync = async () => {
34
26
  return storage[`oidc.session_state.${configurationName}`];
35
27
  };
36
28
 
@@ -63,18 +55,36 @@ export const initSession = (configurationName, storage = sessionStorage) => {
63
55
  return getLoginParamsCache;
64
56
  };
65
57
 
58
+ const getStateAsync = async () => {
59
+ return storage[`oidc.state.${configurationName}`];
60
+ };
61
+
62
+ const setStateAsync = async (state) => {
63
+ storage[`oidc.state.${configurationName}`] = state;
64
+ };
65
+
66
+ const getCodeVerifierAsync = async () => {
67
+ return storage[`oidc.code_verifier.${configurationName}`];
68
+ };
69
+
70
+ const setCodeVerifierAsync = async (codeVerifier) => {
71
+ storage[`oidc.code_verifier.${configurationName}`] = codeVerifier;
72
+ };
73
+
66
74
  return {
67
- saveItemsAsync,
68
- loadItemsAsync,
69
75
  clearAsync,
70
76
  initAsync,
71
77
  setTokens,
72
78
  getTokens,
73
- setSessionState,
74
- getSessionState,
79
+ setSessionStateAsync,
80
+ getSessionStateAsync,
75
81
  setNonceAsync,
76
82
  getNonceAsync,
77
83
  setLoginParams,
78
84
  getLoginParams,
85
+ getStateAsync,
86
+ setStateAsync,
87
+ getCodeVerifierAsync,
88
+ setCodeVerifierAsync,
79
89
  };
80
90
  };
@@ -189,22 +189,6 @@ export const initWorkerAsync = async(serviceWorkerRelativeUrl, configurationName
189
189
  });
190
190
  });
191
191
 
192
- const saveItemsAsync = (items) => {
193
- // iOS kill Service Worker when domain we leave domain
194
- if (operatingSystem.os === 'iOS') {
195
- const session = initSession(configurationName);
196
- return session.saveItemsAsync(items);
197
- }
198
- return sendMessageAsync(registration)({ type: 'saveItems', data: items, configurationName });
199
- };
200
- const loadItemsAsync = () => {
201
- // iOS kill Service Worker when domain we leave domain
202
- if (operatingSystem.os === 'iOS') {
203
- const session = initSession(configurationName);
204
- return session.loadItemsAsync();
205
- }
206
- return sendMessageAsync(registration)({ type: 'loadItems', data: null, configurationName });
207
- };
208
192
  const clearAsync = async (status) => {
209
193
  // iOS kill Service Worker when domain we leave domain
210
194
  if (operatingSystem.os === 'iOS') {
@@ -274,9 +258,46 @@ export const initWorkerAsync = async(serviceWorkerRelativeUrl, configurationName
274
258
  return getLoginParamsCache;
275
259
  };
276
260
 
261
+ const getStateAsync = async () => {
262
+ // iOS kill Service Worker when domain we leave domain
263
+ if (operatingSystem.os === 'iOS') {
264
+ const session = initSession(configurationName);
265
+ return session.getStateAsync();
266
+ }
267
+ const result = await sendMessageAsync(registration)({ type: 'getState', data: null, configurationName });
268
+ // @ts-ignore
269
+ return result.state;
270
+ };
271
+
272
+ const setStateAsync = async (state) => {
273
+ // iOS kill Service Worker when domain we leave domain
274
+ if (operatingSystem.os === 'iOS') {
275
+ const session = initSession(configurationName);
276
+ return session.setStateAsync(state);
277
+ }
278
+ return sendMessageAsync(registration)({ type: 'setState', data: { state }, configurationName });
279
+ };
280
+
281
+ const getCodeVerifierAsync = async () => {
282
+ // iOS kill Service Worker when domain we leave domain
283
+ if (operatingSystem.os === 'iOS') {
284
+ const session = initSession(configurationName);
285
+ return session.getCodeVerifierAsync();
286
+ }
287
+ const result = await sendMessageAsync(registration)({ type: 'getCodeVerifier', data: null, configurationName });
288
+ // @ts-ignore
289
+ return result.codeVerifier;
290
+ };
291
+
292
+ const setCodeVerifierAsync = async (codeVerifier) => {
293
+ if (operatingSystem.os === 'iOS') {
294
+ const session = initSession(configurationName);
295
+ return session.setCodeVerifierAsync(codeVerifier);
296
+ }
297
+ return sendMessageAsync(registration)({ type: 'setCodeVerifier', data: { codeVerifier }, configurationName });
298
+ };
299
+
277
300
  return {
278
- saveItemsAsync,
279
- loadItemsAsync,
280
301
  clearAsync,
281
302
  initAsync,
282
303
  startKeepAliveServiceWorker,
@@ -288,5 +309,9 @@ export const initWorkerAsync = async(serviceWorkerRelativeUrl, configurationName
288
309
  unregisterAsync,
289
310
  setLoginParams,
290
311
  getLoginParams,
312
+ getStateAsync,
313
+ setStateAsync,
314
+ getCodeVerifierAsync,
315
+ setCodeVerifierAsync,
291
316
  };
292
317
  };