@simplito/privmx-webendpoint 2.5.2 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Types.d.ts +97 -1
- package/Types.js +102 -15
- package/api/ConnectionNative.d.ts +18 -2
- package/api/ConnectionNative.js +26 -7
- package/api/EventApiNative.d.ts +4 -3
- package/api/EventApiNative.js +7 -4
- package/api/InboxApiNative.d.ts +4 -5
- package/api/InboxApiNative.js +6 -9
- package/api/KvdbApiNative.d.ts +5 -5
- package/api/KvdbApiNative.js +8 -8
- package/api/StoreApiNative.d.ts +6 -7
- package/api/StoreApiNative.js +6 -9
- package/api/ThreadApiNative.d.ts +4 -5
- package/api/ThreadApiNative.js +6 -9
- package/assets/driver-web-context.js +1 -1
- package/assets/e2ee-worker.js +1 -0
- package/assets/endpoint-wasm-module.js +2 -19
- package/assets/endpoint-wasm-module.wasm +0 -0
- package/assets/privmx-endpoint-web.js +2 -0
- package/bundle/privmx-endpoint-web.js +1 -1
- package/extra/PrivmxClient.d.ts +9 -2
- package/extra/PrivmxClient.js +15 -1
- package/extra/__mocks__/constants.d.ts +63 -0
- package/extra/__mocks__/constants.js +51 -0
- package/extra/__mocks__/mockContainerSubscriber.d.ts +8 -0
- package/extra/__mocks__/mockContainerSubscriber.js +26 -0
- package/extra/{__tests__/__mocks__ → __mocks__}/mockEventQueue.d.ts +1 -3
- package/extra/{__tests__/__mocks__ → __mocks__}/mockEventQueue.js +6 -8
- package/extra/{__tests__/__mocks__ → __mocks__}/utils.d.ts +1 -1
- package/extra/{__tests__/__mocks__ → __mocks__}/utils.js +4 -5
- package/extra/__tests__/eventsManager.test.js +38 -27
- package/extra/__tests__/inboxEventManager.js +79 -0
- package/extra/__tests__/storeEventManager.test.js +48 -28
- package/extra/__tests__/threadEventManager.test.js +49 -29
- package/extra/events.d.ts +4 -217
- package/extra/events.js +25 -213
- package/extra/files.d.ts +2 -2
- package/extra/files.js +2 -2
- package/extra/inbox.js +1 -2
- package/extra/index.d.ts +3 -3
- package/extra/index.js +9 -10
- package/extra/managers.d.ts +98 -0
- package/extra/managers.js +157 -0
- package/extra/subscriptions.d.ts +165 -0
- package/extra/subscriptions.js +51 -0
- package/extra/utils.js +4 -5
- package/index.d.ts +2 -2
- package/index.js +2 -1
- package/package.json +12 -13
- package/service/Connection.d.ts +21 -2
- package/service/Connection.js +27 -2
- package/service/CryptoApi.d.ts +1 -1
- package/service/CryptoApi.js +1 -1
- package/service/EventApi.d.ts +14 -9
- package/service/EventApi.js +35 -10
- package/service/InboxApi.d.ts +14 -13
- package/service/InboxApi.js +42 -17
- package/service/KvdbApi.d.ts +19 -11
- package/service/KvdbApi.js +51 -17
- package/service/StoreApi.d.ts +18 -15
- package/service/StoreApi.js +48 -20
- package/service/ThreadApi.d.ts +14 -13
- package/service/ThreadApi.js +44 -19
- package/service/index.d.ts +2 -1
- package/service/index.js +3 -1
- package/extra/__tests__/__mocks__/constants.d.ts +0 -36
- package/extra/__tests__/__mocks__/constants.js +0 -42
- package/extra/__tests__/__mocks__/mockContainerSubscriber.d.ts +0 -12
- package/extra/__tests__/__mocks__/mockContainerSubscriber.js +0 -25
- package/extra/__tests__/__mocks__/mockEventAPIs.d.ts +0 -30
- package/extra/__tests__/__mocks__/mockEventAPIs.js +0 -70
- package/extra/__tests__/inboxEventManager.test.js +0 -56
- /package/extra/__tests__/{inboxEventManager.test.d.ts → inboxEventManager.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{"use strict";var e={320:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isDecryptionSuccess=t.isEncryptionSuccess=t.decryptWithAES256GCM=t.encryptWithAES256GCM=void 0,t.encryptWithAES256GCM=async function(e,t,r,n){try{const s=await crypto.subtle.importKey("raw",e,{name:"AES-GCM"},!1,["encrypt"]),a=await crypto.subtle.encrypt({name:"AES-GCM",iv:t,additionalData:n,tagLength:128},s,r);return{success:!0,data:new Uint8Array(a)}}catch(e){return{success:!1,error:"EncryptionFailed"}}},t.decryptWithAES256GCM=async function(e,t,r,n){try{const s=await crypto.subtle.importKey("raw",e,{name:"AES-GCM"},!1,["decrypt"]),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:t,additionalData:n,tagLength:128},s,r);return{success:!0,data:new Uint8Array(a)}}catch(e){return{success:!1,error:"DecryptionFailed"}}},t.isEncryptionSuccess=function(e){return e.success},t.isDecryptionSuccess=function(e){return e.success}},928:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.KeyStore=void 0,t.KeyStore=class{_keys=new Map;_encryptionKeyId=void 0;setKeys(e){this._keys.clear();for(const t of e)this._keys.set(t.keyId,t),0===t.type&&(this._encryptionKeyId=t.keyId)}getKey(e){return this._keys.get(e)}hasKey(e){return this._keys.has(e)}getEncriptionKey(){if(!this._encryptionKeyId)throw console.error("No encryption key set."),console.log("DEBUG-info: ",this._keys),console.trace("Location"),new Error("No encryption key set.");return this._keys.get(this._encryptionKeyId)}}},251:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Utils=void 0;class r{static generateNumericId(){return Math.round(1e15*Math.random())}static getRandomString(e){return[...Array(e)].map((()=>Math.floor(16*Math.random()).toString(16))).join("")}static async encryptSymmetric(e,t,r){let n;n="string"==typeof e?(new TextEncoder).encode(e):e;const s=await crypto.subtle.importKey("raw",Buffer.from(t,"base64"),{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),a=await crypto.subtle.encrypt({name:"AES-GCM",iv:Buffer.from(r,"base64")},s,n);return{ciphertext:Buffer.from(a),iv:r}}static async decryptSymmetricBuffer(e,t,r){const n=await crypto.subtle.importKey("raw",r,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:t},n,e);return Buffer.from(s)}static async decryptSymmetric(e,t,r){const n=await crypto.subtle.importKey("raw",Buffer.from(r,"base64"),{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:Buffer.from(t,"base64")},n,Buffer.from(e,"base64"));return(new TextDecoder).decode(s)}static genKey(){return Buffer.from(crypto.getRandomValues(new Uint8Array(32))).toString("base64")}static genIv(){return Buffer.from(crypto.getRandomValues(new Uint8Array(12))).toString("base64")}static genIvAsBuffer(){return crypto.getRandomValues(new Uint8Array(12))}static base64abc=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"];static base64codes=[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255,255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255,255,255,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];static bytesToBase64(e){let t,n="",s=e.length;for(t=2;t<s;t+=3)n+=r.base64abc[e[t-2]>>2],n+=r.base64abc[(3&e[t-2])<<4|e[t-1]>>4],n+=r.base64abc[(15&e[t-1])<<2|e[t]>>6],n+=r.base64abc[63&e[t]];return t===s+1&&(n+=r.base64abc[e[t-2]>>2],n+=r.base64abc[(3&e[t-2])<<4],n+="=="),t===s&&(n+=r.base64abc[e[t-2]>>2],n+=r.base64abc[(3&e[t-2])<<4|e[t-1]>>4],n+=r.base64abc[(15&e[t-1])<<2],n+="="),n}static isBitOn(e,t){return Boolean(e&1<<t)}static getBits(e,t,r){const n=Math.pow(2,r)-1,s=t/8,a=t%=8;return e[s]>>a&n}static numAsOneByteUint(e){if(e>255)throw new Error("Out of bounds value");const t=new Uint8Array(1);return t[0]=e,t}static oneByteUint8AsNum(e){if(e[0]>255)throw new Error("Out of bounds value");return e[0]}}t.Utils=r}},t={};function r(n){var s=t[n];if(void 0!==s)return s.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}(()=>{const e=r(251),t=r(320),n=r(928);class s{keyStore;constructor(e){this.keyStore=e}getHeaderSizeByType(e){return"key"===e?10:"delta"===e?3:"undefined"===e?1:0}async encryptFrame(r,n,s){const a="video"===n?this.getHeaderSizeByType(r.type):1,o=new Uint8Array(r.data,0,a),i=new Uint8Array(r.data,a),c=e.Utils.genIvAsBuffer(),y=this.keyStore.getEncriptionKey(),u=await(0,t.encryptWithAES256GCM)(y.key,c,i,o);if(!(0,t.isEncryptionSuccess)(u))throw new Error("Cannot encrypt frame");const d=(new TextEncoder).encode(y.keyId),p=o.byteLength,f=p+u.data.byteLength,l=f+c.byteLength,m=l+1,h=m+d.byteLength,b=new ArrayBuffer(h+1),g=new Uint8Array(b);g.set(o),g.set(u.data,p),g.set(c,f),g.set(e.Utils.numAsOneByteUint(c.byteLength),l),g.set(d,m),JSON.stringify(d),g.set(e.Utils.numAsOneByteUint(d.byteLength),h),r.data=b,s.enqueue(r)}async decryptFrame(r,n,s){const a="video"===n?this.getHeaderSizeByType(r.type):1,o=r.data,c=new Uint8Array(o,0,a),y=new Uint8Array(o,o.byteLength-1,1),u=e.Utils.oneByteUint8AsNum(y),d=new Uint8Array(o,o.byteLength-2-u,1),p=e.Utils.oneByteUint8AsNum(d),f=a+u+p+2,l=o.byteLength-f,m=o.slice(a,a+l),h=a+l+p+1,b=o.slice(h,h+u),g=(new TextDecoder).decode(b);try{if(!this.keyStore.hasKey(g))return i({msg:"Decryption failed. Cannot find key",keyId:g,store:this.keyStore}),void s.enqueue(r);const e=this.keyStore.getKey(g),n=new Uint8Array(o.slice(a+l,a+l+p)),y=await(0,t.decryptWithAES256GCM)(e.key,n,m,c);if(!(0,t.isDecryptionSuccess)(y))return i({msg:"Decryption failed. Cannot decrypt frame"}),void s.enqueue(r);const u=y.data,d=new ArrayBuffer(c.byteLength+u.byteLength),f=new Uint8Array(d);f.set(c),f.set(new Uint8Array(u),c.byteLength),r.data=d,s.enqueue(r)}catch(e){i(e),s.enqueue(r)}}}self.keyStore=new n.KeyStore;const a=()=>self.keyStore;function o(e,t,r,n,a){let o;JSON.stringify({operation:t,context:e}),"encode"==t?(o=function(e,t){const r=new s(e);return new TransformStream({start(){},async transform(e,n){r.encryptFrame(e,t,n)},flush(){}})}(e.keyStore,r),n.pipeThrough(o).pipeTo(a)):"decode"==t?(o=function(e,t){const r=new s(e);return new TransformStream({start(){},flush(){},async transform(e,n){r.decryptFrame(e,t,n)}})}(e.keyStore,r),n.pipeThrough(o).pipeTo(a)):i(`Invalid operation: ${t}`)}function i(e){postMessage({type:"error",data:e})}self.onmessage=e=>{i("message: "+JSON.stringify(e));const{operation:t,kind:r}=e.data;if("encode"===t||"decode"===t){const n={keyStore:a()},{readableStream:s,writableStream:i,participantId:c}=e.data;o(n,t,r,s,i)}else if("setKeys"===t){const t=e.data;a().setKeys(t.keys)}},self.RTCTransformEvent&&(self.onrtctransform=e=>{const t=e.transformer,{operation:r,kind:n}=t.options;JSON.stringify(e),o({keyStore:a()},r,n,t.readable,t.writable)})})()})();
|