{ "screens": [ { "id": "SC2QqHKqIewjP0zmAW0pUCSdbXoaN", "version": 7, "flowId": "oidc-flow", "inputs": [], "interactions": [ { "id": "pnOqEGpL1b", "type": "", "label": "Choose another authentication method", "icon": "", "subType": "" }, { "id": "resend", "type": "", "label": "Send again", "icon": "", "subType": "" }, { "id": "submit", "type": "", "label": "Submit", "icon": "", "subType": "" } ], "htmlTemplate": { "L1T9iO4p5U": { "custom": {}, "displayName": "One Time Code", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "yZNZ2ZVVu_", "props": { "data-errormessage-pattern-mismatch": "Must be a 6 digits number", "digits": 6, "fullWidth": false, "id": "L1T9iO4p5U", "label": "", "name": "code", "required": true, "size": "lg", "type": "tel" }, "type": { "resolvedName": "Code" } }, "ROOT": { "custom": {}, "displayName": "Container", "hidden": false, "isCanvas": true, "linkedNodes": {}, "nodes": ["auED4dEJkJ", "eBGiu9cYSb", "yZNZ2ZVVu_"], "props": { "align": "center", "background": "", "data-editor-type": "container", "direction": "col", "id": "ROOT", "justify": "center", "paddingX": "4", "paddingY": "4", "spaceBetween": "5", "width": "100" }, "type": { "resolvedName": "Container" } }, "auED4dEJkJ": { "custom": {}, "displayName": "Text", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "ROOT", "props": { "align": "center", "children": "We've sent a message containing a 6-digit code to {{sentTo.maskedEmail}}", "fullWidth": false, "id": "auED4dEJkJ", "italic": false, "typography": "subtitle1", "variant": "primary" }, "type": { "resolvedName": "Text" } }, "eBGiu9cYSb": { "custom": {}, "displayName": "Text", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "ROOT", "props": { "align": "center", "children": "Enter it below and press the button to continue", "fullWidth": false, "id": "eBGiu9cYSb", "italic": false, "typography": "subtitle2", "variant": "primary" }, "type": { "resolvedName": "Text" } }, "fyz-aN6hyx": { "custom": {}, "displayName": "Error Message", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "thNbUTWOGY", "props": { "align": "center", "color": "error", "data-type": "error-message", "fullWidth": false, "id": "fyz-aN6hyx", "italic": false, "typography": "body1" }, "type": { "resolvedName": "ErrorMessage" } }, "oOOUcyEOVr": { "custom": {}, "displayName": "Container", "hidden": false, "isCanvas": true, "linkedNodes": {}, "nodes": ["resend", "pnOqEGpL1b"], "parent": "yZNZ2ZVVu_", "props": { "align": "start", "background": "#ffffff00", "data-editor-type": "container", "direction": "row", "id": "oOOUcyEOVr", "justify": "center", "paddingX": "5", "paddingY": "0", "spaceBetween": "0", "width": "100" }, "type": { "resolvedName": "Container" } }, "pnOqEGpL1b": { "custom": { "type": "button" }, "displayName": "Button", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "oOOUcyEOVr", "props": { "children": "Choose another authentication method", "color": "primary", "data-type": "button", "formNoValidate": true, "fullWidth": true, "id": "pnOqEGpL1b", "shape": "", "size": "sm", "variant": "link" }, "type": { "resolvedName": "Button" } }, "resend": { "custom": { "type": "button" }, "displayName": "Button", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "oOOUcyEOVr", "props": { "children": "Send again", "color": "primary", "data-type": "button", "formNoValidate": true, "fullWidth": true, "id": "resend", "shape": "", "size": "sm", "variant": "link" }, "type": { "resolvedName": "Button" } }, "submit": { "custom": { "type": "button" }, "displayName": "Button", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "thNbUTWOGY", "props": { "children": "Submit", "color": "primary", "data-type": "button", "formNoValidate": false, "fullWidth": true, "id": "submit", "shape": "", "size": "md", "variant": "contained" }, "type": { "resolvedName": "Button" } }, "thNbUTWOGY": { "custom": {}, "displayName": "Container", "hidden": false, "isCanvas": true, "linkedNodes": {}, "nodes": ["submit", "fyz-aN6hyx"], "parent": "yZNZ2ZVVu_", "props": { "align": "start", "background": "#ffffff00", "data-editor-type": "container", "direction": "row", "id": "thNbUTWOGY", "justify": "center", "paddingX": "4", "paddingY": "3", "spaceBetween": "1", "width": "100" }, "type": { "resolvedName": "Container" } }, "yZNZ2ZVVu_": { "custom": {}, "displayName": "Container", "hidden": false, "isCanvas": true, "linkedNodes": {}, "nodes": ["L1T9iO4p5U", "thNbUTWOGY", "oOOUcyEOVr"], "parent": "ROOT", "props": { "align": "center", "background": "", "data-editor-type": "container", "direction": "col", "id": "yZNZ2ZVVu_", "justify": "start", "paddingX": "4", "paddingY": "4", "spaceBetween": "1.5", "width": "100" }, "type": { "resolvedName": "Container" } } } }, { "id": "SC2QqHKtZYR6cP00mjyjRU43JAMym", "version": 7, "flowId": "oidc-flow", "inputs": [], "interactions": [ { "id": "4EMLSPCn8j", "type": "", "label": "Login with Biometrics", "icon": "fingerprint", "subType": "" } ], "htmlTemplate": { "1sMmkeVxVT": { "custom": {}, "displayName": "Error Message", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "ROOT", "props": { "align": "center", "color": "error", "data-type": "error-message", "fullWidth": false, "id": "1sMmkeVxVT", "italic": false, "typography": "body1" }, "type": { "resolvedName": "ErrorMessage" } }, "4EMLSPCn8j": { "custom": { "type": "button" }, "displayName": "Biometrics Button", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "ROOT", "props": { "children": "Login with Biometrics", "color": "primary", "data-type": "biometrics", "formNoValidate": false, "fullWidth": false, "id": "4EMLSPCn8j", "shape": "", "size": "md", "startIcon": "fingerprint", "startIconColorText": true, "variant": "outline" }, "type": { "resolvedName": "BiometricsButton" } }, "Alqr97dFtY": { "custom": { "type": "input" }, "displayName": "Email Input", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "ROOT", "props": { "data-errormessage-pattern-mismatch": "Must be a valid email", "fullWidth": true, "id": "Alqr97dFtY", "label": "Email", "max": 100, "name": "email", "pattern": "^[\\w._%+-]+@[\\w.-]+\\.[A-Za-z]{2,}$", "placeholder": "Email", "required": false, "size": "md", "type": "email" }, "type": { "resolvedName": "EmailInput" } }, "LmrSIGOWZb": { "custom": {}, "displayName": "Text", "hidden": false, "isCanvas": false, "linkedNodes": {}, "nodes": [], "parent": "ROOT", "props": { "align": "center", "children": "Welcome!", "fullWidth": false, "id": "LmrSIGOWZb", "italic": false, "typography": "h3", "variant": "primary" }, "type": { "resolvedName": "Text" } }, "ROOT": { "custom": {}, "displayName": "Container", "hidden": false, "isCanvas": true, "linkedNodes": {}, "nodes": ["LmrSIGOWZb", "Alqr97dFtY", "4EMLSPCn8j", "1sMmkeVxVT"], "props": { "align": "center", "background": "", "data-editor-type": "container", "direction": "col", "id": "ROOT", "justify": "center", "paddingX": "4", "paddingY": "8", "spaceBetween": "4", "width": "100" }, "type": { "resolvedName": "Container" } } } } ], "flow": { "id": "oidc-flow", "version": 8, "name": "Passkey OIDC Flow", "description": "You should use this flow to implement Passkey authentication, when using Descope as an OIDC Provider with another IdP.", "dsl": { "startTask": "1", "tasks": { "1": { "id": "1", "name": "Sign in with Passkeys", "next": { "rules": [{ "interactionId": "4EMLSPCn8j", "taskId": "2" }] }, "screenId": "SC2QqHKtZYR6cP00mjyjRU43JAMym", "type": "screen", "view": { "x": -264.07407808, "y": -44.73801280000001 } }, "2": { "action": "webauthn-sign-up-or-in-start", "arguments": { "finishStepId": { "type": "inline", "value": "2.end" } }, "id": "2", "name": "Sign Up or In / WebAuthn", "next": { "rules": [{ "interactionId": "success", "taskId": "2.end" }] }, "type": "automated", "view": { "x": 168.68955968000023, "y": -26.16021568000002 } }, "3": { "conditions": [ { "atomicConditions": [ { "operator": "is-true", "predicate": { "ArgType": "", "type": "inline", "value": "" }, "target": { "ArgType": "", "type": "context", "value": "user.verifiedEmail" } } ], "interactionId": "zs5pg3cwhaj", "name": "verifiedEmail" }, { "interactionId": "ELSE", "name": "!verifiedEmail" } ], "id": "3", "name": "Is the user's email verified?", "next": { "rules": [ { "interactionId": "zs5pg3cwhaj", "taskId": "4" }, { "interactionId": "ELSE", "taskId": "5" } ] }, "type": "condition", "view": { "x": 599.1062085499391, "y": -36.75193241900209 } }, "4": { "action": "custom-claims", "arguments": { "customClaims": { "ArgType": "", "type": "inline", "value": [ { "key": "email", "type": "context", "value": "user.email" }, { "key": "verified_email", "type": "boolean", "value": true } ] } }, "id": "4", "name": "Add Email and EmailVerified Attributes", "next": { "rules": [{ "interactionId": "success", "taskId": "8" }] }, "type": "automated", "view": { "x": 1551.0807123199993, "y": -122.90609727999995 } }, "5": { "action": "update-user-otp-email", "arguments": { "addToLoginIDs": { "ArgType": "", "type": "inline", "value": true }, "onMergeUseExisting": { "ArgType": "", "type": "inline", "value": "true" } }, "id": "5", "name": "Update User / OTP / Email", "next": { "rules": [{ "interactionId": "success", "taskId": "6" }] }, "type": "automated", "view": { "x": 1067.3513043199998, "y": 264.0774291199999 } }, "6": { "id": "6", "name": "Verify OTP", "next": { "rules": [ { "interactionId": "resend", "taskId": "5" }, { "interactionId": "submit", "taskId": "7" } ] }, "screenId": "SC2QqHKqIewjP0zmAW0pUCSdbXoaN", "type": "screen", "view": { "x": 1487.3513043199998, "y": 264.0774291199999 } }, "7": { "action": "verify-code-otp-email", "id": "7", "name": "Verify Code / OTP / Email", "next": { "rules": [{ "interactionId": "success", "taskId": "4" }] }, "type": "automated", "view": { "x": 1907.3513043199998, "y": 264.0774291199999 } }, "8": { "action": "logged-in", "arguments": {}, "id": "8", "name": "End", "next": { "rules": [] }, "type": "automated", "view": { "x": 1987.950546572639, "y": -164.44173841437947 } }, "2.end": { "action": "webauthn-sign-up-or-in-finish", "arguments": {}, "id": "2.end", "name": "Sign Up or In / WebAuthn", "next": { "rules": [{ "interactionId": "success", "taskId": "3" }] }, "type": "automated", "view": { "x": 168.68955968000023, "y": -26.16021568000002 } }, "start": { "id": "start", "name": "start", "next": { "rules": [{ "taskId": "1" }] }, "view": { "x": -456.6067199999999, "y": 0 } } } }, "disabled": false } }