@ironcorelabs/ironweb 4.2.5 → 4.2.42
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/commonjs/Constants.js +1 -1
- package/es/Constants.js +1 -1
- package/ironweb.min.js +1 -1
- package/ironweb.min.js.map +1 -1
- package/package.json +1 -1
package/commonjs/Constants.js
CHANGED
package/es/Constants.js
CHANGED
package/ironweb.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ironweb=t():e.ironweb=t()}(self,(()=>(()=>{"use strict";var e={249:(e,t)=>{var r="utf8: invalid string",n="utf8: invalid source encoding";function o(e){for(var t=0,n=0;n<e.length;n++){var o=e.charCodeAt(n);if(o<128)t+=1;else if(o<2048)t+=2;else if(o<55296)t+=3;else{if(!(o<=57343))throw new Error(r);if(n>=e.length-1)throw new Error(r);n++,t+=4}}return t}t.cv=function(e){for(var t=new Uint8Array(o(e)),r=0,n=0;n<e.length;n++){var E=e.charCodeAt(n);E<128?t[r++]=E:E<2048?(t[r++]=192|E>>6,t[r++]=128|63&E):E<55296?(t[r++]=224|E>>12,t[r++]=128|E>>6&63,t[r++]=128|63&E):(n++,E=(1023&E)<<10,E|=1023&e.charCodeAt(n),E+=65536,t[r++]=240|E>>18,t[r++]=128|E>>12&63,t[r++]=128|E>>6&63,t[r++]=128|63&E)}return t},t.Jx=function(e){for(var t=[],r=0;r<e.length;r++){var o=e[r];if(128&o){var E=void 0;if(o<224){if(r>=e.length)throw new Error(n);if(128!=(192&(a=e[++r])))throw new Error(n);o=(31&o)<<6|63&a,E=128}else if(o<240){if(r>=e.length-1)throw new Error(n);var a=e[++r],s=e[++r];if(128!=(192&a)||128!=(192&s))throw new Error(n);o=(15&o)<<12|(63&a)<<6|63&s,E=2048}else{if(!(o<248))throw new Error(n);if(r>=e.length-2)throw new Error(n);a=e[++r],s=e[++r];var i=e[++r];if(128!=(192&a)||128!=(192&s)||128!=(192&i))throw new Error(n);o=(15&o)<<18|(63&a)<<12|(63&s)<<6|63&i,E=65536}if(o<E||o>=55296&&o<=57343)throw new Error(n);if(o>=65536){if(o>1114111)throw new Error(n);o-=65536,t.push(String.fromCharCode(55296|o>>10)),o=56320|1023&o}}t.push(String.fromCharCode(o))}return t.join("")}},742:(e,t)=>{t.b$=function(e){var t,r,E=i(e),a=E[0],s=E[1],u=new o(function(e,t,r){return 3*(t+r)/4-r}(0,a,s)),c=0,_=s>0?a-4:a;for(r=0;r<_;r+=4)t=n[e.charCodeAt(r)]<<18|n[e.charCodeAt(r+1)]<<12|n[e.charCodeAt(r+2)]<<6|n[e.charCodeAt(r+3)],u[c++]=t>>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===s&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[c++]=255&t);1===s&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.JQ=function(e){for(var t,n=e.length,o=n%3,E=[],a=16383,s=0,i=n-o;s<i;s+=a)E.push(u(e,s,s+a>i?i:s+a));1===o?(t=e[n-1],E.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],E.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return E.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,s=E.length;a<s;++a)r[a]=E[a],n[E.charCodeAt(a)]=a;function i(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function u(e,t,n){for(var o,E,a=[],s=t;s<n;s+=3)o=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),a.push(r[(E=o)>>18&63]+r[E>>12&63]+r[E>>6&63]+r[63&E]);return a.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},670:(e,t)=>{var r=function(){function e(e){this.action=e}return e.prototype.engage=function(e,t){try{this.action(e,t)}catch(t){e(t)}},e.prototype.then=function(e,t){return this.toPromise().then(e,t)},e.prototype.toPromise=function(){var e=this;return new Promise((function(t,r){return e.engage(r,t)}))},e.prototype.map=function(t){return this.flatMap((function(r){return e.of(t(r))}))},e.prototype.flatMap=function(t){var r=this;return new e((function(e,n){r.engage(e,(function(r){return t(r).engage(e,n)}))}))},e.prototype.handleWith=function(t){var r=this;return new e((function(e,n){r.engage((function(r){t(r).engage(e,n)}),n)}))},e.prototype.errorMap=function(t){var r=this;return new e((function(e,n){r.engage((function(r){return e(t(r))}),n)}))},e.tryF=function(t){return new e((function(e,r){var n;try{n=t()}catch(t){return e(t)}r(n)}))},e.tryP=function(t){return new e((function(e,r){var n;try{n=t()}catch(t){return e(t)}n.then(r).catch(e)}))},e.of=function(t){return new e((function(e,r){r(t)}))},e.reject=function(t){return new e((function(e){e(t)}))},e.encase=function(t,r){return new e((function(e,n){var o;try{o=t(r)}catch(t){return e(t)}n(o)}))},e.gather2=function(t,r){return new e((function(e,n){var o=[],E=0,a=!1;t.engage((function(t){a||(a=!0,e(t))}),(function(e){o[0]=e,2==++E&&n(o)})),r.engage((function(t){a||(a=!0,e(t))}),(function(e){o[1]=e,2==++E&&n(o)}))}))},e.gather3=function(e,t,r){var n=this.gather2(e,t);return this.gather2(n,r).map((function(e){var t=e[0];return[t[0],t[1],e[1]]}))},e.gather4=function(e,t,r,n){var o=this.gather2(e,t),E=this.gather2(r,n);return this.gather2(o,E).map((function(e){var t=e[0],r=t[0],n=t[1],o=e[1];return[r,n,o[0],o[1]]}))},e.all=function(e){return Array.isArray(e)?this.allArray(e):this.allObject(e)},e.allArray=function(t){return new e((function(e,r){var n=[],o=0;0===t.length&&r(n),t.forEach((function(E,a){E.engage((function(t){e(t)}),(function(e){n[a]=e,(o+=1)===t.length&&r(n)}))}))}))},e.allObject=function(e){var t=Object.keys(e),r=t.map((function(t){return e[t]}));return this.allArray(r).map((function(e){return t.reduce((function(t,r,n){return t[r]=e[n],t}),{})}))},e}();t.Z=r}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var E=t[n]={exports:{}};return e[n](E,E.exports,r),E.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{r.r(n),r.d(n,{ErrorCodes:()=>s,SDKError:()=>m,codec:()=>Me,createNewDeviceKeys:()=>be,createNewUser:()=>Ge,deleteDeviceByPublicSigningKey:()=>Y,document:()=>Le,group:()=>Ne,initialize:()=>Ye,isInitialized:()=>Qe,search:()=>Pe,user:()=>ye});var e={};r.r(e),r.d(e,{base64:()=>B,utf8:()=>V});var t={};r.r(t),r.d(t,{advanced:()=>oe,decrypt:()=>J,decryptFromStore:()=>z,encrypt:()=>q,encryptToStore:()=>X,getDocumentIDFromBytes:()=>Z,getMetadata:()=>k,grantAccess:()=>re,list:()=>H,revokeAccess:()=>ne,updateEncryptedData:()=>ee,updateEncryptedDataInStore:()=>$,updateName:()=>te});var o={};r.r(o),r.d(o,{addAdmins:()=>ce,addMembers:()=>Re,create:()=>se,deleteGroup:()=>me,get:()=>ae,list:()=>Ee,removeAdmins:()=>_e,removeMembers:()=>Ae,removeSelfAsMember:()=>fe,rotatePrivateKey:()=>ie,update:()=>ue});var E={};r.r(E),r.d(E,{createBlindSearchIndex:()=>de,initializeBlindSearchIndex:()=>pe,transliterateString:()=>Te});var a={};r.r(a),r.d(a,{changePasscode:()=>ge,deauthorizeDevice:()=>le,deleteDevice:()=>Se,deleteDeviceByPublicSigningKey:()=>Oe,listDevices:()=>he,rotateMasterKey:()=>De});var s,i=/^[a-zA-Z0-9_.$#|@/:;=+'-]{1,100}$/,u=12,c="OperationError";!function(e){e[e.JWT_FORMAT_FAILURE=100]="JWT_FORMAT_FAILURE",e[e.JWT_RETRIEVAL_FAILURE=101]="JWT_RETRIEVAL_FAILURE",e[e.VERIFY_API_REQUEST_FAILURE=102]="VERIFY_API_REQUEST_FAILURE",e[e.BROWSER_FRAME_MESSAGE_FAILURE=103]="BROWSER_FRAME_MESSAGE_FAILURE",e[e.RANDOM_NUMBER_GENERATION_FAILURE=104]="RANDOM_NUMBER_GENERATION_FAILURE",e[e.PASSCODE_FORMAT_FAILURE=105]="PASSCODE_FORMAT_FAILURE",e[e.PASSCODE_RETRIEVAL_FAILURE=106]="PASSCODE_RETRIEVAL_FAILURE",e[e.SIGNATURE_GENERATION_FAILURE=107]="SIGNATURE_GENERATION_FAILURE",e[e.USER_NOT_SYNCED_FAILURE=108]="USER_NOT_SYNCED_FAILURE",e[e.WEBASSEMBLY_SUPPORT_FAILURE=109]="WEBASSEMBLY_SUPPORT_FAILURE",e[e.FRAME_LOAD_FAILURE=110]="FRAME_LOAD_FAILURE",e[e.USER_VERIFY_API_REQUEST_FAILURE=200]="USER_VERIFY_API_REQUEST_FAILURE",e[e.USER_CREATE_REQUEST_FAILURE=201]="USER_CREATE_REQUEST_FAILURE",e[e.USER_UPDATE_REQUEST_FAILURE=202]="USER_UPDATE_REQUEST_FAILURE",e[e.USER_PASSCODE_INCORRECT=203]="USER_PASSCODE_INCORRECT",e[e.USER_KEY_LIST_REQUEST_FAILURE=204]="USER_KEY_LIST_REQUEST_FAILURE",e[e.USER_DEVICE_ADD_REQUEST_FAILURE=205]="USER_DEVICE_ADD_REQUEST_FAILURE",e[e.USER_MASTER_KEY_GENERATION_FAILURE=206]="USER_MASTER_KEY_GENERATION_FAILURE",e[e.USER_DEVICE_KEY_GENERATION_FAILURE=207]="USER_DEVICE_KEY_GENERATION_FAILURE",e[e.USER_DEVICE_KEY_DECRYPTION_FAILURE=208]="USER_DEVICE_KEY_DECRYPTION_FAILURE",e[e.USER_PASSCODE_CHANGE_FAILURE=209]="USER_PASSCODE_CHANGE_FAILURE",e[e.USER_DEVICE_DELETE_REQUEST_FAILURE=210]="USER_DEVICE_DELETE_REQUEST_FAILURE",e[e.USER_UPDATE_KEY_REQUEST_FAILURE=211]="USER_UPDATE_KEY_REQUEST_FAILURE",e[e.USER_PRIVATE_KEY_ROTATION_FAILURE=212]="USER_PRIVATE_KEY_ROTATION_FAILURE",e[e.USER_DEVICE_LIST_REQUEST_FAILURE=213]="USER_DEVICE_LIST_REQUEST_FAILURE",e[e.DOCUMENT_LIST_REQUEST_FAILURE=300]="DOCUMENT_LIST_REQUEST_FAILURE",e[e.DOCUMENT_GET_REQUEST_FAILURE=301]="DOCUMENT_GET_REQUEST_FAILURE",e[e.DOCUMENT_CREATE_REQUEST_FAILURE=302]="DOCUMENT_CREATE_REQUEST_FAILURE",e[e.DOCUMENT_UPDATE_REQUEST_FAILURE=303]="DOCUMENT_UPDATE_REQUEST_FAILURE",e[e.DOCUMENT_GRANT_ACCESS_REQUEST_FAILURE=304]="DOCUMENT_GRANT_ACCESS_REQUEST_FAILURE",e[e.DOCUMENT_REVOKE_ACCESS_REQUEST_FAILURE=305]="DOCUMENT_REVOKE_ACCESS_REQUEST_FAILURE",e[e.DOCUMENT_DECRYPT_FAILURE=306]="DOCUMENT_DECRYPT_FAILURE",e[e.DOCUMENT_ENCRYPT_FAILURE=307]="DOCUMENT_ENCRYPT_FAILURE",e[e.DOCUMENT_REENCRYPT_FAILURE=308]="DOCUMENT_REENCRYPT_FAILURE",e[e.DOCUMENT_GRANT_ACCESS_FAILURE=309]="DOCUMENT_GRANT_ACCESS_FAILURE",e[e.DOCUMENT_MAX_SIZE_EXCEEDED=310]="DOCUMENT_MAX_SIZE_EXCEEDED",e[e.DOCUMENT_CREATE_WITH_ACCESS_FAILURE=311]="DOCUMENT_CREATE_WITH_ACCESS_FAILURE",e[e.DOCUMENT_HEADER_PARSE_FAILURE=312]="DOCUMENT_HEADER_PARSE_FAILURE",e[e.DOCUMENT_TRANSFORM_REQUEST_FAILURE=313]="DOCUMENT_TRANSFORM_REQUEST_FAILURE",e[e.GROUP_LIST_REQUEST_FAILURE=400]="GROUP_LIST_REQUEST_FAILURE",e[e.GROUP_GET_REQUEST_FAILURE=401]="GROUP_GET_REQUEST_FAILURE",e[e.GROUP_CREATE_REQUEST_FAILURE=402]="GROUP_CREATE_REQUEST_FAILURE",e[e.GROUP_ADD_MEMBERS_REQUEST_FAILURE=403]="GROUP_ADD_MEMBERS_REQUEST_FAILURE",e[e.GROUP_ADD_MEMBER_NOT_ADMIN_FAILURE=404]="GROUP_ADD_MEMBER_NOT_ADMIN_FAILURE",e[e.GROUP_REMOVE_MEMBERS_REQUEST_FAILURE=405]="GROUP_REMOVE_MEMBERS_REQUEST_FAILURE",e[e.GROUP_REMOVE_SELF_REQUEST_FAILURE=406]="GROUP_REMOVE_SELF_REQUEST_FAILURE",e[e.GROUP_KEY_GENERATION_FAILURE=407]="GROUP_KEY_GENERATION_FAILURE",e[e.GROUP_MEMBER_KEY_ENCRYPTION_FAILURE=408]="GROUP_MEMBER_KEY_ENCRYPTION_FAILURE",e[e.GROUP_ADD_ADMINS_NOT_ADMIN_FAILURE=409]="GROUP_ADD_ADMINS_NOT_ADMIN_FAILURE",e[e.GROUP_ADD_ADMINS_REQUEST_FAILURE=410]="GROUP_ADD_ADMINS_REQUEST_FAILURE",e[e.GROUP_KEY_DECRYPTION_FAILURE=411]="GROUP_KEY_DECRYPTION_FAILURE",e[e.GROUP_REMOVE_ADMINS_REQUEST_FAILURE=412]="GROUP_REMOVE_ADMINS_REQUEST_FAILURE",e[e.GROUP_UPDATE_REQUEST_FAILURE=413]="GROUP_UPDATE_REQUEST_FAILURE",e[e.GROUP_DELETE_REQUEST_FAILURE=414]="GROUP_DELETE_REQUEST_FAILURE",e[e.GROUP_CREATE_WITH_MEMBERS_OR_ADMINS_FAILURE=415]="GROUP_CREATE_WITH_MEMBERS_OR_ADMINS_FAILURE",e[e.GROUP_PRIVATE_KEY_ROTATION_FAILURE=416]="GROUP_PRIVATE_KEY_ROTATION_FAILURE",e[e.GROUP_UPDATE_KEY_REQUEST_FAILURE=417]="GROUP_UPDATE_KEY_REQUEST_FAILURE",e[e.GROUP_ROTATE_PRIVATE_KEY_NOT_ADMIN_FAILURE=418]="GROUP_ROTATE_PRIVATE_KEY_NOT_ADMIN_FAILURE",e[e.REQUEST_RATE_LIMITED=500]="REQUEST_RATE_LIMITED",e[e.POLICY_APPLY_REQUEST_FAILURE=600]="POLICY_APPLY_REQUEST_FAILURE",e[e.SEARCH_CREATE_INDEX_FAILURE=700]="SEARCH_CREATE_INDEX_FAILURE",e[e.SEARCH_INIT_INDEX_FAILURE=701]="SEARCH_INIT_INDEX_FAILURE",e[e.SEARCH_TOKENIZE_DATA_FAILURE=702]="SEARCH_TOKENIZE_DATA_FAILURE",e[e.SEARCH_TOKENIZE_QUERY_FAILURE=703]="SEARCH_TOKENIZE_QUERY_FAILURE"}(s||(s={}));var _={FRAME_DOMAIN:"https://api.ironcorelabs.com",FRAME_PATH:"/ironweb-frame"};"string"==typeof _ICL_FRAME_DOMAIN_REPLACEMENT_&&_ICL_FRAME_DOMAIN_REPLACEMENT_.length&&(_.FRAME_DOMAIN=_ICL_FRAME_DOMAIN_REPLACEMENT_);var R,A={SDK_VERSION:"4.2.5"},f=(R=function(e,t){return R=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},R(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}R(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});const m=function(e){function t(r,n){var o=e.call(this,r.message)||this;return!function(e){return"number"==typeof e.code&&e.name!==c}(r)?(o.code=n,o.rawError=r):(o.code=r.code,o.rawError=r.rawError),Object.setPrototypeOf(o,t.prototype),o}return f(t,e),t}(Error);var I=r(670),U=function(){function e(e){var t=this;this.callbackCount=0,this.callbacks={},this.processMessageIntoShim=function(e){var r=e.data,n=r.data,o=r.replyID,E=t.callbacks[o];E&&(delete t.callbacks[o],E(n))};var r=new MessageChannel;r.port1.start(),r.port1.addEventListener("message",this.processMessageIntoShim),this.messagePort=r.port1,e.addEventListener("load",(function(){e.contentWindow.postMessage("MESSAGE_PORT_INIT",_.FRAME_DOMAIN,[r.port2])}))}return e.prototype.postMessageToFrame=function(e,t){var r=this;void 0===t&&(t=[]);var n={replyID:this.callbackCount++,data:e};try{return this.messagePort.postMessage(n,t.map((function(e){return e.buffer}))),new I.Z((function(e,t){r.callbacks[n.replyID]=t}))}catch(e){return I.Z.reject(new m(new Error("Failure occurred when passing message due to the lack of browser support."),s.BROWSER_FRAME_MESSAGE_FAILURE))}},e}(),d=window.document.createElement("iframe"),p=new U(d),T=new Promise((function(e,t){d.addEventListener("load",(function(){var r=setTimeout((function(){t(new m(new Error("Failed to load IronWeb frame."),s.FRAME_LOAD_FAILURE))}),1e3);p.postMessageToFrame({type:"FRAME_LOADED_CHECK"}).engage(t,(function(){clearTimeout(r),e()}))}))}));function g(e,t){return I.Z.tryP((function(){return T})).flatMap((function(){return p.postMessageToFrame(e,t)})).flatMap((function(e){return function(e){return"ERROR_RESPONSE"===e.type}(e)?I.Z.reject(new m(new Error(e.message.text),e.message.code)):I.Z.of(e)}))}d.height="0",d.width="0",d.style.display="none",d.style.position="absolute",d.style.top="-999px",d.style.left="-999px",d.src="".concat(_.FRAME_DOMAIN).concat(_.FRAME_PATH,"?version=").concat(A.SDK_VERSION),window.document.body.appendChild(d);var D,l=!1;function S(){return"".concat("1","-icldassk")}function O(){l=!0}function h(){if(!l)throw new Error('SDK "initialize()" method has not yet been called or completed execution. SDK methods cannot be used until initialization is complete.')}function L(e){if(e)try{localStorage.setItem(S(),e)}catch(e){}}function y(){try{return localStorage.getItem(S())||void 0}catch(e){return}}function N(e,t){void 0===t&&(t=!1);var r={};return e.filter((function(e){return!(r[e]||t&&!e.length)&&(r[e]=!0,!0)}))}function P(e){if("string"!=typeof e||!e.length)throw new Error("Invalid ID provided. Expected a non-zero length string but got ".concat(e));if(!i.test(e))throw new Error("Invalid ID provided. Provided value includes invalid characters: '".concat(e,"'."))}function M(e){if(!(e instanceof Uint8Array&&e.length))throw new Error("Invalid document data format provided. Expected a Uint8Array.")}function C(e){if(!(e instanceof Uint8Array))throw new Error("Invalid encrypted document content. Content should be a Uint8Array.");if(e.byteLength<u+1)throw new Error("Invalid encrypted document content. Length of content does not meet minimum requirements.")}function F(e){var t=e&&Array.isArray(e.users)&&e.users.length,r=e&&Array.isArray(e.groups)&&e.groups.length;if(!t&&!r)throw new Error("You must provide a list of users or groups with which to change document access.")}function w(e){if(!Array.isArray(e)||!e.length)throw new Error("You must provide a list of users to perform this operation.")}function v(e){var t=[],r=[];return e.users&&e.users.length&&(t=N(e.users.map((function(e){return e.id})),!0)),e.groups&&e.groups.length&&(r=N(e.groups.map((function(e){return e.id})),!0)),[t,r]}function G(e){return I.Z.tryP((function(){var t=e();if(t&&"function"==typeof t.then)return t;throw new m(new Error("JWT callback did not return a Promise."),s.JWT_FORMAT_FAILURE)})).flatMap((function(e){return"string"==typeof e&&e.length>0?I.Z.of(e):I.Z.reject(new m(new Error("JWT should be a non-zero length string, but instead got '".concat(e,"'")),s.JWT_RETRIEVAL_FAILURE))}))}function b(e,t){return D=e,G(e).flatMap((function(e){return g({type:"INIT_SDK",message:{jwtToken:e,symmetricKey:y()}})})).flatMap((function(e){return"INIT_PASSCODE_REQUIRED"===e.type?function(e,t){return I.Z.tryP((function(){var r=e(t);if(r&&"function"==typeof r.then)return r;throw new m(new Error("Passcode callback did not return a Promise."),s.PASSCODE_FORMAT_FAILURE)})).flatMap((function(e){return"string"==typeof e&&e.length>0?I.Z.of(e):I.Z.reject(new m(new Error("User provided passcode should be a non-zero length string, but instead got '".concat(e,"'")),s.PASSCODE_RETRIEVAL_FAILURE))}))}(t,e.message.doesUserExist).flatMap((function(t){return function(e,t){return G(D).flatMap((function(r){return g({type:e?"GEN_DEVICE_KEYS":"CREATE_USER_AND_DEVICE",message:{passcode:t,jwtToken:r}})})).map((function(e){return L(e.message.symmetricKey),O(),{user:e.message.user,groupsNeedingRotation:e.message.groupsNeedingRotation}}))}(e.message.doesUserExist,t)})):(L(e.message.symmetricKey),O(),I.Z.of({user:e.message.user,groupsNeedingRotation:e.message.groupsNeedingRotation}))})).toPromise()}var Y=function(e,t){return G(e).flatMap((function(e){return g({type:"DELETE_DEVICE_BY_SIGNING_KEY_JWT",message:{jwtToken:e,publicSigningKey:t}}).map((function(e){return e.message}))})).toPromise()},Q=r(249),K=r(742),V={fromBytes:function(e){return(0,Q.Jx)(e)},toBytes:function(e){return(0,Q.cv)(e)}},B={fromBytes:function(e){return(0,K.JQ)(e)},toBytes:function(e){return(0,K.b$)(e)}},j=function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,E=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=E.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=E.return)&&r.call(E)}finally{if(o)throw o.error}}return a},x=2048e3;function W(e){var t=window.crypto.getRandomValues(new Uint8Array(16)),r=Array.prototype.map.call(t,(function(e){return"00".concat(e.toString(16)).slice(-2)})).join("");return e?{documentID:e.documentID||r,documentName:e.documentName||"",accessList:{users:e.accessList&&e.accessList.users?e.accessList.users:[],groups:e.accessList&&e.accessList.groups?e.accessList.groups:[],grantToAuthor:!1!==e.grantToAuthor},policy:e.policy}:{documentID:r,documentName:"",accessList:{users:[],groups:[],grantToAuthor:!0}}}function H(){return h(),g({type:"DOCUMENT_LIST"}).map((function(e){return e.message})).toPromise()}function k(e){return h(),P(e),g({type:"DOCUMENT_META_GET",message:{documentID:e}}).map((function(e){return e.message})).toPromise()}function Z(e){if(h(),C(e),1===e[0])return Promise.resolve(null);if(2!==e[0])return Promise.reject(new m(new Error("Provided encrypted document doesn't appear to be valid. Invalid version."),s.DOCUMENT_HEADER_PARSE_FAILURE));var t=new DataView(e.buffer).getUint16(e.byteOffset+1,!1),r=e.slice(3,3+t);try{var n=JSON.parse(V.fromBytes(r));return Promise.resolve(n._did_)}catch(e){return Promise.reject(new m(new Error("Unable to parse document header. Header value is corrupted."),s.DOCUMENT_HEADER_PARSE_FAILURE))}}function z(e){return console.warn("decryptFromStore is deprecated. Use decrypt instead."),h(),P(e),g({type:"DOCUMENT_STORE_DECRYPT",message:{documentID:e}}).map((function(e){return e.message})).toPromise()}function J(e,t){h(),P(e),C(t);var r={type:"DOCUMENT_DECRYPT",message:{documentID:e,documentData:t.slice()}};return g(r,[r.message.documentData]).map((function(e){return e.message})).toPromise()}function X(e,t){if(console.warn("encryptToStore is deprecated. Use encrypt instead and manage storage of the result yourself."),h(),M(e),e.length>x)return Promise.reject(new m(new Error("Document of length ".concat(e.length," exceeds maximum allowed byte size of ").concat(x)),s.DOCUMENT_MAX_SIZE_EXCEEDED));var r=W(t);r.documentID&&P(r.documentID);var n=j(v(r.accessList),2),o=n[0],E=n[1],a={type:"DOCUMENT_STORE_ENCRYPT",message:{documentID:r.documentID,documentData:e.slice(),documentName:r.documentName,userGrants:o,groupGrants:E,grantToAuthor:r.accessList.grantToAuthor,policy:r.policy}};return g(a,[a.message.documentData]).map((function(e){return e.message})).toPromise()}function q(e,t){h(),M(e);var r=W(t);r.documentID&&P(r.documentID);var n=j(v(r.accessList),2),o=n[0],E=n[1],a={type:"DOCUMENT_ENCRYPT",message:{documentData:e.slice(),documentID:r.documentID,documentName:r.documentName,userGrants:o,groupGrants:E,grantToAuthor:r.accessList.grantToAuthor,policy:r.policy}};return g(a,[a.message.documentData]).map((function(e){return e.message})).toPromise()}function $(e,t){if(h(),P(e),M(t),t.length>x)return Promise.reject(new m(new Error("Document of length ".concat(t.length," exceeds maximum allowed byte size of ").concat(x)),s.DOCUMENT_MAX_SIZE_EXCEEDED));var r={type:"DOCUMENT_STORE_UPDATE_DATA",message:{documentID:e,documentData:t.slice()}};return g(r,[r.message.documentData]).map((function(e){return e.message})).toPromise()}function ee(e,t){h(),P(e),M(t);var r={type:"DOCUMENT_UPDATE_DATA",message:{documentID:e,documentData:t.slice()}};return g(r,[r.message.documentData]).map((function(e){return e.message})).toPromise()}function te(e,t){return h(),P(e),g({type:"DOCUMENT_UPDATE_NAME",message:{documentID:e,name:""===t?null:t}}).map((function(e){return e.message})).toPromise()}function re(e,t){h(),P(e),F(t);var r=j(v(t),2);return g({type:"DOCUMENT_GRANT",message:{documentID:e,userGrants:r[0],groupGrants:r[1]}}).map((function(e){return e.message})).toPromise()}function ne(e,t){h(),P(e),F(t);var r=j(v(t),2);return g({type:"DOCUMENT_REVOKE",message:{documentID:e,userRevocations:r[0],groupRevocations:r[1]}}).map((function(e){return e.message})).toPromise()}var oe={decryptUnmanaged:function(e,t){return h(),function(e){if(!(e instanceof Uint8Array))throw new Error("Invalid encrypted deks. Edeks should be a Uint8Array.");if(e.byteLength<=0)throw new Error("Invalid encrypted deks. Length does not meet minimum requirements.")}(t),C(e),I.Z.tryP((function(){return Z(e)})).flatMap((function(r){var n={type:"DOCUMENT_UNMANAGED_DECRYPT",message:{edeks:t,documentData:e.slice()}};return g(n,[n.message.documentData]).map((function(e){var t=e.message;return{data:t.data,documentID:r,accessVia:t.accessVia}}))})).toPromise()},encryptUnmanaged:function(e,t){h(),M(e);var r=W(t);r.documentID&&P(r.documentID);var n=j(v(r.accessList),2),o=n[0],E=n[1],a={type:"DOCUMENT_UNMANAGED_ENCRYPT",message:{documentData:e.slice(),documentID:r.documentID,userGrants:o,groupGrants:E,grantToAuthor:r.accessList.grantToAuthor,policy:r.policy}};return g(a,[a.message.documentData]).map((function(e){return e.message})).toPromise()}};function Ee(){return h(),g({type:"GROUP_LIST"}).map((function(e){return e.message})).toPromise()}function ae(e){return h(),P(e),g({type:"GROUP_GET",message:{groupID:e}}).map((function(e){return e.message})).toPromise()}function se(e){return void 0===e&&(e={groupName:"",addAsMember:!0,addAsAdmin:!0,needsRotation:!1}),h(),function(e,t){if(!t&&!1===e)throw new Error("Failed to create group because group ownership must be held by a group administrator")}(e.addAsAdmin,e.ownerUserId),e.groupID&&P(e.groupID),g({type:"GROUP_CREATE",message:{groupID:e.groupID||"",groupName:e.groupName||"",ownerUserId:e.ownerUserId,addAsMember:!1!==e.addAsMember,addAsAdmin:!1!==e.addAsAdmin,needsRotation:!0===e.needsRotation,userLists:{memberList:e.memberList?N(e.memberList,!0):[],adminList:e.adminList?N(e.adminList,!0):[]}}}).map((function(e){return e.message})).toPromise()}function ie(e){return h(),P(e),g({type:"ROTATE_GROUP_PRIVATE_KEY",message:{groupID:e}}).map((function(e){return e.message})).toPromise()}function ue(e,t){if(h(),P(e),null===t.groupName||"string"==typeof t.groupName&&t.groupName.length)return g({type:"GROUP_UPDATE",message:{groupID:e,groupName:t.groupName}}).map((function(e){return e.message})).toPromise();throw new Error("Group update must provide a new name which is either a non-zero length string or null.")}function ce(e,t){return h(),P(e),w(t),g({type:"GROUP_ADD_ADMINS",message:{groupID:e,userList:N(t,!0)}}).map((function(e){return e.message})).toPromise()}function _e(e,t){return h(),P(e),w(t),g({type:"GROUP_REMOVE_ADMINS",message:{groupID:e,userList:N(t,!0)}}).map((function(e){return e.message})).toPromise()}function Re(e,t){return h(),P(e),w(t),g({type:"GROUP_ADD_MEMBERS",message:{groupID:e,userList:N(t,!0)}}).map((function(e){return e.message})).toPromise()}function Ae(e,t){return h(),P(e),w(t),g({type:"GROUP_REMOVE_MEMBERS",message:{groupID:e,userList:N(t,!0)}}).map((function(e){return e.message})).toPromise()}function fe(e){return h(),P(e),g({type:"GROUP_REMOVE_SELF_AS_MEMBER",message:{groupID:e}}).map((function(){})).toPromise()}function me(e){return h(),P(e),g({type:"GROUP_DELETE",message:{groupID:e}}).map((function(e){return e.message})).toPromise()}var Ie=function(){return Ie=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},Ie.apply(this,arguments)},Ue=function(){function e(e){this.searchIndexId=e}return e.prototype.tokenizeData=function(e,t){return g({type:"BLIND_SEARCH_INDEX_TOKENIZE_DATA",message:{data:e,partitionId:t,searchIndexId:this.searchIndexId}}).map((function(e){return e.message})).toPromise()},e.prototype.tokenizeQuery=function(e,t){return g({type:"BLIND_SEARCH_INDEX_TOKENIZE_QUERY",message:{query:e,partitionId:t,searchIndexId:this.searchIndexId}}).map((function(e){return e.message})).toPromise()},e}(),de=function(e){return h(),P(e),g({type:"BLIND_SEARCH_INDEX_CREATE",message:{groupId:e}}).map((function(e){return e.message})).toPromise()},pe=function(e){return h(),M(e.searchIndexEncryptedSalt),M(e.searchIndexEdeks),g({type:"BLIND_SEARCH_INDEX_INIT",message:Ie({},e)}).map((function(e){var t=e.message;return new Ue(t.searchIndexId)})).toPromise()},Te=function(e){return g({type:"SEARCH_TRANSLITERATE_STRING",message:e}).map((function(e){return e.message})).toPromise()};function ge(e,t){return h(),g({type:"CHANGE_USER_PASSCODE",message:{currentPasscode:e,newPasscode:t}}).map((function(){})).toPromise()}function De(e){return h(),g({type:"ROTATE_USER_PRIVATE_KEY",message:{passcode:e}}).map((function(){})).toPromise()}var le=function(){return Se().then((function(e){return{transformKeyDeleted:e>0}}))},Se=function(e){h();var t=void 0===e,r={type:"DELETE_DEVICE",message:e};return t&&function(){try{localStorage.removeItem(S())}catch(e){}}(),g(r).map((function(e){var r=e.message;return t&&(l=!1),r})).toPromise()},Oe=function(e){return h(),g({type:"DELETE_DEVICE_BY_SIGNING_KEY",message:e}).map((function(e){return e.message})).toPromise()},he=function(){h();return g({type:"LIST_DEVICES",message:null}).map((function(e){return e.message})).toPromise()},Le=t,ye=a,Ne=o,Pe=E,Me=e;function Ce(){var e=window.crypto;return"object"==typeof e&&"function"==typeof e.getRandomValues}function Fe(){return"object"==typeof WebAssembly&&WebAssembly&&"function"==typeof WebAssembly.instantiate}var we=function(){return Promise.reject(new m(new Error("Request failed due to a lack of browser support for WebAssembly."),s.WEBASSEMBLY_SUPPORT_FAILURE))},ve=function(){return Promise.reject(new m(new Error("Request failed due to a lack of browser support for random number generation."),s.RANDOM_NUMBER_GENERATION_FAILURE))};function Ge(e,t,r){if(void 0===r&&(r={needsRotation:!1}),!e||"function"!=typeof e)throw new Error("You must provide a function which will generate a JWT as the first parameter to 'IronWeb.createNewUser'.");return Ce()?Fe()?function(e,t,r){return void 0===r&&(r=!1),G(e).flatMap((function(e){return g({type:"CREATE_USER",message:{passcode:t,jwtToken:e,needsRotation:r}})})).map((function(e){var t=e.message;return{accountID:t.id,segmentID:t.segmentId,needsRotation:t.needsRotation,status:t.status,userMasterPublicKey:t.userMasterPublicKey}})).toPromise()}(e,t,r.needsRotation||!1):we():ve()}function be(e,t){if(!e||"function"!=typeof e)throw new Error("You must provide a function which will generate a JWT as the first parameter to 'IronWeb.createNewUser'.");return Ce()?Fe()?function(e,t){return G(e).flatMap((function(e){return g({type:"CREATE_DETATCHED_USER_DEVICE",message:{passcode:t,jwtToken:e}})})).map((function(e){return e.message})).toPromise()}(e,t):we():ve()}function Ye(e,t){if(!e||"function"!=typeof e)throw new Error("You must provide a function which will generate a JWT as the first parameter to 'IronWeb.initialize'.");if(!t||"function"!=typeof t)throw new Error("You must provide a function which will generate the users escrow passcode as the second parameter to 'IronWeb.initialize'.");return Ce()?Fe()?b(e,t):we():ve()}function Qe(){try{return h(),!0}catch(e){return!1}}})(),n})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ironweb=t():e.ironweb=t()}(self,(()=>(()=>{"use strict";var e={52:(e,t)=>{var r="utf8: invalid string",n="utf8: invalid source encoding";function o(e){for(var t=0,n=0;n<e.length;n++){var o=e.charCodeAt(n);if(o<128)t+=1;else if(o<2048)t+=2;else if(o<55296)t+=3;else{if(!(o<=57343))throw new Error(r);if(n>=e.length-1)throw new Error(r);n++,t+=4}}return t}t.lF=function(e){for(var t=new Uint8Array(o(e)),r=0,n=0;n<e.length;n++){var E=e.charCodeAt(n);E<128?t[r++]=E:E<2048?(t[r++]=192|E>>6,t[r++]=128|63&E):E<55296?(t[r++]=224|E>>12,t[r++]=128|E>>6&63,t[r++]=128|63&E):(n++,E=(1023&E)<<10,E|=1023&e.charCodeAt(n),E+=65536,t[r++]=240|E>>18,t[r++]=128|E>>12&63,t[r++]=128|E>>6&63,t[r++]=128|63&E)}return t},t.D4=function(e){for(var t=[],r=0;r<e.length;r++){var o=e[r];if(128&o){var E=void 0;if(o<224){if(r>=e.length)throw new Error(n);if(128!=(192&(a=e[++r])))throw new Error(n);o=(31&o)<<6|63&a,E=128}else if(o<240){if(r>=e.length-1)throw new Error(n);var a=e[++r],s=e[++r];if(128!=(192&a)||128!=(192&s))throw new Error(n);o=(15&o)<<12|(63&a)<<6|63&s,E=2048}else{if(!(o<248))throw new Error(n);if(r>=e.length-2)throw new Error(n);a=e[++r],s=e[++r];var i=e[++r];if(128!=(192&a)||128!=(192&s)||128!=(192&i))throw new Error(n);o=(15&o)<<18|(63&a)<<12|(63&s)<<6|63&i,E=65536}if(o<E||o>=55296&&o<=57343)throw new Error(n);if(o>=65536){if(o>1114111)throw new Error(n);o-=65536,t.push(String.fromCharCode(55296|o>>10)),o=56320|1023&o}}t.push(String.fromCharCode(o))}return t.join("")}},526:(e,t)=>{t.bg=function(e){var t,r,E=s(e),a=E[0],i=E[1],u=new o(function(e,t,r){return 3*(t+r)/4-r}(0,a,i)),c=0,_=i>0?a-4:a;for(r=0;r<_;r+=4)t=n[e.charCodeAt(r)]<<18|n[e.charCodeAt(r+1)]<<12|n[e.charCodeAt(r+2)]<<6|n[e.charCodeAt(r+3)],u[c++]=t>>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===i&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[c++]=255&t);1===i&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.iI=function(e){for(var t,n=e.length,o=n%3,E=[],a=16383,s=0,u=n-o;s<u;s+=a)E.push(i(e,s,s+a>u?u:s+a));1===o?(t=e[n-1],E.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],E.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return E.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)r[a]=E[a],n[E.charCodeAt(a)]=a;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function i(e,t,n){for(var o,E,a=[],s=t;s<n;s+=3)o=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),a.push(r[(E=o)>>18&63]+r[E>>12&63]+r[E>>6&63]+r[63&E]);return a.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},702:(e,t)=>{var r=function(){function e(e){this.action=e}return e.prototype.engage=function(e,t){this.action(e,t)},e.prototype.engageAndCatch=function(e,t){try{this.engage(e,t)}catch(t){e(t)}},e.prototype.then=function(e,t){return this.toPromise().then(e,t)},e.prototype.toPromise=function(){var e=this;return new Promise((function(t,r){return e.engage(r,t)}))},e.prototype.map=function(t){return this.flatMap((function(r){return e.of(t(r))}))},e.prototype.flatMap=function(t){var r=this;return new e((function(e,n){r.engageAndCatch(e,(function(r){return t(r).engageAndCatch(e,n)}))}))},e.prototype.handleWith=function(t){var r=this;return new e((function(e,n){r.engage((function(r){t(r).engage(e,n)}),n)}))},e.prototype.errorMap=function(t){var r=this;return new e((function(e,n){r.engageAndCatch((function(r){return e(t(r))}),n)}))},e.tryF=function(t){return new e((function(e,r){var n;try{n=t()}catch(t){return e(t)}r(n)}))},e.tryP=function(t){return new e((function(e,r){var n;try{n=t()}catch(t){return e(t)}n.then(r).catch(e)}))},e.of=function(t){return new e((function(e,r){r(t)}))},e.reject=function(t){return new e((function(e){e(t)}))},e.encase=function(t,r){return new e((function(e,n){var o;try{o=t(r)}catch(t){return e(t)}n(o)}))},e.gather2=function(t,r){return new e((function(e,n){var o=[],E=0,a=!1;t.engageAndCatch((function(t){a||(a=!0,e(t))}),(function(e){o[0]=e,2===++E&&n(o)})),r.engageAndCatch((function(t){a||(a=!0,e(t))}),(function(e){o[1]=e,2===++E&&n(o)}))}))},e.gather3=function(e,t,r){var n=this.gather2(e,t);return this.gather2(n,r).map((function(e){var t=e[0];return[t[0],t[1],e[1]]}))},e.gather4=function(e,t,r,n){var o=this.gather2(e,t),E=this.gather2(r,n);return this.gather2(o,E).map((function(e){var t=e[0],r=t[0],n=t[1],o=e[1];return[r,n,o[0],o[1]]}))},e.all=function(e){return Array.isArray(e)?this.allArray(e):this.allObject(e)},e.allArray=function(t){return new e((function(e,r){var n=[],o=0;0===t.length&&r(n),t.forEach((function(E,a){E.engageAndCatch((function(t){e(t)}),(function(e){n[a]=e,(o+=1)===t.length&&r(n)}))}))}))},e.allObject=function(e){var t=Object.keys(e),r=t.map((function(t){return e[t]}));return this.allArray(r).map((function(e){return t.reduce((function(t,r,n){return t[r]=e[n],t}),{})}))},e}();t.A=r}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var E=t[n]={exports:{}};return e[n](E,E.exports,r),E.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};r.r(n),r.d(n,{ErrorCodes:()=>u,SDKError:()=>d,codec:()=>be,createNewDeviceKeys:()=>je,createNewUser:()=>Be,deleteDeviceByPublicSigningKey:()=>H,document:()=>Fe,group:()=>ve,initialize:()=>He,isInitialized:()=>xe,search:()=>Ge,user:()=>we});var o={};r.r(o),r.d(o,{base64:()=>z,utf8:()=>k});var E={};r.r(E),r.d(E,{advanced:()=>ce,decrypt:()=>re,decryptFromStore:()=>te,encrypt:()=>oe,encryptToStore:()=>ne,getDocumentIDFromBytes:()=>ee,getMetadata:()=>$,grantAccess:()=>ie,list:()=>q,revokeAccess:()=>ue,updateEncryptedData:()=>ae,updateEncryptedDataInStore:()=>Ee,updateName:()=>se});var a={};r.r(a),r.d(a,{addAdmins:()=>me,addMembers:()=>de,create:()=>Ae,deleteGroup:()=>ge,get:()=>Re,list:()=>_e,removeAdmins:()=>Ue,removeMembers:()=>pe,removeSelfAsMember:()=>Te,rotatePrivateKey:()=>fe,update:()=>Ie});var s={};r.r(s),r.d(s,{createBlindSearchIndex:()=>le,initializeBlindSearchIndex:()=>he,transliterateString:()=>Oe});var i={};r.r(i),r.d(i,{changePasscode:()=>Le,deauthorizeDevice:()=>Ne,deleteDevice:()=>Pe,deleteDeviceByPublicSigningKey:()=>Ce,listDevices:()=>Me,rotateMasterKey:()=>ye});var u,c=1,_=2,R=/^[a-zA-Z0-9_.$#|@/:;=+'-]{1,100}$/,A={VERSION_HEADER_LENGTH:1,IV_LENGTH:12,SALT_LENGTH:32,AES_SYMMETRIC_KEY_LENGTH:32,PBKDF2_ITERATIONS:25e4,NATIVE_DECRYPT_FAILURE_ERROR:"OperationError"};!function(e){e[e.JWT_FORMAT_FAILURE=100]="JWT_FORMAT_FAILURE",e[e.JWT_RETRIEVAL_FAILURE=101]="JWT_RETRIEVAL_FAILURE",e[e.VERIFY_API_REQUEST_FAILURE=102]="VERIFY_API_REQUEST_FAILURE",e[e.BROWSER_FRAME_MESSAGE_FAILURE=103]="BROWSER_FRAME_MESSAGE_FAILURE",e[e.RANDOM_NUMBER_GENERATION_FAILURE=104]="RANDOM_NUMBER_GENERATION_FAILURE",e[e.PASSCODE_FORMAT_FAILURE=105]="PASSCODE_FORMAT_FAILURE",e[e.PASSCODE_RETRIEVAL_FAILURE=106]="PASSCODE_RETRIEVAL_FAILURE",e[e.SIGNATURE_GENERATION_FAILURE=107]="SIGNATURE_GENERATION_FAILURE",e[e.USER_NOT_SYNCED_FAILURE=108]="USER_NOT_SYNCED_FAILURE",e[e.WEBASSEMBLY_SUPPORT_FAILURE=109]="WEBASSEMBLY_SUPPORT_FAILURE",e[e.FRAME_LOAD_FAILURE=110]="FRAME_LOAD_FAILURE",e[e.USER_VERIFY_API_REQUEST_FAILURE=200]="USER_VERIFY_API_REQUEST_FAILURE",e[e.USER_CREATE_REQUEST_FAILURE=201]="USER_CREATE_REQUEST_FAILURE",e[e.USER_UPDATE_REQUEST_FAILURE=202]="USER_UPDATE_REQUEST_FAILURE",e[e.USER_PASSCODE_INCORRECT=203]="USER_PASSCODE_INCORRECT",e[e.USER_KEY_LIST_REQUEST_FAILURE=204]="USER_KEY_LIST_REQUEST_FAILURE",e[e.USER_DEVICE_ADD_REQUEST_FAILURE=205]="USER_DEVICE_ADD_REQUEST_FAILURE",e[e.USER_MASTER_KEY_GENERATION_FAILURE=206]="USER_MASTER_KEY_GENERATION_FAILURE",e[e.USER_DEVICE_KEY_GENERATION_FAILURE=207]="USER_DEVICE_KEY_GENERATION_FAILURE",e[e.USER_DEVICE_KEY_DECRYPTION_FAILURE=208]="USER_DEVICE_KEY_DECRYPTION_FAILURE",e[e.USER_PASSCODE_CHANGE_FAILURE=209]="USER_PASSCODE_CHANGE_FAILURE",e[e.USER_DEVICE_DELETE_REQUEST_FAILURE=210]="USER_DEVICE_DELETE_REQUEST_FAILURE",e[e.USER_UPDATE_KEY_REQUEST_FAILURE=211]="USER_UPDATE_KEY_REQUEST_FAILURE",e[e.USER_PRIVATE_KEY_ROTATION_FAILURE=212]="USER_PRIVATE_KEY_ROTATION_FAILURE",e[e.USER_DEVICE_LIST_REQUEST_FAILURE=213]="USER_DEVICE_LIST_REQUEST_FAILURE",e[e.DOCUMENT_LIST_REQUEST_FAILURE=300]="DOCUMENT_LIST_REQUEST_FAILURE",e[e.DOCUMENT_GET_REQUEST_FAILURE=301]="DOCUMENT_GET_REQUEST_FAILURE",e[e.DOCUMENT_CREATE_REQUEST_FAILURE=302]="DOCUMENT_CREATE_REQUEST_FAILURE",e[e.DOCUMENT_UPDATE_REQUEST_FAILURE=303]="DOCUMENT_UPDATE_REQUEST_FAILURE",e[e.DOCUMENT_GRANT_ACCESS_REQUEST_FAILURE=304]="DOCUMENT_GRANT_ACCESS_REQUEST_FAILURE",e[e.DOCUMENT_REVOKE_ACCESS_REQUEST_FAILURE=305]="DOCUMENT_REVOKE_ACCESS_REQUEST_FAILURE",e[e.DOCUMENT_DECRYPT_FAILURE=306]="DOCUMENT_DECRYPT_FAILURE",e[e.DOCUMENT_ENCRYPT_FAILURE=307]="DOCUMENT_ENCRYPT_FAILURE",e[e.DOCUMENT_REENCRYPT_FAILURE=308]="DOCUMENT_REENCRYPT_FAILURE",e[e.DOCUMENT_GRANT_ACCESS_FAILURE=309]="DOCUMENT_GRANT_ACCESS_FAILURE",e[e.DOCUMENT_MAX_SIZE_EXCEEDED=310]="DOCUMENT_MAX_SIZE_EXCEEDED",e[e.DOCUMENT_CREATE_WITH_ACCESS_FAILURE=311]="DOCUMENT_CREATE_WITH_ACCESS_FAILURE",e[e.DOCUMENT_HEADER_PARSE_FAILURE=312]="DOCUMENT_HEADER_PARSE_FAILURE",e[e.DOCUMENT_TRANSFORM_REQUEST_FAILURE=313]="DOCUMENT_TRANSFORM_REQUEST_FAILURE",e[e.GROUP_LIST_REQUEST_FAILURE=400]="GROUP_LIST_REQUEST_FAILURE",e[e.GROUP_GET_REQUEST_FAILURE=401]="GROUP_GET_REQUEST_FAILURE",e[e.GROUP_CREATE_REQUEST_FAILURE=402]="GROUP_CREATE_REQUEST_FAILURE",e[e.GROUP_ADD_MEMBERS_REQUEST_FAILURE=403]="GROUP_ADD_MEMBERS_REQUEST_FAILURE",e[e.GROUP_ADD_MEMBER_NOT_ADMIN_FAILURE=404]="GROUP_ADD_MEMBER_NOT_ADMIN_FAILURE",e[e.GROUP_REMOVE_MEMBERS_REQUEST_FAILURE=405]="GROUP_REMOVE_MEMBERS_REQUEST_FAILURE",e[e.GROUP_REMOVE_SELF_REQUEST_FAILURE=406]="GROUP_REMOVE_SELF_REQUEST_FAILURE",e[e.GROUP_KEY_GENERATION_FAILURE=407]="GROUP_KEY_GENERATION_FAILURE",e[e.GROUP_MEMBER_KEY_ENCRYPTION_FAILURE=408]="GROUP_MEMBER_KEY_ENCRYPTION_FAILURE",e[e.GROUP_ADD_ADMINS_NOT_ADMIN_FAILURE=409]="GROUP_ADD_ADMINS_NOT_ADMIN_FAILURE",e[e.GROUP_ADD_ADMINS_REQUEST_FAILURE=410]="GROUP_ADD_ADMINS_REQUEST_FAILURE",e[e.GROUP_KEY_DECRYPTION_FAILURE=411]="GROUP_KEY_DECRYPTION_FAILURE",e[e.GROUP_REMOVE_ADMINS_REQUEST_FAILURE=412]="GROUP_REMOVE_ADMINS_REQUEST_FAILURE",e[e.GROUP_UPDATE_REQUEST_FAILURE=413]="GROUP_UPDATE_REQUEST_FAILURE",e[e.GROUP_DELETE_REQUEST_FAILURE=414]="GROUP_DELETE_REQUEST_FAILURE",e[e.GROUP_CREATE_WITH_MEMBERS_OR_ADMINS_FAILURE=415]="GROUP_CREATE_WITH_MEMBERS_OR_ADMINS_FAILURE",e[e.GROUP_PRIVATE_KEY_ROTATION_FAILURE=416]="GROUP_PRIVATE_KEY_ROTATION_FAILURE",e[e.GROUP_UPDATE_KEY_REQUEST_FAILURE=417]="GROUP_UPDATE_KEY_REQUEST_FAILURE",e[e.GROUP_ROTATE_PRIVATE_KEY_NOT_ADMIN_FAILURE=418]="GROUP_ROTATE_PRIVATE_KEY_NOT_ADMIN_FAILURE",e[e.REQUEST_RATE_LIMITED=500]="REQUEST_RATE_LIMITED",e[e.POLICY_APPLY_REQUEST_FAILURE=600]="POLICY_APPLY_REQUEST_FAILURE",e[e.SEARCH_CREATE_INDEX_FAILURE=700]="SEARCH_CREATE_INDEX_FAILURE",e[e.SEARCH_INIT_INDEX_FAILURE=701]="SEARCH_INIT_INDEX_FAILURE",e[e.SEARCH_TOKENIZE_DATA_FAILURE=702]="SEARCH_TOKENIZE_DATA_FAILURE",e[e.SEARCH_TOKENIZE_QUERY_FAILURE=703]="SEARCH_TOKENIZE_QUERY_FAILURE"}(u||(u={}));var f={FRAME_DOMAIN:"https://api.ironcorelabs.com",FRAME_PATH:"/ironweb-frame"};"string"==typeof _ICL_FRAME_DOMAIN_REPLACEMENT_&&_ICL_FRAME_DOMAIN_REPLACEMENT_.length&&(f.FRAME_DOMAIN=_ICL_FRAME_DOMAIN_REPLACEMENT_);var I,m={SDK_VERSION:"4.2.42"},U=(I=function(e,t){return I=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},I(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}I(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});const d=function(e){function t(r,n){var o=e.call(this,r.message)||this;return!function(e){return"number"==typeof e.code&&e.name!==A.NATIVE_DECRYPT_FAILURE_ERROR}(r)?(o.code=n,o.rawError=r):(o.code=r.code,o.rawError=r.rawError),Object.setPrototypeOf(o,t.prototype),o}return U(t,e),t}(Error);var p=r(702),T=function(){function e(e){var t=this;this.callbackCount=0,this.callbacks={},this.processMessageIntoShim=function(e){var r=e.data,n=r.data,o=r.replyID,E=t.callbacks[o];E&&(delete t.callbacks[o],E(n))};var r=new MessageChannel;r.port1.start(),r.port1.addEventListener("message",this.processMessageIntoShim),this.messagePort=r.port1,e.addEventListener("load",(function(){e.contentWindow.postMessage("MESSAGE_PORT_INIT",f.FRAME_DOMAIN,[r.port2])}))}return e.prototype.postMessageToFrame=function(e,t){var r=this;void 0===t&&(t=[]);var n={replyID:this.callbackCount++,data:e};try{return this.messagePort.postMessage(n,t.map((function(e){return e.buffer}))),new p.A((function(e,t){r.callbacks[n.replyID]=t}))}catch(e){return p.A.reject(new d(new Error("Failure occurred when passing message due to the lack of browser support."),u.BROWSER_FRAME_MESSAGE_FAILURE))}},e}(),g=window.document.createElement("iframe"),D=new T(g),S=new Promise((function(e,t){g.addEventListener("load",(function(){var r=setTimeout((function(){t(new d(new Error("Failed to load IronWeb frame."),u.FRAME_LOAD_FAILURE))}),1e3);D.postMessageToFrame({type:"FRAME_LOADED_CHECK"}).engage(t,(function(){clearTimeout(r),e()}))}))}));function l(e,t){return p.A.tryP((function(){return S})).flatMap((function(){return D.postMessageToFrame(e,t)})).flatMap((function(e){return function(e){return"ERROR_RESPONSE"===e.type}(e)?p.A.reject(new d(new Error(e.message.text),e.message.code)):p.A.of(e)}))}g.height="0",g.width="0",g.style.display="none",g.style.position="absolute",g.style.top="-999px",g.style.left="-999px",g.src="".concat(f.FRAME_DOMAIN).concat(f.FRAME_PATH,"?version=").concat(m.SDK_VERSION),window.document.body.appendChild(g);var h,O="1",L=!1;function y(){return"".concat(O,"-icldassk")}function N(){L=!0}function P(){if(!L)throw new Error('SDK "initialize()" method has not yet been called or completed execution. SDK methods cannot be used until initialization is complete.')}function C(e){if(e)try{localStorage.setItem(y(),e)}catch(e){}}function M(){try{return localStorage.getItem(y())||void 0}catch(e){return}}function F(e,t){void 0===t&&(t=!1);var r={};return e.filter((function(e){return!(r[e]||t&&!e.length)&&(r[e]=!0,!0)}))}function w(e){if("string"!=typeof e||!e.length)throw new Error("Invalid ID provided. Expected a non-zero length string but got ".concat(e));if(!R.test(e))throw new Error("Invalid ID provided. Provided value includes invalid characters: '".concat(e,"'."))}function v(e){if(!(e instanceof Uint8Array&&e.length))throw new Error("Invalid document data format provided. Expected a Uint8Array.")}function G(e){if(!(e instanceof Uint8Array))throw new Error("Invalid encrypted document content. Content should be a Uint8Array.");if(e.byteLength<A.IV_LENGTH+1)throw new Error("Invalid encrypted document content. Length of content does not meet minimum requirements.")}function b(e){var t=e&&Array.isArray(e.users)&&e.users.length,r=e&&Array.isArray(e.groups)&&e.groups.length;if(!t&&!r)throw new Error("You must provide a list of users or groups with which to change document access.")}function Y(e){if(!Array.isArray(e)||!e.length)throw new Error("You must provide a list of users to perform this operation.")}function Q(e){var t=[],r=[];return e.users&&e.users.length&&(t=F(e.users.map((function(e){return e.id})),!0)),e.groups&&e.groups.length&&(r=F(e.groups.map((function(e){return e.id})),!0)),[t,r]}function K(e){return p.A.tryP((function(){var t=e();if(t&&"function"==typeof t.then)return t;throw new d(new Error("JWT callback did not return a Promise."),u.JWT_FORMAT_FAILURE)})).flatMap((function(e){return"string"==typeof e&&e.length>0?p.A.of(e):p.A.reject(new d(new Error("JWT should be a non-zero length string, but instead got '".concat(e,"'")),u.JWT_RETRIEVAL_FAILURE))}))}var V=function(e,t,r){return void 0===r&&(r=!1),K(e).flatMap((function(e){return l({type:"CREATE_USER",message:{passcode:t,jwtToken:e,needsRotation:r}})})).map((function(e){var t=e.message;return{accountID:t.id,segmentID:t.segmentId,needsRotation:t.needsRotation,status:t.status,userMasterPublicKey:t.userMasterPublicKey}})).toPromise()},B=function(e,t){return K(e).flatMap((function(e){return l({type:"CREATE_DETATCHED_USER_DEVICE",message:{passcode:t,jwtToken:e}})})).map((function(e){return e.message})).toPromise()};function j(e,t){return h=e,K(e).flatMap((function(e){return l({type:"INIT_SDK",message:{jwtToken:e,symmetricKey:M()}})})).flatMap((function(e){return"INIT_PASSCODE_REQUIRED"===e.type?function(e,t){return p.A.tryP((function(){var r=e(t);if(r&&"function"==typeof r.then)return r;throw new d(new Error("Passcode callback did not return a Promise."),u.PASSCODE_FORMAT_FAILURE)})).flatMap((function(e){return"string"==typeof e&&e.length>0?p.A.of(e):p.A.reject(new d(new Error("User provided passcode should be a non-zero length string, but instead got '".concat(e,"'")),u.PASSCODE_RETRIEVAL_FAILURE))}))}(t,e.message.doesUserExist).flatMap((function(t){return function(e,t){return K(h).flatMap((function(r){return l({type:e?"GEN_DEVICE_KEYS":"CREATE_USER_AND_DEVICE",message:{passcode:t,jwtToken:r}})})).map((function(e){return C(e.message.symmetricKey),N(),{user:e.message.user,groupsNeedingRotation:e.message.groupsNeedingRotation}}))}(e.message.doesUserExist,t)})):(C(e.message.symmetricKey),N(),p.A.of({user:e.message.user,groupsNeedingRotation:e.message.groupsNeedingRotation}))})).toPromise()}var H=function(e,t){return K(e).flatMap((function(e){return l({type:"DELETE_DEVICE_BY_SIGNING_KEY_JWT",message:{jwtToken:e,publicSigningKey:t}}).map((function(e){return e.message}))})).toPromise()},x=r(52),W=r(526),k={fromBytes:function(e){return(0,x.D4)(e)},toBytes:function(e){return(0,x.lF)(e)}},z={fromBytes:function(e){return(0,W.iI)(e)},toBytes:function(e){return(0,W.bg)(e)}},X=function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,E=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=E.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=E.return)&&r.call(E)}finally{if(o)throw o.error}}return a},J=2048e3;function Z(e){var t=window.crypto.getRandomValues(new Uint8Array(16)),r=Array.prototype.map.call(t,(function(e){return"00".concat(e.toString(16)).slice(-2)})).join("");return e?{documentID:e.documentID||r,documentName:e.documentName||"",accessList:{users:e.accessList&&e.accessList.users?e.accessList.users:[],groups:e.accessList&&e.accessList.groups?e.accessList.groups:[],grantToAuthor:!1!==e.grantToAuthor},policy:e.policy}:{documentID:r,documentName:"",accessList:{users:[],groups:[],grantToAuthor:!0}}}function q(){return P(),l({type:"DOCUMENT_LIST"}).map((function(e){return e.message})).toPromise()}function $(e){return P(),w(e),l({type:"DOCUMENT_META_GET",message:{documentID:e}}).map((function(e){return e.message})).toPromise()}function ee(e){if(P(),G(e),1===e[0])return Promise.resolve(null);if(2!==e[0])return Promise.reject(new d(new Error("Provided encrypted document doesn't appear to be valid. Invalid version."),u.DOCUMENT_HEADER_PARSE_FAILURE));var t=new DataView(e.buffer).getUint16(e.byteOffset+c,!1),r=e.slice(c+_,c+_+t);try{var n=JSON.parse(k.fromBytes(r));return Promise.resolve(n._did_)}catch(e){return Promise.reject(new d(new Error("Unable to parse document header. Header value is corrupted."),u.DOCUMENT_HEADER_PARSE_FAILURE))}}function te(e){return console.warn("decryptFromStore is deprecated. Use decrypt instead."),P(),w(e),l({type:"DOCUMENT_STORE_DECRYPT",message:{documentID:e}}).map((function(e){return e.message})).toPromise()}function re(e,t){P(),w(e),G(t);var r={type:"DOCUMENT_DECRYPT",message:{documentID:e,documentData:t.slice()}};return l(r,[r.message.documentData]).map((function(e){return e.message})).toPromise()}function ne(e,t){if(console.warn("encryptToStore is deprecated. Use encrypt instead and manage storage of the result yourself."),P(),v(e),e.length>J)return Promise.reject(new d(new Error("Document of length ".concat(e.length," exceeds maximum allowed byte size of ").concat(J)),u.DOCUMENT_MAX_SIZE_EXCEEDED));var r=Z(t);r.documentID&&w(r.documentID);var n=X(Q(r.accessList),2),o=n[0],E=n[1],a={type:"DOCUMENT_STORE_ENCRYPT",message:{documentID:r.documentID,documentData:e.slice(),documentName:r.documentName,userGrants:o,groupGrants:E,grantToAuthor:r.accessList.grantToAuthor,policy:r.policy}};return l(a,[a.message.documentData]).map((function(e){return e.message})).toPromise()}function oe(e,t){P(),v(e);var r=Z(t);r.documentID&&w(r.documentID);var n=X(Q(r.accessList),2),o=n[0],E=n[1],a={type:"DOCUMENT_ENCRYPT",message:{documentData:e.slice(),documentID:r.documentID,documentName:r.documentName,userGrants:o,groupGrants:E,grantToAuthor:r.accessList.grantToAuthor,policy:r.policy}};return l(a,[a.message.documentData]).map((function(e){return e.message})).toPromise()}function Ee(e,t){if(P(),w(e),v(t),t.length>J)return Promise.reject(new d(new Error("Document of length ".concat(t.length," exceeds maximum allowed byte size of ").concat(J)),u.DOCUMENT_MAX_SIZE_EXCEEDED));var r={type:"DOCUMENT_STORE_UPDATE_DATA",message:{documentID:e,documentData:t.slice()}};return l(r,[r.message.documentData]).map((function(e){return e.message})).toPromise()}function ae(e,t){P(),w(e),v(t);var r={type:"DOCUMENT_UPDATE_DATA",message:{documentID:e,documentData:t.slice()}};return l(r,[r.message.documentData]).map((function(e){return e.message})).toPromise()}function se(e,t){return P(),w(e),l({type:"DOCUMENT_UPDATE_NAME",message:{documentID:e,name:""===t?null:t}}).map((function(e){return e.message})).toPromise()}function ie(e,t){P(),w(e),b(t);var r=X(Q(t),2);return l({type:"DOCUMENT_GRANT",message:{documentID:e,userGrants:r[0],groupGrants:r[1]}}).map((function(e){return e.message})).toPromise()}function ue(e,t){P(),w(e),b(t);var r=X(Q(t),2);return l({type:"DOCUMENT_REVOKE",message:{documentID:e,userRevocations:r[0],groupRevocations:r[1]}}).map((function(e){return e.message})).toPromise()}var ce={decryptUnmanaged:function(e,t){return P(),function(e){if(!(e instanceof Uint8Array))throw new Error("Invalid encrypted deks. Edeks should be a Uint8Array.");if(e.byteLength<=0)throw new Error("Invalid encrypted deks. Length does not meet minimum requirements.")}(t),G(e),p.A.tryP((function(){return ee(e)})).flatMap((function(r){var n={type:"DOCUMENT_UNMANAGED_DECRYPT",message:{edeks:t,documentData:e.slice()}};return l(n,[n.message.documentData]).map((function(e){var t=e.message;return{data:t.data,documentID:r,accessVia:t.accessVia}}))})).toPromise()},encryptUnmanaged:function(e,t){P(),v(e);var r=Z(t);r.documentID&&w(r.documentID);var n=X(Q(r.accessList),2),o=n[0],E=n[1],a={type:"DOCUMENT_UNMANAGED_ENCRYPT",message:{documentData:e.slice(),documentID:r.documentID,userGrants:o,groupGrants:E,grantToAuthor:r.accessList.grantToAuthor,policy:r.policy}};return l(a,[a.message.documentData]).map((function(e){return e.message})).toPromise()}};function _e(){return P(),l({type:"GROUP_LIST"}).map((function(e){return e.message})).toPromise()}function Re(e){return P(),w(e),l({type:"GROUP_GET",message:{groupID:e}}).map((function(e){return e.message})).toPromise()}function Ae(e){return void 0===e&&(e={groupName:"",addAsMember:!0,addAsAdmin:!0,needsRotation:!1}),P(),function(e,t){if(!t&&!1===e)throw new Error("Failed to create group because group ownership must be held by a group administrator")}(e.addAsAdmin,e.ownerUserId),e.groupID&&w(e.groupID),l({type:"GROUP_CREATE",message:{groupID:e.groupID||"",groupName:e.groupName||"",ownerUserId:e.ownerUserId,addAsMember:!1!==e.addAsMember,addAsAdmin:!1!==e.addAsAdmin,needsRotation:!0===e.needsRotation,userLists:{memberList:e.memberList?F(e.memberList,!0):[],adminList:e.adminList?F(e.adminList,!0):[]}}}).map((function(e){return e.message})).toPromise()}function fe(e){return P(),w(e),l({type:"ROTATE_GROUP_PRIVATE_KEY",message:{groupID:e}}).map((function(e){return e.message})).toPromise()}function Ie(e,t){if(P(),w(e),null===t.groupName||"string"==typeof t.groupName&&t.groupName.length)return l({type:"GROUP_UPDATE",message:{groupID:e,groupName:t.groupName}}).map((function(e){return e.message})).toPromise();throw new Error("Group update must provide a new name which is either a non-zero length string or null.")}function me(e,t){return P(),w(e),Y(t),l({type:"GROUP_ADD_ADMINS",message:{groupID:e,userList:F(t,!0)}}).map((function(e){return e.message})).toPromise()}function Ue(e,t){return P(),w(e),Y(t),l({type:"GROUP_REMOVE_ADMINS",message:{groupID:e,userList:F(t,!0)}}).map((function(e){return e.message})).toPromise()}function de(e,t){return P(),w(e),Y(t),l({type:"GROUP_ADD_MEMBERS",message:{groupID:e,userList:F(t,!0)}}).map((function(e){return e.message})).toPromise()}function pe(e,t){return P(),w(e),Y(t),l({type:"GROUP_REMOVE_MEMBERS",message:{groupID:e,userList:F(t,!0)}}).map((function(e){return e.message})).toPromise()}function Te(e){return P(),w(e),l({type:"GROUP_REMOVE_SELF_AS_MEMBER",message:{groupID:e}}).map((function(){})).toPromise()}function ge(e){return P(),w(e),l({type:"GROUP_DELETE",message:{groupID:e}}).map((function(e){return e.message})).toPromise()}var De=function(){return De=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},De.apply(this,arguments)},Se=function(){function e(e){this.searchIndexId=e}return e.prototype.tokenizeData=function(e,t){return l({type:"BLIND_SEARCH_INDEX_TOKENIZE_DATA",message:{data:e,partitionId:t,searchIndexId:this.searchIndexId}}).map((function(e){return e.message})).toPromise()},e.prototype.tokenizeQuery=function(e,t){return l({type:"BLIND_SEARCH_INDEX_TOKENIZE_QUERY",message:{query:e,partitionId:t,searchIndexId:this.searchIndexId}}).map((function(e){return e.message})).toPromise()},e}(),le=function(e){return P(),w(e),l({type:"BLIND_SEARCH_INDEX_CREATE",message:{groupId:e}}).map((function(e){return e.message})).toPromise()},he=function(e){return P(),v(e.searchIndexEncryptedSalt),v(e.searchIndexEdeks),l({type:"BLIND_SEARCH_INDEX_INIT",message:De({},e)}).map((function(e){var t=e.message;return new Se(t.searchIndexId)})).toPromise()},Oe=function(e){return l({type:"SEARCH_TRANSLITERATE_STRING",message:e}).map((function(e){return e.message})).toPromise()};function Le(e,t){return P(),l({type:"CHANGE_USER_PASSCODE",message:{currentPasscode:e,newPasscode:t}}).map((function(){})).toPromise()}function ye(e){return P(),l({type:"ROTATE_USER_PRIVATE_KEY",message:{passcode:e}}).map((function(){})).toPromise()}var Ne=function(){return Pe().then((function(e){return{transformKeyDeleted:e>0}}))},Pe=function(e){P();var t=void 0===e,r={type:"DELETE_DEVICE",message:e};return t&&function(){try{localStorage.removeItem(y())}catch(e){}}(),l(r).map((function(e){var r=e.message;return t&&(L=!1),r})).toPromise()},Ce=function(e){return P(),l({type:"DELETE_DEVICE_BY_SIGNING_KEY",message:e}).map((function(e){return e.message})).toPromise()},Me=function(){P();return l({type:"LIST_DEVICES",message:null}).map((function(e){return e.message})).toPromise()},Fe=E,we=i,ve=a,Ge=s,be=o;function Ye(){var e=window.crypto;return"object"==typeof e&&"function"==typeof e.getRandomValues}function Qe(){return"object"==typeof WebAssembly&&WebAssembly&&"function"==typeof WebAssembly.instantiate}var Ke=function(){return Promise.reject(new d(new Error("Request failed due to a lack of browser support for WebAssembly."),u.WEBASSEMBLY_SUPPORT_FAILURE))},Ve=function(){return Promise.reject(new d(new Error("Request failed due to a lack of browser support for random number generation."),u.RANDOM_NUMBER_GENERATION_FAILURE))};function Be(e,t,r){if(void 0===r&&(r={needsRotation:!1}),!e||"function"!=typeof e)throw new Error("You must provide a function which will generate a JWT as the first parameter to 'IronWeb.createNewUser'.");return Ye()?Qe()?V(e,t,r.needsRotation||!1):Ke():Ve()}function je(e,t){if(!e||"function"!=typeof e)throw new Error("You must provide a function which will generate a JWT as the first parameter to 'IronWeb.createNewUser'.");return Ye()?Qe()?B(e,t):Ke():Ve()}function He(e,t){if(!e||"function"!=typeof e)throw new Error("You must provide a function which will generate a JWT as the first parameter to 'IronWeb.initialize'.");if(!t||"function"!=typeof t)throw new Error("You must provide a function which will generate the users escrow passcode as the second parameter to 'IronWeb.initialize'.");return Ye()?Qe()?j(e,t):Ke():Ve()}function xe(){try{return P(),!0}catch(e){return!1}}return n})()));
|
|
2
2
|
//# sourceMappingURL=ironweb.min.js.map
|
package/ironweb.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"./shim/ironweb.min.js","mappings":"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","sources":["webpack://ironweb/webpack/universalModuleDefinition","webpack://ironweb/./node_modules/@stablelib/utf8/lib/utf8.js","webpack://ironweb/./node_modules/base64-js/index.js","webpack://ironweb/./node_modules/futurejs/Future.js","webpack://ironweb/webpack/bootstrap","webpack://ironweb/webpack/runtime/define property getters","webpack://ironweb/webpack/runtime/hasOwnProperty shorthand","webpack://ironweb/webpack/runtime/make namespace object","webpack://ironweb/./src/Constants.ts","webpack://ironweb/./src/lib/SDKError.ts","webpack://ironweb/./src/shim/FrameMediator.ts","webpack://ironweb/./src/shim/ShimUtils.ts","webpack://ironweb/./src/shim/Initialize.ts","webpack://ironweb/./src/shim/sdk/CodecSDK.ts","webpack://ironweb/./src/shim/sdk/DocumentSDK.ts","webpack://ironweb/./src/shim/sdk/GroupSDK.ts","webpack://ironweb/./src/shim/sdk/SearchSDK.ts","webpack://ironweb/./src/shim/sdk/UserSDK.ts","webpack://ironweb/./src/shim/SDK.ts","webpack://ironweb/./src/shim/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ironweb\"] = factory();\n\telse\n\t\troot[\"ironweb\"] = factory();\n})(self, () => {\nreturn ","\"use strict\";\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\nvar INVALID_UTF16 = \"utf8: invalid string\";\nvar INVALID_UTF8 = \"utf8: invalid source encoding\";\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nfunction encode(s) {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n var arr = new Uint8Array(encodedLength(s));\n var pos = 0;\n for (var i = 0; i < s.length; i++) {\n var c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n }\n else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\nexports.encode = encode;\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nfunction encodedLength(s) {\n var result = 0;\n for (var i = 0; i < s.length; i++) {\n var c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n }\n else if (c < 0x800) {\n result += 2;\n }\n else if (c < 0xd800) {\n result += 3;\n }\n else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n }\n else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\nexports.encodedLength = encodedLength;\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nfunction decode(arr) {\n var chars = [];\n for (var i = 0; i < arr.length; i++) {\n var b = arr[i];\n if (b & 0x80) {\n var min = void 0;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n }\n else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n var n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n }\n else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n var n2 = arr[++i];\n var n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n }\n else {\n throw new Error(INVALID_UTF8);\n }\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\nexports.decode = decode;\n//# sourceMappingURL=utf8.js.map","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","\"use strict\";\nexports.__esModule = true;\nvar Future = /** @class */ (function () {\n function Future(action) {\n this.action = action;\n }\n /**\n * Start execution of the Future. Accepts resolve/reject parameters\n * @param {Function} reject Handler if error occured during Future execution\n * @param {Function} resolve Handler if Future fully executed successfully\n */\n Future.prototype.engage = function (reject, resolve) {\n try {\n //In the case where the action call just completely blows up, prevent against that and invoke reject.\n this.action(reject, resolve);\n }\n catch (error) {\n reject(error);\n }\n };\n /**\n * Presents a Thenable interface to the Future, which immediatly starts execution of the Future. This allows for\n * await syntax to be used on Futures, as well as chaining with other Thenable objects (e.g. Promises).\n * @param {Function} resolve Callback if Future fully executed successfully.\n * @param {Function} reject Callback if error occured during Future execution.\n * @returns {Promise<TResult1 | TResult2>} Promise that will resolve when the immediately executed Future is\n * resolved, with resolve/reject applied to the result.\n */\n Future.prototype.then = function (resolve, reject) {\n return this.toPromise().then(resolve, reject);\n };\n /**\n * Similar to engage. Starts execution of the Future and returns the resolve/reject wrapped up in a Promise instead\n * of taking reject/resolve parameters.\n * @return {Promise<R>} Start execution of the Future but return a Promise which will be resolved/reject when the Future is\n */\n Future.prototype.toPromise = function () {\n var _this = this;\n return new Promise(function (resolve, reject) { return _this.engage(reject, resolve); });\n };\n /**\n * Modify the data within the pipeline synchronously\n * @param {Function} mapper Method which will receive the current data and map it to a new value\n */\n Future.prototype.map = function (mapper) {\n return this.flatMap(function (x) { return Future.of(mapper(x)); });\n };\n /**\n * Run another asynchronous operation recieving the data from the previous operation\n * @param {Function} next Method to execute to run the operation\n */\n Future.prototype.flatMap = function (next) {\n var _this = this;\n return new Future(function (reject, resolve) {\n _this.engage(reject, function (data) { return next(data).engage(reject, resolve); });\n });\n };\n /**\n * Attempt to recover from an error in the pipeline in order to continue without rejecting the Future. The repaired type must extend\n * the original R as to make sure follow-on Futures can handle the data further in the chain\n * @param {Function} errHandler Error handler which should return a new Future and resolve or reject result\n */\n Future.prototype.handleWith = function (errHandler) {\n var _this = this;\n return new Future(function (reject, resolve) {\n _this.engage(function (error) {\n errHandler(error).engage(reject, resolve);\n }, resolve); //Type cast this as the resolved method should be able to handle both R and RepairedType\n });\n };\n /**\n * Map errors to a new error type.\n * @param {Function} mapper Mapping function which will recieve the current error can map it to a new type\n */\n Future.prototype.errorMap = function (mapper) {\n var _this = this;\n return new Future(function (reject, resolve) {\n _this.engage(function (error) { return reject(mapper(error)); }, resolve);\n });\n };\n /**\n * Wrap the provided function in a Future which will either resolve with it's return value or reject with any exception it throws.\n * @param {Function} fn Function to invoke when Future is engaged\n */\n Future.tryF = function (fn) {\n return new Future(function (reject, resolve) {\n var result;\n try {\n result = fn();\n }\n catch (e) {\n return reject(e);\n }\n resolve(result);\n });\n };\n /**\n * Wrap the provided function which returns a Promise within a Future. If the function either throws an error or the resulting Promise rejects, the Future will\n * also reject. Otherwise, the Future will resolve with the result of the resolved Promise.\n * @param {Function} fn Function to invoke which returns a Promise\n */\n Future.tryP = function (fn) {\n return new Future(function (reject, resolve) {\n var promiseResult;\n try {\n promiseResult = fn();\n }\n catch (e) {\n return reject(e);\n }\n //We have to support both Promise and PromiseLike methods as input here, but treat them all as normal Promises when executing them\n promiseResult.then(resolve)[\"catch\"](reject);\n });\n };\n /**\n * Create a new synchronous Future which will automatically resolve with the provided value\n */\n Future.of = function (result) {\n return new Future(function (_, resolve) {\n resolve(result);\n });\n };\n /**\n * Create a new synchronous Future which will automatically reject with the provided value\n */\n Future.reject = function (error) {\n return new Future(function (reject) {\n reject(error);\n });\n };\n /**\n * Takes a function and a value and creates a new Future which will attempt to run the function with the value\n * and reject if the method throws an exception.\n * @param {Function} fn The function to execute\n * @param {A} a The value to pass to the function\n */\n Future.encase = function (fn, a) {\n return new Future(function (reject, resolve) {\n var result;\n try {\n result = fn(a);\n }\n catch (e) {\n return reject(e);\n }\n resolve(result);\n });\n };\n /**\n * Returns a new Future which will run the two provided futures in \"parallel\". The returned Future will be resolved if both\n * of the futures resolve and the results will be in an array properly indexed to how they were passed in. If any of the Futures\n * reject, then no results are returned and the Future is rejected.\n */\n Future.gather2 = function (future1, future2) {\n return new Future(function (reject, resolve) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var results = [];\n var count = 0;\n var done = false;\n future1.engage(function (error) {\n if (!done) {\n done = true;\n reject(error);\n }\n }, function (result) {\n results[0] = result;\n if (++count === 2) {\n resolve(results);\n }\n });\n future2.engage(function (error) {\n if (!done) {\n done = true;\n reject(error);\n }\n }, function (result) {\n results[1] = result;\n if (++count === 2) {\n resolve(results);\n }\n });\n });\n };\n /**\n * Same as gather2 except supports running three concurrent Futures\n */\n Future.gather3 = function (future1, future2, future3) {\n var firstTwo = this.gather2(future1, future2);\n return this.gather2(firstTwo, future3).map(function (_a) {\n var _b = _a[0], f1 = _b[0], f2 = _b[1], f3 = _a[1];\n return [f1, f2, f3];\n });\n };\n /**\n * Same as gather2 except supports running four concurrent Futures\n */\n Future.gather4 = function (future1, future2, future3, future4) {\n var firstTwo = this.gather2(future1, future2);\n var secondTwo = this.gather2(future3, future4);\n return this.gather2(firstTwo, secondTwo).map(function (_a) {\n var _b = _a[0], f1 = _b[0], f2 = _b[1], _c = _a[1], f3 = _c[0], f4 = _c[1];\n return [f1, f2, f3, f4];\n });\n };\n Future.all = function (futures) {\n return Array.isArray(futures) ? this.allArray(futures) : this.allObject(futures);\n };\n /**\n * Run all of the Futures in the provided array in parallel and resolve with an array where the results are in the same index\n * as the provided array.\n */\n Future.allArray = function (futures) {\n return new Future(function (reject, resolve) {\n var results = [];\n var count = 0;\n if (futures.length === 0) {\n resolve(results);\n }\n futures.forEach(function (futureInstance, index) {\n futureInstance.engage(function (error) {\n reject(error);\n }, function (result) {\n results[index] = result;\n count += 1;\n if (count === futures.length) {\n resolve(results);\n }\n });\n });\n });\n };\n /**\n * Run all of the Futures in the provided Future map in parallel and resolve with an object where the results are in the same key\n * as the provided map.\n */\n Future.allObject = function (futures) {\n var futureKeys = Object.keys(futures);\n //Convert the Future map into an array in the same order as we get back from Object.keys\n var futuresArray = futureKeys.map(function (key) { return futures[key]; });\n return this.allArray(futuresArray).map(function (futureResults) {\n //Now iterate over the original keys and build a new map from key to Future result\n return futureKeys.reduce(function (futureMap, futureKey, index) {\n //The index of the object keys will be the same index as the expected result\n futureMap[futureKey] = futureResults[index];\n return futureMap;\n }, {});\n });\n };\n return Future;\n}());\nexports[\"default\"] = Future;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","declare const "4.2.5": string;\ndeclare const _ICL_FRAME_DOMAIN_REPLACEMENT_: string;\n\n/**\n * Number which is prepended onto encrypted documents to denote which classification of encrypted data\n * the document represents. Used to have a place to denote header info, symmetric encryption details, etc\n */\nexport const DOCUMENT_ENCRYPTION_DETAILS_VERSION_NUMBER = 2;\nexport const VERSION_HEADER_LENGTH = 1;\nexport const HEADER_META_LENGTH_LENGTH = 2;\n\n/**\n * Regex of allowed characters that users can provide as part of user, group, and document IDs.\n */\nexport const ALLOWED_ID_CHAR_REGEX = /^[a-zA-Z0-9_.$#|@/:;=+'-]{1,100}$/;\n\nexport const CryptoConstants = {\n VERSION_HEADER_LENGTH: 1,\n IV_LENGTH: 12,\n SALT_LENGTH: 32,\n AES_SYMMETRIC_KEY_LENGTH: 32,\n PBKDF2_ITERATIONS: 250000,\n NATIVE_DECRYPT_FAILURE_ERROR: \"OperationError\",\n};\n\nexport enum ErrorCodes {\n JWT_FORMAT_FAILURE = 100,\n JWT_RETRIEVAL_FAILURE = 101,\n VERIFY_API_REQUEST_FAILURE = 102,\n BROWSER_FRAME_MESSAGE_FAILURE = 103,\n RANDOM_NUMBER_GENERATION_FAILURE = 104,\n PASSCODE_FORMAT_FAILURE = 105,\n PASSCODE_RETRIEVAL_FAILURE = 106,\n SIGNATURE_GENERATION_FAILURE = 107,\n USER_NOT_SYNCED_FAILURE = 108,\n WEBASSEMBLY_SUPPORT_FAILURE = 109,\n FRAME_LOAD_FAILURE = 110,\n USER_VERIFY_API_REQUEST_FAILURE = 200,\n USER_CREATE_REQUEST_FAILURE = 201,\n USER_UPDATE_REQUEST_FAILURE = 202,\n USER_PASSCODE_INCORRECT = 203,\n USER_KEY_LIST_REQUEST_FAILURE = 204,\n USER_DEVICE_ADD_REQUEST_FAILURE = 205,\n USER_MASTER_KEY_GENERATION_FAILURE = 206,\n USER_DEVICE_KEY_GENERATION_FAILURE = 207,\n USER_DEVICE_KEY_DECRYPTION_FAILURE = 208,\n USER_PASSCODE_CHANGE_FAILURE = 209,\n USER_DEVICE_DELETE_REQUEST_FAILURE = 210,\n USER_UPDATE_KEY_REQUEST_FAILURE = 211,\n USER_PRIVATE_KEY_ROTATION_FAILURE = 212,\n USER_DEVICE_LIST_REQUEST_FAILURE = 213,\n DOCUMENT_LIST_REQUEST_FAILURE = 300,\n DOCUMENT_GET_REQUEST_FAILURE = 301,\n DOCUMENT_CREATE_REQUEST_FAILURE = 302,\n DOCUMENT_UPDATE_REQUEST_FAILURE = 303,\n DOCUMENT_GRANT_ACCESS_REQUEST_FAILURE = 304,\n DOCUMENT_REVOKE_ACCESS_REQUEST_FAILURE = 305,\n DOCUMENT_DECRYPT_FAILURE = 306,\n DOCUMENT_ENCRYPT_FAILURE = 307,\n DOCUMENT_REENCRYPT_FAILURE = 308,\n DOCUMENT_GRANT_ACCESS_FAILURE = 309,\n DOCUMENT_MAX_SIZE_EXCEEDED = 310,\n DOCUMENT_CREATE_WITH_ACCESS_FAILURE = 311,\n DOCUMENT_HEADER_PARSE_FAILURE = 312,\n DOCUMENT_TRANSFORM_REQUEST_FAILURE = 313,\n GROUP_LIST_REQUEST_FAILURE = 400,\n GROUP_GET_REQUEST_FAILURE = 401,\n GROUP_CREATE_REQUEST_FAILURE = 402,\n GROUP_ADD_MEMBERS_REQUEST_FAILURE = 403,\n GROUP_ADD_MEMBER_NOT_ADMIN_FAILURE = 404,\n GROUP_REMOVE_MEMBERS_REQUEST_FAILURE = 405,\n GROUP_REMOVE_SELF_REQUEST_FAILURE = 406,\n GROUP_KEY_GENERATION_FAILURE = 407,\n GROUP_MEMBER_KEY_ENCRYPTION_FAILURE = 408,\n GROUP_ADD_ADMINS_NOT_ADMIN_FAILURE = 409,\n GROUP_ADD_ADMINS_REQUEST_FAILURE = 410,\n GROUP_KEY_DECRYPTION_FAILURE = 411,\n GROUP_REMOVE_ADMINS_REQUEST_FAILURE = 412,\n GROUP_UPDATE_REQUEST_FAILURE = 413,\n GROUP_DELETE_REQUEST_FAILURE = 414,\n GROUP_CREATE_WITH_MEMBERS_OR_ADMINS_FAILURE = 415,\n GROUP_PRIVATE_KEY_ROTATION_FAILURE = 416,\n GROUP_UPDATE_KEY_REQUEST_FAILURE = 417,\n GROUP_ROTATE_PRIVATE_KEY_NOT_ADMIN_FAILURE = 418,\n REQUEST_RATE_LIMITED = 500,\n POLICY_APPLY_REQUEST_FAILURE = 600,\n SEARCH_CREATE_INDEX_FAILURE = 700,\n SEARCH_INIT_INDEX_FAILURE = 701,\n SEARCH_TOKENIZE_DATA_FAILURE = 702,\n SEARCH_TOKENIZE_QUERY_FAILURE = 703,\n}\n\n/*\n * Constants around frame communication\n */\nconst Frame = {\n //By default we point to production. We modify this via webpack at runtime for local development to allow us to\n //point to dev/stage.\n FRAME_DOMAIN: \"https://api.ironcorelabs.com\",\n FRAME_PATH: \"/ironweb-frame\",\n};\n//Support the ability to switch out the domain to point to different environments. This should only ever\n//be used internally for local development and the Google Integration. Clients should always hit production.\nif (typeof _ICL_FRAME_DOMAIN_REPLACEMENT_ === \"string\" && _ICL_FRAME_DOMAIN_REPLACEMENT_.length) {\n Frame.FRAME_DOMAIN = _ICL_FRAME_DOMAIN_REPLACEMENT_;\n}\n\nexport {Frame};\n\nexport const GroupPermissions = {\n ADMIN: \"admin\",\n MEMBER: \"member\",\n};\n\nexport const UserAndGroupTypes = {\n USER: \"user\",\n GROUP: \"group\",\n};\n\nexport const Versions = {\n //This define is replaced at runtime during development, and at build time in the build script with the proper version\n SDK_VERSION: SDK_NPM_VERSION_PLACEHOLDER,\n};\n","import {CryptoConstants} from \"../Constants\";\n\n/**\n * Type guard to differentiate between base Errors and SDKErrors. Check if we have a numerical code on the error and that it\n * isn't a generic \"OperationError\" which already contains codes\n */\nfunction isSDKError(error: SDKError | Error): error is SDKError {\n return typeof (error as SDKError).code === \"number\" && error.name !== CryptoConstants.NATIVE_DECRYPT_FAILURE_ERROR;\n}\n\n/**\n * Custom error class which adds error codes onto normal JS Error objects so we can communicate specific SDK errors out\n * to consumers of the SDK.\n */\nexport default class SDKError extends Error {\n readonly code: number;\n readonly rawError: Error;\n\n constructor(error: Error | SDKError, code: number) {\n super(error.message);\n //If we get an SDK error as part of this constructor, then just keep the original error/code and don't overwrite\n if (isSDKError(error)) {\n this.code = error.code;\n this.rawError = error.rawError;\n } else {\n this.code = code;\n this.rawError = error;\n }\n //Fix error inheritence: https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, SDKError.prototype);\n }\n}\n","import Future from \"futurejs\";\nimport {ErrorCodes, Frame, Versions} from \"../Constants\";\nimport {ErrorResponse, RequestMessage, ResponseMessage} from \"../FrameMessageTypes\";\nimport SDKError from \"../lib/SDKError\";\n\ninterface FrameEvent<T> {\n replyID: number;\n data: T;\n}\n\n/**\n * Class which handles messaging from the shim into the frame. Holds callback messages so that users can interact with this\n * class via Futures. Also handles the creation of all the ChannelMessage ports to pass down to the frame.\n */\nexport class ShimMessenger {\n readonly messagePort: MessagePort;\n callbackCount = 0;\n callbacks: {[key: string]: (data: ResponseMessage) => void} = {};\n\n constructor(iFrameWindow: HTMLIFrameElement) {\n const channel = new MessageChannel();\n channel.port1.start();\n channel.port1.addEventListener(\"message\", this.processMessageIntoShim);\n this.messagePort = channel.port1;\n iFrameWindow.addEventListener(\"load\", () => {\n iFrameWindow.contentWindow!.postMessage(\"MESSAGE_PORT_INIT\", Frame.FRAME_DOMAIN, [channel.port2]);\n });\n }\n\n /**\n * Post request message to child iFrame\n * @param {RequestMessage} data RequestMessage to post to child iFrame\n * @param {Uint8Array[]} transferList List of byte arrays to transfer to frame\n */\n postMessageToFrame(data: RequestMessage, transferList: Uint8Array[] = []): Future<SDKError, ResponseMessage> {\n const message: FrameEvent<RequestMessage> = {\n replyID: this.callbackCount++,\n data,\n };\n try {\n this.messagePort.postMessage(\n message,\n transferList.map(({buffer}) => buffer)\n );\n return new Future<SDKError, ResponseMessage>((_, resolve) => {\n this.callbacks[message.replyID] = resolve;\n });\n } catch (_) {\n return Future.reject(\n new SDKError(new Error(\"Failure occurred when passing message due to the lack of browser support.\"), ErrorCodes.BROWSER_FRAME_MESSAGE_FAILURE)\n );\n }\n }\n\n /**\n * Process a received message into the parent window\n * @param {MessageEvent} event Window postMessage event object\n */\n processMessageIntoShim = (event: MessageEvent) => {\n const {data, replyID} = event.data as FrameEvent<ResponseMessage>;\n const callback = this.callbacks[replyID];\n\n if (callback) {\n delete this.callbacks[replyID];\n callback(data);\n }\n };\n}\n\n/**\n * Create a new invisible iFrame that points to the SDK frame, attach it to the window body, and subscribe to the\n * frame load event so we ensure we wait until it's available to call into it.\n */\nconst frame = window.document.createElement(\"iframe\");\nexport const messenger = new ShimMessenger(frame);\nconst frameLoadedPromise = new Promise<void>((resolve, reject) => {\n //The frame \"load\" even fires even if the frame failed to load (e.g. 404). So once it loads, we want to verify that it is actually\n //responding to messages we pass it. So pass a test message and verify we get a response within a second. If it does, we resolve\n //this Promise for all future messages. If it fails we reject with the appropriate SDK error message.\n frame.addEventListener(\"load\", () => {\n const timeout = setTimeout(() => {\n reject(new SDKError(new Error(\"Failed to load IronWeb frame.\"), ErrorCodes.FRAME_LOAD_FAILURE));\n }, 1000);\n messenger.postMessageToFrame({type: \"FRAME_LOADED_CHECK\"}).engage(reject, () => {\n clearTimeout(timeout);\n resolve();\n });\n });\n});\nframe.height = \"0\";\nframe.width = \"0\";\nframe.style.display = \"none\";\nframe.style.position = \"absolute\";\nframe.style.top = \"-999px\";\nframe.style.left = \"-999px\";\nframe.src = `${Frame.FRAME_DOMAIN}${Frame.FRAME_PATH}?version=${Versions.SDK_VERSION}`;\nwindow.document.body.appendChild(frame);\n\n/**\n * Return a simple Future wrapper around existing frame load Promise so that we wait until the iFrame has loaded before we post any messages to it. We\n * wrap a Promise here so that when this gets invoked over and over we don't recreate the Promise as it will cache it's resolved value and invoke the\n * `then` callback immediately. This allows subsequent calls to resolve immediately after the iFrame has finished loading.\n */\nfunction ensureFrameLoaded() {\n return Future.tryP<Error, void>(() => frameLoadedPromise);\n}\n\n/**\n * Type guard to check if returned message is an error message type\n * @param {ResponseMessage} response ResponseMessage instance to check\n */\nfunction isErrorResponse(response: ResponseMessage): response is ErrorResponse {\n return response.type === \"ERROR_RESPONSE\";\n}\n\n/**\n * Post the provided RequestMessage to the SDK frame. Returns a Future which will be resolved with the provided ResponseMessage type, or rejected with an SDKError\n */\nexport function sendMessage<T extends ResponseMessage>(payload: RequestMessage, transferList?: Uint8Array[]): Future<Error, T> {\n return ensureFrameLoaded()\n .flatMap(() => messenger.postMessageToFrame(payload, transferList))\n .flatMap((response) => {\n //Handle all error messages generically here. Convert the message details back into an error object and reject the Future\n if (isErrorResponse(response)) {\n return Future.reject(new SDKError(new Error(response.message.text), response.message.code));\n }\n return Future.of(response as T);\n });\n}\n","import {DocumentAccessList} from \"../../ironweb\";\nimport {ALLOWED_ID_CHAR_REGEX, CryptoConstants} from \"../Constants\";\nconst SECRET_KEY_LOCAL_STORAGE_VERSION = \"1\";\nlet hasInitializedSDK = false;\n\n/**\n * Generate parent window storage key that we'll use to store/retrieve the users symmetric key to decrypt their device/signing keys\n */\nfunction generateParentStorageKey() {\n return `${SECRET_KEY_LOCAL_STORAGE_VERSION}-icldassk`;\n}\n\n/**\n * Mark SDK initialization as complete to allow SDK methods to be run\n */\nexport function setSDKInitialized() {\n hasInitializedSDK = true;\n}\n\n/**\n * Set init complete flag to false. Used when the current user is deauthorized.\n */\nexport function clearSDKInitialized() {\n hasInitializedSDK = false;\n}\n\n/**\n * Throws an exception if the SDK is currently not initialized. Used to gate access to SDK methods which require init to be run before use\n */\nexport function checkSDKInitialized() {\n if (!hasInitializedSDK) {\n throw new Error(\n 'SDK \"initialize()\" method has not yet been called or completed execution. SDK methods cannot be used until initialization is complete.'\n );\n }\n}\n\n/**\n * Set symmetric key for parent window in local storage, if provided\n * @param {string} symmetricKey Symmetric key to decrypt users local device/signing keys\n */\nexport function storeParentWindowSymmetricKey(symmetricKey?: string) {\n if (symmetricKey) {\n try {\n localStorage.setItem(generateParentStorageKey(), symmetricKey);\n } catch (e) {\n // This catch case does not need to return any error information because keys will persist within one session but users will have to reenter their password upon triggering of a new browser session.\n }\n }\n}\n\n/**\n * Retrieve users symmetric key to decrypt users local device/signing keys\n */\nexport function getParentWindowSymmetricKey() {\n try {\n return localStorage.getItem(generateParentStorageKey()) || undefined;\n } catch (e) {\n return undefined;\n }\n}\n\n/**\n * Clear out users local symmetric key for decrypting local device/signing keys\n */\nexport function clearParentWindowSymmetricKey() {\n try {\n localStorage.removeItem(generateParentStorageKey());\n } catch (e) {\n // This catch case does not need to return any error information because failuer to remove information from local storage will not cause any failure in SDK functionality.\n }\n}\n\n/**\n * Dedupe string values in an array. Currently expects array of strings which are case-insensitive\n * @param {string[]} list List of strings to dedupe\n * @param {boolean} clearEmptyValues Whether we should also filter out all falsy values from the array\n */\nexport function dedupeArray(list: string[], clearEmptyValues = false) {\n const seenList: {[key: string]: boolean} = {};\n\n return list.filter((item) => {\n if (seenList[item] || (clearEmptyValues && !item.length)) {\n return false;\n }\n seenList[item] = true;\n return true;\n });\n}\n\n/**\n * Validates that either an owner was specified or addAsAdmin is true allowing the creator to be the default owner.\n * An error will be returned if no owner is specified and the group creator is not going to be an admin.\n */\nexport function validateOwnership(addAsAdmin?: boolean, maybeOwner?: string) {\n if (!maybeOwner && addAsAdmin === false) {\n throw new Error(`Failed to create group because group ownership must be held by a group administrator`);\n }\n}\n\n/**\n * Validate that the provided document ID is a string and has a length\n */\nexport function validateID(id: string) {\n if (typeof id !== \"string\" || !id.length) {\n throw new Error(`Invalid ID provided. Expected a non-zero length string but got ${id}`);\n }\n if (!ALLOWED_ID_CHAR_REGEX.test(id)) {\n throw new Error(`Invalid ID provided. Provided value includes invalid characters: '${id}'.`);\n }\n}\n\n/**\n * Validate that the provided raw document data is a proper byte array\n */\nexport function validateDocumentData(data: Uint8Array) {\n if (!(data instanceof Uint8Array) || !data.length) {\n throw new Error(`Invalid document data format provided. Expected a Uint8Array.`);\n }\n}\n\n/**\n * Validate that the provided encrypted document is in the proper form, which should be a Uint8Array of the document content and the AES IV prepended.\n * Therefore validate the length is at least 1 more than the IV length.\n */\nexport function validateEncryptedDocument(documentData: Uint8Array) {\n if (!(documentData instanceof Uint8Array)) {\n throw new Error(\"Invalid encrypted document content. Content should be a Uint8Array.\");\n }\n\n if (documentData.byteLength < CryptoConstants.IV_LENGTH + 1) {\n throw new Error(`Invalid encrypted document content. Length of content does not meet minimum requirements.`);\n }\n}\n\n/**\n * Validate that the provided encrypted document is in the proper form, which should be a Uint8Array and be non empty.\n */\nexport function validateEncryptedDeks(edeks: Uint8Array) {\n if (!(edeks instanceof Uint8Array)) {\n throw new Error(\"Invalid encrypted deks. Edeks should be a Uint8Array.\");\n }\n\n if (edeks.byteLength <= 0) {\n throw new Error(`Invalid encrypted deks. Length does not meet minimum requirements.`);\n }\n}\n\n/**\n * Validate that the provided list of access IDs is valid\n */\nexport function validateAccessList(accessList: DocumentAccessList) {\n const isUserListSet = accessList && Array.isArray(accessList.users) && accessList.users.length;\n const isGroupListSet = accessList && Array.isArray(accessList.groups) && accessList.groups.length;\n\n if (!isUserListSet && !isGroupListSet) {\n throw new Error(\"You must provide a list of users or groups with which to change document access.\");\n }\n}\n\n/**\n * Validate a list of IDs. Only used for validating group member edit at this point\n */\nexport function validateIDList(userList: string[]) {\n if (!Array.isArray(userList) || !userList.length) {\n throw new Error(\"You must provide a list of users to perform this operation.\");\n }\n}\n\n/**\n * Take a document access/revoke list and normalize/dedupe the arrays providing back validated defaults for both\n * @param {DocumentAccessList} accessList Input to SDK of access list\n */\nexport function dedupeAccessLists(accessList: DocumentAccessList) {\n let userAccess: string[] = [];\n let groupAccess: string[] = [];\n if (accessList.users && accessList.users.length) {\n userAccess = dedupeArray(accessList.users.map(({id}) => id), true);\n }\n if (accessList.groups && accessList.groups.length) {\n groupAccess = dedupeArray(accessList.groups.map(({id}) => id), true);\n }\n return [userAccess, groupAccess];\n}\n","import Future from \"futurejs\";\nimport {DeviceKeys, SDKInitializationResult, UserCreateResponse} from \"ironweb\";\nimport {ErrorCodes} from \"../Constants\";\nimport {\n CreateDetachedUserDeviceRequest,\n CreateDetachedUserDeviceResponse,\n CreateUserAndDeviceRequest,\n CreateUserRequest,\n CreateUserResponse,\n DeleteDeviceBySigningKeyJwt,\n DeleteDeviceResponse,\n GenerateNewDeviceKeysRequest,\n InitApiPasscodeResponse,\n InitApiRequest,\n InitApiSdkResponse,\n} from \"../FrameMessageTypes\";\nimport SDKError from \"../lib/SDKError\";\nimport * as FrameMediator from \"./FrameMediator\";\nimport {getParentWindowSymmetricKey, setSDKInitialized, storeParentWindowSymmetricKey} from \"./ShimUtils\";\n\n//Store reference to the JWT callback in case we need to invoke it again to create user\nlet userJWTCallback: JWTCallbackToPromise;\n\n/**\n * Retrieve the users JWT token and validate the result\n * @param {CallbackToPromise} jwtCallback Method that can be used to retrieve the JWT\n */\nfunction getJWT(jwtCallback: JWTCallbackToPromise): Future<Error, string> {\n return Future.tryP(() => {\n const jwtPromise = jwtCallback();\n if (jwtPromise && typeof jwtPromise.then === \"function\") {\n return jwtPromise;\n }\n throw new SDKError(new Error(\"JWT callback did not return a Promise.\"), ErrorCodes.JWT_FORMAT_FAILURE);\n }).flatMap((jwt: string) => {\n if (typeof jwt === \"string\" && jwt.length > 0) {\n return Future.of(jwt);\n }\n return Future.reject(new SDKError(new Error(`JWT should be a non-zero length string, but instead got '${jwt}'`), ErrorCodes.JWT_RETRIEVAL_FAILURE));\n });\n}\n\n/**\n * Invoke the users passcode callback method. Verifies that we got what looks to be a Promise back from the callback and also verifies that when it resolves\n * we got a non-zero length string as the passcode.\n * @param {PasscodeCallbackToPromise} passcodeCallback User provided passcode callback\n * @param {boolean} doesUserExist Whether the user exists within the IronCore system and we're going to do a new user create or we're adding a new device\n */\nfunction invokePasscodeCallback(passcodeCallback: PasscodeCallbackToPromise, doesUserExist: boolean) {\n return Future.tryP(() => {\n const passcodePromise = passcodeCallback(doesUserExist);\n if (passcodePromise && typeof passcodePromise.then === \"function\") {\n return passcodePromise;\n }\n throw new SDKError(new Error(\"Passcode callback did not return a Promise.\"), ErrorCodes.PASSCODE_FORMAT_FAILURE);\n }).flatMap((passcode: string) => {\n if (typeof passcode === \"string\" && passcode.length > 0) {\n return Future.of(passcode);\n }\n return Future.reject(\n new SDKError(\n new Error(`User provided passcode should be a non-zero length string, but instead got '${passcode}'`),\n ErrorCodes.PASSCODE_RETRIEVAL_FAILURE\n )\n );\n });\n}\n\n/**\n * Handle users passcode entry and either create them as new user or add a new set of device keys for them\n * @param {boolean} doesUserExist Denotes whether we need to create or update this user\n * @param {string} passcode Users passcode entry\n */\nfunction setUserPasscode(doesUserExist: boolean, passcode: string): Future<Error, SDKInitializationResult> {\n return getJWT(userJWTCallback)\n .flatMap((jwtToken) => {\n const payload = {\n type: doesUserExist ? \"GEN_DEVICE_KEYS\" : \"CREATE_USER_AND_DEVICE\",\n message: {passcode, jwtToken},\n };\n return FrameMediator.sendMessage<InitApiSdkResponse>(payload as GenerateNewDeviceKeysRequest | CreateUserAndDeviceRequest);\n })\n .map((sdkResponse: InitApiSdkResponse) => {\n storeParentWindowSymmetricKey(sdkResponse.message.symmetricKey);\n setSDKInitialized();\n return {user: sdkResponse.message.user, groupsNeedingRotation: sdkResponse.message.groupsNeedingRotation};\n });\n}\n\n/**\n * Create a new user using a JWT callback. Returns the created user's info if successful.\n */\nexport const createNewUser = (jwtCallback: JWTCallbackToPromise, passcode: string, needsRotation = false): Promise<UserCreateResponse> =>\n getJWT(jwtCallback)\n .flatMap((jwtToken) => {\n const payload: CreateUserRequest = {type: \"CREATE_USER\", message: {passcode, jwtToken, needsRotation}};\n return FrameMediator.sendMessage<CreateUserResponse>(payload);\n })\n //Rename a few fields and strip out the users private key and currentKeyId since they'll probably be confusing that they're getting back an encrypted private key\n //eslint-disable-next-line @typescript-eslint/no-unused-vars\n .map(({message: {id, segmentId, needsRotation, status, userMasterPublicKey}}) => ({\n accountID: id,\n segmentID: segmentId,\n needsRotation,\n status,\n userMasterPublicKey,\n }))\n .toPromise();\n\n/**\n * Create a set of device keys that aren't stored in the browser and are returned to the caller.\n */\nexport const createUserDeviceKeys = (jwtCallback: JWTCallbackToPromise, passcode: string): Promise<DeviceKeys> =>\n getJWT(jwtCallback)\n .flatMap((jwtToken) => {\n const payload: CreateDetachedUserDeviceRequest = {type: \"CREATE_DETATCHED_USER_DEVICE\", message: {passcode, jwtToken}};\n return FrameMediator.sendMessage<CreateDetachedUserDeviceResponse>(payload);\n })\n .map(({message}) => message)\n .toPromise();\n\n/**\n * Initialize the API by getting a JWT and verifying the user. Returns either the SDK if the user has their set of\n * device keys, or returns asking for passcode if user needs to be created/updated.\n * @param {JWTCallbackToPromise} jwtCallback Method that can be used to retrieve the JWT\n * @param {PasscodeCallbackToPromise} passcodeCallback Method that can be used to get the users escrow passcode\n */\nexport function initialize(jwtCallback: JWTCallbackToPromise, passcodeCallback: PasscodeCallbackToPromise): Promise<SDKInitializationResult> {\n userJWTCallback = jwtCallback;\n return getJWT(jwtCallback)\n .flatMap((jwtToken) => {\n const payload: InitApiRequest = {\n type: \"INIT_SDK\",\n message: {\n jwtToken,\n symmetricKey: getParentWindowSymmetricKey(),\n },\n };\n return FrameMediator.sendMessage<InitApiPasscodeResponse | InitApiSdkResponse>(payload);\n })\n .flatMap((responsePayload) => {\n if (responsePayload.type === \"INIT_PASSCODE_REQUIRED\") {\n return invokePasscodeCallback(passcodeCallback, responsePayload.message.doesUserExist).flatMap((passcode: string) =>\n setUserPasscode(responsePayload.message.doesUserExist, passcode)\n );\n }\n storeParentWindowSymmetricKey(responsePayload.message.symmetricKey);\n setSDKInitialized();\n return Future.of<SDKInitializationResult>({\n user: responsePayload.message.user,\n groupsNeedingRotation: responsePayload.message.groupsNeedingRotation,\n });\n })\n .toPromise();\n}\n\n/**\n * Deletes a device by its public signing key. Uses JWT auth, so it doesn't require an initialized SDK.\n * @param {Base64String} publicSigningKey The public signing key of the device to delete.\n */\nexport const deleteDeviceByPublicSigningKey = (jwtCallback: JWTCallbackToPromise, publicSigningKey: Base64String): Promise<number> =>\n getJWT(jwtCallback)\n .flatMap((jwtToken) => {\n const payload: DeleteDeviceBySigningKeyJwt = {\n type: \"DELETE_DEVICE_BY_SIGNING_KEY_JWT\",\n message: {\n jwtToken,\n publicSigningKey,\n },\n };\n return FrameMediator.sendMessage<DeleteDeviceResponse>(payload).map(({message}) => message);\n })\n .toPromise();\n","import {encode, decode} from \"@stablelib/utf8\";\nimport {fromByteArray, toByteArray} from \"base64-js\";\n\nexport const utf8 = {\n /**\n * Convert a byte array into a UTF-8 string sequence. This operation will throw an exception if the bytes provided are not valid UTF-8.\n * @param {Uint8Array} bytes Array of bytes to convert into UTF-8\n */\n fromBytes(bytes: Uint8Array) {\n return decode(bytes);\n },\n\n /**\n * Convert a valid UTF-8 string into an array of bytes. This operation will throw an exception if the string provided is not valid UTF-8.\n * @param {string} utf8String UTF-8 string to convert into bytes\n */\n toBytes(utf8String: string) {\n return encode(utf8String);\n },\n};\n\nexport const base64 = {\n /**\n * Convert a byte array into a Base64 encoded string.\n * @param {Uint8Array} bytes Array of bytes to convert into Base64\n */\n fromBytes(bytes: Uint8Array) {\n return fromByteArray(bytes);\n },\n\n /**\n * Convert a valid Base64 string into an array of bytes. This operation will throw an exception if the string provided is not valid Base64.\n * @param {string} base64String Base64 string to convert into bytes\n */\n toBytes(base64String: string) {\n return toByteArray(base64String);\n },\n};\n","import Future from \"futurejs\";\nimport {\n DecryptedUnmanagedDocumentResponse,\n DocumentAccessList,\n DocumentCreateOptions,\n EncryptedDocumentResponse,\n EncryptedUnmanagedDocumentResponse,\n} from \"../../../ironweb\";\nimport {ErrorCodes, HEADER_META_LENGTH_LENGTH, VERSION_HEADER_LENGTH} from \"../../Constants\";\nimport * as MT from \"../../FrameMessageTypes\";\nimport SDKError from \"../../lib/SDKError\";\nimport * as FrameMediator from \"../FrameMediator\";\nimport * as ShimUtils from \"../ShimUtils\";\nimport {utf8} from \"./CodecSDK\";\n\nconst MAX_DOCUMENT_SIZE = 1024 * 2 * 1000; //2MB\n\n/**\n * Takes the document encrypt options object and normalizes it to a complete object with proper default values.\n * @param {DocumentCreateOptions} options Options user passed in for document create operation\n * @return {DocumentCreateOptions} Document create options object with properly filled out fields\n */\nfunction calculateDocumentCreateOptionsDefault(options?: DocumentCreateOptions) {\n //Generate a random ID for the document if the user didn't provide one\n const randomBytes = window.crypto.getRandomValues(new Uint8Array(16));\n const hexID = Array.prototype.map.call(randomBytes, (byte: number) => `00${byte.toString(16)}`.slice(-2)).join(\"\");\n if (!options) {\n return {documentID: hexID, documentName: \"\", accessList: {users: [], groups: [], grantToAuthor: true}};\n }\n return {\n documentID: options.documentID || hexID,\n documentName: options.documentName || \"\",\n accessList: {\n users: options.accessList && options.accessList.users ? options.accessList.users : [],\n groups: options.accessList && options.accessList.groups ? options.accessList.groups : [],\n grantToAuthor: options.grantToAuthor !== false,\n },\n policy: options.policy,\n };\n}\n\n/**\n * Returns the list of documents that the current user has access to decrypt. Only document metadata is returned, not any document content.\n * This list will include documents the user authored as well as documents that were granted access to the current user, either by another user or a group.\n */\nexport function list() {\n ShimUtils.checkSDKInitialized();\n return FrameMediator.sendMessage<MT.DocumentListResponse>({type: \"DOCUMENT_LIST\"})\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Get metadata about a document regardless of where the document content is stored. Returns a Promise which will be resolved with the document metadata.\n * @param {string} documentID ID of the document metadata to retrieve\n */\nexport function getMetadata(documentID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n const payload: MT.DocumentMetaGetRequest = {\n type: \"DOCUMENT_META_GET\",\n message: {documentID},\n };\n return FrameMediator.sendMessage<MT.DocumentMetaGetResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Attempt to parse the document ID from an encrypted document header. Returns the document ID as a string or null if the provided encrypted\n * document doesn't have an embedded ID.\n * @param {Uint8Array} documentData Encrypted document in byte array form\n */\nexport function getDocumentIDFromBytes(documentData: Uint8Array): Promise<string | null> {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateEncryptedDocument(documentData);\n\n //Version 1 document, we don't have the document ID as it's not encoded in the header\n if (documentData[0] === 1) {\n return Promise.resolve(null);\n }\n //Check to see if the document is a version we don't support and reject if so\n if (documentData[0] !== 2) {\n return Promise.reject(\n new SDKError(new Error(\"Provided encrypted document doesn't appear to be valid. Invalid version.\"), ErrorCodes.DOCUMENT_HEADER_PARSE_FAILURE)\n );\n }\n const headerLength = new DataView(documentData.buffer).getUint16(documentData.byteOffset + VERSION_HEADER_LENGTH, false);\n const headerContent = documentData.slice(\n VERSION_HEADER_LENGTH + HEADER_META_LENGTH_LENGTH,\n VERSION_HEADER_LENGTH + HEADER_META_LENGTH_LENGTH + headerLength\n );\n try {\n const headerObject: DocumentHeader = JSON.parse(utf8.fromBytes(headerContent));\n return Promise.resolve(headerObject._did_);\n } catch {\n return Promise.reject(new SDKError(new Error(\"Unable to parse document header. Header value is corrupted.\"), ErrorCodes.DOCUMENT_HEADER_PARSE_FAILURE));\n }\n}\n\n/**\n * @deprecated Use `decrypt` instead.\n * Retrieve and decrypt a document from the document store. Returns a Promise which will be resolved once the document has been retrieved and decrypted.\n * @param {string} documentID ID of the document to retrieve\n */\nexport function decryptFromStore(documentID: string) {\n console.warn(\"decryptFromStore is deprecated. Use decrypt instead.\");\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n const payload: MT.DocumentStoreDecryptRequest = {\n type: \"DOCUMENT_STORE_DECRYPT\",\n message: {\n documentID,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentStoreDecryptResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Decrypt the provided document given the ID of the document and its data. Returns a Promise which will be resolved once the document has been successfully decrypted.\n * @param {string} documentID Unique ID of document to decrypt\n * @param {Uint8Array} documentData Document data to decrypt\n */\nexport function decrypt(documentID: string, documentData: Uint8Array) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateEncryptedDocument(documentData);\n const payload: MT.DocumentDecryptRequest = {\n type: \"DOCUMENT_DECRYPT\",\n message: {\n documentID,\n documentData: documentData.slice(),\n },\n };\n return FrameMediator.sendMessage<MT.DocumentDecryptResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * @deprecated Use `encrypt` instead and manage storage of the result yourself.\n * Creates a new encrypted document within the store. Returns a Promise which will be resolved once the data has been fully encrypted and saved.\n * @param {Uint8Array} documentData Data to save for document\n * @param {DocumentCreateOptions} options Document create options. Includes:\n * documentID: string - Optional ID to use for the document. Document ID will be stored unencrypted and must be unique per segment\n * documentName: string - Optional name to provide to document. Document name will be stored unencrypted.\n * accessList: object - Optional object which allows document to be shared with others upon creation. There is no need to add the\n * document creators ID to this list as that will happen automatically. Contains the following keys:\n * users: Array - List of user IDs to share document with. Each value in the array should be in the form {id: string}.\n * groups: Array - List of group IDs to share document with. Each value in the array should be in the form {id: string}.\n * grantToAuthor: boolean - Should the create grant access to the logged in user. Defaults to true.\n */\nexport function encryptToStore(documentData: Uint8Array, options?: DocumentCreateOptions) {\n console.warn(\"encryptToStore is deprecated. Use encrypt instead and manage storage of the result yourself.\");\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateDocumentData(documentData);\n if (documentData.length > MAX_DOCUMENT_SIZE) {\n return Promise.reject(\n new SDKError(\n new Error(`Document of length ${documentData.length} exceeds maximum allowed byte size of ${MAX_DOCUMENT_SIZE}`),\n ErrorCodes.DOCUMENT_MAX_SIZE_EXCEEDED\n )\n );\n }\n const encryptOptions = calculateDocumentCreateOptionsDefault(options);\n if (encryptOptions.documentID) {\n ShimUtils.validateID(encryptOptions.documentID);\n }\n const [userGrants, groupGrants] = ShimUtils.dedupeAccessLists(encryptOptions.accessList);\n const payload: MT.DocumentStoreEncryptRequest = {\n type: \"DOCUMENT_STORE_ENCRYPT\",\n message: {\n documentID: encryptOptions.documentID,\n documentData: documentData.slice(),\n documentName: encryptOptions.documentName,\n userGrants,\n groupGrants,\n grantToAuthor: encryptOptions.accessList.grantToAuthor,\n policy: encryptOptions.policy,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentStoreEncryptResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Encrypt the provided document. Returns a Promise which will be resolved once the content has been encrypted.\n * @param {string} documentData Contents of document to encrypt\n * @param {DocumentCreateOptions} options Document create options. Includes:\n * documentID: string - Optional ID to use for the document. Document ID will be stored unencrypted and must be unique per segment\n * documentName: string - Optional name to provide to document. Document name will be stored unencrypted.\n * accessList: object - Optional object which allows document to be shared with others upon creation. Contains the following keys:\n * users: Array - List of user IDs to share document with. Each value in the array should be in the form {id: string}.\n * groups: Array - List of group IDs to share document with. Each value in the array should be in the form {id: string}.\n * grantToAuthor: boolean - Should the create grant access to the logged in user. Defaults to true.\n * policy: Policy - The policy (or data label) to be applied to this data. This policy will be applied to get users and groups\n * to share with in addition to the ones being explicitly granted access.\n */\nexport function encrypt(documentData: Uint8Array, options?: DocumentCreateOptions): Promise<EncryptedDocumentResponse> {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateDocumentData(documentData);\n const encryptOptions = calculateDocumentCreateOptionsDefault(options);\n if (encryptOptions.documentID) {\n ShimUtils.validateID(encryptOptions.documentID);\n }\n const [userGrants, groupGrants] = ShimUtils.dedupeAccessLists(encryptOptions.accessList);\n const payload: MT.DocumentEncryptRequest = {\n type: \"DOCUMENT_ENCRYPT\",\n message: {\n documentData: documentData.slice(),\n documentID: encryptOptions.documentID,\n documentName: encryptOptions.documentName,\n userGrants,\n groupGrants,\n grantToAuthor: encryptOptions.accessList.grantToAuthor,\n policy: encryptOptions.policy,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentEncryptResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Update an existing documents data in the store. Returns a Promise which will be resolved once the document has been successfully updated in the store.\n * @deprecated Use `updateEncryptedData` instead and manage storage of the result yourself.\n * @param {string} documentID ID of document to update. Promise will reject if document does not exist\n * @param {Uint8Array} newDocumentData New content to encrypt and save for document\n */\nexport function updateEncryptedDataInStore(documentID: string, newDocumentData: Uint8Array) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateDocumentData(newDocumentData);\n\n if (newDocumentData.length > MAX_DOCUMENT_SIZE) {\n return Promise.reject(\n new SDKError(\n new Error(`Document of length ${newDocumentData.length} exceeds maximum allowed byte size of ${MAX_DOCUMENT_SIZE}`),\n ErrorCodes.DOCUMENT_MAX_SIZE_EXCEEDED\n )\n );\n }\n\n const payload: MT.DocumentStoreUpdateDataRequest = {\n type: \"DOCUMENT_STORE_UPDATE_DATA\",\n message: {\n documentID,\n documentData: newDocumentData.slice(),\n },\n };\n return FrameMediator.sendMessage<MT.DocumentStoreUpdateDataResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Update and re-encrypt a document that already exists. Returns a Promise which will be resolved once the new data has been encrypted.\n * @param {string} documentID Unique ID of document to update\n * @param {Uint8Array} newDocumentData New content to encrypt for document\n */\nexport function updateEncryptedData(documentID: string, newDocumentData: Uint8Array): Promise<EncryptedDocumentResponse> {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateDocumentData(newDocumentData);\n const payload: MT.DocumentUpdateDataRequest = {\n type: \"DOCUMENT_UPDATE_DATA\",\n message: {\n documentID,\n documentData: newDocumentData.slice(),\n },\n };\n return FrameMediator.sendMessage<MT.DocumentUpdateDataResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Update a document name to a new value. Can also be used to clear the name field for an existing document by passing in null or an empty string for the name parameter.\n * @param {string} documentID Unique ID of the document to update\n * @param {string|null} name Name to update. Send in null/empty string to clear a documents name field.\n */\nexport function updateName(documentID: string, name: string | null) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n const payload: MT.DocumentUpdateNameRequest = {\n type: \"DOCUMENT_UPDATE_NAME\",\n message: {\n documentID,\n name: name === \"\" ? null : name,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentUpdateNameResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Provides access to the provided list of users and groups to the provided document ID. Returns a Promise which will be resolved\n * once access to the document has been granted to all users/groups provided.\n * @param {string} documentID Unique ID of document to grant access\n * @param {DocumentAccessList} accessList List of IDs (user IDs, group IDs) with which to grant document access\n */\nexport function grantAccess(documentID: string, grantList: DocumentAccessList) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateAccessList(grantList);\n\n const [userGrants, groupGrants] = ShimUtils.dedupeAccessLists(grantList);\n const payload: MT.DocumentGrantRequest = {\n type: \"DOCUMENT_GRANT\",\n message: {\n documentID,\n userGrants,\n groupGrants,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentGrantResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Revoke access to a document from the provided list of user and/or group IDs. There are limitations on who is able to revoke document access. Document\n * authors can revoke access from any other user or group. Other users can revoke access that they created to other users or groups.\n * @param {string} documentID Unique ID of document to revoke access\n * @param {DocumentAccessList} revokeList List of IDs (user IDs and/or groupIDs) from which to revoke access\n */\nexport function revokeAccess(documentID: string, revokeList: DocumentAccessList) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateAccessList(revokeList);\n\n const [userRevocations, groupRevocations] = ShimUtils.dedupeAccessLists(revokeList);\n const payload: MT.DocumentRevokeRequest = {\n type: \"DOCUMENT_REVOKE\",\n message: {\n documentID,\n userRevocations,\n groupRevocations,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentRevokeResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * A collection of methods for advanced encryption/decryption use cases. Currently focused on methods which require the caller to manage the encrypted\n * DEKs.\n */\nexport const advanced = {\n /**\n * Decrypt the provided document given the edeks of the document and its data. Returns a Promise which will be resolved once the document has been successfully decrypted.\n * @param {Uint8Array} documentData Document data to decrypt\n * @param {Uint8Array} edeks The encrypted deks for the documentData.\n */\n decryptUnmanaged: (documentData: Uint8Array, edeks: Uint8Array): Promise<DecryptedUnmanagedDocumentResponse> => {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateEncryptedDeks(edeks);\n ShimUtils.validateEncryptedDocument(documentData);\n return Future.tryP(() => getDocumentIDFromBytes(documentData))\n .flatMap((documentId) => {\n const payload: MT.DocumentUnmanagedDecryptRequest = {\n type: \"DOCUMENT_UNMANAGED_DECRYPT\",\n message: {\n edeks,\n documentData: documentData.slice(),\n },\n };\n return FrameMediator.sendMessage<MT.DocumentUnmanagedDecryptResponse>(payload, [payload.message.documentData]).map(({message}) => ({\n data: message.data,\n //There is no way to create a version 1 document with unmanaged edeks so this is safe.\n documentID: documentId!,\n accessVia: message.accessVia,\n }));\n })\n .toPromise();\n },\n\n /**\n * Encrypt the provided document with various document create options. Does not store any part of the document within IronCore and instead returns\n * the encrypted DEKs to the caller. These encrypted DEKs must be then be provided as input in order to decrypt the document.\n * @param {Uint8Array} documentData Document data to encrypt\n * @param {DocumentCreateOptions} options Options when creating the document. Allows for encrypting to other users and groups among others.\n */\n encryptUnmanaged: (documentData: Uint8Array, options?: Omit<DocumentCreateOptions, \"documentName\">): Promise<EncryptedUnmanagedDocumentResponse> => {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateDocumentData(documentData);\n const encryptOptions = calculateDocumentCreateOptionsDefault(options);\n if (encryptOptions.documentID) {\n ShimUtils.validateID(encryptOptions.documentID);\n }\n const [userGrants, groupGrants] = ShimUtils.dedupeAccessLists(encryptOptions.accessList);\n const payload: MT.DocumentUnmanagedEncryptRequest = {\n type: \"DOCUMENT_UNMANAGED_ENCRYPT\",\n message: {\n documentData: documentData.slice(),\n documentID: encryptOptions.documentID,\n userGrants,\n groupGrants,\n grantToAuthor: encryptOptions.accessList.grantToAuthor,\n policy: encryptOptions.policy,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentUnmanagedEncryptResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n },\n};\n","import * as FrameMediator from \"../FrameMediator\";\nimport * as MT from \"../../FrameMessageTypes\";\nimport * as ShimUtils from \"../ShimUtils\";\nimport {GroupCreateOptions, GroupUpdateOptions} from \"../../../ironweb\";\n\n/**\n * List all groups that the current user is either an admin or member of.\n */\nexport function list() {\n ShimUtils.checkSDKInitialized();\n return FrameMediator.sendMessage<MT.GroupListResponse>({type: \"GROUP_LIST\"})\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Get details about a specific group given it's ID.\n * @param {string} groupID ID of group to retrieve\n */\nexport function get(groupID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n const payload: MT.GroupGetRequest = {\n type: \"GROUP_GET\",\n message: {\n groupID,\n },\n };\n return FrameMediator.sendMessage<MT.GroupGetResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Create a new group. Takes an options object which allow for specifying an optional, unencrypted ID and name for the group.\n * @param {GroupCreateOptions} options Group creation options\n */\nexport function create(options: GroupCreateOptions = {groupName: \"\", addAsMember: true, addAsAdmin: true, needsRotation: false}) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateOwnership(options.addAsAdmin, options.ownerUserId);\n if (options.groupID) {\n ShimUtils.validateID(options.groupID);\n }\n const payload: MT.GroupCreateRequest = {\n type: \"GROUP_CREATE\",\n message: {\n groupID: options.groupID || \"\",\n groupName: options.groupName || \"\",\n ownerUserId: options.ownerUserId,\n addAsMember: options.addAsMember !== false,\n addAsAdmin: options.addAsAdmin !== false,\n needsRotation: options.needsRotation === true,\n userLists: {\n memberList: options.memberList ? ShimUtils.dedupeArray(options.memberList, true) : [],\n adminList: options.adminList ? ShimUtils.dedupeArray(options.adminList, true) : [],\n },\n },\n };\n return FrameMediator.sendMessage<MT.GroupCreateResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n/**\n * Rotates the current group private key\n * @param {string} groupID ID of the group to have private key rotated.\n */\nexport function rotatePrivateKey(groupID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n\n const payload: MT.RotateGroupPrivateKey = {\n type: \"ROTATE_GROUP_PRIVATE_KEY\",\n message: {\n groupID,\n },\n };\n return FrameMediator.sendMessage<MT.RotateGroupPrivateKeyResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Update a group. Currently only supports updating the group name to a new value or clearing it out by passing in null.\n * @param {string} groupID ID of the group to update.\n * @param {GroupUpdateOptions} options Update options.\n */\nexport function update(groupID: string, options: GroupUpdateOptions) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n if (options.groupName === null || (typeof options.groupName === \"string\" && options.groupName.length)) {\n const payload: MT.GroupUpdateRequest = {\n type: \"GROUP_UPDATE\",\n message: {\n groupID,\n groupName: options.groupName,\n },\n };\n return FrameMediator.sendMessage<MT.GroupUpdateResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n }\n throw new Error(\"Group update must provide a new name which is either a non-zero length string or null.\");\n}\n\n/**\n * Add list of users as admins to an existing group.\n * @param {string} groupID ID of gropu to add admins to.\n * @param {string[]} userList List of user IDs to add as admins to the group\n */\nexport function addAdmins(groupID: string, userList: string[]) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n ShimUtils.validateIDList(userList);\n const payload: MT.GroupAddAdminRequest = {\n type: \"GROUP_ADD_ADMINS\",\n message: {\n groupID,\n userList: ShimUtils.dedupeArray(userList, true),\n },\n };\n return FrameMediator.sendMessage<MT.GroupAddAdminResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Remove list of users as admins from the provided Group ID. This operation can only be performed by an admin of the group. Also note\n * that the group creator cannot be removed as an admin from the group.\n * @param {string} groupID ID of the group to remove admins from\n * @param {string[]} userList List of users to remove as admins from the group\n */\nexport function removeAdmins(groupID: string, userList: string[]) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n ShimUtils.validateIDList(userList);\n const payload: MT.GroupRemoveAdminRequest = {\n type: \"GROUP_REMOVE_ADMINS\",\n message: {\n groupID,\n userList: ShimUtils.dedupeArray(userList, true),\n },\n };\n return FrameMediator.sendMessage<MT.GroupRemoveAdminResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Add list of users as members to an existing group. This operation can only be performed by an admin of the group.\n * @param {string} groupID ID of the group to add members to.\n * @param {string[]} userList List of user IDs to add as members to the group\n */\nexport function addMembers(groupID: string, userList: string[]) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n ShimUtils.validateIDList(userList);\n const payload: MT.GroupAddMemberRequest = {\n type: \"GROUP_ADD_MEMBERS\",\n message: {\n groupID,\n userList: ShimUtils.dedupeArray(userList, true),\n },\n };\n return FrameMediator.sendMessage<MT.GroupAddMemberResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Remove list of users as members from an existing group. This operation can only be performed by an admin of the group.\n * @param {string} groupID ID of the group to remove members from.\n * @param {string[]} userList List of user IDs to remove as members from the group.\n */\nexport function removeMembers(groupID: string, userList: string[]) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n ShimUtils.validateIDList(userList);\n const payload: MT.GroupRemoveMemberRequest = {\n type: \"GROUP_REMOVE_MEMBERS\",\n message: {\n groupID,\n userList: ShimUtils.dedupeArray(userList, true),\n },\n };\n return FrameMediator.sendMessage<MT.GroupRemoveMemberResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Remove the currently authenticated user as a member from the provided group.\n * @param {string} groupID ID of the group to remove the current user from.\n */\nexport function removeSelfAsMember(groupID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n const payload: MT.GroupRemoveSelfAsMemberRequest = {\n type: \"GROUP_REMOVE_SELF_AS_MEMBER\",\n message: {groupID},\n };\n return FrameMediator.sendMessage<MT.GroupRemoveMemberResponse>(payload)\n .map(() => undefined)\n .toPromise();\n}\n\n/**\n * Delete a group given its ID. WARNING: Deleting a group is permanment and will cause all documents that are encrypted only to the group\n * to be undecryptable.\n * @param {string} groupID ID of the group to delete\n */\nexport function deleteGroup(groupID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n const payload: MT.GroupDeleteRequest = {\n type: \"GROUP_DELETE\",\n message: {groupID},\n };\n return FrameMediator.sendMessage<MT.GroupDeleteResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n","import {BlindSearchIndex} from \"../../../ironweb\";\nimport * as MT from \"../../FrameMessageTypes\";\nimport * as FrameMediator from \"../FrameMediator\";\nimport * as ShimUtils from \"../ShimUtils\";\n\n/**\n * Class that is used to represent an initialized search index. Holds the search index ID (which is just a random ID used in the\n * frames decrypted salt in-memory cache) so it can pass that down to the frame when tokenizing data.\n */\nclass InitializedSearchIndex {\n private searchIndexId: string;\n constructor(searchIndexId: string) {\n this.searchIndexId = searchIndexId;\n }\n\n tokenizeData(data: string, partitionId?: string) {\n return FrameMediator.sendMessage<MT.BlindSearchIndexTokenizeDataResponse>({\n type: \"BLIND_SEARCH_INDEX_TOKENIZE_DATA\",\n message: {\n data,\n partitionId,\n searchIndexId: this.searchIndexId,\n },\n })\n .map(({message}) => message)\n .toPromise();\n }\n\n tokenizeQuery(query: string, partitionId?: string) {\n return FrameMediator.sendMessage<MT.BlindSearchIndexTokenizeDataResponse>({\n type: \"BLIND_SEARCH_INDEX_TOKENIZE_QUERY\",\n message: {\n query,\n partitionId,\n searchIndexId: this.searchIndexId,\n },\n })\n .map(({message}) => message)\n .toPromise();\n }\n}\n\n/**\n * Create a new blind search index and allow it to be decryptable by the provided group members. Creates and encrypts a new unmanaged\n * document which is returned to the caller to store.\n */\nexport const createBlindSearchIndex = (groupId: string): Promise<BlindSearchIndex> => {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupId);\n return FrameMediator.sendMessage<MT.BlindSearchIndexCreateResponse>({type: \"BLIND_SEARCH_INDEX_CREATE\", message: {groupId}})\n .map(({message}) => message)\n .toPromise();\n};\n\n/**\n * Initialize a blind search index using the fields returned from the createBlindSearchIndex method. Resolves with an instance of the\n * InitializedSearchIndex class which\n */\nexport const initializeBlindSearchIndex = (index: BlindSearchIndex): Promise<InitializedSearchIndex> => {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateDocumentData(index.searchIndexEncryptedSalt);\n ShimUtils.validateDocumentData(index.searchIndexEdeks);\n\n return FrameMediator.sendMessage<MT.BlindSearchIndexInitResponse>({type: \"BLIND_SEARCH_INDEX_INIT\", message: {...index}})\n .map(({message}) => new InitializedSearchIndex(message.searchIndexId))\n .toPromise();\n};\n\n/**\n * Transliterate the provided string by latinizing each character and removing all special characters.\n */\nexport const transliterateString = (string: string): Promise<string> => {\n return FrameMediator.sendMessage<MT.SearchTransliterateStringResponse>({type: \"SEARCH_TRANSLITERATE_STRING\", message: string})\n .map(({message}) => message)\n .toPromise();\n};\n","import {clearParentWindowSymmetricKey, checkSDKInitialized, clearSDKInitialized} from \"../ShimUtils\";\nimport * as FrameMediator from \"../FrameMediator\";\nimport * as MT from \"../../FrameMessageTypes\";\n\n/**\n * Update an existing users passcode that is used to escrow their private key. The returned Promise will resolve successfully upon passcode change or\n * will reject if the users current passcode was incorrect or could not be updated.\n * @param {string} currentPasscode The users current passcode\n * @param {string} newPasscode New passcode\n */\nexport function changePasscode(currentPasscode: string, newPasscode: string) {\n checkSDKInitialized();\n const payload: MT.ChangeUserPasscode = {\n type: \"CHANGE_USER_PASSCODE\",\n message: {currentPasscode, newPasscode},\n };\n return FrameMediator.sendMessage<MT.ChangeUserPasscodeResponse>(payload)\n .map(() => undefined)\n .toPromise();\n}\n\n/**\n * Rotates the user current private key.\n * @param {string} passcode The users current passcode\n */\nexport function rotateMasterKey(passcode: string) {\n checkSDKInitialized();\n const payload: MT.RotateUserPrivateKey = {\n type: \"ROTATE_USER_PRIVATE_KEY\",\n message: {passcode},\n };\n return FrameMediator.sendMessage<MT.RotateUserPrivateKeyResponse>(payload)\n .map(() => undefined)\n .toPromise();\n}\n\n/**\n * @deprecated Use deleteDevice with no arguments to get the same behavior.\n * Clears local device keys from the current browser instance. This will require the user to enter their passcode the next time they want to use this browser on this machine.\n * This method should usually be called whenever the current user logs out of your application.\n */\nexport const deauthorizeDevice = () => deleteDevice().then((deletedDevice) => ({transformKeyDeleted: deletedDevice > 0}));\n\n/**\n * Deletes a device. If deleting the current device, the user will have to enter their passcode the next time they want to use this browser on this machine.\n * This method should usually be called whenever the current user logs out of your application or you're aware a device of their's shouldn't have access.\n * @param {number | undefined} deviceId The device id to delete. If undefined, the current device will be deleted and local storage will be cleared.\n */\nexport const deleteDevice = (deviceId?: number) => {\n checkSDKInitialized();\n const deletingCurrentDevice = deviceId === undefined;\n const payload: MT.DeleteDevice = {\n type: \"DELETE_DEVICE\",\n message: deviceId,\n };\n // If current device, clear the local symmetric key from local storage, then send a request to clear the frames local storage.\n // Once that's complete clear the SDK init flag so that the user has to rerun init before the SDK methods will work again.\n if (deletingCurrentDevice) {\n clearParentWindowSymmetricKey();\n }\n return FrameMediator.sendMessage<MT.DeleteDeviceResponse>(payload)\n .map(({message}) => {\n if (deletingCurrentDevice) {\n clearSDKInitialized();\n }\n return message;\n })\n .toPromise();\n};\n\n/**\n * Deletes a device by its public signing key.\n * @param {Base64String} publicSigningKey The public signing key of the device to delete.\n */\nexport const deleteDeviceByPublicSigningKey = (publicSigningKey: Base64String) => {\n checkSDKInitialized();\n const payload: MT.DeleteDeviceBySigningKey = {\n type: \"DELETE_DEVICE_BY_SIGNING_KEY\",\n message: publicSigningKey,\n };\n return FrameMediator.sendMessage<MT.DeleteDeviceResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n};\n\n/**\n * Lists all the devices for the currently logged in user.\n */\nexport const listDevices = () => {\n checkSDKInitialized();\n const payload: MT.ListDevices = {\n type: \"LIST_DEVICES\",\n message: null,\n };\n return FrameMediator.sendMessage<MT.ListDevicesResponse>(payload)\n .map(({message: result}) => result)\n .toPromise();\n};\n","import * as IronWeb from \"../../ironweb\";\nimport * as CodecSDK from \"./sdk/CodecSDK\";\nimport * as DocumentSDK from \"./sdk/DocumentSDK\";\nimport * as GroupSDK from \"./sdk/GroupSDK\";\nimport * as SearchSDK from \"./sdk/SearchSDK\";\nimport * as UserSDK from \"./sdk/UserSDK\";\n\n// https://github.com/Microsoft/TypeScript/issues/420\n// whenever this lands in TS we can get stronger compiler checking of our API <-> API Interface definition.\nexport const document: IronWeb.Document = DocumentSDK;\nexport const user: IronWeb.User = UserSDK;\nexport const group: IronWeb.Group = GroupSDK;\nexport const search: IronWeb.Search = SearchSDK;\nexport const codec: IronWeb.Codec = CodecSDK;\n","import {SDKInitializationResult, UserCreateResponse, UserCreateOptions, DeviceKeys} from \"../../ironweb\";\nimport {ErrorCodes} from \"../Constants\";\nimport SDKError from \"../lib/SDKError\";\nimport * as Init from \"./Initialize\";\nimport {checkSDKInitialized} from \"./ShimUtils\";\nexport {deleteDeviceByPublicSigningKey} from \"./Initialize\";\n\n/**\n * Checks bowser functionality to ensure random number generation is supported.\n */\nfunction supportsRandomNumGen() {\n const nativeCrypto: Crypto = window.crypto;\n return typeof nativeCrypto === \"object\" && typeof nativeCrypto.getRandomValues === \"function\";\n}\n\n/**\n * Determine if this browser supports WebAssembly so we know which Recrypt module to load.\n */\nfunction isWebAssemblySupported() {\n return typeof WebAssembly === \"object\" && WebAssembly && typeof WebAssembly.instantiate === \"function\";\n}\n\n/**\n * Failed Promise for when the users browser doesn't support WebAssembly (IE11 or lower)\n */\nconst webAssemblyFailure = () =>\n Promise.reject(new SDKError(new Error(\"Request failed due to a lack of browser support for WebAssembly.\"), ErrorCodes.WEBASSEMBLY_SUPPORT_FAILURE));\n\n/**\n * Failed Promise for when the users browser can't generate random numbers\n */\nconst randomGenFailure = () =>\n Promise.reject(\n new SDKError(new Error(\"Request failed due to a lack of browser support for random number generation.\"), ErrorCodes.RANDOM_NUMBER_GENERATION_FAILURE)\n );\n\n/**\n * Create a new user from the given JWT callback and passcode. Doesn't create any devices for the new user, and doesn't initialize the SDK.\n * @param {UserCreateOptions}\n */\nexport function createNewUser(\n jwtCallback: JWTCallbackToPromise,\n passcode: string,\n options: UserCreateOptions = {needsRotation: false}\n): Promise<UserCreateResponse> {\n if (!jwtCallback || typeof jwtCallback !== \"function\") {\n throw new Error(\"You must provide a function which will generate a JWT as the first parameter to 'IronWeb.createNewUser'.\");\n }\n if (!supportsRandomNumGen()) {\n return randomGenFailure();\n }\n if (!isWebAssemblySupported()) {\n return webAssemblyFailure();\n }\n return Init.createNewUser(jwtCallback, passcode, options.needsRotation || false);\n}\n\n/**\n * Create a detached set of device keys for an existing user. These keys will not be stored in the browser and will just be returned\n * to the caller to use however they would like.\n */\nexport function createNewDeviceKeys(jwtCallback: JWTCallbackToPromise, passcode: string): Promise<DeviceKeys> {\n if (!jwtCallback || typeof jwtCallback !== \"function\") {\n throw new Error(\"You must provide a function which will generate a JWT as the first parameter to 'IronWeb.createNewUser'.\");\n }\n if (!supportsRandomNumGen()) {\n return randomGenFailure();\n }\n if (!isWebAssemblySupported()) {\n return webAssemblyFailure();\n }\n return Init.createUserDeviceKeys(jwtCallback, passcode);\n}\n\n/**\n * Initialize IronWeb SDK with JWT and Passcode callbacks. This will request the verify API (using the JWT token retrieved from the provided JWT callback) to check if\n * the user exists or not. The Promise this returns will be resolved with the IronWeb SDK object.\n */\nexport function initialize(jwtCallback: JWTCallbackToPromise, passcodeCallback: PasscodeCallbackToPromise): Promise<SDKInitializationResult> {\n if (!jwtCallback || typeof jwtCallback !== \"function\") {\n throw new Error(\"You must provide a function which will generate a JWT as the first parameter to 'IronWeb.initialize'.\");\n }\n if (!passcodeCallback || typeof passcodeCallback !== \"function\") {\n throw new Error(\"You must provide a function which will generate the users escrow passcode as the second parameter to 'IronWeb.initialize'.\");\n }\n if (!supportsRandomNumGen()) {\n return randomGenFailure();\n }\n if (!isWebAssemblySupported()) {\n return webAssemblyFailure();\n }\n return Init.initialize(jwtCallback, passcodeCallback);\n}\n\n/**\n * Method to determine if the SDK has been initialized and the user/document/group methods are able to be invoked\n */\nexport function isInitialized() {\n try {\n checkSDKInitialized();\n return true;\n } catch (_) {\n return false;\n }\n}\n\n/*\n * Export all SDK methods at the top level\n */\n/**\n * List of SDK Error Codes\n */\nexport {ErrorCodes} from \"../Constants\";\n/**\n * SDK Error which extends normal Error object but adds `code` property which will be one of the ErrorCodes from above\n */\nexport {default as SDKError} from \"../lib/SDKError\";\nexport * from \"./SDK\";\n"],"names":["root","factory","exports","module","define","amd","self","INVALID_UTF16","INVALID_UTF8","encodedLength","s","result","i","length","c","charCodeAt","Error","arr","Uint8Array","pos","chars","b","min","n1","n2","n3","push","String","fromCharCode","join","b64","tmp","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","len","revLookup","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","Array","code","indexOf","start","end","num","output","Future","action","this","prototype","engage","reject","resolve","error","then","toPromise","_this","Promise","map","mapper","flatMap","x","of","next","data","handleWith","errHandler","errorMap","tryF","fn","e","tryP","promiseResult","_","encase","a","gather2","future1","future2","results","count","done","gather3","future3","firstTwo","_a","_b","gather4","future4","secondTwo","f1","f2","_c","all","futures","isArray","allArray","allObject","forEach","futureInstance","index","futureKeys","Object","keys","futuresArray","key","futureResults","reduce","futureMap","futureKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","o","defineProperty","enumerable","get","obj","prop","hasOwnProperty","call","r","Symbol","toStringTag","value","ErrorCodes","ALLOWED_ID_CHAR_REGEX","CryptoConstants","Frame","FRAME_DOMAIN","FRAME_PATH","_ICL_FRAME_DOMAIN_REPLACEMENT_","Versions","SDK_VERSION","SDK_NPM_VERSION_PLACEHOLDER","message","name","isSDKError","rawError","setPrototypeOf","SDKError","iFrameWindow","callbackCount","callbacks","processMessageIntoShim","event","replyID","callback","channel","MessageChannel","port1","addEventListener","messagePort","contentWindow","postMessage","port2","postMessageToFrame","transferList","BROWSER_FRAME_MESSAGE_FAILURE","window","document","createElement","messenger","ShimMessenger","frameLoadedPromise","timeout","setTimeout","FRAME_LOAD_FAILURE","type","clearTimeout","sendMessage","payload","response","isErrorResponse","text","height","width","style","display","position","top","left","src","body","appendChild","userJWTCallback","hasInitializedSDK","generateParentStorageKey","setSDKInitialized","checkSDKInitialized","storeParentWindowSymmetricKey","symmetricKey","localStorage","setItem","getParentWindowSymmetricKey","getItem","dedupeArray","list","clearEmptyValues","seenList","filter","item","validateID","id","test","validateDocumentData","validateEncryptedDocument","documentData","byteLength","validateAccessList","accessList","isUserListSet","users","isGroupListSet","groups","validateIDList","userList","dedupeAccessLists","userAccess","groupAccess","getJWT","jwtCallback","jwtPromise","JWT_FORMAT_FAILURE","jwt","JWT_RETRIEVAL_FAILURE","initialize","passcodeCallback","jwtToken","responsePayload","doesUserExist","passcodePromise","PASSCODE_FORMAT_FAILURE","passcode","PASSCODE_RETRIEVAL_FAILURE","invokePasscodeCallback","sdkResponse","user","groupsNeedingRotation","setUserPasscode","deleteDeviceByPublicSigningKey","publicSigningKey","fromBytes","bytes","toBytes","utf8String","base64","base64String","MAX_DOCUMENT_SIZE","calculateDocumentCreateOptionsDefault","options","randomBytes","crypto","getRandomValues","hexID","byte","toString","slice","documentID","documentName","grantToAuthor","policy","getMetadata","getDocumentIDFromBytes","DOCUMENT_HEADER_PARSE_FAILURE","headerLength","DataView","buffer","getUint16","byteOffset","headerContent","VERSION_HEADER_LENGTH","headerObject","JSON","parse","_did_","decryptFromStore","console","warn","decrypt","encryptToStore","DOCUMENT_MAX_SIZE_EXCEEDED","encryptOptions","userGrants","groupGrants","encrypt","updateEncryptedDataInStore","newDocumentData","updateEncryptedData","updateName","grantAccess","grantList","revokeAccess","revokeList","userRevocations","groupRevocations","advanced","decryptUnmanaged","edeks","documentId","accessVia","encryptUnmanaged","groupID","create","groupName","addAsMember","addAsAdmin","needsRotation","maybeOwner","ownerUserId","userLists","memberList","adminList","rotatePrivateKey","update","addAdmins","removeAdmins","addMembers","removeMembers","removeSelfAsMember","deleteGroup","searchIndexId","tokenizeData","partitionId","tokenizeQuery","query","createBlindSearchIndex","groupId","initializeBlindSearchIndex","searchIndexEncryptedSalt","searchIndexEdeks","InitializedSearchIndex","transliterateString","string","changePasscode","currentPasscode","newPasscode","rotateMasterKey","deauthorizeDevice","deleteDevice","deletedDevice","transformKeyDeleted","deviceId","deletingCurrentDevice","removeItem","clearParentWindowSymmetricKey","listDevices","group","search","codec","supportsRandomNumGen","nativeCrypto","isWebAssemblySupported","WebAssembly","instantiate","webAssemblyFailure","WEBASSEMBLY_SUPPORT_FAILURE","randomGenFailure","RANDOM_NUMBER_GENERATION_FAILURE","accountID","segmentID","status","userMasterPublicKey","createNewDeviceKeys","isInitialized"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"./shim/ironweb.min.js","mappings":"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","sources":["webpack://ironweb/webpack/universalModuleDefinition","webpack://ironweb/./node_modules/@stablelib/utf8/lib/utf8.js","webpack://ironweb/./node_modules/base64-js/index.js","webpack://ironweb/./node_modules/futurejs/Future.js","webpack://ironweb/webpack/bootstrap","webpack://ironweb/webpack/runtime/define property getters","webpack://ironweb/webpack/runtime/hasOwnProperty shorthand","webpack://ironweb/webpack/runtime/make namespace object","webpack://ironweb/./src/Constants.ts","webpack://ironweb/./src/lib/SDKError.ts","webpack://ironweb/./src/shim/FrameMediator.ts","webpack://ironweb/./src/shim/ShimUtils.ts","webpack://ironweb/./src/shim/Initialize.ts","webpack://ironweb/./src/shim/sdk/CodecSDK.ts","webpack://ironweb/./src/shim/sdk/DocumentSDK.ts","webpack://ironweb/./src/shim/sdk/GroupSDK.ts","webpack://ironweb/./src/shim/sdk/SearchSDK.ts","webpack://ironweb/./src/shim/sdk/UserSDK.ts","webpack://ironweb/./src/shim/SDK.ts","webpack://ironweb/./src/shim/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ironweb\"] = factory();\n\telse\n\t\troot[\"ironweb\"] = factory();\n})(self, () => {\nreturn ","\"use strict\";\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\nvar INVALID_UTF16 = \"utf8: invalid string\";\nvar INVALID_UTF8 = \"utf8: invalid source encoding\";\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nfunction encode(s) {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n var arr = new Uint8Array(encodedLength(s));\n var pos = 0;\n for (var i = 0; i < s.length; i++) {\n var c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n }\n else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\nexports.encode = encode;\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nfunction encodedLength(s) {\n var result = 0;\n for (var i = 0; i < s.length; i++) {\n var c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n }\n else if (c < 0x800) {\n result += 2;\n }\n else if (c < 0xd800) {\n result += 3;\n }\n else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n }\n else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\nexports.encodedLength = encodedLength;\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nfunction decode(arr) {\n var chars = [];\n for (var i = 0; i < arr.length; i++) {\n var b = arr[i];\n if (b & 0x80) {\n var min = void 0;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n }\n else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n var n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n }\n else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n var n2 = arr[++i];\n var n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n }\n else {\n throw new Error(INVALID_UTF8);\n }\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\nexports.decode = decode;\n//# sourceMappingURL=utf8.js.map","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","\"use strict\";\nexports.__esModule = true;\nvar Future = /** @class */ (function () {\n function Future(action) {\n this.action = action;\n }\n /**\n * Start execution of the Future. Accepts resolve/reject parameters\n * @param {Function} reject Handler if error occured during Future execution\n * @param {Function} resolve Handler if Future fully executed successfully\n */\n Future.prototype.engage = function (reject, resolve) {\n this.action(reject, resolve);\n };\n Future.prototype.engageAndCatch = function (reject, resolve) {\n try {\n this.engage(reject, resolve);\n }\n catch (e) {\n reject(e);\n }\n };\n /**\n * Presents a Thenable interface to the Future, which immediatly starts execution of the Future. This allows for\n * await syntax to be used on Futures, as well as chaining with other Thenable objects (e.g. Promises).\n * @param {Function} resolve Callback if Future fully executed successfully.\n * @param {Function} reject Callback if error occured during Future execution.\n * @returns {Promise<TResult1 | TResult2>} Promise that will resolve when the immediately executed Future is\n * resolved, with resolve/reject applied to the result.\n */\n Future.prototype.then = function (resolve, reject) {\n return this.toPromise().then(resolve, reject);\n };\n /**\n * Similar to engage. Starts execution of the Future and returns the resolve/reject wrapped up in a Promise instead\n * of taking reject/resolve parameters.\n * @return {Promise<R>} Start execution of the Future but return a Promise which will be resolved/reject when the Future is\n */\n Future.prototype.toPromise = function () {\n var _this = this;\n return new Promise(function (resolve, reject) { return _this.engage(reject, resolve); });\n };\n /**\n * Modify the data within the pipeline synchronously\n * @param {Function} mapper Method which will receive the current data and map it to a new value\n */\n Future.prototype.map = function (mapper) {\n return this.flatMap(function (x) { return Future.of(mapper(x)); });\n };\n /**\n * Run another asynchronous operation recieving the data from the previous operation\n * @param {Function} next Method to execute to run the operation\n */\n Future.prototype.flatMap = function (next) {\n var _this = this;\n return new Future(function (reject, resolve) {\n _this.engageAndCatch(reject, function (data) { return next(data).engageAndCatch(reject, resolve); });\n });\n };\n /**\n * Attempt to recover from an error in the pipeline in order to continue without rejecting the Future. The repaired type must extend\n * the original R as to make sure follow-on Futures can handle the data further in the chain\n * @param {Function} errHandler Error handler which should return a new Future and resolve or reject result\n */\n Future.prototype.handleWith = function (errHandler) {\n var _this = this;\n return new Future(function (reject, resolve) {\n _this.engage(function (error) {\n errHandler(error).engage(reject, resolve);\n }, resolve); //Type cast this as the resolved method should be able to handle both R and RepairedType\n });\n };\n /**\n * Map errors to a new error type.\n * @param {Function} mapper Mapping function which will recieve the current error can map it to a new type\n */\n Future.prototype.errorMap = function (mapper) {\n var _this = this;\n return new Future(function (reject, resolve) {\n _this.engageAndCatch(function (error) { return reject(mapper(error)); }, resolve);\n });\n };\n /**\n * Wrap the provided function in a Future which will either resolve with it's return value or reject with any exception it throws.\n * @param {Function} fn Function to invoke when Future is engaged\n */\n Future.tryF = function (fn) {\n return new Future(function (reject, resolve) {\n var result;\n try {\n result = fn();\n }\n catch (e) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return reject(e);\n }\n resolve(result);\n });\n };\n /**\n * Wrap the provided function which returns a Promise within a Future. If the function either throws an error or the resulting Promise rejects, the Future will\n * also reject. Otherwise, the Future will resolve with the result of the resolved Promise.\n * @param {Function} fn Function to invoke which returns a Promise\n */\n Future.tryP = function (fn) {\n return new Future(function (reject, resolve) {\n var promiseResult;\n try {\n promiseResult = fn();\n }\n catch (e) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return reject(e);\n }\n //We have to support both Promise and PromiseLike methods as input here, but treat them all as normal Promises when executing them\n promiseResult.then(resolve)[\"catch\"](reject);\n });\n };\n /**\n * Create a new synchronous Future which will automatically resolve with the provided value\n */\n Future.of = function (result) {\n return new Future(function (_, resolve) {\n resolve(result);\n });\n };\n /**\n * Create a new synchronous Future which will automatically reject with the provided value\n */\n Future.reject = function (error) {\n return new Future(function (reject) {\n reject(error);\n });\n };\n /**\n * Takes a function and a value and creates a new Future which will attempt to run the function with the value\n * and reject if the method throws an exception.\n * @param {Function} fn The function to execute\n * @param {A} a The value to pass to the function\n */\n Future.encase = function (fn, a) {\n return new Future(function (reject, resolve) {\n var result;\n try {\n result = fn(a);\n }\n catch (e) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return reject(e);\n }\n resolve(result);\n });\n };\n /**\n * Returns a new Future which will run the two provided futures in \"parallel\". The returned Future will be resolved if both\n * of the futures resolve and the results will be in an array properly indexed to how they were passed in. If any of the Futures\n * reject, then no results are returned and the Future is rejected.\n */\n Future.gather2 = function (future1, future2) {\n return new Future(function (reject, resolve) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var results = [];\n var count = 0;\n var done = false;\n future1.engageAndCatch(function (error) {\n if (!done) {\n done = true;\n reject(error);\n }\n }, function (result) {\n results[0] = result;\n if (++count === 2) {\n resolve(results);\n }\n });\n future2.engageAndCatch(function (error) {\n if (!done) {\n done = true;\n reject(error);\n }\n }, function (result) {\n results[1] = result;\n if (++count === 2) {\n resolve(results);\n }\n });\n });\n };\n /**\n * Same as gather2 except supports running three concurrent Futures\n */\n Future.gather3 = function (future1, future2, future3) {\n var firstTwo = this.gather2(future1, future2);\n return this.gather2(firstTwo, future3).map(function (_a) {\n var _b = _a[0], f1 = _b[0], f2 = _b[1], f3 = _a[1];\n return [f1, f2, f3];\n });\n };\n /**\n * Same as gather2 except supports running four concurrent Futures\n */\n Future.gather4 = function (future1, future2, future3, future4) {\n var firstTwo = this.gather2(future1, future2);\n var secondTwo = this.gather2(future3, future4);\n return this.gather2(firstTwo, secondTwo).map(function (_a) {\n var _b = _a[0], f1 = _b[0], f2 = _b[1], _c = _a[1], f3 = _c[0], f4 = _c[1];\n return [f1, f2, f3, f4];\n });\n };\n Future.all = function (futures) {\n return Array.isArray(futures) ? this.allArray(futures) : this.allObject(futures);\n };\n /**\n * Run all of the Futures in the provided array in parallel and resolve with an array where the results are in the same index\n * as the provided array.\n */\n Future.allArray = function (futures) {\n return new Future(function (reject, resolve) {\n var results = [];\n var count = 0;\n if (futures.length === 0) {\n resolve(results);\n }\n futures.forEach(function (futureInstance, index) {\n futureInstance.engageAndCatch(function (error) {\n reject(error);\n }, function (result) {\n results[index] = result;\n count += 1;\n if (count === futures.length) {\n resolve(results);\n }\n });\n });\n });\n };\n /**\n * Run all of the Futures in the provided Future map in parallel and resolve with an object where the results are in the same key\n * as the provided map.\n */\n Future.allObject = function (futures) {\n var futureKeys = Object.keys(futures);\n //Convert the Future map into an array in the same order as we get back from Object.keys\n var futuresArray = futureKeys.map(function (key) { return futures[key]; });\n return this.allArray(futuresArray).map(function (futureResults) {\n //Now iterate over the original keys and build a new map from key to Future result\n return futureKeys.reduce(function (futureMap, futureKey, index) {\n //The index of the object keys will be the same index as the expected result\n futureMap[futureKey] = futureResults[index];\n return futureMap;\n }, {});\n });\n };\n return Future;\n}());\nexports[\"default\"] = Future;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","declare const "4.2.42": string;\ndeclare const _ICL_FRAME_DOMAIN_REPLACEMENT_: string;\n\n/**\n * Number which is prepended onto encrypted documents to denote which classification of encrypted data\n * the document represents. Used to have a place to denote header info, symmetric encryption details, etc\n */\nexport const DOCUMENT_ENCRYPTION_DETAILS_VERSION_NUMBER = 2;\nexport const VERSION_HEADER_LENGTH = 1;\nexport const HEADER_META_LENGTH_LENGTH = 2;\n\n/**\n * Regex of allowed characters that users can provide as part of user, group, and document IDs.\n */\nexport const ALLOWED_ID_CHAR_REGEX = /^[a-zA-Z0-9_.$#|@/:;=+'-]{1,100}$/;\n\nexport const CryptoConstants = {\n VERSION_HEADER_LENGTH: 1,\n IV_LENGTH: 12,\n SALT_LENGTH: 32,\n AES_SYMMETRIC_KEY_LENGTH: 32,\n PBKDF2_ITERATIONS: 250000,\n NATIVE_DECRYPT_FAILURE_ERROR: \"OperationError\",\n};\n\nexport enum ErrorCodes {\n JWT_FORMAT_FAILURE = 100,\n JWT_RETRIEVAL_FAILURE = 101,\n VERIFY_API_REQUEST_FAILURE = 102,\n BROWSER_FRAME_MESSAGE_FAILURE = 103,\n RANDOM_NUMBER_GENERATION_FAILURE = 104,\n PASSCODE_FORMAT_FAILURE = 105,\n PASSCODE_RETRIEVAL_FAILURE = 106,\n SIGNATURE_GENERATION_FAILURE = 107,\n USER_NOT_SYNCED_FAILURE = 108,\n WEBASSEMBLY_SUPPORT_FAILURE = 109,\n FRAME_LOAD_FAILURE = 110,\n USER_VERIFY_API_REQUEST_FAILURE = 200,\n USER_CREATE_REQUEST_FAILURE = 201,\n USER_UPDATE_REQUEST_FAILURE = 202,\n USER_PASSCODE_INCORRECT = 203,\n USER_KEY_LIST_REQUEST_FAILURE = 204,\n USER_DEVICE_ADD_REQUEST_FAILURE = 205,\n USER_MASTER_KEY_GENERATION_FAILURE = 206,\n USER_DEVICE_KEY_GENERATION_FAILURE = 207,\n USER_DEVICE_KEY_DECRYPTION_FAILURE = 208,\n USER_PASSCODE_CHANGE_FAILURE = 209,\n USER_DEVICE_DELETE_REQUEST_FAILURE = 210,\n USER_UPDATE_KEY_REQUEST_FAILURE = 211,\n USER_PRIVATE_KEY_ROTATION_FAILURE = 212,\n USER_DEVICE_LIST_REQUEST_FAILURE = 213,\n DOCUMENT_LIST_REQUEST_FAILURE = 300,\n DOCUMENT_GET_REQUEST_FAILURE = 301,\n DOCUMENT_CREATE_REQUEST_FAILURE = 302,\n DOCUMENT_UPDATE_REQUEST_FAILURE = 303,\n DOCUMENT_GRANT_ACCESS_REQUEST_FAILURE = 304,\n DOCUMENT_REVOKE_ACCESS_REQUEST_FAILURE = 305,\n DOCUMENT_DECRYPT_FAILURE = 306,\n DOCUMENT_ENCRYPT_FAILURE = 307,\n DOCUMENT_REENCRYPT_FAILURE = 308,\n DOCUMENT_GRANT_ACCESS_FAILURE = 309,\n DOCUMENT_MAX_SIZE_EXCEEDED = 310,\n DOCUMENT_CREATE_WITH_ACCESS_FAILURE = 311,\n DOCUMENT_HEADER_PARSE_FAILURE = 312,\n DOCUMENT_TRANSFORM_REQUEST_FAILURE = 313,\n GROUP_LIST_REQUEST_FAILURE = 400,\n GROUP_GET_REQUEST_FAILURE = 401,\n GROUP_CREATE_REQUEST_FAILURE = 402,\n GROUP_ADD_MEMBERS_REQUEST_FAILURE = 403,\n GROUP_ADD_MEMBER_NOT_ADMIN_FAILURE = 404,\n GROUP_REMOVE_MEMBERS_REQUEST_FAILURE = 405,\n GROUP_REMOVE_SELF_REQUEST_FAILURE = 406,\n GROUP_KEY_GENERATION_FAILURE = 407,\n GROUP_MEMBER_KEY_ENCRYPTION_FAILURE = 408,\n GROUP_ADD_ADMINS_NOT_ADMIN_FAILURE = 409,\n GROUP_ADD_ADMINS_REQUEST_FAILURE = 410,\n GROUP_KEY_DECRYPTION_FAILURE = 411,\n GROUP_REMOVE_ADMINS_REQUEST_FAILURE = 412,\n GROUP_UPDATE_REQUEST_FAILURE = 413,\n GROUP_DELETE_REQUEST_FAILURE = 414,\n GROUP_CREATE_WITH_MEMBERS_OR_ADMINS_FAILURE = 415,\n GROUP_PRIVATE_KEY_ROTATION_FAILURE = 416,\n GROUP_UPDATE_KEY_REQUEST_FAILURE = 417,\n GROUP_ROTATE_PRIVATE_KEY_NOT_ADMIN_FAILURE = 418,\n REQUEST_RATE_LIMITED = 500,\n POLICY_APPLY_REQUEST_FAILURE = 600,\n SEARCH_CREATE_INDEX_FAILURE = 700,\n SEARCH_INIT_INDEX_FAILURE = 701,\n SEARCH_TOKENIZE_DATA_FAILURE = 702,\n SEARCH_TOKENIZE_QUERY_FAILURE = 703,\n}\n\n/*\n * Constants around frame communication\n */\nconst Frame = {\n //By default we point to production. We modify this via webpack at runtime for local development to allow us to\n //point to dev/stage.\n FRAME_DOMAIN: \"https://api.ironcorelabs.com\",\n FRAME_PATH: \"/ironweb-frame\",\n};\n//Support the ability to switch out the domain to point to different environments. This should only ever\n//be used internally for local development and the Google Integration. Clients should always hit production.\nif (typeof _ICL_FRAME_DOMAIN_REPLACEMENT_ === \"string\" && _ICL_FRAME_DOMAIN_REPLACEMENT_.length) {\n Frame.FRAME_DOMAIN = _ICL_FRAME_DOMAIN_REPLACEMENT_;\n}\n\nexport {Frame};\n\nexport const GroupPermissions = {\n ADMIN: \"admin\",\n MEMBER: \"member\",\n};\n\nexport const UserAndGroupTypes = {\n USER: \"user\",\n GROUP: \"group\",\n};\n\nexport const Versions = {\n //This define is replaced at runtime during development, and at build time in the build script with the proper version\n SDK_VERSION: SDK_NPM_VERSION_PLACEHOLDER,\n};\n","import {CryptoConstants} from \"../Constants\";\n\n/**\n * Type guard to differentiate between base Errors and SDKErrors. Check if we have a numerical code on the error and that it\n * isn't a generic \"OperationError\" which already contains codes\n */\nfunction isSDKError(error: SDKError | Error): error is SDKError {\n return typeof (error as SDKError).code === \"number\" && error.name !== CryptoConstants.NATIVE_DECRYPT_FAILURE_ERROR;\n}\n\n/**\n * Custom error class which adds error codes onto normal JS Error objects so we can communicate specific SDK errors out\n * to consumers of the SDK.\n */\nexport default class SDKError extends Error {\n readonly code: number;\n readonly rawError: Error;\n\n constructor(error: Error | SDKError, code: number) {\n super(error.message);\n //If we get an SDK error as part of this constructor, then just keep the original error/code and don't overwrite\n if (isSDKError(error)) {\n this.code = error.code;\n this.rawError = error.rawError;\n } else {\n this.code = code;\n this.rawError = error;\n }\n //Fix error inheritence: https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, SDKError.prototype);\n }\n}\n","import Future from \"futurejs\";\nimport {ErrorCodes, Frame, Versions} from \"../Constants\";\nimport {ErrorResponse, RequestMessage, ResponseMessage} from \"../FrameMessageTypes\";\nimport SDKError from \"../lib/SDKError\";\n\ninterface FrameEvent<T> {\n replyID: number;\n data: T;\n}\n\n/**\n * Class which handles messaging from the shim into the frame. Holds callback messages so that users can interact with this\n * class via Futures. Also handles the creation of all the ChannelMessage ports to pass down to the frame.\n */\nexport class ShimMessenger {\n readonly messagePort: MessagePort;\n callbackCount = 0;\n callbacks: {[key: string]: (data: ResponseMessage) => void} = {};\n\n constructor(iFrameWindow: HTMLIFrameElement) {\n const channel = new MessageChannel();\n channel.port1.start();\n channel.port1.addEventListener(\"message\", this.processMessageIntoShim);\n this.messagePort = channel.port1;\n iFrameWindow.addEventListener(\"load\", () => {\n iFrameWindow.contentWindow!.postMessage(\"MESSAGE_PORT_INIT\", Frame.FRAME_DOMAIN, [channel.port2]);\n });\n }\n\n /**\n * Post request message to child iFrame\n * @param {RequestMessage} data RequestMessage to post to child iFrame\n * @param {Uint8Array[]} transferList List of byte arrays to transfer to frame\n */\n postMessageToFrame(data: RequestMessage, transferList: Uint8Array[] = []): Future<SDKError, ResponseMessage> {\n const message: FrameEvent<RequestMessage> = {\n replyID: this.callbackCount++,\n data,\n };\n try {\n this.messagePort.postMessage(\n message,\n transferList.map(({buffer}) => buffer)\n );\n return new Future<SDKError, ResponseMessage>((_, resolve) => {\n this.callbacks[message.replyID] = resolve;\n });\n } catch (_) {\n return Future.reject(\n new SDKError(new Error(\"Failure occurred when passing message due to the lack of browser support.\"), ErrorCodes.BROWSER_FRAME_MESSAGE_FAILURE)\n );\n }\n }\n\n /**\n * Process a received message into the parent window\n * @param {MessageEvent} event Window postMessage event object\n */\n processMessageIntoShim = (event: MessageEvent) => {\n const {data, replyID} = event.data as FrameEvent<ResponseMessage>;\n const callback = this.callbacks[replyID];\n\n if (callback) {\n delete this.callbacks[replyID];\n callback(data);\n }\n };\n}\n\n/**\n * Create a new invisible iFrame that points to the SDK frame, attach it to the window body, and subscribe to the\n * frame load event so we ensure we wait until it's available to call into it.\n */\nconst frame = window.document.createElement(\"iframe\");\nexport const messenger = new ShimMessenger(frame);\nconst frameLoadedPromise = new Promise<void>((resolve, reject) => {\n //The frame \"load\" even fires even if the frame failed to load (e.g. 404). So once it loads, we want to verify that it is actually\n //responding to messages we pass it. So pass a test message and verify we get a response within a second. If it does, we resolve\n //this Promise for all future messages. If it fails we reject with the appropriate SDK error message.\n frame.addEventListener(\"load\", () => {\n const timeout = setTimeout(() => {\n reject(new SDKError(new Error(\"Failed to load IronWeb frame.\"), ErrorCodes.FRAME_LOAD_FAILURE));\n }, 1000);\n messenger.postMessageToFrame({type: \"FRAME_LOADED_CHECK\"}).engage(reject, () => {\n clearTimeout(timeout);\n resolve();\n });\n });\n});\nframe.height = \"0\";\nframe.width = \"0\";\nframe.style.display = \"none\";\nframe.style.position = \"absolute\";\nframe.style.top = \"-999px\";\nframe.style.left = \"-999px\";\nframe.src = `${Frame.FRAME_DOMAIN}${Frame.FRAME_PATH}?version=${Versions.SDK_VERSION}`;\nwindow.document.body.appendChild(frame);\n\n/**\n * Return a simple Future wrapper around existing frame load Promise so that we wait until the iFrame has loaded before we post any messages to it. We\n * wrap a Promise here so that when this gets invoked over and over we don't recreate the Promise as it will cache it's resolved value and invoke the\n * `then` callback immediately. This allows subsequent calls to resolve immediately after the iFrame has finished loading.\n */\nfunction ensureFrameLoaded() {\n return Future.tryP<Error, void>(() => frameLoadedPromise);\n}\n\n/**\n * Type guard to check if returned message is an error message type\n * @param {ResponseMessage} response ResponseMessage instance to check\n */\nfunction isErrorResponse(response: ResponseMessage): response is ErrorResponse {\n return response.type === \"ERROR_RESPONSE\";\n}\n\n/**\n * Post the provided RequestMessage to the SDK frame. Returns a Future which will be resolved with the provided ResponseMessage type, or rejected with an SDKError\n */\nexport function sendMessage<T extends ResponseMessage>(payload: RequestMessage, transferList?: Uint8Array[]): Future<Error, T> {\n return ensureFrameLoaded()\n .flatMap(() => messenger.postMessageToFrame(payload, transferList))\n .flatMap((response) => {\n //Handle all error messages generically here. Convert the message details back into an error object and reject the Future\n if (isErrorResponse(response)) {\n return Future.reject(new SDKError(new Error(response.message.text), response.message.code));\n }\n return Future.of(response as T);\n });\n}\n","import {DocumentAccessList} from \"../../ironweb\";\nimport {ALLOWED_ID_CHAR_REGEX, CryptoConstants} from \"../Constants\";\nconst SECRET_KEY_LOCAL_STORAGE_VERSION = \"1\";\nlet hasInitializedSDK = false;\n\n/**\n * Generate parent window storage key that we'll use to store/retrieve the users symmetric key to decrypt their device/signing keys\n */\nfunction generateParentStorageKey() {\n return `${SECRET_KEY_LOCAL_STORAGE_VERSION}-icldassk`;\n}\n\n/**\n * Mark SDK initialization as complete to allow SDK methods to be run\n */\nexport function setSDKInitialized() {\n hasInitializedSDK = true;\n}\n\n/**\n * Set init complete flag to false. Used when the current user is deauthorized.\n */\nexport function clearSDKInitialized() {\n hasInitializedSDK = false;\n}\n\n/**\n * Throws an exception if the SDK is currently not initialized. Used to gate access to SDK methods which require init to be run before use\n */\nexport function checkSDKInitialized() {\n if (!hasInitializedSDK) {\n throw new Error(\n 'SDK \"initialize()\" method has not yet been called or completed execution. SDK methods cannot be used until initialization is complete.'\n );\n }\n}\n\n/**\n * Set symmetric key for parent window in local storage, if provided\n * @param {string} symmetricKey Symmetric key to decrypt users local device/signing keys\n */\nexport function storeParentWindowSymmetricKey(symmetricKey?: string) {\n if (symmetricKey) {\n try {\n localStorage.setItem(generateParentStorageKey(), symmetricKey);\n } catch (e) {\n // This catch case does not need to return any error information because keys will persist within one session but users will have to reenter their password upon triggering of a new browser session.\n }\n }\n}\n\n/**\n * Retrieve users symmetric key to decrypt users local device/signing keys\n */\nexport function getParentWindowSymmetricKey() {\n try {\n return localStorage.getItem(generateParentStorageKey()) || undefined;\n } catch (e) {\n return undefined;\n }\n}\n\n/**\n * Clear out users local symmetric key for decrypting local device/signing keys\n */\nexport function clearParentWindowSymmetricKey() {\n try {\n localStorage.removeItem(generateParentStorageKey());\n } catch (e) {\n // This catch case does not need to return any error information because failuer to remove information from local storage will not cause any failure in SDK functionality.\n }\n}\n\n/**\n * Dedupe string values in an array. Currently expects array of strings which are case-insensitive\n * @param {string[]} list List of strings to dedupe\n * @param {boolean} clearEmptyValues Whether we should also filter out all falsy values from the array\n */\nexport function dedupeArray(list: string[], clearEmptyValues = false) {\n const seenList: {[key: string]: boolean} = {};\n\n return list.filter((item) => {\n if (seenList[item] || (clearEmptyValues && !item.length)) {\n return false;\n }\n seenList[item] = true;\n return true;\n });\n}\n\n/**\n * Validates that either an owner was specified or addAsAdmin is true allowing the creator to be the default owner.\n * An error will be returned if no owner is specified and the group creator is not going to be an admin.\n */\nexport function validateOwnership(addAsAdmin?: boolean, maybeOwner?: string) {\n if (!maybeOwner && addAsAdmin === false) {\n throw new Error(`Failed to create group because group ownership must be held by a group administrator`);\n }\n}\n\n/**\n * Validate that the provided document ID is a string and has a length\n */\nexport function validateID(id: string) {\n if (typeof id !== \"string\" || !id.length) {\n throw new Error(`Invalid ID provided. Expected a non-zero length string but got ${id}`);\n }\n if (!ALLOWED_ID_CHAR_REGEX.test(id)) {\n throw new Error(`Invalid ID provided. Provided value includes invalid characters: '${id}'.`);\n }\n}\n\n/**\n * Validate that the provided raw document data is a proper byte array\n */\nexport function validateDocumentData(data: Uint8Array) {\n if (!(data instanceof Uint8Array) || !data.length) {\n throw new Error(`Invalid document data format provided. Expected a Uint8Array.`);\n }\n}\n\n/**\n * Validate that the provided encrypted document is in the proper form, which should be a Uint8Array of the document content and the AES IV prepended.\n * Therefore validate the length is at least 1 more than the IV length.\n */\nexport function validateEncryptedDocument(documentData: Uint8Array) {\n if (!(documentData instanceof Uint8Array)) {\n throw new Error(\"Invalid encrypted document content. Content should be a Uint8Array.\");\n }\n\n if (documentData.byteLength < CryptoConstants.IV_LENGTH + 1) {\n throw new Error(`Invalid encrypted document content. Length of content does not meet minimum requirements.`);\n }\n}\n\n/**\n * Validate that the provided encrypted document is in the proper form, which should be a Uint8Array and be non empty.\n */\nexport function validateEncryptedDeks(edeks: Uint8Array) {\n if (!(edeks instanceof Uint8Array)) {\n throw new Error(\"Invalid encrypted deks. Edeks should be a Uint8Array.\");\n }\n\n if (edeks.byteLength <= 0) {\n throw new Error(`Invalid encrypted deks. Length does not meet minimum requirements.`);\n }\n}\n\n/**\n * Validate that the provided list of access IDs is valid\n */\nexport function validateAccessList(accessList: DocumentAccessList) {\n const isUserListSet = accessList && Array.isArray(accessList.users) && accessList.users.length;\n const isGroupListSet = accessList && Array.isArray(accessList.groups) && accessList.groups.length;\n\n if (!isUserListSet && !isGroupListSet) {\n throw new Error(\"You must provide a list of users or groups with which to change document access.\");\n }\n}\n\n/**\n * Validate a list of IDs. Only used for validating group member edit at this point\n */\nexport function validateIDList(userList: string[]) {\n if (!Array.isArray(userList) || !userList.length) {\n throw new Error(\"You must provide a list of users to perform this operation.\");\n }\n}\n\n/**\n * Take a document access/revoke list and normalize/dedupe the arrays providing back validated defaults for both\n * @param {DocumentAccessList} accessList Input to SDK of access list\n */\nexport function dedupeAccessLists(accessList: DocumentAccessList) {\n let userAccess: string[] = [];\n let groupAccess: string[] = [];\n if (accessList.users && accessList.users.length) {\n userAccess = dedupeArray(accessList.users.map(({id}) => id), true);\n }\n if (accessList.groups && accessList.groups.length) {\n groupAccess = dedupeArray(accessList.groups.map(({id}) => id), true);\n }\n return [userAccess, groupAccess];\n}\n","import Future from \"futurejs\";\nimport {DeviceKeys, SDKInitializationResult, UserCreateResponse} from \"ironweb\";\nimport {ErrorCodes} from \"../Constants\";\nimport {\n CreateDetachedUserDeviceRequest,\n CreateDetachedUserDeviceResponse,\n CreateUserAndDeviceRequest,\n CreateUserRequest,\n CreateUserResponse,\n DeleteDeviceBySigningKeyJwt,\n DeleteDeviceResponse,\n GenerateNewDeviceKeysRequest,\n InitApiPasscodeResponse,\n InitApiRequest,\n InitApiSdkResponse,\n} from \"../FrameMessageTypes\";\nimport SDKError from \"../lib/SDKError\";\nimport * as FrameMediator from \"./FrameMediator\";\nimport {getParentWindowSymmetricKey, setSDKInitialized, storeParentWindowSymmetricKey} from \"./ShimUtils\";\n\n//Store reference to the JWT callback in case we need to invoke it again to create user\nlet userJWTCallback: JWTCallbackToPromise;\n\n/**\n * Retrieve the users JWT token and validate the result\n * @param {CallbackToPromise} jwtCallback Method that can be used to retrieve the JWT\n */\nfunction getJWT(jwtCallback: JWTCallbackToPromise): Future<Error, string> {\n return Future.tryP(() => {\n const jwtPromise = jwtCallback();\n if (jwtPromise && typeof jwtPromise.then === \"function\") {\n return jwtPromise;\n }\n throw new SDKError(new Error(\"JWT callback did not return a Promise.\"), ErrorCodes.JWT_FORMAT_FAILURE);\n }).flatMap((jwt: string) => {\n if (typeof jwt === \"string\" && jwt.length > 0) {\n return Future.of(jwt);\n }\n return Future.reject(new SDKError(new Error(`JWT should be a non-zero length string, but instead got '${jwt}'`), ErrorCodes.JWT_RETRIEVAL_FAILURE));\n });\n}\n\n/**\n * Invoke the users passcode callback method. Verifies that we got what looks to be a Promise back from the callback and also verifies that when it resolves\n * we got a non-zero length string as the passcode.\n * @param {PasscodeCallbackToPromise} passcodeCallback User provided passcode callback\n * @param {boolean} doesUserExist Whether the user exists within the IronCore system and we're going to do a new user create or we're adding a new device\n */\nfunction invokePasscodeCallback(passcodeCallback: PasscodeCallbackToPromise, doesUserExist: boolean) {\n return Future.tryP(() => {\n const passcodePromise = passcodeCallback(doesUserExist);\n if (passcodePromise && typeof passcodePromise.then === \"function\") {\n return passcodePromise;\n }\n throw new SDKError(new Error(\"Passcode callback did not return a Promise.\"), ErrorCodes.PASSCODE_FORMAT_FAILURE);\n }).flatMap((passcode: string) => {\n if (typeof passcode === \"string\" && passcode.length > 0) {\n return Future.of(passcode);\n }\n return Future.reject(\n new SDKError(\n new Error(`User provided passcode should be a non-zero length string, but instead got '${passcode}'`),\n ErrorCodes.PASSCODE_RETRIEVAL_FAILURE\n )\n );\n });\n}\n\n/**\n * Handle users passcode entry and either create them as new user or add a new set of device keys for them\n * @param {boolean} doesUserExist Denotes whether we need to create or update this user\n * @param {string} passcode Users passcode entry\n */\nfunction setUserPasscode(doesUserExist: boolean, passcode: string): Future<Error, SDKInitializationResult> {\n return getJWT(userJWTCallback)\n .flatMap((jwtToken) => {\n const payload = {\n type: doesUserExist ? \"GEN_DEVICE_KEYS\" : \"CREATE_USER_AND_DEVICE\",\n message: {passcode, jwtToken},\n };\n return FrameMediator.sendMessage<InitApiSdkResponse>(payload as GenerateNewDeviceKeysRequest | CreateUserAndDeviceRequest);\n })\n .map((sdkResponse: InitApiSdkResponse) => {\n storeParentWindowSymmetricKey(sdkResponse.message.symmetricKey);\n setSDKInitialized();\n return {user: sdkResponse.message.user, groupsNeedingRotation: sdkResponse.message.groupsNeedingRotation};\n });\n}\n\n/**\n * Create a new user using a JWT callback. Returns the created user's info if successful.\n */\nexport const createNewUser = (jwtCallback: JWTCallbackToPromise, passcode: string, needsRotation = false): Promise<UserCreateResponse> =>\n getJWT(jwtCallback)\n .flatMap((jwtToken) => {\n const payload: CreateUserRequest = {type: \"CREATE_USER\", message: {passcode, jwtToken, needsRotation}};\n return FrameMediator.sendMessage<CreateUserResponse>(payload);\n })\n //Rename a few fields and strip out the users private key and currentKeyId since they'll probably be confusing that they're getting back an encrypted private key\n //eslint-disable-next-line @typescript-eslint/no-unused-vars\n .map(({message: {id, segmentId, needsRotation, status, userMasterPublicKey}}) => ({\n accountID: id,\n segmentID: segmentId,\n needsRotation,\n status,\n userMasterPublicKey,\n }))\n .toPromise();\n\n/**\n * Create a set of device keys that aren't stored in the browser and are returned to the caller.\n */\nexport const createUserDeviceKeys = (jwtCallback: JWTCallbackToPromise, passcode: string): Promise<DeviceKeys> =>\n getJWT(jwtCallback)\n .flatMap((jwtToken) => {\n const payload: CreateDetachedUserDeviceRequest = {type: \"CREATE_DETATCHED_USER_DEVICE\", message: {passcode, jwtToken}};\n return FrameMediator.sendMessage<CreateDetachedUserDeviceResponse>(payload);\n })\n .map(({message}) => message)\n .toPromise();\n\n/**\n * Initialize the API by getting a JWT and verifying the user. Returns either the SDK if the user has their set of\n * device keys, or returns asking for passcode if user needs to be created/updated.\n * @param {JWTCallbackToPromise} jwtCallback Method that can be used to retrieve the JWT\n * @param {PasscodeCallbackToPromise} passcodeCallback Method that can be used to get the users escrow passcode\n */\nexport function initialize(jwtCallback: JWTCallbackToPromise, passcodeCallback: PasscodeCallbackToPromise): Promise<SDKInitializationResult> {\n userJWTCallback = jwtCallback;\n return getJWT(jwtCallback)\n .flatMap((jwtToken) => {\n const payload: InitApiRequest = {\n type: \"INIT_SDK\",\n message: {\n jwtToken,\n symmetricKey: getParentWindowSymmetricKey(),\n },\n };\n return FrameMediator.sendMessage<InitApiPasscodeResponse | InitApiSdkResponse>(payload);\n })\n .flatMap((responsePayload) => {\n if (responsePayload.type === \"INIT_PASSCODE_REQUIRED\") {\n return invokePasscodeCallback(passcodeCallback, responsePayload.message.doesUserExist).flatMap((passcode: string) =>\n setUserPasscode(responsePayload.message.doesUserExist, passcode)\n );\n }\n storeParentWindowSymmetricKey(responsePayload.message.symmetricKey);\n setSDKInitialized();\n return Future.of<SDKInitializationResult>({\n user: responsePayload.message.user,\n groupsNeedingRotation: responsePayload.message.groupsNeedingRotation,\n });\n })\n .toPromise();\n}\n\n/**\n * Deletes a device by its public signing key. Uses JWT auth, so it doesn't require an initialized SDK.\n * @param {Base64String} publicSigningKey The public signing key of the device to delete.\n */\nexport const deleteDeviceByPublicSigningKey = (jwtCallback: JWTCallbackToPromise, publicSigningKey: Base64String): Promise<number> =>\n getJWT(jwtCallback)\n .flatMap((jwtToken) => {\n const payload: DeleteDeviceBySigningKeyJwt = {\n type: \"DELETE_DEVICE_BY_SIGNING_KEY_JWT\",\n message: {\n jwtToken,\n publicSigningKey,\n },\n };\n return FrameMediator.sendMessage<DeleteDeviceResponse>(payload).map(({message}) => message);\n })\n .toPromise();\n","import {encode, decode} from \"@stablelib/utf8\";\nimport {fromByteArray, toByteArray} from \"base64-js\";\n\nexport const utf8 = {\n /**\n * Convert a byte array into a UTF-8 string sequence. This operation will throw an exception if the bytes provided are not valid UTF-8.\n * @param {Uint8Array} bytes Array of bytes to convert into UTF-8\n */\n fromBytes(bytes: Uint8Array) {\n return decode(bytes);\n },\n\n /**\n * Convert a valid UTF-8 string into an array of bytes. This operation will throw an exception if the string provided is not valid UTF-8.\n * @param {string} utf8String UTF-8 string to convert into bytes\n */\n toBytes(utf8String: string) {\n return encode(utf8String);\n },\n};\n\nexport const base64 = {\n /**\n * Convert a byte array into a Base64 encoded string.\n * @param {Uint8Array} bytes Array of bytes to convert into Base64\n */\n fromBytes(bytes: Uint8Array) {\n return fromByteArray(bytes);\n },\n\n /**\n * Convert a valid Base64 string into an array of bytes. This operation will throw an exception if the string provided is not valid Base64.\n * @param {string} base64String Base64 string to convert into bytes\n */\n toBytes(base64String: string) {\n return toByteArray(base64String);\n },\n};\n","import Future from \"futurejs\";\nimport {\n DecryptedUnmanagedDocumentResponse,\n DocumentAccessList,\n DocumentCreateOptions,\n EncryptedDocumentResponse,\n EncryptedUnmanagedDocumentResponse,\n} from \"../../../ironweb\";\nimport {ErrorCodes, HEADER_META_LENGTH_LENGTH, VERSION_HEADER_LENGTH} from \"../../Constants\";\nimport * as MT from \"../../FrameMessageTypes\";\nimport SDKError from \"../../lib/SDKError\";\nimport * as FrameMediator from \"../FrameMediator\";\nimport * as ShimUtils from \"../ShimUtils\";\nimport {utf8} from \"./CodecSDK\";\n\nconst MAX_DOCUMENT_SIZE = 1024 * 2 * 1000; //2MB\n\n/**\n * Takes the document encrypt options object and normalizes it to a complete object with proper default values.\n * @param {DocumentCreateOptions} options Options user passed in for document create operation\n * @return {DocumentCreateOptions} Document create options object with properly filled out fields\n */\nfunction calculateDocumentCreateOptionsDefault(options?: DocumentCreateOptions) {\n //Generate a random ID for the document if the user didn't provide one\n const randomBytes = window.crypto.getRandomValues(new Uint8Array(16));\n const hexID = Array.prototype.map.call(randomBytes, (byte: number) => `00${byte.toString(16)}`.slice(-2)).join(\"\");\n if (!options) {\n return {documentID: hexID, documentName: \"\", accessList: {users: [], groups: [], grantToAuthor: true}};\n }\n return {\n documentID: options.documentID || hexID,\n documentName: options.documentName || \"\",\n accessList: {\n users: options.accessList && options.accessList.users ? options.accessList.users : [],\n groups: options.accessList && options.accessList.groups ? options.accessList.groups : [],\n grantToAuthor: options.grantToAuthor !== false,\n },\n policy: options.policy,\n };\n}\n\n/**\n * Returns the list of documents that the current user has access to decrypt. Only document metadata is returned, not any document content.\n * This list will include documents the user authored as well as documents that were granted access to the current user, either by another user or a group.\n */\nexport function list() {\n ShimUtils.checkSDKInitialized();\n return FrameMediator.sendMessage<MT.DocumentListResponse>({type: \"DOCUMENT_LIST\"})\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Get metadata about a document regardless of where the document content is stored. Returns a Promise which will be resolved with the document metadata.\n * @param {string} documentID ID of the document metadata to retrieve\n */\nexport function getMetadata(documentID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n const payload: MT.DocumentMetaGetRequest = {\n type: \"DOCUMENT_META_GET\",\n message: {documentID},\n };\n return FrameMediator.sendMessage<MT.DocumentMetaGetResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Attempt to parse the document ID from an encrypted document header. Returns the document ID as a string or null if the provided encrypted\n * document doesn't have an embedded ID.\n * @param {Uint8Array} documentData Encrypted document in byte array form\n */\nexport function getDocumentIDFromBytes(documentData: Uint8Array): Promise<string | null> {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateEncryptedDocument(documentData);\n\n //Version 1 document, we don't have the document ID as it's not encoded in the header\n if (documentData[0] === 1) {\n return Promise.resolve(null);\n }\n //Check to see if the document is a version we don't support and reject if so\n if (documentData[0] !== 2) {\n return Promise.reject(\n new SDKError(new Error(\"Provided encrypted document doesn't appear to be valid. Invalid version.\"), ErrorCodes.DOCUMENT_HEADER_PARSE_FAILURE)\n );\n }\n const headerLength = new DataView(documentData.buffer).getUint16(documentData.byteOffset + VERSION_HEADER_LENGTH, false);\n const headerContent = documentData.slice(\n VERSION_HEADER_LENGTH + HEADER_META_LENGTH_LENGTH,\n VERSION_HEADER_LENGTH + HEADER_META_LENGTH_LENGTH + headerLength\n );\n try {\n const headerObject: DocumentHeader = JSON.parse(utf8.fromBytes(headerContent));\n return Promise.resolve(headerObject._did_);\n } catch {\n return Promise.reject(new SDKError(new Error(\"Unable to parse document header. Header value is corrupted.\"), ErrorCodes.DOCUMENT_HEADER_PARSE_FAILURE));\n }\n}\n\n/**\n * @deprecated Use `decrypt` instead.\n * Retrieve and decrypt a document from the document store. Returns a Promise which will be resolved once the document has been retrieved and decrypted.\n * @param {string} documentID ID of the document to retrieve\n */\nexport function decryptFromStore(documentID: string) {\n console.warn(\"decryptFromStore is deprecated. Use decrypt instead.\");\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n const payload: MT.DocumentStoreDecryptRequest = {\n type: \"DOCUMENT_STORE_DECRYPT\",\n message: {\n documentID,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentStoreDecryptResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Decrypt the provided document given the ID of the document and its data. Returns a Promise which will be resolved once the document has been successfully decrypted.\n * @param {string} documentID Unique ID of document to decrypt\n * @param {Uint8Array} documentData Document data to decrypt\n */\nexport function decrypt(documentID: string, documentData: Uint8Array) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateEncryptedDocument(documentData);\n const payload: MT.DocumentDecryptRequest = {\n type: \"DOCUMENT_DECRYPT\",\n message: {\n documentID,\n documentData: documentData.slice(),\n },\n };\n return FrameMediator.sendMessage<MT.DocumentDecryptResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * @deprecated Use `encrypt` instead and manage storage of the result yourself.\n * Creates a new encrypted document within the store. Returns a Promise which will be resolved once the data has been fully encrypted and saved.\n * @param {Uint8Array} documentData Data to save for document\n * @param {DocumentCreateOptions} options Document create options. Includes:\n * documentID: string - Optional ID to use for the document. Document ID will be stored unencrypted and must be unique per segment\n * documentName: string - Optional name to provide to document. Document name will be stored unencrypted.\n * accessList: object - Optional object which allows document to be shared with others upon creation. There is no need to add the\n * document creators ID to this list as that will happen automatically. Contains the following keys:\n * users: Array - List of user IDs to share document with. Each value in the array should be in the form {id: string}.\n * groups: Array - List of group IDs to share document with. Each value in the array should be in the form {id: string}.\n * grantToAuthor: boolean - Should the create grant access to the logged in user. Defaults to true.\n */\nexport function encryptToStore(documentData: Uint8Array, options?: DocumentCreateOptions) {\n console.warn(\"encryptToStore is deprecated. Use encrypt instead and manage storage of the result yourself.\");\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateDocumentData(documentData);\n if (documentData.length > MAX_DOCUMENT_SIZE) {\n return Promise.reject(\n new SDKError(\n new Error(`Document of length ${documentData.length} exceeds maximum allowed byte size of ${MAX_DOCUMENT_SIZE}`),\n ErrorCodes.DOCUMENT_MAX_SIZE_EXCEEDED\n )\n );\n }\n const encryptOptions = calculateDocumentCreateOptionsDefault(options);\n if (encryptOptions.documentID) {\n ShimUtils.validateID(encryptOptions.documentID);\n }\n const [userGrants, groupGrants] = ShimUtils.dedupeAccessLists(encryptOptions.accessList);\n const payload: MT.DocumentStoreEncryptRequest = {\n type: \"DOCUMENT_STORE_ENCRYPT\",\n message: {\n documentID: encryptOptions.documentID,\n documentData: documentData.slice(),\n documentName: encryptOptions.documentName,\n userGrants,\n groupGrants,\n grantToAuthor: encryptOptions.accessList.grantToAuthor,\n policy: encryptOptions.policy,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentStoreEncryptResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Encrypt the provided document. Returns a Promise which will be resolved once the content has been encrypted.\n * @param {string} documentData Contents of document to encrypt\n * @param {DocumentCreateOptions} options Document create options. Includes:\n * documentID: string - Optional ID to use for the document. Document ID will be stored unencrypted and must be unique per segment\n * documentName: string - Optional name to provide to document. Document name will be stored unencrypted.\n * accessList: object - Optional object which allows document to be shared with others upon creation. Contains the following keys:\n * users: Array - List of user IDs to share document with. Each value in the array should be in the form {id: string}.\n * groups: Array - List of group IDs to share document with. Each value in the array should be in the form {id: string}.\n * grantToAuthor: boolean - Should the create grant access to the logged in user. Defaults to true.\n * policy: Policy - The policy (or data label) to be applied to this data. This policy will be applied to get users and groups\n * to share with in addition to the ones being explicitly granted access.\n */\nexport function encrypt(documentData: Uint8Array, options?: DocumentCreateOptions): Promise<EncryptedDocumentResponse> {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateDocumentData(documentData);\n const encryptOptions = calculateDocumentCreateOptionsDefault(options);\n if (encryptOptions.documentID) {\n ShimUtils.validateID(encryptOptions.documentID);\n }\n const [userGrants, groupGrants] = ShimUtils.dedupeAccessLists(encryptOptions.accessList);\n const payload: MT.DocumentEncryptRequest = {\n type: \"DOCUMENT_ENCRYPT\",\n message: {\n documentData: documentData.slice(),\n documentID: encryptOptions.documentID,\n documentName: encryptOptions.documentName,\n userGrants,\n groupGrants,\n grantToAuthor: encryptOptions.accessList.grantToAuthor,\n policy: encryptOptions.policy,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentEncryptResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Update an existing documents data in the store. Returns a Promise which will be resolved once the document has been successfully updated in the store.\n * @deprecated Use `updateEncryptedData` instead and manage storage of the result yourself.\n * @param {string} documentID ID of document to update. Promise will reject if document does not exist\n * @param {Uint8Array} newDocumentData New content to encrypt and save for document\n */\nexport function updateEncryptedDataInStore(documentID: string, newDocumentData: Uint8Array) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateDocumentData(newDocumentData);\n\n if (newDocumentData.length > MAX_DOCUMENT_SIZE) {\n return Promise.reject(\n new SDKError(\n new Error(`Document of length ${newDocumentData.length} exceeds maximum allowed byte size of ${MAX_DOCUMENT_SIZE}`),\n ErrorCodes.DOCUMENT_MAX_SIZE_EXCEEDED\n )\n );\n }\n\n const payload: MT.DocumentStoreUpdateDataRequest = {\n type: \"DOCUMENT_STORE_UPDATE_DATA\",\n message: {\n documentID,\n documentData: newDocumentData.slice(),\n },\n };\n return FrameMediator.sendMessage<MT.DocumentStoreUpdateDataResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Update and re-encrypt a document that already exists. Returns a Promise which will be resolved once the new data has been encrypted.\n * @param {string} documentID Unique ID of document to update\n * @param {Uint8Array} newDocumentData New content to encrypt for document\n */\nexport function updateEncryptedData(documentID: string, newDocumentData: Uint8Array): Promise<EncryptedDocumentResponse> {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateDocumentData(newDocumentData);\n const payload: MT.DocumentUpdateDataRequest = {\n type: \"DOCUMENT_UPDATE_DATA\",\n message: {\n documentID,\n documentData: newDocumentData.slice(),\n },\n };\n return FrameMediator.sendMessage<MT.DocumentUpdateDataResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Update a document name to a new value. Can also be used to clear the name field for an existing document by passing in null or an empty string for the name parameter.\n * @param {string} documentID Unique ID of the document to update\n * @param {string|null} name Name to update. Send in null/empty string to clear a documents name field.\n */\nexport function updateName(documentID: string, name: string | null) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n const payload: MT.DocumentUpdateNameRequest = {\n type: \"DOCUMENT_UPDATE_NAME\",\n message: {\n documentID,\n name: name === \"\" ? null : name,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentUpdateNameResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Provides access to the provided list of users and groups to the provided document ID. Returns a Promise which will be resolved\n * once access to the document has been granted to all users/groups provided.\n * @param {string} documentID Unique ID of document to grant access\n * @param {DocumentAccessList} accessList List of IDs (user IDs, group IDs) with which to grant document access\n */\nexport function grantAccess(documentID: string, grantList: DocumentAccessList) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateAccessList(grantList);\n\n const [userGrants, groupGrants] = ShimUtils.dedupeAccessLists(grantList);\n const payload: MT.DocumentGrantRequest = {\n type: \"DOCUMENT_GRANT\",\n message: {\n documentID,\n userGrants,\n groupGrants,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentGrantResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Revoke access to a document from the provided list of user and/or group IDs. There are limitations on who is able to revoke document access. Document\n * authors can revoke access from any other user or group. Other users can revoke access that they created to other users or groups.\n * @param {string} documentID Unique ID of document to revoke access\n * @param {DocumentAccessList} revokeList List of IDs (user IDs and/or groupIDs) from which to revoke access\n */\nexport function revokeAccess(documentID: string, revokeList: DocumentAccessList) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(documentID);\n ShimUtils.validateAccessList(revokeList);\n\n const [userRevocations, groupRevocations] = ShimUtils.dedupeAccessLists(revokeList);\n const payload: MT.DocumentRevokeRequest = {\n type: \"DOCUMENT_REVOKE\",\n message: {\n documentID,\n userRevocations,\n groupRevocations,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentRevokeResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * A collection of methods for advanced encryption/decryption use cases. Currently focused on methods which require the caller to manage the encrypted\n * DEKs.\n */\nexport const advanced = {\n /**\n * Decrypt the provided document given the edeks of the document and its data. Returns a Promise which will be resolved once the document has been successfully decrypted.\n * @param {Uint8Array} documentData Document data to decrypt\n * @param {Uint8Array} edeks The encrypted deks for the documentData.\n */\n decryptUnmanaged: (documentData: Uint8Array, edeks: Uint8Array): Promise<DecryptedUnmanagedDocumentResponse> => {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateEncryptedDeks(edeks);\n ShimUtils.validateEncryptedDocument(documentData);\n return Future.tryP(() => getDocumentIDFromBytes(documentData))\n .flatMap((documentId) => {\n const payload: MT.DocumentUnmanagedDecryptRequest = {\n type: \"DOCUMENT_UNMANAGED_DECRYPT\",\n message: {\n edeks,\n documentData: documentData.slice(),\n },\n };\n return FrameMediator.sendMessage<MT.DocumentUnmanagedDecryptResponse>(payload, [payload.message.documentData]).map(({message}) => ({\n data: message.data,\n //There is no way to create a version 1 document with unmanaged edeks so this is safe.\n documentID: documentId!,\n accessVia: message.accessVia,\n }));\n })\n .toPromise();\n },\n\n /**\n * Encrypt the provided document with various document create options. Does not store any part of the document within IronCore and instead returns\n * the encrypted DEKs to the caller. These encrypted DEKs must be then be provided as input in order to decrypt the document.\n * @param {Uint8Array} documentData Document data to encrypt\n * @param {DocumentCreateOptions} options Options when creating the document. Allows for encrypting to other users and groups among others.\n */\n encryptUnmanaged: (documentData: Uint8Array, options?: Omit<DocumentCreateOptions, \"documentName\">): Promise<EncryptedUnmanagedDocumentResponse> => {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateDocumentData(documentData);\n const encryptOptions = calculateDocumentCreateOptionsDefault(options);\n if (encryptOptions.documentID) {\n ShimUtils.validateID(encryptOptions.documentID);\n }\n const [userGrants, groupGrants] = ShimUtils.dedupeAccessLists(encryptOptions.accessList);\n const payload: MT.DocumentUnmanagedEncryptRequest = {\n type: \"DOCUMENT_UNMANAGED_ENCRYPT\",\n message: {\n documentData: documentData.slice(),\n documentID: encryptOptions.documentID,\n userGrants,\n groupGrants,\n grantToAuthor: encryptOptions.accessList.grantToAuthor,\n policy: encryptOptions.policy,\n },\n };\n return FrameMediator.sendMessage<MT.DocumentUnmanagedEncryptResponse>(payload, [payload.message.documentData])\n .map(({message}) => message)\n .toPromise();\n },\n};\n","import * as FrameMediator from \"../FrameMediator\";\nimport * as MT from \"../../FrameMessageTypes\";\nimport * as ShimUtils from \"../ShimUtils\";\nimport {GroupCreateOptions, GroupUpdateOptions} from \"../../../ironweb\";\n\n/**\n * List all groups that the current user is either an admin or member of.\n */\nexport function list() {\n ShimUtils.checkSDKInitialized();\n return FrameMediator.sendMessage<MT.GroupListResponse>({type: \"GROUP_LIST\"})\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Get details about a specific group given it's ID.\n * @param {string} groupID ID of group to retrieve\n */\nexport function get(groupID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n const payload: MT.GroupGetRequest = {\n type: \"GROUP_GET\",\n message: {\n groupID,\n },\n };\n return FrameMediator.sendMessage<MT.GroupGetResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Create a new group. Takes an options object which allow for specifying an optional, unencrypted ID and name for the group.\n * @param {GroupCreateOptions} options Group creation options\n */\nexport function create(options: GroupCreateOptions = {groupName: \"\", addAsMember: true, addAsAdmin: true, needsRotation: false}) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateOwnership(options.addAsAdmin, options.ownerUserId);\n if (options.groupID) {\n ShimUtils.validateID(options.groupID);\n }\n const payload: MT.GroupCreateRequest = {\n type: \"GROUP_CREATE\",\n message: {\n groupID: options.groupID || \"\",\n groupName: options.groupName || \"\",\n ownerUserId: options.ownerUserId,\n addAsMember: options.addAsMember !== false,\n addAsAdmin: options.addAsAdmin !== false,\n needsRotation: options.needsRotation === true,\n userLists: {\n memberList: options.memberList ? ShimUtils.dedupeArray(options.memberList, true) : [],\n adminList: options.adminList ? ShimUtils.dedupeArray(options.adminList, true) : [],\n },\n },\n };\n return FrameMediator.sendMessage<MT.GroupCreateResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n/**\n * Rotates the current group private key\n * @param {string} groupID ID of the group to have private key rotated.\n */\nexport function rotatePrivateKey(groupID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n\n const payload: MT.RotateGroupPrivateKey = {\n type: \"ROTATE_GROUP_PRIVATE_KEY\",\n message: {\n groupID,\n },\n };\n return FrameMediator.sendMessage<MT.RotateGroupPrivateKeyResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Update a group. Currently only supports updating the group name to a new value or clearing it out by passing in null.\n * @param {string} groupID ID of the group to update.\n * @param {GroupUpdateOptions} options Update options.\n */\nexport function update(groupID: string, options: GroupUpdateOptions) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n if (options.groupName === null || (typeof options.groupName === \"string\" && options.groupName.length)) {\n const payload: MT.GroupUpdateRequest = {\n type: \"GROUP_UPDATE\",\n message: {\n groupID,\n groupName: options.groupName,\n },\n };\n return FrameMediator.sendMessage<MT.GroupUpdateResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n }\n throw new Error(\"Group update must provide a new name which is either a non-zero length string or null.\");\n}\n\n/**\n * Add list of users as admins to an existing group.\n * @param {string} groupID ID of gropu to add admins to.\n * @param {string[]} userList List of user IDs to add as admins to the group\n */\nexport function addAdmins(groupID: string, userList: string[]) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n ShimUtils.validateIDList(userList);\n const payload: MT.GroupAddAdminRequest = {\n type: \"GROUP_ADD_ADMINS\",\n message: {\n groupID,\n userList: ShimUtils.dedupeArray(userList, true),\n },\n };\n return FrameMediator.sendMessage<MT.GroupAddAdminResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Remove list of users as admins from the provided Group ID. This operation can only be performed by an admin of the group. Also note\n * that the group creator cannot be removed as an admin from the group.\n * @param {string} groupID ID of the group to remove admins from\n * @param {string[]} userList List of users to remove as admins from the group\n */\nexport function removeAdmins(groupID: string, userList: string[]) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n ShimUtils.validateIDList(userList);\n const payload: MT.GroupRemoveAdminRequest = {\n type: \"GROUP_REMOVE_ADMINS\",\n message: {\n groupID,\n userList: ShimUtils.dedupeArray(userList, true),\n },\n };\n return FrameMediator.sendMessage<MT.GroupRemoveAdminResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Add list of users as members to an existing group. This operation can only be performed by an admin of the group.\n * @param {string} groupID ID of the group to add members to.\n * @param {string[]} userList List of user IDs to add as members to the group\n */\nexport function addMembers(groupID: string, userList: string[]) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n ShimUtils.validateIDList(userList);\n const payload: MT.GroupAddMemberRequest = {\n type: \"GROUP_ADD_MEMBERS\",\n message: {\n groupID,\n userList: ShimUtils.dedupeArray(userList, true),\n },\n };\n return FrameMediator.sendMessage<MT.GroupAddMemberResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Remove list of users as members from an existing group. This operation can only be performed by an admin of the group.\n * @param {string} groupID ID of the group to remove members from.\n * @param {string[]} userList List of user IDs to remove as members from the group.\n */\nexport function removeMembers(groupID: string, userList: string[]) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n ShimUtils.validateIDList(userList);\n const payload: MT.GroupRemoveMemberRequest = {\n type: \"GROUP_REMOVE_MEMBERS\",\n message: {\n groupID,\n userList: ShimUtils.dedupeArray(userList, true),\n },\n };\n return FrameMediator.sendMessage<MT.GroupRemoveMemberResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n\n/**\n * Remove the currently authenticated user as a member from the provided group.\n * @param {string} groupID ID of the group to remove the current user from.\n */\nexport function removeSelfAsMember(groupID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n const payload: MT.GroupRemoveSelfAsMemberRequest = {\n type: \"GROUP_REMOVE_SELF_AS_MEMBER\",\n message: {groupID},\n };\n return FrameMediator.sendMessage<MT.GroupRemoveMemberResponse>(payload)\n .map(() => undefined)\n .toPromise();\n}\n\n/**\n * Delete a group given its ID. WARNING: Deleting a group is permanment and will cause all documents that are encrypted only to the group\n * to be undecryptable.\n * @param {string} groupID ID of the group to delete\n */\nexport function deleteGroup(groupID: string) {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupID);\n const payload: MT.GroupDeleteRequest = {\n type: \"GROUP_DELETE\",\n message: {groupID},\n };\n return FrameMediator.sendMessage<MT.GroupDeleteResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n}\n","import {BlindSearchIndex} from \"../../../ironweb\";\nimport * as MT from \"../../FrameMessageTypes\";\nimport * as FrameMediator from \"../FrameMediator\";\nimport * as ShimUtils from \"../ShimUtils\";\n\n/**\n * Class that is used to represent an initialized search index. Holds the search index ID (which is just a random ID used in the\n * frames decrypted salt in-memory cache) so it can pass that down to the frame when tokenizing data.\n */\nclass InitializedSearchIndex {\n private searchIndexId: string;\n constructor(searchIndexId: string) {\n this.searchIndexId = searchIndexId;\n }\n\n tokenizeData(data: string, partitionId?: string) {\n return FrameMediator.sendMessage<MT.BlindSearchIndexTokenizeDataResponse>({\n type: \"BLIND_SEARCH_INDEX_TOKENIZE_DATA\",\n message: {\n data,\n partitionId,\n searchIndexId: this.searchIndexId,\n },\n })\n .map(({message}) => message)\n .toPromise();\n }\n\n tokenizeQuery(query: string, partitionId?: string) {\n return FrameMediator.sendMessage<MT.BlindSearchIndexTokenizeDataResponse>({\n type: \"BLIND_SEARCH_INDEX_TOKENIZE_QUERY\",\n message: {\n query,\n partitionId,\n searchIndexId: this.searchIndexId,\n },\n })\n .map(({message}) => message)\n .toPromise();\n }\n}\n\n/**\n * Create a new blind search index and allow it to be decryptable by the provided group members. Creates and encrypts a new unmanaged\n * document which is returned to the caller to store.\n */\nexport const createBlindSearchIndex = (groupId: string): Promise<BlindSearchIndex> => {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateID(groupId);\n return FrameMediator.sendMessage<MT.BlindSearchIndexCreateResponse>({type: \"BLIND_SEARCH_INDEX_CREATE\", message: {groupId}})\n .map(({message}) => message)\n .toPromise();\n};\n\n/**\n * Initialize a blind search index using the fields returned from the createBlindSearchIndex method. Resolves with an instance of the\n * InitializedSearchIndex class which\n */\nexport const initializeBlindSearchIndex = (index: BlindSearchIndex): Promise<InitializedSearchIndex> => {\n ShimUtils.checkSDKInitialized();\n ShimUtils.validateDocumentData(index.searchIndexEncryptedSalt);\n ShimUtils.validateDocumentData(index.searchIndexEdeks);\n\n return FrameMediator.sendMessage<MT.BlindSearchIndexInitResponse>({type: \"BLIND_SEARCH_INDEX_INIT\", message: {...index}})\n .map(({message}) => new InitializedSearchIndex(message.searchIndexId))\n .toPromise();\n};\n\n/**\n * Transliterate the provided string by latinizing each character and removing all special characters.\n */\nexport const transliterateString = (string: string): Promise<string> => {\n return FrameMediator.sendMessage<MT.SearchTransliterateStringResponse>({type: \"SEARCH_TRANSLITERATE_STRING\", message: string})\n .map(({message}) => message)\n .toPromise();\n};\n","import {clearParentWindowSymmetricKey, checkSDKInitialized, clearSDKInitialized} from \"../ShimUtils\";\nimport * as FrameMediator from \"../FrameMediator\";\nimport * as MT from \"../../FrameMessageTypes\";\n\n/**\n * Update an existing users passcode that is used to escrow their private key. The returned Promise will resolve successfully upon passcode change or\n * will reject if the users current passcode was incorrect or could not be updated.\n * @param {string} currentPasscode The users current passcode\n * @param {string} newPasscode New passcode\n */\nexport function changePasscode(currentPasscode: string, newPasscode: string) {\n checkSDKInitialized();\n const payload: MT.ChangeUserPasscode = {\n type: \"CHANGE_USER_PASSCODE\",\n message: {currentPasscode, newPasscode},\n };\n return FrameMediator.sendMessage<MT.ChangeUserPasscodeResponse>(payload)\n .map(() => undefined)\n .toPromise();\n}\n\n/**\n * Rotates the user current private key.\n * @param {string} passcode The users current passcode\n */\nexport function rotateMasterKey(passcode: string) {\n checkSDKInitialized();\n const payload: MT.RotateUserPrivateKey = {\n type: \"ROTATE_USER_PRIVATE_KEY\",\n message: {passcode},\n };\n return FrameMediator.sendMessage<MT.RotateUserPrivateKeyResponse>(payload)\n .map(() => undefined)\n .toPromise();\n}\n\n/**\n * @deprecated Use deleteDevice with no arguments to get the same behavior.\n * Clears local device keys from the current browser instance. This will require the user to enter their passcode the next time they want to use this browser on this machine.\n * This method should usually be called whenever the current user logs out of your application.\n */\nexport const deauthorizeDevice = () => deleteDevice().then((deletedDevice) => ({transformKeyDeleted: deletedDevice > 0}));\n\n/**\n * Deletes a device. If deleting the current device, the user will have to enter their passcode the next time they want to use this browser on this machine.\n * This method should usually be called whenever the current user logs out of your application or you're aware a device of their's shouldn't have access.\n * @param {number | undefined} deviceId The device id to delete. If undefined, the current device will be deleted and local storage will be cleared.\n */\nexport const deleteDevice = (deviceId?: number) => {\n checkSDKInitialized();\n const deletingCurrentDevice = deviceId === undefined;\n const payload: MT.DeleteDevice = {\n type: \"DELETE_DEVICE\",\n message: deviceId,\n };\n // If current device, clear the local symmetric key from local storage, then send a request to clear the frames local storage.\n // Once that's complete clear the SDK init flag so that the user has to rerun init before the SDK methods will work again.\n if (deletingCurrentDevice) {\n clearParentWindowSymmetricKey();\n }\n return FrameMediator.sendMessage<MT.DeleteDeviceResponse>(payload)\n .map(({message}) => {\n if (deletingCurrentDevice) {\n clearSDKInitialized();\n }\n return message;\n })\n .toPromise();\n};\n\n/**\n * Deletes a device by its public signing key.\n * @param {Base64String} publicSigningKey The public signing key of the device to delete.\n */\nexport const deleteDeviceByPublicSigningKey = (publicSigningKey: Base64String) => {\n checkSDKInitialized();\n const payload: MT.DeleteDeviceBySigningKey = {\n type: \"DELETE_DEVICE_BY_SIGNING_KEY\",\n message: publicSigningKey,\n };\n return FrameMediator.sendMessage<MT.DeleteDeviceResponse>(payload)\n .map(({message}) => message)\n .toPromise();\n};\n\n/**\n * Lists all the devices for the currently logged in user.\n */\nexport const listDevices = () => {\n checkSDKInitialized();\n const payload: MT.ListDevices = {\n type: \"LIST_DEVICES\",\n message: null,\n };\n return FrameMediator.sendMessage<MT.ListDevicesResponse>(payload)\n .map(({message: result}) => result)\n .toPromise();\n};\n","import * as IronWeb from \"../../ironweb\";\nimport * as CodecSDK from \"./sdk/CodecSDK\";\nimport * as DocumentSDK from \"./sdk/DocumentSDK\";\nimport * as GroupSDK from \"./sdk/GroupSDK\";\nimport * as SearchSDK from \"./sdk/SearchSDK\";\nimport * as UserSDK from \"./sdk/UserSDK\";\n\n// https://github.com/Microsoft/TypeScript/issues/420\n// whenever this lands in TS we can get stronger compiler checking of our API <-> API Interface definition.\nexport const document: IronWeb.Document = DocumentSDK;\nexport const user: IronWeb.User = UserSDK;\nexport const group: IronWeb.Group = GroupSDK;\nexport const search: IronWeb.Search = SearchSDK;\nexport const codec: IronWeb.Codec = CodecSDK;\n","import {SDKInitializationResult, UserCreateResponse, UserCreateOptions, DeviceKeys} from \"../../ironweb\";\nimport {ErrorCodes} from \"../Constants\";\nimport SDKError from \"../lib/SDKError\";\nimport * as Init from \"./Initialize\";\nimport {checkSDKInitialized} from \"./ShimUtils\";\nexport {deleteDeviceByPublicSigningKey} from \"./Initialize\";\n\n/**\n * Checks bowser functionality to ensure random number generation is supported.\n */\nfunction supportsRandomNumGen() {\n const nativeCrypto: Crypto = window.crypto;\n return typeof nativeCrypto === \"object\" && typeof nativeCrypto.getRandomValues === \"function\";\n}\n\n/**\n * Determine if this browser supports WebAssembly so we know which Recrypt module to load.\n */\nfunction isWebAssemblySupported() {\n return typeof WebAssembly === \"object\" && WebAssembly && typeof WebAssembly.instantiate === \"function\";\n}\n\n/**\n * Failed Promise for when the users browser doesn't support WebAssembly (IE11 or lower)\n */\nconst webAssemblyFailure = () =>\n Promise.reject(new SDKError(new Error(\"Request failed due to a lack of browser support for WebAssembly.\"), ErrorCodes.WEBASSEMBLY_SUPPORT_FAILURE));\n\n/**\n * Failed Promise for when the users browser can't generate random numbers\n */\nconst randomGenFailure = () =>\n Promise.reject(\n new SDKError(new Error(\"Request failed due to a lack of browser support for random number generation.\"), ErrorCodes.RANDOM_NUMBER_GENERATION_FAILURE)\n );\n\n/**\n * Create a new user from the given JWT callback and passcode. Doesn't create any devices for the new user, and doesn't initialize the SDK.\n * @param {UserCreateOptions}\n */\nexport function createNewUser(\n jwtCallback: JWTCallbackToPromise,\n passcode: string,\n options: UserCreateOptions = {needsRotation: false}\n): Promise<UserCreateResponse> {\n if (!jwtCallback || typeof jwtCallback !== \"function\") {\n throw new Error(\"You must provide a function which will generate a JWT as the first parameter to 'IronWeb.createNewUser'.\");\n }\n if (!supportsRandomNumGen()) {\n return randomGenFailure();\n }\n if (!isWebAssemblySupported()) {\n return webAssemblyFailure();\n }\n return Init.createNewUser(jwtCallback, passcode, options.needsRotation || false);\n}\n\n/**\n * Create a detached set of device keys for an existing user. These keys will not be stored in the browser and will just be returned\n * to the caller to use however they would like.\n */\nexport function createNewDeviceKeys(jwtCallback: JWTCallbackToPromise, passcode: string): Promise<DeviceKeys> {\n if (!jwtCallback || typeof jwtCallback !== \"function\") {\n throw new Error(\"You must provide a function which will generate a JWT as the first parameter to 'IronWeb.createNewUser'.\");\n }\n if (!supportsRandomNumGen()) {\n return randomGenFailure();\n }\n if (!isWebAssemblySupported()) {\n return webAssemblyFailure();\n }\n return Init.createUserDeviceKeys(jwtCallback, passcode);\n}\n\n/**\n * Initialize IronWeb SDK with JWT and Passcode callbacks. This will request the verify API (using the JWT token retrieved from the provided JWT callback) to check if\n * the user exists or not. The Promise this returns will be resolved with the IronWeb SDK object.\n */\nexport function initialize(jwtCallback: JWTCallbackToPromise, passcodeCallback: PasscodeCallbackToPromise): Promise<SDKInitializationResult> {\n if (!jwtCallback || typeof jwtCallback !== \"function\") {\n throw new Error(\"You must provide a function which will generate a JWT as the first parameter to 'IronWeb.initialize'.\");\n }\n if (!passcodeCallback || typeof passcodeCallback !== \"function\") {\n throw new Error(\"You must provide a function which will generate the users escrow passcode as the second parameter to 'IronWeb.initialize'.\");\n }\n if (!supportsRandomNumGen()) {\n return randomGenFailure();\n }\n if (!isWebAssemblySupported()) {\n return webAssemblyFailure();\n }\n return Init.initialize(jwtCallback, passcodeCallback);\n}\n\n/**\n * Method to determine if the SDK has been initialized and the user/document/group methods are able to be invoked\n */\nexport function isInitialized() {\n try {\n checkSDKInitialized();\n return true;\n } catch (_) {\n return false;\n }\n}\n\n/*\n * Export all SDK methods at the top level\n */\n/**\n * List of SDK Error Codes\n */\nexport {ErrorCodes} from \"../Constants\";\n/**\n * SDK Error which extends normal Error object but adds `code` property which will be one of the ErrorCodes from above\n */\nexport {default as SDKError} from \"../lib/SDKError\";\nexport * from \"./SDK\";\n"],"names":["root","factory","exports","module","define","amd","self","INVALID_UTF16","INVALID_UTF8","encodedLength","s","result","i","length","c","charCodeAt","Error","arr","Uint8Array","pos","chars","b","min","n1","n2","n3","push","String","fromCharCode","join","b64","tmp","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","len","revLookup","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","Array","code","indexOf","start","end","num","output","Future","action","this","prototype","engage","reject","resolve","engageAndCatch","e","then","toPromise","_this","Promise","map","mapper","flatMap","x","of","next","data","handleWith","errHandler","error","errorMap","tryF","fn","tryP","promiseResult","_","encase","a","gather2","future1","future2","results","count","done","gather3","future3","firstTwo","_a","_b","gather4","future4","secondTwo","f1","f2","_c","all","futures","isArray","allArray","allObject","forEach","futureInstance","index","futureKeys","Object","keys","futuresArray","key","futureResults","reduce","futureMap","futureKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","o","defineProperty","enumerable","get","obj","prop","hasOwnProperty","call","r","Symbol","toStringTag","value","ErrorCodes","VERSION_HEADER_LENGTH","HEADER_META_LENGTH_LENGTH","ALLOWED_ID_CHAR_REGEX","CryptoConstants","IV_LENGTH","SALT_LENGTH","AES_SYMMETRIC_KEY_LENGTH","PBKDF2_ITERATIONS","NATIVE_DECRYPT_FAILURE_ERROR","Frame","FRAME_DOMAIN","FRAME_PATH","_ICL_FRAME_DOMAIN_REPLACEMENT_","Versions","SDK_VERSION","SDK_NPM_VERSION_PLACEHOLDER","message","name","isSDKError","rawError","setPrototypeOf","SDKError","iFrameWindow","callbackCount","callbacks","processMessageIntoShim","event","replyID","callback","channel","MessageChannel","port1","addEventListener","messagePort","contentWindow","postMessage","port2","postMessageToFrame","transferList","BROWSER_FRAME_MESSAGE_FAILURE","window","document","createElement","messenger","ShimMessenger","frameLoadedPromise","timeout","setTimeout","FRAME_LOAD_FAILURE","type","clearTimeout","sendMessage","payload","response","isErrorResponse","text","height","width","style","display","position","top","left","src","body","appendChild","userJWTCallback","SECRET_KEY_LOCAL_STORAGE_VERSION","hasInitializedSDK","generateParentStorageKey","setSDKInitialized","checkSDKInitialized","storeParentWindowSymmetricKey","symmetricKey","localStorage","setItem","getParentWindowSymmetricKey","getItem","dedupeArray","list","clearEmptyValues","seenList","filter","item","validateID","id","test","validateDocumentData","validateEncryptedDocument","documentData","byteLength","validateAccessList","accessList","isUserListSet","users","isGroupListSet","groups","validateIDList","userList","dedupeAccessLists","userAccess","groupAccess","getJWT","jwtCallback","jwtPromise","JWT_FORMAT_FAILURE","jwt","JWT_RETRIEVAL_FAILURE","createNewUser","passcode","needsRotation","jwtToken","accountID","segmentID","status","userMasterPublicKey","createUserDeviceKeys","initialize","passcodeCallback","responsePayload","doesUserExist","passcodePromise","PASSCODE_FORMAT_FAILURE","PASSCODE_RETRIEVAL_FAILURE","invokePasscodeCallback","sdkResponse","user","groupsNeedingRotation","setUserPasscode","deleteDeviceByPublicSigningKey","publicSigningKey","fromBytes","bytes","toBytes","utf8String","base64","base64String","MAX_DOCUMENT_SIZE","calculateDocumentCreateOptionsDefault","options","randomBytes","crypto","getRandomValues","hexID","byte","toString","slice","documentID","documentName","grantToAuthor","policy","getMetadata","getDocumentIDFromBytes","DOCUMENT_HEADER_PARSE_FAILURE","headerLength","DataView","buffer","getUint16","byteOffset","headerContent","headerObject","JSON","parse","_did_","decryptFromStore","console","warn","decrypt","encryptToStore","DOCUMENT_MAX_SIZE_EXCEEDED","encryptOptions","userGrants","groupGrants","encrypt","updateEncryptedDataInStore","newDocumentData","updateEncryptedData","updateName","grantAccess","grantList","revokeAccess","revokeList","userRevocations","groupRevocations","advanced","decryptUnmanaged","edeks","documentId","accessVia","encryptUnmanaged","groupID","create","groupName","addAsMember","addAsAdmin","maybeOwner","ownerUserId","userLists","memberList","adminList","rotatePrivateKey","update","addAdmins","removeAdmins","addMembers","removeMembers","removeSelfAsMember","deleteGroup","searchIndexId","tokenizeData","partitionId","tokenizeQuery","query","createBlindSearchIndex","groupId","initializeBlindSearchIndex","searchIndexEncryptedSalt","searchIndexEdeks","InitializedSearchIndex","transliterateString","string","changePasscode","currentPasscode","newPasscode","rotateMasterKey","deauthorizeDevice","deleteDevice","deletedDevice","transformKeyDeleted","deviceId","deletingCurrentDevice","removeItem","clearParentWindowSymmetricKey","listDevices","group","search","codec","supportsRandomNumGen","nativeCrypto","isWebAssemblySupported","WebAssembly","instantiate","webAssemblyFailure","WEBASSEMBLY_SUPPORT_FAILURE","randomGenFailure","RANDOM_NUMBER_GENERATION_FAILURE","createNewDeviceKeys","isInitialized"],"sourceRoot":""}
|
package/package.json
CHANGED