@sudoplatform/sudo-secure-communications 5.1.4 → 5.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/private/data/session/sessionManager.js +167 -66
- package/cjs/private/data/session/sessionManager.js.map +1 -1
- package/cjs/public/secureCommsClient.js +1 -1
- package/cjs/public/secureCommsClient.js.map +1 -1
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/DefaultSecureCommsClient.html +15 -15
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/Audio.html +1 -1
- package/docs/interfaces/AudioMedia.html +1 -1
- package/docs/interfaces/BaseMessageContent.html +1 -1
- package/docs/interfaces/ChannelInvite.html +1 -1
- package/docs/interfaces/ChannelMember.html +1 -1
- package/docs/interfaces/DirectChatInvite.html +1 -1
- package/docs/interfaces/Emote.html +1 -1
- package/docs/interfaces/EncryptedMessage.html +1 -1
- package/docs/interfaces/File.html +1 -1
- package/docs/interfaces/FileMedia.html +1 -1
- package/docs/interfaces/GroupInvite.html +1 -1
- package/docs/interfaces/GroupMember.html +1 -1
- package/docs/interfaces/Handle.html +1 -1
- package/docs/interfaces/Image.html +1 -1
- package/docs/interfaces/ImageMedia.html +1 -1
- package/docs/interfaces/Invite.html +1 -1
- package/docs/interfaces/KeyVerificationRequest.html +1 -1
- package/docs/interfaces/Location.html +1 -1
- package/docs/interfaces/Member.html +1 -1
- package/docs/interfaces/MembershipChange.html +1 -1
- package/docs/interfaces/MessageNotification.html +1 -1
- package/docs/interfaces/Notice.html +1 -1
- package/docs/interfaces/NotificationInfo.html +1 -1
- package/docs/interfaces/OwnedHandle.html +1 -1
- package/docs/interfaces/Poll.html +1 -1
- package/docs/interfaces/PollResponse.html +1 -1
- package/docs/interfaces/RedactedMessage.html +1 -1
- package/docs/interfaces/SelfDestructedMessage.html +1 -1
- package/docs/interfaces/Text.html +1 -1
- package/docs/interfaces/Video.html +1 -1
- package/docs/interfaces/VideoMedia.html +1 -1
- package/docs/types/SecureCommsClientOptions.html +5 -3
- package/lib/private/data/session/sessionManager.js +167 -66
- package/lib/private/data/session/sessionManager.js.map +1 -1
- package/lib/public/secureCommsClient.js +1 -1
- package/lib/public/secureCommsClient.js.map +1 -1
- package/package.json +15 -5
- package/types/private/data/session/sessionManager.d.ts +14 -1
- package/types/public/secureCommsClient.d.ts +2 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>VideoMedia | @sudoplatform/sudo-secure-communications</title><meta name="description" content="Documentation for @sudoplatform/sudo-secure-communications"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@sudoplatform/sudo-secure-communications</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">VideoMedia</a></li></ul><h1>Interface VideoMedia</h1></div><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><p>Information about a video.</p>
|
|
2
2
|
<p>VideoMedia</p>
|
|
3
|
-
</div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">VideoMedia</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#duration">duration</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#filename">filename</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#height">height</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#mimetype">mimeType</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#size">size</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#width">width</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><section class="tsd-panel tsd-hierarchy" data-refl="
|
|
3
|
+
</div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">VideoMedia</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#duration">duration</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#filename">filename</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#height">height</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#mimetype">mimeType</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#size">size</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#width">width</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><section class="tsd-panel tsd-hierarchy" data-refl="1834"><h4>Hierarchy</h4><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-signature-type">BaseMediaInfo</span><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">VideoMedia</span></li></ul></li></ul></section><aside class="tsd-sources"><ul><li>Defined in src/public/typings/mediaInfo.ts:50</li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="#duration" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>duration</span></a>
|
|
4
4
|
<a href="#filename" class="tsd-index-link tsd-is-inherited"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>filename</span></a>
|
|
5
5
|
<a href="#height" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>height</span></a>
|
|
6
6
|
<a href="#mimetype" class="tsd-index-link tsd-is-inherited"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>mime<wbr/>Type</span></a>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>SecureCommsClientOptions | @sudoplatform/sudo-secure-communications</title><meta name="description" content="Documentation for @sudoplatform/sudo-secure-communications"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@sudoplatform/sudo-secure-communications</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">SecureCommsClientOptions</a></li></ul><h1>Type Alias SecureCommsClientOptions</h1></div><div class="tsd-signature"><span class="tsd-signature-keyword">type</span> <span class="tsd-kind-type-alias">SecureCommsClientOptions</span> <span class="tsd-signature-symbol">=</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#storageproviderfactory">storageProviderFactory</a><span class="tsd-signature-symbol">?:</span> <a href="../interfaces/StorageProviderFactory.html" class="tsd-signature-type tsd-kind-interface">StorageProviderFactory</a><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#sudocryptoprovider">sudoCryptoProvider</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">SudoCryptoProvider</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#sudokeymanager">sudoKeyManager</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">SudoKeyManager</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#sudouserclient">sudoUserClient</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">SudoUserClient</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><aside class="tsd-sources"><ul><li>Defined in src/public/secureCommsClient.ts:164</li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="#
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>SecureCommsClientOptions | @sudoplatform/sudo-secure-communications</title><meta name="description" content="Documentation for @sudoplatform/sudo-secure-communications"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@sudoplatform/sudo-secure-communications</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">SecureCommsClientOptions</a></li></ul><h1>Type Alias SecureCommsClientOptions</h1></div><div class="tsd-signature"><span class="tsd-signature-keyword">type</span> <span class="tsd-kind-type-alias">SecureCommsClientOptions</span> <span class="tsd-signature-symbol">=</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#autorefreshtokenminutesbeforeexpiration">autoRefreshTokenMinutesBeforeExpiration</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#storageproviderfactory">storageProviderFactory</a><span class="tsd-signature-symbol">?:</span> <a href="../interfaces/StorageProviderFactory.html" class="tsd-signature-type tsd-kind-interface">StorageProviderFactory</a><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#sudocryptoprovider">sudoCryptoProvider</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">SudoCryptoProvider</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#sudokeymanager">sudoKeyManager</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">SudoKeyManager</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#sudouserclient">sudoUserClient</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">SudoUserClient</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><aside class="tsd-sources"><ul><li>Defined in src/public/secureCommsClient.ts:164</li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="#autorefreshtokenminutesbeforeexpiration" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>auto<wbr/>Refresh<wbr/>Token<wbr/>Minutes<wbr/>Before<wbr/>Expiration?</span></a>
|
|
2
|
+
<a href="#storageproviderfactory" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>storage<wbr/>Provider<wbr/>Factory?</span></a>
|
|
2
3
|
<a href="#sudocryptoprovider" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>sudo<wbr/>Crypto<wbr/>Provider?</span></a>
|
|
3
4
|
<a href="#sudokeymanager" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>sudo<wbr/>Key<wbr/>Manager?</span></a>
|
|
4
5
|
<a href="#sudouserclient" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>sudo<wbr/>User<wbr/>Client</span></a>
|
|
5
|
-
</div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Properties</h2></summary><section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="
|
|
6
|
+
</div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Properties</h2></summary><section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="autorefreshtokenminutesbeforeexpiration"><code class="tsd-tag">Optional</code><span>auto<wbr/>Refresh<wbr/>Token<wbr/>Minutes<wbr/>Before<wbr/>Expiration</span><a href="#autorefreshtokenminutesbeforeexpiration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">autoRefreshTokenMinutesBeforeExpiration</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span></div><div class="tsd-comment tsd-typography"><p>AutoRefreshTokenMinutesBeforeExpiration to use. Default is 5 minutes. Set to 0 to disable automatic token refresh.</p>
|
|
7
|
+
</div><aside class="tsd-sources"><ul><li>Defined in src/public/secureCommsClient.ts:178</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="storageproviderfactory"><code class="tsd-tag">Optional</code><span>storage<wbr/>Provider<wbr/>Factory</span><a href="#storageproviderfactory" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">storageProviderFactory</span><span class="tsd-signature-symbol">?:</span> <a href="../interfaces/StorageProviderFactory.html" class="tsd-signature-type tsd-kind-interface">StorageProviderFactory</a></div><div class="tsd-comment tsd-typography"><p>StorageProviderFactory to use. Default is undefined, which will make the client use in-memory storage.</p>
|
|
6
8
|
</div><aside class="tsd-sources"><ul><li>Defined in src/public/secureCommsClient.ts:175</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="sudocryptoprovider"><code class="tsd-tag">Optional</code><span>sudo<wbr/>Crypto<wbr/>Provider</span><a href="#sudocryptoprovider" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">sudoCryptoProvider</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">SudoCryptoProvider</span></div><div class="tsd-comment tsd-typography"><p>SudoCryptoProvider to use. Default is to create a WebSudoCryptoProvider</p>
|
|
7
9
|
</div><aside class="tsd-sources"><ul><li>Defined in src/public/secureCommsClient.ts:169</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="sudokeymanager"><code class="tsd-tag">Optional</code><span>sudo<wbr/>Key<wbr/>Manager</span><a href="#sudokeymanager" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">sudoKeyManager</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">SudoKeyManager</span></div><div class="tsd-comment tsd-typography"><p>SudoKeyManager to use. Default is to create a DefaultSudoKeyManager</p>
|
|
8
10
|
</div><aside class="tsd-sources"><ul><li>Defined in src/public/secureCommsClient.ts:172</li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="sudouserclient"><span>sudo<wbr/>User<wbr/>Client</span><a href="#sudouserclient" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">sudoUserClient</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">SudoUserClient</span></div><div class="tsd-comment tsd-typography"><p>Sudo User client to use. No default</p>
|
|
9
|
-
</div><aside class="tsd-sources"><ul><li>Defined in src/public/secureCommsClient.ts:166</li></ul></aside></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary><div><a href="#storageproviderfactory"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>storage<wbr/>Provider<wbr/>Factory</span></a><a href="#sudocryptoprovider"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>sudo<wbr/>Crypto<wbr/>Provider</span></a><a href="#sudokeymanager"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>sudo<wbr/>Key<wbr/>Manager</span></a><a href="#sudouserclient"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>sudo<wbr/>User<wbr/>Client</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@sudoplatform/sudo-secure-communications</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
|
11
|
+
</div><aside class="tsd-sources"><ul><li>Defined in src/public/secureCommsClient.ts:166</li></ul></aside></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary><div><a href="#autorefreshtokenminutesbeforeexpiration"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>auto<wbr/>Refresh<wbr/>Token<wbr/>Minutes<wbr/>Before<wbr/>Expiration</span></a><a href="#storageproviderfactory"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>storage<wbr/>Provider<wbr/>Factory</span></a><a href="#sudocryptoprovider"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>sudo<wbr/>Crypto<wbr/>Provider</span></a><a href="#sudokeymanager"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>sudo<wbr/>Key<wbr/>Manager</span></a><a href="#sudouserclient"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>sudo<wbr/>User<wbr/>Client</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@sudoplatform/sudo-secure-communications</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
|
@@ -10,15 +10,20 @@ import { HandleId } from '../../../public';
|
|
|
10
10
|
import { delay } from '../../util/delay';
|
|
11
11
|
import { MatrixClientManager } from '../common/matrixClientManager';
|
|
12
12
|
export class SessionManager {
|
|
13
|
-
constructor(sessionService, storageModule) {
|
|
13
|
+
constructor(sessionService, storageModule, autoRefreshTokenMinutesBeforeExpiration) {
|
|
14
14
|
this.sessionService = sessionService;
|
|
15
15
|
this.storageModule = storageModule;
|
|
16
|
+
this.autoRefreshTokenMinutesBeforeExpiration = autoRefreshTokenMinutesBeforeExpiration;
|
|
16
17
|
this.sessions = {};
|
|
17
18
|
this.log = new DefaultLogger(this.constructor.name);
|
|
18
19
|
}
|
|
19
20
|
async deleteSession(handleId, deleteStorage = false) {
|
|
20
21
|
const session = this.sessions[handleId.toString()];
|
|
21
22
|
if (session) {
|
|
23
|
+
// Clear any scheduled token refresh
|
|
24
|
+
if (session.refreshTimeout) {
|
|
25
|
+
clearTimeout(session.refreshTimeout);
|
|
26
|
+
}
|
|
22
27
|
// stop syncing matrix client
|
|
23
28
|
await session.matrixClient.stopSyncing();
|
|
24
29
|
// Flush any still existing background watchers
|
|
@@ -53,88 +58,184 @@ export class SessionManager {
|
|
|
53
58
|
}
|
|
54
59
|
// MARK: Access Tokens
|
|
55
60
|
async ensureValidSession(handleId, storePassphrase) {
|
|
56
|
-
// check if we have a cached session for this handleId
|
|
57
61
|
const cachedSession = this.sessions[handleId.toString()];
|
|
58
62
|
const newStorePassphrase = cachedSession?.storePassphrase ?? storePassphrase ?? undefined;
|
|
59
|
-
|
|
63
|
+
// Try to use cached session if valid
|
|
60
64
|
if (cachedSession) {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const now = Math.floor(Date.now() / 1000);
|
|
65
|
-
const isExpiredOrExpiringSoon = expiry - now <= 300; // Check if the token has expired or will expire in 300 seconds
|
|
66
|
-
if (!isExpiredOrExpiringSoon &&
|
|
67
|
-
cachedSession.matrixClient.isUsingToken(cachedSession.accessToken)) {
|
|
68
|
-
return cachedSession.accessToken;
|
|
69
|
-
}
|
|
70
|
-
// token is expired or different than matrix token. Refresh
|
|
71
|
-
try {
|
|
72
|
-
const newSession = await this.sessionService.get({
|
|
73
|
-
handleId: handleId.toString(),
|
|
74
|
-
deviceId: deviceId ?? v4(),
|
|
75
|
-
});
|
|
76
|
-
const newToken = newSession.token;
|
|
77
|
-
// update matrix client and session with new token
|
|
78
|
-
cachedSession.matrixClient.updateAccessToken(newToken);
|
|
79
|
-
this.sessions[handleId.toString()] = {
|
|
80
|
-
accessToken: newToken,
|
|
81
|
-
storePassphrase: newStorePassphrase,
|
|
82
|
-
matrixClient: cachedSession.matrixClient,
|
|
83
|
-
};
|
|
84
|
-
// store session for future reloads
|
|
85
|
-
const handleStorage = await this.storageModule.useHandleStorage(handleId.toString(), newStorePassphrase);
|
|
86
|
-
await handleStorage?.secureCommsStore.sessionAPIs.saveAccessToken(newToken);
|
|
87
|
-
return newToken;
|
|
65
|
+
const validAccessToken = await this.tryUseCachedSession(handleId, cachedSession, newStorePassphrase);
|
|
66
|
+
if (validAccessToken) {
|
|
67
|
+
return validAccessToken;
|
|
88
68
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
69
|
+
}
|
|
70
|
+
// Create new session from storage or fresh token
|
|
71
|
+
return await this.createNewSession(handleId, newStorePassphrase);
|
|
72
|
+
}
|
|
73
|
+
decodeToken(token) {
|
|
74
|
+
const decoded = JWT.decode(token);
|
|
75
|
+
if (!decoded || !decoded.exp || !decoded.device_id) {
|
|
76
|
+
throw new Error('Invalid token');
|
|
77
|
+
}
|
|
78
|
+
const expiry = parseInt(decoded.exp, 10);
|
|
79
|
+
const deviceId = decoded.device_id;
|
|
80
|
+
return { decoded, expiry, deviceId };
|
|
81
|
+
}
|
|
82
|
+
isTokenExpired(expiry) {
|
|
83
|
+
const now = Math.floor(Date.now() / 1000);
|
|
84
|
+
return expiry - now <= 0;
|
|
85
|
+
}
|
|
86
|
+
isTokenExpiringSoon(expiry) {
|
|
87
|
+
const now = Math.floor(Date.now() / 1000);
|
|
88
|
+
const refreshThresholdSeconds = this.autoRefreshTokenMinutesBeforeExpiration * 60;
|
|
89
|
+
const timeUntilExpiry = expiry - now;
|
|
90
|
+
return timeUntilExpiry > 0 && timeUntilExpiry <= refreshThresholdSeconds;
|
|
91
|
+
}
|
|
92
|
+
isTokenExpiredOrExpiringSoon(expiry) {
|
|
93
|
+
return this.isTokenExpired(expiry) || this.isTokenExpiringSoon(expiry);
|
|
94
|
+
}
|
|
95
|
+
scheduleTokenRefresh(handleId, expiry, storePassphrase) {
|
|
96
|
+
const now = Math.floor(Date.now() / 1000);
|
|
97
|
+
const timeUntilExpiry = expiry - now;
|
|
98
|
+
const refreshThresholdSeconds = this.autoRefreshTokenMinutesBeforeExpiration * 60;
|
|
99
|
+
const timeBeforeExpiryToSchedule = timeUntilExpiry - refreshThresholdSeconds;
|
|
100
|
+
// Only schedule refresh if auto-refresh is enabled and there's enough time until expiry
|
|
101
|
+
// If auto-refresh is disabled (0) or less than the threshold, the token will not be auto refreshed.
|
|
102
|
+
if (this.autoRefreshTokenMinutesBeforeExpiration > 0 &&
|
|
103
|
+
timeBeforeExpiryToSchedule > 0) {
|
|
104
|
+
return setTimeout(async () => {
|
|
105
|
+
try {
|
|
106
|
+
await this.ensureValidSession(handleId, storePassphrase);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
this.log.error(`Failed to refresh token for handle ${handleId.toString()}`, { err: error });
|
|
110
|
+
}
|
|
111
|
+
}, timeBeforeExpiryToSchedule * 1000);
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
// Test if the cached session is still valid.
|
|
116
|
+
// Returns access token if it is still valid or can be refreshed.
|
|
117
|
+
// Returns undefined if the token is expired or cannot be refreshed.
|
|
118
|
+
async tryUseCachedSession(handleId, cachedSession, storePassphrase) {
|
|
119
|
+
const { expiry, deviceId } = this.decodeToken(cachedSession.accessToken);
|
|
120
|
+
if (!this.isTokenExpiredOrExpiringSoon(expiry) &&
|
|
121
|
+
cachedSession.matrixClient.isUsingToken(cachedSession.accessToken)) {
|
|
122
|
+
return cachedSession.accessToken;
|
|
123
|
+
}
|
|
124
|
+
if (this.isTokenExpired(expiry)) {
|
|
125
|
+
return await this.handleExpiredToken(handleId);
|
|
126
|
+
}
|
|
127
|
+
return await this.refreshCachedSessionToken(handleId, cachedSession, deviceId, storePassphrase);
|
|
128
|
+
}
|
|
129
|
+
async handleExpiredToken(handleId) {
|
|
130
|
+
this.log.debug(`Token expired for handle ${handleId.toString()}, cleaned up session`);
|
|
131
|
+
// Stop syncing the matrix client since token is expired
|
|
132
|
+
await this.deleteSession(handleId);
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
async refreshCachedSessionToken(handleId, cachedSession, deviceId, storePassphrase) {
|
|
136
|
+
try {
|
|
137
|
+
const newSession = await this.getAccessTokenFromService(handleId, deviceId);
|
|
138
|
+
const newToken = newSession.token;
|
|
139
|
+
const { expiry: newExpiry } = this.decodeToken(newToken);
|
|
140
|
+
// Schedule new refresh timeout
|
|
141
|
+
if (cachedSession.refreshTimeout) {
|
|
142
|
+
clearTimeout(cachedSession.refreshTimeout);
|
|
93
143
|
}
|
|
144
|
+
const refreshTimeout = this.scheduleTokenRefresh(handleId, newExpiry, storePassphrase);
|
|
145
|
+
// Update matrix client and session with new token
|
|
146
|
+
cachedSession.matrixClient.updateAccessToken(newToken);
|
|
147
|
+
this.sessions[handleId.toString()] = {
|
|
148
|
+
accessToken: newToken,
|
|
149
|
+
storePassphrase: storePassphrase,
|
|
150
|
+
matrixClient: cachedSession.matrixClient,
|
|
151
|
+
refreshTimeout,
|
|
152
|
+
};
|
|
153
|
+
// Store session for future reloads
|
|
154
|
+
const handleStorage = await this.storageModule.useHandleStorage(handleId.toString(), storePassphrase);
|
|
155
|
+
await handleStorage?.secureCommsStore.sessionAPIs.saveAccessToken(newToken);
|
|
156
|
+
return newToken;
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
// If refresh fails, clean up defunct matrix client and remove cached session
|
|
160
|
+
this.log.error(`Failed to refresh token for handle ${handleId.toString()}: ${error}`);
|
|
161
|
+
await this.deleteSession(handleId);
|
|
162
|
+
return undefined;
|
|
94
163
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
let accessToken;
|
|
98
|
-
// Retrieve access token from store if cached session does not exist
|
|
164
|
+
}
|
|
165
|
+
async getAccessTokenFromStorage(handleStorage) {
|
|
99
166
|
const storedAccessToken = await handleStorage?.secureCommsStore.sessionAPIs.getAccessToken();
|
|
100
|
-
if (storedAccessToken) {
|
|
101
|
-
|
|
102
|
-
deviceId = decoded.device_id;
|
|
103
|
-
const expiry = parseInt(decoded.exp, 10);
|
|
104
|
-
const now = Math.floor(Date.now() / 1000);
|
|
105
|
-
const isExpiredOrExpiringSoon = expiry - now <= 300; // Check if the token has expired or will expire in 300 seconds
|
|
106
|
-
if (!isExpiredOrExpiringSoon) {
|
|
107
|
-
accessToken = storedAccessToken;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
// get new access token
|
|
111
|
-
accessToken = (await this.sessionService.get({
|
|
112
|
-
handleId: handleId.toString(),
|
|
113
|
-
deviceId: deviceId ?? v4(),
|
|
114
|
-
})).token;
|
|
115
|
-
}
|
|
167
|
+
if (!storedAccessToken) {
|
|
168
|
+
return undefined;
|
|
116
169
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
170
|
+
// Parse token once to check validity
|
|
171
|
+
const { expiry, deviceId } = this.decodeToken(storedAccessToken);
|
|
172
|
+
// If token is still valid (not expired and not expiring soon), use it
|
|
173
|
+
if (!this.isTokenExpired(expiry) && !this.isTokenExpiringSoon(expiry)) {
|
|
174
|
+
return {
|
|
175
|
+
token: storedAccessToken,
|
|
176
|
+
deviceId,
|
|
177
|
+
isValid: true,
|
|
178
|
+
};
|
|
123
179
|
}
|
|
180
|
+
// Token is expired or expiring soon, return it with isValid: false
|
|
181
|
+
return {
|
|
182
|
+
token: storedAccessToken,
|
|
183
|
+
deviceId,
|
|
184
|
+
isValid: false,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
async getAccessTokenFromService(handleId, deviceId) {
|
|
188
|
+
const newSession = await this.sessionService.get({
|
|
189
|
+
handleId: handleId.toString(),
|
|
190
|
+
deviceId: deviceId ?? v4(),
|
|
191
|
+
});
|
|
192
|
+
// Parse new token to get deviceId (in case deviceId wasn't provided)
|
|
193
|
+
const { deviceId: tokenDeviceId } = this.decodeToken(newSession.token);
|
|
194
|
+
return {
|
|
195
|
+
token: newSession.token,
|
|
196
|
+
deviceId: deviceId ?? tokenDeviceId,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
async getAccessTokenFromStorageOrService(handleId, handleStorage) {
|
|
200
|
+
// Try to get token from storage first
|
|
201
|
+
const storedToken = await this.getAccessTokenFromStorage(handleStorage);
|
|
202
|
+
if (storedToken?.isValid) {
|
|
203
|
+
return {
|
|
204
|
+
token: storedToken.token,
|
|
205
|
+
deviceId: storedToken.deviceId,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
// Token not in storage or invalid, get from service
|
|
209
|
+
// Use deviceId from invalid stored token if available
|
|
210
|
+
const deviceId = storedToken?.deviceId;
|
|
211
|
+
const serviceToken = await this.getAccessTokenFromService(handleId, deviceId);
|
|
212
|
+
return {
|
|
213
|
+
token: serviceToken.token,
|
|
214
|
+
deviceId: serviceToken.deviceId,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
async createNewSession(handleId, storePassphrase) {
|
|
218
|
+
// useHandleStorage will initialize the handle storage if it is not already initialized
|
|
219
|
+
const handleStorage = await this.storageModule.useHandleStorage(handleId.toString(), storePassphrase);
|
|
220
|
+
// Get access token from storage or service
|
|
221
|
+
const { token: accessToken } = await this.getAccessTokenFromStorageOrService(handleId, handleStorage);
|
|
222
|
+
// Parse token once for both matrix client creation and refresh scheduling
|
|
223
|
+
const { decoded, expiry } = this.decodeToken(accessToken);
|
|
124
224
|
// Create a new matrix client
|
|
125
|
-
const matrixClient = await this.createMatrixClient(handleId.toString(), accessToken,
|
|
126
|
-
|
|
225
|
+
const matrixClient = await this.createMatrixClient(handleId.toString(), accessToken, decoded, storePassphrase, handleStorage);
|
|
226
|
+
// Schedule token refresh before expiry
|
|
227
|
+
const refreshTimeout = this.scheduleTokenRefresh(handleId, expiry, storePassphrase);
|
|
228
|
+
// Store session
|
|
127
229
|
this.sessions[handleId.toString()] = {
|
|
128
230
|
accessToken: accessToken,
|
|
129
|
-
storePassphrase:
|
|
231
|
+
storePassphrase: storePassphrase,
|
|
130
232
|
matrixClient,
|
|
233
|
+
refreshTimeout,
|
|
131
234
|
};
|
|
132
|
-
// store session for future reloads
|
|
133
235
|
await handleStorage?.secureCommsStore.sessionAPIs.saveAccessToken(accessToken);
|
|
134
236
|
return accessToken;
|
|
135
237
|
}
|
|
136
|
-
async createMatrixClient(handleId, token, storePassphrase, handleStorage) {
|
|
137
|
-
const decoded = JWT.decode(token);
|
|
238
|
+
async createMatrixClient(handleId, token, decoded, storePassphrase, handleStorage) {
|
|
138
239
|
const client = new MatrixClientManager(token, decoded, handleStorage);
|
|
139
240
|
if (typeof indexedDB !== 'undefined') {
|
|
140
241
|
// use indexedDB if available (i.e., in browser or Node with polyfill)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionManager.js","sourceRoot":"","sources":["../../../../src/private/data/session/sessionManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAU,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAgC,MAAM,iBAAiB,CAAA;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAEnE,MAAM,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"sessionManager.js","sourceRoot":"","sources":["../../../../src/private/data/session/sessionManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAU,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAgC,MAAM,iBAAiB,CAAA;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAEnE,MAAM,OAAO,cAAc;IAazB,YACmB,cAA8B,EAC9B,aAA4B,EAC5B,uCAA+C;QAF/C,mBAAc,GAAd,cAAc,CAAgB;QAC9B,kBAAa,GAAb,aAAa,CAAe;QAC5B,4CAAuC,GAAvC,uCAAuC,CAAQ;QAbjD,aAAQ,GAQrB,EAAE,CAAA;QAOJ,IAAI,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACrD,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,QAAkB,EAClB,gBAAyB,KAAK;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;QAClD,IAAI,OAAO,EAAE,CAAC;YACZ,oCAAoC;YACpC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC3B,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;YACtC,CAAC;YACD,6BAA6B;YAC7B,MAAM,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAA;YACxC,+CAA+C;YAC/C,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAEhD,0BAA0B;YAC1B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAC7D,QAAQ,CAAC,QAAQ,EAAE,CACpB,CAAA;YACD,MAAM,aAAa,EAAE,gBAAgB,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAA;YACrE,2BAA2B;YAC3B,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,OAAO,CAAC,YAAY,CAAC,eAAe,CACxC,iBAAiB,QAAQ,CAAC,QAAQ,EAAE,EAAE,CACvC,CAAA;gBACD,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;YACnE,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;YAClE,CAAC;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,gDAAgD;QAChD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;QACjB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC5C,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,+CAA+C;YAC/C,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,QAAkB;QAElB,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAE,CAAC,YAAa,CAAA;IAC1D,CAAC;IAED,sBAAsB;IAEf,KAAK,CAAC,kBAAkB,CAC7B,QAAkB,EAClB,eAAwB;QAExB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;QACxD,MAAM,kBAAkB,GACtB,aAAa,EAAE,eAAe,IAAI,eAAe,IAAI,SAAS,CAAA;QAEhE,qCAAqC;QACrC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CACrD,QAAQ,EACR,aAAa,EACb,kBAAkB,CACnB,CAAA;YACD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO,gBAAgB,CAAA;YACzB,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;IAClE,CAAC;IAEO,WAAW,CAAC,KAAa;QAK/B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAA2B,CAAA;QAC3D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAA;QAClC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IACtC,CAAC;IAEO,cAAc,CAAC,MAAc;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;QACzC,OAAO,MAAM,GAAG,GAAG,IAAI,CAAC,CAAA;IAC1B,CAAC;IAEO,mBAAmB,CAAC,MAAc;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;QACzC,MAAM,uBAAuB,GAC3B,IAAI,CAAC,uCAAuC,GAAG,EAAE,CAAA;QACnD,MAAM,eAAe,GAAG,MAAM,GAAG,GAAG,CAAA;QACpC,OAAO,eAAe,GAAG,CAAC,IAAI,eAAe,IAAI,uBAAuB,CAAA;IAC1E,CAAC;IAEO,4BAA4B,CAAC,MAAc;QACjD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACxE,CAAC;IAEO,oBAAoB,CAC1B,QAAkB,EAClB,MAAc,EACd,eAAwB;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,MAAM,GAAG,GAAG,CAAA;QACpC,MAAM,uBAAuB,GAC3B,IAAI,CAAC,uCAAuC,GAAG,EAAE,CAAA;QACnD,MAAM,0BAA0B,GAAG,eAAe,GAAG,uBAAuB,CAAA;QAE5E,wFAAwF;QACxF,oGAAoG;QACpG,IACE,IAAI,CAAC,uCAAuC,GAAG,CAAC;YAChD,0BAA0B,GAAG,CAAC,EAC9B,CAAC;YACD,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;gBAC3B,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;gBAC1D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,sCAAsC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAC3D,EAAE,GAAG,EAAE,KAAK,EAAE,CACf,CAAA;gBACH,CAAC;YACH,CAAC,EAAE,0BAA0B,GAAG,IAAI,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,6CAA6C;IAC7C,iEAAiE;IACjE,oEAAoE;IAC5D,KAAK,CAAC,mBAAmB,CAC/B,QAAkB,EAClB,aAKC,EACD,eAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;QACxE,IACE,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC;YAC1C,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,EAClE,CAAC;YACD,OAAO,aAAa,CAAC,WAAW,CAAA;QAClC,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAChD,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,yBAAyB,CACzC,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,eAAe,CAChB,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,QAAkB;QACjD,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,4BAA4B,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CACtE,CAAA;QACD,wDAAwD;QACxD,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAElC,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,yBAAyB,CACrC,QAAkB,EAClB,aAKC,EACD,QAAgB,EAChB,eAAwB;QAExB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,yBAAyB,CACrD,QAAQ,EACR,QAAQ,CACT,CAAA;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAA;YACjC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;YACxD,+BAA+B;YAC/B,IAAI,aAAa,CAAC,cAAc,EAAE,CAAC;gBACjC,YAAY,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;YAC5C,CAAC;YACD,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAC9C,QAAQ,EACR,SAAS,EACT,eAAe,CAChB,CAAA;YACD,kDAAkD;YAClD,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG;gBACnC,WAAW,EAAE,QAAQ;gBACrB,eAAe,EAAE,eAAe;gBAChC,YAAY,EAAE,aAAa,CAAC,YAAY;gBACxC,cAAc;aACf,CAAA;YACD,mCAAmC;YACnC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAC7D,QAAQ,CAAC,QAAQ,EAAE,EACnB,eAAe,CAChB,CAAA;YACD,MAAM,aAAa,EAAE,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAC/D,QAAQ,CACT,CAAA;YAED,OAAO,QAAQ,CAAA;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,6EAA6E;YAC7E,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,sCAAsC,QAAQ,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE,CACtE,CAAA;YACD,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YAElC,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,yBAAyB,CACrC,aAA4B;QAM5B,MAAM,iBAAiB,GACrB,MAAM,aAAa,EAAE,gBAAgB,CAAC,WAAW,CAAC,cAAc,EAAE,CAAA;QAEpE,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,qCAAqC;QACrC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAA;QAEhE,sEAAsE;QACtE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACtE,OAAO;gBACL,KAAK,EAAE,iBAAiB;gBACxB,QAAQ;gBACR,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,mEAAmE;QACnE,OAAO;YACL,KAAK,EAAE,iBAAiB;YACxB,QAAQ;YACR,OAAO,EAAE,KAAK;SACf,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,yBAAyB,CACrC,QAAkB,EAClB,QAAiB;QAEjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAC/C,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAC7B,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE;SAC3B,CAAC,CAAA;QAEF,qEAAqE;QACrE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QAEtE,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,QAAQ,EAAE,QAAQ,IAAI,aAAa;SACpC,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,kCAAkC,CAC9C,QAAkB,EAClB,aAA4B;QAE5B,sCAAsC;QACtC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAA;QACvE,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YACzB,OAAO;gBACL,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;aAC/B,CAAA;QACH,CAAC;QACD,oDAAoD;QACpD,sDAAsD;QACtD,MAAM,QAAQ,GAAG,WAAW,EAAE,QAAQ,CAAA;QACtC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,yBAAyB,CACvD,QAAQ,EACR,QAAQ,CACT,CAAA;QACD,OAAO;YACL,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,QAAQ,EAAE,YAAY,CAAC,QAAQ;SAChC,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,QAAkB,EAClB,eAAwB;QAExB,uFAAuF;QACvF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAC7D,QAAQ,CAAC,QAAQ,EAAE,EACnB,eAAe,CAChB,CAAA;QACD,2CAA2C;QAC3C,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAC1B,MAAM,IAAI,CAAC,kCAAkC,CAAC,QAAQ,EAAE,aAAc,CAAC,CAAA;QACzE,0EAA0E;QAC1E,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,6BAA6B;QAC7B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAChD,QAAQ,CAAC,QAAQ,EAAE,EACnB,WAAW,EACX,OAAO,EACP,eAAe,EACf,aAAa,CACd,CAAA;QACD,uCAAuC;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAC9C,QAAQ,EACR,MAAM,EACN,eAAe,CAChB,CAAA;QACD,gBAAgB;QAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG;YACnC,WAAW,EAAE,WAAW;YACxB,eAAe,EAAE,eAAe;YAChC,YAAY;YACZ,cAAc;SACf,CAAA;QACD,MAAM,aAAa,EAAE,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAC/D,WAAW,CACZ,CAAA;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,QAAgB,EAChB,KAAa,EACb,OAA+B,EAC/B,eAAwB,EACxB,aAA6B;QAE7B,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;QAErE,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;YACrC,sEAAsE;YACtE,MAAM,MAAM,CAAC,cAAc,CAAC;gBAC1B,YAAY,EAAE,IAAI;gBAClB,oBAAoB,EAAE,iBAAiB,QAAQ,EAAE;gBACjD,eAAe,EAAE,eAAe;aAC1B,CAAC,CAAA;YACT,2EAA2E;YAC3E,MAAM,aAAa,EAAE,WAAW,CAAC,OAAO,EAAE,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,mBAAmB;YACnB,MAAM,MAAM,CAAC,cAAc,CAAC;gBAC1B,YAAY,EAAE,KAAK;aACb,CAAC,CAAA;QACX,CAAC;QAED,MAAM,MAAM,CAAC,MAAM,EAAE,CAAA;QAErB,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
|
|
@@ -36,7 +36,7 @@ export class DefaultSecureCommsClient {
|
|
|
36
36
|
this.keyManager =
|
|
37
37
|
opts.sudoKeyManager ?? new DefaultSudoKeyManager(this.sudoCryptoProvider);
|
|
38
38
|
this.sessionService = new DefaultSessionService(this.apiClient);
|
|
39
|
-
this.sessionManager = new SessionManager(this.sessionService, this.storage);
|
|
39
|
+
this.sessionManager = new SessionManager(this.sessionService, this.storage, opts.autoRefreshTokenMinutesBeforeExpiration ?? 5);
|
|
40
40
|
this.mediaCredentialService = new DefaultMediaCredentialService(this.apiClient);
|
|
41
41
|
this.mediaCredentialManager = new MediaCredentialManager(this.userClient, this.mediaCredentialService, this.identityServiceConfig, this.secureCommsServiceConfig);
|
|
42
42
|
this.handles = new DefaultHandlesModule(this.apiClient, this.sessionManager);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secureCommsClient.js","sourceRoot":"","sources":["../../src/public/secureCommsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,qBAAqB,EAErB,kBAAkB,GAGnB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAEL,QAAQ,IAAI,gBAAgB,GAC7B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,GAOrB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAkB,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChF,OAAO,EACL,wBAAwB,GAEzB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,oBAAoB,EAAiB,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAe,MAAM,uBAAuB,CAAA;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAEL,2BAA2B,GAC5B,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,6BAA6B,EAAE,MAAM,qDAAqD,CAAA;AACnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAA;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAA;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;
|
|
1
|
+
{"version":3,"file":"secureCommsClient.js","sourceRoot":"","sources":["../../src/public/secureCommsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,qBAAqB,EAErB,kBAAkB,GAGnB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAEL,QAAQ,IAAI,gBAAgB,GAC7B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,GAOrB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAkB,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChF,OAAO,EACL,wBAAwB,GAEzB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,oBAAoB,EAAiB,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAe,MAAM,uBAAuB,CAAA;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAEL,2BAA2B,GAC5B,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,6BAA6B,EAAE,MAAM,qDAAqD,CAAA;AACnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAA;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAA;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AAmIvE,MAAM,OAAO,wBAAwB;IAwBnC,YAAmB,IAA8B;QAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAEnD,MAAM,cAAc,GAAG,IAAuC,CAAA;QAE9D,IAAI,CAAC,qBAAqB;YACxB,cAAc,CAAC,qBAAqB;gBACpC,gBAAgB,CAAC,wBAAwB,EAAE,CAAC,eAAe,CAAA;QAE7D,IAAI,CAAC,wBAAwB;YAC3B,cAAc,CAAC,wBAAwB,IAAI,2BAA2B,EAAE,CAAA;QAE1E,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAA;QACzD,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QAEpE,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,SAAS,IAAI,IAAI,SAAS,EAAE,CAAA;QAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAA;QACrC,IAAI,CAAC,kBAAkB;YACrB,IAAI,CAAC,kBAAkB;gBACvB,IAAI,qBAAqB,CACvB,mBAAmB,EACnB,iCAAiC,CAClC,CAAA;QAEH,IAAI,CAAC,UAAU;YACb,IAAI,CAAC,cAAc,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAE3E,IAAI,CAAC,cAAc,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/D,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CACtC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,uCAAuC,IAAI,CAAC,CAClD,CAAA;QAED,IAAI,CAAC,sBAAsB,GAAG,IAAI,6BAA6B,CAC7D,IAAI,CAAC,SAAS,CACf,CAAA;QACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,sBAAsB,CACtD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,wBAAwB,CAC9B,CAAA;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAC5E,IAAI,CAAC,WAAW,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACpE,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAmB,CACnC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,wBAAwB,CAC9B,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAqB,CACvC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,wBAAwB,CAC9B,CAAA;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,sBAAsB,CACzC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,wBAAwB,CAC9B,CAAA;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,kBAAkB,CACjC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,wBAAwB,CAC9B,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC9D,IAAI,CAAC,aAAa,GAAG,IAAI,0BAA0B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1E,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,EAAY;QACpC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,kBAAkB,EAAE,CAAA;QAChC,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAClE,MAAM,YAAY,CAAC,YAAY,EAAE,CAAA;IACnC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;QAC/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAClE,OAAO,YAAY,CAAC,OAAO,EAAE,CAAA;IAC/B,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,EAAY;QACnC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAClE,MAAM,YAAY,CAAC,WAAW,EAAE,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAA;QACrC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;IACnC,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sudoplatform/sudo-secure-communications",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.5",
|
|
4
4
|
"author": "Anonyome Labs, Inc.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"@sudoplatform/sudo-user": "^16.0.0"
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@aws-sdk/client-s3": "^3.
|
|
69
|
-
"@aws-sdk/credential-provider-cognito-identity": "^3.
|
|
70
|
-
"@aws-sdk/credential-providers": "^3.
|
|
71
|
-
"@aws-sdk/lib-storage": "^3.
|
|
68
|
+
"@aws-sdk/client-s3": "^3.965.0",
|
|
69
|
+
"@aws-sdk/credential-provider-cognito-identity": "^3.965.0",
|
|
70
|
+
"@aws-sdk/credential-providers": "^3.965.0",
|
|
71
|
+
"@aws-sdk/lib-storage": "^3.965.0",
|
|
72
72
|
"@matrix-org/matrix-sdk-crypto-wasm": "15.3.0",
|
|
73
73
|
"@sudoplatform/sudo-web-crypto-provider": "^10.0.1",
|
|
74
74
|
"@types/md5": "^2.3.6",
|
|
@@ -168,6 +168,16 @@
|
|
|
168
168
|
"until": 1772203020,
|
|
169
169
|
"untilISO": "2026-2-28T00:37:00Z",
|
|
170
170
|
"reason": "Waiting for patch - @smithy/config-resolver"
|
|
171
|
+
},
|
|
172
|
+
"1112255": {
|
|
173
|
+
"until": 1772203020,
|
|
174
|
+
"untilISO": "2026-2-28T00:37:00Z",
|
|
175
|
+
"reason": "node-tar used by bufferutil by websocket"
|
|
176
|
+
},
|
|
177
|
+
"1112329": {
|
|
178
|
+
"until": 1772203020,
|
|
179
|
+
"untilISO": "2026-2-28T00:37:00Z",
|
|
180
|
+
"reason": "node-tar used by bufferutil by websocket"
|
|
171
181
|
}
|
|
172
182
|
}
|
|
173
183
|
}
|
|
@@ -4,12 +4,25 @@ import { MatrixClientManager } from '../common/matrixClientManager';
|
|
|
4
4
|
export declare class SessionManager {
|
|
5
5
|
private readonly sessionService;
|
|
6
6
|
private readonly storageModule;
|
|
7
|
+
private readonly autoRefreshTokenMinutesBeforeExpiration;
|
|
7
8
|
private readonly log;
|
|
8
9
|
private readonly sessions;
|
|
9
|
-
constructor(sessionService: SessionService, storageModule: StorageModule);
|
|
10
|
+
constructor(sessionService: SessionService, storageModule: StorageModule, autoRefreshTokenMinutesBeforeExpiration: number);
|
|
10
11
|
deleteSession(handleId: HandleId, deleteStorage?: boolean): Promise<void>;
|
|
11
12
|
reset(): Promise<void>;
|
|
12
13
|
getMatrixClient(handleId: HandleId): Promise<MatrixClientManager>;
|
|
13
14
|
ensureValidSession(handleId: HandleId, storePassphrase?: string): Promise<string>;
|
|
15
|
+
private decodeToken;
|
|
16
|
+
private isTokenExpired;
|
|
17
|
+
private isTokenExpiringSoon;
|
|
18
|
+
private isTokenExpiredOrExpiringSoon;
|
|
19
|
+
private scheduleTokenRefresh;
|
|
20
|
+
private tryUseCachedSession;
|
|
21
|
+
private handleExpiredToken;
|
|
22
|
+
private refreshCachedSessionToken;
|
|
23
|
+
private getAccessTokenFromStorage;
|
|
24
|
+
private getAccessTokenFromService;
|
|
25
|
+
private getAccessTokenFromStorageOrService;
|
|
26
|
+
private createNewSession;
|
|
14
27
|
private createMatrixClient;
|
|
15
28
|
}
|
|
@@ -111,6 +111,8 @@ export type SecureCommsClientOptions = {
|
|
|
111
111
|
sudoKeyManager?: SudoKeyManager;
|
|
112
112
|
/** StorageProviderFactory to use. Default is undefined, which will make the client use in-memory storage. */
|
|
113
113
|
storageProviderFactory?: StorageProviderFactory;
|
|
114
|
+
/** AutoRefreshTokenMinutesBeforeExpiration to use. Default is 5 minutes. Set to 0 to disable automatic token refresh. */
|
|
115
|
+
autoRefreshTokenMinutesBeforeExpiration?: number;
|
|
114
116
|
};
|
|
115
117
|
export declare class DefaultSecureCommsClient implements SecureCommsClient {
|
|
116
118
|
handles: HandlesModule;
|