customer-registration 0.0.112 → 0.0.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/api/auth/customer/emailpass/reset-password/route.js +1 -26
- package/.medusa/server/src/api/auth/customer/emailpass/route.js +19 -97
- package/.medusa/server/src/api/auth/customer/phonepass/register/route.js +50 -0
- package/.medusa/server/src/api/auth/customer/phonepass/route.js +105 -0
- package/.medusa/server/src/api/middlewares/{block-pending-customer.js → guard-account-deletion.js} +4 -4
- package/.medusa/server/src/api/middlewares/ip-rate-limit.js +48 -0
- package/.medusa/server/src/api/middlewares/validate-customer-registration.js +60 -0
- package/.medusa/server/src/api/middlewares.js +17 -4
- package/.medusa/server/src/api/store/customers/account-deletion/cancel-request/route.js +16 -6
- package/.medusa/server/src/api/store/customers/account-deletion/validators.js +11 -3
- package/.medusa/server/src/api/store/customers/me/contact/route.js +95 -0
- package/.medusa/server/src/api/store/customers/me/contact/verify/route.js +83 -0
- package/.medusa/server/src/api/store/customers/me/route.js +53 -0
- package/.medusa/server/src/api/store/customers/otp/send/route.js +1 -6
- package/.medusa/server/src/api/store/customers/otp/verify/route.js +95 -3
- package/.medusa/server/src/api/store/customers/route.js +89 -0
- package/.medusa/server/src/config.js +32 -23
- package/.medusa/server/src/modules/otp-verification/service.js +72 -1
- package/.medusa/server/src/providers/phonepass/index.js +9 -0
- package/.medusa/server/src/providers/phonepass/service.js +133 -0
- package/.medusa/server/src/subscribers/password-reset.js +1 -42
- package/.medusa/server/src/workflows/change-password.js +40 -64
- package/.medusa/server/src/workflows/send-contact-change-otp-workflow.js +41 -0
- package/.medusa/server/src/workflows/steps/determine-contact-method-step.js +8 -2
- package/.medusa/server/src/workflows/steps/generate-contact-change-otp-step.js +24 -0
- package/.medusa/server/src/workflows/steps/index.js +6 -2
- package/.medusa/server/src/workflows/steps/send-notification-step.js +1 -11
- package/.medusa/server/src/workflows/steps/sync-phonepass-entity-id-step.js +63 -0
- package/.medusa/server/src/workflows/steps/update-password-step.js +21 -29
- package/.medusa/server/src/workflows/update-contact-workflow.js +100 -0
- package/.medusa/server/src/workflows/verify-phone.js +11 -4
- package/README.md +363 -223
- package/package.json +3 -1
- package/.medusa/server/src/subscribers/customer-updated.js +0 -100
|
@@ -3,42 +3,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.updatePasswordStep = void 0;
|
|
4
4
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
-
exports.updatePasswordStep = (0, workflows_sdk_1.createStep)("update-password", async ({ customer_id,
|
|
6
|
+
exports.updatePasswordStep = (0, workflows_sdk_1.createStep)("update-password", async ({ customer_id, new_password }, { container }) => {
|
|
7
7
|
if (!customer_id) {
|
|
8
8
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Customer ID is required");
|
|
9
9
|
}
|
|
10
|
-
if (!
|
|
11
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "
|
|
10
|
+
if (!new_password) {
|
|
11
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "New password is required");
|
|
12
12
|
}
|
|
13
|
-
// Get customer to retrieve email
|
|
14
13
|
const customerService = container.resolve(utils_1.Modules.CUSTOMER);
|
|
15
14
|
const customer = await customerService.retrieveCustomer(customer_id);
|
|
16
|
-
if (!customer
|
|
17
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Customer not found
|
|
15
|
+
if (!customer) {
|
|
16
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Customer not found");
|
|
18
17
|
}
|
|
19
|
-
//
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const providerIdentity = providerIdentityResult.rows?.[0] || providerIdentityResult[0]?.[0];
|
|
27
|
-
if (!providerIdentity) {
|
|
28
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Provider identity not found for customer");
|
|
18
|
+
// Resolve provider and entity_id — supports both emailpass and phonepass
|
|
19
|
+
const provider = customer.email ? "emailpass" : "phonepass";
|
|
20
|
+
const entity_id = customer.email
|
|
21
|
+
? customer.email.toLowerCase()
|
|
22
|
+
: customer.phone;
|
|
23
|
+
if (!entity_id) {
|
|
24
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Customer has no email or phone — cannot update password");
|
|
29
25
|
}
|
|
30
|
-
|
|
31
|
-
await
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
'{password}',
|
|
35
|
-
to_jsonb(?::text)
|
|
36
|
-
),
|
|
37
|
-
updated_at = NOW()
|
|
38
|
-
WHERE id = ?`, [password_hash, providerIdentity.id]);
|
|
39
|
-
return new workflows_sdk_1.StepResponse({
|
|
40
|
-
customer_id,
|
|
41
|
-
success: true,
|
|
26
|
+
const authService = container.resolve(utils_1.Modules.AUTH);
|
|
27
|
+
const updateResult = await authService.updateProvider(provider, {
|
|
28
|
+
entity_id,
|
|
29
|
+
password: new_password,
|
|
42
30
|
});
|
|
31
|
+
if (!updateResult.success) {
|
|
32
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, updateResult.error || "Failed to update password");
|
|
33
|
+
}
|
|
34
|
+
return new workflows_sdk_1.StepResponse({ customer_id, success: true });
|
|
43
35
|
});
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXBhc3N3b3JkLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3VwZGF0ZS1wYXNzd29yZC1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE0RTtBQUM1RSxxREFBZ0U7QUFjbkQsUUFBQSxrQkFBa0IsR0FBRyxJQUFBLDBCQUFVLEVBQzFDLGlCQUFpQixFQUNqQixLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUF1QixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMxRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIseUJBQXlCLENBQzFCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDBCQUEwQixDQUMzQixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQXlCLGVBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuRixNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUVwRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFBO0lBQzNELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLO1FBQzlCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtRQUM5QixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQTtJQUVsQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQix5REFBeUQsQ0FDMUQsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNuRCxNQUFNLFlBQVksR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1FBQzlELFNBQVM7UUFDVCxRQUFRLEVBQUUsWUFBWTtLQUN2QixDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsWUFBWSxDQUFDLEtBQUssSUFBSSwyQkFBMkIsQ0FDbEQsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLElBQUksNEJBQVksQ0FBdUIsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7QUFDL0UsQ0FBQyxDQUNGLENBQUEifQ==
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateContactWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const steps_1 = require("./steps");
|
|
7
|
+
/**
|
|
8
|
+
* Writes the new phone/email to the customer record and marks the
|
|
9
|
+
* corresponding field as verified.
|
|
10
|
+
*/
|
|
11
|
+
const updateContactStep = (0, workflows_sdk_1.createStep)("update-contact", async (input, { container }) => {
|
|
12
|
+
const { customer_id, new_value, contact_type } = input;
|
|
13
|
+
const customerService = container.resolve(utils_1.Modules.CUSTOMER);
|
|
14
|
+
const knex = container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
|
|
15
|
+
const customer = await customerService.retrieveCustomer(customer_id);
|
|
16
|
+
const oldValue = contact_type === "phone"
|
|
17
|
+
? (customer.phone ?? null)
|
|
18
|
+
: (customer.email ?? null);
|
|
19
|
+
if (contact_type === "phone") {
|
|
20
|
+
await customerService.updateCustomers(customer_id, { phone: new_value });
|
|
21
|
+
await knex.raw(`UPDATE customer SET phone_verified = ?, updated_at = NOW() WHERE id = ?`, [true, customer_id]);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
await customerService.updateCustomers(customer_id, { email: new_value });
|
|
25
|
+
await knex.raw(`UPDATE customer SET email_verified = ?, updated_at = NOW() WHERE id = ?`, [true, customer_id]);
|
|
26
|
+
}
|
|
27
|
+
return new workflows_sdk_1.StepResponse({ customer_id, contact_type }, { ...input, old_value: oldValue });
|
|
28
|
+
}, async (compensationData, { container }) => {
|
|
29
|
+
if (!compensationData)
|
|
30
|
+
return;
|
|
31
|
+
const customerService = container.resolve(utils_1.Modules.CUSTOMER);
|
|
32
|
+
const knex = container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
|
|
33
|
+
const { customer_id, contact_type, old_value } = compensationData;
|
|
34
|
+
if (contact_type === "phone") {
|
|
35
|
+
// Restore to old value — explicitly passes null when phone was not set before
|
|
36
|
+
await customerService.updateCustomers(customer_id, { phone: old_value });
|
|
37
|
+
await knex.raw(`UPDATE customer SET phone_verified = ?, updated_at = NOW() WHERE id = ?`, [false, customer_id]);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
await customerService.updateCustomers(customer_id, { email: old_value });
|
|
41
|
+
await knex.raw(`UPDATE customer SET email_verified = ?, updated_at = NOW() WHERE id = ?`, [false, customer_id]);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Updates provider_identity.entity_id so login continues to work after a
|
|
46
|
+
* phone or email change.
|
|
47
|
+
*
|
|
48
|
+
* - phone change + login = "phone" | "both" → updates phonepass identity
|
|
49
|
+
* - email change + login = "email" | "both" → updates emailpass identity
|
|
50
|
+
* - all other combinations → no-op
|
|
51
|
+
*/
|
|
52
|
+
const syncProviderIdentityStep = (0, workflows_sdk_1.createStep)("sync-provider-identity", async (input, { container }) => {
|
|
53
|
+
const { customer_id, new_value, contact_type, login_identifier } = input;
|
|
54
|
+
const needsPhoneSync = contact_type === "phone" &&
|
|
55
|
+
(login_identifier === "phone" || login_identifier === "both");
|
|
56
|
+
const needsEmailSync = contact_type === "email" &&
|
|
57
|
+
(login_identifier === "email" || login_identifier === "both");
|
|
58
|
+
if (!needsPhoneSync && !needsEmailSync) {
|
|
59
|
+
return new workflows_sdk_1.StepResponse({ synced: false }, null);
|
|
60
|
+
}
|
|
61
|
+
const provider = needsPhoneSync ? "phonepass" : "emailpass";
|
|
62
|
+
const knex = container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
|
|
63
|
+
const authRow = await knex.raw(`SELECT id FROM auth_identity WHERE app_metadata->>'customer_id' = ? LIMIT 1`, [customer_id]);
|
|
64
|
+
const authIdentityId = (authRow.rows?.[0] ?? authRow[0]?.[0])?.id ?? null;
|
|
65
|
+
if (!authIdentityId) {
|
|
66
|
+
return new workflows_sdk_1.StepResponse({ synced: false }, null);
|
|
67
|
+
}
|
|
68
|
+
const piRow = await knex.raw(`SELECT id, entity_id FROM provider_identity WHERE auth_identity_id = ? AND provider = ? LIMIT 1`, [authIdentityId, provider]);
|
|
69
|
+
const pi = piRow.rows?.[0] ?? piRow[0]?.[0] ?? null;
|
|
70
|
+
if (!pi) {
|
|
71
|
+
return new workflows_sdk_1.StepResponse({ synced: false }, null);
|
|
72
|
+
}
|
|
73
|
+
if (pi.entity_id === new_value) {
|
|
74
|
+
return new workflows_sdk_1.StepResponse({ synced: false }, null);
|
|
75
|
+
}
|
|
76
|
+
await knex.raw(`UPDATE provider_identity SET entity_id = ?, updated_at = NOW() WHERE id = ?`, [new_value, pi.id]);
|
|
77
|
+
return new workflows_sdk_1.StepResponse({ synced: true }, { provider_identity_id: pi.id, old_entity_id: pi.entity_id });
|
|
78
|
+
}, async (compensationData, { container }) => {
|
|
79
|
+
if (!compensationData)
|
|
80
|
+
return;
|
|
81
|
+
const knex = container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
|
|
82
|
+
await knex.raw(`UPDATE provider_identity SET entity_id = ?, updated_at = NOW() WHERE id = ?`, [compensationData.old_entity_id, compensationData.provider_identity_id]);
|
|
83
|
+
});
|
|
84
|
+
exports.updateContactWorkflow = (0, workflows_sdk_1.createWorkflow)("update-contact", (input) => {
|
|
85
|
+
const updateResult = updateContactStep(input);
|
|
86
|
+
const syncInput = (0, workflows_sdk_1.transform)({ updateResult, input }, (data) => ({
|
|
87
|
+
customer_id: data.updateResult.customer_id,
|
|
88
|
+
new_value: data.input.new_value,
|
|
89
|
+
contact_type: data.updateResult.contact_type,
|
|
90
|
+
login_identifier: data.input.login_identifier,
|
|
91
|
+
}));
|
|
92
|
+
syncProviderIdentityStep(syncInput);
|
|
93
|
+
const { customer } = (0, steps_1.retrieveCustomerStep)(updateResult);
|
|
94
|
+
return new workflows_sdk_1.WorkflowResponse({
|
|
95
|
+
customer_id: updateResult.customer_id,
|
|
96
|
+
customer,
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
exports.default = exports.updateContactWorkflow;
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWNvbnRhY3Qtd29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3VwZGF0ZS1jb250YWN0LXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQU0wQztBQUMxQyxxREFBOEU7QUFFOUUsbUNBQThDO0FBYzlDOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBQSwwQkFBVSxFQUNsQyxnQkFBZ0IsRUFDaEIsS0FBSyxFQUFFLEtBQXlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBaUcsRUFBRTtJQUNoSixNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFDdEQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBeUIsZUFBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ25GLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFdkUsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDcEUsTUFBTSxRQUFRLEdBQUcsWUFBWSxLQUFLLE9BQU87UUFDdkMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQTtJQUU1QixJQUFJLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUM3QixNQUFNLGVBQWUsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDeEUsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUNaLHlFQUF5RSxFQUN6RSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FDcEIsQ0FB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
|
|
@@ -5,15 +5,22 @@ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
|
5
5
|
const steps_1 = require("./steps");
|
|
6
6
|
const otp_verification_1 = require("../modules/otp-verification");
|
|
7
7
|
const updatePhoneVerifiedStep = (0, workflows_sdk_1.createStep)("update-phone-verified", async ({ customer_id }, context) => {
|
|
8
|
-
// Get OTP verification service from container
|
|
9
8
|
const otpService = context.container.resolve(otp_verification_1.OTP_VERIFICATION_MODULE);
|
|
10
|
-
// Update customer phone_verified field using service method
|
|
11
9
|
await otpService.updatePhoneVerified(context, customer_id);
|
|
12
10
|
return new workflows_sdk_1.StepResponse({ customer_id, phone_verified: true });
|
|
13
11
|
});
|
|
14
12
|
exports.verifyPhoneWorkflow = (0, workflows_sdk_1.createWorkflow)("verify-phone", (input) => {
|
|
15
13
|
const updateResult = updatePhoneVerifiedStep(input);
|
|
16
|
-
//
|
|
14
|
+
// Keep the phonepass provider_identity.entity_id in sync with the
|
|
15
|
+
// customer's current phone. This handles the case where the customer
|
|
16
|
+
// updated their phone number — without this step, login would fail
|
|
17
|
+
// because phonepass looks up identities by entity_id (the old phone).
|
|
18
|
+
// Skipped when login.identifier is not "phone" or "both".
|
|
19
|
+
const syncInput = (0, workflows_sdk_1.transform)({ updateResult, input }, (data) => ({
|
|
20
|
+
customer_id: data.updateResult.customer_id,
|
|
21
|
+
login_identifier: data.input.login_identifier,
|
|
22
|
+
}));
|
|
23
|
+
(0, steps_1.syncPhonepassEntityIdStep)(syncInput);
|
|
17
24
|
const customer = (0, steps_1.retrieveCustomerStep)(updateResult);
|
|
18
25
|
return new workflows_sdk_1.WorkflowResponse({
|
|
19
26
|
customer_id: updateResult.customer_id,
|
|
@@ -22,4 +29,4 @@ exports.verifyPhoneWorkflow = (0, workflows_sdk_1.createWorkflow)("verify-phone"
|
|
|
22
29
|
});
|
|
23
30
|
});
|
|
24
31
|
exports.default = exports.verifyPhoneWorkflow;
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXBob25lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy92ZXJpZnktcGhvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTTBDO0FBQzFDLG1DQUF5RTtBQUN6RSxrRUFBcUU7QUFRckUsTUFBTSx1QkFBdUIsR0FBRyxJQUFBLDBCQUFVLEVBQ3hDLHVCQUF1QixFQUN2QixLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQW9CLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQzFDLDBDQUF1QixDQUNFLENBQUE7SUFFM0IsTUFBTSxVQUFVLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBRTFELE9BQU8sSUFBSSw0QkFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQ2hFLENBQUMsQ0FDRixDQUFBO0FBUVksUUFBQSxtQkFBbUIsR0FBRyxJQUFBLDhCQUFjLEVBQy9DLGNBQWMsRUFDZCxDQUFDLEtBQXVCLEVBQXVDLEVBQUU7SUFDL0QsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFbkQsa0VBQWtFO0lBQ2xFLHFFQUFxRTtJQUNyRSxtRUFBbUU7SUFDbkUsc0VBQXNFO0lBQ3RFLDBEQUEwRDtJQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFBLHlCQUFTLEVBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUQsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVztRQUMxQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtLQUM5QyxDQUFDLENBQUMsQ0FBQTtJQUNILElBQUEsaUNBQXlCLEVBQUMsU0FBUyxDQUFDLENBQUE7SUFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBQSw0QkFBb0IsRUFBQyxZQUFZLENBQUMsQ0FBQTtJQUVuRCxPQUFPLElBQUksZ0NBQWdCLENBQUM7UUFDMUIsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO1FBQ3JDLGNBQWMsRUFBRSxZQUFZLENBQUMsY0FBYztRQUMzQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7S0FDNUIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUE7QUFFRCxrQkFBZSwyQkFBbUIsQ0FBQSJ9
|