@okta/okta-auth-js 6.7.6 → 6.7.7

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 (54) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/cjs/OktaAuth.js +1 -8
  3. package/cjs/OktaAuth.js.map +1 -1
  4. package/cjs/OktaUserAgent.js +2 -2
  5. package/cjs/SavedObject.js +4 -1
  6. package/cjs/SavedObject.js.map +1 -1
  7. package/cjs/TokenManager.js +2 -1
  8. package/cjs/TokenManager.js.map +1 -1
  9. package/cjs/browser/browserStorage.js +3 -0
  10. package/cjs/browser/browserStorage.js.map +1 -1
  11. package/cjs/server/serverStorage.js +1 -0
  12. package/cjs/server/serverStorage.js.map +1 -1
  13. package/cjs/services/SyncStorageService.js +4 -1
  14. package/cjs/services/SyncStorageService.js.map +1 -1
  15. package/cjs/types/Storage.js.map +1 -1
  16. package/cjs/util/index.js +13 -0
  17. package/cjs/util/index.js.map +1 -1
  18. package/cjs/util/storage.js +29 -0
  19. package/cjs/util/storage.js.map +1 -0
  20. package/dist/okta-auth-js.min.js +1 -1
  21. package/dist/okta-auth-js.min.js.map +1 -1
  22. package/dist/okta-auth-js.umd.js +1 -1
  23. package/dist/okta-auth-js.umd.js.map +1 -1
  24. package/esm/browser/OktaAuth.js +0 -3
  25. package/esm/browser/OktaAuth.js.map +1 -1
  26. package/esm/browser/OktaUserAgent.js +2 -2
  27. package/esm/browser/SavedObject.js +2 -1
  28. package/esm/browser/SavedObject.js.map +1 -1
  29. package/esm/browser/TokenManager.js.map +1 -1
  30. package/esm/browser/browser/browserStorage.js.map +1 -1
  31. package/esm/browser/index.js +1 -0
  32. package/esm/browser/index.js.map +1 -1
  33. package/esm/browser/services/SyncStorageService.js +1 -1
  34. package/esm/browser/services/SyncStorageService.js.map +1 -1
  35. package/esm/browser/util/storage.js +26 -0
  36. package/esm/browser/util/storage.js.map +1 -0
  37. package/esm/node/OktaAuth.js +0 -3
  38. package/esm/node/OktaAuth.js.map +1 -1
  39. package/esm/node/OktaUserAgent.js +2 -2
  40. package/esm/node/SavedObject.js +2 -1
  41. package/esm/node/SavedObject.js.map +1 -1
  42. package/esm/node/TokenManager.js.map +1 -1
  43. package/esm/node/browser/browserStorage.js.map +1 -1
  44. package/esm/node/index.js +1 -0
  45. package/esm/node/index.js.map +1 -1
  46. package/esm/node/server/serverStorage.js.map +1 -1
  47. package/esm/node/services/SyncStorageService.js +1 -1
  48. package/esm/node/services/SyncStorageService.js.map +1 -1
  49. package/esm/node/util/storage.js +26 -0
  50. package/esm/node/util/storage.js.map +1 -0
  51. package/esm/package.json +1 -1
  52. package/lib/util/index.d.ts +1 -0
  53. package/lib/util/storage.d.ts +12 -0
  54. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"browserStorage.js","names":["storageUtil","getHttpCache","getPKCEStorage","browserHasLocalStorage","storage","getLocalStorage","testStorage","e","browserHasSessionStorage","getSessionStorage","testStorageType","storageType","supported","getStorageByType","options","storageProvider","getCookieStorage","getInMemoryStorage","AuthSdkError","findStorageType","types","curType","nextType","shift","length","window","onstorage","localStorage","sessionStorage","secure","sameSite","sessionCookie","getItem","get","setItem","key","value","expiresAt","set","removeItem","delete","isSharedStorage","useSeparateCookies","data","forEach","k","replace","JSON","parse","existingValues","storageKey","valueToStore","inMemoryStore","name","cookieOptions","path","Date","expires","Cookies","arguments","remove"],"sources":["../../../lib/browser/browserStorage.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\nimport Cookies from 'js-cookie';\nimport AuthSdkError from '../errors/AuthSdkError';\nimport {\n StorageProvider,\n StorageOptions,\n PKCEStorage,\n CookieOptions,\n SimpleStorage,\n StorageType,\n BrowserStorageUtil,\n CookieStorage\n} from '../types';\nimport { warn } from '../util';\nimport { isIE11OrLess } from '../features';\n\n// Building this as an object allows us to mock the functions in our tests\nvar storageUtil: BrowserStorageUtil = {\n\n // These are shimmed in `OktaAuthBase.ts`\n getHttpCache(): StorageProvider {\n return null as never as StorageProvider;\n },\n\n getPKCEStorage(): PKCEStorage {\n return null as never as PKCEStorage;\n },\n\n // IE11 bug that Microsoft doesn't plan to fix\n // https://connect.microsoft.com/IE/Feedback/Details/1496040\n browserHasLocalStorage: function() {\n try {\n var storage = this.getLocalStorage();\n return this.testStorage(storage);\n } catch (e) {\n return false;\n }\n },\n\n browserHasSessionStorage: function() {\n try {\n var storage = this.getSessionStorage();\n return this.testStorage(storage);\n } catch (e) {\n return false;\n }\n },\n\n testStorageType: function(storageType: StorageType): boolean {\n var supported = false;\n switch (storageType) {\n case 'sessionStorage':\n supported = this.browserHasSessionStorage();\n break;\n case 'localStorage':\n supported = this.browserHasLocalStorage();\n break;\n case 'cookie':\n case 'memory':\n supported = true;\n break;\n default:\n supported = false;\n break;\n }\n return supported;\n },\n\n getStorageByType: function(storageType: StorageType, options?: StorageOptions): SimpleStorage {\n let storageProvider;\n switch (storageType) {\n case 'sessionStorage':\n storageProvider = this.getSessionStorage();\n break;\n case 'localStorage':\n storageProvider = this.getLocalStorage();\n break;\n case 'cookie':\n storageProvider = this.getCookieStorage(options);\n break;\n case 'memory':\n storageProvider = this.getInMemoryStorage();\n break;\n default:\n throw new AuthSdkError(`Unrecognized storage option: ${storageType}`);\n break;\n }\n return storageProvider;\n },\n\n findStorageType: function(types: StorageType[]) {\n let curType;\n let nextType;\n \n types = types.slice(); // copy array\n curType = types.shift();\n nextType = types.length ? types[0] : null;\n if (!nextType) {\n return curType;\n }\n\n if (this.testStorageType(curType)) {\n return curType;\n }\n\n // preferred type was unsupported.\n warn(`This browser doesn't support ${curType}. Switching to ${nextType}.`);\n\n // fallback to the next type. this is a recursive call\n return this.findStorageType(types);\n },\n\n getLocalStorage: function() {\n // Workaound for synchronization issue of LocalStorage cross tabs in IE11\n if (isIE11OrLess() && !window.onstorage) {\n window.onstorage = function() {};\n }\n \n return localStorage;\n },\n\n getSessionStorage: function() {\n return sessionStorage;\n },\n\n // Provides webStorage-like interface for cookies\n getCookieStorage: function(options): CookieStorage {\n const secure = options!.secure;\n const sameSite = options!.sameSite;\n const sessionCookie = options!.sessionCookie;\n if (typeof secure === 'undefined' || typeof sameSite === 'undefined') {\n throw new AuthSdkError('getCookieStorage: \"secure\" and \"sameSite\" options must be provided');\n }\n const storage: CookieStorage = {\n getItem: this.storage.get,\n setItem: (key, value, expiresAt = '2200-01-01T00:00:00.000Z') => {\n // By defauilt, cookie shouldn't expire\n expiresAt = (sessionCookie ? null : expiresAt) as string;\n this.storage.set(key, value, expiresAt, {\n secure: secure, \n sameSite: sameSite,\n });\n },\n removeItem: (key) => {\n this.storage.delete(key);\n },\n isSharedStorage: () => true\n };\n\n if (!options!.useSeparateCookies) {\n return storage;\n }\n\n // Tokens are stored separately because cookies have size limits.\n // Can only be used when storing an object value. Object properties will be saved to separate cookies.\n // Each property of the object must also be an object.\n return {\n getItem: function(key) {\n var data = storage.getItem(); // read all cookies\n var value = {};\n Object.keys(data).forEach(k => {\n if (k.indexOf(key!) === 0) { // filter out unrelated cookies\n value[k.replace(`${key}_`, '')] = JSON.parse(data[k]); // populate with cookie data\n }\n });\n return JSON.stringify(value);\n },\n setItem: function(key, value) {\n var existingValues = JSON.parse(this.getItem(key));\n value = JSON.parse(value);\n // Set key-value pairs from input to cookies\n Object.keys(value).forEach(k => {\n var storageKey = key + '_' + k;\n var valueToStore = JSON.stringify(value[k]);\n storage.setItem(storageKey, valueToStore);\n delete existingValues[k];\n });\n // Delete unmatched keys from existing cookies\n Object.keys(existingValues).forEach(k => {\n storage.removeItem(key + '_' + k);\n });\n },\n removeItem: function(key) {\n var existingValues = JSON.parse(this.getItem(key));\n Object.keys(existingValues).forEach(k => {\n storage.removeItem(key + '_' + k);\n });\n },\n isSharedStorage: () => true\n };\n },\n\n // Provides an in-memory solution\n inMemoryStore: {}, // override this for a unique memory store per instance\n getInMemoryStorage: function() {\n return {\n getItem: (key) => {\n return this.inMemoryStore[key];\n },\n setItem: (key, value) => {\n this.inMemoryStore[key] = value;\n },\n isSharedStorage: () => false\n };\n },\n\n testStorage: function(storage) {\n var key = 'okta-test-storage';\n try {\n storage.setItem(key, key);\n storage.removeItem(key);\n return true;\n } catch (e) {\n return false;\n }\n },\n\n storage: {\n set: function(name: string, value: string, expiresAt: string, options: CookieOptions): string {\n const { sameSite, secure } = options;\n if (typeof secure === 'undefined' || typeof sameSite === 'undefined') {\n throw new AuthSdkError('storage.set: \"secure\" and \"sameSite\" options must be provided');\n }\n var cookieOptions: CookieOptions = {\n path: options.path || '/',\n secure,\n sameSite\n };\n\n // eslint-disable-next-line no-extra-boolean-cast\n if (!!(Date.parse(expiresAt))) {\n // Expires value can be converted to a Date object.\n //\n // If the 'expiresAt' value is not provided, or the value cannot be\n // parsed as a Date object, the cookie will set as a session cookie.\n cookieOptions.expires = new Date(expiresAt);\n }\n\n Cookies.set(name, value, cookieOptions);\n return this.get(name);\n },\n\n get: function(name?: string): string {\n // return all cookies when no args is provided\n if (!arguments.length) {\n return Cookies.get();\n }\n return Cookies.get(name);\n },\n\n delete: function(name: string): string {\n return Cookies.remove(name, { path: '/' });\n }\n }\n};\n\nexport default storageUtil;\n"],"mappings":"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"}
1
+ {"version":3,"file":"browserStorage.js","names":["storageUtil","getHttpCache","getPKCEStorage","browserHasLocalStorage","storage","getLocalStorage","testStorage","e","browserHasSessionStorage","getSessionStorage","testStorageType","storageType","supported","getStorageByType","options","storageProvider","getCookieStorage","getInMemoryStorage","AuthSdkError","findStorageType","types","curType","nextType","shift","length","window","onstorage","localStorage","sessionStorage","secure","sameSite","sessionCookie","getItem","get","setItem","key","value","expiresAt","set","removeItem","delete","isSharedStorage","useSeparateCookies","data","forEach","k","replace","JSON","parse","existingValues","storageKey","valueToStore","inMemoryStore","name","cookieOptions","path","Date","expires","Cookies","arguments","remove"],"sources":["../../../lib/browser/browserStorage.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\nimport Cookies from 'js-cookie';\nimport AuthSdkError from '../errors/AuthSdkError';\nimport {\n StorageProvider,\n StorageOptions,\n PKCEStorage,\n CookieOptions,\n SimpleStorage,\n StorageType,\n BrowserStorageUtil,\n CookieStorage\n} from '../types';\nimport { warn } from '../util';\nimport { isIE11OrLess } from '../features';\n\n// Building this as an object allows us to mock the functions in our tests\nvar storageUtil: BrowserStorageUtil = {\n\n // These are shimmed in `OktaAuthBase.ts`\n getHttpCache(): StorageProvider {\n return null as never as StorageProvider;\n },\n\n getPKCEStorage(): PKCEStorage {\n return null as never as PKCEStorage;\n },\n\n // IE11 bug that Microsoft doesn't plan to fix\n // https://connect.microsoft.com/IE/Feedback/Details/1496040\n browserHasLocalStorage: function() {\n try {\n var storage = this.getLocalStorage();\n return this.testStorage(storage);\n } catch (e) {\n return false;\n }\n },\n\n browserHasSessionStorage: function() {\n try {\n var storage = this.getSessionStorage();\n return this.testStorage(storage);\n } catch (e) {\n return false;\n }\n },\n\n testStorageType: function(storageType: StorageType): boolean {\n var supported = false;\n switch (storageType) {\n case 'sessionStorage':\n supported = this.browserHasSessionStorage();\n break;\n case 'localStorage':\n supported = this.browserHasLocalStorage();\n break;\n case 'cookie':\n case 'memory':\n supported = true;\n break;\n default:\n supported = false;\n break;\n }\n return supported;\n },\n\n getStorageByType: function(storageType: StorageType, options?: StorageOptions): SimpleStorage {\n let storageProvider;\n switch (storageType) {\n case 'sessionStorage':\n storageProvider = this.getSessionStorage();\n break;\n case 'localStorage':\n storageProvider = this.getLocalStorage();\n break;\n case 'cookie':\n storageProvider = this.getCookieStorage(options);\n break;\n case 'memory':\n storageProvider = this.getInMemoryStorage();\n break;\n default:\n throw new AuthSdkError(`Unrecognized storage option: ${storageType}`);\n break;\n }\n return storageProvider;\n },\n\n findStorageType: function(types: StorageType[]) {\n let curType;\n let nextType;\n \n types = types.slice(); // copy array\n curType = types.shift();\n nextType = types.length ? types[0] : null;\n if (!nextType) {\n return curType;\n }\n\n if (this.testStorageType(curType)) {\n return curType;\n }\n\n // preferred type was unsupported.\n warn(`This browser doesn't support ${curType}. Switching to ${nextType}.`);\n\n // fallback to the next type. this is a recursive call\n return this.findStorageType(types);\n },\n\n getLocalStorage: function() {\n // Workaound for synchronization issue of LocalStorage cross tabs in IE11\n if (isIE11OrLess() && !window.onstorage) {\n window.onstorage = function() {};\n }\n \n return localStorage;\n },\n\n getSessionStorage: function() {\n return sessionStorage;\n },\n\n // Provides webStorage-like interface for cookies\n getCookieStorage: function(options): CookieStorage {\n const secure = options!.secure;\n const sameSite = options!.sameSite;\n const sessionCookie = options!.sessionCookie;\n if (typeof secure === 'undefined' || typeof sameSite === 'undefined') {\n throw new AuthSdkError('getCookieStorage: \"secure\" and \"sameSite\" options must be provided');\n }\n const storage: CookieStorage = {\n getItem: this.storage.get,\n setItem: (key, value, expiresAt = '2200-01-01T00:00:00.000Z') => {\n // By defauilt, cookie shouldn't expire\n expiresAt = (sessionCookie ? null : expiresAt) as string;\n this.storage.set(key, value, expiresAt, {\n secure: secure, \n sameSite: sameSite,\n });\n },\n removeItem: (key) => {\n this.storage.delete(key);\n },\n // TODO: remove - https://oktainc.atlassian.net/browse/OKTA-529631\n isSharedStorage: () => true\n };\n\n if (!options!.useSeparateCookies) {\n return storage;\n }\n\n // Tokens are stored separately because cookies have size limits.\n // Can only be used when storing an object value. Object properties will be saved to separate cookies.\n // Each property of the object must also be an object.\n return {\n getItem: function(key) {\n var data = storage.getItem(); // read all cookies\n var value = {};\n Object.keys(data).forEach(k => {\n if (k.indexOf(key!) === 0) { // filter out unrelated cookies\n value[k.replace(`${key}_`, '')] = JSON.parse(data[k]); // populate with cookie data\n }\n });\n return JSON.stringify(value);\n },\n setItem: function(key, value) {\n var existingValues = JSON.parse(this.getItem(key));\n value = JSON.parse(value);\n // Set key-value pairs from input to cookies\n Object.keys(value).forEach(k => {\n var storageKey = key + '_' + k;\n var valueToStore = JSON.stringify(value[k]);\n storage.setItem(storageKey, valueToStore);\n delete existingValues[k];\n });\n // Delete unmatched keys from existing cookies\n Object.keys(existingValues).forEach(k => {\n storage.removeItem(key + '_' + k);\n });\n },\n removeItem: function(key) {\n var existingValues = JSON.parse(this.getItem(key));\n Object.keys(existingValues).forEach(k => {\n storage.removeItem(key + '_' + k);\n });\n },\n // TODO: remove - https://oktainc.atlassian.net/browse/OKTA-529631\n isSharedStorage: () => true\n };\n },\n\n // Provides an in-memory solution\n inMemoryStore: {}, // override this for a unique memory store per instance\n getInMemoryStorage: function() {\n return {\n getItem: (key) => {\n return this.inMemoryStore[key];\n },\n setItem: (key, value) => {\n this.inMemoryStore[key] = value;\n },\n // TODO: remove - https://oktainc.atlassian.net/browse/OKTA-529631\n isSharedStorage: () => false\n };\n },\n\n testStorage: function(storage) {\n var key = 'okta-test-storage';\n try {\n storage.setItem(key, key);\n storage.removeItem(key);\n return true;\n } catch (e) {\n return false;\n }\n },\n\n storage: {\n set: function(name: string, value: string, expiresAt: string, options: CookieOptions): string {\n const { sameSite, secure } = options;\n if (typeof secure === 'undefined' || typeof sameSite === 'undefined') {\n throw new AuthSdkError('storage.set: \"secure\" and \"sameSite\" options must be provided');\n }\n var cookieOptions: CookieOptions = {\n path: options.path || '/',\n secure,\n sameSite\n };\n\n // eslint-disable-next-line no-extra-boolean-cast\n if (!!(Date.parse(expiresAt))) {\n // Expires value can be converted to a Date object.\n //\n // If the 'expiresAt' value is not provided, or the value cannot be\n // parsed as a Date object, the cookie will set as a session cookie.\n cookieOptions.expires = new Date(expiresAt);\n }\n\n Cookies.set(name, value, cookieOptions);\n return this.get(name);\n },\n\n get: function(name?: string): string {\n // return all cookies when no args is provided\n if (!arguments.length) {\n return Cookies.get();\n }\n return Cookies.get(name);\n },\n\n delete: function(name: string): string {\n return Cookies.remove(name, { path: '/' });\n }\n }\n};\n\nexport default storageUtil;\n"],"mappings":"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"}
@@ -111,6 +111,7 @@ class ServerStorage {
111
111
  setItem: (key, value) => {
112
112
  this.nodeCache.set(key, value, '2200-01-01T00:00:00.000Z');
113
113
  },
114
+ // TODO: remove - https://oktainc.atlassian.net/browse/OKTA-529631
114
115
  isSharedStorage: () => true
115
116
  };
116
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"serverStorage.js","names":["sharedStorage","NodeCache","ServerCookies","constructor","nodeCache","set","name","value","expiresAt","Date","parse","ttl","now","get","delete","del","ServerStorage","storage","testStorageType","storageType","supported","getStorageByType","storageProvider","getStorage","AuthSdkError","findStorageType","getHttpCache","getItem","setItem","key","isSharedStorage"],"sources":["../../../lib/server/serverStorage.ts"],"sourcesContent":["/*!\n * Copyright (c) 2018-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-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore \n// Do not use this type in code, so it won't be emitted in the declaration output\nimport NodeCache from 'node-cache';\nimport { SimpleStorage, StorageType, StorageUtil, Cookies } from '../types';\nimport { AuthSdkError } from '../errors';\n// eslint-disable-next-line import/no-commonjs\n\n// this is a SHARED memory storage to support a stateless http server\nconst sharedStorage = typeof NodeCache === 'function' ? new NodeCache() : null;\n\nclass ServerCookies implements Cookies {\n nodeCache: any; // NodeCache\n \n constructor(nodeCache) {\n this.nodeCache = nodeCache;\n }\n\n set(name: string, value: string, expiresAt: string): string {\n // eslint-disable-next-line no-extra-boolean-cast\n if (!!(Date.parse(expiresAt))) {\n // Time to expiration in seconds\n var ttl = (Date.parse(expiresAt) - Date.now()) / 1000;\n this.nodeCache.set(name, value, ttl);\n } else {\n this.nodeCache.set(name, value);\n }\n\n return this.get(name);\n }\n\n get(name): string {\n return this.nodeCache.get(name);\n }\n\n delete(name) {\n return this.nodeCache.del(name);\n }\n}\n// Building this as an object allows us to mock the functions in our tests\nclass ServerStorage implements StorageUtil {\n nodeCache: any; // NodeCache\n storage: Cookies;\n constructor(nodeCache) {\n this.nodeCache = nodeCache;\n this.storage = new ServerCookies(nodeCache);\n }\n\n testStorageType(storageType: StorageType): boolean {\n var supported = false;\n switch (storageType) {\n case 'memory':\n supported = true;\n break;\n default:\n break;\n }\n return supported;\n }\n\n getStorageByType(storageType: StorageType): SimpleStorage {\n let storageProvider;\n switch (storageType) {\n case 'memory':\n storageProvider = this.getStorage();\n break;\n default:\n throw new AuthSdkError(`Unrecognized storage option: ${storageType}`);\n break;\n }\n return storageProvider;\n }\n\n findStorageType(): StorageType {\n return 'memory';\n }\n\n // will be removed in next version. OKTA-362589\n getHttpCache() {\n return null; // stubbed in server.js\n }\n\n // shared in-memory using node cache\n getStorage(): SimpleStorage {\n return {\n getItem: this.nodeCache.get,\n setItem: (key, value) => {\n this.nodeCache.set(key, value, '2200-01-01T00:00:00.000Z');\n },\n isSharedStorage: () => true\n };\n }\n}\n\nexport default new ServerStorage(sharedStorage);\n"],"mappings":";;;;;;AAgBA;;AAEA;;AAlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AAEA;AACA,MAAMA,aAAa,GAAG,OAAOC,kBAAP,KAAqB,UAArB,GAAkC,IAAIA,kBAAJ,EAAlC,GAAoD,IAA1E;;AAEA,MAAMC,aAAN,CAAuC;EACrB;EAEhBC,WAAW,CAACC,SAAD,EAAY;IACrB,KAAKA,SAAL,GAAiBA,SAAjB;EACD;;EAEDC,GAAG,CAACC,IAAD,EAAeC,KAAf,EAA8BC,SAA9B,EAAyD;IAC1D;IACA,IAAI,CAAC,CAAEC,IAAI,CAACC,KAAL,CAAWF,SAAX,CAAP,EAA+B;MAC7B;MACA,IAAIG,GAAG,GAAG,CAACF,IAAI,CAACC,KAAL,CAAWF,SAAX,IAAwBC,IAAI,CAACG,GAAL,EAAzB,IAAuC,IAAjD;MACA,KAAKR,SAAL,CAAeC,GAAf,CAAmBC,IAAnB,EAAyBC,KAAzB,EAAgCI,GAAhC;IACD,CAJD,MAIO;MACL,KAAKP,SAAL,CAAeC,GAAf,CAAmBC,IAAnB,EAAyBC,KAAzB;IACD;;IAED,OAAO,KAAKM,GAAL,CAASP,IAAT,CAAP;EACD;;EAEDO,GAAG,CAACP,IAAD,EAAe;IAChB,OAAO,KAAKF,SAAL,CAAeS,GAAf,CAAmBP,IAAnB,CAAP;EACD;;EAEDQ,MAAM,CAACR,IAAD,EAAO;IACX,OAAO,KAAKF,SAAL,CAAeW,GAAf,CAAmBT,IAAnB,CAAP;EACD;;AA1BoC,C,CA4BvC;;;AACA,MAAMU,aAAN,CAA2C;EACzB;EAEhBb,WAAW,CAACC,SAAD,EAAY;IACrB,KAAKA,SAAL,GAAiBA,SAAjB;IACA,KAAKa,OAAL,GAAe,IAAIf,aAAJ,CAAkBE,SAAlB,CAAf;EACD;;EAEDc,eAAe,CAACC,WAAD,EAAoC;IACjD,IAAIC,SAAS,GAAG,KAAhB;;IACA,QAAQD,WAAR;MACE,KAAK,QAAL;QACEC,SAAS,GAAG,IAAZ;QACA;;MACF;QACE;IALJ;;IAOA,OAAOA,SAAP;EACD;;EAEDC,gBAAgB,CAACF,WAAD,EAA0C;IACxD,IAAIG,eAAJ;;IACA,QAAQH,WAAR;MACE,KAAK,QAAL;QACEG,eAAe,GAAG,KAAKC,UAAL,EAAlB;QACA;;MACF;QACE,MAAM,IAAIC,oBAAJ,CAAkB,gCAA+BL,WAAY,EAA7D,CAAN;QACA;IANJ;;IAQA,OAAOG,eAAP;EACD;;EAEDG,eAAe,GAAgB;IAC7B,OAAO,QAAP;EACD,CAnCwC,CAqCzC;;;EACAC,YAAY,GAAG;IACb,OAAO,IAAP,CADa,CACA;EACd,CAxCwC,CA0CzC;;;EACAH,UAAU,GAAkB;IAC1B,OAAO;MACLI,OAAO,EAAE,KAAKvB,SAAL,CAAeS,GADnB;MAELe,OAAO,EAAE,CAACC,GAAD,EAAMtB,KAAN,KAAgB;QACvB,KAAKH,SAAL,CAAeC,GAAf,CAAmBwB,GAAnB,EAAwBtB,KAAxB,EAA+B,0BAA/B;MACD,CAJI;MAKLuB,eAAe,EAAE,MAAM;IALlB,CAAP;EAOD;;AAnDwC;;eAsD5B,IAAId,aAAJ,CAAkBhB,aAAlB,C"}
1
+ {"version":3,"file":"serverStorage.js","names":["sharedStorage","NodeCache","ServerCookies","constructor","nodeCache","set","name","value","expiresAt","Date","parse","ttl","now","get","delete","del","ServerStorage","storage","testStorageType","storageType","supported","getStorageByType","storageProvider","getStorage","AuthSdkError","findStorageType","getHttpCache","getItem","setItem","key","isSharedStorage"],"sources":["../../../lib/server/serverStorage.ts"],"sourcesContent":["/*!\n * Copyright (c) 2018-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-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore \n// Do not use this type in code, so it won't be emitted in the declaration output\nimport NodeCache from 'node-cache';\nimport { SimpleStorage, StorageType, StorageUtil, Cookies } from '../types';\nimport { AuthSdkError } from '../errors';\n// eslint-disable-next-line import/no-commonjs\n\n// this is a SHARED memory storage to support a stateless http server\nconst sharedStorage = typeof NodeCache === 'function' ? new NodeCache() : null;\n\nclass ServerCookies implements Cookies {\n nodeCache: any; // NodeCache\n \n constructor(nodeCache) {\n this.nodeCache = nodeCache;\n }\n\n set(name: string, value: string, expiresAt: string): string {\n // eslint-disable-next-line no-extra-boolean-cast\n if (!!(Date.parse(expiresAt))) {\n // Time to expiration in seconds\n var ttl = (Date.parse(expiresAt) - Date.now()) / 1000;\n this.nodeCache.set(name, value, ttl);\n } else {\n this.nodeCache.set(name, value);\n }\n\n return this.get(name);\n }\n\n get(name): string {\n return this.nodeCache.get(name);\n }\n\n delete(name) {\n return this.nodeCache.del(name);\n }\n}\n// Building this as an object allows us to mock the functions in our tests\nclass ServerStorage implements StorageUtil {\n nodeCache: any; // NodeCache\n storage: Cookies;\n constructor(nodeCache) {\n this.nodeCache = nodeCache;\n this.storage = new ServerCookies(nodeCache);\n }\n\n testStorageType(storageType: StorageType): boolean {\n var supported = false;\n switch (storageType) {\n case 'memory':\n supported = true;\n break;\n default:\n break;\n }\n return supported;\n }\n\n getStorageByType(storageType: StorageType): SimpleStorage {\n let storageProvider;\n switch (storageType) {\n case 'memory':\n storageProvider = this.getStorage();\n break;\n default:\n throw new AuthSdkError(`Unrecognized storage option: ${storageType}`);\n break;\n }\n return storageProvider;\n }\n\n findStorageType(): StorageType {\n return 'memory';\n }\n\n // will be removed in next version. OKTA-362589\n getHttpCache() {\n return null; // stubbed in server.js\n }\n\n // shared in-memory using node cache\n getStorage(): SimpleStorage {\n return {\n getItem: this.nodeCache.get,\n setItem: (key, value) => {\n this.nodeCache.set(key, value, '2200-01-01T00:00:00.000Z');\n },\n // TODO: remove - https://oktainc.atlassian.net/browse/OKTA-529631\n isSharedStorage: () => true\n };\n }\n}\n\nexport default new ServerStorage(sharedStorage);\n"],"mappings":";;;;;;AAgBA;;AAEA;;AAlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AAEA;AACA,MAAMA,aAAa,GAAG,OAAOC,kBAAP,KAAqB,UAArB,GAAkC,IAAIA,kBAAJ,EAAlC,GAAoD,IAA1E;;AAEA,MAAMC,aAAN,CAAuC;EACrB;EAEhBC,WAAW,CAACC,SAAD,EAAY;IACrB,KAAKA,SAAL,GAAiBA,SAAjB;EACD;;EAEDC,GAAG,CAACC,IAAD,EAAeC,KAAf,EAA8BC,SAA9B,EAAyD;IAC1D;IACA,IAAI,CAAC,CAAEC,IAAI,CAACC,KAAL,CAAWF,SAAX,CAAP,EAA+B;MAC7B;MACA,IAAIG,GAAG,GAAG,CAACF,IAAI,CAACC,KAAL,CAAWF,SAAX,IAAwBC,IAAI,CAACG,GAAL,EAAzB,IAAuC,IAAjD;MACA,KAAKR,SAAL,CAAeC,GAAf,CAAmBC,IAAnB,EAAyBC,KAAzB,EAAgCI,GAAhC;IACD,CAJD,MAIO;MACL,KAAKP,SAAL,CAAeC,GAAf,CAAmBC,IAAnB,EAAyBC,KAAzB;IACD;;IAED,OAAO,KAAKM,GAAL,CAASP,IAAT,CAAP;EACD;;EAEDO,GAAG,CAACP,IAAD,EAAe;IAChB,OAAO,KAAKF,SAAL,CAAeS,GAAf,CAAmBP,IAAnB,CAAP;EACD;;EAEDQ,MAAM,CAACR,IAAD,EAAO;IACX,OAAO,KAAKF,SAAL,CAAeW,GAAf,CAAmBT,IAAnB,CAAP;EACD;;AA1BoC,C,CA4BvC;;;AACA,MAAMU,aAAN,CAA2C;EACzB;EAEhBb,WAAW,CAACC,SAAD,EAAY;IACrB,KAAKA,SAAL,GAAiBA,SAAjB;IACA,KAAKa,OAAL,GAAe,IAAIf,aAAJ,CAAkBE,SAAlB,CAAf;EACD;;EAEDc,eAAe,CAACC,WAAD,EAAoC;IACjD,IAAIC,SAAS,GAAG,KAAhB;;IACA,QAAQD,WAAR;MACE,KAAK,QAAL;QACEC,SAAS,GAAG,IAAZ;QACA;;MACF;QACE;IALJ;;IAOA,OAAOA,SAAP;EACD;;EAEDC,gBAAgB,CAACF,WAAD,EAA0C;IACxD,IAAIG,eAAJ;;IACA,QAAQH,WAAR;MACE,KAAK,QAAL;QACEG,eAAe,GAAG,KAAKC,UAAL,EAAlB;QACA;;MACF;QACE,MAAM,IAAIC,oBAAJ,CAAkB,gCAA+BL,WAAY,EAA7D,CAAN;QACA;IANJ;;IAQA,OAAOG,eAAP;EACD;;EAEDG,eAAe,GAAgB;IAC7B,OAAO,QAAP;EACD,CAnCwC,CAqCzC;;;EACAC,YAAY,GAAG;IACb,OAAO,IAAP,CADa,CACA;EACd,CAxCwC,CA0CzC;;;EACAH,UAAU,GAAkB;IAC1B,OAAO;MACLI,OAAO,EAAE,KAAKvB,SAAL,CAAeS,GADnB;MAELe,OAAO,EAAE,CAACC,GAAD,EAAMtB,KAAN,KAAgB;QACvB,KAAKH,SAAL,CAAeC,GAAf,CAAmBwB,GAAnB,EAAwBtB,KAAxB,EAA+B,0BAA/B;MACD,CAJI;MAKL;MACAuB,eAAe,EAAE,MAAM;IANlB,CAAP;EAQD;;AApDwC;;eAuD5B,IAAId,aAAJ,CAAkBhB,aAAlB,C"}
@@ -45,7 +45,10 @@ class SyncStorageService {
45
45
  }
46
46
 
47
47
  canStart() {
48
- return !!this.options.syncStorage && (0, _features.isBrowser)();
48
+ // TODO: canStart logic should depend on canUse logic from broadcast-channel
49
+ // instead of the storage that TokenManager uses
50
+ // JIRA: https://oktainc.atlassian.net/browse/OKTA-529631
51
+ return !!this.options.syncStorage && (0, _features.isBrowser)() && this.tokenManager.hasSharedStorage();
49
52
  }
50
53
 
51
54
  async start() {
@@ -1 +1 @@
1
- {"version":3,"file":"SyncStorageService.js","names":["SyncStorageService","constructor","tokenManager","options","onTokenAddedHandler","bind","onTokenRemovedHandler","onTokenRenewedHandler","onSetStorageHandler","onSyncMessageHandler","requiresLeadership","isStarted","started","canStart","syncStorage","start","stop","syncChannelName","channel","BroadcastChannel","on","EVENT_ADDED","EVENT_REMOVED","EVENT_RENEWED","EVENT_SET_STORAGE","addEventListener","off","removeEventListener","close","undefined","key","token","enablePostMessage","postMessage","type","oldToken","storage","msg","getStorage","setStorage","emitAdded","setExpireEventTimeout","clearExpireEventTimeout","emitRemoved","emitRenewed"],"sources":["../../../lib/services/SyncStorageService.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\nimport { TokenManager } from '../TokenManager';\nimport { BroadcastChannel } from 'broadcast-channel';\nimport { isBrowser } from '../features';\nimport {\n ServiceManagerOptions, ServiceInterface, Token, Tokens, \n EVENT_ADDED, EVENT_REMOVED, EVENT_RENEWED, EVENT_SET_STORAGE\n} from '../types';\n\nexport type SyncMessage = {\n type: string;\n key?: string;\n token?: Token;\n oldToken?: Token;\n storage?: Tokens;\n};\nexport class SyncStorageService implements ServiceInterface {\n private tokenManager: TokenManager;\n private options: ServiceManagerOptions;\n private channel?: BroadcastChannel<SyncMessage>;\n private started = false;\n private enablePostMessage = true;\n\n constructor(tokenManager: TokenManager, options: ServiceManagerOptions = {}) {\n this.tokenManager = tokenManager;\n this.options = options;\n this.onTokenAddedHandler = this.onTokenAddedHandler.bind(this);\n this.onTokenRemovedHandler = this.onTokenRemovedHandler.bind(this);\n this.onTokenRenewedHandler = this.onTokenRenewedHandler.bind(this);\n this.onSetStorageHandler = this.onSetStorageHandler.bind(this);\n this.onSyncMessageHandler = this.onSyncMessageHandler.bind(this);\n }\n\n requiresLeadership() {\n return false;\n }\n\n isStarted() {\n return this.started;\n }\n\n canStart() {\n return !!this.options.syncStorage && isBrowser();\n }\n\n async start() {\n if (this.canStart()) {\n await this.stop();\n const { syncChannelName } = this.options;\n this.channel = new BroadcastChannel(syncChannelName as string);\n this.tokenManager.on(EVENT_ADDED, this.onTokenAddedHandler);\n this.tokenManager.on(EVENT_REMOVED, this.onTokenRemovedHandler);\n this.tokenManager.on(EVENT_RENEWED, this.onTokenRenewedHandler);\n this.tokenManager.on(EVENT_SET_STORAGE, this.onSetStorageHandler);\n this.channel.addEventListener('message', this.onSyncMessageHandler);\n this.started = true;\n }\n }\n\n async stop() {\n if (this.started) {\n this.tokenManager.off(EVENT_ADDED, this.onTokenAddedHandler);\n this.tokenManager.off(EVENT_REMOVED, this.onTokenRemovedHandler);\n this.tokenManager.off(EVENT_RENEWED, this.onTokenRenewedHandler);\n this.tokenManager.off(EVENT_SET_STORAGE, this.onSetStorageHandler);\n this.channel?.removeEventListener('message', this.onSyncMessageHandler);\n await this.channel?.close();\n this.channel = undefined;\n this.started = false;\n }\n }\n\n private onTokenAddedHandler(key: string, token: Token) {\n if (!this.enablePostMessage) {\n return;\n }\n this.channel?.postMessage({\n type: EVENT_ADDED,\n key,\n token\n });\n }\n\n private onTokenRemovedHandler(key: string, token: Token) {\n if (!this.enablePostMessage) {\n return;\n }\n this.channel?.postMessage({\n type: EVENT_REMOVED,\n key,\n token\n });\n }\n\n private onTokenRenewedHandler(key: string, token: Token, oldToken?: Token) {\n if (!this.enablePostMessage) {\n return;\n }\n this.channel?.postMessage({\n type: EVENT_RENEWED,\n key,\n token,\n oldToken\n });\n }\n\n private onSetStorageHandler(storage: Tokens) {\n this.channel?.postMessage({\n type: EVENT_SET_STORAGE,\n storage\n });\n }\n\n /* eslint-disable complexity */\n private onSyncMessageHandler(msg: SyncMessage) {\n // Notes:\n // 1. Using `enablePostMessage` flag here to prevent sync message loop.\n // If this flag is on, tokenManager event handlers do not post sync message.\n // 2. IE11 has known issue with synchronization of LocalStorage cross tabs.\n // One workaround is to set empty event handler for `window.onstorage`.\n // But it's not 100% working, sometimes you still get old value from LocalStorage.\n // Better approch is to explicitly udpate LocalStorage with `setStorage`.\n\n this.enablePostMessage = false;\n switch (msg.type) {\n case EVENT_SET_STORAGE:\n this.tokenManager.getStorage().setStorage(msg.storage);\n break;\n case EVENT_ADDED:\n this.tokenManager.emitAdded(msg.key, msg.token);\n this.tokenManager.setExpireEventTimeout(msg.key, msg.token);\n break;\n case EVENT_REMOVED:\n this.tokenManager.clearExpireEventTimeout(msg.key);\n this.tokenManager.emitRemoved(msg.key, msg.token);\n break;\n case EVENT_RENEWED:\n this.tokenManager.emitRenewed(msg.key, msg.token, msg.oldToken);\n break;\n default:\n break;\n }\n this.enablePostMessage = true;\n }\n} "],"mappings":"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"}
1
+ {"version":3,"file":"SyncStorageService.js","names":["SyncStorageService","constructor","tokenManager","options","onTokenAddedHandler","bind","onTokenRemovedHandler","onTokenRenewedHandler","onSetStorageHandler","onSyncMessageHandler","requiresLeadership","isStarted","started","canStart","syncStorage","hasSharedStorage","start","stop","syncChannelName","channel","BroadcastChannel","on","EVENT_ADDED","EVENT_REMOVED","EVENT_RENEWED","EVENT_SET_STORAGE","addEventListener","off","removeEventListener","close","undefined","key","token","enablePostMessage","postMessage","type","oldToken","storage","msg","getStorage","setStorage","emitAdded","setExpireEventTimeout","clearExpireEventTimeout","emitRemoved","emitRenewed"],"sources":["../../../lib/services/SyncStorageService.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\nimport { TokenManager } from '../TokenManager';\nimport { BroadcastChannel } from 'broadcast-channel';\nimport { isBrowser } from '../features';\nimport {\n ServiceManagerOptions, ServiceInterface, Token, Tokens, \n EVENT_ADDED, EVENT_REMOVED, EVENT_RENEWED, EVENT_SET_STORAGE\n} from '../types';\n\nexport type SyncMessage = {\n type: string;\n key?: string;\n token?: Token;\n oldToken?: Token;\n storage?: Tokens;\n};\nexport class SyncStorageService implements ServiceInterface {\n private tokenManager: TokenManager;\n private options: ServiceManagerOptions;\n private channel?: BroadcastChannel<SyncMessage>;\n private started = false;\n private enablePostMessage = true;\n\n constructor(tokenManager: TokenManager, options: ServiceManagerOptions = {}) {\n this.tokenManager = tokenManager;\n this.options = options;\n this.onTokenAddedHandler = this.onTokenAddedHandler.bind(this);\n this.onTokenRemovedHandler = this.onTokenRemovedHandler.bind(this);\n this.onTokenRenewedHandler = this.onTokenRenewedHandler.bind(this);\n this.onSetStorageHandler = this.onSetStorageHandler.bind(this);\n this.onSyncMessageHandler = this.onSyncMessageHandler.bind(this);\n }\n\n requiresLeadership() {\n return false;\n }\n\n isStarted() {\n return this.started;\n }\n\n canStart() {\n // TODO: canStart logic should depend on canUse logic from broadcast-channel \n // instead of the storage that TokenManager uses\n // JIRA: https://oktainc.atlassian.net/browse/OKTA-529631\n return !!this.options.syncStorage && isBrowser() && this.tokenManager.hasSharedStorage();\n }\n\n async start() {\n if (this.canStart()) {\n await this.stop();\n const { syncChannelName } = this.options;\n this.channel = new BroadcastChannel(syncChannelName as string);\n this.tokenManager.on(EVENT_ADDED, this.onTokenAddedHandler);\n this.tokenManager.on(EVENT_REMOVED, this.onTokenRemovedHandler);\n this.tokenManager.on(EVENT_RENEWED, this.onTokenRenewedHandler);\n this.tokenManager.on(EVENT_SET_STORAGE, this.onSetStorageHandler);\n this.channel.addEventListener('message', this.onSyncMessageHandler);\n this.started = true;\n }\n }\n\n async stop() {\n if (this.started) {\n this.tokenManager.off(EVENT_ADDED, this.onTokenAddedHandler);\n this.tokenManager.off(EVENT_REMOVED, this.onTokenRemovedHandler);\n this.tokenManager.off(EVENT_RENEWED, this.onTokenRenewedHandler);\n this.tokenManager.off(EVENT_SET_STORAGE, this.onSetStorageHandler);\n this.channel?.removeEventListener('message', this.onSyncMessageHandler);\n await this.channel?.close();\n this.channel = undefined;\n this.started = false;\n }\n }\n\n private onTokenAddedHandler(key: string, token: Token) {\n if (!this.enablePostMessage) {\n return;\n }\n this.channel?.postMessage({\n type: EVENT_ADDED,\n key,\n token\n });\n }\n\n private onTokenRemovedHandler(key: string, token: Token) {\n if (!this.enablePostMessage) {\n return;\n }\n this.channel?.postMessage({\n type: EVENT_REMOVED,\n key,\n token\n });\n }\n\n private onTokenRenewedHandler(key: string, token: Token, oldToken?: Token) {\n if (!this.enablePostMessage) {\n return;\n }\n this.channel?.postMessage({\n type: EVENT_RENEWED,\n key,\n token,\n oldToken\n });\n }\n\n private onSetStorageHandler(storage: Tokens) {\n this.channel?.postMessage({\n type: EVENT_SET_STORAGE,\n storage\n });\n }\n\n /* eslint-disable complexity */\n private onSyncMessageHandler(msg: SyncMessage) {\n // Notes:\n // 1. Using `enablePostMessage` flag here to prevent sync message loop.\n // If this flag is on, tokenManager event handlers do not post sync message.\n // 2. IE11 has known issue with synchronization of LocalStorage cross tabs.\n // One workaround is to set empty event handler for `window.onstorage`.\n // But it's not 100% working, sometimes you still get old value from LocalStorage.\n // Better approch is to explicitly udpate LocalStorage with `setStorage`.\n\n this.enablePostMessage = false;\n switch (msg.type) {\n case EVENT_SET_STORAGE:\n this.tokenManager.getStorage().setStorage(msg.storage);\n break;\n case EVENT_ADDED:\n this.tokenManager.emitAdded(msg.key, msg.token);\n this.tokenManager.setExpireEventTimeout(msg.key, msg.token);\n break;\n case EVENT_REMOVED:\n this.tokenManager.clearExpireEventTimeout(msg.key);\n this.tokenManager.emitRemoved(msg.key, msg.token);\n break;\n case EVENT_RENEWED:\n this.tokenManager.emitRenewed(msg.key, msg.token, msg.oldToken);\n break;\n default:\n break;\n }\n this.enablePostMessage = true;\n }\n} "],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.js","names":[],"sources":["../../../lib/types/Storage.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\nimport { TransactionMeta } from './Transaction';\nimport { Cookies, CookieOptions } from './Cookies';\nimport { RawIdxResponse } from '../idx/types/idx-js';\nimport { IntrospectOptions } from '.';\n\n// for V1 authn interface: tx.resume()\nexport interface TxStorage {\n get(name: string): string;\n set(name: string, value: string, expiresAt: string, options: CookieOptions): string;\n delete(name: string): string;\n}\n\nexport interface SimpleStorage {\n getItem(key: string): any;\n setItem(key: string, value: any): void;\n removeItem?: (key: string) => void;\n isSharedStorage?(): boolean;\n}\n\nexport interface StorageProvider extends SimpleStorage {\n setStorage(obj: any): void;\n getStorage(): any;\n clearStorage(key?: string): void;\n updateStorage(key: string, value: any): void;\n isSharedStorage(): boolean;\n}\n\n// will be removed in next version. OKTA-362589\nexport interface PKCEMeta {\n codeVerifier: string;\n redirectUri: string;\n}\n\n// will be removed in next version. OKTA-362589\nexport interface PKCEStorage extends StorageProvider {\n setStorage(obj: PKCEMeta): void;\n getStorage(): PKCEMeta;\n}\n\nexport interface TransactionStorage extends StorageProvider {\n setStorage(obj: TransactionMeta): void;\n getStorage(): TransactionMeta;\n}\n\nexport interface SavedIdxResponse extends\n Pick<IntrospectOptions,\n 'stateHandle' |\n 'interactionHandle'\n >\n{\n rawIdxResponse: RawIdxResponse;\n requestDidSucceed?: boolean;\n}\nexport interface IdxResponseStorage extends StorageProvider {\n setStorage(obj: SavedIdxResponse): void;\n getStorage(): SavedIdxResponse;\n}\n\nexport type StorageType = 'memory' | 'sessionStorage' | 'localStorage' | 'cookie' | 'custom' | 'auto';\nexport interface StorageOptions extends CookieOptions {\n storageType?: StorageType;\n storageTypes?: StorageType[];\n storageProvider?: SimpleStorage;\n storageKey?: string;\n useSeparateCookies?: boolean;\n}\n\nexport interface StorageUtil {\n storage: TxStorage;\n testStorageType(storageType: StorageType): boolean;\n getStorageByType(storageType: StorageType, options?: StorageOptions): SimpleStorage;\n findStorageType(types: StorageType[]): StorageType;\n}\n\nexport interface CookieStorage extends SimpleStorage {\n setItem(key: string, value: any, expiresAt?: string | null): void; // can customize expiresAt\n getItem(key?: string): any; // if no key is passed, all cookies are returned\n removeItem(key: string); // remove a cookie\n}\n\nexport interface BrowserStorageUtil extends StorageUtil {\n browserHasLocalStorage(): boolean;\n browserHasSessionStorage(): boolean;\n getStorageByType(storageType: StorageType, options: StorageOptions): SimpleStorage;\n getLocalStorage(): Storage;\n getSessionStorage(): Storage;\n getInMemoryStorage(): SimpleStorage;\n getCookieStorage(options?: StorageOptions): CookieStorage;\n testStorage(storage: any): boolean;\n storage: Cookies;\n inMemoryStore: Record<string, unknown>;\n\n // will be removed in next version. OKTA-362589\n getHttpCache(options?: StorageOptions): StorageProvider;\n getPKCEStorage(options?: StorageOptions): PKCEStorage;\n}\n\nexport interface NodeStorageUtil extends StorageUtil {\n // will be removed in next version. OKTA-362589\n getHttpCache(options?: StorageOptions): StorageProvider;\n getStorage(): SimpleStorage;\n}\n\n// type StorageBuilder = (storage: Storage | SimpleStorage, name: string) => StorageProvider;\n\nexport interface StorageManagerOptions {\n token?: StorageOptions;\n transaction?: StorageOptions;\n [propName: string]: StorageOptions | undefined; // custom sections are allowed\n}\n"],"mappings":""}
1
+ {"version":3,"file":"Storage.js","names":[],"sources":["../../../lib/types/Storage.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\nimport { TransactionMeta } from './Transaction';\nimport { Cookies, CookieOptions } from './Cookies';\nimport { RawIdxResponse } from '../idx/types/idx-js';\nimport { IntrospectOptions } from '.';\n\n// for V1 authn interface: tx.resume()\nexport interface TxStorage {\n get(name: string): string;\n set(name: string, value: string, expiresAt: string, options: CookieOptions): string;\n delete(name: string): string;\n}\n\nexport interface SimpleStorage {\n getItem(key: string): any;\n setItem(key: string, value: any): void;\n removeItem?: (key: string) => void;\n // TODO: remove - https://oktainc.atlassian.net/browse/OKTA-529631\n isSharedStorage?(): boolean;\n}\n\nexport interface StorageProvider extends SimpleStorage {\n setStorage(obj: any): void;\n getStorage(): any;\n clearStorage(key?: string): void;\n updateStorage(key: string, value: any): void;\n // TODO: remove - https://oktainc.atlassian.net/browse/OKTA-529631\n isSharedStorage(): boolean;\n}\n\n// will be removed in next version. OKTA-362589\nexport interface PKCEMeta {\n codeVerifier: string;\n redirectUri: string;\n}\n\n// will be removed in next version. OKTA-362589\nexport interface PKCEStorage extends StorageProvider {\n setStorage(obj: PKCEMeta): void;\n getStorage(): PKCEMeta;\n}\n\nexport interface TransactionStorage extends StorageProvider {\n setStorage(obj: TransactionMeta): void;\n getStorage(): TransactionMeta;\n}\n\nexport interface SavedIdxResponse extends\n Pick<IntrospectOptions,\n 'stateHandle' |\n 'interactionHandle'\n >\n{\n rawIdxResponse: RawIdxResponse;\n requestDidSucceed?: boolean;\n}\nexport interface IdxResponseStorage extends StorageProvider {\n setStorage(obj: SavedIdxResponse): void;\n getStorage(): SavedIdxResponse;\n}\n\nexport type StorageType = 'memory' | 'sessionStorage' | 'localStorage' | 'cookie' | 'custom' | 'auto';\nexport interface StorageOptions extends CookieOptions {\n storageType?: StorageType;\n storageTypes?: StorageType[];\n storageProvider?: SimpleStorage;\n storageKey?: string;\n useSeparateCookies?: boolean;\n}\n\nexport interface StorageUtil {\n storage: TxStorage;\n testStorageType(storageType: StorageType): boolean;\n getStorageByType(storageType: StorageType, options?: StorageOptions): SimpleStorage;\n findStorageType(types: StorageType[]): StorageType;\n}\n\nexport interface CookieStorage extends SimpleStorage {\n setItem(key: string, value: any, expiresAt?: string | null): void; // can customize expiresAt\n getItem(key?: string): any; // if no key is passed, all cookies are returned\n removeItem(key: string); // remove a cookie\n}\n\nexport interface BrowserStorageUtil extends StorageUtil {\n browserHasLocalStorage(): boolean;\n browserHasSessionStorage(): boolean;\n getStorageByType(storageType: StorageType, options: StorageOptions): SimpleStorage;\n getLocalStorage(): Storage;\n getSessionStorage(): Storage;\n getInMemoryStorage(): SimpleStorage;\n getCookieStorage(options?: StorageOptions): CookieStorage;\n testStorage(storage: any): boolean;\n storage: Cookies;\n inMemoryStore: Record<string, unknown>;\n\n // will be removed in next version. OKTA-362589\n getHttpCache(options?: StorageOptions): StorageProvider;\n getPKCEStorage(options?: StorageOptions): PKCEStorage;\n}\n\nexport interface NodeStorageUtil extends StorageUtil {\n // will be removed in next version. OKTA-362589\n getHttpCache(options?: StorageOptions): StorageProvider;\n getStorage(): SimpleStorage;\n}\n\n// type StorageBuilder = (storage: Storage | SimpleStorage, name: string) => StorageProvider;\n\nexport interface StorageManagerOptions {\n token?: StorageOptions;\n transaction?: StorageOptions;\n [propName: string]: StorageOptions | undefined; // custom sections are allowed\n}\n"],"mappings":""}
package/cjs/util/index.js CHANGED
@@ -66,4 +66,17 @@ _Object$keys(_url).forEach(function (key) {
66
66
  }
67
67
  });
68
68
  });
69
+
70
+ var _storage = require("./storage");
71
+
72
+ _Object$keys(_storage).forEach(function (key) {
73
+ if (key === "default" || key === "__esModule") return;
74
+ if (key in exports && exports[key] === _storage[key]) return;
75
+ Object.defineProperty(exports, key, {
76
+ enumerable: true,
77
+ get: function () {
78
+ return _storage[key];
79
+ }
80
+ });
81
+ });
69
82
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../lib/util/index.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\nexport * from './console';\nexport * from './misc';\nexport * from './object';\nexport * from './types';\nexport * from './url';\n"],"mappings":";;;;AAaA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../lib/util/index.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\nexport * from './console';\nexport * from './misc';\nexport * from './object';\nexport * from './types';\nexport * from './url';\nexport * from './storage';\n"],"mappings":";;;;AAaA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ exports.isLocalStorageAvailable = isLocalStorageAvailable;
4
+
5
+ /*!
6
+ * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
7
+ * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
8
+ *
9
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ *
14
+ * See the License for the specific language governing permissions and limitations under the License.
15
+ */
16
+ // TODO: remove once the usage is removed from SaveObject.ts
17
+ // JIRA: https://oktainc.atlassian.net/browse/OKTA-529631
18
+ function isLocalStorageAvailable() {
19
+ const test = 'test';
20
+
21
+ try {
22
+ localStorage.setItem(test, test);
23
+ localStorage.removeItem(test);
24
+ return true;
25
+ } catch {
26
+ return false;
27
+ }
28
+ }
29
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","names":["isLocalStorageAvailable","test","localStorage","setItem","removeItem"],"sources":["../../../lib/util/storage.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// TODO: remove once the usage is removed from SaveObject.ts\n// JIRA: https://oktainc.atlassian.net/browse/OKTA-529631\nexport function isLocalStorageAvailable(): boolean {\n const test = 'test';\n try {\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACO,SAASA,uBAAT,GAA4C;EACjD,MAAMC,IAAI,GAAG,MAAb;;EACA,IAAI;IACFC,YAAY,CAACC,OAAb,CAAqBF,IAArB,EAA2BA,IAA3B;IACAC,YAAY,CAACE,UAAb,CAAwBH,IAAxB;IACA,OAAO,IAAP;EACD,CAJD,CAIE,MAAM;IACN,OAAO,KAAP;EACD;AACF"}