Files
osiris/examples/engine/10_email.rhai
Timur Gordon 87c556df7a wip
2025-10-29 16:52:33 +01:00

104 lines
3.4 KiB
Plaintext

// Example 10: Communication - Email Verification
print("=== Communication & Email Verification Example ===\n");
// Get a context to work with
print("1. Getting context...");
let ctx = get_context(["alice", "bob"]);
print(" ✓ Context created: " + ctx.context_id());
// Create verification for a user
print("\n2. Creating verification...");
let verification = new_verification(
"user_123",
"alice@example.com"
)
.callback_url("https://example.com/verify");
print(" ✓ Created verification");
print(" Entity ID: " + verification.get_entity_id());
print(" Contact: " + verification.get_contact());
print(" Code: " + verification.get_code());
print(" Nonce: " + verification.get_nonce());
print(" Verification URL: " + verification.get_verification_url());
print(" Status: " + verification.get_status());
// Create email client
print("\n3. Creating email client...");
let email_client = new_email_client();
print(" ✓ Email client created");
// Send verification email with link
print("\n4. Sending verification email...");
email_client.send_verification_link(verification);
verification.mark_sent();
print(" ✓ Verification email sent");
print(" Status: " + verification.get_status());
// Save the verification
print("\n5. Saving verification to context...");
let verification_id = ctx.save(verification);
print(" ✓ Saved verification with ID: " + verification_id);
// Simulate user clicking link (nonce verification)
print("\n6. Simulating URL click verification...");
let nonce = verification.get_nonce();
print(" User clicks: " + verification.get_verification_url());
verification.verify_nonce(nonce);
print(" ✓ Verification successful via URL!");
print(" Status: " + verification.get_status());
// Save verified status
ctx.save(verification);
// Create another verification for code-based flow
print("\n7. Creating code-based verification for Bob...");
let bob_verification = new_verification(
"user_456",
"bob@example.com"
);
print(" ✓ Created verification for Bob");
print(" Contact: " + bob_verification.get_contact());
print(" Code: " + bob_verification.get_code());
// Send code via email
print("\n8. Sending code-based verification email...");
email_client.send_verification_code(bob_verification);
bob_verification.mark_sent();
print(" ✓ Code sent");
// Save Bob's verification
let bob_verification_id = ctx.save(bob_verification);
print(" ✓ Saved with ID: " + bob_verification_id);
// Simulate user entering wrong code
print("\n9. Simulating code verification attempts...");
print(" Attempt 1 with wrong code...");
try {
bob_verification.verify_code("000000");
print(" ✗ Unexpected success");
} catch(err) {
print(" ✗ Verification failed (expected): " + err);
print(" Attempts: " + bob_verification.get_attempts());
}
// Verify with correct code
print("\n10. Verifying with correct code...");
let correct_code = bob_verification.get_code();
print(" Using code: " + correct_code);
bob_verification.verify_code(correct_code);
print(" ✓ Verification successful!");
print(" Status: " + bob_verification.get_status());
ctx.save(bob_verification);
// List all verifications
print("\n11. Listing all verifications in context...");
let verification_ids = ctx.list("verifications");
print(" ✓ Found " + verification_ids.len() + " verifications");
print("\n=== Communication & Email Verification Example Complete ===");