From c36caa71c553a7fed550bc5a0053978ca9e88b56 Mon Sep 17 00:00:00 2001 From: sea-snake Date: Thu, 28 Jul 2022 01:46:24 +0200 Subject: [PATCH 01/18] First AssetManager implementation --- e2e/browser/cypress.config.js | 23 +- e2e/browser/cypress/e2e/assetManager.cy.js | 88 + e2e/browser/dfx.json | 6 + e2e/browser/package.json | 9 +- e2e/browser/src/assetstorage.did | 142 + e2e/browser/src/assetstorage.wasm | Bin 0 -> 605132 bytes package-lock.json | 2353 ++++++++++++++++- package.json | 1 + packages/assets/.gitignore | 17 + packages/assets/.npmignore | 11 + packages/assets/LICENSE | 201 ++ packages/assets/jest.config.ts | 18 + packages/assets/package.json | 78 + packages/assets/src/canisters/assets.ts | 13 + packages/assets/src/canisters/assets_idl.ts | 151 ++ .../assets/src/canisters/assets_service.ts | 125 + packages/assets/src/index.ts | 468 ++++ packages/assets/src/readableData.test.ts | 108 + packages/assets/src/readableData.ts | 194 ++ packages/assets/src/utils/browserShim.ts | 2 + packages/assets/test-setup.ts | 24 + packages/assets/tsconfig-cjs.json | 7 + packages/assets/tsconfig.json | 23 + 23 files changed, 3942 insertions(+), 120 deletions(-) create mode 100644 e2e/browser/cypress/e2e/assetManager.cy.js create mode 100644 e2e/browser/src/assetstorage.did create mode 100644 e2e/browser/src/assetstorage.wasm create mode 100644 packages/assets/.gitignore create mode 100644 packages/assets/.npmignore create mode 100644 packages/assets/LICENSE create mode 100644 packages/assets/jest.config.ts create mode 100644 packages/assets/package.json create mode 100644 packages/assets/src/canisters/assets.ts create mode 100644 packages/assets/src/canisters/assets_idl.ts create mode 100644 packages/assets/src/canisters/assets_service.ts create mode 100644 packages/assets/src/index.ts create mode 100644 packages/assets/src/readableData.test.ts create mode 100644 packages/assets/src/readableData.ts create mode 100644 packages/assets/src/utils/browserShim.ts create mode 100644 packages/assets/test-setup.ts create mode 100644 packages/assets/tsconfig-cjs.json create mode 100644 packages/assets/tsconfig.json diff --git a/e2e/browser/cypress.config.js b/e2e/browser/cypress.config.js index abe283291..f586e6400 100644 --- a/e2e/browser/cypress.config.js +++ b/e2e/browser/cypress.config.js @@ -1,12 +1,33 @@ /* eslint-disable no-undef */ /* eslint-disable @typescript-eslint/no-var-requires */ const { defineConfig } = require('cypress'); +const webpackPreprocessor = require('@cypress/webpack-preprocessor'); + +const options = { + mode: 'development', + module: { + rules: [ + { + test: /\.jsx?$/, + exclude: [/node_modules/], + use: [ + { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'], + }, + }, + ], + }, + ], + }, +}; module.exports = defineConfig({ video: false, e2e: { setupNodeEvents(on, config) { - // implement node event listeners here + on('file:preprocessor', webpackPreprocessor(options)); }, }, }); diff --git a/e2e/browser/cypress/e2e/assetManager.cy.js b/e2e/browser/cypress/e2e/assetManager.cy.js new file mode 100644 index 000000000..6862dd7af --- /dev/null +++ b/e2e/browser/cypress/e2e/assetManager.cy.js @@ -0,0 +1,88 @@ +import { AssetManager } from '@dfinity/assets'; +import { HttpAgent } from '@dfinity/agent'; +import { Ed25519KeyIdentity } from '@dfinity/identity'; +import ids from '../../.dfx/local/canister_ids.json'; + +const canisterId = ids.assetstorage.local; + +// Returns AssetManager instance with principal: +// 535yc-uxytb-gfk7h-tny7p-vjkoe-i4krp-3qmcl-uqfgr-cpgej-yqtjq-rqe +const setup = async () => { + const identity = Ed25519KeyIdentity.generate( + Uint8Array.from(Array.from({ length: 32 }).map(() => 0)), + ); + const agent = new HttpAgent({ identity }); + await agent.fetchRootKey(); + const assetManager = new AssetManager({ canisterId, agent }); + return { assetManager }; +}; + +// Returns ReadableData implementation that returns pseudo random bytes +const randomReadableData = length => { + const rand = Math.floor(Math.random() * 10000); + return { + fileName: 'data.bin', + path: '', + contentType: 'application/octet-stream', + length, + contentEncoding: 'identity', + open: () => Promise.resolve(), + close: () => Promise.resolve(), + slice: async (start, end) => { + return Uint8Array.from( + Array.from({ length: end - start }).map((_, i) => { + const offset = start + i; + const x = Math.sin(rand + offset) * 10000; + return Math.floor((x - Math.floor(x)) * 256); + }), + ); + }, + }; +}; + +describe('AssetManager tests', () => { + afterEach(async () => { + const { assetManager } = await setup(); + await assetManager.clear(); + }); + it('1MB asset (single chunk)', () => { + cy.visit('http://localhost:1234'); + cy.window().then({ timeout: 10000 }, async window => { + const { assetManager } = await setup(); + const randomBytes = randomReadableData(1000000); + randomBytes.fileName = '1MB.bin'; + const key = await assetManager.store(randomBytes); + const asset = await assetManager.get(key); + const sentData = await randomBytes.slice(0, randomBytes.length); + const receivedData = await asset.toUint8Array(); + const isCertified = await asset.isCertified(); + + expect(key).to.equal([randomBytes.path, randomBytes.fileName].join('/')); + expect(asset.contentType).to.equal(randomBytes.contentType); + expect(asset.length).to.equal(randomBytes.length); + expect(asset.contentEncoding).to.equal(randomBytes.contentEncoding); + expect(Array.from(receivedData).join()).to.equal(Array.from(sentData).join()); + expect(isCertified).to.equal(true); + }); + }); + it('3MB asset (multiple chunks)', () => { + cy.visit('http://localhost:1234'); + cy.window().then({ timeout: 20000 }, async window => { + const { assetManager } = await setup(); + const randomBytes = randomReadableData(3000000); + randomBytes.fileName = '3MB.bin'; + const key = await assetManager.store(randomBytes); + const asset = await assetManager.get(key); + const sentData = await randomBytes.slice(0, randomBytes.length); + const receivedData = await asset.toUint8Array(); + const isCertified = await asset.isCertified(); + + expect(key).to.equal([randomBytes.path, randomBytes.fileName].join('/')); + expect(asset.contentType).to.equal(randomBytes.contentType); + expect(asset.length).to.equal(randomBytes.length); + expect(asset.contentEncoding).to.equal(randomBytes.contentEncoding); + expect(Array.from(receivedData).join()).to.equal(Array.from(sentData).join()); + expect(isCertified).to.equal(true); + }); + }); +}); diff --git a/e2e/browser/dfx.json b/e2e/browser/dfx.json index e679204e2..7d9d0b383 100644 --- a/e2e/browser/dfx.json +++ b/e2e/browser/dfx.json @@ -3,6 +3,12 @@ "whoami": { "type": "motoko", "main": "src/whoami/main.mo" + }, + "assetstorage": { + "type": "custom", + "candid": "src/assetstorage.did", + "wasm": "src/assetstorage.wasm", + "build": "" } } } diff --git a/e2e/browser/package.json b/e2e/browser/package.json index ed67b5c09..a1c5cc2e4 100644 --- a/e2e/browser/package.json +++ b/e2e/browser/package.json @@ -18,7 +18,10 @@ "start": "parcel --watch-for-stdin src/index.html" }, "devDependencies": { + "@cypress/webpack-preprocessor": "^5.12.0", "@types/cypress": "^1.1.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "babel-preset-env": "^1.7.0", "concurrently": "^7.3.0", "cypress": "^10.3.1", "eslint-plugin-cypress": "^2.12.1", @@ -27,10 +30,14 @@ }, "dependencies": { "@dfinity/agent": "^0.12.2-beta.0", + "@dfinity/assets": "^0.12.2-beta.0", "@dfinity/authentication": "^0.12.2-beta.0", "@dfinity/identity": "^0.12.2-beta.0", "@dfinity/principal": "^0.12.2-beta.0", "@types/node": "^18.0.6", "idb-keyval": "^6.2.0" - } + }, + "browserslist": [ + "last 2 Chrome versions" + ] } diff --git a/e2e/browser/src/assetstorage.did b/e2e/browser/src/assetstorage.did new file mode 100644 index 000000000..0ac9f4a58 --- /dev/null +++ b/e2e/browser/src/assetstorage.did @@ -0,0 +1,142 @@ +type BatchId = nat; +type ChunkId = nat; +type Key = text; +type Time = int; + +type CreateAssetArguments = record { + key: Key; + content_type: text; + max_age: opt nat64; + headers: opt vec HeaderField; +}; + +// Add or change content for an asset, by content encoding +type SetAssetContentArguments = record { + key: Key; + content_encoding: text; + chunk_ids: vec ChunkId; + sha256: opt blob; +}; + +// Remove content for an asset, by content encoding +type UnsetAssetContentArguments = record { + key: Key; + content_encoding: text; +}; + +// Delete an asset +type DeleteAssetArguments = record { + key: Key; +}; + +// Reset everything +type ClearArguments = record {}; + +type BatchOperationKind = variant { + CreateAsset: CreateAssetArguments; + SetAssetContent: SetAssetContentArguments; + + UnsetAssetContent: UnsetAssetContentArguments; + DeleteAsset: DeleteAssetArguments; + + Clear: ClearArguments; +}; + +type HeaderField = record { text; text; }; + +type HttpRequest = record { + method: text; + url: text; + headers: vec HeaderField; + body: blob; +}; + +type HttpResponse = record { + status_code: nat16; + headers: vec HeaderField; + body: blob; + streaming_strategy: opt StreamingStrategy; +}; + +type StreamingCallbackHttpResponse = record { + body: blob; + token: opt StreamingCallbackToken; +}; + +type StreamingCallbackToken = record { + key: Key; + content_encoding: text; + index: nat; + sha256: opt blob; +}; + +type StreamingStrategy = variant { + Callback: record { + callback: func (StreamingCallbackToken) -> (opt StreamingCallbackHttpResponse) query; + token: StreamingCallbackToken; + }; +}; + +service: { + + get: (record { + key: Key; + accept_encodings: vec text; + }) -> (record { + content: blob; // may be the entirety of the content, or just chunk index 0 + content_type: text; + content_encoding: text; + sha256: opt blob; // sha256 of entire asset encoding, calculated by dfx and passed in SetAssetContentArguments + total_length: nat; // all chunks except last have size == content.size() + }) query; + + // if get() returned chunks > 1, call this to retrieve them. + // chunks may or may not be split up at the same boundaries as presented to create_chunk(). + get_chunk: (record { + key: Key; + content_encoding: text; + index: nat; + sha256: opt blob; // sha256 of entire asset encoding, calculated by dfx and passed in SetAssetContentArguments + }) -> (record { content: blob }) query; + + list : (record {}) -> (vec record { + key: Key; + content_type: text; + encodings: vec record { + content_encoding: text; + sha256: opt blob; // sha256 of entire asset encoding, calculated by dfx and passed in SetAssetContentArguments + length: nat; // Size of this encoding's blob. Calculated when uploading assets. + modified: Time; + }; + }) query; + + create_batch : (record {}) -> (record { batch_id: BatchId }); + + create_chunk: (record { batch_id: BatchId; content: blob }) -> (record { chunk_id: ChunkId }); + + // Perform all operations successfully, or reject + commit_batch: (record { batch_id: BatchId; operations: vec BatchOperationKind }) -> (); + + create_asset: (CreateAssetArguments) -> (); + set_asset_content: (SetAssetContentArguments) -> (); + unset_asset_content: (UnsetAssetContentArguments) -> (); + + delete_asset: (DeleteAssetArguments) -> (); + + clear: (ClearArguments) -> (); + + // Single call to create an asset with content for a single content encoding that + // fits within the message ingress limit. + store: (record { + key: Key; + content_type: text; + content_encoding: text; + content: blob; + sha256: opt blob + }) -> (); + + http_request: (request: HttpRequest) -> (HttpResponse) query; + http_request_streaming_callback: (token: StreamingCallbackToken) -> (opt StreamingCallbackHttpResponse) query; + + authorize: (principal) -> (); +} \ No newline at end of file diff --git a/e2e/browser/src/assetstorage.wasm b/e2e/browser/src/assetstorage.wasm new file mode 100644 index 0000000000000000000000000000000000000000..27a8873791aa86b507cec3133f0a238f9f3dd081 GIT binary patch literal 605132 zcmeFa51d_BS@(O+-sjJpKQlQ^n>KAyIA_|z1RAM|O)ZGok3#DZ}^6Xa%Dpo*AxS^=( zMUSxRm^TSr_YBSKaa6 z>i)cLf8MM9ybszwjH#$*?&OK#a?!P{D>u>o_khF;;#+RMs&U8On||iD-Osz@mj8Em zp_nh(v-_qO6l(dBpWXA4|5Yfdq#3^YUwdxZyW11lXXZP*5{am4-=gkIW`0(bN_U;Cb-FNH;5<|hJ zMX$T)S^O>!%1tl6<&M1qdiQPrBM14$n|oe#zu1%k=D^={`|Z15`~pWp-QNxGzF7nM zlh-h1f83~4D%D!8a`_c8*MTbkDA4~al@jl2JT&d8S}j%URVwjcg|cd8pxLa}E0xXq zfHtVgpMgrfS*u-Gi>s9yRe9!LotMpKvr>y|apgQduGjkGYQ5IvkuKCvRZT7aS8D=H zoe%0U0O~z|HkL{qE^(#y_@bUSRcb?Y2wVc!0Kcdz=&MvI)oQJhbn`4mZ z)QtIWpwb+Qt54F5F@i>I3!U{>wv~ozLqm_NRvt%}rDnXf6qhd6=s`E+AZ*Y~tya>g zX}ETA{J6^FpdlfG9yJAz+gjObm}A1It=^fAQc06ip~3!st4)2I6IEiQTLG8PL438^ z&;Mv5$8epDGKdK5Z@mnXp&1PsIv#)v2I@A$AQXs2q}7Y*SlH#U5ErUjtJMOX zRe9h`IHwpo*T757{$}Z7uqS#IETx){Tb=5kCMj+fO7+;<9jKL9CL<%0g~nZlz0U>gV?H`ohYKcE9K)dwwn|^k@3zmKWc$x9~{$f~)|=_Pm$f{x4V7Q%l5wTC3|EQ%$G09UcU5YyZ8KDd(ZB@dv4kNKX(_t zk!vt~cgNnB?Acv-MQLmHO?YuL1_g@tXKvbi^9u|2Ec^cE7ryMpw-)v-`~Ido?m)r6 zvea4FKE=k=c`w|3)9rwL z$L=_)9e%YDVNz_oq5SpwME#xh_tbyl?WKF`|NY&?f2rTY)1MZRlv^?P~w*QLKH z9L2j*tGqp`()w)U5chw=|9_)$sP;RRUoYMpJ=mC`wa?J{Y~w!u|4nNCZsSvpN9!Mr zK3<-s7DW#3?hlqeQ~Gr2q~Yinz`|?#{+hS1?z@k_2l`$M#J}A4 zx7@$3?~AlH+V^+dzqW6dzrWP?H~jsTzSDglt$(EPn#%tApIR&X>u+y-v~i&Fs`_W` z`Bn9|)j!(!#ma{&pR?x!)kkU{X}r4f!OFBfzqWdBn5jRr=Xas-+BJ?|nQU;O#58exvU*rDOHi z)<0SQC1_)+{_6V2>c{&&U;9Y?7wey>f3ojWeg9m0P5tBbPxpPj@<;Up_2cyueIKUH zFR5KHI2-0)*LT-HL#tn)hpT5B@8b4yo*M6H%oKmQ_|<5t{KjZszE3swH@+5q0_gsMwq_e|s5u24>iZ&N^S{5|_Z9Bn+&9PH zH}$=nxjWqVW$u5Y@1Obm#=bA{*P(;P`o6}~Z}z>1TEEqIl)qzrUxm6(l~2;gm9vd! z%r>^oHZGfOTru0&HQRXRY~xw8jn6_=7tJ;vKie3bZCpFs7@BSTz-;3N4KWXhgP;xt zB$MtFXE<+C;8$h{p~Yvku&xOx0Wh*mG3P6f5o4_tdLB`w+=>^7owg2G5%{8hoZy9!BP@GtF*Hn zC8N=ByVyDwwWFbEG#ZSP`1<~$D(xNE8kfqIYG1A1X!Z|mXq|V-#wd!;zhKja7j2F% zj>?U8F^R9HF|K39;i0I|iQA>5XzfyVq&U1SD(r|3(srAQqfxuy9k$+3Z2lzQ7us=a zw9))O8Wc|#hy7(z+LH{m-rKmOT}b*=#+$65cy(0JXIDq1=1=IeBhhdYsW3`rsb}w_ zU9tC?9Qfjg3)XRz9RHGTXNpv${wZCL*xPAtd7zi8qcPnv7XE^l)@M~q2(rS~ZfKgpGe_XIEh02SfouJ~8!fM%WTo~TwFuYtrikg$)b35a_PL#L3@VclY z1Q%@RQM-68CFexJjnGY$e9`7;JR05>7Y6%w6gB^UYh`26@L*A;H7lk35GAon>N|>` zFSd*Az8x_n)UN3gwd*_L9A$p8+_*eZ?3~ajD(hV-HkEd z+7WGa^4|<7P9a~?s55$R9W47JgfDyyMbkw?P;#OGYr+F?mQi@SD1M4>2n|KaRAIO^ zU*&N#L@D;w-$POB8!8h4zqgMY#?Rk&x0z^Lyt!x4pA$f8?4iEqa}B@Zfnt)9xY0aC zS%I?|-O@wz$Cks_#gWOxfVBtz$*@-1={RE6b2w@`j`}2co|D`;JP^fE(I8ndwclsl zylMttp4wO3^TayzoX6sXq!81W5yWU@qB=h*E*49B1~qkJ)uWnf=5XP(QRLIs{4vAl zsLgDjiDsjJC#wC$=5xC9cy0<^1W*@`p}QZo?#4rR(C{EqTYNe~k>46Y!@lttqYzuZ zJd7bq=Ap*FDe>4A@xlp^zG|ug4Z&~Q(YELY6~kOAViZ5p9YwEF6SInY4}3Xr?2dbHNG@u1+941A@M%ELc5Jc=QEm@q$Sy~EY$G~5XQFk!VN z3^!MR?0s4ha0QXrJ8FF*9_+g}d9?V_q;!2!X!q@Uw0O_1(obv&s8Fq^6bkq6di2rw z9wFs9nq;gWNKY?6tP3M*4r%Tj@`AhbM^qGfA9 zORfO4*es@KDXj!8LxqBDnIBm_LMFZ;5?KjC7<@(^DLRI*uS|`)LP6MP#?o@u6BsHr ze|R}Q5kiEaqkv_Eb7{a(t{_O7*5_fAq3DK`I>e@NL3HuMh6b4BIjdooM+_5-m_^#n zWL%C{jCgt&B}(StktjKu8U-dRPFvZ8m$}AIW~?k252$~5Tpf6w#*SDPp|mDr>7bYb zh6~A%#E$Gw38k9f0bAYgTEp#z-+}k0-L-}3)OLIJatIfGh49l~4G4c+KzObIlDxK% zQ!Xb@gTfx__84tU8GtW{#&CyZRbdW;-j zF-G8|brV_7S`J0Rh){GgMNuc9C|3~e!gS7YP~W*YND^loLLCe}YxNi!U9py13PbIdH6da%;GZuL`f^j}uWzDrHTlcZn!d9!l;+J6oD z^_k1zNGK7GCIQR%`LckcT)|q2^&z3?nX5<9nQse4>rSmtM)3};P4NzVzXgc$iuZ?> zn+YLaGjU%Uy0|>dM6Mw9*}s5IAP>9$3P{1+c!#fbFs1-wLE$f}1G!LSb)Ud141|~f z+pl8M4@Fz`N`gfXn+MH$Y7Z7$qxR)k@cU_Puo7G(4+6ORU%J|3X_!?9BY8bHv@0?( zWWVq<+7n;7{vI%{6(qt`Y=*Hl53g!C{}e% zi#+bd)mv%Ms{e@|v%0STX=(qhSB9DPg4QP$RqcO9_WBa1gF)h?&$6#vhPZ3LGBZ8t zLB#hrug&8&0)Jr8h>ft5MRW}Zj^Vw@tprkv(bGf<-GI}I1FTH2<{;U`#5BJ@%s?r* z(5I_)egF3_M*!BLafxC3v%&cdXgaA!f2#?!w`Sv0*5ajcW$SHas3PWaUH=gEG0*iC zIypv>L-HQi+J?{XkJ$5g=Zb9ULeJnVYS-53k{H+^$@PGww z#0`wRnYsh=1!U&q#TA;nZ0ut31^h!%uaBy!T}1%<6jEvp0qkyE25+gkLtQ#>feqq7 zhq1GWGk)N!1@COiTB#(I(+B0bxJwQjzBNW?p(r_KCA627AlFi<#z=Crp$XI6f2`8n z>9lI$ku1DxGYU+Cy&K*Qew(Ca2=6j2=Zfyq1R#m!4G-Kje=yHdU1qwz{|UxjS_(-n z)S`w7tvG3!oT8{-Yapwb!TB$L`!krz*qzG>-|lF-te0o5MV#lMsK9zDpS2gUS>UU{ zWjExxjG0-M%^K#m8q(7Um&mVob;D=>?Wo8g7SdSG(u*z6ILm}-lJ+JSrPIY-|0?6i zXV!6+a*(EMBQ@fDqj)HbXOef*1=$aSXyiUrQR%rZ@gzfrq8rFpi!XhYc&DY!I=1R8mvvvVi#W8e7RC z%9`q#2>0hu&MKuxA+sjQG{gv6G9CnD}f2Y0@%<-gr zb@cN>h6wfQ2qDickY63WoEsYEFDneaK_3Mf6dujOUJeFApjV$#oE69@X|w94V2tDD z9rfl9EJs8`#^=fA>-)D+o1tL6Wj4T*QXAmOzKT)qS;bhi((`Oum?TFHLd8rzLlFV|KyIb8 z+Nwgn25S~;>HgLuW}IU13ie>c+Pad2$xw8I{@my*O_J-;$`+VdE|P?=*kD|Sm{v&f zA{?C&a_5D{m8I@K>Mw(F#R+Qk#6B%iOmLww~ zGfzOKB@Gj{qSEfWH!R7dSRXTK6v&Jj*1Y%KixFlMzq)Cb1z&1AaZ11IYpu&>q`qjH ztv@X&K5aR?UFoJ_GLtUAZl^#?INburXY`*BpEBath);Y5nJ&qOXZ3Ff$u81*d=nK* zJJ`#W_y>}uatT)XnYgBT&DuUQ({;sbvg7MuEvL5D)oTOTq}GZ7KD7>u$SJ^2T^qnT zDF}_MgbZvx5r3;Nf)80>bVj0VHT!US+?aHnCSX@Zw+8T4s{(j>9RYsI+9u|^Rt4~3 zTSZ$R3~yf>z*nvc;F)y<_{nPn_(`h*c=T)Q=g4ha8^A-W0{D@21o(+-1NaH60{Eyc zFs%;_U$HiTFJBeFXVwwm%hm?);Hm&VVj=(a!Ek470Jm2K@ac5~`0;B4_;ITO_~bg8 zAeXA=$I=7Z+QrBkJfJPzuUBI^T%yk&%dMOjs{@%}=Cwt;*r;W3j7My0EVNMxt07nh zV{(5iK)}83GSfmqh+u(GraK6@;ue^ZJmY%+OkxxLgW&W>2z#&8BU zwSn3(pJPrH4ynYm0Z4e4(9aT=3 zdH=~(1Y;C-CFu*=Z7&=wvOYk+LlWDp65kbIX3dXGfgz-} zZ&{cwmfO^ehqc>~FIjm|d{JWEzMd|2Dgsw6(sB&BR650^*eR!L5XE+JJD^sRyY5g6 z<%FHYtmkX-jP1nLTUA)Su2W`&d^gNNbS~Lp{TcRMq%FYLmH-f@^0z<1OfuVQ5 zgC#JC%}8JX)QkiBQs$hDhc7QQzBrsu+?x20owzk(D-*uyd*m@m+}bD7V)jRTV+kF$ z{<@pEH4zfGrcA^0auL_^X5ku)#a}FO>mVNlW8)GyZTMEn`wzR}8O0yie6qO4Sx5gJHZh3(vZV5lW zCZ>j>q(x4_yN)f&+gkC6J#TB(BMvZR12(Z^d0R`44+hlcCri`PV0!YlyufjoE`N=r zd0Tf!@NFa+p$Ssn*4^jCfTwMJ-e!oUfNkBhtlODwbV#^(zZ0Pp0q71NDxM?(K;HfH+AcBh6l;Ey%%W25@Rxo_tY(sd78R46}E7( zpbLH%rEc9A8nX45)+vOq<+lup#gN1ML+X}BWT{)=fGR^hlCQlZ&JFw>TK&;>jVyIb zT(Ds42}M0rZ{2F8#ZtGH!r2n3TjL}lb@9}jzJ=M~J3DNhA)mgrVxsr-t#u^&75D7v zTi;&Kc}z}7DuL9DC`LSeD?c$Nwy0pc?!>W{zNJ;&1ye_nPhCjgVnt4LWr={&(4M{3 z@;o4)$#c`FEh*>0>57ifnI~@@GEy=sPLsFxQv^q(U28phRC1W>h=hWMz~~u~Wp9x( zfqB%Ey`?q9bP+JRQ4PReDr$M|){^ANpe3vA5qnIiGsh0$W` z*Xkj$O91dCNz17&lH;q!JgZBilmbE|B;&RuAh5;1VH>57TytqV7MuWVetBbi7Elbz zU<%0oc*dtayqTZLUgh4C(WNo>WOR7}NO)Q?hlF!ybOCTTqYG?g8C@&Jh9`8b6&uD0 z3#ncrwMR``KG#x|(UZ?59Q5RKc>zelLMUdGaqfIBkfMApOq?vAYsKjBbgq@41L|2o z8t8z1u3TNmApbK93e(u7hI?ee#`SG2p3SusetNRGgpQtUE-!GdErx8a8?~{oKwo0p zxF8P6vblaTaQQj81iY%84YeIF%<&u$@fJPoYm&@?GF1cJwp}QxSOW5tnS^$`gLe?mY3;bkRTr0+pCvmM2KfP(DZt{c>*O-f^e^U{5o#IeSO@pwm zX|R+nO~YWAhFrl~>69FB46c>y)NTgXQWz3Kgdt1V5{7y* zxV&Jkg!+&Wlx1+O7(t%EwMGQ3JEdm%TdP;L%jIt^H4i=cTSEKgfl@7h%L`H({{nV^ z+-%F=vc~khFY-OH7zhNk71b~U%!04feF8*7T6dbiC5woX%{}gTYe#$|g@_scN=80} zGi;3IcFwPd$DB84nG?z;4-tZN7p8o<;19`UN&PHD$4EEQK?KfHyNsF_IE#zS=Ch}0 zErru7oVM2^Ma!Bulze1yiq=;>MT^_E<5U;d|Ggq6g3>&SJ6+RdG7lzqFG{hF8dV>-z+-$aQTd0C_ zOco_*iC-6R4@JFBrzdEwIF95AS|<=9s|r+iV=vlQV7pu$xWEJplCXpoPke+y7QAz! zOGTZDnN*%72MpgDW167#fRzZXX-QY;$Yah;hNjQxB2CbmF=EI9xi-Hp9dm(PmGU92 zW(it1;)I(ils|qeC*3|-_L&yLyZroWNYL`J^+rTin4q=d8T16LZ*K;};#2eN30gLq zwJ;t?Szj(AK?{32Wv?_INkMKE!zcguH8&1;8k<>qO~vwlmYJ_M5#lBDvsOGwo}aZo zlazxr<(f1~`w&7&`=<+%@iy>l^PNt`4 zJv9q=lAd)rO?Y}%n>*68_CXok5tX?*y2@^W9PuoI!7z#xx5-62t<*xDSscruKm=r} z)8beZX9c$O=W#3=5NiH1q-QNfL%r!)Uc=L~(Em?L_5YK*D;2#dS`1N2LF4mpm7;Yb zWYI`=byKtmH(837OF7d~N|f18iq=#yLaR%!Z^Jh86s<94FQ1|%aoCfhB{R|c%xFz` zv?4b=2SbV$=vvAgwW%-~Xwy}iqQ$T!D=CtlYMDCRW609qQ1nw?BFVnOg`_1?wDfhB z$)hn(k)j3RA>ReQR^Key!2@)?S^?Zr>+D*AAlY35e+rx~Ox0QiP8XzVId*$|6s2l88}M?)K8mGkt?DyzkEd#_{xdUTSFF%IRcn0| zx}|EZ9$=GRD+bt8wblnH)S?trY|8saop;u%&9P9$-t= zS~0+$s#>}EOVwJMve~g_IP+93!x`ArmT4EOj;l7&B9S^}2Ncb* zEi!~%c*d5@;ZLEM1$kPl$A{%9r%(G zgw_XDmZ!CPfGtmJ#Q=Mr*7^Y4Y@`u{g}GW{07ZbH{xm%Gj@Wax2s#qCkOCxZNdP0C ztEG3Ati`J|S8K&1^IWa<8CgD8%iRCPxmxb=d9D`GzrftNT&=KL%7j{w)t1MW$rup90s~QBR&{&0ifW*xH{~iY*o5Ud8Z+-10EmWHLro^F+lIAOq^=dQ+BDfXs>3Y8Rh(3uT9KbyxIQnYOa9 zl&(Q{m(tn#k$ZX6RB!IY#R(N;Cz($A(~vKcJ2hUFt+7kgjYEkto9@#UoiMGDoxzmi z9u#TI+n>xp2YP%JYUB3G}kR$_fubs_cH_5C5JjE4^Z@Eu7|j4 zKIW*pf$Q(m#8q4;ylR!(gZ;yuOSv9v4tE~Mb;Mt7;+ARed^gvJxqc7VajsW#J;YTZ z(lM?Va-Cpc1eKHhbpt@#z)n_&JKxK7AJ?aH9k1D|@8foq+TX?XK3-kT^;BiJvqM$5 zUc+^|Jly$yuKT%O%XNlSNica4xAW0(=P6uI$HN`b(|tT^7s@HJ9G}j0l=6*S;S7Cp z1-JZMO6Lc-?xU&>4c5qudphTHD|~VL1a9Bf8Xnx70MNy|qR!43hFR%<5+V0V-VDTr zvYmn{d8N|hD%D!=P&8Q_EWcC-Op>2z1;>i*@~to3(qWx)D0;A4@d0}~fxNr*rAi`0u=B?armWI0|%c;IPd}> ziw2Udb4najIDya=>8Z{Sw8pHlao>lc(_GcNcIA1EY)gY`Kcicl{kC@Yt7;>)dF-w4 z9hr!pNC7Igej9Kjl4iFTMq0M3!j>6Z*B0IxCk0E_y&}~q{CesjIb;+3igKgP&snu& zLv9D8hW!}Etpcmq`YT&eHx#)T1iLn_2Z}ml*^p#2kRmCAiQyjYMUu_0evfa&P6`b)4nD-x6w}hm)u3yA1<>XRo10^Jqw5BXK&H3{^+!5<>A^?I;y`zP#z0V zN|t`-dq3j6cc~~N5+kV#Gjam0t$(cfWKD+2I@X;mtZB<}dWW8s2T%QX#xzvc!O+El zQl(sq&2-#{>b@fJm1&emY*{EfoBa(pe8h|bX`1baz9$qAk`MmQF}AL?9uBfDXlnMZ zw#?E;!69pMhFQsS0Y{q#ohd-jJ7YTtO#RE0m}bwyXw&d?hV|HDd*`m`$B{|A+8^I| zU4MiavndqBr3~WnR)E<2Ljgy|Vk!BgAgr}sqj_BV173(z@UhHA#A;}7#8$)+aia~h zfCADO)AK+#x^*eVIqqmmgqb68qf^>dXzy$nw{*Z&a@qtoILMmvz{Q;HsMn7!fdLsz z(#LAkO0+ctR7rY#FOqs<-h^CgG3#it3b><44I=T{x$+mm85 zMGGH}V>rJFi%RpP)Ba^c3pXYKGK3zXL-rZ(G=EgM-&Oo^+r1&$^G06gZHOK=w$sfh z!WCPCGK2}4JZIo<)Jd%s{-nd%#WsQcakCGC&BMW#)|48vxve)u4L>1$W0v7(HM`Z; zfpm748A08e?!x^)1Kj<+-!0W6em8g$A<8NhSp|wZSD*6T#V#4FfmhD?-2zzO941Pf zup9|Xe>-r0u`-017XaTa#hud;zN9ld23c&%U2-qT6ziw`^sbq*NRl}u={`+i{b}9W zdEvR(s0qVJoh~y0B!7Iq_<;@WN#@aH5(JL)(gdty5oCKx);#mW*e2v@(>V zL9ZGf5jEm0my)t=(t~MWS=)q2S*E0g9(_zq2WIAcn;E0@yVy{-pDl&0`H*=umr{L1Pxg{$%FzOl(SAj!Vkf zgFD^llgJOuKbZJFGzo^mT@vbQiSdT260D&LZ!y8u6ZmMo)|4(MxrpTeSU-HA=^ct5 zE+x_R;#!VWFK4&2r9u7n2jyI@@z)117QKv%%6L`MC3(6KofOp!uT)mfmqp1$nH^-v zD-rGYbEjjIxCJ)c?s9l>4R_(i4qovMQ)owV%NL_&`bfGsUatH~>|JdRmlu3O&m8!2 z1kX_}?;%as+#el-CJ*YC>nK;rZ^ZZhaI55sK2EPe_|_zXMTsvLz3`vMCoD!0N{ng7 zYr&Gguckl{NK~5>{0PV?bhbd54i@6cO2+FaD&b%sn~wHV1NWY&u!kFN=Qn_GVu}F3 zWTnKU`}X&$W-RM(i8?87$KeOOM_TZ|^D`XH^n_oo;O;rRQTznH&<|J`Ybzvz%C%Eh zqI=b?%{$6a7il z>En58v@>=ZILBZ4g(+=xui&`H>7Jmkq3D5T=5&uY2i-4Bo$mXZZQSZDME0n7q+3yQ zz)w0i2hU5L?y=_JR<20od#yQqI&IPVmM#agpe)D_vAYLCd~6d2 zn;APHJ~lFtdd_zb&{V}e=W;c3o%dt&Y|5otCL>m0{*zlp^9|L=9fh;W9N{_X<87pT z?}$&>Euqt)LgDJd=Xly)I5HqbFcggq@GEm$LqtsTyd6z|E;id-k?W~`6mIHHNwG}! z?}%sYR|!w_51uF2VUTLmRC_$ePv&Z$pxVShoAn&5lq7l28UsG@4{A{MMhWJ~QtyG|+nea%O8%bv+ zyVG%THW$o6OF?Glq-DLbWv7%JQl|sop-v$Hx_rC3Y|>?uO)jP6U3ye>qsf+(Qu2O1 zR`j?zwYJQ5@A3Bgn{4}FnnR8BqXXq8yETjoWPzd<($;x%fe{~sV%`@dd9ayTi=)jR z&+u_wUE1{wopD36dC&0DZtc7vT&#K1@n|_tJc0FyH+a3-i1gF_1#mf2G?g!a@;6Ay z`7eM^Z|KMR#`xMWnCu$iU+X8$wI<3ZG875!Z?(1hV@lXoI`)lB7Fsi$vb**(b&1;7?TAkcA&hNSW4CF_!XQf%yAI_BSi#1{38bz|zo)md_5Y$S);R)jk)rS^X}wX$rXm0*m%0 zkw?Kn@$ij)@3T-Oa)rYeezy~IS`UNg`R{g~m+-rtm3B4fkyTR$gv*JG`tNZ%T>;OM z3)td)C+wwi!8sLHItg93A@$NsI?QblW#DoUkoH@zHj`B|D$yFgsKykS=Gc2WWO{pM zz+*rYKrq1P8X9#)a04hD5jbp9Rl`qZp=8;8|#pBZ(+BLTfDsZr6YEufz1)-+>wIN_6p=PeU{bVNaDslvGh=~vj zaa-F3gh;3JCwuLb>g8!8`6GGPJ@YDoo}br=fqt7J>?xbQ)KFD`$jPd zT6T(Q^~v^@(DpKc6eE~@UsiPV+aQ=mQwum|#tr1`EVIN0@|KuvHL*r&s~KYiOYBKq zOYBK`!x(|M!Huzf8!$auXO(-x(%I!6HBt%?3ePF`vicgKJ_tL6u*-?44s>On%o01X z_HDL|c;G~!ojq7%CNcc2Y}p(;-e6VnKw6ECF&K}uH( zvdCpxu%#2;un=Ds63 z(>Cuy^Z%}OrjQc2G_Nyl!E~K;rcnVZQ!A;8DA+7Ar>4jg0tz;nSpo3`3XB3=)t_&# zX8Lik;0$E!L321wj!68TUBjmOa2+*l(|<}kzq0p4hL&5^lR0;w-qfO1yZwDmg6JtK zX)B2k{%@z5>0IHD>O!?#U8t62mu70&EgK7vbZkCOFq(F!S1q3)P9>HWRgg2KX3d=TSy5F)KSn+2bjj&dP=ob|ys0ryIlD3x0NcGG8Aa z{6U9L_J1wJ@4nao{cO&WV>f9@m#%kFpT%{0>VZHCeF(qz>%FG!W$usQPguN zqn`{@EGv6PH30+ydsj!Nch)^PSb$Fo{iAX3=vx4YBYS#<(X zFGw!4)nzRl&(zXs$Dd)h539L__9dFYbT%*1)Y=&A4Ff6%7!4iMoaSjBt7MpYHkq0{ zLMv^`B+V2A$DH+r|DyI>YRR45Vl9yoQ5ysVBM01;`unczfi@t{?pr}QVn=C3a;|1# zBJKG4ZP1(UDwwX>7AzdiC&E~{En|+c{dIit%jq`Yr^Z7T(5>*0lU2~=7!FSRa;wWY z#be+wV9>@!$%sRlE!e&b)NC(IG!+LIiHR%W^$THPr5>0f5x&xdjAiykWc3`c>?v|* zQ|_FQ8bT}<0kmxm7q#0N7SJ1Pdibu^Cu7zgY!z5*{BJFLb_csh`z4em|MqYj~47`d;GM0%qA(!$Wv^B!UJJ9*sCRs`Q%0ImffA!#vh>6R_N+d;S!A(5p+jfkPA_0lM1 z#@3sH`Ef>@r=9{bgj4OMx~^Re0(6>ml=o%=R2$mfTBdR#xrSc1#kY$i3R;%;;9tR3 z*6c{Ef}f1JEq=c0Aa=A_fh+s&L@!pxcYc~uu8hqdgJM4R@P&GXWaq6E5QY-^tV1eM z!uGr%FAB+wm7KQSJ?Xj&d-HZg0=A8Dm^B7V*)oJR1Upr-H^St$Xs35^)o}Y+VmUh& ze5c=OMJH^je7XQ&2E+V?1N)xdefC+2)X_M z45w@bM9dQnHOZ-0Y6r{_q4}S<8Pm;_G3Xdmd?(?~i9<0Fy2m3W-Rq4F`(p8u+y2CFke zqn-Yrvy?NQ;4WsUpmQIKmmo^ui(^F-W8_?c{IK|+oUkW$tMIjLq9I`>Wt`*oju%(n z){QK85%f>C>5N>M20L98UW8ymubEDRaLKvKnjB&#lJos1+fc&B-+aZ2T%+}ys&$5= z#fmyEGklVb$PprTuzLK+*3$JHJj6-J0-Yp*#e*y9sPqnR%%qWRPzp2S^B}2|S{#!m zr$o@9L|)s2;w?naQC$U(o$V?5;cU+kNuI0IY4|n4V(+gBo}qnXKwBPrSfb$YKUpkQ zxBB^3*q%Fjy*iqwjC&eK?noSTkx#_TiKev2%YB)QrjJHSj-jvzm$Z@L668753`3zs z5g&gIF}96T<1{Jd6z3g4dRYsOD}C^xFj3T@u=UGjo9vUYGf_inPYsx1>GqNAR`J7Q zg7Lv`Y3wE$=~L*SkY3rn#%u0v>;Vs88&>u@h`j)#!vbcsW(bNHi>`v^9aTCG&bUwq zB?o;Yc1tmr6*}@Pb09;sMxB1-iY6Pi*P-y=V$=@HqEQPP8#UP5bvMGWy(7+1s!;Bv zsyhi5Q7_q7kvpdkMmBwT9*)UOeE7DtXBjclYSz^(bnMun24(@&9<|=eF|ID};Tq#m zzIBL>r8g%yt1&;wQ}!YZ5L*`K=@A(#Uoaqlx&tL}u%_~01(1?LBng~5@&HK%J3yFN z6(zfp(p~8&RwbdG_uGJWSQVLa`;U-Z84ze^KZ0KASTNlN0|yTHnW@ zMbU~6Xxv`Pmg)<}g0P1bwId!A`GA3Wu(+#)oXThgM z9)pi((@I8Qv5+7i$!Yr`DsmF5_KB-`8GJVUpKSd(S52MX-=IIw$sfiZ^UXnzWG;>W z;7c*C_gq`}m_JtjXELcrlgJq(CiWwZ`kLlV6d<;k8vv1{Qu?+qKQCMF{2kF5iOq2r z{h8@+e2HHWL!l-N_$#TI>dg^%&@!Xn>f;f_^EIC>w(H=K;yjny=kIFozjv_Q`g=<- zt|SLV=M5giCVz%ER@XL6U^UNAA5on)rP)}eO21HvGZ#uR3s(5RWeug_3#^K)CU09m z&6C&SO;*c|dX+cZ1FiSkJdM={tNjEi8l5T-Df*$PBY!7+qdq=3D$gCtZi$2#evP7y zwG`ONc(6}fESdcATGG7D$z`n8DMG|-jb}+v>DR44jtA?|bA3CZM3IABH#j~{_UibH zA`=*XghS+utT1UXz6hosEO>cezPb@cqQ}uu>%MEYW!+0pnV^v1Uu;WJv z_CsrA7qZGG6rrDS4DDWf#@r}=s~mk}aB3YF3EOmLMlq@wBhkz8{ez`}CUS_}81#Xn zL%@Z#pK1^rC@{8uy=pi*Nz&73{IsIY7?62wS*#M6DwSgpU_|2>VA!CozZ1!$7Fxd~ z)PXdHXEwCiS*PoY(urq8ISWYD3!R*pU!*&P3?)<~8JDAkA~g|pqJ*02)gT2~1eH`z zeIOnr%c0nA>O~+D3zjY>35eCgdK#W%3Sv!5gefA`@tR3O0-4`M(5PsC5j{Z9)$8_H z&ZO+n({-)Z^wM*I<6M%>ghueDEFuvAWM=5L4a3tWrlCd2}#pO%%|3RifgT6 za(et&LCZ%4ZzY-I8Hw#b5l(H%$6ddO#vCOEC&Dw6Bu6I)&q60QD7VmjROX3cB|D)^ zLUB(1n8{8un8YF(WViSjm6*&S@>(w__=ei9#(#$-VaYVU*#LQs&ypuUTP_}vEdsy5 zmu7N`KT~Vq+F%X5Z>`nP9as~Lr~R3;xn-XbhZQ;b*{^vJ{Tuo2E)kk zSJ=XnMtShJDQLF#LBW8mDMA=xf*{61%m$uU`kBOmO~C|T1QwS#5U+8S3&|Z=RhF9F zBWtMVU0~T&@6@*^KE>S0&Cv~Xu zlIwx!ERw5-8?f?DOHt%3$@dAOexoY{l$(&jpp25MhLbkGJ^OY<*idxUVAUoJFf6jx z#=X|WWfZooy-5<9gaE@hx6K*t%>KIz?H4H!ZMX|GHzcfT+S`HVt~BdY0A8-mlV^+& zhNAW$VTXDBjKzlv*CS^tFnKa~y;-hRdKz`dx`7m+o_rhXw2<&rPY*x?FTRfpa2XS9*}h)Vh|sD zURxL?9UK?7a3ps_{3k|J6ko2+n8;QrLW*eqk6`M3GpP4e=FIk>YY7>Egr_B!4Td_` zm3h>eQHc4ZK}lQX?GR~KGoUg%g1ESuZJDVuB?Vkl11QQ+f;FjE6B~F|}jA zrD?X9+9|u0=+HpTisCzgNeL8}h1v3=&4%J)#)cxL1r?Zgu>@7^>p|1XsR|(^=1Ypn z2Mftj8j;QeEGWd4rCZJ*FOM`~#AMC_`|(@d$us+L2B{Y8N5a!f*pGD6wI78E8?g&> zDL4xzj=5}qjO<5^)UAPx0v1@3!iVCG7IQl2Hyaed+Ta1K`@E>pZh#|8IfW1udAiPy z?8sth$((1NGwGPBek2~B9v2zNGW8f#w-RegL(UlQyGM9D2A?Kh6;u=y8g9o)w9fEI9o-4fzp` z^lRMA>Bil^xiDmn2CFpg9V~Uy=v{uWb7rZsu9%W>a0!ogZSCMTPIgNeJ+cZvLw#6v~>oIcd<2hHf+%d+bxpqKE%JWS=}ecWR@Y0=*C4pdme07)%H}K@JG*l zQfH|lI;Wn@4bd5AraK^Q_Mwy0-4YG)c;IH4paV%-=w@8;!?2Q2Sf&%U_^PQos_K@0`I@#)iP%op!ZcE1(jO!D$MygX^~ULZ~z z*2{5T{uD2L;R6H;G?+6EhgdO)P*QSGOS@hH#@joh%|rmOP!#)QCBDVQwi_JE+J|qq zahQp=B7pDmaBx@@J+q*1Il0Jq`yz}jDT6VV1jKLqmF;l7q5Cv!U@{M?N!RYOP#h%fV%$6VhxxcZ|yDaFAUb6t# z8Fflyj+ktRG1HP1JE{5#Z$OsDhKM~S8QpMMJT8o+%f)|V%2#GO+opn@?ju0Gh7CRl zUG$Qh63i-9sj-yM#dhRnUg(;Qk>rK0&hlY2i-qnKFz_Z7x?|WMV5fiqFiL?G0Ergi@ma^WcnhS^Kxk&*N6}5Sf`VeZ6Qt6f=Bw4P7 zNMcSKj>NroB(+y%XlMRE zGYvT`%8q6Vb+n|&E%;E>#T249bK3MEarD+#kXl;a?0%>kwvficSKRuDy~kBoh}&vf zQVA=A4t2Y~5JoqS+2xVS~1ODzdJfgtD%~I;k&}FQ|(5sd2NH zG2Q(p0z1P_%8-mVAGSAWt}43#$+3nG8PT^U2-ZG(roImWFM=WUaE8ZU9D+(ir@aV zf%vvL7Q-bFoN^tKY~t2JyuO0IG~^3sP#rH_a{*tb@SSChYHMBCKn*!zL$?_!7EraV zO_S$RJXv~Lk*E?RY%CKw2`ISqNYyGOEL`ekjvrXoq=fRUb+3=IQHrPl@PLiNLZ6Sk znG^OApXNVuvf)))C^323M1sEkOM#`f|FzO;wjoek0Ap)6TfLJ4Ki;D3Tbw}_;n?N; z-~=>$Y3o<(p5=i4=j*OM=iZp2YZs*COnKVBMY7&l0pw)7lXCmek+`3*8f>D7D@i-dgN$2yY}xE|A!2jq-wE zRy0_3sO5*S9ue!re~C3#Z*>7=PV(b8K@nV>Jir{-rcN6Wjb*7KaWZS*PB0i5J}j7M zT)N$CTM-RB3@ih?^=<=jq@p#BWUS=)I#lW6>kwta*J!tlr~Tnc<4cY}LS2*{RBcDu zsBS^o1B{Wo388F^GVVbXCm`q!MCutU+EF$`p(3b`GTttQvJ6XyUHIp*bg-n%KjFRu zmn)P-nrsEb#d>KMcR5kD{?LX#s(mgAcn%woNMkq^j_z}h{zx;<8uaHrb zejqC0OT+y|AU^C6yEE#sYttu9*hs~VPv`T0%JaF+?SJt&BI&<)d;yPRv6}2Os#(P6 z79jd}#^05d^7kS5&~%#fU6*+iXYlb{i8J^_w?y9bIx+Zx6*0K8aQ_DQ-Z}W;JO^XZ zOFo~AhxzzFj+Tb5P|xSDvwFVX5qUQ4EEInmy7>&208Py6ryKLSd0rL*%1q5?x>;J0 zWQCxcdAl;*ES@W|DMyo@DP=RGNa zYJP1-+qQVVs4>Za!ANdRaWLZ|Jsp(u(H`cV>@sFx-l<%PGcRGRMcSF|N^8{4n2M&I ze_<8OOFUg?7^a#&545Zg4qfkpXr>8gY7;_(w*`L4r*RG99O3Nu~i z2~y#7uEeFnT(=}s=^NK96|nM6Dm?n&N^Ew`(@3RX>u9dh{~=}F{}gQ7<8nLOp0A&D zHP2b=nnW?2gyl)|D~1-BxG;I}gOl33@D0Td%*9ELsifNC1Ek#uCh1QQH|2JJrL&nz z$D}UYb$bx?y7}J0uuzE#oRTX3BNNh-y2YzL%9V|(?vPpsluPs8Z2^YVPvY00C`XwR zEbw*Dph{1u9S7_aDPZnsIe0h9wlLr}QBfJ90l0^0anm#8Vzz;dZKHAWF@tO_Kz2Gn zHk0*075VEaWU{vt4yWMn5`c|Z=zwkiwt>dRsAz&Z8`rDP04*koih%D>#1yDFMS)J* z_!=E-FF=%_dVAsS${;6$JX^?C6i2y#j^>9?Dmo>#pM`X${xKtY5wkUG@drhMn-b|H)?ds#*s`b>=6tQI%ZRg z#x%DeYBWb7vFs2v;w@&Dg>^W5U{u390UVWfnwBR7Sk=RQ#TGCTsQczRBnjldYs1evO7>orDOyW5DN3Lx_M%CizX`@sA2q^^L5PU zYce-qHg}Wi4D#h~cc2dIpo)4a7JYy> z3B1>CIzwv^1f0|$Zx4m<6m2x=q1u1u(t}%MN7)PyWB^sqzZZdLvRjOSG)az5Bd@o# zjtX}&mR?OC_qmuZ*VeXV;W z^u}nGz4!u<`AO41^#~uOVhI_gHhxmuru7OLna1?U7&#(v09mm&Rl89kIc}+JN?R-X z4(UIrNAg0b#4aN;Ka=re8KBSfSm;jM;Ej+RFY`Naz?tRwy+-rO+QV-PYe+WHu6~$S zf0flG$WEs8ZI1%sIKs7~nm{P2!yRPKW<9?@V7Xy>KLzoB+zzH1tZ;0Tp^7=1(f3t5 zA2}v>CF%1V2cW-3X;lr zj-b&029Cy}|8l#^Iu2F(s9@XH*{ktvUQ{}Dfa>>qGLk+NB>6Ftb^nAI~uNmSU!ivMu+WoCl zHGkVCPCirCR{v_7#hndd^i?GoRKp_BQRX$-l$_A?zP+lIpvO+&J&>E#F~1+Rn0=U4 z%}XY?UGba<0#9?kKw-(4IG4b)g_W-0%LzP-e*2u~tz>sY^Hws<23&b78M=^}-E~7L zn29@^%pFZ)9r;+fzq2VRHa7^J3O@{53M|xp{=MXtMyw357`F;UuSPrO;}Shs7DuhC zc4Xbr;`*mGmvHbbSAL}lOF>K#C;NgvnRKQyzDG@&J~`Sg6QfOFJV-kwGfXsz$>4^M zN#xdXSQextY=?5PB=hwHYq`2r!q}V&aD_nc`cpCk!k5wDB{PRX6CGeTu(2k!{_$G;&r}RCiv-J2&v}$`7Fx+_4 z)8`DXCc75m1%J+1Jkdc*Do$O$r#aBE&$;Abn$^t1)JO~gB&5#6UE zTttq?{y^(;imI0EIe)bsy69GGqeFRwCea!Ao5N_~0brTlH-BQ4( z%FEUVVRxIoQ51>_4U}XezvgWdMWKx zp#ccgNdjG>(16y{SElopm{Dlu+nLd@Lqe3@fdV97Gz5)yxmAk!o_Hj4pW-jXBboZF zWD<1S%%>$;Jd&}mag~C=lesqkx|(>Tm|rAcO#Z$n9%;Hs)R}Dp>grl;0^-e~Zi$G_ zq6y;ev#%yC*v}HQFKpAZpQX!xV#T zMv=XqAmlq9WJ^~}5K_j7!jL_2J~`FcF4jYP)4hW($!u4VQ?UH%ahG7eeTb+W+q*Cm zKcv8!dQk^)x7Eu(Okl-ZU?VAB|T+3o9r~FT4xDy%8>qS%{$c>bj&Vl zb#!DYPBoa>C@|X>+Tl5+R_av0S17}&w$RI@1-mk*TESlvw=Ob(K+b@$Il+}X3@s8r z{T|upp(vdE-!A&#wK0bxDprw;2!0YL>MpgZ;%nw+hrLD4xI2%}3yL0H*6+AUGr6H?c4 z(&i}kQimL+PC14&!+3CYTK~=M=27iM1DWomS1F{jWNXQtbWUXN3|z|iqM)ORKKj$ z7T*00I877#`#4sCsDT0#1P%&~vwQin_?W^J^Xe@N&1#PzY>W(4Oj>qG*p_Fe$O18D zmWxT!9x*0sVEJu%c`Gs4X69Z3g@oyhT*5$SVb!n7M)PDr7(-b)V7KcpvGvQ<^~bf?_wC7tGasQy30pW(olkG`t2bm^b$gdq+)%)fBZO z+gV>Ri3@iC##bh3fV)!SFX!4tHg6A!G7P?uQ%EowcuT7b41qFQD3{@>E8t%7Gwql$1w%hu)q#@p_jUe48l}V7C7_> zh%r;bwAfDuz`lx;xH?bd%G;?_pzqt8*X6d)C+}~y|2s}@75Q!n|e&$bK9bf z+(=!+bSz7PPS1Srhx<#X2x|qM_QK!=7XFZ^Pnz`g{Gvud8>*%8l9`GQ^?&7mk2c*^ z(xLt*`aI)-^_DKMDDV?-o3J<)B?sBspHzIa!6*qZ$4~JbC7-fO>$yp^i>`(^B!t3J za^Qa6mRp}tgzf?C@nG7^RFot93SuK#^itbnDo}m2zizqCm(%^&>3N>nvz_pX^~PbE z9y|sXKAHk-28u-Wh56B{*_%>Nib-rQysmm}0bI(oG2_bg{(PBa;$y$^y1(KGQlM_V zg+m>ook9USuaq1FCZ9|aeoSSiF~{+$=%aHnU2^yVue8#Y9QIqY1njl}g*xwF9K3JH_t>-kdz4+JKVm~d-QzLz8kB6ql%>;!6s8tXG?Niq)^UC zfsa9dlDT~*_^LR4nlwEest#Vf>#qOPV*Lz_#Vqe9@!b&`fXqZ2=lnm25JojlMwA-| zMulx+;gn34wRj?;R;GaMx}K)xWe@@*gzQI-Qh+cHe$g{3Cm3XzB2Z^*E{ z5hFIgUAs^2j&yq-w=#P$%6(Emu2w-jyiG;$$SL#s^2tv+GV13` znZt?t<%N~z?azzGgdOwEfK3t<5o;p z_==TicXe5f_NMqt005B0ln#_6XenKjZcyIq?luvFVTm}IqBnDQ``Z$Ry3%m1HghY1*TPVa>>v4UMe7-Qu;(=y+Tpqp45JZV$ zRKn;yD=!b|UP}x*A7`NtX_F{U2d2a|gSRJXAaa2A(@Aq_=-h95G3O+U4qeKd4p<=N zr5dS#^bS(qg%dI|NcnRLCk}iQYPO_H4-52T{W4+8lH-6XCsC}wnmAQWw<-xq->nGFW_#fTP7$c z@wv|k&!-W-CxsB*e8hZizNmG5Y^hfTZt_0&8TwE4D{{As`=vCj4a_&q^=MelD15|U z2_e_8QoHO$3K~{iwm>nkYY0-XT?m)BO~!#LcJR+2>PoVO!J!N;W+7Ol&GoQ`3F!#i zqR#Hj@Yd!bVNuKo+GhvEANF-&C*|CNl}r;u1O)6WsWLYS^Ytzop62uY)~$^XWweW) zrS!vs(HO@QYtba=Fp-=LptE3-B|{q!qEeI_FbVA9x%-=31T`exKRq`qp<2L2Y zLxD4s{m{T~nCmWGB1}RiDb83i>#h?DTKa?22NeWK5eGR3l)_KE_mOYu`tl*td1wK` z)e+$);p2glXr5gS0mIVr#swN%*ULw(dtibb>de6h zQ_K$Dr!wULiw=IP1eXnOZU1UAY4)}sU~a_D;ke^s zN`fHBU9%phC=Yn)%H6Z$WhMwI<|2m~bhIfI*M8;zp>n=w(2kkLmwnZS(pER*P zJGb_b8gzKGQJ`Oa=dG~GyY47NFszvb2Ti!ndAb_*@is+0lmJukzzrka&bE?|51GePT(_smSk2_5>c{IbaM*FOAkQKNv ziRIR>RsF|npRFTS+_-Dv(aOg#X@=R>*S@4R1C}^zze>AYLx724w+9mcIT2hrXh6rg z!!LA~O_>Nv(n!mA?W%i%kQN6lyq$@(MLu&@Cm9poL`BPR6}BN)lc(OMbpTC{nF~!D z4}KAp)ND7j9%|dt8(PxyIS8P5vs%2wYXYNv$@8_eSHkS2acmSbmyq2@=vgQ2n+d$n z!o(JQpMW*2pzyDqhx zGP#=1rjarMRKPgNwKfUKG4q zEMqA+O^nCpI5CBwf@i*jkMAa5eb z(-360{DgQbB&lv?W_c-t(e&elFcJw`@lCsNou~#@F+Iz5v}$sRv1Z|_SDN_vDRZEd zy&=(^Tzoyt72K8N9ddM-7{0Sn^WNTQ+gqhTjQ@0Us`N(ut|CWc#Is!2``M1^7m#g(C14Pi6C`Q2_JQqY*}@=$UDM5>doSP9_w zu8x^w)3KRunADMJX=^WR>EZTChGWSf3){|`43fc`fO6S;+?nALLLlZmju?r0nuwW0 zZVHH~WayclbO*cWGPmNsPK zOHBN{dM>3Cep*j_ke8Lo1JaF50p^@dzeM6I3A>r%gT`(g)IJk#eo_<|G_GB>w>nWi zrKm%H`dY6p%Fq{kur6ixj@}zFw@a6+3YshG^?IYGypxXw;8`*7}sNNXG}OvYxc5LQf0}!p2t}CZzP8s9b@$`r;qUNFeXefU`SG1Th>Lw!LdTzPG)4Uq1atbSlQ?q|IFtV|( zOholhFtTa02(eDX&|v~g1934bDAHw_PiB6;$yClW!6V=8WZcRuVyljqKV9P|y$B|; z&y+uvzI%?pyTNoapV|5&_|c~o-t{>wPxYp+>hxKd_Bu=+F+V3^8d0%znVD(?Q)VEF ziv<)Jzjau$#3EiH6Pb_=w5LoX>cd z5+7*#IwkM}iAC+|Q;Pr3Aoe{IC*)d~P})jDQ6`28IS$;?Kulyx7MV>fApx;#s%?tO z`U)zrdBJ85?`^`om!$k$4PA&&%I)&4t$U)NMzEa#8&s76CuvB-Qw_~Pz`C`sqCXisY20LU6&C+N`M36u`#2@Zp6KI;}JUqZMU*XCCalBL^LfUlD#CkinY~O)}`aFj!F#a*xzccO1jGo z6smhgHk5}XqNwVV$dAJ|I5lo=zv`xsIwjvPRbMZ~XA_-KBrbxHr+^Q66XP9(_ zJVks@O4L+R@og$abE;BEbc}0|wNfR2TSWWO?`Rc9z~hiLmqt)G4=1*Rds0hyV4HEZ z%g^4zVyQ;RCcxJF)EK4%#O5@lUx}o(&6s#tYonZXTtKsef&en+xSSsWVo5g8)}+R0 z;!+dkjz-c%lRKrQ#*{cT1$J6Cqjhww#L6Py%RII@1u%noLJ9+z;huKo*;`s~FnKFG z0|UtZ63gZ{v3NwLXZ9=i_EMV>O_IsvWZ8h#D%x6TY?d{1%mkeZJvO$gObSaWG*-np z8Ki*uv^f6nGD&9nB34WcVT!by`o-`vj3A!X@1tT^4ATtffZv)lUnKiRK7su@RaL)* zSVb-JD<^Kfh|F#Jw?$#;K)S*#26TaWI^dQ5U9~!K3!6Wp!H-q^CoqglT7R!|aJ^Xs zhYiFGO__!!(;zo%QQyB`Yg-x^ggyh-{>J$-y=`P_>8q(1hzNkBt1`er3o`@-idqdaCkxTJOlElz z?8E5VW(2;H?=xPKZDxVD{j=g*!ydGnk2>!Maz00{G0);!qqh)&c5wi1Wt+)Arhs3n z7B`4CWs?`_T(l?iU>k;-LJ^7vDzNfaVtfeTOv0RrytKj+$yQxB;M*(4*@ zaP588UeCGaYt1>=S|X<-IKs!=w$PSVen!y;AUlKA|F2y2pI#>{?0afx-Oi?|bBGYB zeQD($6DBO6q1xbsjhh$U)z_bNQ*`h_Y1g%s&7TR*3~`p@ykgMcRr(Z{s4G|cfY#UD zNRDO~$~Jh+{{!gabf(b*f_A14NaOC+XY>4;5V}-n*$WPuR9v=!#FIWrL1r!)*d~uE z1vUI?GbWu>emqlc@=b&4XPlks;4h)<^Q#>K>D#hOFa2Bk=m}rjDfORT$0LG48Ra7o z`3QIGOX8pAo;v!=k2vYyMoRy-W;-Gl9>X#;>G!JWLVII5898Un1czv)-QoF!X~_2> zs=1}ClEkZ$I9>N(atUwEOTr2n>z_s;o;)qAW(a4&?Bi9n?NusBMaCq3X)IT`^YY~4 zz=t$keK|%90v+aC3~ZYHx#(a14@hZb67cDRdrPIfxPd1u$51MD#6rE@6##?2y z0_v>tb!3^S9D*^F1m>EHhOFaZdE~_|vg|-#N@<-nQdl6Wn(Ef=lHkYag>yw_HyDXf z%eG3bbA0L2f(t959ww4|;%~LPT$X*;ge3MmJ49rRY0txCWKhV&B%)CfPZXd}JhbmkW*i$*fVZ92x<%IZ-NGF<;yZ>$nlO(8VX z%d{eP!tQ2;KZ{`lO6e6GVQ)eJL@}O?9yHdCeqb7bR^9$Nd|dA92l0w?RH<2#P+L@$ zD|}%fL;?WQbjKwX+78^yO|D!#XuK_0y(LDvU=COk>>z%-y%>X81yh0Wl^36+^lR zx;l&mb;dEMT>+lfK%hHgIMc@apiIWunZ8yWTiZ)K$VHPi+aNkw7)1GG@$je*lEUhp zgq^6;#$m&CnGcl9VB!$3uyB~Y1vi;D!<%?Z9sUo;t~EmEzKFI0_V z$EDny$N*gj5B5-o1)gb#TIJAn&E~i)SMKmpaD%JVW}6IoX7_9qCd#D&j*gEDLV$PF z^{Y``6zp`#U(1LFbg*iYv4SDTWHj6P)RnzV--LZ~dk#r3ROr;Nb_Y#|#khBCR(5|> zufv)|TC-(aHBl_1sf})%W9H%+O@i!yp-TL=wnjCn2o38z7?&DOt1hbvdsZ0qsh_WR>}uOteWbdB zQ0TE}TQgc+VN>S@3CU`Dx*~5(HGP_A8^@h<#D_dx9N|*@L%*{REa~6J3MKw$^qi1Y zmtAmUNh$Nc_Peeb-Ct$m&1C5PuEvKsWR5)Hf@96C6?&#u;BQ(&lyq@;M>X+F zpLq(DEY*5{nu=HvF*CjQ>XHK#gaEwUB*E?1O5;l~G9apz|CP$W8|A|o4HpEE!Enp2 zL{($yp0De2M=+1C&*}AuUdex0&ja>#idTM6Jy@(ah=afCADHDJvc&kkZArxwoDO<_ zN70FQ*CRE1Hda4XP4E|ZI3gEgQ7qxcL#8T#IDT_`?>!6kSm6{0nLUHclf0iML&1X10rrdy1VbPXtVwSs6$^fK-D)pXiS06LBnk{0u4NGkQ2OiZpD5a zX^po8%6ihsXvvfn#*<^_qA6kGg4-(rjSZ-V6k_W(^)pp4+?hZI`3yIjWH4fy)P<4q z?_@bN7Jdh|aJRva{YF9^Lm0jX)QNlVDrW5bXgH@Y0cxS8S6EA0Fa<1aI=4+NuwT>a z?LwGRg2aVu!y1J;AF)k)Yy6L30I10yke$vds~VyE{sxxfwcy#{*={`N6FIE~;Fcz; zb(mVdOwgWjAC6)x|A^AcOR97%8*X&Y;W|3KlMc8Dyi4=Bq;a3Rpm94BEMu{xtnr(L zXPIS8dO92a6%4=hgW=n}WW%p7V)(zA5C7#$9{$947CY_C^{h#UQ=hJi=z}DHOJ@qk zT#ZADMek28g!oqgl1aK^7;z;aDgB6K@F-zK=ORGzTRBL6a>*b$eIXzTHyiHD#JRD8 zqb9yaJ{kKy(vJ)S7sYRemJH>?#(|z!ev>XV%&QpY z)3j&Ubv45*{kSlGlP-DOBi~*u!Oh2K&&6*xFEsqC8U85E+VB&GU;1%j{ATl#hyV1V zhY$K+Fu!@(LLf;1$uk*98i1tqhxX9M9)aO z_1?sLxm-Z9*)23Kn@O^~Yxu-k7F(WO(mfchZYVc8v@#^v@Ocb2tFe@CtodP~Ol?i9 zu(smxRkJTXFjSh=hc(3MsumIV;bt)-O}+>waYn+L9%?~*r%gNg_hJ~tx?~okeR@*6 zlz*B1)wl{|>O9?xzaRxf_&mQl`x4oiK8z71T^T>x*8AdxAbYJ@Z<_>CMEt|JHDEhs z)8!VEDUj8B?`X@s*2EmA%kS>H&AX#T^nLLcI!N?;ZrfxH)G|YT^`tsCZxy*;U(Q`q zZb5tg+;L`u=^KOj6qH1n722Dx%7(S&&b%_9PL%vLB2G&93OYy^j z8T~s2=50SZFmJ^rA|vX+E5x7!7b|mHOI`wty`>-y=<)n4`R2vvHwTJQ_oB_NXuOQ2mP@&pumMU5Huz z`o)jO`nPsT{X2HS{Tp0j|E^n7|Mr_5>_XtTW{Lf~c1iu4zTp0?USj{QSyKN-&BApd z@M|uyf5gTufj&-OaQ~7e_V4N?^>5NlMHd3UtCrZmE0@&2vlraIE0);5RZHsM0b9*q z2>dQzV*f5%QvXg~aQ{{=v458?sejL0u)MxR?Vv(Ps?UuG<0^MJ?3XSOHwSxb^-r?BI!EB5WOP}yg_iUSiL&J1GH<8+l#RoHd z5kQ*dCwSmYN3>ZWJyLB}73c-L6+YA?g0#xsfprx&8>YK{s;@#e0;_gu(|05%IX94) zNmDb4$#NGl3z}TBynMJ_xz<;%U=vViEv>}6nNw?tcvowr!Il@xM(#Rh+V(~@4d>fy z_YnWq(|kv|>pu&Xv>Bxh!&a4;i;itd>A1^INTkr#hJrKM>QM7|_9!7d-VG7}svN|W z$3kV8DYFKqh7v+D2mnJ2llo3sjbJQNwB>tW77gyYY$uVH)7{&e_0@!(M!QlB!XIni zFvNlR{$J(M`}!)ECwWT8qs^O!hW)?J-K19^8~TA~9e9+Vx3NF_hXdQ2wN=eqhpLY@ z){z#npZQ_s(dPR5h%5n8>r1IW2Ow^`4=8aL8(X`wFG)fTkMSpK?&q34s~WcsMMG6~ z{x@En{`s$@PydR}fT(FF$GRud>VGCKpIyVtZKsB9sIR4;`4zqnRU0q%96fBIjuhQ; z!_dn(y7-dxvv2%(#qyI<`9D@EHkgSE=|}nK={*hN2(y2X^Zw4Q#Obo>I!nu*$#NpM zno%mVVQtGQi>={&m0GnH5tofYhs{{pY4Sy?X1BCnbqFs{?WW$#hB<9y8P&6%PIiHc z`?wiVmjV`LKfkoH;Oeb{dva^?;vLOR$*r%lIoOm>^VJXVu@0zr?P#teKthf8yrjCX z6Ro_56H9n(vT2C#Z$_(NMX!}tViN}~Cz}!yvN@irgzvA{_Zx=d$C4Y$--m~*A;S*O z&^aeV*1}HDP@j{*+o19&e7b4qWp920x&r9i()i&t{(tBoyU7TK9b)ssQ_b}w%^Q++ zk8;#!djdZG0zxhu9%Bx}y&<{PbKGh<(y?7hRvo_M2h)is*oOBP@h`ClgX$+vPZ6Mn z+3-e#;lQJ`a4SgtGBEtH<_3-_XufD?^Ak`^u zr+U|`eNm?9GFg{3yUrU}m)y9MeEz-M%En|ppBn2aL7Ok3Z#-_H(LWB2HlncC{l?^` z$m9^BS!dn#elZ%NkeXoAi}xF`LJ`i^J-x76cKahtb8^EDP=?g|Nx4Da*FEr1 zUpEYFKqCv)Qt5^rk2G#eHY7Jc0`ijUk;d&qmBx+qSKpwio9_pOZr`Eycf9H$SeRsL zuib&fAlaH}eZ4WcO)w0dxcOCmy&|+n814-~ULWXqFS=ttJM#7nf4ma^Q=O5t^J~9; zeYLKweqqEl=AOE{f4NaZhv-SCe>kOG{YQCdS3lBWR4MDzsgTl>4nIf2mFX0ZkmU>C zB;}5DxG3}yrCgED{J`^wo1?*)B>3FYxOvu9Q#jIPTbTHbg7Qu9I-$k-R{>zn1pKAC zqp^WGT7N$r1>Syhasv}l1)S>z-E>C+_qkJK`l93~9)Ul-^pWIck0hG~x|b$U>gFBE zPwr^kG*n4$r_e1sn6EpAqU0sawf(qVsKsmZMVhLcm?i4E#iz;&G;UzVBBQ~Jd^4?~ zvO2)j+{E0104mHVZcrkBk{fr>KD~aVag(U!RXUct$KDv3y3x47w(w{I&kDp$AoF(@ zn8f%@xNCsm(EUn!gfbf*dDTOG;siG&8;5r6cmVlP{e|s1F+)hH9fIo`n1tKzN^U9Y z00n97ekG}nTT};KfqItjB$qlo^uW&KrX3GZ6KbDos!F)r`cmRxwWBkwAXGWCCTKAx z+~kaB@>8^a&Ou0cUq?Q6O2w0$m|PF5iyFq3x)%I=+8;g%V`k`a^5U09r`7W_+5=jA z=9r7p&#a<-2)n0-Has@8;mwHbT|0jDk)cn#>*FWuJBNnf{h6_Yk%S9=F&CYUi&4%v z#!O<=c5l-P4$mI0P^xWjM)7~3haPX}uQTjKQmV~IJ>91sBt1b6lde-zE>3sd%k-)u zK3<#&=_p>G*QGbFYJE`?RH#;CTmf~$9oYP13K6~+uZ!^EE7{y)OD5YdI@y&eVXaRo z&@8kf&V*x!qMac&_|v8WX`hu;ant$;j#N2VdR1WtJht;^=XTo|Jk=$>Wgu_V!1^fN zp(EjXv@}D6@QXL4a0ElQ$6K&2s5I>`T0XEZIqBHKR`#AP50Ond`jgAHklMe6O-$6s zZcYhz9y$W7FGU3Ou|nxVF$U-AN_n`+gdgHgDMAx$P3Ro_v>gqI{-egNYARCI(H0O^ zdsW#Q3SzdU*S)fD8IR~;F@7rYSZ+qjmMXP@D@B^9?uukoI`%<_uSMzFpQW5l5zudt zQ#hd4{%k7Pff!M*Bp4u+hMn$Wwxd-nW32zuWySop)fqI=YnMT>5wSB~M=NsNn~&;l z#*gaUgaP}(4$C=40Cr6;SPc1;wcFl(ZK&7nUWS~KeqCv8J55OSu5U(`tV=F}{b-wH z7p&rkKkV4vXv>l{i%E2QR6)j>D7AP3!j0)jS4h4A;(%597ofYq7f!O9_lt_t2Q9*w z+&1A%n`DtV(Zz!L#X1E|W}5bNFg^UcE{urfsBd1dcT^OrbqPp))VA)4rfqI&*Bo=I zK$v4fd~HXTHrzHiqTT2Oo@0yTE^+7(_d57`0UtQc zVs6F-UGHoV&PB?e0K!>FN%F!VoEO2wHs(jYhyd>SznlYvy%z|=y5S*v#(M=rPEZUm zghM$Dbs!R3)L~LHu%)`4O=SFBk^_bw6%3v2;ZqzpV_B;4e`s9ge90KdNw%(1tdyH& zHOsrY?q^65NR6vYxktGLaZYY6a#MY&kvnM>7$ycJb6|ozMmw9A!wN6YC5L*2Jh+S} zBDm4uiR^7Oc^+xo+PH=%$JsSp2Qcxm54L_S$uL2&%{8HSEA^aeV>dd_lkJTw5Jv5w zfX-PFn?46SrRy0xRYa2Z#!4m`H`S?iegH?MS-TsdS8!7r=!HSo(g@Obafj}LlBRQV zkbg8gOZp9PzEzZ5TS&bQ4khbQ3)U2 z9g=;_D@Q;j%eIi(K9B4hIEU<8-6HzXC+tu|U;In>S=}c5I%W$$6K+Y`+2BlB9dy#u zyIjgiM{8p1a{8% zNyL9SHpvvQRs}=1@bEwI?~oMZAiZjl-3;8uPw~s)kC7sWKQk>(BMAH9 zLZZ0V8Q_#2%>a+>{K;pac>y!PX(Y2}pxtL+K7O%Wvon@lR!AwwWZNjA2me|$xhBnX=SqHZyYneBQh67PJIVHJ%iz=9hXs$a4 zuR722$f`D)Va?ULJTjf-BGF9i@<=+1W{?A`4OAWj4U7gHMgsvx`MPC5Kq4@puCrxXx5R=HG@Qf^rP!dP6Ya8v-)u}`UGnb+ zO0h#J4p7QhCb6JIdN27=J+f0|;=>Tg!`eV(p4%;9B=VlK2s3nSuceJcATUMOdb1~3= z3yZE9=v#9Rw3Lfmewis><;)VSUr*+>0G%yZIh1%P&!R5s=+leS3f*N@783(7j|UdE zEC;OSwQiO*WoPLXPsuzx-Hj(*l%>_b3}<#dpk?4)wf+ug0YW+@!vyc)myMBqBZbi- zeFh6qdbuZjpuN)b`0Y`1SC={IIY+Ur?4(~~E;HG_@T;4XK2O0(zt$Xwc+PRsuW5DC zugRVCy{nqn$w@y*ma>!n`rxF$zLY8_{o47Q^wjWJa$T0Q)136zWls8ag_E9hS`qPu zlfGU!>3hvd-#JvpRAxDJikLa+*O-%jdC5t?rsSj#>E@)j^q$5ga~JY+Q<$4`xabj? zSRVSAwcw)Ht6cOv?SOI?kaE?J>dEN>eR9#GBd`|@)v72Rob-z?-QANujK8tdt?!Uz z<(^eZ^dK*P^8Lyy(H*b5udfQIZO-{~^)H|na9!@}8hv1KZ5s!H?L^TU9_Dn>V9mcs zer(-2f+FQ}BKW>W9{e@s@0ka`4ui4`c<^Us$XdXI zuNvxeG6WC)8hP+T+028_QNr$enC)_p3jcF&@IOa|7k)6fkDF_$a82fuUW4(qdHqhJ z6Oxf+P(KEf>v3`k-33Fu_G@-F^?~?*{VZgDxw#^&c=(a5 zcyL<-YhA+j9F{~$mt>WWrxxAI|H_|VZpfb9llfowz5&~~Sfb@a(&A80`tfo{bbYzj zO4hc{h}DGP?ruvl(RIL7*3gqR$@&osfg$pWizhnm3KfjuYJZKK;cJrX}9Qbs1Q6n z;RjSsA}BpZ57KMX;YTwFmn(v^XneqExLgT{1;b-Fa$;*Z!HIqDVN@~w6#rya8R_I| z3`EOyIAD_N?gtHEb1#kdqhY0E7-uWuQTR_w%*(-;`A?C}ZRr8!%si+-8zXD(7H!M? zpi^B*XXXdJZb3gNt{VA18*!wgqDy|zwiFvKN#>Fa4o{*{)Kt>h>hMIBmc!FZ@HNi9 zx^L48f#I2N6DUk|aW0FA64|M}R*d1DnK8UgM_y0%33Ool;47)T4{;;ET9%muyS+Wx z*?2wJCz|NT_)N~43UWV$lowRd9!0K|)P0FsR*Y+aeGhKIKD^k}Y$_ptw)3VCKU`-D zMeKn{mAOWZ@|EEOW!VUVB#-Tu7!ivbZZd~7melo$xjVJ@y*qX$Yj8Es$yEAE55gTq zkqKyM4SNM?om+d5HxRwNb>38Hh-T#Y`4wCpY1dC94}s=nAAD&oIv?T~Cw!q^ncyH` z&s;m{$P7_bT6XtnuB@1?=lhv5SWlgRSpiGlb2=u~Ia?k@eN`ZE9pfV=OyI(_nEv|j zK}D+y)op(GSrN^RV0c{yLp)t{1SukHe+-SS6@Un=~v0`WfdF1Y_vTb62Qy8PNtASvRrAG&8HjqRT*XjRr* zx?+}UGs#{72!dO@1CUp@Z*5*F;sq@P_N&ZKARiU>_bthlB{Owba+S=~U6_8PR8zO) zf|}s+8?7Xo-GyhoO)2gf@6*8tRyp}KIYepFlrRUUd2kNYRdsIq(N#(EzG7Y=I)IA8 zoVsT`bDMIWu?P_KxBs)Hovn>Pkw9O;=grM0Q9+w{+HLiWo~T#(s94+S0*K(HF>gsE zFO5!x2lHg11NCIL>2c$14+IL3Z7E`RTuRnu*eJQl)ZwL7d_wShud%D3bg_ARX8LJ2 z66b~}O_Nck{N8I&YK&Gz%N35GXED$K=Xc4aieDZ-bh&?1!2@Z=7{%& zw!IS8*Qr28tnOgqo=y&c2H`^R)YDq5nZ)lY6LAumZ+!j{&{$~Nmbwvbibp1E@Q&k^ z?9nt6)EcH4>~OCn!VIru4-33~NZM*cG!Q%U2X!t|^g)celPf!zlTnb!I-?-^ez8#z`WHSQo^{FPU1Plg=d3|30BxX!Sf3 z3f5;VaY+-JvBb{Vt~{GoIx=TsS0x$n9= zS+&r_uGBQ<6KndJQcOC{n%Ha3JF(SXOiN4>R>v?&n5$6l?BWkD`P7(`tMxy?$2}n6 zn;UOoc?27p1$;$81bGx(5g9cJyE1CZfG;ne`%!}zF9ZG@FP;Pc$^!VV;}8#5rYbH; zG^$z<`0WmS{B}qX&5!|~V)Ibd5`f=a8t~B^SZ7=;6Ql~pt`g?YFeD%#;Lsc6BY3VX9zHuffkNb!r{KUBc3jW*qsU=x9*fW4&s zvLCQwL^I?P3g*XLss&W$_e?9#O*1L4=M!Job zcAZjgxG)e%2i4b=8*l;BYXQBkWQAr1gy~k?Ge-aPl(@TW0hBIrelFa0nXbPqJdMNX zE<(!onV>Lpi!5gf4i;>C1zRcWnI0;3flD<+3L4ab@3Lf>6wS6m|6C^hvp4C@k_-J) zH)t&M1^sj0GC>Jkrnt*x#&Md`1x+hw0bMK!b+PY){h?^C$l^GuyEd7@yHD`8KwX13 zc`k#X7G^4zB;pZ~cm%j@dQYJ*xmh4A7J_8db+Umu>&j`ynlWeI zoH;XRm=da7Ky`OtO`*PZ_)j-fp+HWV$rRyf6cTM+FXzs7j|i3t=xjdi2z3IYEng#I zcHMk8%P_|piniQ?#6z{Y6R8WMfEMRgzd4VHRZOtuR<~+NF2q0wk;TDWND=mj^kzEA z#=5+9XR$*~5+{ zcL?$8m9h=kO0p+Y?URdsN@Hd*)Rn|I_Dn;TA7~ykKhT$zUz1sP%gZb?A4Kt^7{p8= zyFlw8q@C`URwenU$wtMJf2u8=?sxx`ps_!PMvKb{_E#bY-or0(gE{V~Pu^PX+r^I2 zsrGHn>go#HS8@N{q-Lw>qi@#LBfY%6^p2>LM>ummJ`ffL(PnLXUgEhUSp3};pI^(0&bf&`PO>9V_ z9OuCA{(WxZ>edO0)$~X$@9&W}sK1A6q`nL~)pOD+nc_a018f6k4b%od<6byg4BaJ1 zYkwtdX}zM>54TB@IW%;&Y&AXFrcHu6`-^u=IaZ`FjOb9?#@Yjk>L+g0vTioMnpH`E zvnn;}DXy;}yN&Y{o4kn1f#RuM0Eu+7ip8Ya+0B}ptgIFInz4rfOF^P3W@6pV>Ru3} zq0Qgb?&v|T=Ns+z6a&T`(TTQn1y;vu%FSX{#|+FIC;068PqMu@K#~cIKcIo1#6OVD z97MRpGJm2f9Q>yW@C&pj1X^8;!o4x+TZIFCjsqibqpyT%ddFMr>Ks*~TabqJGD^I6 zH63QFb%D8=7!+2FR$<{+_{2LBQ=%0s9AyA8745gPJsm5i48g|jByPtFrky+!MT)x4 zX`4*7p~YDEGTGKE&w5S?BijD19BXUC!W%bu^(V=Fwlrk7b70FW6L$9 zV#FAk=*G!n%+u!_^K@18FN)sJg8DNbWbV6s?kD*D^)UDU^j3}iNkQZjyo~E*GSYO6 zb6=h2-grPXd+g+yZ|wVQT!(EdPT&DH|3|}kj0afCu_8rdKg5NZqcA5LJ`%o6)okoG z>IvI>U^6{V&hyPQWzuQgx2NH7msNVRcjhgRYP5R<6dhtRqL+Qvoe|@AKH7b?*`p=T ze4};TK2WeHh3Qiz_h#iB&vARQNYQBb!@>e?kB2X1+{W}F5;I?!jd_Ip3y*nUq?y)G zPtng&&2*>Fw7B?~J`k~)epDaY0}8;xEeNoh{^1_O00{=YjGM$Tb~Fxm$}r$07rD36 zJ1lEHm?(}1c4Hyw4)kG587_E!I$|j!MT%f@ii-`oUR@Y)rta`N;}~Gjn6MyI#{ihx zg3zEi4f+jCT$6QN9PO;;`IEey(TfYXGi3o+mw?m2os}&h;6_bYmj#@ods)DZ83G(@ z9hwB(2m+c0KnFvOQ7+3iR_2w`<&0YZi`p6HTLnyHeO)rH&N4*54RRALOujZw^@3cH zyVG+!euDqyx`j(7=%pt-r@Et1x8rU>yXuLkO>}8>&y;d|-Eh%z-Qq~|*6q0wI_2Er z*?I1A-6yRlz@#Z_OwQv4l?CUWD-I9!uys%NLJjG)r?Y^Z2~Yne=GCiXhYjfip5>6#(k6gnWqIu%mRHD!51RqK4y zDWpecI>nUTzzB=c_{zW$5=<5-oR4m@JUYA(ODkiVg(KZOn#Cwy^lEw#a{F*eyfAb; zF$Rok`VEt%w@c1rZ0@lypL(R?4%W;j)jBsP z>t-^6UoJE^DqwSCOMq@$?=E$2LJhwm3AvC$-_5s-_!tjv;`2@3T!ntgWsK~6=<|@B zuKlg1$C=vqYifIQkq+6pluV~TlMD4DOsxrZC%f^IP>1Y#7B#h?4K0?*&RKMMYG;hm z%rmvKBp)iRlbu%zBP$bw*jTINb9>c1Q>&~ClU)a1ziNuj+Oi1maau3b5;=2*318x8 z5C=;xBeKKPBLV}f&}z8GRhB>#3a4{Pti8~*f_@gboR#4iAu;`XyoT3$4g2dGqdQ4C zY)j_@xuT%z5&IjXd-?c`eS}em5!y%OW%K|aePxI^4WcHJMS#{vN-1Y8ntcXyK30#I7uBu{~Nfc^*m*D zoha(ktQ{v8>p?DnBnn=+Sj{mOuqbO${gF_&6Vh16@f8AScIF^vwMQCc(#-BXw)UqP z?JyBULvJG1_^4Y&WHCk1Ut%geF|~%V67=HCXm8E#&}!9MMGKlG=zpINL9GpVTTkYc znI&SZ%t_;}D&ri-mO=%`QTt~KUM=O7l;T2Y^~X#MwwAH6(=~$IxnPV*=x`)wAr_Dv z*R-&^!{VgljnO6?Mw(af^j>m15~C{SYM*_c1Y{5J+0j^V$!4@8ATs@OxVt9CHX$9( zAEm$&R2X_ApiVZ*92X$H!XWKjU1EdN)n2TlIt)uiS; z3)7RXFt=Zu5>`vBRk`A@PKt4`1NrJe-&h%JjF$6_o71Q{=j8THvzqX2P~SAE9f3A# zc&JEXpm~DxwyBoNqe&XRlM395$jAZ~S?6Bsotq}l!{l-Hb+V`+#dJj@47*$k?qy@z zN8gxGu57hjV>w^uSTRchDxsY5kfGh6&{UvSmgT4F1+^MoiO#7xWj)kX=v9tMxs8Sz z^}W6|Hp-)8{1otyYF5B%3)yNZSHi%&9AF6Lz$TeFij}t7A1+a=3*?a^MYE|@woz-& zEs>$bGdRWS{&{Kv24VEXc8OxU3W~*umQie1iDI>NPo1~VVsa1Qh;WJpHesT>0=lmk|3YophQvN#ArB&USh10pAT+brU-yqkC!?af%Arhwe$1P6En)Y)63 zd4o~{q}u|G6$w6(*6hQgtG1v}Ksk9OIRnm8in%6u%QS?X)lxyhknO}xbxZ}EUz_X; ztXHOgovL$!?_$c+?3?B-hGs%b(15u!W=-BxbC@n$%9d0FDv`|*OmK`A)0}F@A=Gnf zU3AT^nsyaU^!O#~Q94Xyh;Gh~HuGl_T+|BA#*OOZUmbr)1OZX)l-MtF_m!TVm z@QOa^wNbj4C^x7^O30HClIwy)aGc%UB>4s4!+JgQ4H+S&Q7QicJ^cdkF<$wB0!1jC za?aq}x8CX6*l_zeX}T~LXC`g+vi(!(#eGuQ2h2ucTNb z>&ZF2ho??Y8sVv(!31@Rd4SQ zUTdaRN!AN!th#l3SR@F&_&_JC)}>84s!TB#B#v`Jv7n|r*TghM+L$@3;=i@N`VY?$ zM3U!TUF3cmw9ayK#4$fx^Ls-8C(xQ2tHvLtyXz~%-F?iG-rmst;>sIpX+>wu#z3vj z0H{-l6?Sa>3LUM+f3I^N91PAOfS~pL$*Rm$1_*<41_-0^0Emfd3m|L`wb^dCTR;Zw zz3%jxZ*hm=7dv&rSF~CG2$rtKf7-@{VKqH!cf)Sk2&=e<{-~-g0RIZTJREu{He<-* z)AM73(E)GWo0g9=M+E(lSKrRXGqA?b62Y&W1=i-1wOFiOaIy}zbfk=thL5v5;vH^O zWq5b6%}Zl1Tz~h5X%iXFhkPf(cdQxx=?}iiN&3qLN$lGBwaB zTks!Nu(*xA<>S2b7V?!F^Gfbj_gm@NsI`Tlk;)42>hjao(`pZ~KqB}Wb#M=1HL3PT z^%@}rW*32xGh{!AT@*Qp#A;SW)ead zG*zAZJCRCai4qmk)=Z8f;z&7Dq+}J3b&H*>t+CLl8TUmCBqw7|Hw4^9kiN!GgSBL~ zOx3e+k6*Vb6K_!u2mxSloU|DVB9&hwcIO~8eItGs{g=ig$f$5ARKmv!iw+sG z*n&N{wF1x-{+@ph;U|2~^bxv3KSM~u`TI##u*Udvo$TCmvOo&fjDUrRkdo7;km1ro zHq2oOK9GzpDEB2r?pX-NPns2|Eq?~6TtS2ab0m2Ce`oV$DmuLiSX?!=aaP>lYGvA<33#*JwZNt#!{fXz(+gSP)UtNa2uZ`Mk z@%uRNMj?@gzLUAp50qV7o50e=@dSDuX4R&X3M^Y#HkyhCo=A0-7Uw9K$*A~EOfiuW zoknyr>l5T?n~j>}h02oNwG8vxjkTi$n5kk*t|!;hl7;x7iCG~>Nzo3!%LqE%5nzFa zyq8YQr$*@NmsFNQcP|&BoeK&;Bn7ZG6-ruTNr?<+&Fi3V5uA8K zmX+6#MPIwEr?e739>{uH8m7oX>W?7Di|veJQg$o$Lkcy?VGL5U$(;#B?Zq7dq|(G& z<`-p{R5j%DJKfP|3mZ6}&0<)9VHak0nOpqF_MN)D9JHM^!VYdF&T95Vhbe$sy4a** z#ZeE^(>8;KWJEwe!!XrJkVn(UK;~NxY5D|%_gWvQ(Vzk~#80V8h=vyvHszJsS>RyE zI4?%+{>BAjl6XZczx_ANw=zz(B3slNmzuqnJvYRTFB)P6c0qfZAreG;)}GN2whJ?+ z!T3P6a6`;+w=)?bSyzr-)3sUHCA5`|Pc-U<#f_a!&sV{S@zfG}S_K6eONbdU=>QvN zz_c0KZ<0m@S#MZ9VFnN@r^qq42$V=8C?GawHCPhE6E$Z&EMsT$3n?99-ShAZv9)vZ z3qiNcFDAq$=&;y?FTf756`GJ~b@)W_da!PW8PX9`oBZ?fdXuo<3O{%#jZbww(mMrc zi@eq+rL~pQ=mIQ{leGy&s(h-*=XDKtezi*PZq@H5iU zM8>yZ4Q0L+AAlWV$E;1t5-{^gc|Z^9mFEOc$v7fr$HOZb$J&W{Hw5Ib0QGv1B`muI zl4+eXX0YkdT{?hCb)4+j7#)^GfqzVOI&$qsVG7E~aCfeZ9Ai3{1@!_Wk_qKzP25@& z!Pg9P^qyR$oVI?QCyyA4P`?^uO)!zmihBTYn_Q0yt-8kw?rXPTrMNhY&gVjUx?jU>ZCmsmYuBa9y)tgY?qYFw+%Vc)(y zwZ(m+x{u`d@&Ip?WFTK*LB1G}Sadbqy^S$6^wuq&30vs#8HjII)5_g0;6d@%gvrzj1>#)+x(f(e z#@&@vAF_@gB{cMNw(z0W_&ul>gVAe5>Y=SonhX|NhGzlUDrT?@tBl)}!3Pk?D;Q;O z%h*!@NWXMxmSGykM51N!9ci}x)rccd2!_#b(2WTbb}jv z-?m#!`LufTPrS_Ng}4O%&Sdeo40AZdf&~~@JZD(32?oAD0uEy|LvhCo3l_#QENUMl z($hN$sn6grAC;(No5V47Xw(=2@GZ7U*cyPE#?FH97CZ~b0N39Q9a^N#xIWna3HnOL zm-v8&M>L>QD*hZV_>dT{4d^7LExb*gL7sY?O*SO*WVBZv5@u;C*qu94Y0K2-(cIBQ z^_H@)NP(S2XL0KtF~Oze14|yxp+jkA07M?U9e1elwnr2|*6=;lJs_GXF4&oAz(? zL5%x1N+m$S_?!B0mJc7&hXF4!g--h*>3i`jJg)RMPnQcL!1Yi6tHD*A_@v-!F9w`3 z3bXfy89RyIq0nTZmGJ{Dr&^(ET1Pr+1y6V6#P4*F4j2449W%7&bfhv=PjwJ)ZgoKws%5l*V7f%gk4gh5fcxvUTldR4=P$QX={SGmLlX=~vZ zoU|vJ+-+gaHTkFU;N{U#QuaxJo&v5~8O4)O<`88R)*;bCC|9Wv>OUzETe*}1Jt#Fp zsVvX~9#|?hY)(fgv0TamJt%gTVtJqk6rba=2YN&)gjy~)jlV~FJwadA>|S(z0>Nq) zCKjdpi}G{|@LK>F;V0GyrYTI2%7RlC>Q$3OWn2iRCQfb>rL}a_(jdu@QXMJ+!p!Kg zw==!e=D_bkG)Z6*9tyLSSb@LLm`&#_#Di665=_i78m-=zP{t6?X?h;So9fVUG};13 zpMV$m;7CA;ymtnLDPTnSkN~2ElVXcZTb~gb=HN)wRq(YGEQbIG1}o&VQ~)kyCyaz+ z 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 -EZLc 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 XEBuF0fYgWXJrPRp`gHc@`riKoK0K_M literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index e67aca4ef..d77a67211 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,7 @@ "packages/identity-ledgerhq", "packages/authentication", "packages/auth-client", + "packages/assets", "e2e/node", "e2e/browser", "demos/ledgerhq", @@ -98,6 +99,7 @@ "version": "0.12.2-beta.0", "dependencies": { "@dfinity/agent": "^0.12.2-beta.0", + "@dfinity/assets": "^0.12.2-beta.0", "@dfinity/authentication": "^0.12.2-beta.0", "@dfinity/identity": "^0.12.2-beta.0", "@dfinity/principal": "^0.12.2-beta.0", @@ -105,7 +107,10 @@ "idb-keyval": "^6.2.0" }, "devDependencies": { + "@cypress/webpack-preprocessor": "^5.12.0", "@types/cypress": "^1.1.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "babel-preset-env": "^1.7.0", "concurrently": "^7.3.0", "cypress": "^10.3.1", "eslint-plugin-cypress": "^2.12.1", @@ -113,6 +118,18 @@ "pm2": "^5.2.0" } }, + "e2e/browser/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", + "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "e2e/node": { "name": "@do-not-publish/ic-node-e2e-tests", "version": "0.12.2-beta.0", @@ -282,14 +299,13 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", + "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -1735,6 +1751,29 @@ "node": ">=0.8" } }, + "node_modules/@cypress/webpack-preprocessor": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.12.0.tgz", + "integrity": "sha512-D/eLKKlgx6c/307FaCmjZGjFA64G29aA8KcCy6WqpNK/bSnRdPquMW2plemIsT/B80TK2DDKzZX/H3FcS41ZDA==", + "dev": true, + "dependencies": { + "bluebird": "3.7.1", + "debug": "^4.3.2", + "lodash": "^4.17.20" + }, + "peerDependencies": { + "@babel/core": "^7.0.1", + "@babel/preset-env": "^7.0.0", + "babel-loader": "^8.0.2", + "webpack": "^4 || ^5" + } + }, + "node_modules/@cypress/webpack-preprocessor/node_modules/bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "dev": true + }, "node_modules/@cypress/xvfb": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", @@ -1758,6 +1797,10 @@ "resolved": "packages/agent", "link": true }, + "node_modules/@dfinity/assets": { + "resolved": "packages/assets", + "link": true + }, "node_modules/@dfinity/auth-client": { "resolved": "packages/auth-client", "link": true @@ -5667,6 +5710,34 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@web-std/blob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@web-std/blob/-/blob-3.0.4.tgz", + "integrity": "sha512-+dibyiw+uHYK4dX5cJ7HA+gtDAaUUe6JsOryp2ZpAC7h4ICsh49E34JwHoEKPlPvP0llCrNzz45vvD+xX5QDBg==", + "dev": true, + "dependencies": { + "@web-std/stream": "1.0.0", + "web-encoding": "1.1.5" + } + }, + "node_modules/@web-std/file": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@web-std/file/-/file-3.0.2.tgz", + "integrity": "sha512-pIH0uuZsmY8YFvSHP1NsBIiMT/1ce0suPrX74fEeO3Wbr1+rW0fUGEe4d0R99iLwXtyCwyserqCFI4BJkJlkRA==", + "dev": true, + "dependencies": { + "@web-std/blob": "^3.0.3" + } + }, + "node_modules/@web-std/stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@web-std/stream/-/stream-1.0.0.tgz", + "integrity": "sha512-jyIbdVl+0ZJyKGTV0Ohb9E6UnxP+t7ZzX4Do3AHjZKxUXKMs9EmqnBDQgHF7bEw0EzbQygOjtt/7gvtmi//iCQ==", + "dev": true, + "dependencies": { + "web-streams-polyfill": "^3.1.1" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "license": "MIT", @@ -5830,6 +5901,13 @@ "@types/ledgerhq__hw-transport": "^4.21.3" } }, + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "dev": true, + "optional": true + }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -6272,6 +6350,205 @@ "follow-redirects": "^1.14.0" } }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==", + "dev": true, + "dependencies": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==", + "dev": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==", + "dev": true, + "dependencies": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==", + "dev": true, + "dependencies": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, "node_modules/babel-jest": { "version": "28.1.3", "license": "MIT", @@ -6349,6 +6626,63 @@ "node": ">=8" } }, + "node_modules/babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dev": true, + "peer": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "dev": true, @@ -6420,103 +6754,615 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "license": "MIT", + "node_modules/babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==", + "dev": true + }, + "node_modules/babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ==", + "dev": true + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ==", + "dev": true + }, + "node_modules/babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==", + "dev": true, "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, - "node_modules/babel-preset-jest": { - "version": "28.1.3", - "license": "MIT", + "node_modules/babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==", + "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "babel-runtime": "^6.22.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==", "dev": true, "dependencies": { - "safe-buffer": "^5.0.1" + "babel-runtime": "^6.22.0" } }, - "node_modules/base64-arraybuffer": { - "version": "0.2.0", - "engines": { - "node": ">= 0.6.0" + "node_modules/babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==", + "dev": true, + "dependencies": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } }, - "node_modules/base64url": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=6.0.0" + "node_modules/babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, - "node_modules/batch": { - "version": "0.6.1", - "license": "MIT" + "node_modules/babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==", "dev": true, "dependencies": { - "tweetnacl": "^0.14.3" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "node_modules/babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==", + "dev": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "dependencies": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==", + "dev": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==", + "dev": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==", + "dev": true, + "dependencies": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==", + "dev": true, + "dependencies": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==", + "dev": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==", + "dev": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==", + "dev": true + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ==", + "dev": true, + "dependencies": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.10.0" + } + }, + "node_modules/babel-plugin-transform-regenerator/node_modules/regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "node_modules/babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "node_modules/babel-preset-env/node_modules/browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/babel-preset-env/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/babel-preset-jest": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-traverse/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true, + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-arraybuffer": { + "version": "0.2.0", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } }, "node_modules/bignumber.js": { "version": "9.0.2", @@ -7231,6 +8077,13 @@ "node": ">=4.0.0" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "peer": true + }, "node_modules/compressible": { "version": "2.0.18", "license": "MIT", @@ -7455,6 +8308,14 @@ "version": "1.0.6", "license": "MIT" }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, "node_modules/core-js-compat": { "version": "3.23.4", "dev": true, @@ -8392,6 +9253,16 @@ "version": "8.0.0", "license": "MIT" }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/encodeurl": { "version": "1.0.2", "license": "MIT", @@ -9454,6 +10325,24 @@ "version": "2.0.0", "license": "MIT" }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "peer": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/find-up": { "version": "4.1.0", "license": "MIT", @@ -9909,6 +10798,27 @@ "node": ">= 0.4.0" } }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-bigints": { "version": "1.0.1", "license": "MIT", @@ -10386,6 +11296,15 @@ "node": ">= 0.10" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/ip": { "version": "1.1.5", "license": "MIT" @@ -12662,7 +13581,8 @@ }, "node_modules/js-sha256": { "version": "0.9.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -12965,6 +13885,21 @@ "node": ">=6.11.5" } }, + "node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "peer": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/local-pkg": { "version": "0.4.2", "license": "MIT", @@ -13209,6 +14144,18 @@ "version": "4.0.0", "license": "Apache-2.0" }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/loupe": { "version": "2.3.4", "license": "MIT", @@ -14892,6 +15839,15 @@ "node": ">=8" } }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/process": { "version": "0.11.10", "license": "MIT", @@ -17183,6 +18139,27 @@ "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", "dev": true }, + "node_modules/web-encoding": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", + "dev": true, + "dependencies": { + "util": "^0.12.3" + }, + "optionalDependencies": { + "@zxing/text-encoding": "0.9.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/webcrypto-core": { "version": "1.7.5", "license": "MIT", @@ -17877,57 +18854,160 @@ "version": "0.1.0", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/agent": { + "name": "@dfinity/agent", + "version": "0.12.2-beta.0", + "license": "Apache-2.0", + "dependencies": { + "base64-arraybuffer": "^0.2.0", + "bignumber.js": "^9.0.0", + "borc": "^2.1.1", + "js-sha256": "0.9.0", + "simple-cbor": "^0.4.1", + "ts-node": "^10.8.2" + }, + "devDependencies": { + "@trust/webcrypto": "^0.9.2", + "@types/jest": "^28.1.4", + "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/parser": "^5.30.5", + "eslint": "^8.19.0", + "eslint-plugin-jsdoc": "^39.3.3", + "isomorphic-fetch": "^3.0.0", + "jest": "^28.1.2", + "text-encoding": "^0.7.0", + "ts-jest": "^28.0.5", + "tslint": "^5.20.0", + "typedoc": "^0.22.11", + "typescript": "^4.7.4", + "whatwg-fetch": "^3.0.0" + }, + "peerDependencies": { + "@dfinity/candid": "^0.12.2-beta.0", + "@dfinity/principal": "^0.12.2-beta.0" + } + }, + "packages/agent/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "packages/agent/node_modules/glob": { + "version": "8.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/agent/node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/agent/node_modules/typedoc": { + "version": "0.22.18", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "glob": "^8.0.3", + "lunr": "^2.3.9", + "marked": "^4.0.16", + "minimatch": "^5.1.0", + "shiki": "^0.10.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x" } }, - "packages/agent": { - "name": "@dfinity/agent", + "packages/assets": { + "name": "@dfinity/assets", "version": "0.12.2-beta.0", "license": "Apache-2.0", "dependencies": { - "base64-arraybuffer": "^0.2.0", - "bignumber.js": "^9.0.0", - "borc": "^2.1.1", - "js-sha256": "0.9.0", - "simple-cbor": "^0.4.1", - "ts-node": "^10.8.2" + "@dfinity/agent": "^0.12.2-beta.0", + "base64-arraybuffer": "^1.0.2", + "mime": "^3.0.0", + "p-limit": "^4.0.0" }, "devDependencies": { - "@trust/webcrypto": "^0.9.2", + "@peculiar/webcrypto": "^1.4.0", "@types/jest": "^28.1.4", + "@types/mime": "^2.0.3", "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", + "@web-std/file": "^3.0.2", "eslint": "^8.19.0", "eslint-plugin-jsdoc": "^39.3.3", - "isomorphic-fetch": "^3.0.0", "jest": "^28.1.2", - "text-encoding": "^0.7.0", "ts-jest": "^28.0.5", - "tslint": "^5.20.0", "typedoc": "^0.22.11", - "typescript": "^4.7.4", - "whatwg-fetch": "^3.0.0" + "typescript": "^4.7.4" }, "peerDependencies": { - "@dfinity/candid": "^0.12.2-beta.0", - "@dfinity/principal": "^0.12.2-beta.0" + "@dfinity/agent": "^0.12.2-beta.0", + "js-sha256": "0.9.0" } }, - "packages/agent/node_modules/brace-expansion": { + "packages/assets/node_modules/@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", + "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", + "dev": true + }, + "packages/assets/node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } + }, + "packages/assets/node_modules/brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "packages/agent/node_modules/glob": { + "packages/assets/node_modules/glob": { "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17942,10 +19022,22 @@ "url": "https://github.com/sponsors/isaacs" } }, - "packages/agent/node_modules/minimatch": { + "packages/assets/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/assets/node_modules/minimatch": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -17953,10 +19045,25 @@ "node": ">=10" } }, - "packages/agent/node_modules/typedoc": { + "packages/assets/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/assets/node_modules/typedoc": { "version": "0.22.18", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz", + "integrity": "sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "glob": "^8.0.3", "lunr": "^2.3.9", @@ -17974,6 +19081,17 @@ "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x" } }, + "packages/assets/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/auth-client": { "name": "@dfinity/auth-client", "version": "0.12.2-beta.0", @@ -18695,13 +19813,13 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", + "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -19575,6 +20693,25 @@ } } }, + "@cypress/webpack-preprocessor": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.12.0.tgz", + "integrity": "sha512-D/eLKKlgx6c/307FaCmjZGjFA64G29aA8KcCy6WqpNK/bSnRdPquMW2plemIsT/B80TK2DDKzZX/H3FcS41ZDA==", + "dev": true, + "requires": { + "bluebird": "3.7.1", + "debug": "^4.3.2", + "lodash": "^4.17.20" + }, + "dependencies": { + "bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "dev": true + } + } + }, "@cypress/xvfb": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", @@ -19659,6 +20796,102 @@ } } }, + "@dfinity/assets": { + "version": "file:packages/assets", + "requires": { + "@dfinity/agent": "^0.12.2-beta.0", + "@peculiar/webcrypto": "^1.4.0", + "@types/jest": "^28.1.4", + "@types/mime": "^2.0.3", + "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/parser": "^5.30.5", + "@web-std/file": "^3.0.2", + "base64-arraybuffer": "^1.0.2", + "eslint": "^8.19.0", + "eslint-plugin-jsdoc": "^39.3.3", + "jest": "^28.1.2", + "mime": "^3.0.0", + "p-limit": "^4.0.0", + "ts-jest": "^28.0.5", + "typedoc": "^0.22.11", + "typescript": "^4.7.4" + }, + "dependencies": { + "@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", + "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", + "dev": true + }, + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "typedoc": { + "version": "0.22.18", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz", + "integrity": "sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==", + "dev": true, + "requires": { + "glob": "^8.0.3", + "lunr": "^2.3.9", + "marked": "^4.0.16", + "minimatch": "^5.1.0", + "shiki": "^0.10.1" + } + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" + } + } + }, "@dfinity/auth-client": { "version": "file:packages/auth-client", "requires": { @@ -20091,18 +21324,33 @@ "@do-not-publish/ic-cypress-e2e-tests": { "version": "file:e2e/browser", "requires": { + "@cypress/webpack-preprocessor": "^5.12.0", "@dfinity/agent": "^0.12.2-beta.0", + "@dfinity/assets": "^0.12.2-beta.0", "@dfinity/authentication": "^0.12.2-beta.0", "@dfinity/identity": "^0.12.2-beta.0", "@dfinity/principal": "^0.12.2-beta.0", "@types/cypress": "^1.1.3", "@types/node": "^18.0.6", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "babel-preset-env": "^1.7.0", "concurrently": "^7.3.0", "cypress": "^10.3.1", "eslint-plugin-cypress": "^2.12.1", "idb-keyval": "^6.2.0", "parcel": "^2.6.2", "pm2": "^5.2.0" + }, + "dependencies": { + "babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", + "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + } + } } }, "@do-not-publish/ic-node-e2e-tests": { @@ -22774,6 +24022,34 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@web-std/blob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@web-std/blob/-/blob-3.0.4.tgz", + "integrity": "sha512-+dibyiw+uHYK4dX5cJ7HA+gtDAaUUe6JsOryp2ZpAC7h4ICsh49E34JwHoEKPlPvP0llCrNzz45vvD+xX5QDBg==", + "dev": true, + "requires": { + "@web-std/stream": "1.0.0", + "web-encoding": "1.1.5" + } + }, + "@web-std/file": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@web-std/file/-/file-3.0.2.tgz", + "integrity": "sha512-pIH0uuZsmY8YFvSHP1NsBIiMT/1ce0suPrX74fEeO3Wbr1+rW0fUGEe4d0R99iLwXtyCwyserqCFI4BJkJlkRA==", + "dev": true, + "requires": { + "@web-std/blob": "^3.0.3" + } + }, + "@web-std/stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@web-std/stream/-/stream-1.0.0.tgz", + "integrity": "sha512-jyIbdVl+0ZJyKGTV0Ohb9E6UnxP+t7ZzX4Do3AHjZKxUXKMs9EmqnBDQgHF7bEw0EzbQygOjtt/7gvtmi//iCQ==", + "dev": true, + "requires": { + "web-streams-polyfill": "^3.1.1" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "requires": { @@ -22903,6 +24179,13 @@ "@types/ledgerhq__hw-transport": "^4.21.3" } }, + "@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "dev": true, + "optional": true + }, "abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -23198,6 +24481,192 @@ "follow-redirects": "^1.14.0" } }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, "babel-jest": { "version": "28.1.3", "requires": { @@ -23238,11 +24707,56 @@ "supports-color": { "version": "7.2.0", "requires": { - "has-flag": "^4.0.0" + "has-flag": "^4.0.0" + } + } + } + }, + "babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dev": true, + "peer": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } } } }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "dev": true, @@ -23293,6 +24807,346 @@ "@babel/helper-define-polyfill-provider": "^0.3.1" } }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ==", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ==", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==", + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==", + "dev": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==", + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ==", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.10.0" + }, + "dependencies": { + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + } + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, "babel-preset-current-node-syntax": { "version": "1.0.1", "requires": { @@ -23310,6 +25164,62 @@ "@babel/plugin-syntax-top-level-await": "^7.8.3" } }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "babel-preset-jest": { "version": "28.1.3", "requires": { @@ -23317,6 +25227,103 @@ "babel-preset-current-node-syntax": "^1.0.0" } }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, "balanced-match": { "version": "1.0.2" }, @@ -23358,6 +25365,13 @@ } } }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "peer": true + }, "bignumber.js": { "version": "9.0.2" }, @@ -23822,6 +25836,13 @@ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "peer": true + }, "compressible": { "version": "2.0.18", "requires": { @@ -23990,6 +26011,12 @@ "cookie-signature": { "version": "1.0.6" }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, "core-js-compat": { "version": "3.23.4", "dev": true, @@ -24649,6 +26676,13 @@ "emoji-regex": { "version": "8.0.0" }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "peer": true + }, "encodeurl": { "version": "1.0.2" }, @@ -25368,6 +27402,18 @@ } } }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "peer": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "find-up": { "version": "4.1.0", "requires": { @@ -25681,6 +27727,23 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + } + } + }, "has-bigints": { "version": "1.0.1" }, @@ -25988,6 +28051,15 @@ "interpret": { "version": "2.2.0" }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, "ip": { "version": "1.1.5" }, @@ -27346,7 +29418,9 @@ } }, "js-sha256": { - "version": "0.9.0" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" }, "js-tokens": { "version": "4.0.0" @@ -27566,6 +29640,18 @@ "loader-runner": { "version": "4.2.0" }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "peer": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "local-pkg": { "version": "0.4.2" }, @@ -27742,6 +29828,15 @@ "long": { "version": "4.0.0" }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "loupe": { "version": "2.3.4", "requires": { @@ -28906,6 +31001,12 @@ } } }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, "process": { "version": "0.11.10" }, @@ -30365,6 +32466,22 @@ "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", "dev": true }, + "web-encoding": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", + "dev": true, + "requires": { + "@zxing/text-encoding": "0.9.0", + "util": "^0.12.3" + } + }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true + }, "webcrypto-core": { "version": "1.7.5", "requires": { diff --git a/package.json b/package.json index 03fe83abf..65d9de258 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "packages/identity-ledgerhq", "packages/authentication", "packages/auth-client", + "packages/assets", "e2e/node", "e2e/browser", "demos/ledgerhq", diff --git a/packages/assets/.gitignore b/packages/assets/.gitignore new file mode 100644 index 000000000..40ba0014d --- /dev/null +++ b/packages/assets/.gitignore @@ -0,0 +1,17 @@ +build_info.json +node_modules/ +dist/ +**/*.js +**/*.js.map +**/*.d.ts + +# generated docs +/docs/reference + +# Cannot ignore .d.ts files in types/ +!types/**/*.d.ts + +# Cannot ignore setup files for webpack and jest, which are still JavaScript. +!webpack.config.js +!jest.config.js +!test-setup.js diff --git a/packages/assets/.npmignore b/packages/assets/.npmignore new file mode 100644 index 000000000..eb725972f --- /dev/null +++ b/packages/assets/.npmignore @@ -0,0 +1,11 @@ +# We work with a safelist here, so block everything that's not permitted, and add packages +# that are. +** + +!lib/** +!types/**/*.d.ts +!package.json +!README.md + +# The following line further removes all test files (which matches .js and .d.ts). +lib/**/*.test.* diff --git a/packages/assets/LICENSE b/packages/assets/LICENSE new file mode 100644 index 000000000..b27ba1fe8 --- /dev/null +++ b/packages/assets/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 DFINITY LLC. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/assets/jest.config.ts b/packages/assets/jest.config.ts new file mode 100644 index 000000000..4de3165aa --- /dev/null +++ b/packages/assets/jest.config.ts @@ -0,0 +1,18 @@ +import baseConfig from '../../jest.config.base'; +const packageName = 'assets'; + +module.exports = { + ...baseConfig, + roots: [`/packages/${packageName}`], + bail: false, + moduleDirectories: ['node_modules'], + modulePaths: [`/packages/${packageName}/src/`], + setupFiles: [`/packages/${packageName}/test-setup.ts`], + transform: { + '^.+\\.ts$': 'ts-jest', + }, + collectCoverageFrom: ['src/**/*.{ts,tsx}'], + name: packageName, + displayName: packageName, + rootDir: '../..', +}; diff --git a/packages/assets/package.json b/packages/assets/package.json new file mode 100644 index 000000000..4403a480a --- /dev/null +++ b/packages/assets/package.json @@ -0,0 +1,78 @@ +{ + "name": "@dfinity/assets", + "version": "0.12.2-beta.0", + "author": "DFINITY Stiftung ", + "license": "Apache-2.0", + "description": "JavaScript and TypeScript library to manage assets on the Internet Computer", + "homepage": "https://smartcontracts.org", + "repository": { + "type": "git", + "url": "https://github.com/dfinity/agent-js.git", + "directory": "packages/assets" + }, + "bugs": { + "url": "https://github.com/dfinity/agent-js/issues" + }, + "keywords": [ + "internet computer", + "internet-computer", + "ic", + "dfinity", + "assets", + "asset", + "file", + "upload", + "agent", + "actor", + "dfx", + "canister", + "motoko", + "javascript", + "typescript", + "blockchain", + "crypto", + "distributed", + "api", + "sdk" + ], + "main": "./lib/cjs/index.js", + "module": "./lib/esm/index.js", + "scripts": { + "build": "tsc -b && tsc -p tsconfig-cjs.json", + "bundle": "npm run build", + "lint": "eslint 'src' --ext '.js,.jsx,.ts,.tsx'", + "lint:fix": "npm run lint -- --fix", + "make:docs/reference": "typedoc src/index.ts --out ../../docs/generated/assets", + "release": "npm publish", + "test": "jest", + "test:coverage": "jest --verbose --collectCoverage" + }, + "peerDependencies": { + "@dfinity/agent": "^0.12.2-beta.0", + "js-sha256": "0.9.0" + }, + "dependencies": { + "@dfinity/agent": "^0.12.2-beta.0", + "base64-arraybuffer": "^1.0.2", + "mime": "^3.0.0", + "p-limit": "^4.0.0" + }, + "devDependencies": { + "@peculiar/webcrypto": "^1.4.0", + "@types/jest": "^28.1.4", + "@types/mime": "^2.0.3", + "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/parser": "^5.30.5", + "@web-std/file": "^3.0.2", + "eslint": "^8.19.0", + "eslint-plugin-jsdoc": "^39.3.3", + "jest": "^28.1.2", + "ts-jest": "^28.0.5", + "typedoc": "^0.22.11", + "typescript": "^4.7.4" + }, + "browser": { + "fs": "./lib/cjs/utils/browserShim.js", + "path": "./lib/cjs/utils/browserShim.js" + } +} diff --git a/packages/assets/src/canisters/assets.ts b/packages/assets/src/canisters/assets.ts new file mode 100644 index 000000000..7a69000d3 --- /dev/null +++ b/packages/assets/src/canisters/assets.ts @@ -0,0 +1,13 @@ +import { Actor, ActorConfig, ActorSubclass } from '@dfinity/agent'; +import { idlFactory } from './assets_idl'; +import _SERVICE from './assets_service'; + +export type AssetsCanisterRecord = _SERVICE; + +/** + * Create an assets canister actor + * @param config Configuration to make calls to the Replica. + */ +export function getAssetsCanister(config: ActorConfig): ActorSubclass { + return Actor.createActor(idlFactory, config); +} diff --git a/packages/assets/src/canisters/assets_idl.ts b/packages/assets/src/canisters/assets_idl.ts new file mode 100644 index 000000000..1517d1ecf --- /dev/null +++ b/packages/assets/src/canisters/assets_idl.ts @@ -0,0 +1,151 @@ +// @ts-ignore +export const idlFactory = ({ IDL }) => { + const ClearArguments = IDL.Record({}); + const BatchId = IDL.Nat; + const Key = IDL.Text; + const CreateAssetArguments = IDL.Record({ + key: Key, + content_type: IDL.Text, + }); + const UnsetAssetContentArguments = IDL.Record({ + key: Key, + content_encoding: IDL.Text, + }); + const DeleteAssetArguments = IDL.Record({ key: Key }); + const ChunkId = IDL.Nat; + const SetAssetContentArguments = IDL.Record({ + key: Key, + sha256: IDL.Opt(IDL.Vec(IDL.Nat8)), + chunk_ids: IDL.Vec(ChunkId), + content_encoding: IDL.Text, + }); + const BatchOperationKind = IDL.Variant({ + CreateAsset: CreateAssetArguments, + UnsetAssetContent: UnsetAssetContentArguments, + DeleteAsset: DeleteAssetArguments, + SetAssetContent: SetAssetContentArguments, + Clear: ClearArguments, + }); + const HeaderField = IDL.Tuple(IDL.Text, IDL.Text); + const HttpRequest = IDL.Record({ + url: IDL.Text, + method: IDL.Text, + body: IDL.Vec(IDL.Nat8), + headers: IDL.Vec(HeaderField), + }); + const StreamingCallbackToken = IDL.Record({ + key: Key, + sha256: IDL.Opt(IDL.Vec(IDL.Nat8)), + index: IDL.Nat, + content_encoding: IDL.Text, + }); + const StreamingCallbackHttpResponse = IDL.Record({ + token: IDL.Opt(StreamingCallbackToken), + body: IDL.Vec(IDL.Nat8), + }); + const StreamingStrategy = IDL.Variant({ + Callback: IDL.Record({ + token: StreamingCallbackToken, + callback: IDL.Func( + [StreamingCallbackToken], + [IDL.Opt(StreamingCallbackHttpResponse)], + ['query'], + ), + }), + }); + const HttpResponse = IDL.Record({ + body: IDL.Vec(IDL.Nat8), + headers: IDL.Vec(HeaderField), + streaming_strategy: IDL.Opt(StreamingStrategy), + status_code: IDL.Nat16, + }); + const Time = IDL.Int; + return IDL.Service({ + authorize: IDL.Func([IDL.Principal], [], []), + clear: IDL.Func([ClearArguments], [], []), + commit_batch: IDL.Func( + [ + IDL.Record({ + batch_id: BatchId, + operations: IDL.Vec(BatchOperationKind), + }), + ], + [], + [], + ), + create_asset: IDL.Func([CreateAssetArguments], [], []), + create_batch: IDL.Func([IDL.Record({})], [IDL.Record({ batch_id: BatchId })], []), + create_chunk: IDL.Func( + [IDL.Record({ content: IDL.Vec(IDL.Nat8), batch_id: BatchId })], + [IDL.Record({ chunk_id: ChunkId })], + [], + ), + delete_content: IDL.Func([DeleteAssetArguments], [], []), + get: IDL.Func( + [IDL.Record({ key: Key, accept_encodings: IDL.Vec(IDL.Text) })], + [ + IDL.Record({ + content: IDL.Vec(IDL.Nat8), + sha256: IDL.Opt(IDL.Vec(IDL.Nat8)), + content_type: IDL.Text, + content_encoding: IDL.Text, + total_length: IDL.Nat, + }), + ], + ['query'], + ), + get_chunk: IDL.Func( + [ + IDL.Record({ + key: Key, + sha256: IDL.Opt(IDL.Vec(IDL.Nat8)), + index: IDL.Nat, + content_encoding: IDL.Text, + }), + ], + [IDL.Record({ content: IDL.Vec(IDL.Nat8) })], + ['query'], + ), + http_request: IDL.Func([HttpRequest], [HttpResponse], ['query']), + http_request_streaming_callback: IDL.Func( + [StreamingCallbackToken], + [IDL.Opt(StreamingCallbackHttpResponse)], + ['query'], + ), + list: IDL.Func( + [IDL.Record({})], + [ + IDL.Vec( + IDL.Record({ + key: Key, + encodings: IDL.Vec( + IDL.Record({ + modified: Time, + sha256: IDL.Opt(IDL.Vec(IDL.Nat8)), + length: IDL.Nat, + content_encoding: IDL.Text, + }), + ), + content_type: IDL.Text, + }), + ), + ], + ['query'], + ), + set_asset_content: IDL.Func([SetAssetContentArguments], [], []), + store: IDL.Func( + [ + IDL.Record({ + key: Key, + content: IDL.Vec(IDL.Nat8), + sha256: IDL.Opt(IDL.Vec(IDL.Nat8)), + content_type: IDL.Text, + content_encoding: IDL.Text, + }), + ], + [], + [], + ), + unset_asset_content: IDL.Func([UnsetAssetContentArguments], [], []), + }); +}; diff --git a/packages/assets/src/canisters/assets_service.ts b/packages/assets/src/canisters/assets_service.ts new file mode 100644 index 000000000..9b62141eb --- /dev/null +++ b/packages/assets/src/canisters/assets_service.ts @@ -0,0 +1,125 @@ +import type { Principal } from '@dfinity/principal'; + +export type BatchId = bigint; +export type BatchOperationKind = + | { CreateAsset: CreateAssetArguments } + | { UnsetAssetContent: UnsetAssetContentArguments } + | { DeleteAsset: DeleteAssetArguments } + | { SetAssetContent: SetAssetContentArguments } + | { Clear: ClearArguments }; +export type ChunkId = bigint; +export type ClearArguments = {}; + +export interface CreateAssetArguments { + key: Key; + content_type: string; +} + +export interface DeleteAssetArguments { + key: Key; +} + +export type HeaderField = [string, string]; + +export interface HttpRequest { + url: string; + method: string; + body: Uint8Array; + headers: Array; +} + +export interface HttpResponse { + body: Uint8Array; + headers: Array; + streaming_strategy: [] | [StreamingStrategy]; + status_code: number; +} + +export type Key = string; +export type Result = { Ok: null } | { Err: string }; + +export interface SetAssetContentArguments { + key: Key; + sha256: [] | [Uint8Array]; + chunk_ids: Array; + content_encoding: string; +} + +export interface StreamingCallbackHttpResponse { + token: [] | [StreamingCallbackToken]; + body: Uint8Array; +} + +export interface StreamingCallbackToken { + key: Key; + sha256: [] | [Uint8Array]; + index: bigint; + content_encoding: string; +} + +export type StreamingStrategy = { + Callback: { + token: StreamingCallbackToken; + callback: [Principal, string]; + }; +}; +export type Time = bigint; + +export interface UnsetAssetContentArguments { + key: Key; + content_encoding: string; +} + +export default interface _SERVICE { + authorize: (arg_0: Principal) => Promise; + clear: (arg_0: ClearArguments) => Promise; + commit_batch: (arg_0: { + batch_id: BatchId; + operations: Array; + }) => Promise; + create_asset: (arg_0: CreateAssetArguments) => Promise; + create_batch: (arg_0: {}) => Promise<{ batch_id: BatchId }>; + create_chunk: (arg_0: { + content: Uint8Array; + batch_id: BatchId; + }) => Promise<{ chunk_id: ChunkId }>; + delete_content: (arg_0: DeleteAssetArguments) => Promise; + get: (arg_0: { key: Key; accept_encodings: Array }) => Promise<{ + content: Uint8Array; + sha256: [] | [Uint8Array]; + content_type: string; + content_encoding: string; + total_length: bigint; + }>; + get_chunk: (arg_0: { + key: Key; + sha256: [] | [Uint8Array]; + index: bigint; + content_encoding: string; + }) => Promise<{ content: Uint8Array }>; + http_request: (arg_0: HttpRequest) => Promise; + http_request_streaming_callback: ( + arg_0: StreamingCallbackToken, + ) => Promise<[] | [StreamingCallbackHttpResponse]>; + list: (arg_0: {}) => Promise< + Array<{ + key: Key; + encodings: Array<{ + modified: Time; + sha256: [] | [Uint8Array]; + length: bigint; + content_encoding: string; + }>; + content_type: string; + }> + >; + set_asset_content: (arg_0: SetAssetContentArguments) => Promise; + store: (arg_0: { + key: Key; + content: Uint8Array; + sha256: [] | [Uint8Array]; + content_type: string; + content_encoding: string; + }) => Promise; + unset_asset_content: (arg_0: UnsetAssetContentArguments) => Promise; +} diff --git a/packages/assets/src/index.ts b/packages/assets/src/index.ts new file mode 100644 index 000000000..2a43fc550 --- /dev/null +++ b/packages/assets/src/index.ts @@ -0,0 +1,468 @@ +import { + Actor, + ActorConfig, + ActorSubclass, + Cbor as cbor, + Certificate, + compare, + getDefaultAgent, + HashTree, + lookup_path, + reconstruct, +} from '@dfinity/agent'; +import { lebDecode } from '@dfinity/candid'; +import { PipeArrayBuffer } from '@dfinity/candid/lib/cjs/utils/buffer'; +import pLimit, { LimitFunction } from 'p-limit'; +import { AssetsCanisterRecord, getAssetsCanister } from './canisters/assets'; +import { + ContentEncoding, + Data, + DataConfig, + DefaultReadableDataImpl, + isReadableData, + ReadableData, +} from './readableData'; +import { Hasher, sha256 as jsSha256 } from 'js-sha256'; +import { BatchOperationKind } from './canisters/assets_service'; +import * as base64Arraybuffer from 'base64-arraybuffer'; +import fs from 'fs'; + +/** + * Configuration that can be passed to set the canister id of the + * assets canister to be managed, inherits actor configuration and + * has additional asset manager specific configuration options. + */ +interface AssetManagerConfig extends ActorConfig { + /** + * Max number of concurrent requests to the Internet Computer + */ + concurrency?: number; + /** + * Max file size in bytes that the asset manager shouldn't chunk + */ + maxSingleFileSize?: number; + /** + * Size of each chunk in bytes when the asset manager has to chunk a file + */ + maxChunkSize?: number; +} + +export class AssetManager { + private readonly _actor: ActorSubclass; + private readonly _pLimit: LimitFunction; + private readonly _maxSingleFileSize: number; + private readonly _maxChunkSize: number; + + /** + * Create assets canister manager instance + * @param config Additional configuration options, canister id is required + */ + constructor({ + concurrency, + maxSingleFileSize, + maxChunkSize, + ...actorConfig + }: AssetManagerConfig) { + this._actor = getAssetsCanister(actorConfig); + this._pLimit = pLimit(concurrency ?? 32); + this._maxSingleFileSize = maxSingleFileSize ?? 1900000; + this._maxChunkSize = maxChunkSize ?? 1900000; + } + + /** + * Get list of all files in assets canister + * @return All files in asset canister + */ + public async list(): ReturnType { + return this._actor.list({}); + } + + /** + * Store data on assets canister + * @param readableData (custom) ReadableData instance + */ + public async store(readableData: ReadableData): Promise; + /** + * Store data on assets canister + * @param data Either a Blob, Uint8Array or number[] + * @param config Configuration and overrides, file name is required + */ + public async store( + data: Exclude, + config: Omit & Required>, + ): Promise; + /** + * Store data on assets canister + * @param data Either a File (web) or file path (Node) + * @param config Optional configuration and overrides + */ + public async store(data: File | string, config?: DataConfig): Promise; + public async store(data: Data | ReadableData, config?: DataConfig): Promise { + const readableData = isReadableData(data) + ? data + : await DefaultReadableDataImpl.create(data as any, config); + const key = [readableData.path, readableData.fileName].join('/'); + + if (readableData.length <= this._maxSingleFileSize) { + // Asset is small enough to be uploaded in one request + await this._pLimit(async () => { + await readableData.open(); + const bytes = await readableData.slice(0, readableData.length); + await readableData.close(); + const sha256 = + config?.sha256 ?? + new Uint8Array(jsSha256.create().update(new Uint8Array(bytes)).arrayBuffer()); + return this._actor.store({ + key, + content: bytes, + content_type: readableData.contentType, + sha256: [sha256], + content_encoding: readableData.contentEncoding, + }); + }); + } else { + // Create batch to upload asset in chunks + const batch = this.batch(); + batch.store(readableData); + await batch.commit(); + } + + return key; + } + + /** + * Delete file from assets canister + * @param key The path to the file on the assets canister e.g. /folder/to/my_file.txt + */ + public async delete(key: string): Promise { + await this._actor.delete_content({ key }); + } + + /** + * Delete all files from assets canister + */ + public async clear(): Promise { + await this._actor.clear({}); + } + + /** + * Get asset instance from assets canister + * @param key The path to the file on the assets canister e.g. /folder/to/my_file.txt + * @param acceptEncodings The accepted content encodings, defaults to ['identity'] + */ + public async get(key: string, acceptEncodings?: ContentEncoding[]): Promise { + const data = await this._actor.get({ + key, + accept_encodings: acceptEncodings ?? ['identity'], + }); + + return new Asset( + this._actor, + this._pLimit, + this._maxSingleFileSize, + this._maxChunkSize, + key, + acceptEncodings ?? ['identity'], + data.content, + data.content_type, + Number(data.total_length), + data.content_encoding, + data.content.length, + data.sha256[0], + ); + } + + /** + * Create a batch assets operations instance, commit multiple operations in a single request + */ + public batch(): AssetManagerBatch { + return new AssetManagerBatch(this._actor, this._pLimit, this._maxChunkSize); + } +} + +class Asset { + constructor( + private readonly _actor: ActorSubclass, + private readonly _pLimit: LimitFunction, + private readonly _maxSingleFileSize: number, + private readonly _maxChunkSize: number, + private readonly _key: string, + private readonly _acceptEncodings: ContentEncoding[], + private readonly _content: Uint8Array, + public readonly contentType: string, + public readonly length: number, + public readonly contentEncoding: string, + public readonly chunkSize: number, + public readonly sha256?: Uint8Array, + ) {} + + /** + * Get asset content as blob (web), most browsers are able to use disk storage for larger blobs + */ + public async toBlob(): Promise { + const blobs = Array.from({ length: Math.ceil(this.length / this.chunkSize) }); + await this.getChunks((index, chunk) => (blobs[index] = new Blob([chunk]))); + return new Blob([...blobs]); + } + + /** + * Get asset content as unsigned 8-bit integer array, use `toBlob` (web) or `write` (Node) for larger files + */ + public async toUint8Array(): Promise { + const bytes = new Uint8Array(this.length); + await this.getChunks((index, chunk) => bytes.set(chunk, index * this.chunkSize)); + return bytes; + } + + /** + * Get asset content as number array, use `toBlob` (web) or `write` (Node) for larger files + */ + public async toNumberArray(): Promise { + const chunks = Array.from({ length: Math.ceil(this.length / this.chunkSize) }); + await this.getChunks((index, chunk) => (chunks[index] = Array.from(chunk))); + return chunks.flat(); + } + + /** + * Write asset content to file (Node) + */ + public async write(path: string): Promise { + const fd = await new Promise(async (resolve, reject) => + fs.open(path, 'w', (err: any, fd: number) => { + if (err) { + reject(err); + return; + } + resolve(fd); + }), + ); + await this.getChunks( + (index, chunk) => + new Promise((resolve, reject) => + fs.write(fd, chunk, 0, chunk.length, index * this.chunkSize, (err: any) => { + if (err) { + reject(err); + return; + } + resolve(); + }), + ), + ); + } + + /** + * Get All chunks of asset through `onChunk` callback, can be used for a custom storage implementation + * @param onChunk Called on each received chunk, set `concurrency` to `1` to receive chunks in sequential order + */ + public async getChunks(onChunk: (index: number, chunk: Uint8Array) => void) { + onChunk(0, this._content); + await Promise.all( + Array.from({ length: Math.ceil(this.length / this.chunkSize) - 1 }).map((_, index) => + this._pLimit(async () => { + const { content } = await this._actor.get_chunk({ + key: this._key, + content_encoding: this.contentEncoding, + index: BigInt(index + 1), + sha256: this.sha256 ? [this.sha256] : [], + }); + onChunk(index + 1, content); + }), + ), + ); + } + + /** + * Check if asset has been certified, which means that the content's hash is in the canister hash tree + */ + public async isCertified() { + // Below implementation is based on Internet Computer service worker + const agent = Actor.agentOf(this._actor) ?? getDefaultAgent(); + const canisterId = Actor.canisterIdOf(this._actor); + + if (!agent.rootKey) { + throw Error('Agent is missing root key'); + } + + const response = await this._pLimit(() => + this._actor.http_request({ + method: 'get', + url: this._key, + headers: [['Accept-Encoding', this._acceptEncodings.join(', ')]], + body: new Uint8Array(), + }), + ); + + let certificate: ArrayBuffer | undefined; + let tree: ArrayBuffer | undefined; + let encoding = ''; + for (const [key, value] of response.headers) { + switch (key.trim().toLowerCase()) { + case 'ic-certificate': + { + const fields = value.split(/,/); + for (const f of fields) { + // @ts-ignore + const [, name, b64Value] = [...f.match(/^(.*)=:(.*):$/)].map(x => x.trim()); + const value = base64Arraybuffer.decode(b64Value); + if (name === 'certificate') { + certificate = value; + } else if (name === 'tree') { + tree = value; + } + } + } + continue; + case 'content-encoding': + encoding = value.trim(); + break; + } + } + + if (!tree) { + // No tree in response header + return false; + } + + const cert = await Certificate.create({ + certificate: new Uint8Array(certificate!), + rootKey: agent.rootKey, + canisterId, + }).catch(() => undefined); + + if (!cert) { + // Certificate is not valid + return false; + } + + // Check certificate time + const decodedTime = lebDecode(new PipeArrayBuffer(cert.lookup(['time']))); + const certTime = Number(decodedTime / BigInt(1_000_000)); // Convert from nanos to millis + const now = Date.now(); + const maxCertTimeOffset = 300_000; // 5 min + if (certTime - maxCertTimeOffset > now || certTime + maxCertTimeOffset < now) { + return false; + } + + const hashTree: HashTree = cbor.decode(new Uint8Array(tree)); + const reconstructed = await reconstruct(hashTree); + const witness = cert.lookup(['canister', canisterId.toUint8Array(), 'certified_data']); + + if (!witness) { + // Could not find certified data for this canister in the certificate + return false; + } + + // First validate that the Tree is as good as the certification + if (compare(witness, reconstructed) !== 0) { + // Witness != Tree passed in ic-certification + return false; + } + + // Lookup hash of asset in tree + const treeSha = lookup_path(['http_assets', this._key], hashTree); + + return !!treeSha && !!this.sha256 && compare(this.sha256.buffer, treeSha) === 0; + } +} + +class AssetManagerBatch { + private readonly _scheduledOperations: Array< + (batch_id: bigint) => Promise + > = []; + private readonly _sha256: { [key: string]: Hasher } = {}; + + constructor( + private readonly _actor: ActorSubclass, + private readonly _pLimit: LimitFunction, + private readonly _maxChunkSize: number, + ) {} + + /** + * Insert batch operation to store data on assets canister + * @param readableData ReadableData instance + */ + public async store(readableData: ReadableData): Promise; + /** + * Insert batch operation to store data on assets canister + * @param data Either a Blob, Uint8Array or number[] + * @param config Configuration and overrides, file name is required + */ + public async store( + data: Exclude, + config: Omit & Required>, + ): Promise; + /** + * Insert batch operation to store data on assets canister + * @param data Either a File (web) or file path (Node) + * @param config Optional configuration and overrides + */ + public async store(data: File | string, config?: DataConfig): Promise; + public async store(data: Data | ReadableData, config?: DataConfig): Promise { + const readableData = isReadableData(data) + ? data + : await DefaultReadableDataImpl.create(data as any, config); + const key = [readableData.path, readableData.fileName].join('/'); + if (!config?.sha256) { + this._sha256[key] = jsSha256.create(); + } + this._scheduledOperations.push(async batch_id => { + await readableData.open(); + const chunkIds: bigint[] = await Promise.all( + Array.from({ length: Math.ceil(readableData.length / this._maxChunkSize) }).map( + async (_, index) => { + const content = await readableData.slice( + index * this._maxChunkSize, + Math.min((index + 1) * this._maxChunkSize, readableData.length), + ); + if (!config?.sha256) { + this._sha256[key].update(content); + } + const { chunk_id } = await this._pLimit(() => + this._actor.create_chunk({ + content, + batch_id, + }), + ); + return chunk_id; + }, + ), + ); + await readableData.close; + return [ + { + CreateAsset: { key, content_type: readableData.contentType }, + }, + { + SetAssetContent: { + key, + sha256: [config?.sha256 ?? new Uint8Array(this._sha256[key].arrayBuffer())], + chunk_ids: chunkIds, + content_encoding: readableData.contentEncoding, + }, + }, + ]; + }); + return key; + } + + /** + * Insert batch operation to delete file from assets canister + * @param key The path to the file on the assets canister e.g. /folder/to/my_file.txt + */ + public delete(key: string): void { + this._scheduledOperations.push(async () => [{ DeleteAsset: { key } }]); + } + + /** + * Commit all batch operations to assets canister + */ + public async commit(): Promise { + const { batch_id } = await this._pLimit(() => this._actor.create_batch({})); + const operations = ( + await Promise.all( + this._scheduledOperations.map(scheduled_operation => scheduled_operation(batch_id)), + ) + ).flat(); + await this._pLimit(() => this._actor.commit_batch({ batch_id, operations })); + } +} diff --git a/packages/assets/src/readableData.test.ts b/packages/assets/src/readableData.test.ts new file mode 100644 index 000000000..6075401d0 --- /dev/null +++ b/packages/assets/src/readableData.test.ts @@ -0,0 +1,108 @@ +import { DataConfig, DefaultReadableDataImpl } from './readableData'; +import { basename, resolve } from 'path'; +import { statSync, readFileSync } from 'fs'; + +const transparentPixelGif = [ + 71, 73, 70, 56, 57, 97, 1, 0, 1, 0, 0, 0, 0, 33, 249, 4, 1, 0, 0, 0, 0, 44, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 2, 1, 0, 0, +]; + +describe('ReadableData', () => { + test('ReadableData from File', async () => { + const file = new File(['Hello world!'], 'hello.txt'); + const readableData = new DefaultReadableDataImpl(file); + + expect(readableData.fileName).toEqual(file.name); + expect(readableData.path).toEqual('/'); + expect(readableData.contentType).toEqual('text/plain'); + expect(readableData.length).toEqual(file.size); + expect(readableData.contentEncoding).toEqual('identity'); + await readableData.open(); + expect(await readableData.slice(1, 4)).toEqual( + new Uint8Array(await file.slice(1, 4).arrayBuffer()), + ); + await readableData.close(); + }); + + test('ReadableData from Blob', async () => { + const blob = new Blob(['Hello world!']); + const fileName = 'hello.txt'; + const readableData = new DefaultReadableDataImpl(blob, { fileName }); + + expect(readableData.fileName).toEqual(fileName); + expect(readableData.path).toEqual('/'); + expect(readableData.contentType).toEqual('text/plain'); + expect(readableData.length).toEqual(blob.size); + expect(readableData.contentEncoding).toEqual('identity'); + await readableData.open(); + expect(await readableData.slice(1, 4)).toEqual( + new Uint8Array(await blob.slice(1, 4).arrayBuffer()), + ); + await readableData.close(); + }); + + test('ReadableData from Uint8Array', async () => { + const uint8Array = Uint8Array.from(transparentPixelGif); + const fileName = 'transparent_pixel.gif'; + const readableData = new DefaultReadableDataImpl(uint8Array, { fileName }); + + expect(readableData.fileName).toEqual(fileName); + expect(readableData.path).toEqual('/'); + expect(readableData.contentType).toEqual('image/gif'); + expect(readableData.length).toEqual(uint8Array.length); + expect(readableData.contentEncoding).toEqual('identity'); + await readableData.open(); + expect(await readableData.slice(16, 24)).toEqual(uint8Array.slice(16, 24)); + await readableData.close(); + }); + + test('ReadableData from number[]', async () => { + const fileName = 'transparent_pixel.gif'; + const readableData = new DefaultReadableDataImpl(transparentPixelGif, { fileName }); + + expect(readableData.fileName).toEqual(fileName); + expect(readableData.path).toEqual('/'); + expect(readableData.contentType).toEqual('image/gif'); + expect(readableData.length).toEqual(transparentPixelGif.length); + expect(readableData.contentEncoding).toEqual('identity'); + await readableData.open(); + expect(await readableData.slice(16, 24)).toEqual( + Uint8Array.from(transparentPixelGif.slice(16, 24)), + ); + await readableData.close(); + }); + + test('ReadableData from file path', async () => { + const path = resolve(__dirname, '../package.json'); + const readableData = new DefaultReadableDataImpl(path); + + expect(readableData.fileName).toEqual(basename(path)); + expect(readableData.path).toEqual('/'); + expect(readableData.contentType).toEqual('application/json'); + expect(readableData.length).toEqual(statSync(path).size); + expect(readableData.contentEncoding).toEqual('identity'); + await readableData.open(); + expect(await readableData.slice(16, 24)).toEqual( + new Uint8Array(readFileSync(path).subarray(16, 24)), + ); + await readableData.close(); + }); + + test('ReadableData with config', async () => { + const path = resolve(__dirname, '../package.json'); + const config: DataConfig = { + fileName: 'test.txt', + path: '/a/b/c', + contentType: 'text/plain', + contentEncoding: 'gzip', + sha256: Uint8Array.from([1, 2, 3]), + }; + const readableData = new DefaultReadableDataImpl(path, config); + + expect(readableData.fileName).toEqual(config.fileName); + expect(readableData.path).toEqual(config.path); + expect(readableData.contentType).toEqual(config.contentType); + expect(readableData.contentEncoding).toEqual(config.contentEncoding); + expect(readableData.sha256).toEqual(config.sha256); + }); +}); diff --git a/packages/assets/src/readableData.ts b/packages/assets/src/readableData.ts new file mode 100644 index 000000000..58558107c --- /dev/null +++ b/packages/assets/src/readableData.ts @@ -0,0 +1,194 @@ +import mime from 'mime/lite'; +import fs from 'fs'; +import path from 'path'; + +export type Data = File | Blob | Uint8Array | number[] | string; + +export type ContentEncoding = 'identity' | 'gzip' | 'compress' | 'deflate' | 'br'; + +export interface DataConfig { + fileName?: string; + path?: string; + contentType?: string; + contentEncoding?: ContentEncoding; + sha256?: Uint8Array; +} + +export interface ReadableData { + fileName: string; + path: string; + contentType: string; + length: number; + contentEncoding: ContentEncoding; + sha256?: Uint8Array; + open: () => Promise; + close: () => void; + slice: (start: number, end: number) => Promise; +} + +export class DefaultReadableDataImpl implements ReadableData { + private fd?: number; + + protected constructor( + private readonly data: Data, + public readonly fileName: string, + public readonly path: string, + public readonly contentType: string, + public readonly length: number, + public readonly contentEncoding: ContentEncoding, + public readonly sha256?: Uint8Array, + ) {} + + /** + * Default implementation of reading files in AssetManager that support various types of data + * @param data Either a Blob, Uint8Array or number[] + * @param config Configuration and overrides, file name is required + */ + static async create( + data: Exclude, + config: Omit & Required>, + ): Promise; + /** + * Default implementation of reading files in AssetManager that support various types of data + * @param data Either a File (web) or file path (Node) + * @param config Optional configuration and overrides + */ + static async create(data: File | string, config?: DataConfig): Promise; + static async create(data: Data, config?: DataConfig): Promise { + const fileName = + config?.fileName ?? + (data instanceof File ? data.name : typeof data === 'string' ? path.basename(data) : ''); + const contentType = + config?.contentType ?? + (data instanceof File ? data.type : mime.getType(fileName) ?? 'application/octet-stream'); + const length = + data instanceof Blob + ? data.size + : data instanceof Uint8Array || Array.isArray(data) + ? data.length + : (await fs.promises.stat(data)).size; + + return new DefaultReadableDataImpl( + data, + fileName, + config?.path ?? '', + contentType, + length, + config?.contentEncoding ?? 'identity', + config?.sha256, + ); + } + + /** + * Open ReadableData, should always be called before slices are read + */ + public open() { + return new Promise(async (resolve, reject) => { + if (typeof this.data === 'string') { + if (typeof this.fd === 'number') { + reject('File is already open'); + return; + } + fs.open(this.data, (err: any, fd: number) => { + if (err) { + reject(err); + return; + } + this.fd = fd; + resolve(); + }); + return; + } + resolve(); + }); + } + + /** + * Close ReadableData, should always be called after all slices are read + */ + public close() { + return new Promise(async (resolve, reject) => { + if (typeof this.data === 'string') { + if (typeof this.fd !== 'number') { + reject('No open file handle found'); + return; + } + fs.close(this.fd, (err: any) => { + if (err) { + reject(err); + return; + } + resolve(); + }); + return; + } + resolve(); + }); + } + + /** + * Read slice of bytes from ReadableData + * @param start Reading start offset + * @param end Reading end offset + */ + public slice(start: number, end: number): Promise { + return new Promise(async (resolve, reject) => { + if (end <= start) { + reject('End offset should be larger than start offset'); + return; + } + + // Read slice from File or Blob in browser + if (this.data instanceof Blob) { + resolve(new Uint8Array(await this.data.slice(start, end).arrayBuffer())); + return; + } + + // Read slice from file at path in Node + if (typeof this.data === 'string') { + if (typeof this.fd !== 'number') { + reject('No open file handle found'); + return; + } + const buffer = Buffer.alloc(end - start); + fs.read(this.fd, buffer, 0, end - start, start, (err: any) => { + if (err) { + reject(err); + return; + } + resolve(new Uint8Array(buffer)); + }); + return; + } + + // Read slice from Uint8Array in browser or Node + if (this.data instanceof Uint8Array) { + resolve(this.data.slice(start, end)); + return; + } + + // Read slice from number[] in browser or Node + if (Array.isArray(this.data)) { + resolve(Uint8Array.from(this.data.slice(start, end))); + return; + } + + reject('Data slice could not be read'); + }); + } +} + +/** + * Check if value is ReadableData, used internally in AssetManager to + * differentiate between data and custom ReadableData implementations. + * @param value Either File, Blob, Uint8Array, number[], string or ReadableData + */ +export function isReadableData(value: Data | ReadableData): value is ReadableData { + return ( + !!value && + !(value instanceof Blob) && + !(value instanceof Uint8Array) && + !Array.isArray(value) && + typeof value !== 'string' + ); +} diff --git a/packages/assets/src/utils/browserShim.ts b/packages/assets/src/utils/browserShim.ts new file mode 100644 index 000000000..94ed946cc --- /dev/null +++ b/packages/assets/src/utils/browserShim.ts @@ -0,0 +1,2 @@ +// Export empty object as shim for node `fs` and `path` +export default {}; diff --git a/packages/assets/test-setup.ts b/packages/assets/test-setup.ts new file mode 100644 index 000000000..03ffb68de --- /dev/null +++ b/packages/assets/test-setup.ts @@ -0,0 +1,24 @@ +// This file may be used to polyfill features that aren't available in the test +// environment, i.e. JSDom. +// +// We sometimes need to do this because our target browsers are expected to have +// a feature that JSDom doesn't. +// +// Note that we can use webpack configuration to make some features available to +// Node.js in a similar way. + +import mime from 'mime-types'; + +global.crypto = require('@peculiar/webcrypto'); +global.TextEncoder = require('text-encoding').TextEncoder; +global.TextDecoder = require('text-encoding').TextDecoder; +global.MessageChannel = require('worker_threads').MessageChannel; +global.Blob = require('@web-std/file').Blob; +// @ts-ignore File polyfill with additional mime type polyfill +global.File = class FilePolyfill extends require('@web-std/file').File { + constructor(init: BlobPart[], name?: string, options?: FilePropertyBag | undefined) { + super(init, name, options); + this._type = mime.lookup(name) || 'application/octet-stream'; + } +}; +require('whatwg-fetch'); diff --git a/packages/assets/tsconfig-cjs.json b/packages/assets/tsconfig-cjs.json new file mode 100644 index 000000000..945c51f27 --- /dev/null +++ b/packages/assets/tsconfig-cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "CommonJS", + "outDir": "./lib/cjs" + } +} diff --git a/packages/assets/tsconfig.json b/packages/assets/tsconfig.json new file mode 100644 index 000000000..e0872dfe6 --- /dev/null +++ b/packages/assets/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "allowJs": false, + "baseUrl": "./", + "composite": true, + "declaration": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "incremental": true, + "module": "ES2020", + "moduleResolution": "node", + "outDir": "./lib/esm", + "resolveJsonModule": true, + "rootDir": "./src", + "sourceMap": true, + "inlineSources": true, + "strict": true, + "target": "es2017" + }, + "include": ["types/*", "src/**/*", "client-test"], + "references": [{ "path": "../agent" }] +} From d35f95a45fb44bfaa9b3d51804785c3800ce3803 Mon Sep 17 00:00:00 2001 From: sea-snake Date: Thu, 28 Jul 2022 02:07:09 +0200 Subject: [PATCH 02/18] feat: add AssetManager Closes #602 --- e2e/browser/cypress/e2e/assetManager.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/browser/cypress/e2e/assetManager.cy.js b/e2e/browser/cypress/e2e/assetManager.cy.js index 6862dd7af..2e27f408c 100644 --- a/e2e/browser/cypress/e2e/assetManager.cy.js +++ b/e2e/browser/cypress/e2e/assetManager.cy.js @@ -5,7 +5,7 @@ import ids from '../../.dfx/local/canister_ids.json'; const canisterId = ids.assetstorage.local; -// Returns AssetManager instance with principal: +// Returns AssetManager instance with the following principal: // 535yc-uxytb-gfk7h-tny7p-vjkoe-i4krp-3qmcl-uqfgr-cpgej-yqtjq-rqe const setup = async () => { const identity = Ed25519KeyIdentity.generate( From 43255eb7f4825ba9f73e58417d59b3b40f197089 Mon Sep 17 00:00:00 2001 From: sea-snake Date: Mon, 26 Sep 2022 15:15:47 +0200 Subject: [PATCH 03/18] Refactor, remove deps and --- e2e/browser/cypress/e2e/assetManager.cy.js | 40 +- e2e/node/basic/assets.test.ts | 89 ++++ e2e/node/canisters/assets.wasm | Bin 0 -> 605132 bytes e2e/node/package.json | 1 + package-lock.json | 44 +- packages/agent/tsconfig.json | 3 +- packages/assets/package.json | 3 +- packages/assets/src/canisters/assets_idl.ts | 2 +- .../assets/src/canisters/assets_service.ts | 2 +- packages/assets/src/index.ts | 386 +++++++++++------- .../assets/src/readable/readableBlob.test.ts | 18 + packages/assets/src/readable/readableBlob.ts | 28 ++ .../assets/src/readable/readableBytes.test.ts | 35 ++ packages/assets/src/readable/readableBytes.ts | 31 ++ .../assets/src/readable/readableFile.test.ts | 17 + packages/assets/src/readable/readableFile.ts | 29 ++ .../assets/src/readable/readablePath.test.ts | 19 + packages/assets/src/readable/readablePath.ts | 89 ++++ packages/assets/src/readableData.test.ts | 108 ----- packages/assets/src/readableData.ts | 194 --------- packages/assets/src/utils/limit.ts | 32 ++ 21 files changed, 646 insertions(+), 524 deletions(-) create mode 100644 e2e/node/basic/assets.test.ts create mode 100644 e2e/node/canisters/assets.wasm create mode 100644 packages/assets/src/readable/readableBlob.test.ts create mode 100644 packages/assets/src/readable/readableBlob.ts create mode 100644 packages/assets/src/readable/readableBytes.test.ts create mode 100644 packages/assets/src/readable/readableBytes.ts create mode 100644 packages/assets/src/readable/readableFile.test.ts create mode 100644 packages/assets/src/readable/readableFile.ts create mode 100644 packages/assets/src/readable/readablePath.test.ts create mode 100644 packages/assets/src/readable/readablePath.ts delete mode 100644 packages/assets/src/readableData.test.ts delete mode 100644 packages/assets/src/readableData.ts create mode 100644 packages/assets/src/utils/limit.ts diff --git a/e2e/browser/cypress/e2e/assetManager.cy.js b/e2e/browser/cypress/e2e/assetManager.cy.js index 2e27f408c..8db243869 100644 --- a/e2e/browser/cypress/e2e/assetManager.cy.js +++ b/e2e/browser/cypress/e2e/assetManager.cy.js @@ -17,17 +17,15 @@ const setup = async () => { return { assetManager }; }; -// Returns ReadableData implementation that returns pseudo random bytes -const randomReadableData = length => { +// Returns Readable implementation that returns pseudo random bytes +const randomReadable = length => { const rand = Math.floor(Math.random() * 10000); return { fileName: 'data.bin', - path: '', contentType: 'application/octet-stream', length, - contentEncoding: 'identity', - open: () => Promise.resolve(), - close: () => Promise.resolve(), + open: async () => {}, + close: async () => {}, slice: async (start, end) => { return Uint8Array.from( Array.from({ length: end - start }).map((_, i) => { @@ -49,18 +47,17 @@ describe('AssetManager tests', () => { cy.visit('http://localhost:1234'); cy.window().then({ timeout: 10000 }, async window => { const { assetManager } = await setup(); - const randomBytes = randomReadableData(1000000); - randomBytes.fileName = '1MB.bin'; - const key = await assetManager.store(randomBytes); + const readable = randomReadable(1000000); + readable.fileName = '1MB.bin'; + const key = await assetManager.store({ readable }); const asset = await assetManager.get(key); - const sentData = await randomBytes.slice(0, randomBytes.length); + const sentData = await readable.slice(0, readable.length); const receivedData = await asset.toUint8Array(); const isCertified = await asset.isCertified(); - expect(key).to.equal([randomBytes.path, randomBytes.fileName].join('/')); - expect(asset.contentType).to.equal(randomBytes.contentType); - expect(asset.length).to.equal(randomBytes.length); - expect(asset.contentEncoding).to.equal(randomBytes.contentEncoding); + expect(key).to.equal([readable.path, readable.fileName].join('/')); + expect(asset.contentType).to.equal(readable.contentType); + expect(asset.length).to.equal(readable.length); expect(Array.from(receivedData).join()).to.equal(Array.from(sentData).join()); expect(isCertified).to.equal(true); }); @@ -69,18 +66,17 @@ describe('AssetManager tests', () => { cy.visit('http://localhost:1234'); cy.window().then({ timeout: 20000 }, async window => { const { assetManager } = await setup(); - const randomBytes = randomReadableData(3000000); - randomBytes.fileName = '3MB.bin'; - const key = await assetManager.store(randomBytes); + const readable = randomReadable(3000000); + readable.fileName = '3MB.bin'; + const key = await assetManager.store({ readable }); const asset = await assetManager.get(key); - const sentData = await randomBytes.slice(0, randomBytes.length); + const sentData = await readable.slice(0, readable.length); const receivedData = await asset.toUint8Array(); const isCertified = await asset.isCertified(); - expect(key).to.equal([randomBytes.path, randomBytes.fileName].join('/')); - expect(asset.contentType).to.equal(randomBytes.contentType); - expect(asset.length).to.equal(randomBytes.length); - expect(asset.contentEncoding).to.equal(randomBytes.contentEncoding); + expect(key).to.equal([readable.path, readable.fileName].join('/')); + expect(asset.contentType).to.equal(readable.contentType); + expect(asset.length).to.equal(readable.length); expect(Array.from(receivedData).join()).to.equal(Array.from(sentData).join()); expect(isCertified).to.equal(true); }); diff --git a/e2e/node/basic/assets.test.ts b/e2e/node/basic/assets.test.ts new file mode 100644 index 000000000..c267d5d55 --- /dev/null +++ b/e2e/node/basic/assets.test.ts @@ -0,0 +1,89 @@ +/** + * @jest-environment node + */ +import { readFileSync } from 'fs'; +import path from 'path'; +import agent from '../utils/agent'; +import { Actor } from '@dfinity/agent'; +import { Principal } from '@dfinity/principal'; +import { AssetManager } from '@dfinity/assets'; + +/** + * Create (pseudo) random bytes Readable + * @param fileName File name of Readable + * @param length Byte length of Readable + */ +const randomBytesReadable = (fileName: string, length: number) => { + const rand = Math.floor(Math.random() * 10000); + return { + fileName, + contentType: 'application/octet-stream', + length, + open: async () => {}, + close: async () => {}, + slice: async (start: number, end: number) => { + return Uint8Array.from( + Array.from({ length: end - start }).map((_, i) => { + const offset = start + i; + const x = Math.sin(rand + offset) * 10000; + return Math.floor((x - Math.floor(x)) * 256); + }), + ); + }, + }; +}; + +jest.setTimeout(60000); +describe('assets', () => { + let canisterId: Principal; + + const testRandomBytes = async (fileName: string, length: number) => { + const assetManager = new AssetManager({ canisterId, agent: await agent }); + const readable = randomBytesReadable(fileName, length); + const key = await assetManager.store({ readable }); + const asset = await assetManager.get(key); + const sentData = await readable.slice(0, readable.length); + const receivedData = await asset.toUint8Array(); + const isCertified = await asset.isCertified(); + await assetManager.delete(key); + expect(key).toEqual(`/${readable.fileName}`); + expect(asset.contentType).toEqual(readable.contentType); + expect(asset.length).toEqual(readable.length); + expect(Array.from(receivedData).join()).toEqual(Array.from(sentData).join()); + expect(isCertified).toBe(true); + await expect(assetManager.get(key)).rejects.toThrow(/asset not found/); + }; + + beforeAll(async () => { + const module = readFileSync(path.join(__dirname, '../canisters/assets.wasm')); + canisterId = await Actor.createCanister({ agent: await agent }); + await Actor.install({ module }, { canisterId, agent: await agent }); + }); + + afterEach(async () => { + const assetManager = new AssetManager({ canisterId, agent: await agent }); + await assetManager.clear(); + }); + + it('store, get and delete 1MB asset (single chunk)', () => testRandomBytes('1MB.bin', 1000000)); + + it('store, get and delete 3MB asset (multiple chunk)', () => testRandomBytes('3MB.bin', 3000000)); + + it('batch process assets and verify asset list', async () => { + const assetManager = new AssetManager({ canisterId, agent: await agent }); + const batch = assetManager.batch(); + + // Initial X asset + const x = randomBytesReadable('X.bin', 1000); + await assetManager.store({ readable: x }); + + // Batch store A and B assets and delete X asset + const readables = [randomBytesReadable('A.bin', 1000), randomBytesReadable('B.bin', 1000)]; + await batch.delete(`/${x.fileName}`); + await Promise.all(readables.map(readable => batch.store({ readable }))); + await batch.commit(); + await expect( + assetManager.list().then(assets => assets.map(asset => asset.key).sort()), + ).resolves.toEqual(readables.map(({ fileName }) => `/${fileName}`).sort()); + }); +}); diff --git a/e2e/node/canisters/assets.wasm b/e2e/node/canisters/assets.wasm new file mode 100644 index 0000000000000000000000000000000000000000..27a8873791aa86b507cec3133f0a238f9f3dd081 GIT binary patch literal 605132 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 z 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 -EZLc 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 XEBuF0fYgWXJrPRp`gHc@`riKoK0K_M literal 0 HcmV?d00001 diff --git a/e2e/node/package.json b/e2e/node/package.json index f4f6119ca..e01fcc830 100644 --- a/e2e/node/package.json +++ b/e2e/node/package.json @@ -18,6 +18,7 @@ "dependencies": { "@dfinity/agent": "^0.12.2-beta.0", "@dfinity/authentication": "^0.12.2-beta.0", + "@dfinity/assets": "^0.12.2-beta.0", "@dfinity/identity": "^0.12.2-beta.0", "@dfinity/principal": "^0.12.2-beta.0", "@trust/webcrypto": "^0.9.2", diff --git a/package-lock.json b/package-lock.json index d77a67211..0e50b0346 100644 --- a/package-lock.json +++ b/package-lock.json @@ -135,6 +135,7 @@ "version": "0.12.2-beta.0", "dependencies": { "@dfinity/agent": "^0.12.2-beta.0", + "@dfinity/assets": "^0.12.2-beta.0", "@dfinity/authentication": "^0.12.2-beta.0", "@dfinity/identity": "^0.12.2-beta.0", "@dfinity/principal": "^0.12.2-beta.0", @@ -18958,8 +18959,7 @@ "dependencies": { "@dfinity/agent": "^0.12.2-beta.0", "base64-arraybuffer": "^1.0.2", - "mime": "^3.0.0", - "p-limit": "^4.0.0" + "mime": "^3.0.0" }, "devDependencies": { "@peculiar/webcrypto": "^1.4.0", @@ -19045,20 +19045,6 @@ "node": ">=10" } }, - "packages/assets/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/assets/node_modules/typedoc": { "version": "0.22.18", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz", @@ -19081,17 +19067,6 @@ "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x" } }, - "packages/assets/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/auth-client": { "name": "@dfinity/auth-client", "version": "0.12.2-beta.0", @@ -20811,7 +20786,6 @@ "eslint-plugin-jsdoc": "^39.3.3", "jest": "^28.1.2", "mime": "^3.0.0", - "p-limit": "^4.0.0", "ts-jest": "^28.0.5", "typedoc": "^0.22.11", "typescript": "^4.7.4" @@ -20864,14 +20838,6 @@ "brace-expansion": "^2.0.1" } }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "requires": { - "yocto-queue": "^1.0.0" - } - }, "typedoc": { "version": "0.22.18", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz", @@ -20884,11 +20850,6 @@ "minimatch": "^5.1.0", "shiki": "^0.10.1" } - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" } } }, @@ -21359,6 +21320,7 @@ "@babel/preset-env": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@dfinity/agent": "^0.12.2-beta.0", + "@dfinity/assets": "^0.12.2-beta.0", "@dfinity/authentication": "^0.12.2-beta.0", "@dfinity/identity": "^0.12.2-beta.0", "@dfinity/principal": "^0.12.2-beta.0", diff --git a/packages/agent/tsconfig.json b/packages/agent/tsconfig.json index 38c9b6462..15f63515c 100644 --- a/packages/agent/tsconfig.json +++ b/packages/agent/tsconfig.json @@ -12,7 +12,8 @@ "moduleResolution": "node", "outDir": "lib/esm", "paths": { - "@dfinity/agent": ["src"] + "@dfinity/agent": ["src"], + "@dfinity/assets": ["src"] }, "resolveJsonModule": true, "rootDir": "./src", diff --git a/packages/assets/package.json b/packages/assets/package.json index 4403a480a..e120197ea 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -54,8 +54,7 @@ "dependencies": { "@dfinity/agent": "^0.12.2-beta.0", "base64-arraybuffer": "^1.0.2", - "mime": "^3.0.0", - "p-limit": "^4.0.0" + "mime": "^3.0.0" }, "devDependencies": { "@peculiar/webcrypto": "^1.4.0", diff --git a/packages/assets/src/canisters/assets_idl.ts b/packages/assets/src/canisters/assets_idl.ts index 1517d1ecf..17278745e 100644 --- a/packages/assets/src/canisters/assets_idl.ts +++ b/packages/assets/src/canisters/assets_idl.ts @@ -80,7 +80,7 @@ export const idlFactory = ({ IDL }) => { [IDL.Record({ chunk_id: ChunkId })], [], ), - delete_content: IDL.Func([DeleteAssetArguments], [], []), + delete_asset: IDL.Func([DeleteAssetArguments], [], []), get: IDL.Func( [IDL.Record({ key: Key, accept_encodings: IDL.Vec(IDL.Text) })], [ diff --git a/packages/assets/src/canisters/assets_service.ts b/packages/assets/src/canisters/assets_service.ts index 9b62141eb..61c11a17e 100644 --- a/packages/assets/src/canisters/assets_service.ts +++ b/packages/assets/src/canisters/assets_service.ts @@ -83,7 +83,7 @@ export default interface _SERVICE { content: Uint8Array; batch_id: BatchId; }) => Promise<{ chunk_id: ChunkId }>; - delete_content: (arg_0: DeleteAssetArguments) => Promise; + delete_asset: (arg_0: DeleteAssetArguments) => Promise; get: (arg_0: { key: Key; accept_encodings: Array }) => Promise<{ content: Uint8Array; sha256: [] | [Uint8Array]; diff --git a/packages/assets/src/index.ts b/packages/assets/src/index.ts index 2a43fc550..38646582c 100644 --- a/packages/assets/src/index.ts +++ b/packages/assets/src/index.ts @@ -12,27 +12,91 @@ import { } from '@dfinity/agent'; import { lebDecode } from '@dfinity/candid'; import { PipeArrayBuffer } from '@dfinity/candid/lib/cjs/utils/buffer'; -import pLimit, { LimitFunction } from 'p-limit'; import { AssetsCanisterRecord, getAssetsCanister } from './canisters/assets'; -import { - ContentEncoding, - Data, - DataConfig, - DefaultReadableDataImpl, - isReadableData, - ReadableData, -} from './readableData'; import { Hasher, sha256 as jsSha256 } from 'js-sha256'; import { BatchOperationKind } from './canisters/assets_service'; import * as base64Arraybuffer from 'base64-arraybuffer'; +import { Readable } from './readable/readable'; +import { ReadableFile } from './readable/readableFile'; +import { ReadableBlob } from './readable/readableBlob'; +import { ReadablePath } from './readable/readablePath'; +import { ReadableBytes } from './readable/readableBytes'; +import { limit, LimitFn } from './utils/limit'; import fs from 'fs'; +/** + * Supported content encodings by asset canister + */ +export type ContentEncoding = 'identity' | 'gzip' | 'compress' | 'deflate' | 'br'; + +/** + * Upload progress in bytes + */ +export interface Progress { + current: number; + total: number; +} + +/** + * Configuration that can be passed to override defaults and add progress callback + */ +export interface StoreConfig { + fileName?: string; + path?: string; + contentType?: string; + contentEncoding?: ContentEncoding; + sha256?: Uint8Array; + onProgress?: (progress: Progress) => void; +} + +export interface StoreReadableArgs { + readable: Readable; + config?: StoreConfig; +} + +export interface StoreFileArgs { + file: File; + config?: StoreConfig; +} + +export interface StoreBlobArgs { + blob: Blob; + config: Omit & Required>; +} + +export interface StorePathArgs { + path: string; + config?: StoreConfig; +} + +export interface StoreBytesArgs { + bytes: Uint8Array | number[]; + config: Omit & Required>; +} + +/** + * Arguments to store an asset in asset manager + */ +export type StoreArgs = + | StoreReadableArgs + | StoreFileArgs + | StoreBlobArgs + | StorePathArgs + | StoreBytesArgs; + +/** + * Arguments to commit batch in asset manager + */ +export interface CommitBatchArgs { + onProgress?: (progress: Progress) => void; +} + /** * Configuration that can be passed to set the canister id of the * assets canister to be managed, inherits actor configuration and * has additional asset manager specific configuration options. */ -interface AssetManagerConfig extends ActorConfig { +export interface AssetManagerConfig extends ActorConfig { /** * Max number of concurrent requests to the Internet Computer */ @@ -49,7 +113,7 @@ interface AssetManagerConfig extends ActorConfig { export class AssetManager { private readonly _actor: ActorSubclass; - private readonly _pLimit: LimitFunction; + private readonly _limit: LimitFn; private readonly _maxSingleFileSize: number; private readonly _maxChunkSize: number; @@ -64,11 +128,35 @@ export class AssetManager { ...actorConfig }: AssetManagerConfig) { this._actor = getAssetsCanister(actorConfig); - this._pLimit = pLimit(concurrency ?? 32); + this._limit = limit(concurrency ?? 32); this._maxSingleFileSize = maxSingleFileSize ?? 1900000; this._maxChunkSize = maxChunkSize ?? 1900000; } + /** + * Create readable from store arguments + * @param args Arguments with either a file, blob, path, bytes or custom Readable implementation + */ + static async toReadable(args: StoreArgs): Promise { + if ('readable' in args) { + return args.readable; + } + if ('file' in args) { + return new ReadableFile(args.file); + } + if ('blob' in args) { + return new ReadableBlob(args.config.fileName, args.blob); + } + if ('path' in args) { + return await ReadablePath.create(args.path); + } + if ('bytes' in args) { + return new ReadableBytes(args.config.fileName, args.bytes); + } + + throw new Error('Invalid arguments, readable could not be created'); + } + /** * Get list of all files in assets canister * @return All files in asset canister @@ -79,51 +167,35 @@ export class AssetManager { /** * Store data on assets canister - * @param readableData (custom) ReadableData instance + * @param args Arguments with either a file, blob, path, bytes or custom Readable implementation */ - public async store(readableData: ReadableData): Promise; - /** - * Store data on assets canister - * @param data Either a Blob, Uint8Array or number[] - * @param config Configuration and overrides, file name is required - */ - public async store( - data: Exclude, - config: Omit & Required>, - ): Promise; - /** - * Store data on assets canister - * @param data Either a File (web) or file path (Node) - * @param config Optional configuration and overrides - */ - public async store(data: File | string, config?: DataConfig): Promise; - public async store(data: Data | ReadableData, config?: DataConfig): Promise { - const readableData = isReadableData(data) - ? data - : await DefaultReadableDataImpl.create(data as any, config); - const key = [readableData.path, readableData.fileName].join('/'); - - if (readableData.length <= this._maxSingleFileSize) { + public async store(args: StoreArgs): Promise { + const readable = await AssetManager.toReadable(args); + const key = [args.config?.path ?? '', args.config?.fileName ?? readable.fileName].join('/'); + + if (readable.length <= this._maxSingleFileSize) { // Asset is small enough to be uploaded in one request - await this._pLimit(async () => { - await readableData.open(); - const bytes = await readableData.slice(0, readableData.length); - await readableData.close(); + await this._limit(async () => { + await readable.open(); + const bytes = await readable.slice(0, readable.length); + await readable.close(); const sha256 = - config?.sha256 ?? + args.config?.sha256 ?? new Uint8Array(jsSha256.create().update(new Uint8Array(bytes)).arrayBuffer()); return this._actor.store({ key, content: bytes, - content_type: readableData.contentType, + content_type: readable.contentType, sha256: [sha256], - content_encoding: readableData.contentEncoding, + content_encoding: args.config?.contentEncoding ?? 'identity', }); }); + // Call progress callback for consistent behavior even though there is only a single chunk + args.config?.onProgress?.({ current: readable.length, total: readable.length }); } else { // Create batch to upload asset in chunks const batch = this.batch(); - batch.store(readableData); + await batch.store({ readable: readable, config: args.config }); await batch.commit(); } @@ -135,7 +207,7 @@ export class AssetManager { * @param key The path to the file on the assets canister e.g. /folder/to/my_file.txt */ public async delete(key: string): Promise { - await this._actor.delete_content({ key }); + await this._actor.delete_asset({ key }); } /** @@ -158,7 +230,7 @@ export class AssetManager { return new Asset( this._actor, - this._pLimit, + this._limit, this._maxSingleFileSize, this._maxChunkSize, key, @@ -176,14 +248,122 @@ export class AssetManager { * Create a batch assets operations instance, commit multiple operations in a single request */ public batch(): AssetManagerBatch { - return new AssetManagerBatch(this._actor, this._pLimit, this._maxChunkSize); + return new AssetManagerBatch(this._actor, this._limit, this._maxChunkSize); + } +} + +class AssetManagerBatch { + private _scheduledOperations: Array< + (batch_id: bigint, onProgress?: (progress: Progress) => void) => Promise + > = []; + private _sha256: { [key: string]: Hasher } = {}; + private _progress: { [key: string]: Progress } = {}; + + constructor( + private readonly _actor: ActorSubclass, + private readonly _pLimit: LimitFn, + private readonly _maxChunkSize: number, + ) {} + + /** + * Insert batch operation to store data on assets canister + * @param args Arguments with either a file, blob, path, bytes or custom Readable implementation + */ + public async store(args: StoreArgs): Promise { + const readable = await AssetManager.toReadable(args); + const key = [args.config?.path ?? '', args.config?.fileName ?? readable.fileName].join('/'); + if (!args.config?.sha256) { + this._sha256[key] = jsSha256.create(); + } + this._progress[key] = { current: 0, total: readable.length }; + this._scheduledOperations.push(async (batch_id, onProgress) => { + await readable.open(); + const chunkCount = Math.ceil(readable.length / this._maxChunkSize); + const chunkIds: bigint[] = await Promise.all( + Array.from({ length: chunkCount }).map(async (_, index) => { + const content = await readable.slice( + index * this._maxChunkSize, + Math.min((index + 1) * this._maxChunkSize, readable.length), + ); + if (!args.config?.sha256) { + this._sha256[key].update(content); + } + const { chunk_id } = await this._pLimit(() => + this._actor.create_chunk({ + content, + batch_id, + }), + ); + this._progress[key].current += content.length; + + // Individual progress callback + args.config?.onProgress?.(this._progress[key]); + + // Whole commit progress callback + onProgress?.({ + current: Object.values(this._progress).reduce((acc, val) => acc + val.current, 0), + total: Object.values(this._progress).reduce((acc, val) => acc + val.total, 0), + }); + + return chunk_id; + }), + ); + await readable.close(); + return [ + { + CreateAsset: { key, content_type: args.config?.contentType ?? readable.contentType }, + }, + { + SetAssetContent: { + key, + sha256: [args.config?.sha256 ?? new Uint8Array(this._sha256[key].arrayBuffer())], + chunk_ids: chunkIds, + content_encoding: args.config?.contentEncoding ?? 'identity', + }, + }, + ]; + }); + return key; + } + + /** + * Insert batch operation to delete file from assets canister + * @param key The path to the file on the assets canister e.g. /folder/to/my_file.txt + */ + public delete(key: string): void { + this._scheduledOperations.push(async () => [{ DeleteAsset: { key } }]); + } + + /** + * Commit all batch operations to assets canister + */ + public async commit(args?: CommitBatchArgs): Promise { + // Create batch + const { batch_id } = await this._pLimit(() => this._actor.create_batch({})); + + // Execute scheduled operations + const operations = ( + await Promise.all( + this._scheduledOperations.map(scheduled_operation => + scheduled_operation(batch_id, args?.onProgress), + ), + ) + ).flat(); + + // Commit batch + await this._pLimit(() => this._actor.commit_batch({ batch_id, operations })); + + // Cleanup + this._scheduledOperations = []; + this._sha256 = {}; + this._progress = {}; } } class Asset { constructor( private readonly _actor: ActorSubclass, - private readonly _pLimit: LimitFunction, + private readonly _limit: LimitFn, private readonly _maxSingleFileSize: number, private readonly _maxChunkSize: number, private readonly _key: string, @@ -258,7 +438,7 @@ class Asset { onChunk(0, this._content); await Promise.all( Array.from({ length: Math.ceil(this.length / this.chunkSize) - 1 }).map((_, index) => - this._pLimit(async () => { + this._limit(async () => { const { content } = await this._actor.get_chunk({ key: this._key, content_encoding: this.contentEncoding, @@ -274,7 +454,7 @@ class Asset { /** * Check if asset has been certified, which means that the content's hash is in the canister hash tree */ - public async isCertified() { + public async isCertified(): Promise { // Below implementation is based on Internet Computer service worker const agent = Actor.agentOf(this._actor) ?? getDefaultAgent(); const canisterId = Actor.canisterIdOf(this._actor); @@ -283,7 +463,7 @@ class Asset { throw Error('Agent is missing root key'); } - const response = await this._pLimit(() => + const response = await this._limit(() => this._actor.http_request({ method: 'get', url: this._key, @@ -327,7 +507,7 @@ class Asset { certificate: new Uint8Array(certificate!), rootKey: agent.rootKey, canisterId, - }).catch(() => undefined); + }).catch(() => {}); if (!cert) { // Certificate is not valid @@ -364,105 +544,3 @@ class Asset { return !!treeSha && !!this.sha256 && compare(this.sha256.buffer, treeSha) === 0; } } - -class AssetManagerBatch { - private readonly _scheduledOperations: Array< - (batch_id: bigint) => Promise - > = []; - private readonly _sha256: { [key: string]: Hasher } = {}; - - constructor( - private readonly _actor: ActorSubclass, - private readonly _pLimit: LimitFunction, - private readonly _maxChunkSize: number, - ) {} - - /** - * Insert batch operation to store data on assets canister - * @param readableData ReadableData instance - */ - public async store(readableData: ReadableData): Promise; - /** - * Insert batch operation to store data on assets canister - * @param data Either a Blob, Uint8Array or number[] - * @param config Configuration and overrides, file name is required - */ - public async store( - data: Exclude, - config: Omit & Required>, - ): Promise; - /** - * Insert batch operation to store data on assets canister - * @param data Either a File (web) or file path (Node) - * @param config Optional configuration and overrides - */ - public async store(data: File | string, config?: DataConfig): Promise; - public async store(data: Data | ReadableData, config?: DataConfig): Promise { - const readableData = isReadableData(data) - ? data - : await DefaultReadableDataImpl.create(data as any, config); - const key = [readableData.path, readableData.fileName].join('/'); - if (!config?.sha256) { - this._sha256[key] = jsSha256.create(); - } - this._scheduledOperations.push(async batch_id => { - await readableData.open(); - const chunkIds: bigint[] = await Promise.all( - Array.from({ length: Math.ceil(readableData.length / this._maxChunkSize) }).map( - async (_, index) => { - const content = await readableData.slice( - index * this._maxChunkSize, - Math.min((index + 1) * this._maxChunkSize, readableData.length), - ); - if (!config?.sha256) { - this._sha256[key].update(content); - } - const { chunk_id } = await this._pLimit(() => - this._actor.create_chunk({ - content, - batch_id, - }), - ); - return chunk_id; - }, - ), - ); - await readableData.close; - return [ - { - CreateAsset: { key, content_type: readableData.contentType }, - }, - { - SetAssetContent: { - key, - sha256: [config?.sha256 ?? new Uint8Array(this._sha256[key].arrayBuffer())], - chunk_ids: chunkIds, - content_encoding: readableData.contentEncoding, - }, - }, - ]; - }); - return key; - } - - /** - * Insert batch operation to delete file from assets canister - * @param key The path to the file on the assets canister e.g. /folder/to/my_file.txt - */ - public delete(key: string): void { - this._scheduledOperations.push(async () => [{ DeleteAsset: { key } }]); - } - - /** - * Commit all batch operations to assets canister - */ - public async commit(): Promise { - const { batch_id } = await this._pLimit(() => this._actor.create_batch({})); - const operations = ( - await Promise.all( - this._scheduledOperations.map(scheduled_operation => scheduled_operation(batch_id)), - ) - ).flat(); - await this._pLimit(() => this._actor.commit_batch({ batch_id, operations })); - } -} diff --git a/packages/assets/src/readable/readableBlob.test.ts b/packages/assets/src/readable/readableBlob.test.ts new file mode 100644 index 000000000..5b6cdac74 --- /dev/null +++ b/packages/assets/src/readable/readableBlob.test.ts @@ -0,0 +1,18 @@ +import { ReadableBlob } from './readableBlob'; + +describe('ReadableBlob', () => { + test('ReadableBlob from Blob', async () => { + const blob = new Blob(['Hello world!']); + const fileName = 'hello.txt'; + const readable = new ReadableBlob(fileName, blob); + + expect(readable.fileName).toEqual(fileName); + expect(readable.contentType).toEqual('text/plain'); + expect(readable.length).toEqual(blob.size); + await readable.open(); + expect(await readable.slice(1, 4)).toEqual( + new Uint8Array(await blob.slice(1, 4).arrayBuffer()), + ); + await readable.close(); + }); +}); diff --git a/packages/assets/src/readable/readableBlob.ts b/packages/assets/src/readable/readableBlob.ts new file mode 100644 index 000000000..0b69eb34c --- /dev/null +++ b/packages/assets/src/readable/readableBlob.ts @@ -0,0 +1,28 @@ +import { Readable } from './readable'; +import mime from 'mime/lite'; + +export class ReadableBlob implements Readable { + public readonly fileName: string; + private readonly _blob: Blob; + + constructor(fileName: string, blob: Blob) { + this.fileName = fileName; + this._blob = blob; + } + + public get contentType(): string { + return this._blob.type || (mime.getType(this.fileName) ?? 'application/octet-stream'); + } + + public get length(): number { + return this._blob.size; + } + + async open(): Promise {} + + async close(): Promise {} + + async slice(start: number, end: number): Promise { + return new Uint8Array(await this._blob.slice(start, end).arrayBuffer()); + } +} diff --git a/packages/assets/src/readable/readableBytes.test.ts b/packages/assets/src/readable/readableBytes.test.ts new file mode 100644 index 000000000..1f76b7f15 --- /dev/null +++ b/packages/assets/src/readable/readableBytes.test.ts @@ -0,0 +1,35 @@ +import { ReadableBytes } from './readableBytes'; + +const transparentPixelGif = [ + 71, 73, 70, 56, 57, 97, 1, 0, 1, 0, 0, 0, 0, 33, 249, 4, 1, 0, 0, 0, 0, 44, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 2, 1, 0, 0, +]; + +describe('ReadableBytes', () => { + test('ReadableBytes from Uint8Array', async () => { + const uint8Array = Uint8Array.from(transparentPixelGif); + const fileName = 'transparent_pixel.gif'; + const readable = new ReadableBytes(fileName, Uint8Array.from(transparentPixelGif)); + + expect(readable.fileName).toEqual(fileName); + expect(readable.contentType).toEqual('image/gif'); + expect(readable.length).toEqual(uint8Array.length); + await readable.open(); + expect(await readable.slice(16, 24)).toEqual(uint8Array.slice(16, 24)); + await readable.close(); + }); + + test('ReadableBytes from number[]', async () => { + const fileName = 'transparent_pixel.gif'; + const readable = new ReadableBytes(fileName, transparentPixelGif); + + expect(readable.fileName).toEqual(fileName); + expect(readable.contentType).toEqual('image/gif'); + expect(readable.length).toEqual(transparentPixelGif.length); + await readable.open(); + expect(await readable.slice(16, 24)).toEqual( + Uint8Array.from(transparentPixelGif.slice(16, 24)), + ); + await readable.close(); + }); +}); diff --git a/packages/assets/src/readable/readableBytes.ts b/packages/assets/src/readable/readableBytes.ts new file mode 100644 index 000000000..a894ffc57 --- /dev/null +++ b/packages/assets/src/readable/readableBytes.ts @@ -0,0 +1,31 @@ +import { Readable } from './readable'; +import mime from 'mime/lite'; + +export class ReadableBytes implements Readable { + public readonly fileName: string; + private readonly _bytes: Uint8Array | number[]; + + constructor(fileName: string, bytes: Uint8Array | number[]) { + this.fileName = fileName; + this._bytes = bytes; + } + + public get contentType(): string { + return mime.getType(this.fileName) ?? 'application/octet-stream'; + } + + public get length(): number { + return this._bytes.length; + } + + public async open(): Promise {} + + public async close(): Promise {} + + public async slice(start: number, end: number): Promise { + if (this._bytes instanceof Uint8Array) { + return this._bytes.slice(start, end); + } + return Uint8Array.from(this._bytes.slice(start, end)); + } +} diff --git a/packages/assets/src/readable/readableFile.test.ts b/packages/assets/src/readable/readableFile.test.ts new file mode 100644 index 000000000..4e84d9951 --- /dev/null +++ b/packages/assets/src/readable/readableFile.test.ts @@ -0,0 +1,17 @@ +import { ReadableFile } from './readableFile'; + +describe('ReadableFile', () => { + test('ReadableFile from File', async () => { + const file = new File(['Hello world!'], 'hello.txt'); + const readable = new ReadableFile(file); + + expect(readable.fileName).toEqual(file.name); + expect(readable.contentType).toEqual('text/plain'); + expect(readable.length).toEqual(file.size); + await readable.open(); + expect(await readable.slice(1, 4)).toEqual( + new Uint8Array(await file.slice(1, 4).arrayBuffer()), + ); + await readable.close(); + }); +}); diff --git a/packages/assets/src/readable/readableFile.ts b/packages/assets/src/readable/readableFile.ts new file mode 100644 index 000000000..d811f1bef --- /dev/null +++ b/packages/assets/src/readable/readableFile.ts @@ -0,0 +1,29 @@ +import { Readable } from './readable'; + +export class ReadableFile implements Readable { + private readonly _file: File; + + constructor(file: File) { + this._file = file; + } + + public get fileName(): string { + return this._file.name; + } + + public get contentType(): string { + return this._file.type; + } + + public get length(): number { + return this._file.size; + } + + public async open(): Promise {} + + public async close(): Promise {} + + public async slice(start: number, end: number): Promise { + return new Uint8Array(await this._file.slice(start, end).arrayBuffer()); + } +} diff --git a/packages/assets/src/readable/readablePath.test.ts b/packages/assets/src/readable/readablePath.test.ts new file mode 100644 index 000000000..fc64d66e6 --- /dev/null +++ b/packages/assets/src/readable/readablePath.test.ts @@ -0,0 +1,19 @@ +import { basename, resolve } from 'path'; +import { ReadablePath } from './readablePath'; +import { readFileSync, statSync } from 'fs'; + +describe('ReadablePath', () => { + test('ReadablePath from path', async () => { + const path = resolve(__dirname, '../../package.json'); + const readable = await ReadablePath.create(path); + + expect(readable.fileName).toEqual(basename(path)); + expect(readable.contentType).toEqual('application/json'); + expect(readable.length).toEqual(statSync(path).size); + await readable.open(); + expect(await readable.slice(16, 24)).toEqual( + new Uint8Array(readFileSync(path).subarray(16, 24)), + ); + await readable.close(); + }); +}); diff --git a/packages/assets/src/readable/readablePath.ts b/packages/assets/src/readable/readablePath.ts new file mode 100644 index 000000000..065455aa8 --- /dev/null +++ b/packages/assets/src/readable/readablePath.ts @@ -0,0 +1,89 @@ +import { Readable } from './readable'; +import mime from 'mime/lite'; +import fs from 'fs'; +import path from 'path'; + +export class ReadablePath implements Readable { + private readonly _path: string; + private readonly _size: number; + private _fd?: number; + + protected constructor(path: string, size: number) { + this._path = path; + this._size = size; + } + + public get fileName(): string { + return path.basename(this._path); + } + + public get contentType(): string { + return mime.getType(this.fileName) ?? 'application/octet-stream'; + } + + public get length(): number { + return this._size; + } + + static async create(path: string): Promise { + return new Promise((resolve, reject) => { + fs.stat(path, (err, stats) => { + if (err) { + reject(err); + return; + } + resolve(new ReadablePath(path, stats.size)); + }); + }); + } + + public async open(): Promise { + return new Promise(async (resolve, reject) => { + if (this._fd !== undefined) { + reject('File is already open'); + return; + } + fs.open(this._path, (err, fd) => { + if (err) { + reject(err); + return; + } + this._fd = fd; + resolve(); + }); + }); + } + + public async close(): Promise { + return new Promise(async (resolve, reject) => { + if (this._fd === undefined) { + reject('No open file handle found'); + return; + } + fs.close(this._fd, err => { + if (err) { + reject(err); + return; + } + resolve(); + }); + }); + } + + public async slice(start: number, end: number): Promise { + return new Promise((resolve, reject) => { + if (this._fd === undefined) { + reject('No open file handle found'); + return; + } + const buffer = Buffer.alloc(end - start); + fs.read(this._fd, buffer, 0, end - start, start, (err: any) => { + if (err) { + reject(err); + return; + } + resolve(new Uint8Array(buffer)); + }); + }); + } +} diff --git a/packages/assets/src/readableData.test.ts b/packages/assets/src/readableData.test.ts deleted file mode 100644 index 6075401d0..000000000 --- a/packages/assets/src/readableData.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { DataConfig, DefaultReadableDataImpl } from './readableData'; -import { basename, resolve } from 'path'; -import { statSync, readFileSync } from 'fs'; - -const transparentPixelGif = [ - 71, 73, 70, 56, 57, 97, 1, 0, 1, 0, 0, 0, 0, 33, 249, 4, 1, 0, 0, 0, 0, 44, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 2, 1, 0, 0, -]; - -describe('ReadableData', () => { - test('ReadableData from File', async () => { - const file = new File(['Hello world!'], 'hello.txt'); - const readableData = new DefaultReadableDataImpl(file); - - expect(readableData.fileName).toEqual(file.name); - expect(readableData.path).toEqual('/'); - expect(readableData.contentType).toEqual('text/plain'); - expect(readableData.length).toEqual(file.size); - expect(readableData.contentEncoding).toEqual('identity'); - await readableData.open(); - expect(await readableData.slice(1, 4)).toEqual( - new Uint8Array(await file.slice(1, 4).arrayBuffer()), - ); - await readableData.close(); - }); - - test('ReadableData from Blob', async () => { - const blob = new Blob(['Hello world!']); - const fileName = 'hello.txt'; - const readableData = new DefaultReadableDataImpl(blob, { fileName }); - - expect(readableData.fileName).toEqual(fileName); - expect(readableData.path).toEqual('/'); - expect(readableData.contentType).toEqual('text/plain'); - expect(readableData.length).toEqual(blob.size); - expect(readableData.contentEncoding).toEqual('identity'); - await readableData.open(); - expect(await readableData.slice(1, 4)).toEqual( - new Uint8Array(await blob.slice(1, 4).arrayBuffer()), - ); - await readableData.close(); - }); - - test('ReadableData from Uint8Array', async () => { - const uint8Array = Uint8Array.from(transparentPixelGif); - const fileName = 'transparent_pixel.gif'; - const readableData = new DefaultReadableDataImpl(uint8Array, { fileName }); - - expect(readableData.fileName).toEqual(fileName); - expect(readableData.path).toEqual('/'); - expect(readableData.contentType).toEqual('image/gif'); - expect(readableData.length).toEqual(uint8Array.length); - expect(readableData.contentEncoding).toEqual('identity'); - await readableData.open(); - expect(await readableData.slice(16, 24)).toEqual(uint8Array.slice(16, 24)); - await readableData.close(); - }); - - test('ReadableData from number[]', async () => { - const fileName = 'transparent_pixel.gif'; - const readableData = new DefaultReadableDataImpl(transparentPixelGif, { fileName }); - - expect(readableData.fileName).toEqual(fileName); - expect(readableData.path).toEqual('/'); - expect(readableData.contentType).toEqual('image/gif'); - expect(readableData.length).toEqual(transparentPixelGif.length); - expect(readableData.contentEncoding).toEqual('identity'); - await readableData.open(); - expect(await readableData.slice(16, 24)).toEqual( - Uint8Array.from(transparentPixelGif.slice(16, 24)), - ); - await readableData.close(); - }); - - test('ReadableData from file path', async () => { - const path = resolve(__dirname, '../package.json'); - const readableData = new DefaultReadableDataImpl(path); - - expect(readableData.fileName).toEqual(basename(path)); - expect(readableData.path).toEqual('/'); - expect(readableData.contentType).toEqual('application/json'); - expect(readableData.length).toEqual(statSync(path).size); - expect(readableData.contentEncoding).toEqual('identity'); - await readableData.open(); - expect(await readableData.slice(16, 24)).toEqual( - new Uint8Array(readFileSync(path).subarray(16, 24)), - ); - await readableData.close(); - }); - - test('ReadableData with config', async () => { - const path = resolve(__dirname, '../package.json'); - const config: DataConfig = { - fileName: 'test.txt', - path: '/a/b/c', - contentType: 'text/plain', - contentEncoding: 'gzip', - sha256: Uint8Array.from([1, 2, 3]), - }; - const readableData = new DefaultReadableDataImpl(path, config); - - expect(readableData.fileName).toEqual(config.fileName); - expect(readableData.path).toEqual(config.path); - expect(readableData.contentType).toEqual(config.contentType); - expect(readableData.contentEncoding).toEqual(config.contentEncoding); - expect(readableData.sha256).toEqual(config.sha256); - }); -}); diff --git a/packages/assets/src/readableData.ts b/packages/assets/src/readableData.ts deleted file mode 100644 index 58558107c..000000000 --- a/packages/assets/src/readableData.ts +++ /dev/null @@ -1,194 +0,0 @@ -import mime from 'mime/lite'; -import fs from 'fs'; -import path from 'path'; - -export type Data = File | Blob | Uint8Array | number[] | string; - -export type ContentEncoding = 'identity' | 'gzip' | 'compress' | 'deflate' | 'br'; - -export interface DataConfig { - fileName?: string; - path?: string; - contentType?: string; - contentEncoding?: ContentEncoding; - sha256?: Uint8Array; -} - -export interface ReadableData { - fileName: string; - path: string; - contentType: string; - length: number; - contentEncoding: ContentEncoding; - sha256?: Uint8Array; - open: () => Promise; - close: () => void; - slice: (start: number, end: number) => Promise; -} - -export class DefaultReadableDataImpl implements ReadableData { - private fd?: number; - - protected constructor( - private readonly data: Data, - public readonly fileName: string, - public readonly path: string, - public readonly contentType: string, - public readonly length: number, - public readonly contentEncoding: ContentEncoding, - public readonly sha256?: Uint8Array, - ) {} - - /** - * Default implementation of reading files in AssetManager that support various types of data - * @param data Either a Blob, Uint8Array or number[] - * @param config Configuration and overrides, file name is required - */ - static async create( - data: Exclude, - config: Omit & Required>, - ): Promise; - /** - * Default implementation of reading files in AssetManager that support various types of data - * @param data Either a File (web) or file path (Node) - * @param config Optional configuration and overrides - */ - static async create(data: File | string, config?: DataConfig): Promise; - static async create(data: Data, config?: DataConfig): Promise { - const fileName = - config?.fileName ?? - (data instanceof File ? data.name : typeof data === 'string' ? path.basename(data) : ''); - const contentType = - config?.contentType ?? - (data instanceof File ? data.type : mime.getType(fileName) ?? 'application/octet-stream'); - const length = - data instanceof Blob - ? data.size - : data instanceof Uint8Array || Array.isArray(data) - ? data.length - : (await fs.promises.stat(data)).size; - - return new DefaultReadableDataImpl( - data, - fileName, - config?.path ?? '', - contentType, - length, - config?.contentEncoding ?? 'identity', - config?.sha256, - ); - } - - /** - * Open ReadableData, should always be called before slices are read - */ - public open() { - return new Promise(async (resolve, reject) => { - if (typeof this.data === 'string') { - if (typeof this.fd === 'number') { - reject('File is already open'); - return; - } - fs.open(this.data, (err: any, fd: number) => { - if (err) { - reject(err); - return; - } - this.fd = fd; - resolve(); - }); - return; - } - resolve(); - }); - } - - /** - * Close ReadableData, should always be called after all slices are read - */ - public close() { - return new Promise(async (resolve, reject) => { - if (typeof this.data === 'string') { - if (typeof this.fd !== 'number') { - reject('No open file handle found'); - return; - } - fs.close(this.fd, (err: any) => { - if (err) { - reject(err); - return; - } - resolve(); - }); - return; - } - resolve(); - }); - } - - /** - * Read slice of bytes from ReadableData - * @param start Reading start offset - * @param end Reading end offset - */ - public slice(start: number, end: number): Promise { - return new Promise(async (resolve, reject) => { - if (end <= start) { - reject('End offset should be larger than start offset'); - return; - } - - // Read slice from File or Blob in browser - if (this.data instanceof Blob) { - resolve(new Uint8Array(await this.data.slice(start, end).arrayBuffer())); - return; - } - - // Read slice from file at path in Node - if (typeof this.data === 'string') { - if (typeof this.fd !== 'number') { - reject('No open file handle found'); - return; - } - const buffer = Buffer.alloc(end - start); - fs.read(this.fd, buffer, 0, end - start, start, (err: any) => { - if (err) { - reject(err); - return; - } - resolve(new Uint8Array(buffer)); - }); - return; - } - - // Read slice from Uint8Array in browser or Node - if (this.data instanceof Uint8Array) { - resolve(this.data.slice(start, end)); - return; - } - - // Read slice from number[] in browser or Node - if (Array.isArray(this.data)) { - resolve(Uint8Array.from(this.data.slice(start, end))); - return; - } - - reject('Data slice could not be read'); - }); - } -} - -/** - * Check if value is ReadableData, used internally in AssetManager to - * differentiate between data and custom ReadableData implementations. - * @param value Either File, Blob, Uint8Array, number[], string or ReadableData - */ -export function isReadableData(value: Data | ReadableData): value is ReadableData { - return ( - !!value && - !(value instanceof Blob) && - !(value instanceof Uint8Array) && - !Array.isArray(value) && - typeof value !== 'string' - ); -} diff --git a/packages/assets/src/utils/limit.ts b/packages/assets/src/utils/limit.ts new file mode 100644 index 000000000..86adc8af5 --- /dev/null +++ b/packages/assets/src/utils/limit.ts @@ -0,0 +1,32 @@ +export type LimitFn = (fn: () => Promise) => Promise; + +/** + * Minimal promise executor with concurrency limit implementation + * @param concurrency Maximum number of promises executed concurrently + */ +export const limit = (concurrency: number): LimitFn => { + const queue: Array<{ + fn: () => Promise; + resolve: (value: any) => void; + reject: (value: any) => void; + }> = []; + let active = 0; + const next = () => { + if (active < concurrency && queue.length > 0) { + active++; + const { fn, resolve, reject } = queue.shift()!; + fn() + .then(resolve) + .catch(reject) + .then(() => { + active--; + next(); + }); + } + }; + return fn => + new Promise((resolve, reject) => { + queue.push({ fn, resolve, reject }); + next(); + }); +}; From 0376d18575cb3370938438ec52bbd1261d5acea8 Mon Sep 17 00:00:00 2001 From: sea-snake Date: Mon, 26 Sep 2022 15:44:28 +0200 Subject: [PATCH 04/18] Update concurrency to 16 --- packages/assets/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/assets/src/index.ts b/packages/assets/src/index.ts index 38646582c..ee2a17c79 100644 --- a/packages/assets/src/index.ts +++ b/packages/assets/src/index.ts @@ -128,7 +128,7 @@ export class AssetManager { ...actorConfig }: AssetManagerConfig) { this._actor = getAssetsCanister(actorConfig); - this._limit = limit(concurrency ?? 32); + this._limit = limit(concurrency ?? 16); this._maxSingleFileSize = maxSingleFileSize ?? 1900000; this._maxChunkSize = maxChunkSize ?? 1900000; } From 6058af2574b06b5b9b5d2b7033cea09227358cf2 Mon Sep 17 00:00:00 2001 From: sea-snake Date: Mon, 26 Sep 2022 16:39:01 +0200 Subject: [PATCH 05/18] Added verifySha256 --- packages/assets/src/index.ts | 117 ++++++++++++++++++++--------------- 1 file changed, 66 insertions(+), 51 deletions(-) diff --git a/packages/assets/src/index.ts b/packages/assets/src/index.ts index ee2a17c79..09040306d 100644 --- a/packages/assets/src/index.ts +++ b/packages/assets/src/index.ts @@ -16,7 +16,7 @@ import { AssetsCanisterRecord, getAssetsCanister } from './canisters/assets'; import { Hasher, sha256 as jsSha256 } from 'js-sha256'; import { BatchOperationKind } from './canisters/assets_service'; import * as base64Arraybuffer from 'base64-arraybuffer'; -import { Readable } from './readable/readable'; +import { isReadable, Readable } from './readable/readable'; import { ReadableFile } from './readable/readableFile'; import { ReadableBlob } from './readable/readableBlob'; import { ReadablePath } from './readable/readablePath'; @@ -49,30 +49,21 @@ export interface StoreConfig { onProgress?: (progress: Progress) => void; } -export interface StoreReadableArgs { - readable: Readable; - config?: StoreConfig; -} +export type StoreReadableArgs = [readable: Readable, config?: StoreConfig]; -export interface StoreFileArgs { - file: File; - config?: StoreConfig; -} +export type StoreFileArgs = [file: File, config?: StoreConfig]; -export interface StoreBlobArgs { - blob: Blob; - config: Omit & Required>; -} +export type StoreBlobArgs = [ + blob: Blob, + config: Omit & Required>, +]; -export interface StorePathArgs { - path: string; - config?: StoreConfig; -} +export type StorePathArgs = [path: string, config?: StoreConfig]; -export interface StoreBytesArgs { - bytes: Uint8Array | number[]; - config: Omit & Required>; -} +export type StoreBytesArgs = [ + bytes: Uint8Array | number[], + config: Omit & Required>, +]; /** * Arguments to store an asset in asset manager @@ -137,21 +128,21 @@ export class AssetManager { * Create readable from store arguments * @param args Arguments with either a file, blob, path, bytes or custom Readable implementation */ - static async toReadable(args: StoreArgs): Promise { - if ('readable' in args) { - return args.readable; + static async toReadable(...args: StoreArgs): Promise { + if (args[0] instanceof File) { + return new ReadableFile(args[0]); } - if ('file' in args) { - return new ReadableFile(args.file); + if (args[0] instanceof Blob && args[1]?.fileName) { + return new ReadableBlob(args[1].fileName, args[0]); } - if ('blob' in args) { - return new ReadableBlob(args.config.fileName, args.blob); + if (typeof args[0] === 'string') { + return await ReadablePath.create(args[0]); } - if ('path' in args) { - return await ReadablePath.create(args.path); + if ((Array.isArray(args[0]) || args[0]?.constructor === Uint8Array) && args[1]?.fileName) { + return new ReadableBytes(args[1].fileName, args[0]); } - if ('bytes' in args) { - return new ReadableBytes(args.config.fileName, args.bytes); + if (isReadable(args[0])) { + return args[0]; } throw new Error('Invalid arguments, readable could not be created'); @@ -169,9 +160,10 @@ export class AssetManager { * Store data on assets canister * @param args Arguments with either a file, blob, path, bytes or custom Readable implementation */ - public async store(args: StoreArgs): Promise { - const readable = await AssetManager.toReadable(args); - const key = [args.config?.path ?? '', args.config?.fileName ?? readable.fileName].join('/'); + public async store(...args: StoreArgs): Promise { + const readable = await AssetManager.toReadable(...args); + const [, config] = args; + const key = [config?.path ?? '', config?.fileName ?? readable.fileName].join('/'); if (readable.length <= this._maxSingleFileSize) { // Asset is small enough to be uploaded in one request @@ -180,22 +172,22 @@ export class AssetManager { const bytes = await readable.slice(0, readable.length); await readable.close(); const sha256 = - args.config?.sha256 ?? + config?.sha256 ?? new Uint8Array(jsSha256.create().update(new Uint8Array(bytes)).arrayBuffer()); return this._actor.store({ key, content: bytes, content_type: readable.contentType, sha256: [sha256], - content_encoding: args.config?.contentEncoding ?? 'identity', + content_encoding: config?.contentEncoding ?? 'identity', }); }); // Call progress callback for consistent behavior even though there is only a single chunk - args.config?.onProgress?.({ current: readable.length, total: readable.length }); + config?.onProgress?.({ current: readable.length, total: readable.length }); } else { // Create batch to upload asset in chunks const batch = this.batch(); - await batch.store({ readable: readable, config: args.config }); + await batch.store(readable, config); await batch.commit(); } @@ -269,10 +261,11 @@ class AssetManagerBatch { * Insert batch operation to store data on assets canister * @param args Arguments with either a file, blob, path, bytes or custom Readable implementation */ - public async store(args: StoreArgs): Promise { - const readable = await AssetManager.toReadable(args); - const key = [args.config?.path ?? '', args.config?.fileName ?? readable.fileName].join('/'); - if (!args.config?.sha256) { + public async store(...args: StoreArgs): Promise { + const readable = await AssetManager.toReadable(...args); + const [, config] = args; + const key = [config?.path ?? '', config?.fileName ?? readable.fileName].join('/'); + if (!config?.sha256) { this._sha256[key] = jsSha256.create(); } this._progress[key] = { current: 0, total: readable.length }; @@ -285,7 +278,7 @@ class AssetManagerBatch { index * this._maxChunkSize, Math.min((index + 1) * this._maxChunkSize, readable.length), ); - if (!args.config?.sha256) { + if (!config?.sha256) { this._sha256[key].update(content); } const { chunk_id } = await this._pLimit(() => @@ -297,7 +290,7 @@ class AssetManagerBatch { this._progress[key].current += content.length; // Individual progress callback - args.config?.onProgress?.(this._progress[key]); + config?.onProgress?.(this._progress[key]); // Whole commit progress callback onProgress?.({ @@ -311,14 +304,14 @@ class AssetManagerBatch { await readable.close(); return [ { - CreateAsset: { key, content_type: args.config?.contentType ?? readable.contentType }, + CreateAsset: { key, content_type: config?.contentType ?? readable.contentType }, }, { SetAssetContent: { key, - sha256: [args.config?.sha256 ?? new Uint8Array(this._sha256[key].arrayBuffer())], + sha256: [config?.sha256 ?? new Uint8Array(this._sha256[key].arrayBuffer())], chunk_ids: chunkIds, - content_encoding: args.config?.contentEncoding ?? 'identity', + content_encoding: config?.contentEncoding ?? 'identity', }, }, ]; @@ -432,13 +425,18 @@ class Asset { /** * Get All chunks of asset through `onChunk` callback, can be used for a custom storage implementation - * @param onChunk Called on each received chunk, set `concurrency` to `1` to receive chunks in sequential order + * @param onChunk Called on each received chunk + * @param sequential Chunks are received in sequential order when true or `concurrency` is `1` in config */ - public async getChunks(onChunk: (index: number, chunk: Uint8Array) => void) { + public async getChunks( + onChunk: (index: number, chunk: Uint8Array) => void, + sequential?: boolean, + ) { onChunk(0, this._content); + const chunkLimit = sequential ? limit(1) : this._limit; await Promise.all( Array.from({ length: Math.ceil(this.length / this.chunkSize) - 1 }).map((_, index) => - this._limit(async () => { + chunkLimit(async () => { const { content } = await this._actor.get_chunk({ key: this._key, content_encoding: this.contentEncoding, @@ -543,4 +541,21 @@ class Asset { return !!treeSha && !!this.sha256 && compare(this.sha256.buffer, treeSha) === 0; } + + /** + * Check if the hash of the asset data is equal to the hash that has been certified + * @param bytes Optionally pass data to hash instead of waiting for asset data to be fetched and hashed + */ + public async verifySha256(bytes?: Uint8Array | number[]): Promise { + if (!this.sha256?.buffer) { + return false; + } + const sha256 = jsSha256.create(); + if (bytes) { + sha256.update(Array.isArray(bytes) ? new Uint8Array(bytes) : bytes); + } else { + await this.getChunks((_, chunk) => sha256.update(chunk), true); + } + return compare(this.sha256.buffer, sha256.arrayBuffer()) === 0; + } } From 4ae6b377f2eed13611233fbd4ffeee52ec7e0a72 Mon Sep 17 00:00:00 2001 From: sea-snake Date: Mon, 26 Sep 2022 17:44:09 +0200 Subject: [PATCH 06/18] Update @dfinity/assets readme and changelog --- docs/generated/changelog.html | 4 + packages/assets/README.md | 184 +++++++++++++++++++++++ packages/assets/src/index.ts | 33 +++- packages/assets/src/readable/readable.ts | 17 +++ 4 files changed, 234 insertions(+), 4 deletions(-) create mode 100644 packages/assets/README.md create mode 100644 packages/assets/src/readable/readable.ts diff --git a/docs/generated/changelog.html b/docs/generated/changelog.html index f9a9e99e4..3b3306f99 100644 --- a/docs/generated/changelog.html +++ b/docs/generated/changelog.html @@ -20,6 +20,10 @@

Version 0.13.4

  • bug: auth-client storage wrapper returns after resolve to avoid idb to be recreated
  • +
  • + New package: @dfinity/assets. This package provides an asset manager to manage assets + on an assets canister. +
  • Version 0.13.3