Skip to content
Snippets Groups Projects
Commit 8f7d640e authored by Tarje.Lavik's avatar Tarje.Lavik
Browse files

Add preview documentation

parent c254d26e
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="874px" preserveAspectRatio="none" style="width:744px;height:874px;background:#FFFFFF;" version="1.1" viewBox="0 0 744 874" width="744px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="328" x="201.5" y="17.4023">Component diagram for Sanity Studio</text><!--MD5=[7442f3b126ee602ae02566c1a49e158a] <?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1209px" preserveAspectRatio="none" style="width:2078px;height:1209px;background:#FFFFFF;" version="1.1" viewBox="0 0 2078 1209" width="2078px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="328" x="868.605" y="17.4023">Component diagram for Sanity Studio</text><!--MD5=[7442f3b126ee602ae02566c1a49e158a]
cluster api--><rect fill="#FFFFFF" height="204" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="512" x="56.25" y="258.6992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="130" x="247.25" y="276.168">SPA Application</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="280.75" y="291.1445">[Container]</text><!--MD5=[30860e21ba0e39165c540f9e23fe2d63] cluster api--><rect fill="#FFFFFF" height="568" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="765" x="7" y="186.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="130" x="324.5" y="203.668">SPA Application</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="358" y="218.6445">[Container]</text><!--MD5=[3ee045e728939fe034a5f1f68a887008]
entity sign--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="200" x="80.25" y="327.6992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="143" x="108.75" y="353.168">Sign In Controller</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="160.25" y="368.1445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="182.25" y="384.2109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="172" x="94.25" y="400.6992">Allows users to sign in to</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="143.25" y="417.1875">the Studio.</text><!--MD5=[7d95986b1a7257a223a95834a13edd2e] cluster next--><a href="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" target="_top" title="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:actuate="onRequest" xlink:href="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:show="new" xlink:title="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:type="simple"><rect fill="#FFFFFF" height="290" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="851" x="887" y="480.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="72" x="1276.5" y="497.668">Next app</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="1281" y="512.6445">[Container]</text></a><!--MD5=[d5ac3844f66b12d9e08170e47495e096]
entity import_tool--><rect fill="#85BBF0" height="118.9297" style="stroke:#78A8D8;stroke-width:1.5;" width="209" x="316" y="319.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="91" x="375" y="344.668">Import tool</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="400.5" y="359.6445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="422.5" y="375.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="351" y="392.1992">Plugin for importing</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="185" x="326" y="408.6875">external resources into the</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="396.5" y="425.1758">Studio.</text><!--MD5=[33573e971ff506c0f246109ca3fd77bd] cluster app--><rect fill="#FFFFFF" height="190" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="182" x="1532" y="548.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="110" x="1568" y="565.668">Preview fetch</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="1591.5" y="580.6445">[Container]</text><!--MD5=[ccd133e9ad8ee15f0a1e2d6545982481]
entity spa--><rect fill="#438DD5" height="118.9297" style="stroke:#3C7FC0;stroke-width:1.5;" width="202" x="527.25" y="40.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="142" x="557.25" y="65.668">Sanity Studio SPA</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="126" x="565.25" y="80.6445">[Javascript and React]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="630.25" y="96.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="130" x="563.25" y="113.1992">Provides all editing</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="537.25" y="129.6875">functionality to editors via</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="128" x="564.25" y="146.1758">their web browser.</text><!--MD5=[3d74be2a757051a7059b41e555fce061] cluster next_api--><rect fill="#FFFFFF" height="206" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="536" x="911" y="540.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="121" x="1118.5" y="557.668">Server side API</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="1147.5" y="572.6445">[Container]</text><!--MD5=[30860e21ba0e39165c540f9e23fe2d63]
entity sanity_db--><path d="M209,37.1992 C209,27.1992 309.5,27.1992 309.5,27.1992 C309.5,27.1992 410,27.1992 410,37.1992 L410,162.1523 C410,172.1523 309.5,172.1523 309.5,172.1523 C309.5,172.1523 209,172.1523 209,162.1523 L209,37.1992 " fill="#B3B3B3" style="stroke:#A6A6A6;stroke-width:1.5;"/><path d="M209,37.1992 C209,47.1992 309.5,47.1992 309.5,47.1992 C309.5,47.1992 410,47.1992 410,37.1992 " fill="none" style="stroke:#A6A6A6;stroke-width:1.5;"/><image height="50" width="50" x="284.5" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABjklEQVR4Xu2YzU7CQBRGeSoTJa4NaHwNxY2LwsqXplI0rpBLwEzOtGXa3tuZxjnJ2c39+SgNtLNZJpPJdGVXvB5CrY6yPjpcsqvsNzpcaIj79SpOIC6iJeeYwuHacp4J5eLWG2wh56qzDQzCOqEqXrxzTbJWnWtBeL4O1jTJOjUkxMnHuTe0z2DWU55X4y9IzVXh2RC+N29eH8oaFdwgbphqwG8AF6c8rwKDbB9u7IZZ4gU5y3PJwwCuu+XddAJx+SZZlyRc+po/T/M0g3HRPsrfHPaNAhcb4mfMe0s+US6kIeeMglWYchHpCnERDaPeQ+Xxu86FhlguI4Zxka8Il+sqeyaBfMJcNET2SY7QK8a6pOHykw0iMMAkg+yL1em5hiFMgvDJjfJ8F9w+h+f7uEG+FB93owYRWRMCe5gHETiwTta0IVeR9Zce0YOEBKrON3ebZiEucKCV5kEEDrWQM02oNv5gTTnPHC6gIWeMxuHj3Vumj9U6YggXLhaqvMhmr6Rof9Pe/19AJpP55/wCwk7g9HfTvaAAAAAASUVORK5CYII=" y="51.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="168" x="225.5" y="116.668">Sanity Cloud Storage</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="267" y="131.6445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="311.5" y="147.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="177" x="223" y="164.1992">Stores metadata and files.</text><!--MD5=[e29493a8775effcafa538aa0485107d1] entity sign--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="200" x="284" y="291.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="143" x="312.5" y="316.668">Sign In Controller</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="364" y="331.6445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="386" y="347.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="172" x="298" y="364.1992">Allows users to sign in to</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="347" y="380.6875">the Studio.</text><!--MD5=[7d95986b1a7257a223a95834a13edd2e]
entity auth--><rect fill="#B3B3B3" height="133.9531" style="stroke:#A6A6A6;stroke-width:1.5;" width="203" x="7" y="548.6992"/><image height="48" width="48" x="84.5" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB5ElEQVR4Xu2YsZLCMAxE+f/fUXMNDQ0NDQ1NmjQ0NGloqLgde86ElWQrYZhkbvIqJsjrjWUpTnayMnZ8YWk2Qy02Qy3+haGfMDwywARDx+Pxfr8/J4Ihh8OBtXyihvb7PU81BQxnRYeoodvtlqUvl8vj8XifzgZhCM6/MZwVHUKGkKwyB+51GIbXtD4IQ3BxDxHWtQgZmrF1NBBhXYu2obLsnwMpVlc0DKF0WTXR9/25CgJ4TKLZCxqGTN3g4puJhiDHvVMzhP7Beong9iylQNTbUs2QWU3X65XjfBDM41P1cdwI19DpdGKlRLzFid9OIc6hf7iGzO7XdR2FYUpcHBL4oe3iIqukfkZhBdtQUMXcJXqHmffmtQDDkFfqtM5eOp4qrV72zRZgGAruRLMjZHRmzfowW4BhKEfDFvpbGaxr1Zwjo92POwhky6OawmQpQyUJFCamodWlzNuti21qCZe9OZNuembZ61XM2IYkrILFwMp/vTGKc/dPlY46wZY2xjUkzk5c7OEq/vFDtwCTecNrhmTWLRbMBTZLfUzDkLcJFjvCytoO+RnzdDyV4Ek8ZKi0gLW8KMraXqWl+uSKEG+nUUPyweeYYLIyEwwVXh+k3tF/8cgAcwx9lc1Qi81Qi81Qi18VHxRxhtGvjgAAAABJRU5ErkJggg==" y="558.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="183" x="17" y="622.168">Google Authentication</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="66" y="637.1445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="110.5" y="653.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="150" x="35.5" y="669.6992">Authenticates editors.</text><!--MD5=[e2ca8134d4d6579ee847ece18521a18e] entity import_tool--><rect fill="#85BBF0" height="118.9297" style="stroke:#78A8D8;stroke-width:1.5;" width="209" x="519.75" y="282.6992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="91" x="578.75" y="308.168">Import tool</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="604.25" y="323.1445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="626.25" y="339.2109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="554.75" y="355.6992">Plugin for importing</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="185" x="529.75" y="372.1875">external resources into the</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="600.25" y="388.6758">Studio.</text><!--MD5=[4a25415281e815767a329b93358bb1b9]
entity marcus--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="245" y="579.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="60" x="285.5" y="605.168">Marcus</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="317.5" y="622.0781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="259" y="638.5664">Content provider</text><!--MD5=[869122dbb59a4f5702fe9cdcd390c614] entity preview--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="217" x="31.75" y="291.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="110" x="85.25" y="316.668">Desk preview</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="120.25" y="331.6445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="142.25" y="347.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="193" x="45.75" y="364.1992">Preview tab addition to desk</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="118.25" y="380.6875">forms.</text><!--MD5=[698d913457f9c86de3bf77a2a7de22cf]
entity kulturnav--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="421" y="579.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="80" x="451.5" y="605.168">Kulturnav</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="493.5" y="622.0781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="435" y="638.5664">Content provider</text><!--MD5=[29e43f0d87d4a5e4fc25a2c204ebb0f3] entity resolveProductionUrl--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="213" x="404.75" y="628.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="172" x="425.25" y="653.668">resolveProductionUrl</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="491.25" y="668.6445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="513.25" y="684.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="185" x="418.75" y="701.1992">Sends correct id to preview</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="146" x="438.25" y="717.6875">api along with secret.</text><!--MD5=[3b003e53f0c5c3fd2bdf9e50327f52d3]
entity nb--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="597" y="579.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="47" x="644" y="605.168">NB.no</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="669.5" y="622.0781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="611" y="638.5664">Content provider</text><!--MD5=[10c2457638a95e38b5d87a5d20a81c8c] entity overlay--><rect fill="#85BBF0" height="85.9531" style="stroke:#78A8D8;stroke-width:1.5;" width="150" x="1548" y="636.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="16" x="1615" y="661.668">/*</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="1602.5" y="676.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1625" y="692.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="1562" y="709.1992">Serves static page.</text><!--MD5=[1efdf5ff296020223cd10859dff9c219]
link import_tool to sanity_db--><path d="M396.69,318.9042 C380.478,278.4482 358.755,224.2372 341.016,179.9722 " fill="none" id="import_tool-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="337.98,172.3942,338.1705,180.9361,343.7401,178.7046,337.98,172.3942" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="363.25" y="222.8008">Uses</text><!--MD5=[cc6e701350592b60920a324fb448bbde] entity api_preview--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="279" x="1151.75" y="628.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="259" x="1161.75" y="653.668">/api/preview?token=[]&amp;slug=[]</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="1270.75" y="668.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1293.25" y="684.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="166" x="1208.25" y="701.1992">Validates token and sets</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="161" x="1210.75" y="717.6875">preview variable to true</text><!--MD5=[7fb0a03ec23579436cc251699a593eb9]
link import_tool to marcus--><path d="M394.025,438.3932 C375.481,479.8962 351.045,534.5872 334.335,571.9842 " fill="none" id="import_tool-to-marcus" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="330.892,579.6912,336.895,573.6114,331.4171,571.1634,330.892,579.6912" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="372.25" y="499.8008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="373.75" y="513.9336">[HTTPS]</text><!--MD5=[ce03490f95923a2a4bf4a1a880a51bb0] entity api_exit_preview--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="189" x="927.75" y="628.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="146" x="949.25" y="653.668">/api/exit-preview</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="1001.75" y="668.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1024.25" y="684.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="161" x="941.75" y="701.1992">Sets preview variable to</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="32" x="1006.25" y="717.6875">false</text><!--MD5=[33573e971ff506c0f246109ca3fd77bd]
link import_tool to kulturnav--><path d="M437.983,438.3932 C450.522,479.8962 467.046,534.5872 478.345,571.9842 " fill="none" id="import_tool-to-kulturnav" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="480.673,579.6912,481.2321,571.1655,475.4883,572.9001,480.673,579.6912" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="463.25" y="499.8008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="464.75" y="513.9336">[HTTPS]</text><!--MD5=[72e6538a4afd9ff6e5f89c0cb2220dab] entity spa--><rect fill="#438DD5" height="168.9297" style="stroke:#3C7FC0;stroke-width:1.5;" width="202" x="687" y="848.6992"/><image height="50" width="50" x="763" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABjklEQVR4Xu2YzU7CQBRGeSoTJa4NaHwNxY2LwsqXplI0rpBLwEzOtGXa3tuZxjnJ2c39+SgNtLNZJpPJdGVXvB5CrY6yPjpcsqvsNzpcaIj79SpOIC6iJeeYwuHacp4J5eLWG2wh56qzDQzCOqEqXrxzTbJWnWtBeL4O1jTJOjUkxMnHuTe0z2DWU55X4y9IzVXh2RC+N29eH8oaFdwgbphqwG8AF6c8rwKDbB9u7IZZ4gU5y3PJwwCuu+XddAJx+SZZlyRc+po/T/M0g3HRPsrfHPaNAhcb4mfMe0s+US6kIeeMglWYchHpCnERDaPeQ+Xxu86FhlguI4Zxka8Il+sqeyaBfMJcNET2SY7QK8a6pOHykw0iMMAkg+yL1em5hiFMgvDJjfJ8F9w+h+f7uEG+FB93owYRWRMCe5gHETiwTta0IVeR9Zce0YOEBKrON3ebZiEucKCV5kEEDrWQM02oNv5gTTnPHC6gIWeMxuHj3Vumj9U6YggXLhaqvMhmr6Rof9Pe/19AJpP55/wCwk7g9HfTvaAAAAAASUVORK5CYII=" y="858.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="142" x="717" y="924.168">Sanity Studio SPA</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="126" x="725" y="939.1445">[Javascript and React]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="790" y="955.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="130" x="723" y="971.6992">Provides all editing</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="697" y="988.1875">functionality to editors via</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="128" x="724" y="1004.6758">their web browser.</text><!--MD5=[3d74be2a757051a7059b41e555fce061]
link import_tool to nb--><path d="M481.941,438.3932 C526.294,480.5912 584.975,536.4222 624.312,573.8472 " fill="none" id="import_tool-to-nb" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="630.454,579.6912,626.7261,572.0034,622.5903,576.3503,630.454,579.6912" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="566.25" y="499.8008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="567.75" y="513.9336">[HTTPS]</text><!--MD5=[8d00e1f70b11306d90ba31f906661b1d] entity sanity_db--><path d="M1825.75,870.6992 C1825.75,860.6992 1926.25,860.6992 1926.25,860.6992 C1926.25,860.6992 2026.75,860.6992 2026.75,870.6992 L2026.75,995.6523 C2026.75,1005.6523 1926.25,1005.6523 1926.25,1005.6523 C1926.25,1005.6523 1825.75,1005.6523 1825.75,995.6523 L1825.75,870.6992 " fill="#B3B3B3" style="stroke:#A6A6A6;stroke-width:1.5;"/><path d="M1825.75,870.6992 C1825.75,880.6992 1926.25,880.6992 1926.25,880.6992 C1926.25,880.6992 2026.75,880.6992 2026.75,870.6992 " fill="none" style="stroke:#A6A6A6;stroke-width:1.5;"/><image height="50" width="50" x="1901.25" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABjklEQVR4Xu2YzU7CQBRGeSoTJa4NaHwNxY2LwsqXplI0rpBLwEzOtGXa3tuZxjnJ2c39+SgNtLNZJpPJdGVXvB5CrY6yPjpcsqvsNzpcaIj79SpOIC6iJeeYwuHacp4J5eLWG2wh56qzDQzCOqEqXrxzTbJWnWtBeL4O1jTJOjUkxMnHuTe0z2DWU55X4y9IzVXh2RC+N29eH8oaFdwgbphqwG8AF6c8rwKDbB9u7IZZ4gU5y3PJwwCuu+XddAJx+SZZlyRc+po/T/M0g3HRPsrfHPaNAhcb4mfMe0s+US6kIeeMglWYchHpCnERDaPeQ+Xxu86FhlguI4Zxka8Il+sqeyaBfMJcNET2SY7QK8a6pOHykw0iMMAkg+yL1em5hiFMgvDJjfJ8F9w+h+f7uEG+FB93owYRWRMCe5gHETiwTta0IVeR9Zce0YOEBKrON3ebZiEucKCV5kEEDrWQM02oNv5gTTnPHC6gIWeMxuHj3Vumj9U6YggXLhaqvMhmr6Rof9Pe/19AJpP55/wCwk7g9HfTvaAAAAAASUVORK5CYII=" y="884.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="168" x="1842.25" y="950.168">Sanity Cloud Storage</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="1883.75" y="965.1445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1928.25" y="981.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="177" x="1839.75" y="997.6992">Stores metadata and files.</text><!--MD5=[e29493a8775effcafa538aa0485107d1]
reverse link sanity_db to spa--><path d="M418.161,99.6992 C453.464,99.6992 492.454,99.6992 527.163,99.6992 " fill="none" id="sanity_db-backto-spa" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="409.746,99.6992,417.746,102.6992,417.746,96.6992,409.746,99.6992" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="452.75" y="78.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="427.75" y="92.4336">[JSON/HTTPS]</text><!--MD5=[b20751f21bc3c5e56073fe913b5ac5ab] entity auth--><rect fill="#B3B3B3" height="133.9531" style="stroke:#A6A6A6;stroke-width:1.5;" width="203" x="1754.75" y="612.1992"/><image height="48" width="48" x="1832.25" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB5ElEQVR4Xu2YsZLCMAxE+f/fUXMNDQ0NDQ1NmjQ0NGloqLgde86ElWQrYZhkbvIqJsjrjWUpTnayMnZ8YWk2Qy02Qy3+haGfMDwywARDx+Pxfr8/J4Ihh8OBtXyihvb7PU81BQxnRYeoodvtlqUvl8vj8XifzgZhCM6/MZwVHUKGkKwyB+51GIbXtD4IQ3BxDxHWtQgZmrF1NBBhXYu2obLsnwMpVlc0DKF0WTXR9/25CgJ4TKLZCxqGTN3g4puJhiDHvVMzhP7Beong9iylQNTbUs2QWU3X65XjfBDM41P1cdwI19DpdGKlRLzFid9OIc6hf7iGzO7XdR2FYUpcHBL4oe3iIqukfkZhBdtQUMXcJXqHmffmtQDDkFfqtM5eOp4qrV72zRZgGAruRLMjZHRmzfowW4BhKEfDFvpbGaxr1Zwjo92POwhky6OawmQpQyUJFCamodWlzNuti21qCZe9OZNuembZ61XM2IYkrILFwMp/vTGKc/dPlY46wZY2xjUkzk5c7OEq/vFDtwCTecNrhmTWLRbMBTZLfUzDkLcJFjvCytoO+RnzdDyV4Ek8ZKi0gLW8KMraXqWl+uSKEG+nUUPyweeYYLIyEwwVXh+k3tF/8cgAcwx9lc1Qi81Qi81Qi18VHxRxhtGvjgAAAABJRU5ErkJggg==" y="622.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="183" x="1764.75" y="685.668">Google Authentication</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="1813.75" y="700.6445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1858.25" y="716.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="150" x="1783.25" y="733.1992">Authenticates editors.</text><!--MD5=[e2ca8134d4d6579ee847ece18521a18e]
link spa to api--><path d="M613.829,159.4442 C604.0045,199.4642 590.8715,252.9615 580.0668,296.9745 C577.3656,307.9777 574.8099,318.3882 572.4878,327.8471 C571.3268,332.5766 570.2241,337.0682 569.1909,341.2771 C568.9326,342.3293 568.6786,343.3638 568.4291,344.38 " fill="none" id="spa-to-api" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="568.4291,344.38,573.2499,337.3259,567.423,335.8954,568.4291,344.38" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="628.25" y="215.8008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="603.25" y="229.9336">[JSON/HTTPS]</text><!--MD5=[0b4537366c46ce983a36229d7d90ca4d] entity marcus--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="729.75" y="28.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="60" x="770.25" y="53.668">Marcus</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="802.25" y="70.5781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="743.75" y="87.0664">Content provider</text><!--MD5=[869122dbb59a4f5702fe9cdcd390c614]
link sign to auth--><path d="M164.893,429.8242 C155.025,462.0322 142.032,504.4402 130.979,540.5142 " fill="none" id="sign-to-auth" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="128.507,548.5832,133.7181,541.8124,127.9812,540.0554,128.507,548.5832" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="173.25" y="499.8008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="148.25" y="513.9336">[JSON/HTTPS]</text><rect fill="#FFFFFF" height="162.3945" rx="5" ry="5" style="stroke:#FFFFFF;stroke-width:1.0;" width="159" x="563" y="695.6523"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="51" x="569" y="716.1875">Legend</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="624" y="716.1875"/><rect fill="#08427B" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="719.1406"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="573" y="732.6758">person</text><rect fill="#1168BD" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="735.6289"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="47" x="573" y="749.1641">system</text><rect fill="#438DD5" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="752.1172"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="573" y="765.6523">container</text><rect fill="#85BBF0" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="768.6055"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="78" x="573" y="782.1406">component</text><rect fill="#686868" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="785.0938"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="109" x="573" y="798.6289">external person</text><rect fill="#999999" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="801.582"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="573" y="815.1172">external system</text><rect fill="#B3B3B3" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="818.0703"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="573" y="831.6055">external container</text><rect fill="#CCCCCC" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="834.5586"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="573" y="848.0938">external component</text><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="702.6523" y2="702.6523"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="719.1406" y2="719.1406"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="735.6289" y2="735.6289"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="752.1172" y2="752.1172"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="768.6055" y2="768.6055"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="785.0938" y2="785.0938"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="801.582" y2="801.582"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="818.0703" y2="818.0703"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="834.5586" y2="834.5586"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="851.0469" y2="851.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="569" y1="702.6523" y2="851.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="716" x2="716" y1="702.6523" y2="851.0469"/><!--MD5=[fad32fe7eff3261b3d1a5eb3a35bfab4] entity kulturnav--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="553.75" y="28.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="80" x="584.25" y="53.668">Kulturnav</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="626.25" y="70.5781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="567.75" y="87.0664">Content provider</text><!--MD5=[29e43f0d87d4a5e4fc25a2c204ebb0f3]
entity nb--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="377.75" y="28.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="47" x="424.75" y="53.668">NB.no</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="450.25" y="70.5781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="391.75" y="87.0664">Content provider</text><!--MD5=[10c2457638a95e38b5d87a5d20a81c8c]
link import_tool to sanity_db--><path d="M728.298,401.0962 C729.533,401.4792 730.767,401.8472 732,402.1992 C865.014,440.1782 1879.98,371.6732 1975,472.1992 C2071.21,573.9792 2013.61,750.5472 1967.1,852.7842 " fill="none" id="import_tool-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1963.63,860.3182,1969.6993,854.3046,1964.2486,851.7966,1963.63,860.3182" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="2028" y="683.3008">Uses</text><!--MD5=[9275baae73afe07bd484df2dfc6ef7ed]
link preview to resolveProductionUrl--><path d="M195.542,393.3522 C263.533,454.7452 378.331,558.4042 449.097,622.3032 " fill="none" id="preview-to-resolveProductionUrl" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="455.382,627.9772,451.4552,620.389,447.434,624.8421,455.382,627.9772" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="272" y="452.3008">Uses</text><!--MD5=[0b4537366c46ce983a36229d7d90ca4d]
link sign to auth--><path d="M477.578,393.2482 C485.71,396.5952 493.92,399.6442 502,402.1992 C587.701,429.2992 620.593,394.0962 702,432.1992 C721.389,441.2742 718.021,456.5092 738,464.1992 C763.302,473.9382 1690.05,459.4942 1714,472.1992 C1766.72,500.1682 1803.76,557.4552 1826.76,604.5332 " fill="none" id="sign-to-auth" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1830.33,611.9952,1829.5823,603.484,1824.1703,606.0743,1830.33,611.9952" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="764" y="445.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="739" y="459.4336">[JSON/HTTPS]</text><!--MD5=[4a95faa665d3139c578f5686cfd0df5c]
link api_preview to overlay--><path d="M1430.35,679.1992 C1467.49,679.1992 1506.45,679.1992 1539.54,679.1992 " fill="none" id="api_preview-to-overlay" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1547.82,679.1992,1539.82,676.1992,1539.82,682.1992,1547.82,679.1992" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="57" x="1460" y="657.8008">Redirects</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1448.5" y="671.9336">[JSON/HTTPS]</text><!--MD5=[b45430e1be5c19f53a00538edff2ec11]
reverse link preview to overlay--><path d="M250.728,396.3782 C255.858,398.4212 260.965,400.3732 266,402.1992 C367.545,439.0292 393.939,449.8532 501,464.1992 C527.046,467.6892 1423.18,461.0982 1447,472.1992 C1519.7,506.0782 1573.63,586.2062 1601.54,635.9502 " fill="none" id="preview-backto-overlay" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="243.201,393.3242,249.4855,399.1125,251.7419,393.553,243.201,393.3242" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="105" x="502" y="445.3008">Streams changes</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="514.5" y="459.4336">[JSON/HTTPS]</text><!--MD5=[aa78c49c6c5bdca418a70581d35c44a2]
reverse link marcus to import_tool--><path d="M772.464,107.4772 C760.05,126.5992 745.236,149.5042 732,170.1992 C708.162,207.4702 681.627,249.4772 660.824,282.5292 " fill="none" id="marcus-backto-import_tool" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="776.922,100.6142,770.0491,105.6899,775.0812,108.9576,776.922,100.6142" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="758" y="143.3008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="759.5" y="157.4336">[HTTPS]</text><!--MD5=[397c656162bdf1374bc84609635dfd08]
reverse link kulturnav to import_tool--><path d="M624,108.5642 C624,155.4452 624,230.4362 624,282.5532 " fill="none" id="kulturnav-backto-import_tool" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="624,100.4352,621,108.4352,627,108.4352,624,100.4352" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="625" y="143.3008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="626.5" y="157.4336">[HTTPS]</text><!--MD5=[b1bebbe118c8398e4de9e7b4fd539094]
reverse link nb to import_tool--><path d="M474.914,107.4052 C504.755,154.2012 553.093,230.0042 586.603,282.5532 " fill="none" id="nb-backto-import_tool" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="470.469,100.4352,472.2407,108.7935,477.2997,105.5676,470.469,100.4352" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="506" y="143.3008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="507.5" y="157.4336">[HTTPS]</text><!--MD5=[0271d862dad669faf31941ba3e900435]
link spa to sanity_db--><path d="M889.24,933.1992 C1102.85,933.1992 1598.01,933.1992 1817.68,933.1992 " fill="none" id="spa-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1825.7,933.1992,1817.7,930.1992,1817.7,936.1992,1825.7,933.1992" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="1341.75" y="911.8008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1316.75" y="925.9336">[JSON/HTTPS]</text><!--MD5=[13cfa0366951c83b0d0b9eca32570194]
link overlay to sanity_db--><path d="M1671.3,722.2082 C1691.5,739.6512 1715.28,760.0242 1737,778.1992 C1767.3,803.5612 1800.64,830.9062 1830.77,855.4152 " fill="none" id="overlay-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1837.14,860.6002,1832.8225,853.2273,1829.0392,857.8842,1837.14,860.6002" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="1809" y="799.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1784" y="813.4336">[JSON/HTTPS]</text><!--MD5=[32a41e1aa2dd9c3ad96b8807953e5b39]
link resolveProductionUrl to api_preview--><path d="M554.152,628.1282 C597.054,581.6612 667.508,516.2542 745,488.6992 C907.897,430.7752 977.634,414.9412 1134,488.6992 C1191.4,515.7732 1234.92,575.2642 1261.42,620.6122 " fill="none" id="resolveProductionUrl-to-api_preview" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1265.53,627.7612,1264.1501,619.3294,1258.9461,622.3158,1265.53,627.7612" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="643.5" y="445.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="618.5" y="459.4336">[JSON/HTTPS]</text><!--MD5=[c6021ebbec22d1130f0072b34dcfbf7b]
reverse link api to spa--><path d="M772.0626,350.5985 C772.2115,350.7413 772.362,350.886 772.5141,351.0326 C772.8183,351.3257 773.1289,351.6263 773.4457,351.9343 C778.5137,356.861 785.1492,363.6624 792.1529,371.7943 C806.1602,388.0582 821.6405,409.6442 829,432.1992 C834.516,449.1052 829.873,454.5152 828,472.1992 C814.087,603.5322 801.515,756.3402 794.32,848.5892 " fill="none" id="api-backto-spa" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="772.0626,350.5985,775.7583,358.3019,779.9123,353.9723,772.0626,350.5985" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="854" y="676.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="829" y="690.4336">[JSON/HTTPS]</text><rect fill="#FFFFFF" height="162.3945" rx="5" ry="5" style="stroke:#FFFFFF;stroke-width:1.0;" width="159" x="1897.21" y="1030.6289"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="51" x="1903.21" y="1051.1641">Legend</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1958.21" y="1051.1641"/><rect fill="#08427B" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1054.1172"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="1907.21" y="1067.6523">person</text><rect fill="#1168BD" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1070.6055"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="47" x="1907.21" y="1084.1406">system</text><rect fill="#438DD5" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1087.0938"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="1907.21" y="1100.6289">container</text><rect fill="#85BBF0" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1103.582"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="78" x="1907.21" y="1117.1172">component</text><rect fill="#686868" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1120.0703"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="109" x="1907.21" y="1133.6055">external person</text><rect fill="#999999" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1136.5586"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="1907.21" y="1150.0938">external system</text><rect fill="#B3B3B3" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1153.0469"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="1907.21" y="1166.582">external container</text><rect fill="#CCCCCC" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1169.5352"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="1907.21" y="1183.0703">external component</text><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1037.6289" y2="1037.6289"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1054.1172" y2="1054.1172"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1070.6055" y2="1070.6055"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1087.0938" y2="1087.0938"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1103.582" y2="1103.582"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1120.0703" y2="1120.0703"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1136.5586" y2="1136.5586"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1153.0469" y2="1153.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1169.5352" y2="1169.5352"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1186.0234" y2="1186.0234"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="1903.21" y1="1037.6289" y2="1186.0234"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="2050.21" x2="2050.21" y1="1037.6289" y2="1186.0234"/><!--MD5=[3a8f21caa493a496c238741778101e89]
@startuml "component_studio" @startuml "component_studio"
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
' uncomment the following line and comment the first to use locally ' uncomment the following line and comment the first to use locally
...@@ -34,7 +47,7 @@ LAYOUT_WITH_LEGEND() ...@@ -34,7 +47,7 @@ LAYOUT_WITH_LEGEND()
title Component diagram for Sanity Studio title Component diagram for Sanity Studio
Container(spa, "Sanity Studio SPA", "Javascript and React", "Provides all editing functionality to editors via their web browser.") Container(spa, "Sanity Studio SPA", "Javascript and React", "Provides all editing functionality to editors via their web browser.", SANITY)
ContainerDb_Ext(sanity_db, "Sanity Cloud Storage", "Google Cloud", "Stores metadata and files.", "SANITY") ContainerDb_Ext(sanity_db, "Sanity Cloud Storage", "Google Cloud", "Stores metadata and files.", "SANITY")
Container_Ext(auth, "Google Authentication", "Google Cloud", "Authenticates editors.", "google_cloud_platform") Container_Ext(auth, "Google Authentication", "Google Cloud", "Authenticates editors.", "google_cloud_platform")
...@@ -45,17 +58,35 @@ System_Ext(nb, "NB.no", "Content provider") ...@@ -45,17 +58,35 @@ System_Ext(nb, "NB.no", "Content provider")
Container_Boundary(api, "SPA Application", "SANITY") { Container_Boundary(api, "SPA Application", "SANITY") {
Component(sign, "Sign In Controller", "React", "Allows users to sign in to the Studio.") Component(sign, "Sign In Controller", "React", "Allows users to sign in to the Studio.")
Component(import_tool, "Import tool", "React", "Plugin for importing external resources into the Studio.") Component(import_tool, "Import tool", "React", "Plugin for importing external resources into the Studio.")
Component(preview, "Desk preview", "React", "Preview tab addition to desk forms.")
Component(resolveProductionUrl, "resolveProductionUrl", "React", "Sends correct id to preview api along with secret.")
Rel(import_tool, sanity_db, "Uses") Rel(import_tool, sanity_db, "Uses")
Rel(preview, resolveProductionUrl, "Uses")
Rel(sign, auth, "Uses", "JSON/HTTPS")
}
Container_Boundary(next, "Next app", "", NEXT) {
Container_Boundary(app, "Preview fetch") {
Component(overlay, "/*", "Route", "Serves static page.")
}
Container_Boundary(next_api, "Server side API") {
Component(api_preview, "/api/preview?token=[]&slug=[]", "Route", "Validates token and sets preview variable to true")
Component(api_exit_preview, "/api/exit-preview", "Route", "Sets preview variable to false")
}
Rel_R(api_preview, overlay, "Redirects", "JSON/HTTPS")
Rel_U(overlay, preview, "Streams changes", "JSON/HTTPS")
} }
Rel_D(import_tool, marcus, "Imports", "HTTPS") Rel_U(import_tool, marcus, "Imports", "HTTPS")
Rel_D(import_tool, kulturnav, "Imports", "HTTPS") Rel_U(import_tool, kulturnav, "Imports", "HTTPS")
Rel_D(import_tool, nb, "Imports", "HTTPS") Rel_U(import_tool, nb, "Imports", "HTTPS")
Rel_L(spa, sanity_db, "Uses", "JSON/HTTPS") Rel_R(spa, sanity_db, "Uses", "JSON/HTTPS")
Rel_D(spa, api, "Uses", "JSON/HTTPS") Rel_D(overlay, sanity_db, "Uses", "JSON/HTTPS")
Rel(sign, auth, "Uses", "JSON/HTTPS") Rel_R(resolveProductionUrl, api_preview, "Uses", "JSON/HTTPS")
Rel_U(spa, api, "Uses", "JSON/HTTPS")
@enduml @enduml
...@@ -727,7 +758,7 @@ endlegend ...@@ -727,7 +758,7 @@ endlegend
title Component diagram for Sanity Studio title Component diagram for Sanity Studio
rectangle "==Sanity Studio SPA\n//<size:12>[Javascript and React]</size>//\n\n Provides all editing functionality to editors via their web browser." <<container>> as spa rectangle "<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ+2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW+3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw+/SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0+ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ+ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR+pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA+jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw+h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6+j8+Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>\n==Sanity Studio SPA\n//<size:12>[Javascript and React]</size>//\n\n Provides all editing functionality to editors via their web browser." <<container>> as spa
database "<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ+2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW+3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw+/SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0+ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ+ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR+pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA+jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw+h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6+j8+Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>\n==Sanity Cloud Storage\n//<size:12>[Google Cloud]</size>//\n\n Stores metadata and files." <<external_container>> as sanity_db database "<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ+2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW+3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw+/SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0+ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ+ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR+pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA+jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw+h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6+j8+Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>\n==Sanity Cloud Storage\n//<size:12>[Google Cloud]</size>//\n\n Stores metadata and files." <<external_container>> as sanity_db
rectangle "<$google_cloud_platform>\n==Google Authentication\n//<size:12>[Google Cloud]</size>//\n\n Authenticates editors." <<external_container>> as auth rectangle "<$google_cloud_platform>\n==Google Authentication\n//<size:12>[Google Cloud]</size>//\n\n Authenticates editors." <<external_container>> as auth
...@@ -738,17 +769,35 @@ rectangle "==NB.no\n\n Content provider" <<external_system>> as nb ...@@ -738,17 +769,35 @@ rectangle "==NB.no\n\n Content provider" <<external_system>> as nb
rectangle "==SPA Application\n<size:12>[Container]</size>" <<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ>><<2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW>><<3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw>><</SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0>><<ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ>><<ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR>><<pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA>><<jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw>><<h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6>><<j8>><<Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>><<boundary>> as api { rectangle "==SPA Application\n<size:12>[Container]</size>" <<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ>><<2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW>><<3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw>><</SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0>><<ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ>><<ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR>><<pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA>><<jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw>><<h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6>><<j8>><<Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>><<boundary>> as api {
rectangle "==Sign In Controller\n//<size:12>[React]</size>//\n\n Allows users to sign in to the Studio." <<component>> as sign rectangle "==Sign In Controller\n//<size:12>[React]</size>//\n\n Allows users to sign in to the Studio." <<component>> as sign
rectangle "==Import tool\n//<size:12>[React]</size>//\n\n Plugin for importing external resources into the Studio." <<component>> as import_tool rectangle "==Import tool\n//<size:12>[React]</size>//\n\n Plugin for importing external resources into the Studio." <<component>> as import_tool
rectangle "==Desk preview\n//<size:12>[React]</size>//\n\n Preview tab addition to desk forms." <<component>> as preview
rectangle "==resolveProductionUrl\n//<size:12>[React]</size>//\n\n Sends correct id to preview api along with secret." <<component>> as resolveProductionUrl
import_tool - ->> sanity_db : **Uses** import_tool - ->> sanity_db : **Uses**
preview - ->> resolveProductionUrl : **Uses**
sign - ->> auth : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
}
rectangle "==Next app\n<size:12>[Container]</size>" <<boundary>> as next [[img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC]] {
rectangle "==Preview fetch\n<size:12>[Container]</size>" <<boundary>> as app {
rectangle "==/*\n//<size:12>[Route]</size>//\n\n Serves static page." <<component>> as overlay
}
rectangle "==Server side API\n<size:12>[Container]</size>" <<boundary>> as next_api {
rectangle "==/api/preview?token=[]&slug=[]\n//<size:12>[Route]</size>//\n\n Validates token and sets preview variable to true" <<component>> as api_preview
rectangle "==/api/exit-preview\n//<size:12>[Route]</size>//\n\n Sets preview variable to false" <<component>> as api_exit_preview
}
api_preview -RIGHT->> overlay : **Redirects**\n//<size:12>[JSON/HTTPS]</size>//
overlay -UP->> preview : **Streams changes**\n//<size:12>[JSON/HTTPS]</size>//
} }
import_tool -DOWN->> marcus : **Imports**\n//<size:12>[HTTPS]</size>// import_tool -UP->> marcus : **Imports**\n//<size:12>[HTTPS]</size>//
import_tool -DOWN->> kulturnav : **Imports**\n//<size:12>[HTTPS]</size>// import_tool -UP->> kulturnav : **Imports**\n//<size:12>[HTTPS]</size>//
import_tool -DOWN->> nb : **Imports**\n//<size:12>[HTTPS]</size>// import_tool -UP->> nb : **Imports**\n//<size:12>[HTTPS]</size>//
spa -LEFT->> sanity_db : **Uses**\n//<size:12>[JSON/HTTPS]</size>// spa -RIGHT->> sanity_db : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
spa -DOWN->> api : **Uses**\n//<size:12>[JSON/HTTPS]</size>// overlay -DOWN->> sanity_db : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
sign - ->> auth : **Uses**\n//<size:12>[JSON/HTTPS]</size>// resolveProductionUrl -RIGHT->> api_preview : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
spa -UP->> api : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
@enduml @enduml
......
This diff is collapsed.
...@@ -17,7 +17,7 @@ LAYOUT_WITH_LEGEND() ...@@ -17,7 +17,7 @@ LAYOUT_WITH_LEGEND()
title Component diagram for Sanity Studio title Component diagram for Sanity Studio
Container(spa, "Sanity Studio SPA", "Javascript and React", "Provides all editing functionality to editors via their web browser.") Container(spa, "Sanity Studio SPA", "Javascript and React", "Provides all editing functionality to editors via their web browser.", SANITY)
ContainerDb_Ext(sanity_db, "Sanity Cloud Storage", "Google Cloud", "Stores metadata and files.", "SANITY") ContainerDb_Ext(sanity_db, "Sanity Cloud Storage", "Google Cloud", "Stores metadata and files.", "SANITY")
Container_Ext(auth, "Google Authentication", "Google Cloud", "Authenticates editors.", "google_cloud_platform") Container_Ext(auth, "Google Authentication", "Google Cloud", "Authenticates editors.", "google_cloud_platform")
...@@ -28,16 +28,34 @@ System_Ext(nb, "NB.no", "Content provider") ...@@ -28,16 +28,34 @@ System_Ext(nb, "NB.no", "Content provider")
Container_Boundary(api, "SPA Application", "SANITY") { Container_Boundary(api, "SPA Application", "SANITY") {
Component(sign, "Sign In Controller", "React", "Allows users to sign in to the Studio.") Component(sign, "Sign In Controller", "React", "Allows users to sign in to the Studio.")
Component(import_tool, "Import tool", "React", "Plugin for importing external resources into the Studio.") Component(import_tool, "Import tool", "React", "Plugin for importing external resources into the Studio.")
Component(preview, "Desk preview", "React", "Preview tab addition to desk forms.")
Component(resolveProductionUrl, "resolveProductionUrl", "React", "Sends correct id to preview api along with secret.")
Rel(import_tool, sanity_db, "Uses") Rel(import_tool, sanity_db, "Uses")
Rel(preview, resolveProductionUrl, "Uses")
Rel(sign, auth, "Uses", "JSON/HTTPS")
}
Container_Boundary(next, "Next app", "", NEXT) {
Container_Boundary(app, "Preview fetch") {
Component(overlay, "/*", "Route", "Serves static page.")
}
Container_Boundary(next_api, "Server side API") {
Component(api_preview, "/api/preview?token=[]&slug=[]", "Route", "Validates token and sets preview variable to true")
Component(api_exit_preview, "/api/exit-preview", "Route", "Sets preview variable to false")
}
Rel_R(api_preview, overlay, "Redirects", "JSON/HTTPS")
Rel_U(overlay, preview, "Streams changes", "JSON/HTTPS")
} }
Rel_D(import_tool, marcus, "Imports", "HTTPS") Rel_U(import_tool, marcus, "Imports", "HTTPS")
Rel_D(import_tool, kulturnav, "Imports", "HTTPS") Rel_U(import_tool, kulturnav, "Imports", "HTTPS")
Rel_D(import_tool, nb, "Imports", "HTTPS") Rel_U(import_tool, nb, "Imports", "HTTPS")
Rel_L(spa, sanity_db, "Uses", "JSON/HTTPS") Rel_R(spa, sanity_db, "Uses", "JSON/HTTPS")
Rel_D(spa, api, "Uses", "JSON/HTTPS") Rel_D(overlay, sanity_db, "Uses", "JSON/HTTPS")
Rel(sign, auth, "Uses", "JSON/HTTPS") Rel_R(resolveProductionUrl, api_preview, "Uses", "JSON/HTTPS")
Rel_U(spa, api, "Uses", "JSON/HTTPS")
@enduml @enduml
\ No newline at end of file
...@@ -33,11 +33,20 @@ Container_Boundary(next, "Next app", "", NEXT) { ...@@ -33,11 +33,20 @@ Container_Boundary(next, "Next app", "", NEXT) {
Container_Boundary(api, "Server side API") { Container_Boundary(api, "Server side API") {
Component(api_manifest, "/api/manifest/[id]", "Route", "Fetch basic metadata and connected images by id from Sanity DB") Component(api_manifest, "/api/manifest/[id]", "Route", "Fetch basic metadata and connected images by id from Sanity DB")
} }
Container_Boundary(components, "Components") { Container_Boundary(components, "Components") {
Component(mirador_viewer, "/miradorViewer", "React", "Fetch basic metadata and connected images by id from Sanity DB") Component(mirador_viewer, "/miradorViewer", "React", "Fetch basic metadata and connected images by id from Sanity DB")
} }
Container_Boundary(functions, "Functions") {
Component(getStaticProps, "getStaticProps", "function", "Static Generation: Fetch data at build time.")
Component(getStaticPaths, "getStaticPaths", "function", "Static Generation: Specify dynamic routes to pre-render pages based on data.")
Component(getServerSideProps, "getServerSideProps", "function", "Server-side Rendering: Fetch data on each request.")
}
Rel_D(app, components, "Uses", "JSON/HTTPS") Rel_D(app, components, "Uses", "JSON/HTTPS")
Rel_R(app, getStaticPaths, "Lists paths to generate", "JSON/HTTPS")
Rel_D(getStaticPaths, getStaticProps, "Builds static page", "JSON/HTTPS")
Rel_D(id, mirador_viewer, "Uses", "JSON/HTTPS") Rel_D(id, mirador_viewer, "Uses", "JSON/HTTPS")
Rel_D(mirador_viewer, api_manifest, "Uses", "JSON/HTTPS") Rel_D(mirador_viewer, api_manifest, "Uses", "JSON/HTTPS")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment