|
| 1 | +<?xml version="1.0" encoding="UTF-8"?> |
| 2 | +<mxfile host="drawio" version="26.0.0"> |
| 3 | + <diagram name="bedrock-vue-wallet"> |
| 4 | + <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1700" pageHeight="1169" math="0" shadow="0"> |
| 5 | + <root> |
| 6 | + <mxCell id="0" /> |
| 7 | + <mxCell id="1" parent="0" /> |
| 8 | + |
| 9 | + <!-- ================= HOST APP ================= --> |
| 10 | + <mxCell id="host" value="Host Bedrock Web App" style="swimlane;startSize=30;html=1;whiteSpace=wrap;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontStyle=1;align=center;" vertex="1" parent="1"> |
| 11 | + <mxGeometry x="40" y="40" width="360" height="180" as="geometry" /> |
| 12 | + </mxCell> |
| 13 | + <mxCell id="appInit" value="app + vue-router
(Vue 3 application)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="host"> |
| 14 | + <mxGeometry x="30" y="50" width="140" height="60" as="geometry" /> |
| 15 | + </mxCell> |
| 16 | + <mxCell id="features" value="features map
{ /home, /login,
/profiles, ... }" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="host"> |
| 17 | + <mxGeometry x="190" y="50" width="140" height="60" as="geometry" /> |
| 18 | + </mxCell> |
| 19 | + <mxCell id="callInit" value="calls initialize({app, router, features, quasarOptions})" style="text;html=1;align=center;fontStyle=2;fontColor=#666666;" vertex="1" parent="host"> |
| 20 | + <mxGeometry x="20" y="125" width="320" height="40" as="geometry" /> |
| 21 | + </mxCell> |
| 22 | + |
| 23 | + <!-- ================= LIB CORE ================= --> |
| 24 | + <mxCell id="libcore" value="lib/ — Library Core (entry & wiring)" style="swimlane;startSize=30;html=1;whiteSpace=wrap;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontStyle=1;align=center;" vertex="1" parent="1"> |
| 25 | + <mxGeometry x="500" y="40" width="640" height="430" as="geometry" /> |
| 26 | + </mxCell> |
| 27 | + <mxCell id="index" value="index.js
initialize() — bootstraps wallet" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontStyle=1;" vertex="1" parent="libcore"> |
| 28 | + <mxGeometry x="230" y="50" width="200" height="60" as="geometry" /> |
| 29 | + </mxCell> |
| 30 | + <mxCell id="config" value="config.js
branding, CHAPI,
MEDIATOR_ORIGIN" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="libcore"> |
| 31 | + <mxGeometry x="20" y="150" width="140" height="70" as="geometry" /> |
| 32 | + </mxCell> |
| 33 | + <mxCell id="cardDesigns" value="cardDesigns.js
VC card styles" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="libcore"> |
| 34 | + <mxGeometry x="20" y="250" width="140" height="60" as="geometry" /> |
| 35 | + </mxCell> |
| 36 | + <mxCell id="router" value="router.js
configureRouter()
FEATURES map + guards" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;" vertex="1" parent="libcore"> |
| 37 | + <mxGeometry x="230" y="160" width="200" height="70" as="geometry" /> |
| 38 | + </mxCell> |
| 39 | + <mxCell id="guards" value="route guards
requireLogin /
redirectHomeIfLoggedIn" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="libcore"> |
| 40 | + <mxGeometry x="230" y="270" width="200" height="60" as="geometry" /> |
| 41 | + </mxCell> |
| 42 | + <mxCell id="session" value="session.js
session + sessionDataRef" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="libcore"> |
| 43 | + <mxGeometry x="470" y="50" width="150" height="60" as="geometry" /> |
| 44 | + </mxCell> |
| 45 | + <mxCell id="rootData" value="rootData.js
reactive title/brand" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="libcore"> |
| 46 | + <mxGeometry x="470" y="150" width="150" height="60" as="geometry" /> |
| 47 | + </mxCell> |
| 48 | + <mxCell id="helpers" value="helpers.js" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="libcore"> |
| 49 | + <mxGeometry x="470" y="250" width="150" height="50" as="geometry" /> |
| 50 | + </mxCell> |
| 51 | + <mxCell id="quasarInit" value="Quasar init + theme
(@bedrock/quasar)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="libcore"> |
| 52 | + <mxGeometry x="470" y="340" width="150" height="60" as="geometry" /> |
| 53 | + </mxCell> |
| 54 | + |
| 55 | + <!-- ================= ROUTES ================= --> |
| 56 | + <mxCell id="routes" value="routes/ — Lazy-loaded Pages (per feature)" style="swimlane;startSize=30;html=1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333;fontStyle=1;align=center;" vertex="1" parent="1"> |
| 57 | + <mxGeometry x="40" y="540" width="500" height="560" as="geometry" /> |
| 58 | + </mxCell> |
| 59 | + <mxCell id="r1" value="LoginPage / RegisterPage / OnboardPage" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="routes"> |
| 60 | + <mxGeometry x="20" y="50" width="220" height="50" as="geometry" /> |
| 61 | + </mxCell> |
| 62 | + <mxCell id="r2" value="HomePage" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="routes"> |
| 63 | + <mxGeometry x="260" y="50" width="220" height="50" as="geometry" /> |
| 64 | + </mxCell> |
| 65 | + <mxCell id="r3" value="ProfilesPage" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="routes"> |
| 66 | + <mxGeometry x="20" y="120" width="220" height="50" as="geometry" /> |
| 67 | + </mxCell> |
| 68 | + <mxCell id="r4" value="SettingsPage / TwoFactorSetupPage" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="routes"> |
| 69 | + <mxGeometry x="260" y="120" width="220" height="50" as="geometry" /> |
| 70 | + </mxCell> |
| 71 | + <mxCell id="r5" value="InteractPage" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="routes"> |
| 72 | + <mxGeometry x="20" y="190" width="220" height="50" as="geometry" /> |
| 73 | + </mxCell> |
| 74 | + <mxCell id="r6" value="ScannerExchangePage" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="routes"> |
| 75 | + <mxGeometry x="260" y="190" width="220" height="50" as="geometry" /> |
| 76 | + </mxCell> |
| 77 | + <mxCell id="r7" value="ChapiExchangePage
(CHAPI credential handler)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="routes"> |
| 78 | + <mxGeometry x="20" y="260" width="460" height="50" as="geometry" /> |
| 79 | + </mxCell> |
| 80 | + <mxCell id="compsHdr" value="components/ (~45 Vue components composed by pages)" style="text;html=1;align=center;fontStyle=1;fontColor=#333333;" vertex="1" parent="routes"> |
| 81 | + <mxGeometry x="20" y="330" width="460" height="30" as="geometry" /> |
| 82 | + </mxCell> |
| 83 | + <mxCell id="c1" value="WalletLayout / WalletHeader / ChapiHeader" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;" vertex="1" parent="routes"> |
| 84 | + <mxGeometry x="20" y="370" width="220" height="40" as="geometry" /> |
| 85 | + </mxCell> |
| 86 | + <mxCell id="c2" value="Credential* (Dashboard, Card, Details, List, Select)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;" vertex="1" parent="routes"> |
| 87 | + <mxGeometry x="260" y="370" width="220" height="40" as="geometry" /> |
| 88 | + </mxCell> |
| 89 | + <mxCell id="c3" value="Profile* / AccessManagement / User*" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;" vertex="1" parent="routes"> |
| 90 | + <mxGeometry x="20" y="420" width="220" height="40" as="geometry" /> |
| 91 | + </mxCell> |
| 92 | + <mxCell id="c4" value="Login/Register Form / TwoFactor* / CodeInput" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;" vertex="1" parent="routes"> |
| 93 | + <mxGeometry x="260" y="420" width="220" height="40" as="geometry" /> |
| 94 | + </mxCell> |
| 95 | + <mxCell id="c5" value="BarcodeScanner / QrCode / NfcShare / contactless" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;" vertex="1" parent="routes"> |
| 96 | + <mxGeometry x="20" y="470" width="460" height="40" as="geometry" /> |
| 97 | + </mxCell> |
| 98 | + |
| 99 | + <!-- ================= EXTERNAL DEPS ================= --> |
| 100 | + <mxCell id="deps" value="External Bedrock / DB Dependencies" style="swimlane;startSize=30;html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;fontStyle=1;align=center;" vertex="1" parent="1"> |
| 101 | + <mxGeometry x="660" y="540" width="480" height="560" as="geometry" /> |
| 102 | + </mxCell> |
| 103 | + <mxCell id="d1" value="@bedrock/web-wallet
(VC engine: issue/store/present)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="deps"> |
| 104 | + <mxGeometry x="20" y="50" width="200" height="60" as="geometry" /> |
| 105 | + </mxCell> |
| 106 | + <mxCell id="d2" value="@bedrock/web-session
@bedrock/web-account" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="deps"> |
| 107 | + <mxGeometry x="250" y="50" width="200" height="60" as="geometry" /> |
| 108 | + </mxCell> |
| 109 | + <mxCell id="d3" value="@bedrock/web-profile" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="deps"> |
| 110 | + <mxGeometry x="20" y="130" width="200" height="50" as="geometry" /> |
| 111 | + </mxCell> |
| 112 | + <mxCell id="d4" value="@bedrock/web-authn-token
(2FA / TOTP)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="deps"> |
| 113 | + <mxGeometry x="250" y="130" width="200" height="50" as="geometry" /> |
| 114 | + </mxCell> |
| 115 | + <mxCell id="d5" value="@bedrock/quasar + quasar-components
(UI framework + theme)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="deps"> |
| 116 | + <mxGeometry x="20" y="200" width="430" height="50" as="geometry" /> |
| 117 | + </mxCell> |
| 118 | + <mxCell id="d6" value="@bedrock/vue-vc + web-fontawesome" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="deps"> |
| 119 | + <mxGeometry x="20" y="270" width="430" height="40" as="geometry" /> |
| 120 | + </mxCell> |
| 121 | + <mxCell id="d7" value="web-credential-handler + @bedrock/web
(CHAPI mediator @ authn.io, shared config)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="deps"> |
| 122 | + <mxGeometry x="20" y="330" width="430" height="50" as="geometry" /> |
| 123 | + </mxCell> |
| 124 | + <mxCell id="d8" value="html5-qrcode / qrcode / mustache / randomcolor" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;" vertex="1" parent="deps"> |
| 125 | + <mxGeometry x="20" y="400" width="430" height="40" as="geometry" /> |
| 126 | + </mxCell> |
| 127 | + <mxCell id="d9" value="@vuelidate/core + validators (form validation)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;" vertex="1" parent="deps"> |
| 128 | + <mxGeometry x="20" y="460" width="430" height="40" as="geometry" /> |
| 129 | + </mxCell> |
| 130 | + |
| 131 | + <!-- ================= EDGES ================= --> |
| 132 | + <mxCell id="e1" value="initialize()" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontColor=#333333;exitX=1;exitY=0.3;exitDx=0;exitDy=0;entryX=0;entryY=0.2;entryDx=0;entryDy=0;" edge="1" parent="1" source="host" target="index"> |
| 133 | + <mxGeometry relative="1" as="geometry" /> |
| 134 | + </mxCell> |
| 135 | + <mxCell id="e2" value="configureRouter()" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontColor=#333333;" edge="1" parent="libcore" source="index" target="router"> |
| 136 | + <mxGeometry relative="1" as="geometry" /> |
| 137 | + </mxCell> |
| 138 | + <mxCell id="e3" value="reads config" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontColor=#333333;" edge="1" parent="libcore" source="index" target="config"> |
| 139 | + <mxGeometry relative="1" as="geometry" /> |
| 140 | + </mxCell> |
| 141 | + <mxCell id="e4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="libcore" source="config" target="cardDesigns"> |
| 142 | + <mxGeometry relative="1" as="geometry" /> |
| 143 | + </mxCell> |
| 144 | + <mxCell id="e5" value="installs guards" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontColor=#333333;" edge="1" parent="libcore" source="router" target="guards"> |
| 145 | + <mxGeometry relative="1" as="geometry" /> |
| 146 | + </mxCell> |
| 147 | + <mxCell id="e6" value="updates" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontColor=#333333;" edge="1" parent="libcore" source="index" target="session"> |
| 148 | + <mxGeometry relative="1" as="geometry" /> |
| 149 | + </mxCell> |
| 150 | + <mxCell id="e7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="libcore" source="index" target="rootData"> |
| 151 | + <mxGeometry relative="1" as="geometry" /> |
| 152 | + </mxCell> |
| 153 | + <mxCell id="e8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="libcore" source="index" target="quasarInit"> |
| 154 | + <mxGeometry relative="1" as="geometry" /> |
| 155 | + </mxCell> |
| 156 | + |
| 157 | + <mxCell id="e9" value="addRoute() — lazy import() per enabled feature" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontColor=#333333;exitX=0.2;exitY=1;exitDx=0;exitDy=0;entryX=0.7;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="router" target="routes"> |
| 158 | + <mxGeometry relative="1" as="geometry" /> |
| 159 | + </mxCell> |
| 160 | + <mxCell id="e10" value="guards check session.data.account" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontColor=#333333;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.2;entryDx=0;entryDy=0;" edge="1" parent="1" source="guards" target="d2"> |
| 161 | + <mxGeometry relative="1" as="geometry" /> |
| 162 | + </mxCell> |
| 163 | + |
| 164 | + <mxCell id="e11" value="pages compose components & call wallet deps" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontColor=#333333;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="routes" target="deps"> |
| 165 | + <mxGeometry relative="1" as="geometry" /> |
| 166 | + </mxCell> |
| 167 | + <mxCell id="e12" value="CHAPI exchange via mediator" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontColor=#333333;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.6;entryDx=0;entryDy=0;" edge="1" parent="1" source="r7" target="d7"> |
| 168 | + <mxGeometry relative="1" as="geometry" /> |
| 169 | + </mxCell> |
| 170 | + </root> |
| 171 | + </mxGraphModel> |
| 172 | + </diagram> |
| 173 | +</mxfile> |
0 commit comments