@perseidesjs/auth-otp 2.0.0

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.
Files changed (42) hide show
  1. package/.github/assets/dark_mode.png +0 -0
  2. package/.github/assets/light_mode.png +0 -0
  3. package/.github/assets/preview.gif +0 -0
  4. package/.medusa/server/src/api/auth/[actor_type]/otp/generate/route.js +35 -0
  5. package/.medusa/server/src/api/auth/[actor_type]/otp/generate/validators.js +8 -0
  6. package/.medusa/server/src/api/auth/[actor_type]/otp/pre-register/route.js +35 -0
  7. package/.medusa/server/src/api/auth/[actor_type]/otp/pre-register/validators.js +8 -0
  8. package/.medusa/server/src/api/auth/[actor_type]/otp/verify/route.js +51 -0
  9. package/.medusa/server/src/api/auth/[actor_type]/otp/verify/validators.js +9 -0
  10. package/.medusa/server/src/api/middlewares.js +32 -0
  11. package/.medusa/server/src/providers/otp/index.d.ts +2 -0
  12. package/.medusa/server/src/providers/otp/index.js +12 -0
  13. package/.medusa/server/src/providers/otp/services/otp.d.ts +17 -0
  14. package/.medusa/server/src/providers/otp/services/otp.js +130 -0
  15. package/.medusa/server/src/types/index.d.ts +111 -0
  16. package/.medusa/server/src/types/index.js +9 -0
  17. package/.medusa/server/src/utils/get-plugin-options.d.ts +20 -0
  18. package/.medusa/server/src/utils/get-plugin-options.js +31 -0
  19. package/.medusa/server/src/utils/otp.d.ts +14 -0
  20. package/.medusa/server/src/utils/otp.js +43 -0
  21. package/.medusa/server/src/workflows/generate-otp.d.ts +16 -0
  22. package/.medusa/server/src/workflows/generate-otp.js +43 -0
  23. package/.medusa/server/src/workflows/index.d.ts +20 -0
  24. package/.medusa/server/src/workflows/index.js +15 -0
  25. package/.medusa/server/src/workflows/pre-register-check.js +49 -0
  26. package/.medusa/server/src/workflows/steps/generate-otp-step.d.ts +13 -0
  27. package/.medusa/server/src/workflows/steps/generate-otp-step.js +28 -0
  28. package/.medusa/server/src/workflows/steps/get-actor-step.d.ts +17 -0
  29. package/.medusa/server/src/workflows/steps/get-actor-step.js +39 -0
  30. package/.medusa/server/src/workflows/steps/get-auth-identity-step.d.ts +18 -0
  31. package/.medusa/server/src/workflows/steps/get-auth-identity-step.js +37 -0
  32. package/.medusa/server/src/workflows/steps/get-stored-otp-step.d.ts +13 -0
  33. package/.medusa/server/src/workflows/steps/get-stored-otp-step.js +23 -0
  34. package/.medusa/server/src/workflows/steps/pre-register-check-actor-existence.js +19 -0
  35. package/.medusa/server/src/workflows/steps/validate-otp-step.d.ts +13 -0
  36. package/.medusa/server/src/workflows/steps/validate-otp-step.js +18 -0
  37. package/.medusa/server/src/workflows/verify-otp.d.ts +20 -0
  38. package/.medusa/server/src/workflows/verify-otp.js +43 -0
  39. package/CHANGELOG.md +30 -0
  40. package/LICENSE.md +21 -0
  41. package/README.md +29 -0
  42. package/package.json +84 -0
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
4
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
5
+ const types_1 = require("../types");
6
+ const get_auth_identity_step_1 = require("./steps/get-auth-identity-step");
7
+ const generate_otp_step_1 = require("./steps/generate-otp-step");
8
+ const get_actor_step_1 = require("./steps/get-actor-step");
9
+ /**
10
+ * Generates an OTP for a given identifier and actor type.
11
+ *
12
+ * @param input - The input for the workflow.
13
+ * @param input.identifier - The identifier of the actor to generate the OTP for.
14
+ * @param input.actorType - The type of actor to generate the OTP for.
15
+ * @param input.accessorsPerActor - The accessors per actor to use for the workflow.
16
+ *
17
+ */
18
+ const generateOtpWorkflow = (0, workflows_sdk_1.createWorkflow)("generate-otp", function (input) {
19
+ const { actor } = (0, get_actor_step_1.getActorStep)({
20
+ identifier: input.identifier,
21
+ actorType: input.actorType,
22
+ accessorsPerActor: input.accessorsPerActor
23
+ });
24
+ const { authIdentity } = (0, get_auth_identity_step_1.getAuthIdentityStep)({
25
+ identifier: input.identifier,
26
+ actorType: input.actorType,
27
+ accessorsPerActor: input.accessorsPerActor,
28
+ foundActor: actor
29
+ });
30
+ const generatedOtpResult = (0, generate_otp_step_1.generateOtpStep)({
31
+ key: authIdentity.id
32
+ });
33
+ (0, core_flows_1.emitEventStep)({
34
+ eventName: types_1.Events.OTP_GENERATED,
35
+ data: {
36
+ identifier: input.identifier,
37
+ otp: generatedOtpResult.otp
38
+ }
39
+ });
40
+ return new workflows_sdk_1.WorkflowResponse('OK');
41
+ });
42
+ exports.default = generateOtpWorkflow;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtb3RwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9nZW5lcmF0ZS1vdHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxRUFBb0Y7QUFDcEYsNERBQTJEO0FBQzNELG9DQUE2QztBQUM3QywyRUFBb0U7QUFDcEUsaUVBQTJEO0FBQzNELDJEQUFxRDtBQUVyRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUN4QyxjQUFjLEVBQ2QsVUFBVSxLQUFzSDtJQUM5SCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBQSw2QkFBWSxFQUFDO1FBQzdCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtLQUMzQyxDQUFDLENBQUE7SUFFRixNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBQSw0Q0FBbUIsRUFBQztRQUMzQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7UUFDNUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7UUFDMUMsVUFBVSxFQUFFLEtBQUs7S0FDbEIsQ0FBQyxDQUFBO0lBRUYsTUFBTSxrQkFBa0IsR0FBRyxJQUFBLG1DQUFlLEVBQUM7UUFDekMsR0FBRyxFQUFFLFlBQWEsQ0FBQyxFQUFFO0tBQ3RCLENBQUMsQ0FBQTtJQUVGLElBQUEsMEJBQWEsRUFBQztRQUNaLFNBQVMsRUFBRSxjQUFNLENBQUMsYUFBYTtRQUMvQixJQUFJLEVBQUU7WUFDSixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsR0FBRyxFQUFFLGtCQUFrQixDQUFDLEdBQUc7U0FDNUI7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDbkMsQ0FBQyxDQUNGLENBQUE7QUFFRCxrQkFBZSxtQkFBbUIsQ0FBQSJ9
@@ -0,0 +1,20 @@
1
+ import generateOtpWorkflow from "./generate-otp";
2
+ import verifyOtpWorkflow from "./verify-otp";
3
+ export { generateOtpWorkflow, verifyOtpWorkflow };
4
+ declare const _default: {
5
+ generateOtpWorkflow: import("@medusajs/workflows-sdk").ReturnWorkflow<{
6
+ identifier: string;
7
+ actorType: string;
8
+ accessorsPerActor: Required<import("../types").OtpOptions>["accessorsPerActor"][string];
9
+ }, "OK", []>;
10
+ verifyOtpWorkflow: import("@medusajs/workflows-sdk").ReturnWorkflow<{
11
+ identifier: string;
12
+ otp: string;
13
+ actorType: string;
14
+ accessorsPerActor: Required<import("../types").OtpOptions>["accessorsPerActor"][string];
15
+ }, {
16
+ isValid: (boolean | import("@medusajs/workflows-sdk").WorkflowData<boolean>) & boolean;
17
+ authIdentity: (import("@medusajs/types").AuthIdentityDTO | import("@medusajs/workflows-sdk").WorkflowData<import("@medusajs/types").AuthIdentityDTO>) & import("@medusajs/types").AuthIdentityDTO;
18
+ }, []>;
19
+ };
20
+ export default _default;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.verifyOtpWorkflow = exports.generateOtpWorkflow = void 0;
7
+ const generate_otp_1 = __importDefault(require("./generate-otp"));
8
+ exports.generateOtpWorkflow = generate_otp_1.default;
9
+ const verify_otp_1 = __importDefault(require("./verify-otp"));
10
+ exports.verifyOtpWorkflow = verify_otp_1.default;
11
+ exports.default = {
12
+ generateOtpWorkflow: generate_otp_1.default,
13
+ verifyOtpWorkflow: verify_otp_1.default
14
+ };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtFQUFnRDtBQUk5Qyw4QkFKSyxzQkFBbUIsQ0FJTDtBQUhyQiw4REFBNEM7QUFJMUMsNEJBSkssb0JBQWlCLENBSUw7QUFHbkIsa0JBQWU7SUFDYixtQkFBbUIsRUFBbkIsc0JBQW1CO0lBQ25CLGlCQUFpQixFQUFqQixvQkFBaUI7Q0FDbEIsQ0FBQSJ9
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
4
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
5
+ const types_1 = require("../types");
6
+ const generate_otp_step_1 = require("./steps/generate-otp-step");
7
+ const get_actor_step_1 = require("./steps/get-actor-step");
8
+ const pre_register_check_actor_existence_1 = require("./steps/pre-register-check-actor-existence");
9
+ /**
10
+ * The pre-register workflow is used to check if an actor exists with the given identifier.
11
+ * If it does, it throws an error as the actor is already registered
12
+ *
13
+ * If it doesn't, it generates an OTP for the identifier allowing them to validate the OTP
14
+ * when they register using the `/auth/{actor_type}/otp/register` route, that needs the :
15
+ * - identifier
16
+ * - otp
17
+ *
18
+ * To generate the registration token, allowing you to create actors (customers, users, etc.)
19
+ *
20
+ * @param input - The input for the workflow.
21
+ * @param input.identifier - The identifier of the actor to check the existence for.
22
+ * @param input.actorType - The type of actor to check the existence for.
23
+ * @param input.accessorsPerActor - The accessors per actor to use for the workflow.
24
+ *
25
+ */
26
+ const preRegisterCheckWorkflow = (0, workflows_sdk_1.createWorkflow)("pre-register-check", function (input) {
27
+ const { actor } = (0, get_actor_step_1.getActorStep)({
28
+ identifier: input.identifier,
29
+ actorType: input.actorType,
30
+ accessorsPerActor: input.accessorsPerActor
31
+ });
32
+ (0, pre_register_check_actor_existence_1.preRegisterCheckActorExistenceStep)({
33
+ foundActor: actor
34
+ });
35
+ const generatedOtpResult = (0, generate_otp_step_1.generateOtpStep)({
36
+ key: input.identifier,
37
+ tag: 'pre-register'
38
+ });
39
+ (0, core_flows_1.emitEventStep)({
40
+ eventName: types_1.Events.PRE_REGISTER_OTP_GENERATED,
41
+ data: {
42
+ identifier: input.identifier,
43
+ otp: generatedOtpResult.otp
44
+ }
45
+ });
46
+ return new workflows_sdk_1.WorkflowResponse('OK');
47
+ });
48
+ exports.default = preRegisterCheckWorkflow;
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlLXJlZ2lzdGVyLWNoZWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9wcmUtcmVnaXN0ZXItY2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxRUFBb0Y7QUFDcEYsNERBQTJEO0FBQzNELG9DQUE2QztBQUM3QyxpRUFBMkQ7QUFDM0QsMkRBQXFEO0FBQ3JELG1HQUErRjtBQUUvRjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsSUFBQSw4QkFBYyxFQUM3QyxvQkFBb0IsRUFDcEIsVUFBVSxLQUFzSDtJQUM5SCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBQSw2QkFBWSxFQUFDO1FBQzdCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtLQUMzQyxDQUFDLENBQUE7SUFFRixJQUFBLHVFQUFrQyxFQUFDO1FBQ2pDLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLE1BQU0sa0JBQWtCLEdBQUcsSUFBQSxtQ0FBZSxFQUFDO1FBQ3pDLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUNyQixHQUFHLEVBQUUsY0FBYztLQUNwQixDQUFDLENBQUE7SUFFRixJQUFBLDBCQUFhLEVBQUM7UUFDWixTQUFTLEVBQUUsY0FBTSxDQUFDLDBCQUEwQjtRQUM1QyxJQUFJLEVBQUU7WUFDSixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsR0FBRyxFQUFFLGtCQUFrQixDQUFDLEdBQUc7U0FDNUI7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDbkMsQ0FBQyxDQUNGLENBQUE7QUFFRCxrQkFBZSx3QkFBd0IsQ0FBQSJ9
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Generates an OTP for a given key.
3
+ *
4
+ * @param input - The input for the step.
5
+ * @param input.key - The key to generate the OTP for.
6
+ * @param input.tag - The tag for the cache key.
7
+ */
8
+ export declare const generateOtpStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
9
+ key: string;
10
+ tag?: string;
11
+ }, {
12
+ otp: string;
13
+ }>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateOtpStep = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
9
+ const get_plugin_options_1 = __importDefault(require("../../utils/get-plugin-options"));
10
+ const otp_1 = require("../../utils/otp");
11
+ /**
12
+ * Generates an OTP for a given key.
13
+ *
14
+ * @param input - The input for the step.
15
+ * @param input.key - The key to generate the OTP for.
16
+ * @param input.tag - The tag for the cache key.
17
+ */
18
+ exports.generateOtpStep = (0, workflows_sdk_1.createStep)("generate-otp", async (input, { container }) => {
19
+ const cacheService = container.resolve(utils_1.Modules.CACHE);
20
+ const configModule = container.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
21
+ const pluginOptions = (0, get_plugin_options_1.default)(configModule);
22
+ const otp = otp_1.OtpUtils.generateRandomOTP(pluginOptions.digits);
23
+ const key = input.tag ? `${input.tag}:${input.key}` : input.key;
24
+ const cacheKey = `otp:${key}`;
25
+ await cacheService.set(cacheKey, otp, pluginOptions.ttl);
26
+ return new workflows_sdk_1.StepResponse({ otp });
27
+ });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtb3RwLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2dlbmVyYXRlLW90cC1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHFEQUE4RTtBQUM5RSxxRUFBNEU7QUFDNUUsd0ZBQTZEO0FBQzdELHlDQUEwQztBQUUxQzs7Ozs7O0dBTUc7QUFDVSxRQUFBLGVBQWUsR0FBRyxJQUFBLDBCQUFVLEVBQ3ZDLGNBQWMsRUFDZCxLQUFLLEVBQUUsS0FHTixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNsQixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFnQixlQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEUsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMvRSxNQUFNLGFBQWEsR0FBRyxJQUFBLDRCQUFnQixFQUFDLFlBQVksQ0FBQyxDQUFBO0lBRXBELE1BQU0sR0FBRyxHQUFHLGNBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDNUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQTtJQUMvRCxNQUFNLFFBQVEsR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBRTdCLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV4RCxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7QUFDbEMsQ0FBQyxDQUNGLENBQUEifQ==
@@ -0,0 +1,17 @@
1
+ import { OtpOptions } from "../../types";
2
+ /**
3
+ * Gets an actor for a given identifier and actor type.
4
+ *
5
+ * @param input - The input for the step.
6
+ * @param input.identifier - The identifier of the actor to get.
7
+ * @param input.actorType - The type of actor to get.
8
+ * @param input.accessorsPerActor - The accessors per actor to use for the step.
9
+ */
10
+ export declare const getActorStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
11
+ identifier: string;
12
+ actorType: string;
13
+ accessorsPerActor: Required<OtpOptions>["accessorsPerActor"][string];
14
+ }, {
15
+ actor: any;
16
+ error: boolean;
17
+ }>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getActorStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ /**
7
+ * Gets an actor for a given identifier and actor type.
8
+ *
9
+ * @param input - The input for the step.
10
+ * @param input.identifier - The identifier of the actor to get.
11
+ * @param input.actorType - The type of actor to get.
12
+ * @param input.accessorsPerActor - The accessors per actor to use for the step.
13
+ */
14
+ exports.getActorStep = (0, workflows_sdk_1.createStep)("get-actor", async (input, { container }) => {
15
+ const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
16
+ const filters = {};
17
+ if (Array.isArray(input.accessorsPerActor.accessor)) {
18
+ filters['$or'] = input.accessorsPerActor.accessor.map(accessor => ({
19
+ [accessor]: input.identifier
20
+ }));
21
+ }
22
+ else {
23
+ filters[input.accessorsPerActor.accessor] = input.identifier;
24
+ }
25
+ const actor = await remoteQuery.graph({
26
+ entity: input.actorType,
27
+ fields: ['*'],
28
+ filters
29
+ });
30
+ const foundActor = actor.data.length ? actor.data[0] : null;
31
+ if (!foundActor) {
32
+ return new workflows_sdk_1.StepResponse({
33
+ error: true,
34
+ actor: null
35
+ });
36
+ }
37
+ return new workflows_sdk_1.StepResponse({ actor: foundActor, error: false });
38
+ });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFjdG9yLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2dldC1hY3Rvci1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFrRjtBQUNsRixxRUFBNEU7QUFHNUU7Ozs7Ozs7R0FPRztBQUNVLFFBQUEsWUFBWSxHQUFHLElBQUEsMEJBQVUsRUFDcEMsV0FBVyxFQUNYLEtBQUssRUFBRSxLQUlOLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFN0UsTUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQTtJQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDcEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLENBQUMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUE7SUFDOUQsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQztRQUNwQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDdkIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ2IsT0FBTztLQUNSLENBQUMsQ0FBQTtJQUVGLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFFM0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBSSw0QkFBWSxDQUFDO1lBQ3RCLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0FBQzlELENBQUMsQ0FDRixDQUFBIn0=
@@ -0,0 +1,18 @@
1
+ import { OtpOptions } from "../../types";
2
+ /**
3
+ * Gets an auth identity for a given identifier and actor type.
4
+ *
5
+ * @param input - The input for the step.
6
+ * @param input.identifier - The identifier of the actor to get the auth identity for.
7
+ * @param input.actorType - The type of actor to get the auth identity for.
8
+ * @param input.foundActor - The found actor to get the auth identity for.
9
+ * @param input.accessorsPerActor - The accessors per actor to use for the step.
10
+ */
11
+ export declare const getAuthIdentityStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
12
+ identifier: string;
13
+ actorType?: string;
14
+ foundActor?: Record<string, unknown>;
15
+ accessorsPerActor?: Required<OtpOptions>["accessorsPerActor"][string];
16
+ }, {
17
+ authIdentity: import("@medusajs/types").AuthIdentityDTO;
18
+ }>;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAuthIdentityStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ /**
7
+ * Gets an auth identity for a given identifier and actor type.
8
+ *
9
+ * @param input - The input for the step.
10
+ * @param input.identifier - The identifier of the actor to get the auth identity for.
11
+ * @param input.actorType - The type of actor to get the auth identity for.
12
+ * @param input.foundActor - The found actor to get the auth identity for.
13
+ * @param input.accessorsPerActor - The accessors per actor to use for the step.
14
+ */
15
+ exports.getAuthIdentityStep = (0, workflows_sdk_1.createStep)("get-auth-identity", async (input, { container }) => {
16
+ const authModule = container.resolve(utils_1.Modules.AUTH);
17
+ const entityId = input.foundActor?.[input.accessorsPerActor?.entityIdAccessor];
18
+ const authIdentities = await authModule.listAuthIdentities({
19
+ provider_identities: {
20
+ entity_id: entityId
21
+ }
22
+ }, {
23
+ relations: ['provider_identities']
24
+ });
25
+ if (authIdentities.length === 0) {
26
+ throw new Error("Auth identity not found");
27
+ }
28
+ const authIdentity = authIdentities.find(identity => (0, utils_1.isDefined)(identity.app_metadata) &&
29
+ (0, utils_1.isDefined)(identity.app_metadata[`${input.actorType}_id`]));
30
+ if (!authIdentity) {
31
+ throw new Error("Auth identity not found");
32
+ }
33
+ return new workflows_sdk_1.StepResponse({
34
+ authIdentity
35
+ });
36
+ });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWF1dGgtaWRlbnRpdHktc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvZ2V0LWF1dGgtaWRlbnRpdHktc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBOEQ7QUFDOUQscUVBQTRFO0FBRzVFOzs7Ozs7OztHQVFHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRyxJQUFBLDBCQUFVLEVBQzNDLG1CQUFtQixFQUNuQixLQUFLLEVBQUUsS0FLTixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNsQixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUVsRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGdCQUFpQixDQUFXLENBQUE7SUFFekYsTUFBTSxjQUFjLEdBQUcsTUFBTSxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFDekQsbUJBQW1CLEVBQUU7WUFDbkIsU0FBUyxFQUFFLFFBQVE7U0FDcEI7S0FDRixFQUFFO1FBQ0QsU0FBUyxFQUFFLENBQUMscUJBQXFCLENBQUM7S0FDbkMsQ0FBQyxDQUFBO0lBR0YsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUNsRCxJQUFBLGlCQUFTLEVBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNoQyxJQUFBLGlCQUFTLEVBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQzFELENBQUE7SUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxPQUFPLElBQUksNEJBQVksQ0FBQztRQUN0QixZQUFZO0tBQ2IsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUEifQ==
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Gets a stored OTP for a given key.
3
+ *
4
+ * @param input - The input for the step.
5
+ * @param input.key - The key to get the OTP for.
6
+ * @param input.tag - The tag for the cache key.
7
+ */
8
+ export declare const getStoredOtpStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
9
+ key: string;
10
+ tag?: string;
11
+ }, {
12
+ storedOtp: string;
13
+ }>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getStoredOtpStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ /**
7
+ * Gets a stored OTP for a given key.
8
+ *
9
+ * @param input - The input for the step.
10
+ * @param input.key - The key to get the OTP for.
11
+ * @param input.tag - The tag for the cache key.
12
+ */
13
+ exports.getStoredOtpStep = (0, workflows_sdk_1.createStep)("get-stored-otp", async (input, { container }) => {
14
+ const cacheService = container.resolve(utils_1.Modules.CACHE);
15
+ const key = input.tag ? `${input.tag}:${input.key}` : input.key;
16
+ const cacheKey = `otp:${key}`;
17
+ const storedOtp = await cacheService.get(cacheKey);
18
+ if (!storedOtp) {
19
+ throw new Error("OTP not found");
20
+ }
21
+ return new workflows_sdk_1.StepResponse({ storedOtp });
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXN0b3JlZC1vdHAtc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvZ2V0LXN0b3JlZC1vdHAtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBbUQ7QUFDbkQscUVBQTRFO0FBRTVFOzs7Ozs7R0FNRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUcsSUFBQSwwQkFBVSxFQUN4QyxnQkFBZ0IsRUFDaEIsS0FBSyxFQUFFLEtBR04sRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDbEIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBZ0IsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUE7SUFDL0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQTtJQUM3QixNQUFNLFNBQVMsR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLENBQVMsUUFBUSxDQUFDLENBQUE7SUFFMUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO0FBQ3hDLENBQUMsQ0FDRixDQUFBIn0=
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.preRegisterCheckActorExistenceStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ /**
7
+ * Checks if an actor exists
8
+ * If it does, it throws an error as the actor is already registered.
9
+ *
10
+ * @param input - The input for the step.
11
+ * @param input.foundActor - The found actor to check the existence for.
12
+ */
13
+ exports.preRegisterCheckActorExistenceStep = (0, workflows_sdk_1.createStep)("pre-register-check-actor-existence", async (input) => {
14
+ if (input.foundActor) {
15
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Actor already exists");
16
+ }
17
+ return new workflows_sdk_1.StepResponse(input);
18
+ });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlLXJlZ2lzdGVyLWNoZWNrLWFjdG9yLWV4aXN0ZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvcHJlLXJlZ2lzdGVyLWNoZWNrLWFjdG9yLWV4aXN0ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBdUQ7QUFDdkQscUVBQTRFO0FBRTVFOzs7Ozs7R0FNRztBQUNVLFFBQUEsa0NBQWtDLEdBQUcsSUFBQSwwQkFBVSxFQUMxRCxvQ0FBb0MsRUFDcEMsS0FBSyxFQUFFLEtBRU4sRUFBRSxFQUFFO0lBQ0gsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLG1CQUFXLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVELE9BQU8sSUFBSSw0QkFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ2hDLENBQUMsQ0FDRixDQUFBIn0=
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Validates an OTP for a given stored OTP and OTP.
3
+ *
4
+ * @param input - The input for the step.
5
+ * @param input.storedOtp - The stored OTP to validate.
6
+ * @param input.otp - The OTP to validate.
7
+ */
8
+ export declare const validateOtpStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
9
+ storedOtp: string | undefined;
10
+ otp: string;
11
+ }, {
12
+ isValid: boolean;
13
+ }>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateOtpStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ /**
6
+ * Validates an OTP for a given stored OTP and OTP.
7
+ *
8
+ * @param input - The input for the step.
9
+ * @param input.storedOtp - The stored OTP to validate.
10
+ * @param input.otp - The OTP to validate.
11
+ */
12
+ exports.validateOtpStep = (0, workflows_sdk_1.createStep)("validate-otp", async (input) => {
13
+ if (!input.storedOtp) {
14
+ throw new Error("Stored OTP not found");
15
+ }
16
+ return new workflows_sdk_1.StepResponse({ isValid: input.storedOtp === input.otp });
17
+ });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtb3RwLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3ZhbGlkYXRlLW90cC1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE0RTtBQUU1RTs7Ozs7O0dBTUc7QUFDVSxRQUFBLGVBQWUsR0FBRyxJQUFBLDBCQUFVLEVBQ3ZDLGNBQWMsRUFDZCxLQUFLLEVBQUUsS0FHTixFQUFFLEVBQUU7SUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBRUQsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtBQUNyRSxDQUFDLENBQ0YsQ0FBQSJ9
@@ -0,0 +1,20 @@
1
+ import { OtpOptions } from "../types";
2
+ /**
3
+ * Verifies an OTP for a given identifier and actor type.
4
+ *
5
+ * @param input - The input for the workflow.
6
+ * @param input.identifier - The identifier of the actor to verify the OTP for.
7
+ * @param input.otp - The OTP to verify.
8
+ * @param input.actorType - The type of actor to verify the OTP for.
9
+ * @param input.accessorsPerActor - The accessors per actor to use for the workflow.
10
+ */
11
+ declare const verifyOtpWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<{
12
+ identifier: string;
13
+ otp: string;
14
+ actorType: string;
15
+ accessorsPerActor: Required<OtpOptions>["accessorsPerActor"][string];
16
+ }, {
17
+ isValid: (boolean | import("@medusajs/framework/workflows-sdk").WorkflowData<boolean>) & boolean;
18
+ authIdentity: (import("@medusajs/types").AuthIdentityDTO | import("@medusajs/framework/workflows-sdk").WorkflowData<import("@medusajs/types").AuthIdentityDTO>) & import("@medusajs/types").AuthIdentityDTO;
19
+ }, []>;
20
+ export default verifyOtpWorkflow;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
4
+ const get_auth_identity_step_1 = require("./steps/get-auth-identity-step");
5
+ const get_stored_otp_step_1 = require("./steps/get-stored-otp-step");
6
+ const validate_otp_step_1 = require("./steps/validate-otp-step");
7
+ const get_actor_step_1 = require("./steps/get-actor-step");
8
+ /**
9
+ * Verifies an OTP for a given identifier and actor type.
10
+ *
11
+ * @param input - The input for the workflow.
12
+ * @param input.identifier - The identifier of the actor to verify the OTP for.
13
+ * @param input.otp - The OTP to verify.
14
+ * @param input.actorType - The type of actor to verify the OTP for.
15
+ * @param input.accessorsPerActor - The accessors per actor to use for the workflow.
16
+ */
17
+ const verifyOtpWorkflow = (0, workflows_sdk_1.createWorkflow)("verify-otp", function (input) {
18
+ const { actor } = (0, get_actor_step_1.getActorStep)({
19
+ identifier: input.identifier,
20
+ actorType: input.actorType,
21
+ accessorsPerActor: input.accessorsPerActor
22
+ });
23
+ const { authIdentity } = (0, get_auth_identity_step_1.getAuthIdentityStep)({
24
+ identifier: input.identifier,
25
+ actorType: input.actorType,
26
+ accessorsPerActor: input.accessorsPerActor,
27
+ foundActor: actor
28
+ });
29
+ const storedOtpResult = (0, get_stored_otp_step_1.getStoredOtpStep)({
30
+ key: authIdentity.id
31
+ });
32
+ const validateOtpResult = (0, validate_otp_step_1.validateOtpStep)({
33
+ storedOtp: storedOtpResult?.storedOtp,
34
+ otp: input.otp
35
+ });
36
+ // If we reach this point, validation was successful
37
+ return new workflows_sdk_1.WorkflowResponse({
38
+ isValid: validateOtpResult?.isValid,
39
+ authIdentity: authIdentity
40
+ });
41
+ });
42
+ exports.default = verifyOtpWorkflow;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LW90cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvdmVyaWZ5LW90cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFFQUFvRjtBQUNwRiwyRUFBb0U7QUFDcEUscUVBQThEO0FBQzlELGlFQUEyRDtBQUMzRCwyREFBcUQ7QUFHckQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLElBQUEsOEJBQWMsRUFDdEMsWUFBWSxFQUNaLFVBQVUsS0FBbUk7SUFDM0ksTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsNkJBQVksRUFBQztRQUM3QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7UUFDNUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7S0FDM0MsQ0FBQyxDQUFBO0lBRUYsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUEsNENBQW1CLEVBQUM7UUFDM0MsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1FBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1FBQzFDLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLE1BQU0sZUFBZSxHQUFHLElBQUEsc0NBQWdCLEVBQUM7UUFDdkMsR0FBRyxFQUFFLFlBQWEsQ0FBQyxFQUFFO0tBQ3RCLENBQUMsQ0FBQTtJQUVGLE1BQU0saUJBQWlCLEdBQUcsSUFBQSxtQ0FBZSxFQUFDO1FBQ3RDLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUztRQUN2QyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7S0FDZixDQUFDLENBQUE7SUFFRixvREFBb0Q7SUFDcEQsT0FBTyxJQUFJLGdDQUFnQixDQUFDO1FBQzFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPO1FBQ25DLFlBQVksRUFBRSxZQUFZO0tBQzNCLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBO0FBRUQsa0JBQWUsaUJBQWlCLENBQUEifQ==
package/CHANGELOG.md ADDED
@@ -0,0 +1,30 @@
1
+ # @perseidesjs/auth-otp
2
+
3
+ ## 2.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - bbc6414: Changed the plugin license to MIT
8
+
9
+ ## 1.4.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 2ea3222: Enhance OTP authentication process with direct access for recently registered users
14
+
15
+ ## 1.3.0
16
+
17
+ ### Minor Changes
18
+
19
+ - 23dd317: Add pre-registration OTP workflow and validation
20
+ - a26f49f: Update OTP workflow steps to use 'key' instead of 'authIdentityId' and 'identifier'
21
+
22
+ ### Patch Changes
23
+
24
+ - 8939555: Update OTP generation step to use 'tag' instead of 'purpose'
25
+
26
+ ## 1.2.0
27
+
28
+ ### Minor Changes
29
+
30
+ - b855685: Initial release
package/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 perseides / Adil BASRI (adevinwild)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,29 @@
1
+ <p align="center">
2
+ <a href="https://www.github.com/perseidesjs">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="./.github/assets/dark_mode.png" width="128" height="128">
5
+ <source media="(prefers-color-scheme: light)" srcset="./.github/assets/light_mode.png" width="128" height="128">
6
+ <img alt="Perseides logo" src="./.github/assets/light_mode.png">
7
+ </picture>
8
+ </a>
9
+ </p>
10
+ <h1 align="center">
11
+ @perseidesjs/auth-otp
12
+ </h1>
13
+
14
+ <h4 align="center">
15
+ <a href="https://perseides.org">Website</a> |
16
+ <a href="https://www.medusajs.com">Medusa</a>
17
+ </h4>
18
+
19
+ <p align="center">
20
+ Implement seamlessly OTP-based authentication for Medusa 2.x
21
+ </p>
22
+
23
+ <p align="center">
24
+ <img src="./.github/assets/preview.gif" alt="Preview of @perseidesjs/auth-otp in action">
25
+ </p>
26
+
27
+
28
+ # [Documentation](https://docs.perseides.org/plugins/auth-otp/getting-started)
29
+ Access the documentation for the package, by clicking ["here"](https://docs.perseides.org/plugins/auth-otp/getting-started)
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@perseidesjs/auth-otp",
3
+ "version": "2.0.0",
4
+ "description": "An OTP Auth Provider for Medusa 2.x",
5
+ "author": "adevinwild (https://perseides.org)",
6
+ "types": "./.medusa/server/src/types/index.d.ts",
7
+ "files": [
8
+ ".medusa/server",
9
+ ".github/assets",
10
+ "CHANGELOG.md"
11
+ ],
12
+ "license": "SEE LICENSE IN LICENSE.md",
13
+ "exports": {
14
+ "./package.json": "./package.json",
15
+ "./workflows": "./.medusa/server/src/workflows/index.js",
16
+ "./providers/*": "./.medusa/server/src/providers/*/index.js",
17
+ "./types": {
18
+ "types": "./.medusa/server/src/types/index.d.ts",
19
+ "default": "./.medusa/server/src/types/index.js"
20
+ },
21
+ "./*": "./.medusa/server/src/*.js"
22
+ },
23
+ "scripts": {
24
+ "generate-types": "tsc -p tsconfig.index.json",
25
+ "build": "medusa plugin:build && npm run generate-types",
26
+ "dev": "medusa plugin:develop",
27
+ "prepublishOnly": "npm run build",
28
+ "release": "yarn build && changeset publish",
29
+ "test:integration:http": "TEST_TYPE=integration:http NODE_OPTIONS=--experimental-vm-modules jest --silent=false --runInBand --forceExit",
30
+ "test:integration:providers": "TEST_TYPE=integration:providers NODE_OPTIONS=--experimental-vm-modules jest --silent --runInBand --forceExit",
31
+ "test:unit": "TEST_TYPE=unit NODE_OPTIONS=--experimental-vm-modules jest --silent --runInBand --forceExit"
32
+ },
33
+ "devDependencies": {
34
+ "@changesets/cli": "^2.28.1",
35
+ "@medusajs/admin-sdk": "2.6.1",
36
+ "@medusajs/cli": "2.6.1",
37
+ "@medusajs/framework": "2.6.1",
38
+ "@medusajs/icons": "2.6.1",
39
+ "@medusajs/medusa": "2.6.1",
40
+ "@medusajs/test-utils": "^2.6.1",
41
+ "@medusajs/ui": "4.0.7",
42
+ "@mikro-orm/cli": "6.4.9",
43
+ "@mikro-orm/core": "6.4.9",
44
+ "@mikro-orm/knex": "6.4.9",
45
+ "@mikro-orm/migrations": "6.4.9",
46
+ "@mikro-orm/postgresql": "6.4.9",
47
+ "@swc/core": "1.5.7",
48
+ "@swc/jest": "^0.2.37",
49
+ "@types/jest": "^29.5.14",
50
+ "@types/node": "^20.0.0",
51
+ "@types/react": "^18.3.2",
52
+ "@types/react-dom": "^18.2.25",
53
+ "awilix": "^8.0.1",
54
+ "jest": "^29.7.0",
55
+ "pg": "^8.13.0",
56
+ "prop-types": "^15.8.1",
57
+ "react": "^18.2.0",
58
+ "react-dom": "^18.2.0",
59
+ "ts-node": "^10.9.2",
60
+ "typescript": "^5.6.2",
61
+ "vite": "^5.2.11",
62
+ "yalc": "^1.0.0-pre.53"
63
+ },
64
+ "peerDependencies": {
65
+ "@medusajs/admin-sdk": ">=2.3.0",
66
+ "@medusajs/cli": ">=2.3.0",
67
+ "@medusajs/framework": ">=2.3.0",
68
+ "@medusajs/icons": ">=2.3.0",
69
+ "@medusajs/medusa": ">=2.3.0",
70
+ "@medusajs/test-utils": ">=2.3.0",
71
+ "@medusajs/ui": "4.0.3",
72
+ "@mikro-orm/cli": "6.4.3",
73
+ "@mikro-orm/core": "6.4.3",
74
+ "@mikro-orm/knex": "6.4.3",
75
+ "@mikro-orm/migrations": "6.4.3",
76
+ "@mikro-orm/postgresql": "6.4.3",
77
+ "awilix": "^8.0.1",
78
+ "pg": "^8.13.0"
79
+ },
80
+ "engines": {
81
+ "node": ">=20"
82
+ },
83
+ "packageManager": "yarn@4.6.0+sha512.5383cc12567a95f1d668fbe762dfe0075c595b4bfff433be478dbbe24e05251a8e8c3eb992a986667c1d53b6c3a9c85b8398c35a960587fbd9fa3a0915406728"
84
+ }