Class: StytchB2B::OTPs::Email::Discovery

Inherits:
Object
  • Object
show all
Includes:
Stytch::RequestHelper
Defined in:
lib/stytch/b2b_otp.rb

Instance Method Summary collapse

Methods included from Stytch::RequestHelper

#delete_request, #get_request, #post_request, #put_request, #request_with_query_params

Constructor Details

#initialize(connection) ⇒ Discovery

Returns a new instance of Discovery.



477
478
479
# File 'lib/stytch/b2b_otp.rb', line 477

def initialize(connection)
  @connection = connection
end

Instance Method Details

#authenticate(email_address:, code:) ⇒ Object

Authenticates the OTP and returns an intermediate session token. Intermediate session tokens can be used for various Discovery login flows and are valid for 10 minutes.

Parameters:

email_address

The email address of the Member. The type of this field is String.

code

The code to authenticate. The type of this field is String.

Returns:

An object with the following fields:

request_id

Globally unique UUID that is returned with every API call. This value is important to log for debugging purposes; we may ask for this value to help identify a specific API call when helping you debug an issue. The type of this field is String.

intermediate_session_token

The Intermediate Session Token. This token does not necessarily belong to a specific instance of a Member, but represents a bag of factors that may be converted to a member session. The token can be used with the [OTP SMS Authenticate endpoint](stytch.com/docs/b2b/api/authenticate-otp-sms), [TOTP Authenticate endpoint](stytch.com/docs/b2b/api/authenticate-totp), or [Recovery Codes Recover endpoint](stytch.com/docs/b2b/api/recovery-codes-recover) to complete an MFA flow and log in to the Organization. The token has a default expiry of 10 minutes. It can also be used with the [Exchange Intermediate Session endpoint](stytch.com/docs/b2b/api/exchange-intermediate-session) to join a specific Organization that allows the factors represented by the intermediate session token; or the [Create Organization via Discovery endpoint](stytch.com/docs/b2b/api/create-organization-via-discovery) to create a new Organization and Member. Intermediate Session Tokens have a default expiry of 10 minutes. The type of this field is String.

email_address

The email address. The type of this field is String.

discovered_organizations

An array of ‘discovered_organization` objects tied to the `intermediate_session_token`, `session_token`, or `session_jwt`. See the [Discovered Organization Object](stytch.com/docs/b2b/api/discovered-organization-object) for complete details.

Note that Organizations will only appear here under any of the following conditions:

  1. The end user is already a Member of the Organization.

  2. The end user is invited to the Organization.

  3. The end user can join the Organization because:

    a) The Organization allows JIT provisioning.
    
    b) The Organizations' allowed domains list contains the Member's email domain.
    
    c) The Organization has at least one other Member with a verified email address with the same domain as the end user (to prevent phishing attacks).
    

The type of this field is list of DiscoveredOrganization (object).

status_code

The HTTP status code of the response. Stytch follows standard HTTP response status code patterns, e.g. 2XX values equate to success, 3XX values are redirects, 4XX are client errors, and 5XX are server errors. The type of this field is Integer.



565
566
567
568
569
570
571
572
573
574
575
576
# File 'lib/stytch/b2b_otp.rb', line 565

def authenticate(
  email_address:,
  code:
)
  headers = {}
  request = {
    email_address: email_address,
    code: code
  }

  post_request('/v1/b2b/otps/email/discovery/authenticate', request, headers)
end

#send(email_address:, login_template_id: nil, locale: nil, discovery_expiration_minutes: nil) ⇒ Object

Send a discovery OTP to an email address. The OTP is valid for 10 minutes. Only the most recently sent OTP is valid: when an OTP is sent, all OTPs previously sent to the same email address are invalidated, even if unused or unexpired.

Parameters:

email_address

The email address to start the discovery flow for. The type of this field is String.

login_template_id

Use a custom template for login emails. By default, it will use your default email template. The template must be a template using our built-in customizations or a custom HTML email for OTP - Login. The type of this field is nilable String.

locale

Used to determine which language to use when sending the user this delivery method. Parameter is a [IETF BCP 47 language tag](www.w3.org/International/articles/language-tags/), e.g. ‘“en”`.

Currently supported languages are English (‘“en”`), Spanish (`“es”`), French (`“fr”`) and Brazilian Portuguese (`“pt-br”`); if no value is provided, the copy defaults to English.

Request support for additional languages [here](docs.google.com/forms/d/e/1FAIpQLScZSpAu_m2AmLXRT3F3kap-s_mcV6UTBitYn6CdyWP0-o7YjQ/viewform?usp=sf_link“)!

The type of this field is nilable +SendRequestLocale+ (string enum).
discovery_expiration_minutes

The expiration time, in minutes, for a discovery OTP email. If not accepted within this time frame, the OTP will need to be resent. Defaults to 10 with a minimum of 2 and a maximum of 15. The type of this field is nilable Integer.

Returns:

An object with the following fields:

request_id

Globally unique UUID that is returned with every API call. This value is important to log for debugging purposes; we may ask for this value to help identify a specific API call when helping you debug an issue. The type of this field is String.

status_code

The HTTP status code of the response. Stytch follows standard HTTP response status code patterns, e.g. 2XX values equate to success, 3XX values are redirects, 4XX are client errors, and 5XX are server errors. The type of this field is Integer.



510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
# File 'lib/stytch/b2b_otp.rb', line 510

def send(
  email_address:,
  login_template_id: nil,
  locale: nil,
  discovery_expiration_minutes: nil
)
  headers = {}
  request = {
    email_address: email_address
  }
  request[:login_template_id] =  unless .nil?
  request[:locale] = locale unless locale.nil?
  request[:discovery_expiration_minutes] = discovery_expiration_minutes unless discovery_expiration_minutes.nil?

  post_request('/v1/b2b/otps/email/discovery/send', request, headers)
end