| 1 |
- <svg id="mermaid-svg" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 1871.125px;" viewBox="0 0 1871.125 481" role="graphics-document document" aria-roledescription="flowchart-v2" xmlns:xlink="http://www.w3.org/1999/xlink"><style xmlns="http://www.w3.org/1999/xhtml">@import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css");</style><style>#mermaid-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg .error-icon{fill:#552222;}#mermaid-svg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg .marker{fill:#333333;stroke:#333333;}#mermaid-svg .marker.cross{stroke:#333333;}#mermaid-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg p{margin:0;}#mermaid-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg .cluster-label text{fill:#333;}#mermaid-svg .cluster-label span{color:#333;}#mermaid-svg .cluster-label span p{background-color:transparent;}#mermaid-svg .label text,#mermaid-svg span{fill:#333;color:#333;}#mermaid-svg .node rect,#mermaid-svg .node circle,#mermaid-svg .node ellipse,#mermaid-svg .node polygon,#mermaid-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg .rough-node .label text,#mermaid-svg .node .label text,#mermaid-svg .image-shape .label,#mermaid-svg .icon-shape .label{text-anchor:middle;}#mermaid-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg .rough-node .label,#mermaid-svg .node .label,#mermaid-svg .image-shape .label,#mermaid-svg .icon-shape .label{text-align:center;}#mermaid-svg .node.clickable{cursor:pointer;}#mermaid-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg .arrowheadPath{fill:#333333;}#mermaid-svg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg .cluster text{fill:#333;}#mermaid-svg .cluster span{color:#333;}#mermaid-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg rect.text{fill:none;stroke-width:0;}#mermaid-svg .icon-shape,#mermaid-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg .icon-shape p,#mermaid-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg .icon-shape rect,#mermaid-svg .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="mermaid-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster " id="perimeter" data-look="classic"><rect style="" x="8" y="129" width="199.390625" height="124"/><g class="cluster-label " transform="translate(73.90625, 129)"><foreignObject width="67.578125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>perimeter</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M1500.551,164L1512.175,142.5C1523.8,121,1547.048,78,1577.565,56.5C1608.081,35,1645.865,35,1664.757,35L1683.648,35" id="L_APP_PG_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_APP_PG_0" data-points="W3sieCI6MTUwMC41NTEwODE3MzA3NjkzLCJ5IjoxNjR9LHsieCI6MTU3MC4yOTY4NzUsInkiOjM1fSx7IngiOjE2ODcuNjQ4NDM3NSwieSI6MzV9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M1529.747,164L1536.505,159.833C1543.264,155.667,1556.78,147.333,1582.432,143.167C1608.083,139,1645.87,139,1664.763,139L1683.656,139" id="L_APP_CH_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_APP_CH_0" data-points="W3sieCI6MTUyOS43NDY5OTUxOTIzMDc2LCJ5IjoxNjR9LHsieCI6MTU3MC4yOTY4NzUsInkiOjEzOX0seyJ4IjoxNjg3LjY1NjI1LCJ5IjoxMzl9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M1529.747,218L1536.505,222.167C1543.264,226.333,1556.78,234.667,1582.432,238.833C1608.083,243,1645.87,243,1664.763,243L1683.656,243" id="L_APP_RD_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_APP_RD_0" data-points="W3sieCI6MTUyOS43NDY5OTUxOTIzMDc2LCJ5IjoyMTh9LHsieCI6MTU3MC4yOTY4NzUsInkiOjI0M30seyJ4IjoxNjg3LjY1NjI1LCJ5IjoyNDN9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M182.391,191L186.557,191C190.724,191,199.057,191,207.391,191C215.724,191,224.057,191,231.724,191C239.391,191,246.391,191,249.891,191L253.391,191" id="L_LB_mTLS_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_LB_mTLS_0" data-points="W3sieCI6MTgyLjM5MDYyNSwieSI6MTkxfSx7IngiOjIwNy4zOTA2MjUsInkiOjE5MX0seyJ4IjoyMzIuMzkwNjI1LCJ5IjoxOTF9LHsieCI6MjU3LjM5MDYyNSwieSI6MTkxfV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M498.531,191L502.698,191C506.865,191,515.198,191,522.865,191C530.531,191,537.531,191,541.031,191L544.531,191" id="L_mTLS_auth_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_mTLS_auth_0" data-points="W3sieCI6NDk4LjUzMTI1LCJ5IjoxOTF9LHsieCI6NTIzLjUzMTI1LCJ5IjoxOTF9LHsieCI6NTQ4LjUzMTI1LCJ5IjoxOTF9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M1376.609,191L1380.776,191C1384.943,191,1393.276,191,1400.943,191C1408.609,191,1415.609,191,1419.109,191L1422.609,191" id="L_auth_APP_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_auth_APP_0" data-points="W3sieCI6MTM3Ni42MDkzNzUsInkiOjE5MX0seyJ4IjoxNDAxLjYwOTM3NSwieSI6MTkxfSx7IngiOjE0MjYuNjA5Mzc1LCJ5IjoxOTF9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M1497.035,218L1509.245,247.75C1521.455,277.5,1545.876,337,1561.587,366.75C1577.297,396.5,1584.297,396.5,1587.797,396.5L1591.297,396.5" id="L_APP_data_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_APP_data_0" data-points="W3sieCI6MTQ5Ny4wMzQ3ODU1ODM5NDE2LCJ5IjoyMTh9LHsieCI6MTU3MC4yOTY4NzUsInkiOjM5Ni41fSx7IngiOjE1OTUuMjk2ODc1LCJ5IjozOTYuNX1d" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_APP_PG_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_APP_CH_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_APP_RD_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_LB_mTLS_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_mTLS_auth_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_auth_APP_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_APP_data_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g></g><g class="nodes"><g class="root" transform="translate(1587.296875, 312)"><g class="clusters"><g class="cluster " id="data" data-look="classic"><rect style="" x="8" y="8" width="267.828125" height="153"/><g class="cluster-label " transform="translate(118.796875, 8)"><foreignObject width="46.234375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>At rest</p></span></div></foreignObject></g></g></g><g class="edgePaths"/><g class="edgeLabels"/><g class="nodes"><g class="node default " id="flowchart-S1-5" transform="translate(141.9140625, 84.5)"><rect class="basic label-container" style="" x="-98.9140625" y="-39" width="197.828125" height="78"/><g class="label" style="" transform="translate(-68.9140625, -24)"><rect/><foreignObject width="137.828125" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>AES-256-GCM<br />BA_MASTER_KEY</p></span></div></foreignObject></g></g></g></g><g class="root" transform="translate(540.53125, 106.5)"><g class="clusters"><g class="cluster " id="auth" data-look="classic"><rect style="" x="8" y="8" width="828.078125" height="153"/><g class="cluster-label " transform="translate(405.578125, 8)"><foreignObject width="32.921875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>Auth</p></span></div></foreignObject></g></g></g><g class="edgePaths"/><g class="edgeLabels"/><g class="nodes"><g class="node default " id="flowchart-K1-2" transform="translate(146.359375, 84.5)"><rect class="basic label-container" style="" x="-103.359375" y="-39" width="206.71875" height="78"/><g class="label" style="" transform="translate(-73.359375, -24)"><rect/><foreignObject width="146.71875" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>API key in X-BA-Key<br />argon2id at rest</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-K2-3" transform="translate(427.5390625, 84.5)"><rect class="basic label-container" style="" x="-127.8203125" y="-39" width="255.640625" height="78"/><g class="label" style="" transform="translate(-97.8203125, -24)"><rect/><foreignObject width="195.640625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>HMAC-SHA256<br />Stripe-style X-BA-Signature</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-K3-4" transform="translate(703.21875, 84.5)"><rect class="basic label-container" style="" x="-97.859375" y="-27" width="195.71875" height="54"/><g class="label" style="" transform="translate(-67.859375, -12)"><rect/><foreignObject width="135.71875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>JWT for WS clients</p></span></div></foreignObject></g></g></g></g><g class="root" transform="translate(249.390625, 118.5)"><g class="clusters"><g class="cluster " id="mTLS" data-look="classic"><rect style="" x="8" y="8" width="241.140625" height="129"/><g class="cluster-label " transform="translate(36.96875, 8)"><foreignObject width="183.203125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>mTLS optional per source</p></span></div></foreignObject></g></g></g><g class="edgePaths"/><g class="edgeLabels"/><g class="nodes"><g class="node default " id="flowchart-M1-1" transform="translate(128.5703125, 72.5)"><rect class="basic label-container" style="" x="-85.5703125" y="-27" width="171.140625" height="54"/><g class="label" style="" transform="translate(-55.5703125, -12)"><rect/><foreignObject width="111.140625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>client cert verify</p></span></div></foreignObject></g></g></g></g><g class="node default " id="flowchart-LB-0" transform="translate(107.6953125, 191)"><rect class="basic label-container" style="" x="-74.6953125" y="-27" width="149.390625" height="54"/><g class="label" style="" transform="translate(-44.6953125, -12)"><rect/><foreignObject width="89.390625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>TLS 1.2+ LB</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-APP-10" transform="translate(1485.953125, 191)"><rect class="basic label-container" style="" x="-59.34375" y="-27" width="118.6875" height="54"/><g class="label" style="" transform="translate(-29.34375, -12)"><rect/><foreignObject width="58.6875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>services</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-PG-14" transform="translate(1729.2109375, 35)"><rect class="basic label-container" style="" x="-41.5625" y="-27" width="83.125" height="54"/><g class="label" style="" transform="translate(-11.5625, -12)"><rect/><foreignObject width="23.125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>PG</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-CH-16" transform="translate(1729.2109375, 139)"><rect class="basic label-container" style="" x="-41.5546875" y="-27" width="83.109375" height="54"/><g class="label" style="" transform="translate(-11.5546875, -12)"><rect/><foreignObject width="23.109375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>CH</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-RD-18" transform="translate(1729.2109375, 243)"><rect class="basic label-container" style="" x="-41.5546875" y="-27" width="83.109375" height="54"/><g class="label" style="" transform="translate(-11.5546875, -12)"><rect/><foreignObject width="23.109375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>RD</p></span></div></foreignObject></g></g></g></g></g></svg>
|