{
  "startNodeId": "saisie",
  "steps": {
    "saisie": {
      "type": "PageNode",
      "nodes": [
        {
          "type": "UsernameCollectorNode",
          "layout": {
            "name": "Identifiant"
          }
        },
        {
          "type": "PasswordCollectorNode",
          "layout": {
            "name": "Mot de passe"
          }
        }
      ],
      "outcomes": {
        "outcome": "annuaire"
      },
      "layout": {
        "x": 40,
        "y": 220,
        "name": "Identifiant et mot de passe"
      },
      "stage": "PageNode"
    },
    "annuaire": {
      "type": "DataStoreNode",
      "config": {
        "authLevel": 0
      },
      "outcomes": {
        "true": "envoi",
        "false": "echec"
      },
      "layout": {
        "x": 360,
        "y": 230,
        "name": "Vérification du mot de passe"
      },
      "stage": "DataStoreNode"
    },
    "envoi": {
      "type": "SmsOtpSendNode",
      "config": {
        "otpLength": 6,
        "ttlSeconds": 300,
        "phoneAttribute": "telephoneNumber",
        "smsBodyTemplate": "TOSIAM : votre code de connexion est {otp}. Il expire dans {ttl} secondes."
      },
      "outcomes": {
        "sent": "code",
        "error": "echec"
      },
      "layout": {
        "x": 680,
        "y": 230,
        "name": "Envoi du code par SMS"
      },
      "stage": "SmsOtpSendNode"
    },
    "code": {
      "type": "SmsOtpVerifyNode",
      "outcomes": {
        "true": "succes",
        "false": "echec",
        "expired": "echec"
      },
      "layout": {
        "x": 1000,
        "y": 230,
        "name": "Code reçu par SMS"
      },
      "stage": "SmsOtpVerifyNode"
    },
    "succes": {
      "type": "SuccessNode",
      "layout": {
        "x": 1320,
        "y": 120,
        "name": "Succès"
      },
      "stage": "SuccessNode"
    },
    "echec": {
      "type": "FailureNode",
      "layout": {
        "x": 1320,
        "y": 360,
        "name": "Échec"
      },
      "stage": "FailureNode"
    }
  }
}
