@azure/msal-node-extensions
Advanced tools
Comparing version 1.0.0-alpha.7 to 1.0.0-alpha.8
@@ -5,2 +5,17 @@ { | ||
{ | ||
"date": "Tue, 29 Jun 2021 00:28:30 GMT", | ||
"tag": "@azure/msal-node-extensions_v1.0.0-alpha.8", | ||
"version": "1.0.0-alpha.8", | ||
"comments": { | ||
"prerelease": [ | ||
{ | ||
"comment": "verifyPersistence returns the right value on failure(#3787)", | ||
"author": "sameera.gajjarapu@microsoft.com", | ||
"commit": "dc8086acc0ccc91e066e886adffd5895911d33f0", | ||
"package": "@azure/msal-node-extensions" | ||
} | ||
] | ||
} | ||
}, | ||
{ | ||
"date": "Wed, 23 Jun 2021 00:01:49 GMT", | ||
@@ -7,0 +22,0 @@ "tag": "@azure/msal-node-extensions_v1.0.0-alpha.7", |
# Change Log - @azure/msal-node-extensions | ||
This log was last generated on Wed, 23 Jun 2021 00:01:49 GMT and should not be manually modified. | ||
This log was last generated on Tue, 29 Jun 2021 00:28:30 GMT and should not be manually modified. | ||
<!-- Start content --> | ||
## 1.0.0-alpha.8 | ||
Tue, 29 Jun 2021 00:28:30 GMT | ||
### Changes | ||
- verifyPersistence returns the right value on failure(#3787) (sameera.gajjarapu@microsoft.com) | ||
## 1.0.0-alpha.7 | ||
@@ -8,0 +16,0 @@ |
@@ -297,3 +297,3 @@ 'use strict'; | ||
try { | ||
persistenceValidator.save(Constants.PERSISTENCE_TEST_DATA); | ||
await persistenceValidator.save(Constants.PERSISTENCE_TEST_DATA); | ||
const retrievedDummyData = await persistenceValidator.load(); | ||
@@ -308,7 +308,7 @@ | ||
} | ||
await persistenceValidator.delete(); | ||
return true; | ||
} catch (e) { | ||
throw PersistenceError.createCachePersistenceError(`Verifing persistence failed with the error: ${e}`); | ||
} finally { | ||
persistenceValidator.delete(); | ||
return true; | ||
} | ||
@@ -315,0 +315,0 @@ } |
@@ -1,2 +0,2 @@ | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs"),t=require("process"),r=require("path"),s=require("@azure/msal-common"),i=require("keytar");class a extends Error{constructor(e,t){super(t?`${e}: ${t}`:e),Object.setPrototypeOf(this,a.prototype),this.errorCode=e,this.errorMessage=t,this.name="PersistenceError"}static createFileSystemError(e,t){return new a(e,t)}static createLibSecretError(e){return new a("GnomeKeyringError",e)}static createKeychainPersistenceError(e){return new a("KeychainError",e)}static createFilePersistenceWithDPAPIError(e){return new a("DPAPIEncryptedFileError",e)}static createCrossPlatformLockError(e){return new a("CrossPlatformLockError",e)}static createCachePersistenceError(e){return new a("CachePersistenceError",e)}}class c{constructor(e,t,r){this.lockFilePath=e,this.retryNumber=r?r.retryNumber:500,this.retryDelay=r?r.retryDelay:100,this.logger=t}async lock(){for(let r=0;r<this.retryNumber;r++)try{return this.logger.info(`Pid ${t.pid} trying to acquire lock`),this.lockFileHandle=await e.promises.open(this.lockFilePath,"wx+"),this.logger.info(`Pid ${t.pid} acquired lock`),void await this.lockFileHandle.write(t.pid.toString())}catch(e){if("EEXIST"!==e.code&&"EPERM"!==e.code)throw this.logger.error(`${t.pid} was not able to acquire lock. Ran into error: ${e.message}`),a.createCrossPlatformLockError(e.message);this.logger.info(e),await this.sleep(this.retryDelay)}throw this.logger.error(t.pid+" was not able to acquire lock. Exceeded amount of retries set in the options"),a.createCrossPlatformLockError("Not able to acquire lock. Exceeded amount of retries set in options")}async unlock(){try{this.lockFileHandle?(await e.promises.unlink(this.lockFilePath),await this.lockFileHandle.close(),this.logger.info("lockfile deleted")):this.logger.warning("lockfile handle does not exist, so lockfile could not be deleted")}catch(e){if("ENOENT"!==e.code)throw this.logger.error(`${t.pid} was not able to release lock. Ran into error: ${e.message}`),a.createCrossPlatformLockError(e.message);this.logger.info("Tried to unlock but lockfile does not exist")}}sleep(e){return new Promise(t=>{setTimeout(t,e)})}}class o{async verifyPersistence(){const e=await this.createForPersistenceValidation();try{e.save("Dummy data to verify underlying persistence mechanism");const t=await e.load();if(!t)throw a.createCachePersistenceError("Persistence check failed. Data was written but it could not be read. Possible cause: on Linux, LibSecret is installed but D-Bus isn't running because it cannot be started over SSH.");if("Dummy data to verify underlying persistence mechanism"!==t)throw a.createCachePersistenceError("Persistence check failed. Data written Dummy data to verify underlying persistence mechanism is different from data read "+t)}catch(e){throw a.createCachePersistenceError("Verifing persistence failed with the error: "+e)}finally{return e.delete(),!0}}}class n extends o{static async create(e,t){const r=new n;return r.filePath=e,r.logger=new s.Logger(t||n.createDefaultLoggerOptions()),await r.createCacheFile(),r}async save(t){try{await e.promises.writeFile(this.getFilePath(),t,"utf-8")}catch(e){throw a.createFileSystemError(e.code,e.message)}}async saveBuffer(t){try{await e.promises.writeFile(this.getFilePath(),t)}catch(e){throw a.createFileSystemError(e.code,e.message)}}async load(){try{return await e.promises.readFile(this.getFilePath(),"utf-8")}catch(e){throw a.createFileSystemError(e.code,e.message)}}async loadBuffer(){try{return await e.promises.readFile(this.getFilePath())}catch(e){throw a.createFileSystemError(e.code,e.message)}}async delete(){try{return await e.promises.unlink(this.getFilePath()),!0}catch(e){if("ENOENT"===e.code)return this.logger.warning("Cache file does not exist, so it could not be deleted"),!1;throw a.createFileSystemError(e.code,e.message)}}getFilePath(){return this.filePath}async reloadNecessary(e){return e<await this.timeLastModified()}getLogger(){return this.logger}createForPersistenceValidation(){const e=r.dirname(this.filePath)+"/test.cache";return n.create(e)}static createDefaultLoggerOptions(){return{loggerCallback:()=>{},piiLoggingEnabled:!1,logLevel:s.LogLevel.Info}}async timeLastModified(){try{return(await e.promises.stat(this.filePath)).mtime.getTime()}catch(e){if("ENOENT"===e.code)return this.logger.verbose("Cache file does not exist"),0;throw a.createFileSystemError(e.code,e.message)}}async createCacheFile(){await this.createFileDirectory();const t=await e.promises.open(this.filePath,"a");await t.close(),this.logger.info("File created at "+this.filePath)}async createFileDirectory(){try{await e.promises.mkdir(r.dirname(this.filePath),{recursive:!0})}catch(e){if("EEXIST"!==e.code)throw a.createFileSystemError(e.code,e.message);this.logger.info(`Directory ${r.dirname(this.filePath)} already exists`)}}}var l,h=require("bindings")("dpapi");(l=exports.DataProtectionScope||(exports.DataProtectionScope={})).CurrentUser="CurrentUser",l.LocalMachine="LocalMachine";class g extends o{constructor(e,t){super(),this.scope=e,this.optionalEntropy=t?Buffer.from(t,"utf-8"):null}static async create(e,t,r,s){const i=new g(t,r);return i.filePersistence=await n.create(e,s),i}async save(e){try{const t=h.protectData(Buffer.from(e,"utf-8"),this.optionalEntropy,this.scope.toString());await this.filePersistence.saveBuffer(t)}catch(e){throw a.createFilePersistenceWithDPAPIError(e.message)}}async load(){try{const e=await this.filePersistence.loadBuffer();return void 0!==e&&e&&0!==e.length?h.unprotectData(e,this.optionalEntropy,this.scope.toString()).toString():(this.filePersistence.getLogger().info("Encrypted contents loaded from file were null or empty"),null)}catch(e){throw a.createFilePersistenceWithDPAPIError(e.message)}}async delete(){return this.filePersistence.delete()}async reloadNecessary(e){return this.filePersistence.reloadNecessary(e)}getFilePath(){return this.filePersistence.getFilePath()}getLogger(){return this.filePersistence.getLogger()}createForPersistenceValidation(){const e=r.dirname(this.filePersistence.getFilePath())+"/test.cache";return g.create(e,exports.DataProtectionScope.CurrentUser)}}class d extends o{constructor(e,t){super(),this.serviceName=e,this.accountName=t}static async create(e,t,r,s){const i=new d(t,r);return i.filePersistence=await n.create(e,s),i}async save(e){try{await i.setPassword(this.serviceName,this.accountName,e)}catch(e){throw a.createKeychainPersistenceError(e.message)}await this.filePersistence.save("{}")}async load(){try{return await i.getPassword(this.serviceName,this.accountName)}catch(e){throw a.createKeychainPersistenceError(e.message)}}async delete(){try{return await this.filePersistence.delete(),await i.deletePassword(this.serviceName,this.accountName)}catch(e){throw a.createKeychainPersistenceError(e.message)}}async reloadNecessary(e){return this.filePersistence.reloadNecessary(e)}getFilePath(){return this.filePersistence.getFilePath()}getLogger(){return this.filePersistence.getLogger()}createForPersistenceValidation(){const e=r.dirname(this.filePersistence.getFilePath())+"/test.cache";return d.create(e,"persistenceValidationServiceName","persistencValidationAccountName")}}class u extends o{constructor(e,t){super(),this.serviceName=e,this.accountName=t}static async create(e,t,r,s){const i=new u(t,r);return i.filePersistence=await n.create(e,s),i}async save(e){try{await i.setPassword(this.serviceName,this.accountName,e)}catch(e){throw a.createLibSecretError(e.message)}await this.filePersistence.save("{}")}async load(){try{return await i.getPassword(this.serviceName,this.accountName)}catch(e){throw a.createLibSecretError(e.message)}}async delete(){try{return await this.filePersistence.delete(),await i.deletePassword(this.serviceName,this.accountName)}catch(e){throw a.createLibSecretError(e.message)}}async reloadNecessary(e){return this.filePersistence.reloadNecessary(e)}getFilePath(){return this.filePersistence.getFilePath()}getLogger(){return this.filePersistence.getLogger()}createForPersistenceValidation(){const e=r.dirname(this.filePersistence.getFilePath())+"/test.cache";return u.create(e,"persistenceValidationServiceName","persistencValidationAccountName")}}exports.FilePersistence=n,exports.FilePersistenceWithDataProtection=g,exports.KeychainPersistence=d,exports.LibSecretPersistence=u,exports.PersistenceCachePlugin=class{constructor(e,t){this.persistence=e,this.logger=e.getLogger(),this.lockFilePath=this.persistence.getFilePath()+".lockfile",this.crossPlatformLock=new c(this.lockFilePath,this.logger,t),this.lastSync=0,this.currentCache=null}async beforeCacheAccess(e){if(this.logger.info("Executing before cache access"),await this.persistence.reloadNecessary(this.lastSync)||null===this.currentCache)try{this.logger.info("Reload necessary. Last sync time: "+this.lastSync),await this.crossPlatformLock.lock(),this.currentCache=await this.persistence.load(),this.lastSync=(new Date).getTime(),e.tokenCache.deserialize(this.currentCache),this.logger.info("Last sync time updated to: "+this.lastSync)}finally{e.cacheHasChanged?this.logger.info(`Pid ${t.pid} beforeCacheAccess did not release lock`):(await this.crossPlatformLock.unlock(),this.logger.info(`Pid ${t.pid} released lock`))}else e.cacheHasChanged&&(this.logger.verbose("Cache context has changed"),await this.crossPlatformLock.lock())}async afterCacheAccess(e){this.logger.info("Executing after cache access");try{e.cacheHasChanged?(this.logger.info("Msal in-memory cache has changed. Writing changes to persistence"),this.currentCache=e.tokenCache.serialize(),await this.persistence.save(this.currentCache)):this.logger.info("Msal in-memory cache has not changed. Did not write to persistence")}finally{await this.crossPlatformLock.unlock(),this.logger.info(`Pid ${t.pid} afterCacheAccess released lock`)}}}; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs"),t=require("process"),r=require("path"),s=require("@azure/msal-common"),i=require("keytar");class a extends Error{constructor(e,t){super(t?`${e}: ${t}`:e),Object.setPrototypeOf(this,a.prototype),this.errorCode=e,this.errorMessage=t,this.name="PersistenceError"}static createFileSystemError(e,t){return new a(e,t)}static createLibSecretError(e){return new a("GnomeKeyringError",e)}static createKeychainPersistenceError(e){return new a("KeychainError",e)}static createFilePersistenceWithDPAPIError(e){return new a("DPAPIEncryptedFileError",e)}static createCrossPlatformLockError(e){return new a("CrossPlatformLockError",e)}static createCachePersistenceError(e){return new a("CachePersistenceError",e)}}class c{constructor(e,t,r){this.lockFilePath=e,this.retryNumber=r?r.retryNumber:500,this.retryDelay=r?r.retryDelay:100,this.logger=t}async lock(){for(let r=0;r<this.retryNumber;r++)try{return this.logger.info(`Pid ${t.pid} trying to acquire lock`),this.lockFileHandle=await e.promises.open(this.lockFilePath,"wx+"),this.logger.info(`Pid ${t.pid} acquired lock`),void await this.lockFileHandle.write(t.pid.toString())}catch(e){if("EEXIST"!==e.code&&"EPERM"!==e.code)throw this.logger.error(`${t.pid} was not able to acquire lock. Ran into error: ${e.message}`),a.createCrossPlatformLockError(e.message);this.logger.info(e),await this.sleep(this.retryDelay)}throw this.logger.error(t.pid+" was not able to acquire lock. Exceeded amount of retries set in the options"),a.createCrossPlatformLockError("Not able to acquire lock. Exceeded amount of retries set in options")}async unlock(){try{this.lockFileHandle?(await e.promises.unlink(this.lockFilePath),await this.lockFileHandle.close(),this.logger.info("lockfile deleted")):this.logger.warning("lockfile handle does not exist, so lockfile could not be deleted")}catch(e){if("ENOENT"!==e.code)throw this.logger.error(`${t.pid} was not able to release lock. Ran into error: ${e.message}`),a.createCrossPlatformLockError(e.message);this.logger.info("Tried to unlock but lockfile does not exist")}}sleep(e){return new Promise(t=>{setTimeout(t,e)})}}class o{async verifyPersistence(){const e=await this.createForPersistenceValidation();try{await e.save("Dummy data to verify underlying persistence mechanism");const t=await e.load();if(!t)throw a.createCachePersistenceError("Persistence check failed. Data was written but it could not be read. Possible cause: on Linux, LibSecret is installed but D-Bus isn't running because it cannot be started over SSH.");if("Dummy data to verify underlying persistence mechanism"!==t)throw a.createCachePersistenceError("Persistence check failed. Data written Dummy data to verify underlying persistence mechanism is different from data read "+t);return await e.delete(),!0}catch(e){throw a.createCachePersistenceError("Verifing persistence failed with the error: "+e)}}}class n extends o{static async create(e,t){const r=new n;return r.filePath=e,r.logger=new s.Logger(t||n.createDefaultLoggerOptions()),await r.createCacheFile(),r}async save(t){try{await e.promises.writeFile(this.getFilePath(),t,"utf-8")}catch(e){throw a.createFileSystemError(e.code,e.message)}}async saveBuffer(t){try{await e.promises.writeFile(this.getFilePath(),t)}catch(e){throw a.createFileSystemError(e.code,e.message)}}async load(){try{return await e.promises.readFile(this.getFilePath(),"utf-8")}catch(e){throw a.createFileSystemError(e.code,e.message)}}async loadBuffer(){try{return await e.promises.readFile(this.getFilePath())}catch(e){throw a.createFileSystemError(e.code,e.message)}}async delete(){try{return await e.promises.unlink(this.getFilePath()),!0}catch(e){if("ENOENT"===e.code)return this.logger.warning("Cache file does not exist, so it could not be deleted"),!1;throw a.createFileSystemError(e.code,e.message)}}getFilePath(){return this.filePath}async reloadNecessary(e){return e<await this.timeLastModified()}getLogger(){return this.logger}createForPersistenceValidation(){const e=r.dirname(this.filePath)+"/test.cache";return n.create(e)}static createDefaultLoggerOptions(){return{loggerCallback:()=>{},piiLoggingEnabled:!1,logLevel:s.LogLevel.Info}}async timeLastModified(){try{return(await e.promises.stat(this.filePath)).mtime.getTime()}catch(e){if("ENOENT"===e.code)return this.logger.verbose("Cache file does not exist"),0;throw a.createFileSystemError(e.code,e.message)}}async createCacheFile(){await this.createFileDirectory();const t=await e.promises.open(this.filePath,"a");await t.close(),this.logger.info("File created at "+this.filePath)}async createFileDirectory(){try{await e.promises.mkdir(r.dirname(this.filePath),{recursive:!0})}catch(e){if("EEXIST"!==e.code)throw a.createFileSystemError(e.code,e.message);this.logger.info(`Directory ${r.dirname(this.filePath)} already exists`)}}}var l,h=require("bindings")("dpapi");(l=exports.DataProtectionScope||(exports.DataProtectionScope={})).CurrentUser="CurrentUser",l.LocalMachine="LocalMachine";class g extends o{constructor(e,t){super(),this.scope=e,this.optionalEntropy=t?Buffer.from(t,"utf-8"):null}static async create(e,t,r,s){const i=new g(t,r);return i.filePersistence=await n.create(e,s),i}async save(e){try{const t=h.protectData(Buffer.from(e,"utf-8"),this.optionalEntropy,this.scope.toString());await this.filePersistence.saveBuffer(t)}catch(e){throw a.createFilePersistenceWithDPAPIError(e.message)}}async load(){try{const e=await this.filePersistence.loadBuffer();return void 0!==e&&e&&0!==e.length?h.unprotectData(e,this.optionalEntropy,this.scope.toString()).toString():(this.filePersistence.getLogger().info("Encrypted contents loaded from file were null or empty"),null)}catch(e){throw a.createFilePersistenceWithDPAPIError(e.message)}}async delete(){return this.filePersistence.delete()}async reloadNecessary(e){return this.filePersistence.reloadNecessary(e)}getFilePath(){return this.filePersistence.getFilePath()}getLogger(){return this.filePersistence.getLogger()}createForPersistenceValidation(){const e=r.dirname(this.filePersistence.getFilePath())+"/test.cache";return g.create(e,exports.DataProtectionScope.CurrentUser)}}class d extends o{constructor(e,t){super(),this.serviceName=e,this.accountName=t}static async create(e,t,r,s){const i=new d(t,r);return i.filePersistence=await n.create(e,s),i}async save(e){try{await i.setPassword(this.serviceName,this.accountName,e)}catch(e){throw a.createKeychainPersistenceError(e.message)}await this.filePersistence.save("{}")}async load(){try{return await i.getPassword(this.serviceName,this.accountName)}catch(e){throw a.createKeychainPersistenceError(e.message)}}async delete(){try{return await this.filePersistence.delete(),await i.deletePassword(this.serviceName,this.accountName)}catch(e){throw a.createKeychainPersistenceError(e.message)}}async reloadNecessary(e){return this.filePersistence.reloadNecessary(e)}getFilePath(){return this.filePersistence.getFilePath()}getLogger(){return this.filePersistence.getLogger()}createForPersistenceValidation(){const e=r.dirname(this.filePersistence.getFilePath())+"/test.cache";return d.create(e,"persistenceValidationServiceName","persistencValidationAccountName")}}class u extends o{constructor(e,t){super(),this.serviceName=e,this.accountName=t}static async create(e,t,r,s){const i=new u(t,r);return i.filePersistence=await n.create(e,s),i}async save(e){try{await i.setPassword(this.serviceName,this.accountName,e)}catch(e){throw a.createLibSecretError(e.message)}await this.filePersistence.save("{}")}async load(){try{return await i.getPassword(this.serviceName,this.accountName)}catch(e){throw a.createLibSecretError(e.message)}}async delete(){try{return await this.filePersistence.delete(),await i.deletePassword(this.serviceName,this.accountName)}catch(e){throw a.createLibSecretError(e.message)}}async reloadNecessary(e){return this.filePersistence.reloadNecessary(e)}getFilePath(){return this.filePersistence.getFilePath()}getLogger(){return this.filePersistence.getLogger()}createForPersistenceValidation(){const e=r.dirname(this.filePersistence.getFilePath())+"/test.cache";return u.create(e,"persistenceValidationServiceName","persistencValidationAccountName")}}exports.FilePersistence=n,exports.FilePersistenceWithDataProtection=g,exports.KeychainPersistence=d,exports.LibSecretPersistence=u,exports.PersistenceCachePlugin=class{constructor(e,t){this.persistence=e,this.logger=e.getLogger(),this.lockFilePath=this.persistence.getFilePath()+".lockfile",this.crossPlatformLock=new c(this.lockFilePath,this.logger,t),this.lastSync=0,this.currentCache=null}async beforeCacheAccess(e){if(this.logger.info("Executing before cache access"),await this.persistence.reloadNecessary(this.lastSync)||null===this.currentCache)try{this.logger.info("Reload necessary. Last sync time: "+this.lastSync),await this.crossPlatformLock.lock(),this.currentCache=await this.persistence.load(),this.lastSync=(new Date).getTime(),e.tokenCache.deserialize(this.currentCache),this.logger.info("Last sync time updated to: "+this.lastSync)}finally{e.cacheHasChanged?this.logger.info(`Pid ${t.pid} beforeCacheAccess did not release lock`):(await this.crossPlatformLock.unlock(),this.logger.info(`Pid ${t.pid} released lock`))}else e.cacheHasChanged&&(this.logger.verbose("Cache context has changed"),await this.crossPlatformLock.lock())}async afterCacheAccess(e){this.logger.info("Executing after cache access");try{e.cacheHasChanged?(this.logger.info("Msal in-memory cache has changed. Writing changes to persistence"),this.currentCache=e.tokenCache.serialize(),await this.persistence.save(this.currentCache)):this.logger.info("Msal in-memory cache has not changed. Did not write to persistence")}finally{await this.crossPlatformLock.unlock(),this.logger.info(`Pid ${t.pid} afterCacheAccess released lock`)}}}; | ||
//# sourceMappingURL=msal-node-extensions.cjs.production.min.js.map |
@@ -293,3 +293,3 @@ import { promises } from 'fs'; | ||
try { | ||
persistenceValidator.save(Constants.PERSISTENCE_TEST_DATA); | ||
await persistenceValidator.save(Constants.PERSISTENCE_TEST_DATA); | ||
const retrievedDummyData = await persistenceValidator.load(); | ||
@@ -304,7 +304,7 @@ | ||
} | ||
await persistenceValidator.delete(); | ||
return true; | ||
} catch (e) { | ||
throw PersistenceError.createCachePersistenceError(`Verifing persistence failed with the error: ${e}`); | ||
} finally { | ||
persistenceValidator.delete(); | ||
return true; | ||
} | ||
@@ -311,0 +311,0 @@ } |
{ | ||
"name": "@azure/msal-node-extensions", | ||
"version": "1.0.0-alpha.7", | ||
"version": "1.0.0-alpha.8", | ||
"license": "MIT", | ||
@@ -40,3 +40,3 @@ "main": "dist/index.js", | ||
"dependencies": { | ||
"@azure/msal-common": "^1.7.2", | ||
"@azure/msal-common": "^4.4.0", | ||
"bindings": "^1.5.0", | ||
@@ -43,0 +43,0 @@ "keytar": "^7.6.0", |
@@ -18,3 +18,3 @@ /* | ||
try { | ||
persistenceValidator.save(Constants.PERSISTENCE_TEST_DATA); | ||
await persistenceValidator.save(Constants.PERSISTENCE_TEST_DATA); | ||
@@ -35,7 +35,6 @@ const retrievedDummyData = await persistenceValidator.load(); | ||
} | ||
} catch(e) { | ||
throw PersistenceError.createCachePersistenceError(`Verifing persistence failed with the error: ${e}`) | ||
} finally { | ||
persistenceValidator.delete(); | ||
await persistenceValidator.delete(); | ||
return true; | ||
} catch (e) { | ||
throw PersistenceError.createCachePersistenceError(`Verifing persistence failed with the error: ${e}`); | ||
} | ||
@@ -42,0 +41,0 @@ } |
@@ -0,0 +0,0 @@ /* |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2335
238863
+ Added@azure/msal-common@4.5.1(transitive)
- Removed@azure/msal-common@1.7.2(transitive)
Updated@azure/msal-common@^4.4.0