From 566d5a5360fa2cf8f19ac23de881e8873bd40ab3 Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Tue, 25 Jul 2023 17:23:56 +0530 Subject: [PATCH] created project structure --- package.json | 4 +- packages/messenger-demo/.gitignore | 24 + packages/messenger-demo/README.md | 22 + packages/messenger-demo/config-overrides.js | 31 ++ packages/messenger-demo/package.json | 65 +++ packages/messenger-demo/public/dark-logo.png | Bin 0 -> 50861 bytes packages/messenger-demo/public/dm3-logo.png | Bin 0 -> 9345 bytes packages/messenger-demo/public/favicon.png | Bin 0 -> 5628 bytes packages/messenger-demo/public/index.html | 44 ++ packages/messenger-demo/public/logo192.png | Bin 0 -> 5347 bytes packages/messenger-demo/public/logo512.png | Bin 0 -> 9664 bytes packages/messenger-demo/public/manifest.json | 8 + packages/messenger-demo/public/robots.txt | 3 + packages/messenger-demo/src/App.tsx | 14 + packages/messenger-demo/src/Background.ts | 265 ++++++++++ packages/messenger-demo/src/index.css | 60 +++ packages/messenger-demo/src/index.tsx | 19 + packages/messenger-demo/src/logo.svg | 1 + .../messenger-demo/src/react-app-env.d.ts | 1 + .../messenger-demo/src/reportWebVitals.ts | 17 + packages/messenger-demo/src/setupTests.ts | 5 + packages/messenger-demo/tsconfig.json | 20 + packages/messenger-widget/README.md | 18 + packages/messenger-widget/babel.config.js | 6 + packages/messenger-widget/package.json | 97 ++++ packages/messenger-widget/rollup.config.js | 45 ++ .../messenger-widget/src/declaration.d.ts | 8 + packages/messenger-widget/src/index.css | 3 + packages/messenger-widget/src/index.tsx | 15 + .../messenger-widget/src/interfaces/config.ts | 22 + .../src/interfaces/context.ts | 3 + .../messenger-widget/src/views/Home/Home.css | 0 .../messenger-widget/src/views/Home/Home.tsx | 7 + packages/messenger-widget/tsconfig.json | 32 ++ yarn.lock | 463 +++++++++++++++++- 35 files changed, 1319 insertions(+), 3 deletions(-) create mode 100644 packages/messenger-demo/.gitignore create mode 100644 packages/messenger-demo/README.md create mode 100644 packages/messenger-demo/config-overrides.js create mode 100644 packages/messenger-demo/package.json create mode 100644 packages/messenger-demo/public/dark-logo.png create mode 100644 packages/messenger-demo/public/dm3-logo.png create mode 100644 packages/messenger-demo/public/favicon.png create mode 100644 packages/messenger-demo/public/index.html create mode 100644 packages/messenger-demo/public/logo192.png create mode 100644 packages/messenger-demo/public/logo512.png create mode 100644 packages/messenger-demo/public/manifest.json create mode 100644 packages/messenger-demo/public/robots.txt create mode 100644 packages/messenger-demo/src/App.tsx create mode 100644 packages/messenger-demo/src/Background.ts create mode 100644 packages/messenger-demo/src/index.css create mode 100644 packages/messenger-demo/src/index.tsx create mode 100644 packages/messenger-demo/src/logo.svg create mode 100644 packages/messenger-demo/src/react-app-env.d.ts create mode 100644 packages/messenger-demo/src/reportWebVitals.ts create mode 100644 packages/messenger-demo/src/setupTests.ts create mode 100644 packages/messenger-demo/tsconfig.json create mode 100644 packages/messenger-widget/README.md create mode 100644 packages/messenger-widget/babel.config.js create mode 100644 packages/messenger-widget/package.json create mode 100644 packages/messenger-widget/rollup.config.js create mode 100644 packages/messenger-widget/src/declaration.d.ts create mode 100644 packages/messenger-widget/src/index.css create mode 100644 packages/messenger-widget/src/index.tsx create mode 100644 packages/messenger-widget/src/interfaces/config.ts create mode 100644 packages/messenger-widget/src/interfaces/context.ts create mode 100644 packages/messenger-widget/src/views/Home/Home.css create mode 100644 packages/messenger-widget/src/views/Home/Home.tsx create mode 100644 packages/messenger-widget/tsconfig.json diff --git a/package.json b/package.json index 20463be98..7725fa11d 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,9 @@ "packages/web", "packages/billboard-widget", "packages/integration-tests", - "packages/offchain-resolver" + "packages/offchain-resolver", + "packages/messenger-widget", + "packages/messenger-demo" ], "nohoist": [ "**/react", diff --git a/packages/messenger-demo/.gitignore b/packages/messenger-demo/.gitignore new file mode 100644 index 000000000..966bc27cf --- /dev/null +++ b/packages/messenger-demo/.gitignore @@ -0,0 +1,24 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.env \ No newline at end of file diff --git a/packages/messenger-demo/README.md b/packages/messenger-demo/README.md new file mode 100644 index 000000000..da2d0d410 --- /dev/null +++ b/packages/messenger-demo/README.md @@ -0,0 +1,22 @@ +# dm3-web +## Getting Started + +### Build + +``` +cd ../../ && yarn build +``` + + +### Usage + + +yarn: +``` +yarn start +``` + +npm: +``` +yarn start +``` \ No newline at end of file diff --git a/packages/messenger-demo/config-overrides.js b/packages/messenger-demo/config-overrides.js new file mode 100644 index 000000000..50ade1799 --- /dev/null +++ b/packages/messenger-demo/config-overrides.js @@ -0,0 +1,31 @@ +const webpack = require('webpack'); +module.exports = function override(config) { + const fallback = config.resolve.fallback || {}; + Object.assign(fallback, { + crypto: require.resolve('crypto-browserify'), + stream: require.resolve('stream-browserify'), + assert: require.resolve('assert'), + http: require.resolve('stream-http'), + https: require.resolve('https-browserify'), + os: require.resolve('os-browserify'), + url: require.resolve('url'), + path: require.resolve('path-browserify'), + }); + config.module.rules.push({ + test: /\.(js|mjs|jsx)$/, + enforce: 'pre', + loader: require.resolve('source-map-loader'), + resolve: { + fullySpecified: false, + }, + }); + config.resolve.fallback = fallback; + + config.plugins = (config.plugins || []).concat([ + new webpack.ProvidePlugin({ + process: 'process/browser', + Buffer: ['buffer', 'Buffer'], + }), + ]); + return config; +}; diff --git a/packages/messenger-demo/package.json b/packages/messenger-demo/package.json new file mode 100644 index 000000000..29f2fcfbe --- /dev/null +++ b/packages/messenger-demo/package.json @@ -0,0 +1,65 @@ +{ + "name": "messenger-demo", + "version": "0.1.0", + "dependencies": { + "@popperjs/core": "^2.11.8", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.3.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.11.41", + "@types/react": "^18.0.13", + "@types/react-dom": "^18.0.5", + "autoprefixer": "10.4.5", + "bootstrap": "^5.1.3", + "messenger-widget": "0.2.0", + "postcss": "^8.4.24", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-scripts": "5.0.1", + "three": "^0.142.0", + "typescript": "^4.7.3", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-app-rewired start", + "build": "react-app-rewired build", + "test": "echo 'no tests'", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@testing-library/dom": "^9.3.1", + "@types/three": "^0.141.0", + "add": "^2.0.6", + "assert": "^2.0.0", + "buffer": "^6.0.3", + "crypto-browserify": "^3.12.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "react-app-rewired": "^2.2.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "url": "^0.11.0", + "yarn": "^1.22.19" + } +} diff --git a/packages/messenger-demo/public/dark-logo.png b/packages/messenger-demo/public/dark-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b1dee8b845067dfcc8c66ebdb164e22d90899e40 GIT binary patch literal 50861 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 bw6PsB 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%0D!&qk2kB4mJE! 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 W=<6A}ogG + + + + + + + + + + + + + dm3 + + + +
+ + + diff --git a/packages/messenger-demo/public/logo192.png b/packages/messenger-demo/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h+t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&` z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U) zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%- zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ zL>kC0nPSFzlcB7p41doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K& zk3p+O0AFZ1eu^T3s};B%6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$ zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3RBsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm` zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3 z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv zm&%PX4^|rX|?E4^CkplWWNv*OKM>DxPa z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`} zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1iStW;*^={rP1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?; zcMXv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p z9ndXT$OW51#H5cFKa76c<%nNkP~FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l zE=MKD*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7VkHxHT;)4sd+?Wc4* z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<% zZvNEqyK5FgPsQ`QIu9P0x_}wJR~^CotL|n zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n}g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z< z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW% zs{;nh@aDX11y^HOFXB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw? zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9 zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e-voloX`4DQyEK+DmrZh8A$)iWL#NO9+Y@!sO2f@rI!@jN@>HOA< z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY& zl(XQZ60yWXV-|Ps!A{EF;=_z(YAF=T(-MkJXUoX zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL zenk7pVg}0{dKU}&l)Y2Y2eFMdS(JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{(rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF z`-r5K7(IPSiKQ2|U9+`@Js!g6sfJwAHVd|s?|mnC*q zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7 zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c zTj0wTCKrhWf+F#5>EgX`sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0 znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr` z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL z(F}L&N7qhL2PCq)fRh}XO@U`Yn<?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9 X@eDJUQo;Ye2mwlRs?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00HAB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3 zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^ z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4 z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOcLqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%| zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71 zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9 z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf}bD7nW^Haf}_gXciYKX{QBxIPSx2Ma? zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2 zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8 zZ%w!{Z+MHeZ*OE4v*otkZqz11*s!#s^Gq>+o`8Z5 z^i-qzJLJh9!W-;SmFkR8HEZJWiXk$40i6)7 zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3) zSKQ2QSujzNMSL2r&bYs`|i2Dnn z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK z)=XQs(|6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+ z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76} z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y zCPeefABp34U-s?WmU#JJw23dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5 z7=r2C-+lM2AB9X0T_`?EW&Byv&K?HS4QLoylJ|OAF z`8atBNTzJ&AQ!>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO&*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_ zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3 zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0 z*x5*nb=R5u><7lyVpNAR?q@1U59 zO+)QWwL8t zyip?u_nI+K$uh{y)~}qj?(w0&=SE^8`_WMM zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP|(1g7i_Q<>aEAT{5(yD z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P z31G4(lV|b}uSDCIrjk+M1R!X7s4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt939UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3 zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz z1lU~K_vAm0m8Qk}K$F>|>RPK%<1SI0(G+8q~H zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB; z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8 zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+ z)RbfHktUm|lg&U3YM%lMUM(fu}i#kjX9h>GYctkx9Mt_8{@s%!K_EI zScgwy6%_fR?CGJQtmgNAj^h9B#zmaMDWgH55pGuY1Gv7D z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{ ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY zBJ>X9z!xfDGY z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+ ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS}0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7;YFLS$uIzb0E3lozs5`Xy zi~vF+%{z9uLjKvKPhP%x5f~7-Gj+%5N`%^=yk*Qn{`> z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~ zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cFha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX zh2_ZdQCyFOQ)l(}gft0UZG`Sh2`x-w`5vC2UD}lZs*5 zG76$akzn}Xi))L3oGJ75#pcN=cX3!=57$Ha=hQ2^lwdyU#a}4JJOz6ddR%zae%#4& za)bFj)z=YQela(F#Y|Q#dp}PJghITwXouVaMq$BM?K%cXn9^Y@g43$=O)F&ZlOUom zJiad#dea;-eywBA@e&D6Pdso1?2^(pXiN91?jvcaUyYoKUmvl5G9e$W!okWe*@a<^ z8cQQ6cNSf+UPDx%?_G4aIiybZHHagF{;IcD(dPO!#=u zWfqLcPc^+7Uu#l(Bpxft{*4lv#*u7X9AOzDO z1D9?^jIo}?%iz(_dwLa{ex#T}76ZfN_Z-hwpus9y+4xaUu9cX}&P{XrZVWE{1^0yw zO;YhLEW!pJcbCt3L8~a7>jsaN{V3>tz6_7`&pi%GxZ=V3?3K^U+*ryLSb)8^IblJ0 zSRLNDvIxt)S}g30?s_3NX>F?NKIGrG_zB9@Z>uSW3k2es_H2kU;Rnn%j5qP)!XHKE zPB2mHP~tLCg4K_vH$xv`HbRsJwbZMUV(t=ez;Ec(vyHH)FbfLg`c61I$W_uBB>i^r z&{_P;369-&>23R%qNIULe=1~T$(DA`ev*EWZ6j(B$(te}x1WvmIll21zvygkS%vwG zzkR6Z#RKA2!z!C%M!O>!=Gr0(J0FP=-MN=5t-Ir)of50y10W}j`GtRCsXBakrKtG& zazmITDJMA0C51&BnLY)SY9r)NVTMs);1<=oosS9g31l{4ztjD3#+2H7u_|66b|_*O z;Qk6nalpqdHOjx|K&vUS_6ITgGll;TdaN*ta=M_YtyC)I9Tmr~VaPrH2qb6sd~=AcIxV+%z{E&0@y=DPArw zdV7z(G1hBx7hd{>(cr43^WF%4Y@PXZ?wPpj{OQ#tvc$pABJbvPGvdR`cAtHn)cSEV zrpu}1tJwQ3y!mSmH*uz*x0o|CS<^w%&KJzsj~DU0cLQUxk5B!hWE>aBkjJle8z~;s z-!A=($+}Jq_BTK5^B!`R>!MulZN)F=iXXeUd0w5lUsE5VP*H*oCy(;?S$p*TVvTxwAeWFB$jHyb0593)$zqalVlDX=GcCN1gU0 zlgU)I$LcXZ8Oyc2TZYTPu@-;7<4YYB-``Qa;IDcvydIA$%kHhJKV^m*-zxcvU4viy&Kr5GVM{IT>WRywKQ9;>SEiQD*NqplK-KK4YR`p0@JW)n_{TU3bt0 zim%;(m1=#v2}zTps=?fU5w^(*y)xT%1vtQH&}50ZF!9YxW=&7*W($2kgKyz1mUgfs zfV<*XVVIFnohW=|j+@Kfo!#liQR^x>2yQdrG;2o8WZR+XzU_nG=Ed2rK?ntA;K5B{ z>M8+*A4!Jm^Bg}aW?R?6;@QG@uQ8&oJ{hFixcfEnJ4QH?A4>P=q29oDGW;L;= z9-a0;g%c`C+Ai!UmK$NC*4#;Jp<1=TioL=t^YM)<<%u#hnnfSS`nq63QKGO1L8RzX z@MFDqs1z ztYmxDl@LU)5acvHk)~Z`RW7=aJ_nGD!mOSYD>5Odjn@TK#LY{jf?+piB5AM-CAoT_ z?S-*q7}wyLJzK>N%eMPuFgN)Q_otKP;aqy=D5f!7<=n(lNkYRXVpkB{TAYLYg{|(jtRqYmg$xH zjmq?B(RE4 zQx^~Pt}gxC2~l=K$$-sYy_r$CO(d=+b3H1MB*y_5g6WLaWTXn+TKQ|hNY^>Mp6k*$ zwkovomhu776vQATqT4blf~g;TY(MWCrf^^yfWJvSAB$p5l;jm@o#=!lqw+Lqfq>X= z$6~kxfm7`3q4zUEB;u4qa#BdJxO!;xGm)wwuisj{0y2x{R(IGMrsIzDY9LW>m!Y`= z04sx3IjnYvL<4JqxQ8f7qYd0s2Ig%`ytYPEMKI)s(LD}D@EY>x`VFtqvnADNBdeao zC96X+MxnwKmjpg{U&gP3HE}1=s!lv&D{6(g_lzyF3A`7Jn*&d_kL<;dAFx!UZ>hB8 z5A*%LsAn;VLp>3${0>M?PSQ)9s3}|h2e?TG4_F{}{Cs>#3Q*t$(CUc}M)I}8cPF6% z=+h(Kh^8)}gj(0}#e7O^FQ6`~fd1#8#!}LMuo3A0bN`o}PYsm!Y}sdOz$+Tegc=qT z8x`PH$7lvnhJp{kHWb22l;@7B7|4yL4UOOVM0MP_>P%S1Lnid)+k9{+3D+JFa#Pyf zhVc#&df87APl4W9X)F3pGS>@etfl=_E5tBcVoOfrD4hmVeTY-cj((pkn%n@EgN{0f zwb_^Rk0I#iZuHK!l*lN`ceJn(sI{$Fq6nN& zE<-=0_2WN}m+*ivmIOxB@#~Q-cZ>l136w{#TIJe478`KE7@=a{>SzPHsKLzYAyBQO zAtuuF$-JSDy_S@6GW0MOE~R)b;+0f%_NMrW(+V#c_d&U8Z9+ec4=HmOHw?gdjF(Lu zzra83M_BoO-1b3;9`%&DHfuUY)6YDV21P$C!Rc?mv&{lx#f8oc6?0?x zK08{WP65?#>(vPfA-c=MCY|%*1_<3D4NX zeVTi-JGl2uP_2@0F{G({pxQOXt_d{g_CV6b?jNpfUG9;8yle-^4KHRvZs-_2siata zt+d_T@U$&t*xaD22(fH(W1r$Mo?3dc%Tncm=C6{V9y{v&VT#^1L04vDrLM9qBoZ4@ z6DBN#m57hX7$C(=#$Y5$bJmwA$T8jKD8+6A!-IJwA{WOfs%s}yxUw^?MRZjF$n_KN z6`_bGXcmE#5e4Ym)aQJ)xg3Pg0@k`iGuHe?f(5LtuzSq=nS^5z>vqU0EuZ&75V%Z{ zYyhRLN^)$c6Ds{f7*FBpE;n5iglx5PkHfWrj3`x^j^t z7ntuV`g!9Xg#^3!x)l*}IW=(Tz3>Y5l4uGaB&lz{GDjm2D5S$CExLT`I1#n^lBH7Y zDgpMag@`iETKAI=p<5E#LTkwzVR@=yY|uBVI1HG|8h+d;G-qfuj}-ZR6fN>EfCCW z9~wRQoAPEa#aO?3h?x{YvV*d+NtPkf&4V0k4|L=uj!U{L+oLa(z#&iuhJr3-PjO3R z5s?=nn_5^*^Rawr>>Nr@K(jwkB#JK-=+HqwfdO<+P5byeim)wvqGlP-P|~Nse8=XF zz`?RYB|D6SwS}C+YQv+;}k6$-%D(@+t14BL@vM z2q%q?f6D-A5s$_WY3{^G0F131bbh|g!}#BKw=HQ7mx;Dzg4Z*bTLQSfo{ed{4}NZW zfrRm^Ca$rlE{Ue~uYv>R9{3smwATcdM_6+yWIO z*ZRH~uXE@#p$XTbCt5j7j2=86e{9>HIB6xDzV+vAo&B?KUiMP|ttOElepnl%|DPqL b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/packages/messenger-demo/public/manifest.json b/packages/messenger-demo/public/manifest.json new file mode 100644 index 000000000..f6595ddfd --- /dev/null +++ b/packages/messenger-demo/public/manifest.json @@ -0,0 +1,8 @@ +{ + "short_name": "dm3", + "name": "dm3 enables decentralized, open, and secure messaging using established web3 services", + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#000000" +} diff --git a/packages/messenger-demo/public/robots.txt b/packages/messenger-demo/public/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/packages/messenger-demo/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/packages/messenger-demo/src/App.tsx b/packages/messenger-demo/src/App.tsx new file mode 100644 index 000000000..6a2b0ca9a --- /dev/null +++ b/packages/messenger-demo/src/App.tsx @@ -0,0 +1,14 @@ +import 'bootstrap/dist/css/bootstrap.min.css'; +import 'bootstrap/dist/js/bootstrap.bundle.min.js'; +//@ts-ignore +import { DM3 } from 'messenger-widget'; + +function App() { + return ( + <> + + + ); +} + +export default App; diff --git a/packages/messenger-demo/src/Background.ts b/packages/messenger-demo/src/Background.ts new file mode 100644 index 000000000..4bbe4db5c --- /dev/null +++ b/packages/messenger-demo/src/Background.ts @@ -0,0 +1,265 @@ +import * as THREE from 'three'; + +export function generateBackground( + threeContainer: React.RefObject, +) { + let group: THREE.Group; + let container; + const particlesData: { + velocity: THREE.Vector3; + numConnections: number; + }[] = []; + let windowHalfX = window.innerWidth / 2; + let windowHalfY = window.innerHeight / 2; + let camera: THREE.PerspectiveCamera, + scene: THREE.Scene, + renderer: THREE.WebGLRenderer; + let positions, colors; + let particles: THREE.BufferGeometry; + let pointCloud: THREE.Points; + let particlePositions: Float32Array; + let linesMesh: THREE.LineSegments; + let mouseX = 0, + mouseY = 0; + + const maxParticleCount = 400; + let particleCount = 300; + const r = 1000; + const rHalf = r / 2; + + const effectController = { + showDots: true, + showLines: true, + minDistance: 150, + limitConnections: true, + maxConnections: 3, + particleCount: 300, + }; + + init(); + animate(); + + function init() { + (threeContainer.current as any).textContent = ''; + + container = threeContainer.current as any; + + camera = new THREE.PerspectiveCamera( + 45, + window.innerWidth / window.innerHeight, + 1, + 4000, + ); + camera.position.z = 650; + + scene = new THREE.Scene(); + + group = new THREE.Group(); + scene.add(group); + document.body.addEventListener('pointermove', onPointerMove); + + const segments = maxParticleCount * maxParticleCount; + + positions = new Float32Array(segments * 3); + colors = new Float32Array(segments * 3); + + const pMaterial = new THREE.PointsMaterial({ + color: 0xeeeeee, + size: 3, + blending: THREE.AdditiveBlending, + transparent: true, + sizeAttenuation: false, + }); + + particles = new THREE.BufferGeometry(); + particlePositions = new Float32Array(maxParticleCount * 3); + + for (let i = 0; i < maxParticleCount; i++) { + const x = Math.random() * r - r / 2; + const y = Math.random() * r - r / 2; + const z = Math.random() * r - r / 2; + + particlePositions[i * 3] = x; + particlePositions[i * 3 + 1] = y; + particlePositions[i * 3 + 2] = z; + + // add it to the geometry + particlesData.push({ + velocity: new THREE.Vector3( + -1 + Math.random() * 2, + -1 + Math.random() * 2, + -1 + Math.random() * 2, + ), + numConnections: 0, + }); + } + + particles.setDrawRange(0, particleCount); + particles.setAttribute( + 'position', + new THREE.BufferAttribute(particlePositions, 3).setUsage( + THREE.DynamicDrawUsage, + ), + ); + + // create the particle system + pointCloud = new THREE.Points(particles, pMaterial); + group.add(pointCloud); + + const geometry = new THREE.BufferGeometry(); + + geometry.setAttribute( + 'position', + new THREE.BufferAttribute(positions, 3).setUsage( + THREE.DynamicDrawUsage, + ), + ); + geometry.setAttribute( + 'color', + new THREE.BufferAttribute(colors, 3).setUsage( + THREE.DynamicDrawUsage, + ), + ); + + geometry.computeBoundingSphere(); + + geometry.setDrawRange(0, 0); + + const material = new THREE.LineBasicMaterial({ + vertexColors: true, + blending: THREE.AdditiveBlending, + transparent: true, + }); + + linesMesh = new THREE.LineSegments(geometry, material); + group.add(linesMesh); + + // + + renderer = new THREE.WebGLRenderer({ antialias: true }); + renderer.setPixelRatio(window.devicePixelRatio); + renderer.setSize(window.innerWidth, window.innerHeight); + renderer.outputEncoding = THREE.sRGBEncoding; + + container.appendChild(renderer.domElement); + + // + + window.addEventListener('resize', onWindowResize); + } + + function onWindowResize() { + camera.aspect = window.innerWidth / window.innerHeight; + camera.updateProjectionMatrix(); + + renderer.setSize(window.innerWidth, window.innerHeight); + } + + function animate() { + let vertexpos = 0; + let colorpos = 0; + let numConnected = 0; + + for (let i = 0; i < particleCount; i++) + particlesData[i].numConnections = 0; + + for (let i = 0; i < particleCount; i++) { + // get the particle + const particleData = particlesData[i]; + + particlePositions[i * 3] += particleData.velocity.x * 0.1; + particlePositions[i * 3 + 1] += particleData.velocity.y * 0.1; + particlePositions[i * 3 + 2] += particleData.velocity.z * 0.1; + + if ( + particlePositions[i * 3 + 1] < -rHalf || + particlePositions[i * 3 + 1] > rHalf + ) + particleData.velocity.y = -particleData.velocity.y; + + if ( + particlePositions[i * 3] < -rHalf || + particlePositions[i * 3] > rHalf + ) + particleData.velocity.x = -particleData.velocity.x; + + if ( + particlePositions[i * 3 + 2] < -rHalf || + particlePositions[i * 3 + 2] > rHalf + ) + particleData.velocity.z = -particleData.velocity.z; + + if ( + effectController.limitConnections && + particleData.numConnections >= effectController.maxConnections + ) + continue; + + // Check collision + for (let j = i + 1; j < particleCount; j++) { + const particleDataB = particlesData[j]; + if ( + effectController.limitConnections && + particleDataB.numConnections >= + effectController.maxConnections + ) + continue; + + const dx = particlePositions[i * 3] - particlePositions[j * 3]; + const dy = + particlePositions[i * 3 + 1] - particlePositions[j * 3 + 1]; + const dz = + particlePositions[i * 3 + 2] - particlePositions[j * 3 + 2]; + const dist = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (dist < effectController.minDistance) { + particleData.numConnections++; + particleDataB.numConnections++; + + const alpha = 1.0 - dist / effectController.minDistance; + + positions[vertexpos++] = particlePositions[i * 3]; + positions[vertexpos++] = particlePositions[i * 3 + 1]; + positions[vertexpos++] = particlePositions[i * 3 + 2]; + + positions[vertexpos++] = particlePositions[j * 3]; + positions[vertexpos++] = particlePositions[j * 3 + 1]; + positions[vertexpos++] = particlePositions[j * 3 + 2]; + + colors[colorpos++] = alpha; + colors[colorpos++] = alpha; + colors[colorpos++] = alpha; + + colors[colorpos++] = alpha; + colors[colorpos++] = alpha; + colors[colorpos++] = alpha; + + numConnected++; + } + } + } + + linesMesh.geometry.setDrawRange(0, numConnected * 2); + linesMesh.geometry.attributes.position.needsUpdate = true; + linesMesh.geometry.attributes.color.needsUpdate = true; + + pointCloud.geometry.attributes.position.needsUpdate = true; + + requestAnimationFrame(animate); + + render(); + } + + function onPointerMove(event: any) { + if (event.isPrimary === false) return; + + mouseX = event.clientX - windowHalfX; + mouseY = event.clientY - windowHalfY; + } + + function render() { + group.rotation.x = (-mouseY - camera.position.y) * 0.00005; + group.rotation.y = (-mouseX - camera.position.x) * 0.00005; + renderer.render(scene, camera); + } +} diff --git a/packages/messenger-demo/src/index.css b/packages/messenger-demo/src/index.css new file mode 100644 index 000000000..24a9eac39 --- /dev/null +++ b/packages/messenger-demo/src/index.css @@ -0,0 +1,60 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-color: #222222; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} + +.filler { + backdrop-filter: blur(1px) !important; + background-color: #0D0D0D !important; + cursor: initial !important; +} + + +.container { + margin-top: 2rem !important; +} +.main-content-row { + + border-style: none !important; + /* box-shadow: 0px 0px 2px #999; */ + +} + +.logo { + position: absolute; + filter: brightness(100%) ; + top: 2rem; + left: 2rem; + z-index: 9999; + cursor: pointer; + +} + +.logo a { + text-decoration: none; + +} +.logo:hover { + + filter: brightness(110%) ; + +} + +.main-content-row { + filter: drop-shadow(0px 0px 5px rgb(0 0 0 / 0.4)) +} + +.legal { + font-size: 0.8rem !important; + text-decoration: none; +} \ No newline at end of file diff --git a/packages/messenger-demo/src/index.tsx b/packages/messenger-demo/src/index.tsx new file mode 100644 index 000000000..46b526bd3 --- /dev/null +++ b/packages/messenger-demo/src/index.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +const root = ReactDOM.createRoot( + document.getElementById('root') as HTMLElement, +); +root.render( + + + , +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/packages/messenger-demo/src/logo.svg b/packages/messenger-demo/src/logo.svg new file mode 100644 index 000000000..9dfc1c058 --- /dev/null +++ b/packages/messenger-demo/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/messenger-demo/src/react-app-env.d.ts b/packages/messenger-demo/src/react-app-env.d.ts new file mode 100644 index 000000000..6431bc5fc --- /dev/null +++ b/packages/messenger-demo/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/messenger-demo/src/reportWebVitals.ts b/packages/messenger-demo/src/reportWebVitals.ts new file mode 100644 index 000000000..3a7683286 --- /dev/null +++ b/packages/messenger-demo/src/reportWebVitals.ts @@ -0,0 +1,17 @@ +import { ReportHandler } from 'web-vitals'; + +const reportWebVitals = (onPerfEntry?: ReportHandler) => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then( + ({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }, + ); + } +}; + +export default reportWebVitals; diff --git a/packages/messenger-demo/src/setupTests.ts b/packages/messenger-demo/src/setupTests.ts new file mode 100644 index 000000000..8f2609b7b --- /dev/null +++ b/packages/messenger-demo/src/setupTests.ts @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/packages/messenger-demo/tsconfig.json b/packages/messenger-demo/tsconfig.json new file mode 100644 index 000000000..c0555cbc6 --- /dev/null +++ b/packages/messenger-demo/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"] +} diff --git a/packages/messenger-widget/README.md b/packages/messenger-widget/README.md new file mode 100644 index 000000000..6015f245f --- /dev/null +++ b/packages/messenger-widget/README.md @@ -0,0 +1,18 @@ +# messenger-widget +## Getting Started + +### Build + +``` +cd ../../ && yarn build +``` + + +### Usage +``` +import DM3 from 'messenger-widget'; + +... + + +``` \ No newline at end of file diff --git a/packages/messenger-widget/babel.config.js b/packages/messenger-widget/babel.config.js new file mode 100644 index 000000000..faa86ebf8 --- /dev/null +++ b/packages/messenger-widget/babel.config.js @@ -0,0 +1,6 @@ +module.exports = { + presets: [ + ['@babel/preset-env', { targets: { node: 'current' } }], + '@babel/preset-typescript', + ], +}; diff --git a/packages/messenger-widget/package.json b/packages/messenger-widget/package.json new file mode 100644 index 000000000..af058db58 --- /dev/null +++ b/packages/messenger-widget/package.json @@ -0,0 +1,97 @@ +{ + "name": "messenger-widget", + "version": "0.2.0", + "main": "./dist/cjs/index.js", + "module": "./dist/cjs/index.js", + "dependencies": { + "@babel/core": "^7.22.5", + "@fortawesome/fontawesome-free": "^5.15.4", + "@popperjs/core": "^2.11.8", + "@rainbow-me/rainbowkit": "^1.0.6", + "@testing-library/dom": "^9.3.1", + "@wagmi/core": "^1.3.8", + "autoprefixer": "^10.4.14", + "axios": "^0.25.0", + "bootstrap": "5.1.3", + "dm3-lib-crypto": "workspace:^", + "dm3-lib-messaging": "^0.2.0", + "dm3-lib-profile": "^0.2.0", + "dm3-lib-shared": "^0.2.0", + "dm3-lib-storage": "^0.2.0", + "ethereum-blockies-base64": "^1.0.2", + "ethers": "5.7.2", + "file-loader": "^6.2.0", + "googleapis": "^100.0.0", + "localforage": "^1.10.0", + "nacl": "^0.1.3", + "node-sass": "^7.0.1", + "postcss": "^8.4.25", + "react-beforeunload": "^2.5.2", + "react-chat-widget": "^3.1.4", + "react-scripts": "5.0.0", + "ts-node": "^10.4.0", + "tslib": "^2.5.2", + "typescript": "^4.4.2", + "url-loader": "^4.1.1", + "uuid": "^8.3.2", + "viem": "^1.2.15", + "wagmi": "^1.3.8", + "web-vitals": "^2.1.0", + "web3.storage": "^3.5.7" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@babel/preset-typescript": "^7.18.6", + "@rollup/plugin-commonjs": "^22.0.0", + "@rollup/plugin-node-resolve": "^13.3.0", + "@rollup/plugin-typescript": "^8.3.3", + "@rollup/plugin-url": "^7.0.0", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^12.0.0", + "@testing-library/user-event": "^13.2.1", + "@types/bootstrap": "^5.2.6", + "@types/cors": "^2.8.12", + "@types/jest": "^27.0.1", + "@types/node": "^16.7.13", + "@types/react": "^17.0.20", + "@types/react-beforeunload": "^2.1.1", + "@types/react-dom": "^17.0.9", + "esbuild": "^0.14.44", + "prettier": "^2.6.2", + "rollup": "^2.75.6", + "rollup-plugin-dts": "^4.2.2", + "rollup-plugin-esbuild": "^4.9.1", + "rollup-plugin-import-css": "^3.0.3", + "rollup-plugin-peer-deps-external": "^2.2.4", + "rollup-plugin-postcss": "^4.0.2", + "rollup-plugin-typescript2": "^0.32.1", + "ts-json-schema-generator": "^0.98.0" + }, + "scripts": { + "build": "rollup -c", + "lint": "eslint '*/**/*.{js,ts,tsx}' --fix", + "format": "prettier --write '*/**/*.{js,ts,tsx,json}'", + "format:check": "prettier --check '*/**/*.{js,ts,tsx,json}'", + "test": "echo 'no tests'" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "jest": { + "collectCoverageFrom": [ + "src/lib/**/*.{js,jsx,ts,tsx}" + ] + } +} diff --git a/packages/messenger-widget/rollup.config.js b/packages/messenger-widget/rollup.config.js new file mode 100644 index 000000000..02cadbccb --- /dev/null +++ b/packages/messenger-widget/rollup.config.js @@ -0,0 +1,45 @@ +import commonjs from '@rollup/plugin-commonjs'; +import typescript from 'rollup-plugin-typescript2'; +import postCSS from 'rollup-plugin-postcss'; +import url from '@rollup/plugin-url'; +import pkg from './package.json'; + +export default { + input: 'src/index.tsx', + output: [ + { + file: './dist/cjs/index.js', + format: 'cjs', + }, + { + file: './dist/esm/index.js', + format: 'es', + }, + ], + external: [ + ...Object.keys(pkg.peerDependencies || {}), + 'react/jsx-runtime', + 'dm3-lib', + 'react-chat-widget/lib/styles.css', + 'socket.io-client', + 'react-beforeunload', + 'bootstrap/dist/css/bootstrap.min.css', + 'localforage', + 'react-chat-widget', + '@metamask/detect-provider', + '@walletconnect/web3-provider', + '@fortawesome/fontawesome-free/css/all.min.css', + 'ethereum-blockies-base64', + ], + plugins: [ + url(), + commonjs(), + typescript({ + sourceMap: true, + typescript: require('typescript'), + }), + postCSS({ + plugins: [require('autoprefixer')], + }), + ], +}; diff --git a/packages/messenger-widget/src/declaration.d.ts b/packages/messenger-widget/src/declaration.d.ts new file mode 100644 index 000000000..6ae82a0d8 --- /dev/null +++ b/packages/messenger-widget/src/declaration.d.ts @@ -0,0 +1,8 @@ +declare module "*.png"; +declare module "*.gif"; +declare module "*.jpg"; + +declare module "localforage" { + let localforage: LocalForage; + export = localforage; +} diff --git a/packages/messenger-widget/src/index.css b/packages/messenger-widget/src/index.css new file mode 100644 index 000000000..d26b88697 --- /dev/null +++ b/packages/messenger-widget/src/index.css @@ -0,0 +1,3 @@ +.outer-container { + min-height: 100vh; +} \ No newline at end of file diff --git a/packages/messenger-widget/src/index.tsx b/packages/messenger-widget/src/index.tsx new file mode 100644 index 000000000..06b123a19 --- /dev/null +++ b/packages/messenger-widget/src/index.tsx @@ -0,0 +1,15 @@ +import './index.css'; +import 'react-app-polyfill/stable'; +import 'bootstrap/dist/css/bootstrap.min.css'; +import 'bootstrap/dist/js/bootstrap.bundle.min.js'; +import '@fortawesome/fontawesome-free/css/all.min.css'; +import { Home } from './views/Home/Home'; + +export function DM3() { + + return ( +
+ +
+ ); +} diff --git a/packages/messenger-widget/src/interfaces/config.ts b/packages/messenger-widget/src/interfaces/config.ts new file mode 100644 index 000000000..e968008fd --- /dev/null +++ b/packages/messenger-widget/src/interfaces/config.ts @@ -0,0 +1,22 @@ +import { StorageLocation } from 'dm3-lib-storage'; + +export interface Config { + defaultContact?: string; + showContacts: boolean; + inline: boolean; + defaultStorageLocation: StorageLocation; + hideStorageSelection: boolean; + style: React.CSSProperties; + defaultServiceUrl: string; + showAlways: boolean; + miniSignIn: boolean; + connectionStateChange?: (newState: any) => void; + warnBeforeLeave: boolean; + browserStorageBackup: boolean; + showHelp: boolean; + theme: string | undefined | null; +} + +export interface Dm3Props { + config: Config; +} \ No newline at end of file diff --git a/packages/messenger-widget/src/interfaces/context.ts b/packages/messenger-widget/src/interfaces/context.ts new file mode 100644 index 000000000..e41f666e0 --- /dev/null +++ b/packages/messenger-widget/src/interfaces/context.ts @@ -0,0 +1,3 @@ +export interface GlobalContextProviderProps { + children: JSX.Element; +} \ No newline at end of file diff --git a/packages/messenger-widget/src/views/Home/Home.css b/packages/messenger-widget/src/views/Home/Home.css new file mode 100644 index 000000000..e69de29bb diff --git a/packages/messenger-widget/src/views/Home/Home.tsx b/packages/messenger-widget/src/views/Home/Home.tsx new file mode 100644 index 000000000..901a042a2 --- /dev/null +++ b/packages/messenger-widget/src/views/Home/Home.tsx @@ -0,0 +1,7 @@ +import "./Home.css"; + +export function Home() { + return ( +
Home...
+ ); +} \ No newline at end of file diff --git a/packages/messenger-widget/tsconfig.json b/packages/messenger-widget/tsconfig.json new file mode 100644 index 000000000..6fbaa7bbf --- /dev/null +++ b/packages/messenger-widget/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "declaration": true + }, + "include": [ + "src", + "src/declaration.d.ts", + ], + "exclude": [ + "node_modules", + "dist" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index a41229f05..2063fab5a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4813,6 +4813,25 @@ __metadata: languageName: node linkType: hard +"@rainbow-me/rainbowkit@npm:^1.0.6": + version: 1.0.7 + resolution: "@rainbow-me/rainbowkit@npm:1.0.7" + dependencies: + "@vanilla-extract/css": 1.9.1 + "@vanilla-extract/dynamic": 2.0.2 + "@vanilla-extract/sprinkles": 1.5.0 + clsx: 1.1.1 + qrcode: 1.5.0 + react-remove-scroll: 2.5.4 + peerDependencies: + react: ">=17" + react-dom: ">=17" + viem: ~0.3.19 || ^1.0.0 + wagmi: ~1.0.1 || ~1.1.0 || ~1.2.0 || ~1.3.0 + checksum: 035b6416eaaf8d03faad81c35ee5b12d9f642c8e139e6e4ffec8a42fd4db30bbca82fa1b704791ae21049a6d2981d51b5a8bb55f0cd5f116ae338ce4ed01f856 + languageName: node + linkType: hard + "@redis/bloom@npm:1.2.0": version: 1.2.0 resolution: "@redis/bloom@npm:1.2.0" @@ -7206,6 +7225,45 @@ __metadata: languageName: node linkType: hard +"@wagmi/chains@npm:1.6.0": + version: 1.6.0 + resolution: "@wagmi/chains@npm:1.6.0" + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 6c3d477936622f763b9e44c4a66c080020f1119165c8f6b840c51f5822880fedd5031036461d4b28df5cf1ae19cb12e139e4a4b3c129b475f0363fd9c4c8bb0d + languageName: node + linkType: hard + +"@wagmi/connectors@npm:2.6.6": + version: 2.6.6 + resolution: "@wagmi/connectors@npm:2.6.6" + dependencies: + "@coinbase/wallet-sdk": ^3.6.6 + "@ledgerhq/connect-kit-loader": ^1.1.0 + "@safe-global/safe-apps-provider": ^0.17.1 + "@safe-global/safe-apps-sdk": ^8.0.0 + "@walletconnect/ethereum-provider": 2.9.0 + "@walletconnect/legacy-provider": ^2.0.0 + "@walletconnect/modal": 2.5.9 + "@walletconnect/utils": 2.9.0 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + peerDependencies: + "@wagmi/chains": ">=1.3.0" + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + "@wagmi/chains": + optional: true + typescript: + optional: true + checksum: a7806bb43ecd5a63420812b531e7e82de59004898595709aed1af6d11b869edf99407024661048e8828710c1ce81898641ebcc64c0c83d255b05b59882e585a1 + languageName: node + linkType: hard + "@wagmi/connectors@npm:3.1.1": version: 3.1.1 resolution: "@wagmi/connectors@npm:3.1.1" @@ -7230,6 +7288,25 @@ __metadata: languageName: node linkType: hard +"@wagmi/core@npm:1.3.8, @wagmi/core@npm:^1.3.8": + version: 1.3.8 + resolution: "@wagmi/core@npm:1.3.8" + dependencies: + "@wagmi/chains": 1.6.0 + "@wagmi/connectors": 2.6.6 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + zustand: ^4.3.1 + peerDependencies: + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: e1ff791f10668ea094bd1e3fd6fec31fdb861e547aee3f66ee633ae38430acc7273aac5a3365c18803d4ab5d56203dcbb114a7abed9c2d261585173a67ca4672 + languageName: node + linkType: hard + "@wagmi/core@npm:1.4.1": version: 1.4.1 resolution: "@wagmi/core@npm:1.4.1" @@ -7272,6 +7349,30 @@ __metadata: languageName: node linkType: hard +"@walletconnect/core@npm:2.9.0": + version: 2.9.0 + resolution: "@walletconnect/core@npm:2.9.0" + dependencies: + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/jsonrpc-ws-connection": 1.0.12 + "@walletconnect/keyvaluestorage": ^1.0.2 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/relay-auth": ^1.0.4 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.9.0 + "@walletconnect/utils": 2.9.0 + events: ^3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: ^3.1.0 + checksum: c2cba1746e9679bd03e55ecfbf8c0339d3122ee31e87e8a690778263ff5c8c371ab5301445da2139711e6522d33946e9fbf640e5238241b2b2e7a394b23c2a00 + languageName: node + linkType: hard + "@walletconnect/crypto@npm:^1.0.3": version: 1.0.3 resolution: "@walletconnect/crypto@npm:1.0.3" @@ -7328,6 +7429,28 @@ __metadata: languageName: node linkType: hard +"@walletconnect/ethereum-provider@npm:2.9.0": + version: 2.9.0 + resolution: "@walletconnect/ethereum-provider@npm:2.9.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": ^1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.3 + "@walletconnect/jsonrpc-utils": ^1.0.8 + "@walletconnect/sign-client": 2.9.0 + "@walletconnect/types": 2.9.0 + "@walletconnect/universal-provider": 2.9.0 + "@walletconnect/utils": 2.9.0 + events: ^3.3.0 + peerDependencies: + "@walletconnect/modal": ">=2" + peerDependenciesMeta: + "@walletconnect/modal": + optional: true + checksum: 9d2fe058b0bf278c4468240de64552f355683542c6e3b3881c4e82a006c53ce3981e36719f82836eeac8eb9137143368fa94e50b32c0fa270f04159eb3dc69b5 + languageName: node + linkType: hard + "@walletconnect/events@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/events@npm:1.0.1" @@ -7393,6 +7516,19 @@ __metadata: languageName: node linkType: hard +"@walletconnect/jsonrpc-ws-connection@npm:1.0.12": + version: 1.0.12 + resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.12" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.6 + "@walletconnect/safe-json": ^1.0.2 + events: ^3.3.0 + tslib: 1.14.1 + ws: ^7.5.1 + checksum: 937811d8d9d56064b2c1676e2d3f00cb4c0aaba2e359391ff93d83836b5e9fd2215fe6e9d435504df99924575f4c796f1e382a40c492f9b6b0da846aef674e05 + languageName: node + linkType: hard + "@walletconnect/jsonrpc-ws-connection@npm:1.0.13": version: 1.0.13 resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.13" @@ -7504,6 +7640,16 @@ __metadata: languageName: node linkType: hard +"@walletconnect/modal-core@npm:2.5.9": + version: 2.5.9 + resolution: "@walletconnect/modal-core@npm:2.5.9" + dependencies: + buffer: 6.0.3 + valtio: 1.10.6 + checksum: dfcb0b7a50febafe08fd80fec2b31b86722a27aedad8ee0656af895e2c8b1a2c8a91c7bb5f968bea5b8de9ab7fc908c6f52cef194f949e37da597acd0f1a263b + languageName: node + linkType: hard + "@walletconnect/modal-core@npm:2.6.1": version: 2.6.1 resolution: "@walletconnect/modal-core@npm:2.6.1" @@ -7513,6 +7659,18 @@ __metadata: languageName: node linkType: hard +"@walletconnect/modal-ui@npm:2.5.9": + version: 2.5.9 + resolution: "@walletconnect/modal-ui@npm:2.5.9" + dependencies: + "@walletconnect/modal-core": 2.5.9 + lit: 2.7.5 + motion: 10.16.2 + qrcode: 1.5.3 + checksum: c0050715734b532f75b81c3abb75c6cce513b1481c9cec66f648aa698ddd3af4ec70978a0976b06843229e6f7ea14cc927432dc66cfe53967db7d96c9437f692 + languageName: node + linkType: hard + "@walletconnect/modal-ui@npm:2.6.1": version: 2.6.1 resolution: "@walletconnect/modal-ui@npm:2.6.1" @@ -7525,6 +7683,16 @@ __metadata: languageName: node linkType: hard +"@walletconnect/modal@npm:2.5.9": + version: 2.5.9 + resolution: "@walletconnect/modal@npm:2.5.9" + dependencies: + "@walletconnect/modal-core": 2.5.9 + "@walletconnect/modal-ui": 2.5.9 + checksum: ba52f4210c238644a2c4d6fbfc1692d7f49e4fa4a85e793aa79c299e9e4d16c0555fcf08bb94726186256aec1e43abb3d7297a61020abe7211f6faac1163dddd + languageName: node + linkType: hard + "@walletconnect/modal@npm:2.6.1": version: 2.6.1 resolution: "@walletconnect/modal@npm:2.6.1" @@ -7597,6 +7765,23 @@ __metadata: languageName: node linkType: hard +"@walletconnect/sign-client@npm:2.9.0": + version: 2.9.0 + resolution: "@walletconnect/sign-client@npm:2.9.0" + dependencies: + "@walletconnect/core": 2.9.0 + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.9.0 + "@walletconnect/utils": 2.9.0 + events: ^3.3.0 + checksum: fe35b9b15c62efc9702fd34e883f95dcdbda954ff27b628d2d3d3eb7cb904b0fd6ec9c33b64c314305ba7a4b669d37769e7b9e9a723a0a2cb6b57d6a45aa6171 + languageName: node + linkType: hard + "@walletconnect/time@npm:^1.0.2": version: 1.0.2 resolution: "@walletconnect/time@npm:1.0.2" @@ -7620,6 +7805,20 @@ __metadata: languageName: node linkType: hard +"@walletconnect/types@npm:2.9.0": + version: 2.9.0 + resolution: "@walletconnect/types@npm:2.9.0" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/keyvaluestorage": ^1.0.2 + "@walletconnect/logger": ^2.0.1 + events: ^3.3.0 + checksum: 147bec3c89cd7194e6df7e3a59560c46bf5b0b8ef58e81f387b3bfeecaa3aecb04b4ac2dbffe11fe671ffdf2f1222178b2fac256ced39e9b3b56c21411362872 + languageName: node + linkType: hard + "@walletconnect/universal-provider@npm:2.10.0": version: 2.10.0 resolution: "@walletconnect/universal-provider@npm:2.10.0" @@ -7637,6 +7836,23 @@ __metadata: languageName: node linkType: hard +"@walletconnect/universal-provider@npm:2.9.0": + version: 2.9.0 + resolution: "@walletconnect/universal-provider@npm:2.9.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.7 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/sign-client": 2.9.0 + "@walletconnect/types": 2.9.0 + "@walletconnect/utils": 2.9.0 + events: ^3.3.0 + checksum: 924a4de3d17ff04d33c0acbab4ca9ef5893c286d866a91e4c4734ef260473f1163b2ad6555911b891a4793545b7f042f221dce6278e3c95e4f0e224ab17d9857 + languageName: node + linkType: hard + "@walletconnect/utils@npm:2.10.0": version: 2.10.0 resolution: "@walletconnect/utils@npm:2.10.0" @@ -7659,6 +7875,28 @@ __metadata: languageName: node linkType: hard +"@walletconnect/utils@npm:2.9.0": + version: 2.9.0 + resolution: "@walletconnect/utils@npm:2.9.0" + dependencies: + "@stablelib/chacha20poly1305": 1.0.1 + "@stablelib/hkdf": 1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/sha256": 1.0.1 + "@stablelib/x25519": ^1.0.3 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.9.0 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: ^3.1.0 + checksum: 83592e6b793d16ddcaa7d904cc1a420b1a7240c9a5263a8ff7d7304f7f1194a2f98e1a69f68b10628e1178541c135d722d3844509678a88f6660c03a076eb755 + languageName: node + linkType: hard + "@walletconnect/window-getters@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/window-getters@npm:1.0.1" @@ -7952,6 +8190,21 @@ __metadata: languageName: node linkType: hard +"abitype@npm:0.9.3": + version: 0.9.3 + resolution: "abitype@npm:0.9.3" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: f97c5a118180563b9ed8b97da492a82d3ce53dcd7d96c87764e90dbe84c04ae72dd5703d1ed5a54601033ab1772b8a235a1b5aadaf7aad6c4b5fdad7fd3a69a7 + languageName: node + linkType: hard + "abitype@npm:0.9.8": version: 0.9.8 resolution: "abitype@npm:0.9.8" @@ -12860,7 +13113,7 @@ __metadata: languageName: unknown linkType: soft -"dm3-lib-crypto@^0.2.0, dm3-lib-crypto@workspace:packages/lib/crypto": +"dm3-lib-crypto@^0.2.0, dm3-lib-crypto@workspace:^, dm3-lib-crypto@workspace:packages/lib/crypto": version: 0.0.0-use.local resolution: "dm3-lib-crypto@workspace:packages/lib/crypto" dependencies: @@ -12998,7 +13251,7 @@ __metadata: languageName: unknown linkType: soft -"dm3-lib-shared@^0.2.1, dm3-lib-shared@workspace:packages/lib/shared": +"dm3-lib-shared@^0.2.0, dm3-lib-shared@^0.2.1, dm3-lib-shared@workspace:packages/lib/shared": version: 0.0.0-use.local resolution: "dm3-lib-shared@workspace:packages/lib/shared" dependencies: @@ -20981,6 +21234,17 @@ __metadata: languageName: node linkType: hard +"lit@npm:2.7.5": + version: 2.7.5 + resolution: "lit@npm:2.7.5" + dependencies: + "@lit/reactive-element": ^1.6.0 + lit-element: ^3.3.0 + lit-html: ^2.7.0 + checksum: 61a3f87c57136618f47a30b36cdfb592fcba42dcfbdb104d2b5ca291148c2d9a32fcb713bb91090bd08d6897a00e73f8425da6e3626aa080eaf410a32397ae69 + languageName: node + linkType: hard + "lit@npm:2.7.6": version: 2.7.6 resolution: "lit@npm:2.7.6" @@ -21688,6 +21952,115 @@ __metadata: languageName: node linkType: hard +"messenger-demo@workspace:packages/messenger-demo": + version: 0.0.0-use.local + resolution: "messenger-demo@workspace:packages/messenger-demo" + dependencies: + "@popperjs/core": ^2.11.8 + "@testing-library/dom": ^9.3.1 + "@testing-library/jest-dom": ^5.16.4 + "@testing-library/react": ^13.3.0 + "@testing-library/user-event": ^13.5.0 + "@types/jest": ^27.5.2 + "@types/node": ^16.11.41 + "@types/react": ^18.0.13 + "@types/react-dom": ^18.0.5 + "@types/three": ^0.141.0 + add: ^2.0.6 + assert: ^2.0.0 + autoprefixer: 10.4.5 + bootstrap: ^5.1.3 + buffer: ^6.0.3 + crypto-browserify: ^3.12.0 + https-browserify: ^1.0.0 + messenger-widget: 0.2.0 + os-browserify: ^0.3.0 + path-browserify: ^1.0.1 + postcss: ^8.4.24 + process: ^0.11.10 + react: ^18.2.0 + react-app-rewired: ^2.2.1 + react-dom: ^18.2.0 + react-scripts: 5.0.1 + stream-browserify: ^3.0.0 + stream-http: ^3.2.0 + three: ^0.142.0 + typescript: ^4.7.3 + url: ^0.11.0 + web-vitals: ^2.1.4 + yarn: ^1.22.19 + languageName: unknown + linkType: soft + +"messenger-widget@0.2.0, messenger-widget@workspace:packages/messenger-widget": + version: 0.0.0-use.local + resolution: "messenger-widget@workspace:packages/messenger-widget" + dependencies: + "@babel/core": ^7.22.5 + "@babel/preset-typescript": ^7.18.6 + "@fortawesome/fontawesome-free": ^5.15.4 + "@popperjs/core": ^2.11.8 + "@rainbow-me/rainbowkit": ^1.0.6 + "@rollup/plugin-commonjs": ^22.0.0 + "@rollup/plugin-node-resolve": ^13.3.0 + "@rollup/plugin-typescript": ^8.3.3 + "@rollup/plugin-url": ^7.0.0 + "@testing-library/dom": ^9.3.1 + "@testing-library/jest-dom": ^5.14.1 + "@testing-library/react": ^12.0.0 + "@testing-library/user-event": ^13.2.1 + "@types/bootstrap": ^5.2.6 + "@types/cors": ^2.8.12 + "@types/jest": ^27.0.1 + "@types/node": ^16.7.13 + "@types/react": ^17.0.20 + "@types/react-beforeunload": ^2.1.1 + "@types/react-dom": ^17.0.9 + "@wagmi/core": ^1.3.8 + autoprefixer: ^10.4.14 + axios: ^0.25.0 + bootstrap: 5.1.3 + dm3-lib-crypto: "workspace:^" + dm3-lib-messaging: ^0.2.0 + dm3-lib-profile: ^0.2.0 + dm3-lib-shared: ^0.2.0 + dm3-lib-storage: ^0.2.0 + esbuild: ^0.14.44 + ethereum-blockies-base64: ^1.0.2 + ethers: 5.7.2 + file-loader: ^6.2.0 + googleapis: ^100.0.0 + localforage: ^1.10.0 + nacl: ^0.1.3 + node-sass: ^7.0.1 + postcss: ^8.4.25 + prettier: ^2.6.2 + react-beforeunload: ^2.5.2 + react-chat-widget: ^3.1.4 + react-scripts: 5.0.0 + rollup: ^2.75.6 + rollup-plugin-dts: ^4.2.2 + rollup-plugin-esbuild: ^4.9.1 + rollup-plugin-import-css: ^3.0.3 + rollup-plugin-peer-deps-external: ^2.2.4 + rollup-plugin-postcss: ^4.0.2 + rollup-plugin-typescript2: ^0.32.1 + ts-json-schema-generator: ^0.98.0 + ts-node: ^10.4.0 + tslib: ^2.5.2 + typescript: ^4.4.2 + url-loader: ^4.1.1 + uuid: ^8.3.2 + viem: ^1.2.15 + wagmi: ^1.3.8 + web-vitals: ^2.1.0 + web3.storage: ^3.5.7 + peerDependencies: + react: ^18.2.0 + react-dom: ^17.0.2 + languageName: unknown + linkType: soft + "methods@npm:^1.1.2, methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" @@ -24633,6 +25006,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.25": + version: 8.4.27 + resolution: "postcss@npm:8.4.27" + dependencies: + nanoid: ^3.3.6 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 1cdd0c298849df6cd65f7e646a3ba36870a37b65f55fd59d1a165539c263e9b4872a402bf4ed1ca1bc31f58b68b2835545e33ea1a23b161a1f8aa6d5ded81e78 + languageName: node + linkType: hard + "preact@npm:^10.12.0, preact@npm:^10.5.9": version: 10.17.1 resolution: "preact@npm:10.17.1" @@ -29377,6 +29761,23 @@ __metadata: languageName: node linkType: hard +"url-loader@npm:^4.1.1": + version: 4.1.1 + resolution: "url-loader@npm:4.1.1" + dependencies: + loader-utils: ^2.0.0 + mime-types: ^2.1.27 + schema-utils: ^3.0.0 + peerDependencies: + file-loader: "*" + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + checksum: c1122a992c6cff70a7e56dfc2b7474534d48eb40b2cc75467cde0c6972e7597faf8e43acb4f45f93c2473645dfd803bcbc20960b57544dd1e4c96e77f72ba6fd + languageName: node + linkType: hard + "url-parse@npm:^1.5.3": version: 1.5.10 resolution: "url-parse@npm:1.5.10" @@ -29643,6 +30044,21 @@ __metadata: languageName: node linkType: hard +"valtio@npm:1.10.6": + version: 1.10.6 + resolution: "valtio@npm:1.10.6" + dependencies: + proxy-compare: 2.5.1 + use-sync-external-store: 1.2.0 + peerDependencies: + react: ">=16.8" + peerDependenciesMeta: + react: + optional: true + checksum: 0e738aa204c479c8f8c89c0a7478d6784c28ddd712be529fdc5c421d3ec28157fec2fb022a75cd4f45b8c4b470fbc64a27032adba6ed9936bdad989256222adf + languageName: node + linkType: hard + "valtio@npm:1.11.0": version: 1.11.0 resolution: "valtio@npm:1.11.0" @@ -29729,6 +30145,28 @@ __metadata: languageName: node linkType: hard +"viem@npm:^1.2.15": + version: 1.4.1 + resolution: "viem@npm:1.4.1" + dependencies: + "@adraffy/ens-normalize": 1.9.0 + "@noble/curves": 1.0.0 + "@noble/hashes": 1.3.0 + "@scure/bip32": 1.3.0 + "@scure/bip39": 1.2.0 + "@wagmi/chains": 1.6.0 + abitype: 0.9.3 + isomorphic-ws: 5.0.0 + ws: 8.12.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: a8e3dfb139e38ebd576a1c31154f0f58a030e7fe762f0ca288aa1f489352ba8a5aaaf3193f89fb2b3e5fc252573b14068a6db04f524000b9fc6912b65a00ac02 + languageName: node + linkType: hard + "vite-plugin-dts@npm:^2.3.0": version: 2.3.0 resolution: "vite-plugin-dts@npm:2.3.0" @@ -29847,6 +30285,27 @@ __metadata: languageName: node linkType: hard +"wagmi@npm:^1.3.8": + version: 1.3.9 + resolution: "wagmi@npm:1.3.9" + dependencies: + "@tanstack/query-sync-storage-persister": ^4.27.1 + "@tanstack/react-query": ^4.28.0 + "@tanstack/react-query-persist-client": ^4.28.0 + "@wagmi/core": 1.3.8 + abitype: 0.8.7 + use-sync-external-store: ^1.2.0 + peerDependencies: + react: ">=17.0.0" + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: bb58ab92dc18b8e054bd4a8feb4270aeb946e05174cfae556f67fd07a5edf063ddca944054b037ee65396236dea1be2532abbf7a87b8e22dff41b309b7c5d973 + languageName: node + linkType: hard + "walker@npm:^1.0.7, walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8"