@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.
- package/.github/assets/dark_mode.png +0 -0
- package/.github/assets/light_mode.png +0 -0
- package/.github/assets/preview.gif +0 -0
- package/.medusa/server/src/api/auth/[actor_type]/otp/generate/route.js +35 -0
- package/.medusa/server/src/api/auth/[actor_type]/otp/generate/validators.js +8 -0
- package/.medusa/server/src/api/auth/[actor_type]/otp/pre-register/route.js +35 -0
- package/.medusa/server/src/api/auth/[actor_type]/otp/pre-register/validators.js +8 -0
- package/.medusa/server/src/api/auth/[actor_type]/otp/verify/route.js +51 -0
- package/.medusa/server/src/api/auth/[actor_type]/otp/verify/validators.js +9 -0
- package/.medusa/server/src/api/middlewares.js +32 -0
- package/.medusa/server/src/providers/otp/index.d.ts +2 -0
- package/.medusa/server/src/providers/otp/index.js +12 -0
- package/.medusa/server/src/providers/otp/services/otp.d.ts +17 -0
- package/.medusa/server/src/providers/otp/services/otp.js +130 -0
- package/.medusa/server/src/types/index.d.ts +111 -0
- package/.medusa/server/src/types/index.js +9 -0
- package/.medusa/server/src/utils/get-plugin-options.d.ts +20 -0
- package/.medusa/server/src/utils/get-plugin-options.js +31 -0
- package/.medusa/server/src/utils/otp.d.ts +14 -0
- package/.medusa/server/src/utils/otp.js +43 -0
- package/.medusa/server/src/workflows/generate-otp.d.ts +16 -0
- package/.medusa/server/src/workflows/generate-otp.js +43 -0
- package/.medusa/server/src/workflows/index.d.ts +20 -0
- package/.medusa/server/src/workflows/index.js +15 -0
- package/.medusa/server/src/workflows/pre-register-check.js +49 -0
- package/.medusa/server/src/workflows/steps/generate-otp-step.d.ts +13 -0
- package/.medusa/server/src/workflows/steps/generate-otp-step.js +28 -0
- package/.medusa/server/src/workflows/steps/get-actor-step.d.ts +17 -0
- package/.medusa/server/src/workflows/steps/get-actor-step.js +39 -0
- package/.medusa/server/src/workflows/steps/get-auth-identity-step.d.ts +18 -0
- package/.medusa/server/src/workflows/steps/get-auth-identity-step.js +37 -0
- package/.medusa/server/src/workflows/steps/get-stored-otp-step.d.ts +13 -0
- package/.medusa/server/src/workflows/steps/get-stored-otp-step.js +23 -0
- package/.medusa/server/src/workflows/steps/pre-register-check-actor-existence.js +19 -0
- package/.medusa/server/src/workflows/steps/validate-otp-step.d.ts +13 -0
- package/.medusa/server/src/workflows/steps/validate-otp-step.js +18 -0
- package/.medusa/server/src/workflows/verify-otp.d.ts +20 -0
- package/.medusa/server/src/workflows/verify-otp.js +43 -0
- package/CHANGELOG.md +30 -0
- package/LICENSE.md +21 -0
- package/README.md +29 -0
- 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
|
+
}
|