Files
soleprint/docs/veins/slack.svg
buenosairesam 22356fed66
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
docs: add architecture and veins documentation
- System overview, artery hierarchy, build flow, room config diagrams
- Veins docs: Jira, Slack, Google OAuth
- Shunts docs: MercadoPago mock
- DOT source files with generated SVGs
- HTML viewers with navigation and full-screen mode

Solves:
- Freelance work standardization
- Missing infrastructure replication (shunts)
- Reliable testing environment (BDD -> Gherkin -> Tests)
2026-01-02 22:09:13 -03:00

134 lines
9.4 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.1.1 (0)
-->
<!-- Title: SlackVein Pages: 1 -->
<svg width="746pt" height="294pt"
viewBox="0.00 0.00 746.00 294.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 289.5)">
<title>SlackVein</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-289.5 741.75,-289.5 741.75,4 -4,4"/>
<text xml:space="preserve" text-anchor="middle" x="368.88" y="-266.3" font-family="Helvetica,sans-Serif" font-size="16.00">Slack Vein &#45; API Flow</text>
<g id="clust1" class="cluster">
<title>cluster_client</title>
<polygon fill="#e8f5e9" stroke="#e8f5e9" points="8,-67 8,-147 340.25,-147 340.25,-67 8,-67"/>
<text xml:space="preserve" text-anchor="middle" x="174.12" y="-127.8" font-family="Helvetica,sans-Serif" font-size="16.00">Soleprint</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_auth</title>
<polygon fill="#fff8e1" stroke="#fff8e1" points="417.25,-104 417.25,-184 551.75,-184 551.75,-104 417.25,-104"/>
<text xml:space="preserve" text-anchor="middle" x="484.5" y="-164.8" font-family="Helvetica,sans-Serif" font-size="16.00">Authentication</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_slack</title>
<polygon fill="#e3f2fd" stroke="#e3f2fd" points="597.25,-8 597.25,-250 729.75,-250 729.75,-8 597.25,-8"/>
<text xml:space="preserve" text-anchor="middle" x="663.5" y="-230.8" font-family="Helvetica,sans-Serif" font-size="16.00">Slack API</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_webhooks</title>
<polygon fill="none" stroke="gray" stroke-dasharray="5,2" points="430.12,-16 430.12,-96 537.88,-96 537.88,-16 430.12,-16"/>
<text xml:space="preserve" text-anchor="middle" x="484" y="-76.8" font-family="Helvetica,sans-Serif" font-size="16.00">Incoming</text>
</g>
<!-- app -->
<g id="node1" class="node">
<title>app</title>
<path fill="#c8e6c9" stroke="black" d="M80.75,-111C80.75,-111 28,-111 28,-111 22,-111 16,-105 16,-99 16,-99 16,-87 16,-87 16,-81 22,-75 28,-75 28,-75 80.75,-75 80.75,-75 86.75,-75 92.75,-81 92.75,-87 92.75,-87 92.75,-99 92.75,-99 92.75,-105 86.75,-111 80.75,-111"/>
<text xml:space="preserve" text-anchor="middle" x="54.38" y="-89.3" font-family="Helvetica,sans-Serif" font-size="11.00">Application</text>
</g>
<!-- vein -->
<g id="node2" class="node">
<title>vein</title>
<path fill="#a5d6a7" stroke="black" d="M320.25,-111C320.25,-111 221,-111 221,-111 215,-111 209,-105 209,-99 209,-99 209,-87 209,-87 209,-81 215,-75 221,-75 221,-75 320.25,-75 320.25,-75 326.25,-75 332.25,-81 332.25,-87 332.25,-87 332.25,-99 332.25,-99 332.25,-105 326.25,-111 320.25,-111"/>
<text xml:space="preserve" text-anchor="middle" x="270.62" y="-96.05" font-family="Helvetica,sans-Serif" font-size="11.00">Slack Vein</text>
<text xml:space="preserve" text-anchor="middle" x="270.62" y="-82.55" font-family="Helvetica,sans-Serif" font-size="11.00">(artery/veins/slack)</text>
</g>
<!-- app&#45;&gt;vein -->
<g id="edge1" class="edge">
<title>app&#45;&gt;vein</title>
<path fill="none" stroke="black" d="M93.19,-93C122.02,-93 162.6,-93 197.57,-93"/>
<polygon fill="black" stroke="black" points="197.19,-96.5 207.19,-93 197.19,-89.5 197.19,-96.5"/>
<text xml:space="preserve" text-anchor="middle" x="150.88" y="-96.25" font-family="Helvetica,sans-Serif" font-size="10.00">send_message()</text>
</g>
<!-- token -->
<g id="node3" class="node">
<title>token</title>
<path fill="#ffecb3" stroke="black" d="M506.62,-148C506.62,-148 461.38,-148 461.38,-148 455.38,-148 449.38,-142 449.38,-136 449.38,-136 449.38,-124 449.38,-124 449.38,-118 455.38,-112 461.38,-112 461.38,-112 506.62,-112 506.62,-112 512.62,-112 518.62,-118 518.62,-124 518.62,-124 518.62,-136 518.62,-136 518.62,-142 512.62,-148 506.62,-148"/>
<text xml:space="preserve" text-anchor="middle" x="484" y="-133.05" font-family="Helvetica,sans-Serif" font-size="11.00">Bot Token</text>
<text xml:space="preserve" text-anchor="middle" x="484" y="-119.55" font-family="Helvetica,sans-Serif" font-size="11.00">(Bearer)</text>
</g>
<!-- vein&#45;&gt;token -->
<g id="edge2" class="edge">
<title>vein&#45;&gt;token</title>
<path fill="none" stroke="black" d="M332.48,-103.65C366.11,-109.54 407.18,-116.73 437.92,-122.11"/>
<polygon fill="black" stroke="black" points="437.21,-125.54 447.67,-123.82 438.42,-118.64 437.21,-125.54"/>
<text xml:space="preserve" text-anchor="middle" x="378.75" y="-119.15" font-family="Helvetica,sans-Serif" font-size="10.00">auth</text>
</g>
<!-- webhook -->
<g id="node8" class="node">
<title>webhook</title>
<path fill="#f5f5f5" stroke="black" d="M517.88,-60C517.88,-60 450.12,-60 450.12,-60 444.12,-60 438.12,-54 438.12,-48 438.12,-48 438.12,-36 438.12,-36 438.12,-30 444.12,-24 450.12,-24 450.12,-24 517.88,-24 517.88,-24 523.88,-24 529.88,-30 529.88,-36 529.88,-36 529.88,-48 529.88,-48 529.88,-54 523.88,-60 517.88,-60"/>
<text xml:space="preserve" text-anchor="middle" x="484" y="-38.3" font-family="Helvetica,sans-Serif" font-size="11.00">Webhook URL</text>
</g>
<!-- vein&#45;&gt;webhook -->
<g id="edge7" class="edge">
<title>vein&#45;&gt;webhook</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M332.48,-78.32C362.09,-71.17 397.46,-62.64 426.47,-55.64"/>
<polygon fill="black" stroke="black" points="427.29,-59.04 436.19,-53.29 425.65,-52.24 427.29,-59.04"/>
<text xml:space="preserve" text-anchor="middle" x="378.75" y="-76.82" font-family="Helvetica,sans-Serif" font-size="10.00">simple post</text>
</g>
<!-- chat -->
<g id="node4" class="node">
<title>chat</title>
<path fill="#bbdefb" stroke="black" d="M709.75,-214C709.75,-214 617.25,-214 617.25,-214 611.25,-214 605.25,-208 605.25,-202 605.25,-202 605.25,-190 605.25,-190 605.25,-184 611.25,-178 617.25,-178 617.25,-178 709.75,-178 709.75,-178 715.75,-178 721.75,-184 721.75,-190 721.75,-190 721.75,-202 721.75,-202 721.75,-208 715.75,-214 709.75,-214"/>
<text xml:space="preserve" text-anchor="middle" x="663.5" y="-192.3" font-family="Helvetica,sans-Serif" font-size="11.00">chat.postMessage</text>
</g>
<!-- token&#45;&gt;chat -->
<g id="edge3" class="edge">
<title>token&#45;&gt;chat</title>
<path fill="none" stroke="black" d="M518.8,-142.57C542.44,-151.36 574.65,-163.33 602.58,-173.72"/>
<polygon fill="black" stroke="black" points="601.04,-176.88 611.63,-177.09 603.48,-170.32 601.04,-176.88"/>
<text xml:space="preserve" text-anchor="middle" x="574.5" y="-170.2" font-family="Helvetica,sans-Serif" font-size="10.00">POST</text>
</g>
<!-- channels -->
<g id="node5" class="node">
<title>channels</title>
<path fill="#bbdefb" stroke="black" d="M708.25,-160C708.25,-160 618.75,-160 618.75,-160 612.75,-160 606.75,-154 606.75,-148 606.75,-148 606.75,-136 606.75,-136 606.75,-130 612.75,-124 618.75,-124 618.75,-124 708.25,-124 708.25,-124 714.25,-124 720.25,-130 720.25,-136 720.25,-136 720.25,-148 720.25,-148 720.25,-154 714.25,-160 708.25,-160"/>
<text xml:space="preserve" text-anchor="middle" x="663.5" y="-138.3" font-family="Helvetica,sans-Serif" font-size="11.00">conversations.list</text>
</g>
<!-- token&#45;&gt;channels -->
<g id="edge4" class="edge">
<title>token&#45;&gt;channels</title>
<path fill="none" stroke="black" d="M518.8,-132.29C540.36,-133.74 569.04,-135.68 595.11,-137.44"/>
<polygon fill="black" stroke="black" points="594.76,-140.93 604.97,-138.11 595.23,-133.94 594.76,-140.93"/>
<text xml:space="preserve" text-anchor="middle" x="574.5" y="-139.97" font-family="Helvetica,sans-Serif" font-size="10.00">GET</text>
</g>
<!-- users -->
<g id="node6" class="node">
<title>users</title>
<path fill="#bbdefb" stroke="black" d="M684.62,-106C684.62,-106 642.38,-106 642.38,-106 636.38,-106 630.38,-100 630.38,-94 630.38,-94 630.38,-82 630.38,-82 630.38,-76 636.38,-70 642.38,-70 642.38,-70 684.62,-70 684.62,-70 690.62,-70 696.62,-76 696.62,-82 696.62,-82 696.62,-94 696.62,-94 696.62,-100 690.62,-106 684.62,-106"/>
<text xml:space="preserve" text-anchor="middle" x="663.5" y="-84.3" font-family="Helvetica,sans-Serif" font-size="11.00">users.list</text>
</g>
<!-- token&#45;&gt;users -->
<g id="edge5" class="edge">
<title>token&#45;&gt;users</title>
<path fill="none" stroke="black" d="M518.8,-122C547.29,-115.26 588.23,-105.57 619.13,-98.26"/>
<polygon fill="black" stroke="black" points="619.62,-101.74 628.55,-96.03 618.01,-94.93 619.62,-101.74"/>
<text xml:space="preserve" text-anchor="middle" x="574.5" y="-114.76" font-family="Helvetica,sans-Serif" font-size="10.00">GET</text>
</g>
<!-- files -->
<g id="node7" class="node">
<title>files</title>
<path fill="#bbdefb" stroke="black" d="M691,-52C691,-52 636,-52 636,-52 630,-52 624,-46 624,-40 624,-40 624,-28 624,-28 624,-22 630,-16 636,-16 636,-16 691,-16 691,-16 697,-16 703,-22 703,-28 703,-28 703,-40 703,-40 703,-46 697,-52 691,-52"/>
<text xml:space="preserve" text-anchor="middle" x="663.5" y="-30.3" font-family="Helvetica,sans-Serif" font-size="11.00">files.upload</text>
</g>
<!-- token&#45;&gt;files -->
<g id="edge6" class="edge">
<title>token&#45;&gt;files</title>
<path fill="none" stroke="black" d="M519.01,-117.82C529.97,-113.1 541.84,-107.11 551.75,-100 557.05,-96.2 556.96,-93.68 561.75,-89.25 576.55,-75.55 579.88,-71.23 597.25,-61 602.4,-57.97 607.95,-55.11 613.57,-52.47"/>
<polygon fill="black" stroke="black" points="614.59,-55.85 622.3,-48.59 611.74,-49.46 614.59,-55.85"/>
<text xml:space="preserve" text-anchor="middle" x="574.5" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00">POST</text>
</g>
</g>
</svg>