@okta/okta-auth-js 7.9.0 → 7.10.1

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 (187) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/cjs/authn/util/poll.js +4 -3
  3. package/cjs/authn/util/poll.js.map +1 -1
  4. package/cjs/base/types.js.map +1 -1
  5. package/cjs/constants.js +5 -1
  6. package/cjs/constants.js.map +1 -1
  7. package/cjs/features.js +17 -0
  8. package/cjs/features.js.map +1 -1
  9. package/cjs/http/OktaUserAgent.js +2 -2
  10. package/cjs/http/OktaUserAgent.js.map +1 -1
  11. package/cjs/http/request.js +84 -3
  12. package/cjs/http/request.js.map +1 -1
  13. package/cjs/http/types.js.map +1 -1
  14. package/cjs/idx/idxState/v1/generateIdxAction.js +7 -2
  15. package/cjs/idx/idxState/v1/generateIdxAction.js.map +1 -1
  16. package/dist/okta-auth-js.authn.min.analyzer.html +2 -2
  17. package/dist/okta-auth-js.authn.min.js +1 -1
  18. package/dist/okta-auth-js.authn.min.js.map +1 -1
  19. package/dist/okta-auth-js.core.min.analyzer.html +2 -2
  20. package/dist/okta-auth-js.core.min.js +1 -1
  21. package/dist/okta-auth-js.core.min.js.map +1 -1
  22. package/dist/okta-auth-js.idx.min.analyzer.html +2 -2
  23. package/dist/okta-auth-js.idx.min.js +1 -1
  24. package/dist/okta-auth-js.idx.min.js.map +1 -1
  25. package/dist/okta-auth-js.min.analyzer.html +2 -2
  26. package/dist/okta-auth-js.min.js +1 -1
  27. package/dist/okta-auth-js.min.js.map +1 -1
  28. package/dist/okta-auth-js.myaccount.min.analyzer.html +2 -2
  29. package/dist/okta-auth-js.myaccount.min.js +1 -1
  30. package/dist/okta-auth-js.myaccount.min.js.map +1 -1
  31. package/dist/okta-auth-js.polyfill.js +1 -1
  32. package/dist/okta-auth-js.polyfill.js.map +1 -1
  33. package/esm/browser/_virtual/_tslib.js +7 -2
  34. package/esm/browser/_virtual/_tslib.js.map +1 -1
  35. package/esm/browser/authn/util/poll.js +5 -4
  36. package/esm/browser/authn/util/poll.js.map +1 -1
  37. package/esm/browser/browser/fingerprint.js +2 -0
  38. package/esm/browser/browser/fingerprint.js.map +1 -1
  39. package/esm/browser/constants.js +3 -1
  40. package/esm/browser/constants.js.map +1 -1
  41. package/esm/browser/core/AuthStateManager.js +2 -0
  42. package/esm/browser/core/AuthStateManager.js.map +1 -1
  43. package/esm/browser/core/options.js +2 -0
  44. package/esm/browser/core/options.js.map +1 -1
  45. package/esm/browser/exports/exports/authn.js +1 -1
  46. package/esm/browser/exports/exports/core.js +1 -1
  47. package/esm/browser/exports/exports/default.js +1 -1
  48. package/esm/browser/exports/exports/idx.js +1 -1
  49. package/esm/browser/exports/exports/myaccount.js +1 -1
  50. package/esm/browser/features.js +14 -1
  51. package/esm/browser/features.js.map +1 -1
  52. package/esm/browser/http/OktaUserAgent.js +2 -2
  53. package/esm/browser/http/OktaUserAgent.js.map +1 -1
  54. package/esm/browser/http/request.js +72 -4
  55. package/esm/browser/http/request.js.map +1 -1
  56. package/esm/browser/idx/cancel.js +1 -0
  57. package/esm/browser/idx/cancel.js.map +1 -1
  58. package/esm/browser/idx/factory/api.js +2 -0
  59. package/esm/browser/idx/factory/api.js.map +1 -1
  60. package/esm/browser/idx/flow/AccountUnlockFlow.js +1 -0
  61. package/esm/browser/idx/flow/AccountUnlockFlow.js.map +1 -1
  62. package/esm/browser/idx/flow/AuthenticationFlow.js +1 -0
  63. package/esm/browser/idx/flow/AuthenticationFlow.js.map +1 -1
  64. package/esm/browser/idx/flow/PasswordRecoveryFlow.js +1 -0
  65. package/esm/browser/idx/flow/PasswordRecoveryFlow.js.map +1 -1
  66. package/esm/browser/idx/flow/RegistrationFlow.js +1 -0
  67. package/esm/browser/idx/flow/RegistrationFlow.js.map +1 -1
  68. package/esm/browser/idx/idxState/v1/generateIdxAction.js +8 -3
  69. package/esm/browser/idx/idxState/v1/generateIdxAction.js.map +1 -1
  70. package/esm/browser/idx/interact.js +1 -0
  71. package/esm/browser/idx/interact.js.map +1 -1
  72. package/esm/browser/idx/introspect.js +1 -0
  73. package/esm/browser/idx/introspect.js.map +1 -1
  74. package/esm/browser/idx/recoverPassword.js +1 -0
  75. package/esm/browser/idx/recoverPassword.js.map +1 -1
  76. package/esm/browser/idx/transactionMeta.js +2 -0
  77. package/esm/browser/idx/transactionMeta.js.map +1 -1
  78. package/esm/browser/myaccount/emailApi.js +1 -0
  79. package/esm/browser/myaccount/emailApi.js.map +1 -1
  80. package/esm/browser/myaccount/passwordApi.js +1 -0
  81. package/esm/browser/myaccount/passwordApi.js.map +1 -1
  82. package/esm/browser/myaccount/phoneApi.js +1 -0
  83. package/esm/browser/myaccount/phoneApi.js.map +1 -1
  84. package/esm/browser/myaccount/profileApi.js +1 -0
  85. package/esm/browser/myaccount/profileApi.js.map +1 -1
  86. package/esm/browser/oidc/TokenManager.js +1 -0
  87. package/esm/browser/oidc/TokenManager.js.map +1 -1
  88. package/esm/browser/oidc/enrollAuthenticator.js +1 -0
  89. package/esm/browser/oidc/enrollAuthenticator.js.map +1 -1
  90. package/esm/browser/oidc/exchangeCodeForTokens.js +1 -0
  91. package/esm/browser/oidc/exchangeCodeForTokens.js.map +1 -1
  92. package/esm/browser/oidc/getWithPopup.js +1 -0
  93. package/esm/browser/oidc/getWithPopup.js.map +1 -1
  94. package/esm/browser/oidc/handleOAuthResponse.js +1 -0
  95. package/esm/browser/oidc/handleOAuthResponse.js.map +1 -1
  96. package/esm/browser/oidc/mixin/minimal.js +1 -0
  97. package/esm/browser/oidc/mixin/minimal.js.map +1 -1
  98. package/esm/browser/oidc/parseFromUrl.js +1 -0
  99. package/esm/browser/oidc/parseFromUrl.js.map +1 -1
  100. package/esm/browser/oidc/renewTokens.js +1 -0
  101. package/esm/browser/oidc/renewTokens.js.map +1 -1
  102. package/esm/browser/package.json +1 -1
  103. package/esm/node/_virtual/_tslib.js +7 -2
  104. package/esm/node/_virtual/_tslib.js.map +1 -1
  105. package/esm/node/authn/util/poll.js +5 -4
  106. package/esm/node/authn/util/poll.js.map +1 -1
  107. package/esm/node/browser/fingerprint.js +2 -0
  108. package/esm/node/browser/fingerprint.js.map +1 -1
  109. package/esm/node/constants.js +3 -1
  110. package/esm/node/constants.js.map +1 -1
  111. package/esm/node/core/AuthStateManager.js +2 -0
  112. package/esm/node/core/AuthStateManager.js.map +1 -1
  113. package/esm/node/core/options.js +2 -0
  114. package/esm/node/core/options.js.map +1 -1
  115. package/esm/node/exports/exports/authn.js +1 -1
  116. package/esm/node/exports/exports/core.js +1 -1
  117. package/esm/node/exports/exports/default.js +1 -1
  118. package/esm/node/exports/exports/idx.js +1 -1
  119. package/esm/node/exports/exports/myaccount.js +1 -1
  120. package/esm/node/features.js +14 -1
  121. package/esm/node/features.js.map +1 -1
  122. package/esm/node/http/OktaUserAgent.js +2 -2
  123. package/esm/node/http/OktaUserAgent.js.map +1 -1
  124. package/esm/node/http/request.js +72 -4
  125. package/esm/node/http/request.js.map +1 -1
  126. package/esm/node/idx/cancel.js +1 -0
  127. package/esm/node/idx/cancel.js.map +1 -1
  128. package/esm/node/idx/factory/api.js +2 -0
  129. package/esm/node/idx/factory/api.js.map +1 -1
  130. package/esm/node/idx/flow/AccountUnlockFlow.js +1 -0
  131. package/esm/node/idx/flow/AccountUnlockFlow.js.map +1 -1
  132. package/esm/node/idx/flow/AuthenticationFlow.js +1 -0
  133. package/esm/node/idx/flow/AuthenticationFlow.js.map +1 -1
  134. package/esm/node/idx/flow/PasswordRecoveryFlow.js +1 -0
  135. package/esm/node/idx/flow/PasswordRecoveryFlow.js.map +1 -1
  136. package/esm/node/idx/flow/RegistrationFlow.js +1 -0
  137. package/esm/node/idx/flow/RegistrationFlow.js.map +1 -1
  138. package/esm/node/idx/idxState/v1/generateIdxAction.js +8 -3
  139. package/esm/node/idx/idxState/v1/generateIdxAction.js.map +1 -1
  140. package/esm/node/idx/interact.js +1 -0
  141. package/esm/node/idx/interact.js.map +1 -1
  142. package/esm/node/idx/introspect.js +1 -0
  143. package/esm/node/idx/introspect.js.map +1 -1
  144. package/esm/node/idx/recoverPassword.js +1 -0
  145. package/esm/node/idx/recoverPassword.js.map +1 -1
  146. package/esm/node/idx/transactionMeta.js +2 -0
  147. package/esm/node/idx/transactionMeta.js.map +1 -1
  148. package/esm/node/myaccount/emailApi.js +1 -0
  149. package/esm/node/myaccount/emailApi.js.map +1 -1
  150. package/esm/node/myaccount/passwordApi.js +1 -0
  151. package/esm/node/myaccount/passwordApi.js.map +1 -1
  152. package/esm/node/myaccount/phoneApi.js +1 -0
  153. package/esm/node/myaccount/phoneApi.js.map +1 -1
  154. package/esm/node/myaccount/profileApi.js +1 -0
  155. package/esm/node/myaccount/profileApi.js.map +1 -1
  156. package/esm/node/oidc/TokenManager.js +1 -0
  157. package/esm/node/oidc/TokenManager.js.map +1 -1
  158. package/esm/node/oidc/enrollAuthenticator.js +1 -0
  159. package/esm/node/oidc/enrollAuthenticator.js.map +1 -1
  160. package/esm/node/oidc/exchangeCodeForTokens.js +1 -0
  161. package/esm/node/oidc/exchangeCodeForTokens.js.map +1 -1
  162. package/esm/node/oidc/getWithPopup.js +1 -0
  163. package/esm/node/oidc/getWithPopup.js.map +1 -1
  164. package/esm/node/oidc/handleOAuthResponse.js +1 -0
  165. package/esm/node/oidc/handleOAuthResponse.js.map +1 -1
  166. package/esm/node/oidc/mixin/minimal.js +1 -0
  167. package/esm/node/oidc/mixin/minimal.js.map +1 -1
  168. package/esm/node/oidc/parseFromUrl.js +1 -0
  169. package/esm/node/oidc/parseFromUrl.js.map +1 -1
  170. package/esm/node/oidc/renewTokens.js +1 -0
  171. package/esm/node/oidc/renewTokens.js.map +1 -1
  172. package/esm/node/package.json +1 -1
  173. package/package.json +7 -7
  174. package/types/lib/base/types.d.ts +1 -0
  175. package/types/lib/constants.d.ts +2 -0
  176. package/types/lib/features.d.ts +1 -0
  177. package/types/lib/http/types.d.ts +1 -0
  178. package/umd/authn.js +1 -1
  179. package/umd/authn.js.map +1 -1
  180. package/umd/core.js +1 -1
  181. package/umd/core.js.map +1 -1
  182. package/umd/default.js +1 -1
  183. package/umd/default.js.map +1 -1
  184. package/umd/idx.js +1 -1
  185. package/umd/idx.js.map +1 -1
  186. package/umd/myaccount.js +1 -1
  187. package/umd/myaccount.js.map +1 -1
package/CHANGELOG.md CHANGED
@@ -1,8 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ # 7.10.1
4
+
5
+ ### Other
6
+
7
+ - [#1562](https://github.com/okta/okta-auth-js/pull/1562) chore: Remove `ua-parser-js`. Change `isMobileSafari18` to `isSafari18`
8
+
9
+ # 7.10.0
10
+
11
+ ### Bug Fix
12
+
13
+ - [#1552](https://github.com/okta/okta-auth-js/pull/1552) fix: start poll request when document is visible and awaken in Mobile Safari 18.x
14
+
3
15
  # 7.8.1
4
16
 
5
17
  ### Bug Fix
18
+
6
19
  - [#1547](https://github.com/okta/okta-auth-js/pull/1547) fix: replaces `jsonpath-plus` module
7
20
  - Address https://security.snyk.io/vuln/SNYK-JS-JSONPATHPLUS-7945884
8
21
 
@@ -68,12 +68,13 @@ function getPollFn(sdk, res, ref) {
68
68
  var href = pollLink.href + (0, _util.toQueryString)(opts);
69
69
  return (0, _http.post)(sdk, href, (0, _stateToken.getStateToken)(res), {
70
70
  saveAuthnState: false,
71
- withCredentials: true
71
+ withCredentials: true,
72
+ pollingIntent: true
72
73
  });
73
74
  }
74
75
  const delayNextPoll = ms => {
75
76
  // no need for extra logic in non-iOS environments, just continue polling
76
- if (!(0, _features.isIOS)()) {
77
+ if (!(0, _features.isSafari18)()) {
77
78
  return (0, _util.delay)(ms);
78
79
  }
79
80
  let timeoutId;
@@ -114,7 +115,7 @@ function getPollFn(sdk, res, ref) {
114
115
  }
115
116
 
116
117
  // don't trigger polling request if page is hidden wait until window is visible again
117
- if ((0, _features.isIOS)() && document.hidden) {
118
+ if ((0, _features.isSafari18)() && document.hidden) {
118
119
  let handler;
119
120
  return new Promise(resolve => {
120
121
  handler = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"poll.js","names":["getPollFn","sdk","res","ref","options","delay","rememberDevice","autoPush","transactionCallBack","isNumber","isObject","DEFAULT_POLLING_DELAY","pollLink","getLink","pollFn","opts","e","Promise","reject","AuthSdkError","undefined","href","toQueryString","post","getStateToken","saveAuthnState","withCredentials","delayNextPoll","ms","isIOS","delayFn","timeoutId","cancelableDelay","resolve","setTimeout","delayForFocus","pageVisibilityHandler","pageDidHide","document","hidden","clearTimeout","addEventListener","then","removeEventListener","race","isPolling","retryCount","recursivePoll","AuthPollStopError","handler","pollRes","factorResult","tx","createTransaction","catch","err","xhr","status","delayLength","Math","pow"],"sources":["../../../../lib/authn/util/poll.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\n\nimport { post } from '../../http';\nimport { isNumber, isObject, getLink, toQueryString, delay as delayFn } from '../../util';\nimport { DEFAULT_POLLING_DELAY } from '../../constants';\nimport AuthSdkError from '../../errors/AuthSdkError';\nimport AuthPollStopError from '../../errors/AuthPollStopError';\nimport { AuthnTransactionState } from '../types';\nimport { getStateToken } from './stateToken';\nimport { isIOS } from '../../features';\n\ninterface PollOptions {\n delay?: number;\n rememberDevice?: boolean;\n autoPush?: boolean;\n transactionCallBack?: (AuthnTransactionState) => void;\n}\n\nexport function getPollFn(sdk, res: AuthnTransactionState, ref) {\n return function (options: PollOptions | number) {\n var delay;\n var rememberDevice;\n var autoPush;\n var transactionCallBack;\n\n if (isNumber(options)) {\n delay = options;\n } else if (isObject(options)) {\n options = options as PollOptions;\n delay = options.delay;\n rememberDevice = options.rememberDevice;\n autoPush = options.autoPush;\n transactionCallBack = options.transactionCallBack;\n }\n\n if (!delay && delay !== 0) {\n delay = DEFAULT_POLLING_DELAY;\n }\n\n // Get the poll function\n var pollLink = getLink(res, 'next', 'poll');\n // eslint-disable-next-line complexity\n function pollFn() {\n var opts = {} as PollOptions;\n if (typeof autoPush === 'function') {\n try {\n opts.autoPush = !!autoPush();\n }\n catch (e) {\n return Promise.reject(new AuthSdkError('AutoPush resulted in an error.'));\n }\n }\n else if (autoPush !== undefined && autoPush !== null) {\n opts.autoPush = !!autoPush;\n }\n if (typeof rememberDevice === 'function') {\n try {\n opts.rememberDevice = !!rememberDevice();\n }\n catch (e) {\n return Promise.reject(new AuthSdkError('RememberDevice resulted in an error.'));\n }\n }\n else if (rememberDevice !== undefined && rememberDevice !== null) {\n opts.rememberDevice = !!rememberDevice;\n }\n\n var href = pollLink.href + toQueryString(opts);\n return post(sdk, href, getStateToken(res), {\n saveAuthnState: false,\n withCredentials: true\n });\n }\n\n const delayNextPoll = (ms) => {\n // no need for extra logic in non-iOS environments, just continue polling\n if (!isIOS()) {\n return delayFn(ms);\n }\n\n let timeoutId: ReturnType<typeof setTimeout>;\n const cancelableDelay = () => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(resolve, ms);\n });\n };\n\n const delayForFocus = () => {\n let pageVisibilityHandler;\n return new Promise<void>((resolve) => {\n let pageDidHide = false;\n pageVisibilityHandler = () => {\n if (document.hidden) {\n clearTimeout(timeoutId);\n pageDidHide = true;\n }\n else if (pageDidHide) {\n resolve();\n }\n };\n\n document.addEventListener('visibilitychange', pageVisibilityHandler);\n })\n .then(() => {\n document.removeEventListener('visibilitychange', pageVisibilityHandler);\n });\n };\n\n return Promise.race([\n // this function will never resolve if the page changes to hidden because the timeout gets cleared\n cancelableDelay(),\n // this function won't resolve until the page becomes visible after being hidden\n delayForFocus(),\n ]);\n };\n\n ref.isPolling = true;\n\n var retryCount = 0;\n var recursivePoll = function () {\n // If the poll was manually stopped during the delay\n if (!ref.isPolling) {\n return Promise.reject(new AuthPollStopError());\n }\n\n // don't trigger polling request if page is hidden wait until window is visible again\n if (isIOS() && document.hidden) {\n let handler;\n return new Promise<void>((resolve) => {\n handler = () => {\n if (!document.hidden) {\n resolve();\n }\n };\n document.addEventListener('visibilitychange', handler);\n })\n .then(() => {\n document.removeEventListener('visibilitychange', handler);\n return recursivePoll();\n });\n }\n\n return pollFn()\n .then(function (pollRes) {\n // Reset our retry counter on success\n retryCount = 0;\n\n // If we're still waiting\n if (pollRes.factorResult && pollRes.factorResult === 'WAITING') {\n\n // If the poll was manually stopped while the pollFn was called\n if (!ref.isPolling) {\n throw new AuthPollStopError();\n }\n\n if (typeof transactionCallBack === 'function') {\n transactionCallBack(pollRes);\n }\n\n // Continue poll\n return delayNextPoll(delay).then(recursivePoll);\n\n } else {\n // Any non-waiting result, even if polling was stopped\n // during a request, will return\n ref.isPolling = false;\n return sdk.tx.createTransaction(pollRes);\n }\n })\n .catch(function(err) {\n // Exponential backoff, up to 16 seconds\n if (err.xhr &&\n (err.xhr.status === 0 || err.xhr.status === 429) &&\n retryCount <= 4) {\n var delayLength = Math.pow(2, retryCount) * 1000;\n retryCount++;\n return delayNextPoll(delayLength)\n .then(recursivePoll);\n }\n throw err;\n });\n };\n return recursivePoll()\n .catch(function(err) {\n ref.isPolling = false;\n throw err;\n });\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"poll.js","names":["getPollFn","sdk","res","ref","options","delay","rememberDevice","autoPush","transactionCallBack","isNumber","isObject","DEFAULT_POLLING_DELAY","pollLink","getLink","pollFn","opts","e","Promise","reject","AuthSdkError","undefined","href","toQueryString","post","getStateToken","saveAuthnState","withCredentials","pollingIntent","delayNextPoll","ms","isSafari18","delayFn","timeoutId","cancelableDelay","resolve","setTimeout","delayForFocus","pageVisibilityHandler","pageDidHide","document","hidden","clearTimeout","addEventListener","then","removeEventListener","race","isPolling","retryCount","recursivePoll","AuthPollStopError","handler","pollRes","factorResult","tx","createTransaction","catch","err","xhr","status","delayLength","Math","pow"],"sources":["../../../../lib/authn/util/poll.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\n\nimport { post } from '../../http';\nimport { isNumber, isObject, getLink, toQueryString, delay as delayFn } from '../../util';\nimport { DEFAULT_POLLING_DELAY } from '../../constants';\nimport AuthSdkError from '../../errors/AuthSdkError';\nimport AuthPollStopError from '../../errors/AuthPollStopError';\nimport { AuthnTransactionState } from '../types';\nimport { getStateToken } from './stateToken';\nimport { isSafari18 } from '../../features';\n\ninterface PollOptions {\n delay?: number;\n rememberDevice?: boolean;\n autoPush?: boolean;\n transactionCallBack?: (AuthnTransactionState) => void;\n}\n\nexport function getPollFn(sdk, res: AuthnTransactionState, ref) {\n return function (options: PollOptions | number) {\n var delay;\n var rememberDevice;\n var autoPush;\n var transactionCallBack;\n\n if (isNumber(options)) {\n delay = options;\n } else if (isObject(options)) {\n options = options as PollOptions;\n delay = options.delay;\n rememberDevice = options.rememberDevice;\n autoPush = options.autoPush;\n transactionCallBack = options.transactionCallBack;\n }\n\n if (!delay && delay !== 0) {\n delay = DEFAULT_POLLING_DELAY;\n }\n\n // Get the poll function\n var pollLink = getLink(res, 'next', 'poll');\n // eslint-disable-next-line complexity\n function pollFn() {\n var opts = {} as PollOptions;\n if (typeof autoPush === 'function') {\n try {\n opts.autoPush = !!autoPush();\n }\n catch (e) {\n return Promise.reject(new AuthSdkError('AutoPush resulted in an error.'));\n }\n }\n else if (autoPush !== undefined && autoPush !== null) {\n opts.autoPush = !!autoPush;\n }\n if (typeof rememberDevice === 'function') {\n try {\n opts.rememberDevice = !!rememberDevice();\n }\n catch (e) {\n return Promise.reject(new AuthSdkError('RememberDevice resulted in an error.'));\n }\n }\n else if (rememberDevice !== undefined && rememberDevice !== null) {\n opts.rememberDevice = !!rememberDevice;\n }\n\n var href = pollLink.href + toQueryString(opts);\n return post(sdk, href, getStateToken(res), {\n saveAuthnState: false,\n withCredentials: true,\n pollingIntent: true,\n });\n }\n\n const delayNextPoll = (ms) => {\n // no need for extra logic in non-iOS environments, just continue polling\n if (!isSafari18()) {\n return delayFn(ms);\n }\n\n let timeoutId: ReturnType<typeof setTimeout>;\n const cancelableDelay = () => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(resolve, ms);\n });\n };\n\n const delayForFocus = () => {\n let pageVisibilityHandler;\n return new Promise<void>((resolve) => {\n let pageDidHide = false;\n pageVisibilityHandler = () => {\n if (document.hidden) {\n clearTimeout(timeoutId);\n pageDidHide = true;\n }\n else if (pageDidHide) {\n resolve();\n }\n };\n\n document.addEventListener('visibilitychange', pageVisibilityHandler);\n })\n .then(() => {\n document.removeEventListener('visibilitychange', pageVisibilityHandler);\n });\n };\n\n return Promise.race([\n // this function will never resolve if the page changes to hidden because the timeout gets cleared\n cancelableDelay(),\n // this function won't resolve until the page becomes visible after being hidden\n delayForFocus(),\n ]);\n };\n\n ref.isPolling = true;\n\n var retryCount = 0;\n var recursivePoll = function () {\n // If the poll was manually stopped during the delay\n if (!ref.isPolling) {\n return Promise.reject(new AuthPollStopError());\n }\n\n // don't trigger polling request if page is hidden wait until window is visible again\n if (isSafari18() && document.hidden) {\n let handler;\n return new Promise<void>((resolve) => {\n handler = () => {\n if (!document.hidden) {\n resolve();\n }\n };\n document.addEventListener('visibilitychange', handler);\n })\n .then(() => {\n document.removeEventListener('visibilitychange', handler);\n return recursivePoll();\n });\n }\n\n return pollFn()\n .then(function (pollRes) {\n // Reset our retry counter on success\n retryCount = 0;\n\n // If we're still waiting\n if (pollRes.factorResult && pollRes.factorResult === 'WAITING') {\n\n // If the poll was manually stopped while the pollFn was called\n if (!ref.isPolling) {\n throw new AuthPollStopError();\n }\n\n if (typeof transactionCallBack === 'function') {\n transactionCallBack(pollRes);\n }\n\n // Continue poll\n return delayNextPoll(delay).then(recursivePoll);\n\n } else {\n // Any non-waiting result, even if polling was stopped\n // during a request, will return\n ref.isPolling = false;\n return sdk.tx.createTransaction(pollRes);\n }\n })\n .catch(function(err) {\n // Exponential backoff, up to 16 seconds\n if (err.xhr &&\n (err.xhr.status === 0 || err.xhr.status === 429) &&\n retryCount <= 4) {\n var delayLength = Math.pow(2, retryCount) * 1000;\n retryCount++;\n return delayNextPoll(delayLength)\n .then(recursivePoll);\n }\n throw err;\n });\n };\n return recursivePoll()\n .catch(function(err) {\n ref.isPolling = false;\n throw err;\n });\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../lib/base/types.ts"],"sourcesContent":["/*!\n * Copyright (c) 2021-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport * as constants from '../constants';\n\nexport declare class EventEmitter {\n on (event: string, callback: (...args: any[]) => any, ctx?: any): EventEmitter;\n once (event: string, callback: (...args: any[]) => any, ctx?: any): EventEmitter;\n emit (event: string, ...args: any[]): EventEmitter;\n off (event: string, callback?: (...args: any[]) => any): EventEmitter;\n}\n\nexport interface FeaturesAPI {\n isLocalhost(): boolean;\n isHTTPS(): boolean;\n isPopupPostMessageSupported(): boolean;\n hasTextEncoder(): boolean;\n isTokenVerifySupported(): boolean;\n isPKCESupported(): boolean;\n isIE11OrLess(): boolean;\n isDPoPSupported(): boolean;\n isIOS(): boolean;\n}\n\n\nexport interface FingerprintOptions {\n timeout?: number;\n container?: Element | null;\n}\nexport type FingerprintAPI = (options?: FingerprintOptions) => Promise<string>;\n\n// options that can be passed to AuthJS\nexport interface OktaAuthBaseOptions {\n devMode?: boolean;\n}\n\n// a class that constructs options\nexport interface OktaAuthOptionsConstructor<O extends OktaAuthBaseOptions = OktaAuthBaseOptions> {\n new(args: any): O;\n}\n\n// a \"base\" instance of AuthJS\nexport interface OktaAuthBaseInterface<O extends OktaAuthBaseOptions = OktaAuthBaseOptions> {\n options: O;\n emitter: EventEmitter;\n features: FeaturesAPI;\n}\n\n// a constructor that returns an instance of AuthJS\nexport interface OktaAuthConstructor\n<\n I extends OktaAuthBaseInterface = OktaAuthBaseInterface\n> \n{\n new(...args: any[]): I;\n features: FeaturesAPI; // static class member\n constants: typeof constants;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../lib/base/types.ts"],"sourcesContent":["/*!\n * Copyright (c) 2021-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport * as constants from '../constants';\n\nexport declare class EventEmitter {\n on (event: string, callback: (...args: any[]) => any, ctx?: any): EventEmitter;\n once (event: string, callback: (...args: any[]) => any, ctx?: any): EventEmitter;\n emit (event: string, ...args: any[]): EventEmitter;\n off (event: string, callback?: (...args: any[]) => any): EventEmitter;\n}\n\nexport interface FeaturesAPI {\n isLocalhost(): boolean;\n isHTTPS(): boolean;\n isPopupPostMessageSupported(): boolean;\n hasTextEncoder(): boolean;\n isTokenVerifySupported(): boolean;\n isPKCESupported(): boolean;\n isIE11OrLess(): boolean;\n isDPoPSupported(): boolean;\n isIOS(): boolean;\n isSafari18(): boolean;\n}\n\n\nexport interface FingerprintOptions {\n timeout?: number;\n container?: Element | null;\n}\nexport type FingerprintAPI = (options?: FingerprintOptions) => Promise<string>;\n\n// options that can be passed to AuthJS\nexport interface OktaAuthBaseOptions {\n devMode?: boolean;\n}\n\n// a class that constructs options\nexport interface OktaAuthOptionsConstructor<O extends OktaAuthBaseOptions = OktaAuthBaseOptions> {\n new(args: any): O;\n}\n\n// a \"base\" instance of AuthJS\nexport interface OktaAuthBaseInterface<O extends OktaAuthBaseOptions = OktaAuthBaseOptions> {\n options: O;\n emitter: EventEmitter;\n features: FeaturesAPI;\n}\n\n// a constructor that returns an instance of AuthJS\nexport interface OktaAuthConstructor\n<\n I extends OktaAuthBaseInterface = OktaAuthBaseInterface\n> \n{\n new(...args: any[]): I;\n features: FeaturesAPI; // static class member\n constants: typeof constants;\n}\n"],"mappings":""}
package/cjs/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- exports.TRANSACTION_STORAGE_NAME = exports.TOKEN_STORAGE_NAME = exports.STATE_TOKEN_KEY_NAME = exports.SHARED_TRANSACTION_STORAGE_NAME = exports.REFRESH_TOKEN_STORAGE_KEY = exports.REFERRER_PATH_STORAGE_KEY = exports.PKCE_STORAGE_NAME = exports.ORIGINAL_URI_STORAGE_NAME = exports.MIN_VERIFIER_LENGTH = exports.MAX_VERIFIER_LENGTH = exports.ID_TOKEN_STORAGE_KEY = exports.IDX_RESPONSE_STORAGE_NAME = exports.IDX_API_VERSION = exports.DEFAULT_POLLING_DELAY = exports.DEFAULT_MAX_CLOCK_SKEW = exports.DEFAULT_CODE_CHALLENGE_METHOD = exports.DEFAULT_CACHE_DURATION = exports.CACHE_STORAGE_NAME = exports.ACCESS_TOKEN_STORAGE_KEY = void 0;
3
+ exports.TRANSACTION_STORAGE_NAME = exports.TOKEN_STORAGE_NAME = exports.STATE_TOKEN_KEY_NAME = exports.SHARED_TRANSACTION_STORAGE_NAME = exports.REFRESH_TOKEN_STORAGE_KEY = exports.REFERRER_PATH_STORAGE_KEY = exports.PKCE_STORAGE_NAME = exports.ORIGINAL_URI_STORAGE_NAME = exports.MIN_VERIFIER_LENGTH = exports.MAX_VERIFIER_LENGTH = exports.IOS_PAGE_AWAKEN_TIMEOUT = exports.IOS_MAX_RETRY_COUNT = exports.ID_TOKEN_STORAGE_KEY = exports.IDX_RESPONSE_STORAGE_NAME = exports.IDX_API_VERSION = exports.DEFAULT_POLLING_DELAY = exports.DEFAULT_MAX_CLOCK_SKEW = exports.DEFAULT_CODE_CHALLENGE_METHOD = exports.DEFAULT_CACHE_DURATION = exports.CACHE_STORAGE_NAME = exports.ACCESS_TOKEN_STORAGE_KEY = void 0;
4
4
  /*!
5
5
  * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
6
6
  * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
@@ -17,6 +17,10 @@ const STATE_TOKEN_KEY_NAME = 'oktaStateToken';
17
17
  exports.STATE_TOKEN_KEY_NAME = STATE_TOKEN_KEY_NAME;
18
18
  const DEFAULT_POLLING_DELAY = 500;
19
19
  exports.DEFAULT_POLLING_DELAY = DEFAULT_POLLING_DELAY;
20
+ const IOS_PAGE_AWAKEN_TIMEOUT = 500;
21
+ exports.IOS_PAGE_AWAKEN_TIMEOUT = IOS_PAGE_AWAKEN_TIMEOUT;
22
+ const IOS_MAX_RETRY_COUNT = 3;
23
+ exports.IOS_MAX_RETRY_COUNT = IOS_MAX_RETRY_COUNT;
20
24
  const DEFAULT_MAX_CLOCK_SKEW = 300;
21
25
  exports.DEFAULT_MAX_CLOCK_SKEW = DEFAULT_MAX_CLOCK_SKEW;
22
26
  const DEFAULT_CACHE_DURATION = 86400;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["STATE_TOKEN_KEY_NAME","DEFAULT_POLLING_DELAY","DEFAULT_MAX_CLOCK_SKEW","DEFAULT_CACHE_DURATION","TOKEN_STORAGE_NAME","CACHE_STORAGE_NAME","PKCE_STORAGE_NAME","TRANSACTION_STORAGE_NAME","SHARED_TRANSACTION_STORAGE_NAME","ORIGINAL_URI_STORAGE_NAME","IDX_RESPONSE_STORAGE_NAME","ACCESS_TOKEN_STORAGE_KEY","ID_TOKEN_STORAGE_KEY","REFRESH_TOKEN_STORAGE_KEY","REFERRER_PATH_STORAGE_KEY","MIN_VERIFIER_LENGTH","MAX_VERIFIER_LENGTH","DEFAULT_CODE_CHALLENGE_METHOD","IDX_API_VERSION"],"sources":["../../lib/constants.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport const STATE_TOKEN_KEY_NAME = 'oktaStateToken';\nexport const DEFAULT_POLLING_DELAY = 500;\nexport const DEFAULT_MAX_CLOCK_SKEW = 300;\nexport const DEFAULT_CACHE_DURATION = 86400;\nexport const TOKEN_STORAGE_NAME = 'okta-token-storage';\nexport const CACHE_STORAGE_NAME = 'okta-cache-storage';\nexport const PKCE_STORAGE_NAME = 'okta-pkce-storage';\nexport const TRANSACTION_STORAGE_NAME = 'okta-transaction-storage';\nexport const SHARED_TRANSACTION_STORAGE_NAME = 'okta-shared-transaction-storage';\nexport const ORIGINAL_URI_STORAGE_NAME = 'okta-original-uri-storage';\nexport const IDX_RESPONSE_STORAGE_NAME = 'okta-idx-response-storage';\nexport const ACCESS_TOKEN_STORAGE_KEY = 'accessToken';\nexport const ID_TOKEN_STORAGE_KEY = 'idToken';\nexport const REFRESH_TOKEN_STORAGE_KEY = 'refreshToken';\nexport const REFERRER_PATH_STORAGE_KEY = 'referrerPath';\n\n// Code verifier: Random URL-safe string with a minimum length of 43 characters.\n// Code challenge: Base64 URL-encoded SHA-256 hash of the code verifier.\nexport const MIN_VERIFIER_LENGTH = 43;\nexport const MAX_VERIFIER_LENGTH = 128;\nexport const DEFAULT_CODE_CHALLENGE_METHOD = 'S256';\n\nexport const IDX_API_VERSION = '1.0.0';"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMA,oBAAoB,GAAG,gBAAgB;AAAC;AAC9C,MAAMC,qBAAqB,GAAG,GAAG;AAAC;AAClC,MAAMC,sBAAsB,GAAG,GAAG;AAAC;AACnC,MAAMC,sBAAsB,GAAG,KAAK;AAAC;AACrC,MAAMC,kBAAkB,GAAG,oBAAoB;AAAC;AAChD,MAAMC,kBAAkB,GAAG,oBAAoB;AAAC;AAChD,MAAMC,iBAAiB,GAAG,mBAAmB;AAAC;AAC9C,MAAMC,wBAAwB,GAAG,0BAA0B;AAAC;AAC5D,MAAMC,+BAA+B,GAAG,iCAAiC;AAAC;AAC1E,MAAMC,yBAAyB,GAAG,2BAA2B;AAAC;AAC9D,MAAMC,yBAAyB,GAAG,2BAA2B;AAAC;AAC9D,MAAMC,wBAAwB,GAAG,aAAa;AAAC;AAC/C,MAAMC,oBAAoB,GAAI,SAAS;AAAC;AACxC,MAAMC,yBAAyB,GAAI,cAAc;AAAC;AAClD,MAAMC,yBAAyB,GAAG,cAAc;;AAEvD;AACA;AAAA;AACO,MAAMC,mBAAmB,GAAG,EAAE;AAAC;AAC/B,MAAMC,mBAAmB,GAAG,GAAG;AAAC;AAChC,MAAMC,6BAA6B,GAAG,MAAM;AAAC;AAE7C,MAAMC,eAAe,GAAG,OAAO;AAAC"}
1
+ {"version":3,"file":"constants.js","names":["STATE_TOKEN_KEY_NAME","DEFAULT_POLLING_DELAY","IOS_PAGE_AWAKEN_TIMEOUT","IOS_MAX_RETRY_COUNT","DEFAULT_MAX_CLOCK_SKEW","DEFAULT_CACHE_DURATION","TOKEN_STORAGE_NAME","CACHE_STORAGE_NAME","PKCE_STORAGE_NAME","TRANSACTION_STORAGE_NAME","SHARED_TRANSACTION_STORAGE_NAME","ORIGINAL_URI_STORAGE_NAME","IDX_RESPONSE_STORAGE_NAME","ACCESS_TOKEN_STORAGE_KEY","ID_TOKEN_STORAGE_KEY","REFRESH_TOKEN_STORAGE_KEY","REFERRER_PATH_STORAGE_KEY","MIN_VERIFIER_LENGTH","MAX_VERIFIER_LENGTH","DEFAULT_CODE_CHALLENGE_METHOD","IDX_API_VERSION"],"sources":["../../lib/constants.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport const STATE_TOKEN_KEY_NAME = 'oktaStateToken';\nexport const DEFAULT_POLLING_DELAY = 500;\nexport const IOS_PAGE_AWAKEN_TIMEOUT = 500;\nexport const IOS_MAX_RETRY_COUNT = 3;\nexport const DEFAULT_MAX_CLOCK_SKEW = 300;\nexport const DEFAULT_CACHE_DURATION = 86400;\nexport const TOKEN_STORAGE_NAME = 'okta-token-storage';\nexport const CACHE_STORAGE_NAME = 'okta-cache-storage';\nexport const PKCE_STORAGE_NAME = 'okta-pkce-storage';\nexport const TRANSACTION_STORAGE_NAME = 'okta-transaction-storage';\nexport const SHARED_TRANSACTION_STORAGE_NAME = 'okta-shared-transaction-storage';\nexport const ORIGINAL_URI_STORAGE_NAME = 'okta-original-uri-storage';\nexport const IDX_RESPONSE_STORAGE_NAME = 'okta-idx-response-storage';\nexport const ACCESS_TOKEN_STORAGE_KEY = 'accessToken';\nexport const ID_TOKEN_STORAGE_KEY = 'idToken';\nexport const REFRESH_TOKEN_STORAGE_KEY = 'refreshToken';\nexport const REFERRER_PATH_STORAGE_KEY = 'referrerPath';\n\n// Code verifier: Random URL-safe string with a minimum length of 43 characters.\n// Code challenge: Base64 URL-encoded SHA-256 hash of the code verifier.\nexport const MIN_VERIFIER_LENGTH = 43;\nexport const MAX_VERIFIER_LENGTH = 128;\nexport const DEFAULT_CODE_CHALLENGE_METHOD = 'S256';\n\nexport const IDX_API_VERSION = '1.0.0';"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMA,oBAAoB,GAAG,gBAAgB;AAAC;AAC9C,MAAMC,qBAAqB,GAAG,GAAG;AAAC;AAClC,MAAMC,uBAAuB,GAAG,GAAG;AAAC;AACpC,MAAMC,mBAAmB,GAAG,CAAC;AAAC;AAC9B,MAAMC,sBAAsB,GAAG,GAAG;AAAC;AACnC,MAAMC,sBAAsB,GAAG,KAAK;AAAC;AACrC,MAAMC,kBAAkB,GAAG,oBAAoB;AAAC;AAChD,MAAMC,kBAAkB,GAAG,oBAAoB;AAAC;AAChD,MAAMC,iBAAiB,GAAG,mBAAmB;AAAC;AAC9C,MAAMC,wBAAwB,GAAG,0BAA0B;AAAC;AAC5D,MAAMC,+BAA+B,GAAG,iCAAiC;AAAC;AAC1E,MAAMC,yBAAyB,GAAG,2BAA2B;AAAC;AAC9D,MAAMC,yBAAyB,GAAG,2BAA2B;AAAC;AAC9D,MAAMC,wBAAwB,GAAG,aAAa;AAAC;AAC/C,MAAMC,oBAAoB,GAAI,SAAS;AAAC;AACxC,MAAMC,yBAAyB,GAAI,cAAc;AAAC;AAClD,MAAMC,yBAAyB,GAAG,cAAc;;AAEvD;AACA;AAAA;AACO,MAAMC,mBAAmB,GAAG,EAAE;AAAC;AAC/B,MAAMC,mBAAmB,GAAG,GAAG;AAAC;AAChC,MAAMC,6BAA6B,GAAG,MAAM;AAAC;AAE7C,MAAMC,eAAe,GAAG,OAAO;AAAC"}
package/cjs/features.js CHANGED
@@ -11,6 +11,7 @@ exports.isIOS = isIOS;
11
11
  exports.isLocalhost = isLocalhost;
12
12
  exports.isPKCESupported = isPKCESupported;
13
13
  exports.isPopupPostMessageSupported = isPopupPostMessageSupported;
14
+ exports.isSafari18 = isSafari18;
14
15
  exports.isTokenVerifySupported = isTokenVerifySupported;
15
16
  var _crypto = require("./crypto");
16
17
  /*!
@@ -90,4 +91,20 @@ function isIOS() {
90
91
  // @ts-expect-error - MSStream is not in `window` type, unsurprisingly
91
92
  /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
92
93
  }
94
+ const isIOSRegex = /iPad|iPhone|iPod/;
95
+ const v18Regex = /Version\/18(\.| |$)/;
96
+ const notSafariRegex = /EdgiOS|CriOS|Chrome/;
97
+
98
+ /* eslint complexity:[0,8] */
99
+ function isSafari18() {
100
+ if (isBrowser() && typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined') {
101
+ const isIOS = isIOSRegex.test(navigator.userAgent);
102
+ // Mobile Safari in desktop mode emulates Macintosh in user agent
103
+ const isDesktop = navigator.userAgent.includes('Macintosh');
104
+ const isSafari18 = navigator.userAgent.includes('Safari/') && v18Regex.test(navigator.userAgent);
105
+ const isOtherBrowser = notSafariRegex.test(navigator.userAgent);
106
+ return isSafari18 && !isOtherBrowser && (isIOS || isDesktop);
107
+ }
108
+ return false;
109
+ }
93
110
  //# sourceMappingURL=features.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"features.js","names":["isWindowsPhone","isBrowser","document","window","isIE11OrLess","documentMode","getUserAgent","navigator","userAgent","isFingerprintSupported","agent","test","isPopupPostMessageSupported","isIE8or9","postMessage","isWebCryptoSubtleSupported","webcrypto","subtle","Uint8Array","isTokenVerifySupported","hasTextEncoder","TextEncoder","isPKCESupported","isHTTPS","location","protocol","isLocalhost","hostname","isDPoPSupported","indexedDB","isIOS","MSStream"],"sources":["../../lib/features.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint-disable node/no-unsupported-features/node-builtins */\n/* global document, window, TextEncoder, navigator */\n\nimport { webcrypto } from './crypto';\n\nconst isWindowsPhone = /windows phone|iemobile|wpdesktop/i;\t\n\nexport function isBrowser() {\n return typeof document !== 'undefined' && typeof window !== 'undefined';\n}\n\nexport function isIE11OrLess() {\n if (!isBrowser()) {\n return false;\n }\n const documentMode = (document as any).documentMode;\n return !!documentMode && documentMode <= 11;\n}\n\nexport function getUserAgent() {\n return navigator.userAgent;\n}\n\nexport function isFingerprintSupported() {\n const agent = getUserAgent();\n return agent && !isWindowsPhone.test(agent);\t\n}\n\nexport function isPopupPostMessageSupported() {\n if (!isBrowser()) {\n return false;\n }\n const documentMode = (document as any).documentMode;\n var isIE8or9 = documentMode && documentMode < 10;\n if (typeof window.postMessage !== 'undefined' && !isIE8or9) {\n return true;\n }\n return false;\n}\n\nfunction isWebCryptoSubtleSupported () {\n return typeof webcrypto !== 'undefined'\n && webcrypto !== null\n && typeof webcrypto.subtle !== 'undefined'\n && typeof Uint8Array !== 'undefined';\n}\n\nexport function isTokenVerifySupported() {\n return isWebCryptoSubtleSupported();\n}\n\nexport function hasTextEncoder() {\n return typeof TextEncoder !== 'undefined';\n}\n\nexport function isPKCESupported() {\n return isTokenVerifySupported() && hasTextEncoder();\n}\n\nexport function isHTTPS() {\n if (!isBrowser()) {\n return false;\n }\n return window.location.protocol === 'https:';\n}\n\nexport function isLocalhost() {\n // eslint-disable-next-line compat/compat\n return isBrowser() && window.location.hostname === 'localhost';\n}\n\n// For now, DPoP is only supported on browsers\nexport function isDPoPSupported () {\n return !isIE11OrLess() &&\n typeof window.indexedDB !== 'undefined' &&\n hasTextEncoder() &&\n isWebCryptoSubtleSupported();\n}\n\nexport function isIOS () {\n // iOS detection from: http://stackoverflow.com/a/9039885/177710\n return isBrowser() && typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined' &&\n // @ts-expect-error - MSStream is not in `window` type, unsurprisingly\n (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream);\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA;AAfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAIA,MAAMA,cAAc,GAAG,mCAAmC;AAEnD,SAASC,SAAS,GAAG;EAC1B,OAAO,OAAOC,QAAQ,KAAK,WAAW,IAAI,OAAOC,MAAM,KAAK,WAAW;AACzE;AAEO,SAASC,YAAY,GAAG;EAC7B,IAAI,CAACH,SAAS,EAAE,EAAE;IAChB,OAAO,KAAK;EACd;EACA,MAAMI,YAAY,GAAIH,QAAQ,CAASG,YAAY;EACnD,OAAO,CAAC,CAACA,YAAY,IAAIA,YAAY,IAAI,EAAE;AAC7C;AAEO,SAASC,YAAY,GAAG;EAC7B,OAAOC,SAAS,CAACC,SAAS;AAC5B;AAEO,SAASC,sBAAsB,GAAG;EACvC,MAAMC,KAAK,GAAGJ,YAAY,EAAE;EAC5B,OAAOI,KAAK,IAAI,CAACV,cAAc,CAACW,IAAI,CAACD,KAAK,CAAC;AAC7C;AAEO,SAASE,2BAA2B,GAAG;EAC5C,IAAI,CAACX,SAAS,EAAE,EAAE;IAChB,OAAO,KAAK;EACd;EACA,MAAMI,YAAY,GAAIH,QAAQ,CAASG,YAAY;EACnD,IAAIQ,QAAQ,GAAGR,YAAY,IAAIA,YAAY,GAAG,EAAE;EAChD,IAAI,OAAOF,MAAM,CAACW,WAAW,KAAK,WAAW,IAAI,CAACD,QAAQ,EAAE;IAC1D,OAAO,IAAI;EACb;EACA,OAAO,KAAK;AACd;AAEA,SAASE,0BAA0B,GAAI;EACrC,OAAO,OAAOC,iBAAS,KAAK,WAAW,IAClCA,iBAAS,KAAK,IAAI,IAClB,OAAOA,iBAAS,CAACC,MAAM,KAAK,WAAW,IACvC,OAAOC,UAAU,KAAK,WAAW;AACxC;AAEO,SAASC,sBAAsB,GAAG;EACvC,OAAOJ,0BAA0B,EAAE;AACrC;AAEO,SAASK,cAAc,GAAG;EAC/B,OAAO,OAAOC,WAAW,KAAK,WAAW;AAC3C;AAEO,SAASC,eAAe,GAAG;EAChC,OAAOH,sBAAsB,EAAE,IAAIC,cAAc,EAAE;AACrD;AAEO,SAASG,OAAO,GAAG;EACxB,IAAI,CAACtB,SAAS,EAAE,EAAE;IAChB,OAAO,KAAK;EACd;EACA,OAAOE,MAAM,CAACqB,QAAQ,CAACC,QAAQ,KAAK,QAAQ;AAC9C;AAEO,SAASC,WAAW,GAAG;EAC5B;EACA,OAAOzB,SAAS,EAAE,IAAIE,MAAM,CAACqB,QAAQ,CAACG,QAAQ,KAAK,WAAW;AAChE;;AAEA;AACO,SAASC,eAAe,GAAI;EACjC,OAAO,CAACxB,YAAY,EAAE,IACpB,OAAOD,MAAM,CAAC0B,SAAS,KAAK,WAAW,IACvCT,cAAc,EAAE,IAChBL,0BAA0B,EAAE;AAChC;AAEO,SAASe,KAAK,GAAI;EACvB;EACA,OAAO7B,SAAS,EAAE,IAAI,OAAOM,SAAS,KAAK,WAAW,IAAI,OAAOA,SAAS,CAACC,SAAS,KAAK,WAAW;EAClG;EACC,kBAAkB,CAACG,IAAI,CAACJ,SAAS,CAACC,SAAS,CAAC,IAAI,CAACL,MAAM,CAAC4B,QAAS;AACtE"}
1
+ {"version":3,"file":"features.js","names":["isWindowsPhone","isBrowser","document","window","isIE11OrLess","documentMode","getUserAgent","navigator","userAgent","isFingerprintSupported","agent","test","isPopupPostMessageSupported","isIE8or9","postMessage","isWebCryptoSubtleSupported","webcrypto","subtle","Uint8Array","isTokenVerifySupported","hasTextEncoder","TextEncoder","isPKCESupported","isHTTPS","location","protocol","isLocalhost","hostname","isDPoPSupported","indexedDB","isIOS","MSStream","isIOSRegex","v18Regex","notSafariRegex","isSafari18","isDesktop","includes","isOtherBrowser"],"sources":["../../lib/features.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint-disable node/no-unsupported-features/node-builtins */\n/* global document, window, TextEncoder, navigator */\n\nimport { webcrypto } from './crypto';\n\nconst isWindowsPhone = /windows phone|iemobile|wpdesktop/i;\t\n\nexport function isBrowser() {\n return typeof document !== 'undefined' && typeof window !== 'undefined';\n}\n\nexport function isIE11OrLess() {\n if (!isBrowser()) {\n return false;\n }\n const documentMode = (document as any).documentMode;\n return !!documentMode && documentMode <= 11;\n}\n\nexport function getUserAgent() {\n return navigator.userAgent;\n}\n\nexport function isFingerprintSupported() {\n const agent = getUserAgent();\n return agent && !isWindowsPhone.test(agent);\t\n}\n\nexport function isPopupPostMessageSupported() {\n if (!isBrowser()) {\n return false;\n }\n const documentMode = (document as any).documentMode;\n var isIE8or9 = documentMode && documentMode < 10;\n if (typeof window.postMessage !== 'undefined' && !isIE8or9) {\n return true;\n }\n return false;\n}\n\nfunction isWebCryptoSubtleSupported () {\n return typeof webcrypto !== 'undefined'\n && webcrypto !== null\n && typeof webcrypto.subtle !== 'undefined'\n && typeof Uint8Array !== 'undefined';\n}\n\nexport function isTokenVerifySupported() {\n return isWebCryptoSubtleSupported();\n}\n\nexport function hasTextEncoder() {\n return typeof TextEncoder !== 'undefined';\n}\n\nexport function isPKCESupported() {\n return isTokenVerifySupported() && hasTextEncoder();\n}\n\nexport function isHTTPS() {\n if (!isBrowser()) {\n return false;\n }\n return window.location.protocol === 'https:';\n}\n\nexport function isLocalhost() {\n // eslint-disable-next-line compat/compat\n return isBrowser() && window.location.hostname === 'localhost';\n}\n\n// For now, DPoP is only supported on browsers\nexport function isDPoPSupported () {\n return !isIE11OrLess() &&\n typeof window.indexedDB !== 'undefined' &&\n hasTextEncoder() &&\n isWebCryptoSubtleSupported();\n}\n\nexport function isIOS () {\n // iOS detection from: http://stackoverflow.com/a/9039885/177710\n return isBrowser() && typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined' &&\n // @ts-expect-error - MSStream is not in `window` type, unsurprisingly\n (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream);\n}\n\nconst isIOSRegex = /iPad|iPhone|iPod/;\nconst v18Regex = /Version\\/18(\\.| |$)/;\nconst notSafariRegex = /EdgiOS|CriOS|Chrome/;\n\n/* eslint complexity:[0,8] */\nexport function isSafari18 () {\n if (isBrowser() && typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined') {\n const isIOS = isIOSRegex.test(navigator.userAgent);\n // Mobile Safari in desktop mode emulates Macintosh in user agent\n const isDesktop = navigator.userAgent.includes('Macintosh');\n const isSafari18 = navigator.userAgent.includes('Safari/') && v18Regex.test(navigator.userAgent);\n const isOtherBrowser = notSafariRegex.test(navigator.userAgent);\n return isSafari18 && !isOtherBrowser && (isIOS || isDesktop);\n }\n return false;\n}\n"],"mappings":"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"}
@@ -20,7 +20,7 @@ var _features = require("../features");
20
20
  class OktaUserAgent {
21
21
  constructor() {
22
22
  // add base sdk env
23
- this.environments = [`okta-auth-js/${"7.9.0"}`];
23
+ this.environments = [`okta-auth-js/${"7.10.1"}`];
24
24
  this.maybeAddNodeEnvironment();
25
25
  }
26
26
  addEnvironment(env) {
@@ -32,7 +32,7 @@ class OktaUserAgent {
32
32
  };
33
33
  }
34
34
  getVersion() {
35
- return "7.9.0";
35
+ return "7.10.1";
36
36
  }
37
37
  maybeAddNodeEnvironment() {
38
38
  if ((0, _features.isBrowser)() || !process || !process.versions) {
@@ -1 +1 @@
1
- {"version":3,"file":"OktaUserAgent.js","names":["OktaUserAgent","constructor","environments","maybeAddNodeEnvironment","addEnvironment","env","push","getHttpHeader","join","getVersion","isBrowser","process","versions","node","version"],"sources":["../../../lib/http/OktaUserAgent.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\n\n/* global SDK_VERSION */\n\nimport { isBrowser } from '../features';\nexport class OktaUserAgent {\n environments: string[];\n\n constructor() {\n // add base sdk env\n this.environments = [`okta-auth-js/${SDK_VERSION}`];\n this.maybeAddNodeEnvironment();\n }\n\n addEnvironment(env: string) {\n this.environments.push(env);\n }\n\n getHttpHeader() {\n return { 'X-Okta-User-Agent-Extended': this.environments.join(' ') };\n }\n\n getVersion() {\n return SDK_VERSION;\n }\n\n maybeAddNodeEnvironment() {\n if (isBrowser() || !process || !process.versions) {\n return;\n }\n const { node: version } = process.versions;\n this.environments.push(`nodejs/${version}`);\n }\n}\n"],"mappings":";;;AAeA;AAfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAGO,MAAMA,aAAa,CAAC;EAGzBC,WAAW,GAAG;IACZ;IACA,IAAI,CAACC,YAAY,GAAG,CAAE,gBAAa,OAAc,EAAC,CAAC;IACnD,IAAI,CAACC,uBAAuB,EAAE;EAChC;EAEAC,cAAc,CAACC,GAAW,EAAE;IAC1B,IAAI,CAACH,YAAY,CAACI,IAAI,CAACD,GAAG,CAAC;EAC7B;EAEAE,aAAa,GAAG;IACd,OAAO;MAAE,4BAA4B,EAAE,IAAI,CAACL,YAAY,CAACM,IAAI,CAAC,GAAG;IAAE,CAAC;EACtE;EAEAC,UAAU,GAAG;IACX;EACF;EAEAN,uBAAuB,GAAG;IACxB,IAAI,IAAAO,mBAAS,GAAE,IAAI,CAACC,OAAO,IAAI,CAACA,OAAO,CAACC,QAAQ,EAAE;MAChD;IACF;IACA,MAAM;MAAEC,IAAI,EAAEC;IAAQ,CAAC,GAAGH,OAAO,CAACC,QAAQ;IAC1C,IAAI,CAACV,YAAY,CAACI,IAAI,CAAE,UAASQ,OAAQ,EAAC,CAAC;EAC7C;AACF;AAAC"}
1
+ {"version":3,"file":"OktaUserAgent.js","names":["OktaUserAgent","constructor","environments","maybeAddNodeEnvironment","addEnvironment","env","push","getHttpHeader","join","getVersion","isBrowser","process","versions","node","version"],"sources":["../../../lib/http/OktaUserAgent.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\n\n/* global SDK_VERSION */\n\nimport { isBrowser } from '../features';\nexport class OktaUserAgent {\n environments: string[];\n\n constructor() {\n // add base sdk env\n this.environments = [`okta-auth-js/${SDK_VERSION}`];\n this.maybeAddNodeEnvironment();\n }\n\n addEnvironment(env: string) {\n this.environments.push(env);\n }\n\n getHttpHeader() {\n return { 'X-Okta-User-Agent-Extended': this.environments.join(' ') };\n }\n\n getVersion() {\n return SDK_VERSION;\n }\n\n maybeAddNodeEnvironment() {\n if (isBrowser() || !process || !process.versions) {\n return;\n }\n const { node: version } = process.versions;\n this.environments.push(`nodejs/${version}`);\n }\n}\n"],"mappings":";;;AAeA;AAfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAGO,MAAMA,aAAa,CAAC;EAGzBC,WAAW,GAAG;IACZ;IACA,IAAI,CAACC,YAAY,GAAG,CAAE,gBAAa,QAAc,EAAC,CAAC;IACnD,IAAI,CAACC,uBAAuB,EAAE;EAChC;EAEAC,cAAc,CAACC,GAAW,EAAE;IAC1B,IAAI,CAACH,YAAY,CAACI,IAAI,CAACD,GAAG,CAAC;EAC7B;EAEAE,aAAa,GAAG;IACd,OAAO;MAAE,4BAA4B,EAAE,IAAI,CAACL,YAAY,CAACM,IAAI,CAAC,GAAG;IAAE,CAAC;EACtE;EAEAC,UAAU,GAAG;IACX;EACF;EAEAN,uBAAuB,GAAG;IACxB,IAAI,IAAAO,mBAAS,GAAE,IAAI,CAACC,OAAO,IAAI,CAACA,OAAO,CAACC,QAAQ,EAAE;MAChD;IACF;IACA,MAAM;MAAEC,IAAI,EAAEC;IAAQ,CAAC,GAAGH,OAAO,CAACC,QAAQ;IAC1C,IAAI,CAACV,YAAY,CAACI,IAAI,CAAE,UAASQ,OAAQ,EAAC,CAAC;EAC7C;AACF;AAAC"}
@@ -6,6 +6,7 @@ exports.post = post;
6
6
  var _util = require("../util");
7
7
  var _constants = require("../constants");
8
8
  var _errors = require("../errors");
9
+ var _features = require("../features");
9
10
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
10
11
  /*!
11
12
  * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
@@ -22,6 +23,18 @@ var _errors = require("../errors");
22
23
 
23
24
  /* eslint-disable complexity */
24
25
 
26
+ // For iOS track last date when document became visible
27
+ let dateDocumentBecameVisible = 0;
28
+ let trackDateDocumentBecameVisible;
29
+ if ((0, _features.isSafari18)()) {
30
+ dateDocumentBecameVisible = Date.now();
31
+ trackDateDocumentBecameVisible = () => {
32
+ if (!document.hidden) {
33
+ dateDocumentBecameVisible = Date.now();
34
+ }
35
+ };
36
+ document.addEventListener('visibilitychange', trackDateDocumentBecameVisible);
37
+ }
25
38
  const formatError = (sdk, error) => {
26
39
  if (error instanceof Error) {
27
40
  // fetch() can throw exceptions
@@ -91,6 +104,8 @@ const formatError = (sdk, error) => {
91
104
 
92
105
  return err;
93
106
  };
107
+
108
+ // eslint-disable-next-line max-statements
94
109
  function httpRequest(sdk, options) {
95
110
  options = options || {};
96
111
  if (sdk.options.httpRequestInterceptors) {
@@ -107,7 +122,8 @@ function httpRequest(sdk, options) {
107
122
  // default value is false
108
123
  storageUtil = sdk.options.storageUtil,
109
124
  storage = storageUtil.storage,
110
- httpCache = sdk.storageManager.getHttpCache(sdk.options.cookies);
125
+ httpCache = sdk.storageManager.getHttpCache(sdk.options.cookies),
126
+ pollingIntent = options.pollingIntent;
111
127
  if (options.cacheResponse) {
112
128
  var cacheContents = httpCache.getStorage();
113
129
  var cachedResponse = cacheContents[url];
@@ -131,8 +147,73 @@ function httpRequest(sdk, options) {
131
147
  data: args || undefined,
132
148
  withCredentials
133
149
  };
134
- var err, res;
135
- return sdk.options.httpRequestClient(method, url, ajaxOptions).then(function (resp) {
150
+ var err, res, promise;
151
+ if (pollingIntent && (0, _features.isSafari18)()) {
152
+ let waitForVisibleAndAwakenDocument;
153
+ let waitForAwakenDocument;
154
+ let recursiveFetch;
155
+ let retryCount = 0;
156
+
157
+ // Safari on iOS has a bug:
158
+ // Performing `fetch` right after document became visible can fail with `Load failed` error.
159
+ // Running fetch after short timeout fixes this issue.
160
+ waitForAwakenDocument = () => {
161
+ const timeSinceDocumentIsVisible = Date.now() - dateDocumentBecameVisible;
162
+ if (timeSinceDocumentIsVisible < _constants.IOS_PAGE_AWAKEN_TIMEOUT) {
163
+ return new Promise(resolve => setTimeout(() => {
164
+ if (!document.hidden) {
165
+ resolve();
166
+ } else {
167
+ resolve(waitForVisibleAndAwakenDocument());
168
+ }
169
+ }, _constants.IOS_PAGE_AWAKEN_TIMEOUT - timeSinceDocumentIsVisible));
170
+ } else {
171
+ return Promise.resolve();
172
+ }
173
+ };
174
+
175
+ // Returns a promise that resolves when document is visible for 500 ms
176
+ waitForVisibleAndAwakenDocument = () => {
177
+ if (document.hidden) {
178
+ let pageVisibilityHandler;
179
+ return new Promise(resolve => {
180
+ pageVisibilityHandler = () => {
181
+ if (!document.hidden) {
182
+ document.removeEventListener('visibilitychange', pageVisibilityHandler);
183
+ resolve(waitForAwakenDocument());
184
+ }
185
+ };
186
+ document.addEventListener('visibilitychange', pageVisibilityHandler);
187
+ });
188
+ } else {
189
+ return waitForAwakenDocument();
190
+ }
191
+ };
192
+
193
+ // Restarts fetch on 'Load failed' error
194
+ // This error can occur when `fetch` does not respond
195
+ // (due to CORS error, non-existing host, or network error)
196
+ const retryableFetch = () => {
197
+ return sdk.options.httpRequestClient(method, url, ajaxOptions).catch(err => {
198
+ const isNetworkError = err?.message === 'Load failed';
199
+ if (isNetworkError && retryCount < _constants.IOS_MAX_RETRY_COUNT) {
200
+ retryCount++;
201
+ return recursiveFetch();
202
+ }
203
+ throw err;
204
+ });
205
+ };
206
+
207
+ // Final promise to fetch that wraps logic with waiting for visible document
208
+ // and retrying fetch request on network error
209
+ recursiveFetch = () => {
210
+ return waitForVisibleAndAwakenDocument().then(retryableFetch);
211
+ };
212
+ promise = recursiveFetch();
213
+ } else {
214
+ promise = sdk.options.httpRequestClient(method, url, ajaxOptions);
215
+ }
216
+ return promise.then(function (resp) {
136
217
  res = resp.responseText;
137
218
  if (res && (0, _util.isString)(res)) {
138
219
  res = JSON.parse(res);
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","names":["formatError","sdk","error","Error","AuthApiError","errorSummary","message","resp","err","serverErr","responseText","isString","JSON","parse","e","status","options","transformErrorXHR","clone","wwwAuthHeader","WWWAuthError","getWWWAuthenticateHeader","headers","error_description","OAuthError","wwwAuthErr","parseHeader","max_age","acr_values","parameters","errorCauses","errorDescription","scheme","httpRequest","httpRequestInterceptors","interceptor","url","method","args","saveAuthnState","accessToken","withCredentials","storageUtil","storage","httpCache","storageManager","getHttpCache","cookies","cacheResponse","cacheContents","getStorage","cachedResponse","Date","now","expiresAt","Promise","resolve","response","oktaUserAgentHeader","_oktaUserAgent","getHttpHeader","Object","assign","removeNils","ajaxOptions","data","undefined","res","httpRequestClient","then","Array","isArray","forEach","item","stateToken","delete","STATE_TOKEN_KEY_NAME","set","updateStorage","Math","floor","DEFAULT_CACHE_DURATION","catch","errorCode","get","isAbsoluteUrl","getIssuerOrigin","getOptions","post","postOptions"],"sources":["../../../lib/http/request.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\n\n/* eslint-disable complexity */\nimport { isString, clone, isAbsoluteUrl, removeNils } from '../util';\nimport { STATE_TOKEN_KEY_NAME, DEFAULT_CACHE_DURATION } from '../constants';\nimport {\n OktaAuthHttpInterface,\n RequestOptions,\n FetchOptions,\n RequestData,\n HttpResponse\n} from './types';\nimport { AuthApiError, OAuthError, APIError, WWWAuthError } from '../errors';\n\n\nconst formatError = (sdk: OktaAuthHttpInterface, error: HttpResponse | Error): AuthApiError | OAuthError => {\n if (error instanceof Error) {\n // fetch() can throw exceptions\n // see https://developer.mozilla.org/en-US/docs/Web/API/fetch#exceptions\n return new AuthApiError({\n errorSummary: error.message,\n });\n }\n\n let resp: HttpResponse = error;\n let err: AuthApiError | OAuthError | WWWAuthError;\n let serverErr: Record<string, any> = {};\n if (resp.responseText && isString(resp.responseText)) {\n try {\n serverErr = JSON.parse(resp.responseText);\n } catch (e) {\n serverErr = {\n errorSummary: 'Unknown error'\n };\n }\n }\n\n if (resp.status >= 500) {\n serverErr.errorSummary = 'Unknown error';\n }\n\n if (sdk.options.transformErrorXHR) {\n resp = sdk.options.transformErrorXHR(clone(resp));\n }\n\n // \n const wwwAuthHeader = WWWAuthError.getWWWAuthenticateHeader(resp?.headers) ?? '';\n\n if (serverErr.error && serverErr.error_description) {\n err = new OAuthError(serverErr.error, serverErr.error_description, resp);\n } else {\n err = new AuthApiError(serverErr as APIError, resp, { wwwAuthHeader });\n }\n\n if (wwwAuthHeader && resp?.status >= 400 && resp?.status < 500) {\n const wwwAuthErr = WWWAuthError.parseHeader(wwwAuthHeader);\n // check for 403 to avoid breaking change\n if (resp.status === 403 && wwwAuthErr?.error === 'insufficient_authentication_context') {\n // eslint-disable-next-line camelcase\n const { max_age, acr_values } = wwwAuthErr.parameters;\n err = new AuthApiError(\n {\n errorSummary: wwwAuthErr.error,\n errorCauses: [{ errorSummary: wwwAuthErr.errorDescription }]\n },\n resp,\n {\n // eslint-disable-next-line camelcase\n max_age: +max_age,\n // eslint-disable-next-line camelcase\n ...(acr_values && { acr_values })\n }\n );\n }\n else if (wwwAuthErr?.scheme === 'DPoP') {\n err = wwwAuthErr;\n }\n // else {\n // // WWWAuthError.parseHeader may return null, only overwrite if !null\n // err = wwwAuthErr ?? err;\n // }\n }\n\n return err;\n};\n\nexport function httpRequest(sdk: OktaAuthHttpInterface, options: RequestOptions): Promise<any> {\n options = options || {};\n\n if (sdk.options.httpRequestInterceptors) {\n for (const interceptor of sdk.options.httpRequestInterceptors) {\n interceptor(options);\n }\n }\n\n var url = options.url,\n method = options.method,\n args = options.args,\n saveAuthnState = options.saveAuthnState,\n accessToken = options.accessToken,\n withCredentials = options.withCredentials === true, // default value is false\n storageUtil = sdk.options.storageUtil,\n storage = storageUtil!.storage,\n httpCache = sdk.storageManager.getHttpCache(sdk.options.cookies);\n\n if (options.cacheResponse) {\n var cacheContents = httpCache.getStorage();\n var cachedResponse = cacheContents[url as string];\n if (cachedResponse && Date.now()/1000 < cachedResponse.expiresAt) {\n return Promise.resolve(cachedResponse.response);\n }\n }\n\n var oktaUserAgentHeader = sdk._oktaUserAgent.getHttpHeader();\n var headers: HeadersInit = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n ...oktaUserAgentHeader\n };\n Object.assign(headers, sdk.options.headers, options.headers);\n headers = removeNils(headers) as HeadersInit;\n\n if (accessToken && isString(accessToken)) {\n headers['Authorization'] = 'Bearer ' + accessToken;\n }\n\n var ajaxOptions: FetchOptions = {\n headers,\n data: args || undefined,\n withCredentials\n };\n\n var err, res;\n return sdk.options.httpRequestClient!(method!, url!, ajaxOptions)\n .then(function(resp) {\n res = resp.responseText;\n if (res && isString(res)) {\n res = JSON.parse(res);\n if (res && typeof res === 'object' && !res.headers) {\n if (Array.isArray(res)) {\n res.forEach(item => {\n item.headers = resp.headers;\n });\n } else {\n res.headers = resp.headers;\n }\n }\n }\n\n if (saveAuthnState) {\n if (!res.stateToken) {\n storage.delete(STATE_TOKEN_KEY_NAME);\n }\n }\n\n if (res && res.stateToken && res.expiresAt) {\n storage.set(STATE_TOKEN_KEY_NAME, res.stateToken, res.expiresAt, sdk.options.cookies!);\n }\n\n if (res && options.cacheResponse) {\n httpCache.updateStorage(url!, {\n expiresAt: Math.floor(Date.now()/1000) + DEFAULT_CACHE_DURATION,\n response: res\n });\n }\n \n return res;\n })\n .catch(function(resp) {\n err = formatError(sdk, resp);\n\n if (err.errorCode === 'E0000011') {\n storage.delete(STATE_TOKEN_KEY_NAME);\n }\n\n throw err;\n });\n}\n\nexport function get(sdk: OktaAuthHttpInterface, url: string, options?: RequestOptions) {\n url = isAbsoluteUrl(url) ? url : sdk.getIssuerOrigin() + url;\n var getOptions = {\n url: url,\n method: 'GET'\n };\n Object.assign(getOptions, options);\n return httpRequest(sdk, getOptions);\n}\n\nexport function post(sdk: OktaAuthHttpInterface, url: string, args?: RequestData, options?: RequestOptions) {\n url = isAbsoluteUrl(url) ? url : sdk.getIssuerOrigin() + url;\n var postOptions = {\n url: url,\n method: 'POST',\n args: args,\n saveAuthnState: true\n };\n Object.assign(postOptions, options);\n return httpRequest(sdk, postOptions);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"request.js","names":["dateDocumentBecameVisible","trackDateDocumentBecameVisible","isSafari18","Date","now","document","hidden","addEventListener","formatError","sdk","error","Error","AuthApiError","errorSummary","message","resp","err","serverErr","responseText","isString","JSON","parse","e","status","options","transformErrorXHR","clone","wwwAuthHeader","WWWAuthError","getWWWAuthenticateHeader","headers","error_description","OAuthError","wwwAuthErr","parseHeader","max_age","acr_values","parameters","errorCauses","errorDescription","scheme","httpRequest","httpRequestInterceptors","interceptor","url","method","args","saveAuthnState","accessToken","withCredentials","storageUtil","storage","httpCache","storageManager","getHttpCache","cookies","pollingIntent","cacheResponse","cacheContents","getStorage","cachedResponse","expiresAt","Promise","resolve","response","oktaUserAgentHeader","_oktaUserAgent","getHttpHeader","Object","assign","removeNils","ajaxOptions","data","undefined","res","promise","waitForVisibleAndAwakenDocument","waitForAwakenDocument","recursiveFetch","retryCount","timeSinceDocumentIsVisible","IOS_PAGE_AWAKEN_TIMEOUT","setTimeout","pageVisibilityHandler","removeEventListener","retryableFetch","httpRequestClient","catch","isNetworkError","IOS_MAX_RETRY_COUNT","then","Array","isArray","forEach","item","stateToken","delete","STATE_TOKEN_KEY_NAME","set","updateStorage","Math","floor","DEFAULT_CACHE_DURATION","errorCode","get","isAbsoluteUrl","getIssuerOrigin","getOptions","post","postOptions"],"sources":["../../../lib/http/request.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\n\n/* eslint-disable complexity */\nimport { isString, clone, isAbsoluteUrl, removeNils } from '../util';\nimport {\n STATE_TOKEN_KEY_NAME,\n DEFAULT_CACHE_DURATION,\n IOS_MAX_RETRY_COUNT,\n IOS_PAGE_AWAKEN_TIMEOUT\n} from '../constants';\nimport {\n OktaAuthHttpInterface,\n RequestOptions,\n FetchOptions,\n RequestData,\n HttpResponse\n} from './types';\nimport { AuthApiError, OAuthError, APIError, WWWAuthError } from '../errors';\nimport { isSafari18 } from '../features';\n\n\n// For iOS track last date when document became visible\nlet dateDocumentBecameVisible = 0;\nlet trackDateDocumentBecameVisible: () => void;\nif (isSafari18()) {\n dateDocumentBecameVisible = Date.now();\n trackDateDocumentBecameVisible = () => {\n if (!document.hidden) {\n dateDocumentBecameVisible = Date.now();\n }\n };\n document.addEventListener('visibilitychange', trackDateDocumentBecameVisible);\n}\n\nconst formatError = (sdk: OktaAuthHttpInterface, error: HttpResponse | Error): AuthApiError | OAuthError => {\n if (error instanceof Error) {\n // fetch() can throw exceptions\n // see https://developer.mozilla.org/en-US/docs/Web/API/fetch#exceptions\n return new AuthApiError({\n errorSummary: error.message,\n });\n }\n\n let resp: HttpResponse = error;\n let err: AuthApiError | OAuthError | WWWAuthError;\n let serverErr: Record<string, any> = {};\n if (resp.responseText && isString(resp.responseText)) {\n try {\n serverErr = JSON.parse(resp.responseText);\n } catch (e) {\n serverErr = {\n errorSummary: 'Unknown error'\n };\n }\n }\n\n if (resp.status >= 500) {\n serverErr.errorSummary = 'Unknown error';\n }\n\n if (sdk.options.transformErrorXHR) {\n resp = sdk.options.transformErrorXHR(clone(resp));\n }\n\n // \n const wwwAuthHeader = WWWAuthError.getWWWAuthenticateHeader(resp?.headers) ?? '';\n\n if (serverErr.error && serverErr.error_description) {\n err = new OAuthError(serverErr.error, serverErr.error_description, resp);\n } else {\n err = new AuthApiError(serverErr as APIError, resp, { wwwAuthHeader });\n }\n\n if (wwwAuthHeader && resp?.status >= 400 && resp?.status < 500) {\n const wwwAuthErr = WWWAuthError.parseHeader(wwwAuthHeader);\n // check for 403 to avoid breaking change\n if (resp.status === 403 && wwwAuthErr?.error === 'insufficient_authentication_context') {\n // eslint-disable-next-line camelcase\n const { max_age, acr_values } = wwwAuthErr.parameters;\n err = new AuthApiError(\n {\n errorSummary: wwwAuthErr.error,\n errorCauses: [{ errorSummary: wwwAuthErr.errorDescription }]\n },\n resp,\n {\n // eslint-disable-next-line camelcase\n max_age: +max_age,\n // eslint-disable-next-line camelcase\n ...(acr_values && { acr_values })\n }\n );\n }\n else if (wwwAuthErr?.scheme === 'DPoP') {\n err = wwwAuthErr;\n }\n // else {\n // // WWWAuthError.parseHeader may return null, only overwrite if !null\n // err = wwwAuthErr ?? err;\n // }\n }\n\n return err;\n};\n\n// eslint-disable-next-line max-statements\nexport function httpRequest(sdk: OktaAuthHttpInterface, options: RequestOptions): Promise<any> {\n options = options || {};\n\n if (sdk.options.httpRequestInterceptors) {\n for (const interceptor of sdk.options.httpRequestInterceptors) {\n interceptor(options);\n }\n }\n\n var url = options.url,\n method = options.method,\n args = options.args,\n saveAuthnState = options.saveAuthnState,\n accessToken = options.accessToken,\n withCredentials = options.withCredentials === true, // default value is false\n storageUtil = sdk.options.storageUtil,\n storage = storageUtil!.storage,\n httpCache = sdk.storageManager.getHttpCache(sdk.options.cookies),\n pollingIntent = options.pollingIntent;\n\n if (options.cacheResponse) {\n var cacheContents = httpCache.getStorage();\n var cachedResponse = cacheContents[url as string];\n if (cachedResponse && Date.now()/1000 < cachedResponse.expiresAt) {\n return Promise.resolve(cachedResponse.response);\n }\n }\n\n var oktaUserAgentHeader = sdk._oktaUserAgent.getHttpHeader();\n var headers: HeadersInit = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n ...oktaUserAgentHeader\n };\n Object.assign(headers, sdk.options.headers, options.headers);\n headers = removeNils(headers) as HeadersInit;\n\n if (accessToken && isString(accessToken)) {\n headers['Authorization'] = 'Bearer ' + accessToken;\n }\n\n var ajaxOptions: FetchOptions = {\n headers,\n data: args || undefined,\n withCredentials\n };\n\n var err, res, promise;\n\n if (pollingIntent && isSafari18()) {\n let waitForVisibleAndAwakenDocument: () => Promise<void>;\n let waitForAwakenDocument: () => Promise<void>;\n let recursiveFetch: () => Promise<HttpResponse>;\n let retryCount = 0;\n\n // Safari on iOS has a bug:\n // Performing `fetch` right after document became visible can fail with `Load failed` error.\n // Running fetch after short timeout fixes this issue.\n waitForAwakenDocument = () => {\n const timeSinceDocumentIsVisible = Date.now() - dateDocumentBecameVisible;\n if (timeSinceDocumentIsVisible < IOS_PAGE_AWAKEN_TIMEOUT) {\n return new Promise<void>((resolve) => setTimeout(() => {\n if (!document.hidden) {\n resolve();\n } else {\n resolve(waitForVisibleAndAwakenDocument());\n }\n }, IOS_PAGE_AWAKEN_TIMEOUT - timeSinceDocumentIsVisible));\n } else {\n return Promise.resolve();\n }\n };\n\n // Returns a promise that resolves when document is visible for 500 ms\n waitForVisibleAndAwakenDocument = () => {\n if (document.hidden) {\n let pageVisibilityHandler: () => void;\n return new Promise<void>((resolve) => {\n pageVisibilityHandler = () => {\n if (!document.hidden) {\n document.removeEventListener('visibilitychange', pageVisibilityHandler);\n resolve(waitForAwakenDocument());\n }\n };\n document.addEventListener('visibilitychange', pageVisibilityHandler);\n });\n } else {\n return waitForAwakenDocument();\n }\n };\n\n // Restarts fetch on 'Load failed' error\n // This error can occur when `fetch` does not respond\n // (due to CORS error, non-existing host, or network error)\n const retryableFetch = (): Promise<HttpResponse> => {\n return sdk.options.httpRequestClient!(method!, url!, ajaxOptions).catch((err) => {\n const isNetworkError = err?.message === 'Load failed';\n if (isNetworkError && retryCount < IOS_MAX_RETRY_COUNT) {\n retryCount++;\n return recursiveFetch();\n }\n throw err;\n });\n };\n\n // Final promise to fetch that wraps logic with waiting for visible document\n // and retrying fetch request on network error\n recursiveFetch = (): Promise<HttpResponse> => {\n return waitForVisibleAndAwakenDocument().then(retryableFetch);\n };\n\n promise = recursiveFetch();\n } else {\n promise = sdk.options.httpRequestClient!(method!, url!, ajaxOptions);\n }\n\n return promise\n .then(function(resp) {\n res = resp.responseText;\n if (res && isString(res)) {\n res = JSON.parse(res);\n if (res && typeof res === 'object' && !res.headers) {\n if (Array.isArray(res)) {\n res.forEach(item => {\n item.headers = resp.headers;\n });\n } else {\n res.headers = resp.headers;\n }\n }\n }\n\n if (saveAuthnState) {\n if (!res.stateToken) {\n storage.delete(STATE_TOKEN_KEY_NAME);\n }\n }\n\n if (res && res.stateToken && res.expiresAt) {\n storage.set(STATE_TOKEN_KEY_NAME, res.stateToken, res.expiresAt, sdk.options.cookies!);\n }\n\n if (res && options.cacheResponse) {\n httpCache.updateStorage(url!, {\n expiresAt: Math.floor(Date.now()/1000) + DEFAULT_CACHE_DURATION,\n response: res\n });\n }\n \n return res;\n })\n .catch(function(resp) {\n err = formatError(sdk, resp);\n\n if (err.errorCode === 'E0000011') {\n storage.delete(STATE_TOKEN_KEY_NAME);\n }\n\n throw err;\n });\n}\n\nexport function get(sdk: OktaAuthHttpInterface, url: string, options?: RequestOptions) {\n url = isAbsoluteUrl(url) ? url : sdk.getIssuerOrigin() + url;\n var getOptions = {\n url: url,\n method: 'GET'\n };\n Object.assign(getOptions, options);\n return httpRequest(sdk, getOptions);\n}\n\nexport function post(sdk: OktaAuthHttpInterface, url: string, args?: RequestData, options?: RequestOptions) {\n url = isAbsoluteUrl(url) ? url : sdk.getIssuerOrigin() + url;\n var postOptions = {\n url: url,\n method: 'POST',\n args: args,\n saveAuthnState: true\n };\n Object.assign(postOptions, options);\n return httpRequest(sdk, postOptions);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../lib/http/types.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { OktaUserAgent } from './OktaUserAgent';\nimport {\n OktaAuthStorageInterface,\n OktaAuthStorageOptions,\n StorageManagerInterface,\n StorageUtil\n} from '../storage/types';\n\nexport type RequestHeaders = Record<string, string>;\n\nexport type RequestData = Record<string, string> | string | object;\n\nexport interface RequestOptions {\n url?: string;\n method?: string;\n args?: RequestData;\n saveAuthnState?: boolean;\n accessToken?: string;\n withCredentials?: boolean;\n storageUtil?: StorageUtil;\n cacheResponse?: boolean;\n headers?: RequestHeaders;\n}\n\nexport interface FetchOptions {\n headers?: HeadersInit;\n data?: RequestData;\n withCredentials?: boolean;\n}\n\nexport interface FetchResponse {\n headers: {\n get(key: string): string;\n };\n json(): Promise<object>;\n text(): Promise<string>;\n}\n\nexport interface HttpResponse {\n responseText: string;\n status: number;\n responseType?: string;\n responseJSON?: {\n [propName: string]: any;\n };\n headers: HeadersInit;\n}\n\nexport type HttpRequestClient = (method: string, url: string, options: FetchOptions) => Promise<HttpResponse>;\n\n// HTTP API\nexport interface HttpAPI {\n setRequestHeader(name: string, value: string): void;\n}\n\n// options that can be passed to AuthJS\nexport interface OktaAuthHttpOptions extends OktaAuthStorageOptions \n{\n issuer?: string;\n transformErrorXHR?: (xhr: object) => any;\n headers?: object;\n httpRequestClient?: HttpRequestClient;\n httpRequestInterceptors?: ((request: RequestOptions) => void)[];\n}\n\n// an instance of AuthJS with HTTP capabilities\nexport interface OktaAuthHttpInterface\n<\n S extends StorageManagerInterface = StorageManagerInterface,\n O extends OktaAuthHttpOptions = OktaAuthHttpOptions,\n> \n extends OktaAuthStorageInterface<S, O>\n{\n _oktaUserAgent: OktaUserAgent;\n http: HttpAPI;\n \n setHeaders(headers): void;\n getIssuerOrigin(): string;\n webfinger(opts): Promise<object>;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../lib/http/types.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { OktaUserAgent } from './OktaUserAgent';\nimport {\n OktaAuthStorageInterface,\n OktaAuthStorageOptions,\n StorageManagerInterface,\n StorageUtil\n} from '../storage/types';\n\nexport type RequestHeaders = Record<string, string>;\n\nexport type RequestData = Record<string, string> | string | object;\n\nexport interface RequestOptions {\n url?: string;\n method?: string;\n args?: RequestData;\n saveAuthnState?: boolean;\n accessToken?: string;\n withCredentials?: boolean;\n storageUtil?: StorageUtil;\n cacheResponse?: boolean;\n headers?: RequestHeaders;\n pollingIntent?: boolean;\n}\n\nexport interface FetchOptions {\n headers?: HeadersInit;\n data?: RequestData;\n withCredentials?: boolean;\n}\n\nexport interface FetchResponse {\n headers: {\n get(key: string): string;\n };\n json(): Promise<object>;\n text(): Promise<string>;\n}\n\nexport interface HttpResponse {\n responseText: string;\n status: number;\n responseType?: string;\n responseJSON?: {\n [propName: string]: any;\n };\n headers: HeadersInit;\n}\n\nexport type HttpRequestClient = (method: string, url: string, options: FetchOptions) => Promise<HttpResponse>;\n\n// HTTP API\nexport interface HttpAPI {\n setRequestHeader(name: string, value: string): void;\n}\n\n// options that can be passed to AuthJS\nexport interface OktaAuthHttpOptions extends OktaAuthStorageOptions \n{\n issuer?: string;\n transformErrorXHR?: (xhr: object) => any;\n headers?: object;\n httpRequestClient?: HttpRequestClient;\n httpRequestInterceptors?: ((request: RequestOptions) => void)[];\n}\n\n// an instance of AuthJS with HTTP capabilities\nexport interface OktaAuthHttpInterface\n<\n S extends StorageManagerInterface = StorageManagerInterface,\n O extends OktaAuthHttpOptions = OktaAuthHttpOptions,\n> \n extends OktaAuthStorageInterface<S, O>\n{\n _oktaUserAgent: OktaUserAgent;\n http: HttpAPI;\n \n setHeaders(headers): void;\n getIssuerOrigin(): string;\n webfinger(opts): Promise<object>;\n}\n"],"mappings":""}
@@ -37,13 +37,18 @@ const generateDirectFetch = function generateDirectFetch(authClient, {
37
37
  ...immutableParamsForAction
38
38
  });
39
39
  try {
40
- const response = await (0, _http.httpRequest)(authClient, {
40
+ const options = {
41
41
  url: target,
42
42
  method: actionDefinition.method,
43
43
  headers,
44
44
  args: body,
45
45
  withCredentials: toPersist?.withCredentials ?? true
46
- });
46
+ };
47
+ const isPolling = actionDefinition.name === 'poll' || actionDefinition.name?.endsWith('-poll');
48
+ if (isPolling) {
49
+ options.pollingIntent = true;
50
+ }
51
+ const response = await (0, _http.httpRequest)(authClient, options);
47
52
  return authClient.idx.makeIdxResponse({
48
53
  ...response
49
54
  }, toPersist, true);
@@ -1 +1 @@
1
- {"version":3,"file":"generateIdxAction.js","names":["generateDirectFetch","authClient","actionDefinition","defaultParamsForAction","immutableParamsForAction","toPersist","target","href","params","headers","accepts","body","JSON","stringify","response","httpRequest","url","method","args","withCredentials","idx","makeIdxResponse","err","AuthApiError","xhr","payload","responseJSON","parse","responseText","wwwAuthHeader","idxResponse","status","stepUp","generateIdxAction","generator","defaultParams","neededParams","immutableParams","divideActionParamsByMutability","action","name"],"sources":["../../../../../lib/idx/idxState/v1/generateIdxAction.ts"],"sourcesContent":["/*!\n * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint-disable max-len, complexity */\nimport { httpRequest } from '../../../http';\nimport { OktaAuthIdxInterface } from '../../types'; // auth-js/types\nimport { IdxActionFunction, IdxActionParams, IdxResponse, IdxToPersist } from '../../types/idx-js';\nimport { divideActionParamsByMutability } from './actionParser';\nimport AuthApiError from '../../../errors/AuthApiError';\n\nconst generateDirectFetch = function generateDirectFetch(authClient: OktaAuthIdxInterface, { \n actionDefinition, \n defaultParamsForAction = {}, \n immutableParamsForAction = {}, \n toPersist = {} as IdxToPersist\n}): IdxActionFunction {\n const target = actionDefinition.href;\n return async function(params: IdxActionParams = {}): Promise<IdxResponse> {\n const headers = {\n 'Content-Type': 'application/json',\n 'Accept': actionDefinition.accepts || 'application/ion+json',\n };\n const body = JSON.stringify({\n ...defaultParamsForAction,\n ...params,\n ...immutableParamsForAction\n });\n\n try {\n const response = await httpRequest(authClient, {\n url: target,\n method: actionDefinition.method,\n headers,\n args: body,\n withCredentials: toPersist?.withCredentials ?? true\n });\n\n return authClient.idx.makeIdxResponse({ ...response }, toPersist, true);\n }\n catch (err) {\n if (!(err instanceof AuthApiError) || !err?.xhr) {\n throw err;\n }\n\n const response = err.xhr;\n const payload = response.responseJSON || JSON.parse(response.responseText);\n const wwwAuthHeader = response.headers['WWW-Authenticate'] || response.headers['www-authenticate'];\n\n const idxResponse = authClient.idx.makeIdxResponse({ ...payload }, toPersist, false);\n if (response.status === 401 && wwwAuthHeader === 'Oktadevicejwt realm=\"Okta Device\"') {\n // Okta server responds 401 status code with WWW-Authenticate header and new remediation\n // so that the iOS/MacOS credential SSO extension (Okta Verify) can intercept\n // the response reaches here when Okta Verify is not installed\n // set `stepUp` to true if flow should be continued without showing any errors\n idxResponse.stepUp = true;\n }\n\n return idxResponse;\n }\n };\n};\n\n// TODO: Resolve in M2: Either build the final polling solution or remove this code\n// const generatePollingFetch = function generatePollingFetch( { actionDefinition, defaultParamsForAction = {}, immutableParamsForAction = {} } ) {\n// // TODO: Discussions ongoing about when/how to terminate polling: OKTA-246581\n// const target = actionDefinition.href;\n// return async function(params) {\n// return fetch(target, {\n// method: actionDefinition.method,\n// headers: {\n// 'content-type': actionDefinition.accepts,\n// },\n// body: JSON.stringify({ ...defaultParamsForAction, ...params, ...immutableParamsForAction })\n// })\n// .then( response => response.ok ? response.json() : response.json().then( err => Promise.reject(err)) )\n// .then( idxResponse => makeIdxState(authClient, idxResponse) );\n// };\n// };\n\nconst generateIdxAction = function generateIdxAction( authClient: OktaAuthIdxInterface, actionDefinition, toPersist ): IdxActionFunction {\n // TODO: leaving this here to see where the polling is EXPECTED to drop into the code, but removing any accidental trigger of incomplete code\n // const generator = actionDefinition.refresh ? generatePollingFetch : generateDirectFetch;\n const generator = generateDirectFetch;\n const { defaultParams, neededParams, immutableParams } = divideActionParamsByMutability( actionDefinition );\n\n const action = generator(authClient, {\n actionDefinition,\n defaultParamsForAction: defaultParams[actionDefinition.name],\n immutableParamsForAction: immutableParams[actionDefinition.name],\n toPersist\n });\n action.neededParams = neededParams;\n return action;\n};\n\nexport default generateIdxAction;\n"],"mappings":"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"}
1
+ {"version":3,"file":"generateIdxAction.js","names":["generateDirectFetch","authClient","actionDefinition","defaultParamsForAction","immutableParamsForAction","toPersist","target","href","params","headers","accepts","body","JSON","stringify","options","url","method","args","withCredentials","isPolling","name","endsWith","pollingIntent","response","httpRequest","idx","makeIdxResponse","err","AuthApiError","xhr","payload","responseJSON","parse","responseText","wwwAuthHeader","idxResponse","status","stepUp","generateIdxAction","generator","defaultParams","neededParams","immutableParams","divideActionParamsByMutability","action"],"sources":["../../../../../lib/idx/idxState/v1/generateIdxAction.ts"],"sourcesContent":["/*!\n * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint-disable max-len, complexity */\nimport { httpRequest, RequestOptions } from '../../../http';\nimport { OktaAuthIdxInterface } from '../../types'; // auth-js/types\nimport { IdxActionFunction, IdxActionParams, IdxResponse, IdxToPersist } from '../../types/idx-js';\nimport { divideActionParamsByMutability } from './actionParser';\nimport AuthApiError from '../../../errors/AuthApiError';\n\nconst generateDirectFetch = function generateDirectFetch(authClient: OktaAuthIdxInterface, { \n actionDefinition, \n defaultParamsForAction = {}, \n immutableParamsForAction = {}, \n toPersist = {} as IdxToPersist\n}): IdxActionFunction {\n const target = actionDefinition.href;\n return async function(params: IdxActionParams = {}): Promise<IdxResponse> {\n const headers = {\n 'Content-Type': 'application/json',\n 'Accept': actionDefinition.accepts || 'application/ion+json',\n };\n const body = JSON.stringify({\n ...defaultParamsForAction,\n ...params,\n ...immutableParamsForAction\n });\n\n try {\n const options: RequestOptions = {\n url: target,\n method: actionDefinition.method,\n headers,\n args: body,\n withCredentials: toPersist?.withCredentials ?? true\n };\n const isPolling = actionDefinition.name === 'poll' || actionDefinition.name?.endsWith('-poll');\n if (isPolling) {\n options.pollingIntent = true;\n }\n const response = await httpRequest(authClient, options);\n\n return authClient.idx.makeIdxResponse({ ...response }, toPersist, true);\n }\n catch (err) {\n if (!(err instanceof AuthApiError) || !err?.xhr) {\n throw err;\n }\n\n const response = err.xhr;\n const payload = response.responseJSON || JSON.parse(response.responseText);\n const wwwAuthHeader = response.headers['WWW-Authenticate'] || response.headers['www-authenticate'];\n\n const idxResponse = authClient.idx.makeIdxResponse({ ...payload }, toPersist, false);\n if (response.status === 401 && wwwAuthHeader === 'Oktadevicejwt realm=\"Okta Device\"') {\n // Okta server responds 401 status code with WWW-Authenticate header and new remediation\n // so that the iOS/MacOS credential SSO extension (Okta Verify) can intercept\n // the response reaches here when Okta Verify is not installed\n // set `stepUp` to true if flow should be continued without showing any errors\n idxResponse.stepUp = true;\n }\n\n return idxResponse;\n }\n };\n};\n\n// TODO: Resolve in M2: Either build the final polling solution or remove this code\n// const generatePollingFetch = function generatePollingFetch( { actionDefinition, defaultParamsForAction = {}, immutableParamsForAction = {} } ) {\n// // TODO: Discussions ongoing about when/how to terminate polling: OKTA-246581\n// const target = actionDefinition.href;\n// return async function(params) {\n// return fetch(target, {\n// method: actionDefinition.method,\n// headers: {\n// 'content-type': actionDefinition.accepts,\n// },\n// body: JSON.stringify({ ...defaultParamsForAction, ...params, ...immutableParamsForAction })\n// })\n// .then( response => response.ok ? response.json() : response.json().then( err => Promise.reject(err)) )\n// .then( idxResponse => makeIdxState(authClient, idxResponse) );\n// };\n// };\n\nconst generateIdxAction = function generateIdxAction( authClient: OktaAuthIdxInterface, actionDefinition, toPersist ): IdxActionFunction {\n // TODO: leaving this here to see where the polling is EXPECTED to drop into the code, but removing any accidental trigger of incomplete code\n // const generator = actionDefinition.refresh ? generatePollingFetch : generateDirectFetch;\n const generator = generateDirectFetch;\n const { defaultParams, neededParams, immutableParams } = divideActionParamsByMutability( actionDefinition );\n\n const action = generator(authClient, {\n actionDefinition,\n defaultParamsForAction: defaultParams[actionDefinition.name],\n immutableParamsForAction: immutableParams[actionDefinition.name],\n toPersist\n });\n action.neededParams = neededParams;\n return action;\n};\n\nexport default generateIdxAction;\n"],"mappings":"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"}