Pre / Post Hooks / Override
We provide you funtionality to run code before and after an SMS is sent. You can use this for:
- Logging purposes
 - Spam protection purposes
 - Modifying the SMS template variables before sending the SMS
 
- NodeJS
 - GoLang
 - Python
 
import supertokens from "supertokens-node";import Passwordless from "supertokens-node/recipe/passwordless";import Session from "supertokens-node/recipe/session";
supertokens.init({    appInfo: {        apiDomain: "...",        appName: "...",        websiteDomain: "..."    },    recipeList: [        Passwordless.init({            smsDelivery: {                override: (originalImplementation) => {                    return {                        ...originalImplementation,                        sendSms: async function (input) {                            // TODO: before sending SMS
                            await originalImplementation.sendSms(input)
                            // TODO: after sending SMS                        }                    }                }            },        }),        Session.init()    ]});
import (    "github.com/supertokens/supertokens-golang/ingredients/smsdelivery"    "github.com/supertokens/supertokens-golang/recipe/passwordless"    "github.com/supertokens/supertokens-golang/recipe/passwordless/plessmodels"    "github.com/supertokens/supertokens-golang/supertokens")
func main() {    supertokens.Init(supertokens.TypeInput{        RecipeList: []supertokens.Recipe{            passwordless.Init(plessmodels.TypeInput{                SmsDelivery: &smsdelivery.TypeInput{                    Override: func(originalImplementation smsdelivery.SmsDeliveryInterface) smsdelivery.SmsDeliveryInterface {
                        originalSendSms := *originalImplementation.SendSms
                        (*originalImplementation.SendSms) = func(input smsdelivery.SmsType, userContext supertokens.UserContext) error {                            // TODO: before sending SMS
                            err := originalSendSms(input, userContext)                            if err != nil {                                return err                            }
                            // TODO: after sending SMS                            return nil                        }
                        return originalImplementation                    },                },            }),        },    })}from supertokens_python import init, InputAppInfofrom supertokens_python.recipe.passwordless.types import SMSDeliveryOverrideInput, SMSTemplateVarsfrom supertokens_python.recipe import passwordlessfrom typing import Dict, Anyfrom supertokens_python.ingredients.smsdelivery.types import SMSDeliveryConfig
def custom_sms_deliver(original_implementation: SMSDeliveryOverrideInput) -> SMSDeliveryOverrideInput:    original_send_sms = original_implementation.send_sms
    async def send_sms(template_vars: SMSTemplateVars, user_context: Dict[str, Any]) -> None:        # TODO: before sending SMS
        await original_send_sms(template_vars, user_context)
        # TODO: after sending SMS
    original_implementation.send_sms = send_sms    return original_implementation
init(    app_info=InputAppInfo(        api_domain="...", app_name="...", website_domain="..."),    framework='...',      recipe_list=[        passwordless.init(            sms_delivery=SMSDeliveryConfig(override=custom_sms_deliver)        )    ])