{"templateId":"markdown","versions":[{"version":"2.0","label":"v2.0","link":"/percents-api/auth-security/sdk-auth","default":true,"active":true,"folderId":"27d36c3a"}],"sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"SDK Authentication","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"sdk-authentication","__idx":0},"children":["SDK Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK does not authenticate an end user itself. The issuer authenticates its user in its own backend, then gives the SDK a short-lived session through an issuer-controlled proxy."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Production SDK integrations use signed JWT client assertions. The issuer proxy signs every widget-session mint request with its private key, and Percents verifies that assertion with the issuer's registered JWKS. This is the required production authentication method; do not use a shared secret or issuer API token for this flow."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"trust-boundaries","__idx":1},"children":["Trust Boundaries"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"text","header":{"controls":{"copy":{}}},"source":"Issuer host app and browser\n  -> issuer proxy: opaque proxy session token\n  -> Percents: no issuer credential and no widget token\n\nIssuer proxy\n  -> Percents: short-lived, CHG-scoped widget token\n","lang":"text"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The browser and hosted iframe must never receive an issuer-wide Percents API token or the Percents widget token. The opaque proxy session token is meaningful only to the issuer proxy."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"session-flow","__idx":2},"children":["Session Flow"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The issuer backend authenticates the current user with its existing identity system."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The issuer backend resolves that user or business to a persisted Percents cardholder group (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chgId"]},"). Do not accept a client-side-supplied ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chgId"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The issuer proxy obtains a short-lived widget token from Percents, scoped to that CHG, and stores it server-side."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The proxy creates an opaque, expiring proxy session and returns its token, the proxy API URL, and the widget URL to the SDK."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The hosted iframe sends its requests to the issuer proxy with the proxy-session token. The proxy validates the session, forwards only widget-allowed operations with the scoped widget token, and removes server-only data from responses."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Persist the issuer user/business-to-CHG mapping. Percents webhooks identify the CHG, so the issuer needs that durable mapping to route follow-up work or notifications correctly."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For integration setup and the session response shape, see the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/percents-api/embedded-widget/quickstart"},"children":["SDK Quickstart"]},". For iframe message and session boundaries, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/percents-api/embedded-widget/security-sessions"},"children":["SDK Security and Sessions"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"production-mint-authentication","__idx":3},"children":["Production Mint Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The issuer proxy authenticates itself to Percents by sending a signed JWT assertion with every widget-session mint request. The assertion is a short-lived proof that the issuer proxy controls its registered private key and is authorized to mint a session for one cardholder group."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"authentication-flow","__idx":4},"children":["Authentication Flow"]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"sequenceDiagram\n  participant Browser as Issuer host app and browser\n  participant Proxy as Issuer proxy\n  participant Percents as Percents API\n  participant JWKS as Issuer JWKS endpoint\n  participant Iframe as Percents iframe\n\n  Browser->>Proxy: Request widget proxy session using issuer login session\n  Proxy->>Proxy: Authenticate user and resolve CHG\n  Proxy->>Proxy: Sign mint assertion with issuer private key\n  Proxy->>Percents: POST widget session with assertion and chgId\n  Percents->>JWKS: Fetch public key selected by kid (when needed)\n  JWKS-->>Percents: JWKS public keys\n  Percents->>Percents: Verify signature, issuer, audience, time, jti, and CHG ownership\n  Percents-->>Proxy: Short-lived CHG-scoped widget token\n  Proxy->>Proxy: Store widget token and create opaque proxy session\n  Proxy-->>Browser: widgetUrl, proxyApiBaseUrl, opaque proxySessionToken\n  Browser->>Iframe: Mount iframe and provide proxy session token\n  Iframe->>Proxy: Widget request with opaque proxy session token\n  Proxy->>Percents: Allowed widget request with server-side widget token\n","diagramHtml":"<svg id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1824px;\" viewBox=\"-50 -10 1824 887\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><style>\n    #diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e foreignObject {\n      overflow: visible;\n    }\n  </style><g><rect x=\"1574\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Iframe\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1649\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1649\" dy=\"0\">Percents iframe</tspan></text></g><g><rect x=\"1345\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"179\" height=\"65\" name=\"JWKS\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1434.5\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1434.5\" dy=\"0\">Issuer JWKS endpoint</tspan></text></g><g><rect x=\"952.5\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Percents\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1027.5\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1027.5\" dy=\"0\">Percents API</tspan></text></g><g><rect x=\"507.5\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Proxy\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"582.5\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"582.5\" dy=\"0\">Issuer proxy</tspan></text></g><g><rect x=\"0\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"223\" height=\"65\" name=\"Browser\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"111.5\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"111.5\" dy=\"0\">Issuer host app and browser</tspan></text></g><g><line id=\"actor4\" x1=\"1649\" y1=\"65\" x2=\"1649\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Iframe\" data-et=\"life-line\" data-id=\"Iframe\"></line><g id=\"root-4\" data-et=\"participant\" data-type=\"participant\" data-id=\"Iframe\"><rect x=\"1574\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Iframe\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1649\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1649\" dy=\"0\">Percents iframe</tspan></text></g></g><g><line id=\"actor3\" x1=\"1434.5\" y1=\"65\" x2=\"1434.5\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"JWKS\" data-et=\"life-line\" data-id=\"JWKS\"></line><g id=\"root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"JWKS\"><rect x=\"1345\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"179\" height=\"65\" name=\"JWKS\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1434.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1434.5\" dy=\"0\">Issuer JWKS endpoint</tspan></text></g></g><g><line id=\"actor2\" x1=\"1027.5\" y1=\"65\" x2=\"1027.5\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Percents\" data-et=\"life-line\" data-id=\"Percents\"></line><g id=\"root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Percents\"><rect x=\"952.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Percents\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1027.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1027.5\" dy=\"0\">Percents API</tspan></text></g></g><g><line id=\"actor1\" x1=\"582.5\" y1=\"65\" x2=\"582.5\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Proxy\" data-et=\"life-line\" data-id=\"Proxy\"></line><g id=\"root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Proxy\"><rect x=\"507.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Proxy\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"582.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"582.5\" dy=\"0\">Issuer proxy</tspan></text></g></g><g><line id=\"actor0\" x1=\"111.5\" y1=\"65\" x2=\"111.5\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Browser\" data-et=\"life-line\" data-id=\"Browser\"></line><g id=\"root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Browser\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"223\" height=\"65\" name=\"Browser\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"111.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"111.5\" dy=\"0\">Issuer host app and browser</tspan></text></g></g><style>#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .error-icon{fill:#552222;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .error-text{fill:#552222;stroke:#552222;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .edge-thickness-normal{stroke-width:1px;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .edge-thickness-thick{stroke-width:3.5px;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .edge-pattern-solid{stroke-dasharray:0;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .edge-pattern-dashed{stroke-dasharray:3;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .edge-pattern-dotted{stroke-dasharray:2;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .marker{fill:#333333;stroke:#333333;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .marker.cross{stroke:#333333;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e p{margin:0;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .actor{stroke:#9370DB;fill:#ECECFF;stroke-width:1;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e rect.note[data-look=\"neo\"]{stroke:#aaaa33;fill:#fff5ad;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e text.actor&gt;tspan{fill:black;stroke:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .actor-line{stroke:#9370DB;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .innerArc{stroke-width:1.5;stroke-dasharray:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [id$=\"-arrowhead\"] path{fill:#333;stroke:#333;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .sequenceNumber{fill:white;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [id$=\"-sequencenumber\"]{fill:#333;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [id$=\"-crosshead\"] path{fill:#333;stroke:#333;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .messageText{fill:#333;stroke:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .labelBox{stroke:#9370DB;fill:#ECECFF;filter:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .labelText,#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .labelText&gt;tspan{fill:black;stroke:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .loopText,#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .loopText&gt;tspan{fill:black;stroke:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .sectionTitle,#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .sectionTitle&gt;tspan{fill:black;stroke:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#9370DB;fill:#9370DB;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .note{stroke:#aaaa33;fill:#fff5ad;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .noteText,#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .noteText&gt;tspan{fill:black;stroke:none;font-weight:normal;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .activation0{fill:#f4f4f4;stroke:#666;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .activation1{fill:#f4f4f4;stroke:#666;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .activation2{fill:#f4f4f4;stroke:#666;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .actorPopupMenu{position:absolute;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .actor-man circle,#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e line{fill:#ECECFF;stroke-width:2px;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e g rect.rect{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));stroke:#9370DB;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e .node .neo-node{stroke:#9370DB;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].node rect,#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].cluster rect,#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g></g><defs><symbol id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"346\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Request widget proxy session using issuer login session</text><line x1=\"112.5\" y1=\"111\" x2=\"578.5\" y2=\"111\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"Browser\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></line><text x=\"584\" y=\"126\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Authenticate user and resolve CHG</text><path d=\"M 583.5,155 C 643.5,145 643.5,185 583.5,175\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Proxy\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></path><text x=\"584\" y=\"200\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Sign mint assertion with issuer private key</text><path d=\"M 583.5,231 C 643.5,221 643.5,261 583.5,251\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"Proxy\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></path><text x=\"804\" y=\"276\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">POST widget session with assertion and chgId</text><line x1=\"583.5\" y1=\"307\" x2=\"1023.5\" y2=\"307\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"Proxy\" data-to=\"Percents\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></line><text x=\"1230\" y=\"322\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Fetch public key selected by kid (when needed)</text><line x1=\"1028.5\" y1=\"353\" x2=\"1430.5\" y2=\"353\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Percents\" data-to=\"JWKS\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></line><text x=\"1233\" y=\"368\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">JWKS public keys</text><line x1=\"1433.5\" y1=\"399\" x2=\"1031.5\" y2=\"399\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"JWKS\" data-to=\"Percents\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"1029\" y=\"414\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Verify signature, issuer, audience, time, jti, and CHG ownership</text><path d=\"M 1028.5,445 C 1088.5,435 1088.5,475 1028.5,465\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"Percents\" data-to=\"Percents\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></path><text x=\"807\" y=\"490\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Short-lived CHG-scoped widget token</text><line x1=\"1026.5\" y1=\"521\" x2=\"586.5\" y2=\"521\" class=\"messageLine1\" data-et=\"message\" data-id=\"i7\" data-from=\"Percents\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"584\" y=\"536\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Store widget token and create opaque proxy session</text><path d=\"M 583.5,567 C 643.5,557 643.5,597 583.5,587\" class=\"messageLine0\" data-et=\"message\" data-id=\"i8\" data-from=\"Proxy\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></path><text x=\"349\" y=\"612\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">widgetUrl, proxyApiBaseUrl, opaque proxySessionToken</text><line x1=\"581.5\" y1=\"643\" x2=\"115.5\" y2=\"643\" class=\"messageLine1\" data-et=\"message\" data-id=\"i9\" data-from=\"Proxy\" data-to=\"Browser\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"879\" y=\"658\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Mount iframe and provide proxy session token</text><line x1=\"112.5\" y1=\"689\" x2=\"1645\" y2=\"689\" class=\"messageLine0\" data-et=\"message\" data-id=\"i10\" data-from=\"Browser\" data-to=\"Iframe\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></line><text x=\"1117\" y=\"704\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Widget request with opaque proxy session token</text><line x1=\"1648\" y1=\"735\" x2=\"586.5\" y2=\"735\" class=\"messageLine0\" data-et=\"message\" data-id=\"i11\" data-from=\"Iframe\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></line><text x=\"804\" y=\"750\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Allowed widget request with server-side widget token</text><line x1=\"583.5\" y1=\"781\" x2=\"1023.5\" y2=\"781\" class=\"messageLine0\" data-et=\"message\" data-id=\"i12\" data-from=\"Proxy\" data-to=\"Percents\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-8de3e4605a3171ddd253e0d9b00a74ea8a1f6d5c3beea8287d42a200691aec4e-arrowhead)\" style=\"fill: none;\"></line></svg>","diagramHtmlDark":"<svg id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1824px;\" viewBox=\"-50 -10 1824 887\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><style>\n    #diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 foreignObject {\n      overflow: visible;\n    }\n  </style><g><rect x=\"1574\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Iframe\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1649\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1649\" dy=\"0\">Percents iframe</tspan></text></g><g><rect x=\"1345\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"179\" height=\"65\" name=\"JWKS\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1434.5\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1434.5\" dy=\"0\">Issuer JWKS endpoint</tspan></text></g><g><rect x=\"952.5\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Percents\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1027.5\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1027.5\" dy=\"0\">Percents API</tspan></text></g><g><rect x=\"507.5\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Proxy\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"582.5\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"582.5\" dy=\"0\">Issuer proxy</tspan></text></g><g><rect x=\"0\" y=\"801\" fill=\"#eaeaea\" stroke=\"#666\" width=\"223\" height=\"65\" name=\"Browser\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"111.5\" y=\"833.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"111.5\" dy=\"0\">Issuer host app and browser</tspan></text></g><g><line id=\"actor4\" x1=\"1649\" y1=\"65\" x2=\"1649\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Iframe\" data-et=\"life-line\" data-id=\"Iframe\"></line><g id=\"root-4\" data-et=\"participant\" data-type=\"participant\" data-id=\"Iframe\"><rect x=\"1574\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Iframe\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1649\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1649\" dy=\"0\">Percents iframe</tspan></text></g></g><g><line id=\"actor3\" x1=\"1434.5\" y1=\"65\" x2=\"1434.5\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"JWKS\" data-et=\"life-line\" data-id=\"JWKS\"></line><g id=\"root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"JWKS\"><rect x=\"1345\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"179\" height=\"65\" name=\"JWKS\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1434.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1434.5\" dy=\"0\">Issuer JWKS endpoint</tspan></text></g></g><g><line id=\"actor2\" x1=\"1027.5\" y1=\"65\" x2=\"1027.5\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Percents\" data-et=\"life-line\" data-id=\"Percents\"></line><g id=\"root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Percents\"><rect x=\"952.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Percents\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1027.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1027.5\" dy=\"0\">Percents API</tspan></text></g></g><g><line id=\"actor1\" x1=\"582.5\" y1=\"65\" x2=\"582.5\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Proxy\" data-et=\"life-line\" data-id=\"Proxy\"></line><g id=\"root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Proxy\"><rect x=\"507.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Proxy\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"582.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"582.5\" dy=\"0\">Issuer proxy</tspan></text></g></g><g><line id=\"actor0\" x1=\"111.5\" y1=\"65\" x2=\"111.5\" y2=\"801\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Browser\" data-et=\"life-line\" data-id=\"Browser\"></line><g id=\"root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Browser\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"223\" height=\"65\" name=\"Browser\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"111.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"111.5\" dy=\"0\">Issuer host app and browser</tspan></text></g></g><style>#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .error-icon{fill:#a44141;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .error-text{fill:#ddd;stroke:#ddd;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .edge-thickness-normal{stroke-width:1px;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .edge-thickness-thick{stroke-width:3.5px;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .edge-pattern-solid{stroke-dasharray:0;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .marker{fill:lightgrey;stroke:lightgrey;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .marker.cross{stroke:lightgrey;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 p{margin:0;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .actor{stroke:#ccc;fill:#1f2020;stroke-width:1;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 rect.note[data-look=\"neo\"]{stroke:hsl(180, 0%, 18.3529411765%);fill:hsl(180, 1.5873015873%, 28.3529411765%);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 text.actor&gt;tspan{fill:lightgrey;stroke:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .actor-line{stroke:#ccc;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:lightgrey;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:lightgrey;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [id$=\"-arrowhead\"] path{fill:lightgrey;stroke:lightgrey;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .sequenceNumber{fill:black;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [id$=\"-sequencenumber\"]{fill:lightgrey;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [id$=\"-crosshead\"] path{fill:lightgrey;stroke:lightgrey;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .messageText{fill:lightgrey;stroke:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .labelBox{stroke:#ccc;fill:#1f2020;filter:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .labelText,#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .labelText&gt;tspan{fill:lightgrey;stroke:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .loopText,#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .loopText&gt;tspan{fill:lightgrey;stroke:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .sectionTitle,#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .sectionTitle&gt;tspan{fill:lightgrey;stroke:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#ccc;fill:#ccc;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .note{stroke:hsl(180, 0%, 18.3529411765%);fill:hsl(180, 1.5873015873%, 28.3529411765%);}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .noteText,#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .noteText&gt;tspan{fill:rgb(183.8476190475, 181.5523809523, 181.5523809523);stroke:none;font-weight:normal;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .activation0{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .activation1{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .activation2{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .actorPopupMenu{position:absolute;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .actorPopupMenuPanel{position:absolute;fill:#1f2020;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .actor-man circle,#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 line{fill:#1f2020;stroke-width:2px;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:#ccc;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 .node .neo-node{stroke:#ccc;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].node rect,#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].cluster rect,#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].node polygon{stroke:url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].node path{stroke:url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-gradient);stroke-width:1px;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].node circle{stroke:url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g></g><defs><symbol id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"346\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Request widget proxy session using issuer login session</text><line x1=\"112.5\" y1=\"111\" x2=\"578.5\" y2=\"111\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"Browser\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></line><text x=\"584\" y=\"126\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Authenticate user and resolve CHG</text><path d=\"M 583.5,155 C 643.5,145 643.5,185 583.5,175\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Proxy\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></path><text x=\"584\" y=\"200\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Sign mint assertion with issuer private key</text><path d=\"M 583.5,231 C 643.5,221 643.5,261 583.5,251\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"Proxy\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></path><text x=\"804\" y=\"276\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">POST widget session with assertion and chgId</text><line x1=\"583.5\" y1=\"307\" x2=\"1023.5\" y2=\"307\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"Proxy\" data-to=\"Percents\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></line><text x=\"1230\" y=\"322\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Fetch public key selected by kid (when needed)</text><line x1=\"1028.5\" y1=\"353\" x2=\"1430.5\" y2=\"353\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Percents\" data-to=\"JWKS\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></line><text x=\"1233\" y=\"368\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">JWKS public keys</text><line x1=\"1433.5\" y1=\"399\" x2=\"1031.5\" y2=\"399\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"JWKS\" data-to=\"Percents\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"1029\" y=\"414\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Verify signature, issuer, audience, time, jti, and CHG ownership</text><path d=\"M 1028.5,445 C 1088.5,435 1088.5,475 1028.5,465\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"Percents\" data-to=\"Percents\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></path><text x=\"807\" y=\"490\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Short-lived CHG-scoped widget token</text><line x1=\"1026.5\" y1=\"521\" x2=\"586.5\" y2=\"521\" class=\"messageLine1\" data-et=\"message\" data-id=\"i7\" data-from=\"Percents\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"584\" y=\"536\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Store widget token and create opaque proxy session</text><path d=\"M 583.5,567 C 643.5,557 643.5,597 583.5,587\" class=\"messageLine0\" data-et=\"message\" data-id=\"i8\" data-from=\"Proxy\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></path><text x=\"349\" y=\"612\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">widgetUrl, proxyApiBaseUrl, opaque proxySessionToken</text><line x1=\"581.5\" y1=\"643\" x2=\"115.5\" y2=\"643\" class=\"messageLine1\" data-et=\"message\" data-id=\"i9\" data-from=\"Proxy\" data-to=\"Browser\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"879\" y=\"658\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Mount iframe and provide proxy session token</text><line x1=\"112.5\" y1=\"689\" x2=\"1645\" y2=\"689\" class=\"messageLine0\" data-et=\"message\" data-id=\"i10\" data-from=\"Browser\" data-to=\"Iframe\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></line><text x=\"1117\" y=\"704\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Widget request with opaque proxy session token</text><line x1=\"1648\" y1=\"735\" x2=\"586.5\" y2=\"735\" class=\"messageLine0\" data-et=\"message\" data-id=\"i11\" data-from=\"Iframe\" data-to=\"Proxy\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></line><text x=\"804\" y=\"750\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Allowed widget request with server-side widget token</text><line x1=\"583.5\" y1=\"781\" x2=\"1023.5\" y2=\"781\" class=\"messageLine0\" data-et=\"message\" data-id=\"i12\" data-from=\"Proxy\" data-to=\"Percents\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-49678e5575c91d51883d448edb2db16492e89fd7efea037c26dfc45c4445de96-arrowhead)\" style=\"fill: none;\"></line></svg>"},"children":["sequenceDiagram\n  participant Browser as Issuer host app and browser\n  participant Proxy as Issuer proxy\n  participant Percents as Percents API\n  participant JWKS as Issuer JWKS endpoint\n  participant Iframe as Percents iframe\n\n  Browser->>Proxy: Request widget proxy session using issuer login session\n  Proxy->>Proxy: Authenticate user and resolve CHG\n  Proxy->>Proxy: Sign mint assertion with issuer private key\n  Proxy->>Percents: POST widget session with assertion and chgId\n  Percents->>JWKS: Fetch public key selected by kid (when needed)\n  JWKS-->>Percents: JWKS public keys\n  Percents->>Percents: Verify signature, issuer, audience, time, jti, and CHG ownership\n  Percents-->>Proxy: Short-lived CHG-scoped widget token\n  Proxy->>Proxy: Store widget token and create opaque proxy session\n  Proxy-->>Browser: widgetUrl, proxyApiBaseUrl, opaque proxySessionToken\n  Browser->>Iframe: Mount iframe and provide proxy session token\n  Iframe->>Proxy: Widget request with opaque proxy session token\n  Proxy->>Percents: Allowed widget request with server-side widget token\n"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The issuer host app asks its own backend for a widget proxy session. Its existing issuer login session authenticates this request."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The issuer proxy authenticates the user and resolves the user or business to a persisted Percents cardholder group (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chgId"]},"). Never accept a client-side-supplied ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chgId"]}," as the source of truth."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The proxy creates a new signed mint assertion using its private key. The private key stays in issuer-controlled server-side infrastructure."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The proxy sends the assertion and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chgId"]}," to Percents to mint a widget session."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Percents selects the issuer's public key using the assertion's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kid"]},", retrieving the issuer's JWKS as needed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Percents validates the assertion's signature, algorithm, issuer, audience, expiry, issue time, unique ID, and ownership of the requested CHG."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Percents returns a short-lived widget token scoped to that CHG and widget-safe operations. The proxy stores this token server-side."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The proxy returns an opaque proxy-session token to the SDK. The browser and iframe use that token only with the issuer proxy; they never receive the signed assertion, private key, issuer API token, or Percents widget token."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"mint-request","__idx":5},"children":["Mint Request"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The issuer proxy mints a Percents widget session with:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST <percents-api-base-url>/api/v2/widget/session\nAuthorization: Bearer <signed-mint-assertion>\nContent-Type: application/json\n\n{\n  \"chgId\": \"chg_...\"\n}\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<signed-mint-assertion>"]}," is an ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://www.rfc-editor.org/rfc/rfc7515"},"children":["RS256 JSON Web Signature (JWS)"]}," carrying a ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://www.rfc-editor.org/rfc/rfc7519"},"children":["JSON Web Token (JWT)"]},". It is sent only from the issuer proxy to Percents."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"assertion-fields","__idx":6},"children":["Assertion Fields"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following fields are required for every signed mint assertion:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Location"},"children":["Location"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Value"},"children":["Value"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Why Percents validates it"},"children":["Why Percents validates it"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Protected header"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["alg"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RS256"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Ensures Percents uses the configured asymmetric signing algorithm and never accepts an unexpected algorithm."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Protected header"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kid"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Identifier for a public key in the issuer's ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://www.rfc-editor.org/rfc/rfc7517"},"children":["JWKS"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Lets Percents select the correct public key and supports safe key rotation."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JWT claim"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iss"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Issuer identifier supplied by Percents during onboarding"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Identifies the issuer making the assertion. Percents derives the issuer from this verified claim; do not send a separate issuer identifier in the request body."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JWT claim"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chgId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The Percents cardholder group being authorized"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Binds the assertion to one CHG. It must exactly match the request body and belong to the issuer identified by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iss"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JWT claim"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["aud"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Exact audience value supplied by Percents for this issuer and environment"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Identifies the intended recipient: the Percents SDK-session endpoint. It prevents an assertion for another API or environment from being reused here."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JWT claim"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iat"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Time the assertion was issued"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Allows Percents to reject assertions that are too old."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JWT claim"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["exp"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Expiration time, no more than five minutes after ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iat"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Limits the time in which a stolen assertion could be used."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JWT claim"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jti"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A new, unique assertion ID, such as a UUID"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Allows Percents to reject a replay of an assertion that has already been used."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"expected-audience","__idx":7},"children":["Expected Audience"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["aud"]}," is the standard JWT ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["audience"]}," claim defined in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://www.rfc-editor.org/rfc/rfc7519#section-4.1.3"},"children":["RFC 7519 section 4.1.3"]},". It identifies the intended recipient of a token. In this flow, the recipient is the Percents SDK-session endpoint—not the issuer, the SDK, or the iframe."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Percents supplies the exact, environment-specific audience value during onboarding. The issuer proxy must include that exact value in every mint assertion, and Percents rejects an assertion with any other value. This prevents an assertion created for another API, customer integration, or environment from being accepted by the widget-session mint endpoint. This follows the JWT best practice to validate issuer and audience claims (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://www.rfc-editor.org/rfc/rfc8725#section-3.9"},"children":["RFC 8725 section 3.9"]},")."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"production-onboarding-and-key-rotation","__idx":8},"children":["Production Onboarding and Key Rotation"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Obtain the issuer identifier and expected audience from your Percents account manager."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Generate and protect an RS256 private key in issuer-controlled server-side infrastructure. Do not expose it to a browser, mobile app, or client-side configuration."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Publish the corresponding public key in a stable HTTPS JWKS endpoint, typically ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://issuer.example.com/.well-known/jwks.json"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Provide Percents with that JWKS URL. Percents uses it to verify assertions from the issuer proxy."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["When rotating keys, publish the new public key with a new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kid"]}," before the proxy begins signing with its corresponding private key. Keep the prior public key available until all assertions signed with it have expired."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Percents resolves the public key selected by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kid"]},", verifies the signature and claims, rejects a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jti"]}," that has already been used during the assertion's validity window, and confirms that the CHG belongs to the issuer identified by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iss"]},". Percents then returns a short-lived widget token restricted to that CHG and the widget-safe operations."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["JWKS discovery supports signing-key rotation without sharing a secret or manually registering a new key."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"integration-requirements","__idx":9},"children":["Integration Requirements"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Keep issuer API tokens, signing keys, and widget tokens in server-side infrastructure only."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use an expiring, opaque proxy session token in the browser; validate it on every proxy request."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Allowlist only the widget routes the proxy needs. Do not turn the proxy into a general-purpose Percents API relay."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Enforce the server-resolved CHG on every proxied request and remove ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chgId"]}," from browser-visible responses."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Store proxy sessions and widget tokens in a shared, durable server-side store when using multiple proxy instances."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Restrict browser origins and iframe framing with appropriate CORS and CSP ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["frame-ancestors"]}," configuration."]}]}]},"headings":[{"value":"SDK Authentication","id":"sdk-authentication","depth":1},{"value":"Trust Boundaries","id":"trust-boundaries","depth":2},{"value":"Session Flow","id":"session-flow","depth":2},{"value":"Production Mint Authentication","id":"production-mint-authentication","depth":2},{"value":"Authentication Flow","id":"authentication-flow","depth":3},{"value":"Mint Request","id":"mint-request","depth":3},{"value":"Assertion Fields","id":"assertion-fields","depth":3},{"value":"Expected Audience","id":"expected-audience","depth":3},{"value":"Production Onboarding and Key Rotation","id":"production-onboarding-and-key-rotation","depth":3},{"value":"Integration Requirements","id":"integration-requirements","depth":2}],"frontmatter":{"seo":{"title":"SDK Authentication"}},"lastModified":"2026-07-21T18:22:26.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/percents-api/auth-security/sdk-auth","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}