@medusajs/auth 0.0.2

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 (60) hide show
  1. package/README.md +3 -0
  2. package/dist/index.d.ts +5 -0
  3. package/dist/index.js +23 -0
  4. package/dist/initialize/index.d.ts +3 -0
  5. package/dist/initialize/index.js +16 -0
  6. package/dist/joiner-config.d.ts +7 -0
  7. package/dist/joiner-config.js +28 -0
  8. package/dist/loaders/connection.d.ts +4 -0
  9. package/dist/loaders/connection.js +41 -0
  10. package/dist/loaders/container.d.ts +2 -0
  11. package/dist/loaders/container.js +34 -0
  12. package/dist/loaders/index.d.ts +3 -0
  13. package/dist/loaders/index.js +19 -0
  14. package/dist/loaders/providers.d.ts +6 -0
  15. package/dist/loaders/providers.js +55 -0
  16. package/dist/migrations/Migration20240122041959.d.ts +5 -0
  17. package/dist/migrations/Migration20240122041959.js +18 -0
  18. package/dist/models/auth-provider.d.ts +12 -0
  19. package/dist/models/auth-provider.js +44 -0
  20. package/dist/models/auth-user.d.ts +15 -0
  21. package/dist/models/auth-user.js +70 -0
  22. package/dist/models/index.d.ts +2 -0
  23. package/dist/models/index.js +10 -0
  24. package/dist/module-definition.d.ts +4 -0
  25. package/dist/module-definition.js +51 -0
  26. package/dist/providers/email-password.d.ts +13 -0
  27. package/dist/providers/email-password.js +45 -0
  28. package/dist/providers/google.d.ts +32 -0
  29. package/dist/providers/google.js +158 -0
  30. package/dist/providers/index.d.ts +2 -0
  31. package/dist/providers/index.js +10 -0
  32. package/dist/repositories/index.d.ts +1 -0
  33. package/dist/repositories/index.js +5 -0
  34. package/dist/scripts/bin/run-seed.d.ts +3 -0
  35. package/dist/scripts/bin/run-seed.js +38 -0
  36. package/dist/scripts/seed.d.ts +4 -0
  37. package/dist/scripts/seed.js +54 -0
  38. package/dist/services/auth-module.d.ts +46 -0
  39. package/dist/services/auth-module.js +276 -0
  40. package/dist/services/auth-provider.d.ts +18 -0
  41. package/dist/services/auth-provider.js +11 -0
  42. package/dist/services/auth-user.d.ts +19 -0
  43. package/dist/services/auth-user.js +39 -0
  44. package/dist/services/index.d.ts +3 -0
  45. package/dist/services/index.js +12 -0
  46. package/dist/types/index.d.ts +6 -0
  47. package/dist/types/index.js +28 -0
  48. package/dist/types/repositories/auth-provider.d.ts +23 -0
  49. package/dist/types/repositories/auth-provider.js +9 -0
  50. package/dist/types/repositories/auth-user.d.ts +17 -0
  51. package/dist/types/repositories/auth-user.js +2 -0
  52. package/dist/types/repositories/index.d.ts +16 -0
  53. package/dist/types/repositories/index.js +18 -0
  54. package/dist/types/services/auth-provider.d.ts +27 -0
  55. package/dist/types/services/auth-provider.js +9 -0
  56. package/dist/types/services/auth-user.d.ts +24 -0
  57. package/dist/types/services/auth-user.js +2 -0
  58. package/dist/types/services/index.d.ts +2 -0
  59. package/dist/types/services/index.js +18 -0
  60. package/package.json +64 -0
@@ -0,0 +1,158 @@
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
+ const utils_1 = require("@medusajs/utils");
7
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
+ const simple_oauth2_1 = require("simple-oauth2");
9
+ const url_1 = __importDefault(require("url"));
10
+ class GoogleProvider extends utils_1.AbstractAuthModuleProvider {
11
+ constructor({ authUserService, authProviderService }) {
12
+ super(arguments[0]);
13
+ this.authUserSerivce_ = authUserService;
14
+ this.authProviderService_ = authProviderService;
15
+ }
16
+ async authenticate(req) {
17
+ if (req.query?.error) {
18
+ return {
19
+ success: false,
20
+ error: `${req.query.error_description}, read more at: ${req.query.error_uri}`,
21
+ };
22
+ }
23
+ let config;
24
+ try {
25
+ config = await this.getProviderConfig(req);
26
+ }
27
+ catch (error) {
28
+ return { success: false, error: error.message };
29
+ }
30
+ return this.getRedirect(config);
31
+ }
32
+ async validateCallback(req) {
33
+ if (req.query && req.query.error) {
34
+ return {
35
+ success: false,
36
+ error: `${req.query.error_description}, read more at: ${req.query.error_uri}`,
37
+ };
38
+ }
39
+ let config;
40
+ try {
41
+ config = await this.getProviderConfig(req);
42
+ }
43
+ catch (error) {
44
+ return { success: false, error: error.message };
45
+ }
46
+ const code = req.query?.code ?? req.body?.code;
47
+ return await this.validateCallbackToken(code, req.scope, config);
48
+ }
49
+ // abstractable
50
+ async verify_(refreshToken, scope) {
51
+ const jwtData = (await jsonwebtoken_1.default.decode(refreshToken, {
52
+ complete: true,
53
+ }));
54
+ const entity_id = jwtData.payload.email;
55
+ let authUser;
56
+ try {
57
+ authUser = await this.authUserSerivce_.retrieveByProviderAndEntityId(entity_id, GoogleProvider.PROVIDER);
58
+ }
59
+ catch (error) {
60
+ if (error.type === utils_1.MedusaError.Types.NOT_FOUND) {
61
+ authUser = await this.authUserSerivce_.create([
62
+ {
63
+ entity_id,
64
+ provider_id: GoogleProvider.PROVIDER,
65
+ user_metadata: jwtData.payload,
66
+ app_metadata: { scope },
67
+ },
68
+ ]);
69
+ }
70
+ else {
71
+ return { success: false, error: error.message };
72
+ }
73
+ }
74
+ return { success: true, authUser };
75
+ }
76
+ // abstractable
77
+ async validateCallbackToken(code, scope, { clientID, callbackURL, clientSecret }) {
78
+ const client = this.getAuthorizationCodeHandler({ clientID, clientSecret });
79
+ const tokenParams = {
80
+ code,
81
+ redirect_uri: callbackURL,
82
+ };
83
+ try {
84
+ const accessToken = await client.getToken(tokenParams);
85
+ return await this.verify_(accessToken.token.id_token, scope);
86
+ }
87
+ catch (error) {
88
+ return { success: false, error: error.message };
89
+ }
90
+ }
91
+ getConfigFromScope(config) {
92
+ const providerConfig = {};
93
+ if (config.clientId) {
94
+ providerConfig.clientID = config.clientId;
95
+ }
96
+ else {
97
+ throw new Error("Google clientID is required");
98
+ }
99
+ if (config.clientSecret) {
100
+ providerConfig.clientSecret = config.clientSecret;
101
+ }
102
+ else {
103
+ throw new Error("Google clientSecret is required");
104
+ }
105
+ if (config.callbackURL) {
106
+ providerConfig.callbackURL = config.callbackUrl;
107
+ }
108
+ else {
109
+ throw new Error("Google callbackUrl is required");
110
+ }
111
+ return providerConfig;
112
+ }
113
+ originalURL(req) {
114
+ const tls = req.connection.encrypted;
115
+ const host = req.headers.host;
116
+ const protocol = tls ? "https" : "http";
117
+ const path = req.url || "";
118
+ return protocol + "://" + host + path;
119
+ }
120
+ async getProviderConfig(req) {
121
+ await this.authProviderService_.retrieve(GoogleProvider.PROVIDER);
122
+ const scopeConfig = this.scopes_[req.scope];
123
+ const config = this.getConfigFromScope(scopeConfig);
124
+ const { callbackURL } = config;
125
+ const parsedCallbackUrl = !url_1.default.parse(callbackURL).protocol
126
+ ? url_1.default.resolve(this.originalURL(req), callbackURL)
127
+ : callbackURL;
128
+ return { ...config, callbackURL: parsedCallbackUrl };
129
+ }
130
+ // Abstractable
131
+ getRedirect({ clientID, callbackURL, clientSecret }) {
132
+ const client = this.getAuthorizationCodeHandler({ clientID, clientSecret });
133
+ const location = client.authorizeURL({
134
+ redirect_uri: callbackURL,
135
+ scope: "email profile",
136
+ });
137
+ return { success: true, location };
138
+ }
139
+ getAuthorizationCodeHandler({ clientID, clientSecret, }) {
140
+ const config = {
141
+ client: {
142
+ id: clientID,
143
+ secret: clientSecret,
144
+ },
145
+ auth: {
146
+ // TODO: abstract to not be google specific
147
+ authorizeHost: "https://accounts.google.com",
148
+ authorizePath: "/o/oauth2/v2/auth",
149
+ tokenHost: "https://www.googleapis.com",
150
+ tokenPath: "/oauth2/v4/token",
151
+ },
152
+ };
153
+ return new simple_oauth2_1.AuthorizationCode(config);
154
+ }
155
+ }
156
+ GoogleProvider.PROVIDER = "google";
157
+ GoogleProvider.DISPLAY_NAME = "Google Authentication";
158
+ exports.default = GoogleProvider;
@@ -0,0 +1,2 @@
1
+ export { default as EmailPasswordProvider } from "./email-password";
2
+ export { default as GoogleProvider } from "./google";
@@ -0,0 +1,10 @@
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.GoogleProvider = exports.EmailPasswordProvider = void 0;
7
+ var email_password_1 = require("./email-password");
8
+ Object.defineProperty(exports, "EmailPasswordProvider", { enumerable: true, get: function () { return __importDefault(email_password_1).default; } });
9
+ var google_1 = require("./google");
10
+ Object.defineProperty(exports, "GoogleProvider", { enumerable: true, get: function () { return __importDefault(google_1).default; } });
@@ -0,0 +1 @@
1
+ export { MikroOrmBaseRepository as BaseRepository } from "@medusajs/utils";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseRepository = void 0;
4
+ var utils_1 = require("@medusajs/utils");
5
+ Object.defineProperty(exports, "BaseRepository", { enumerable: true, get: function () { return utils_1.MikroOrmBaseRepository; } });
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ declare const _default: Promise<void>;
3
+ export default _default;
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ const os_1 = require("os");
28
+ const seed_1 = require("../seed");
29
+ const args = process.argv;
30
+ const path = args.pop();
31
+ exports.default = (async () => {
32
+ const { config } = await Promise.resolve().then(() => __importStar(require("dotenv")));
33
+ config();
34
+ if (!path) {
35
+ throw new Error(`filePath is required.${os_1.EOL}Example: medusa-auth-seed <filePath>`);
36
+ }
37
+ await (0, seed_1.run)({ path });
38
+ })();
@@ -0,0 +1,4 @@
1
+ import { LoaderOptions, ModulesSdkTypes } from "@medusajs/types";
2
+ export declare function run({ options, logger, path, }: Partial<Pick<LoaderOptions<ModulesSdkTypes.ModuleServiceInitializeOptions>, "options" | "logger">> & {
3
+ path: string;
4
+ }): Promise<void>;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.run = void 0;
27
+ const AuthModels = __importStar(require("../models"));
28
+ const utils_1 = require("@medusajs/utils");
29
+ const os_1 = require("os");
30
+ const modules_sdk_1 = require("@medusajs/modules-sdk");
31
+ const path_1 = require("path");
32
+ async function run({ options, logger, path, }) {
33
+ logger ?? (logger = console);
34
+ logger.info(`Loading seed data from ${path}...`);
35
+ const { authenticationData } = await Promise.resolve(`${(0, path_1.resolve)(process.cwd(), path)}`).then(s => __importStar(require(s))).catch((e) => {
36
+ logger?.error(`Failed to load seed data from ${path}. Please, provide a relative path and check that you export the following: authenticationData.${os_1.EOL}${e}`);
37
+ throw e;
38
+ });
39
+ const dbData = utils_1.ModulesSdkUtils.loadDatabaseConfig(modules_sdk_1.Modules.AUTH, options);
40
+ const entities = Object.values(AuthModels);
41
+ const pathToMigrations = __dirname + "/../migrations";
42
+ const orm = await utils_1.DALUtils.mikroOrmCreateConnection(dbData, entities, pathToMigrations);
43
+ const manager = orm.em.fork();
44
+ try {
45
+ logger.info("Seeding authentication data..");
46
+ // TODO: implement authentication seed data
47
+ // await createAuthUsers(manager, authUsersData)
48
+ }
49
+ catch (e) {
50
+ logger.error(`Failed to insert the seed data in the PostgreSQL database ${dbData.clientUrl}.${os_1.EOL}${e}`);
51
+ }
52
+ await orm.close(true);
53
+ }
54
+ exports.run = run;
@@ -0,0 +1,46 @@
1
+ import { AuthenticationInput, AuthenticationResponse, AuthProviderDTO, AuthTypes, AuthUserDTO, Context, CreateAuthProviderDTO, CreateAuthUserDTO, DAL, FilterableAuthProviderProps, FilterableAuthUserProps, FindConfig, InternalModuleDeclaration, MedusaContainer, ModuleJoinerConfig, UpdateAuthUserDTO } from "@medusajs/types";
2
+ import { AbstractAuthModuleProvider } from "@medusajs/utils";
3
+ import { AuthProvider, AuthUser } from "../models";
4
+ import { AuthProviderService, AuthUserService } from ".";
5
+ type InjectedDependencies = {
6
+ baseRepository: DAL.RepositoryService;
7
+ authUserService: AuthUserService<any>;
8
+ authProviderService: AuthProviderService<any>;
9
+ };
10
+ export default class AuthModuleService<TAuthUser extends AuthUser = AuthUser, TAuthProvider extends AuthProvider = AuthProvider> implements AuthTypes.IAuthModuleService {
11
+ protected readonly moduleDeclaration: InternalModuleDeclaration;
12
+ __joinerConfig(): ModuleJoinerConfig;
13
+ __hooks: {
14
+ onApplicationStart: () => Promise<void>;
15
+ };
16
+ protected __container__: MedusaContainer;
17
+ protected baseRepository_: DAL.RepositoryService;
18
+ protected authUserService_: AuthUserService<TAuthUser>;
19
+ protected authProviderService_: AuthProviderService<TAuthProvider>;
20
+ constructor({ authUserService, authProviderService, baseRepository, }: InjectedDependencies, moduleDeclaration: InternalModuleDeclaration);
21
+ retrieveAuthProvider(provider: string, config?: FindConfig<AuthProviderDTO>, sharedContext?: Context): Promise<AuthProviderDTO>;
22
+ listAuthProviders(filters?: FilterableAuthProviderProps, config?: FindConfig<AuthProviderDTO>, sharedContext?: Context): Promise<AuthProviderDTO[]>;
23
+ listAndCountAuthProviders(filters: AuthTypes.FilterableAuthProviderProps | undefined, config: FindConfig<AuthProviderDTO>, sharedContext?: Context): Promise<[AuthTypes.AuthProviderDTO[], number]>;
24
+ createAuthProvider(data: CreateAuthProviderDTO[], sharedContext?: Context): Promise<AuthProviderDTO[]>;
25
+ createAuthProvider(data: CreateAuthProviderDTO, sharedContext?: Context): Promise<AuthProviderDTO>;
26
+ protected createAuthProviders_(data: any[], sharedContext: Context): Promise<TAuthProvider[]>;
27
+ updateAuthProvider(data: AuthTypes.UpdateAuthProviderDTO[], sharedContext?: Context): Promise<AuthProviderDTO[]>;
28
+ updateAuthProvider(data: AuthTypes.UpdateAuthProviderDTO, sharedContext?: Context): Promise<AuthProviderDTO>;
29
+ updateAuthProvider_(data: AuthTypes.UpdateAuthProviderDTO[], sharedContext?: Context): Promise<TAuthProvider[]>;
30
+ deleteAuthProvider(ids: string[], sharedContext?: Context): Promise<void>;
31
+ retrieveAuthUser(id: string, config?: FindConfig<AuthUserDTO>, sharedContext?: Context): Promise<AuthUserDTO>;
32
+ listAuthUsers(filters?: FilterableAuthUserProps, config?: FindConfig<AuthUserDTO>, sharedContext?: Context): Promise<AuthUserDTO[]>;
33
+ listAndCountAuthUsers(filters?: FilterableAuthUserProps, config?: FindConfig<AuthUserDTO>, sharedContext?: Context): Promise<[AuthUserDTO[], number]>;
34
+ createAuthUser(data: CreateAuthUserDTO[], sharedContext?: Context): Promise<AuthUserDTO[]>;
35
+ createAuthUser(data: CreateAuthUserDTO, sharedContext?: Context): Promise<AuthUserDTO>;
36
+ protected createAuthUsers_(data: CreateAuthUserDTO[], sharedContext: Context): Promise<TAuthUser[]>;
37
+ updateAuthUser(data: UpdateAuthUserDTO[], sharedContext?: Context): Promise<AuthUserDTO[]>;
38
+ updateAuthUser(data: UpdateAuthUserDTO, sharedContext?: Context): Promise<AuthUserDTO>;
39
+ protected updateAuthUsers_(data: UpdateAuthUserDTO[], sharedContext: Context): Promise<TAuthUser[]>;
40
+ deleteAuthUser(ids: string[], sharedContext?: Context): Promise<void>;
41
+ protected getRegisteredAuthenticationProvider(provider: string, { scope }: AuthenticationInput): AbstractAuthModuleProvider;
42
+ authenticate(provider: string, authenticationData: AuthenticationInput): Promise<AuthenticationResponse>;
43
+ validateCallback(provider: string, authenticationData: AuthenticationInput): Promise<AuthenticationResponse>;
44
+ private createProvidersOnLoad;
45
+ }
46
+ export {};
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const utils_1 = require("@medusajs/utils");
16
+ const joiner_config_1 = require("../joiner-config");
17
+ class AuthModuleService {
18
+ __joinerConfig() {
19
+ return joiner_config_1.joinerConfig;
20
+ }
21
+ constructor({ authUserService, authProviderService, baseRepository, }, moduleDeclaration) {
22
+ this.moduleDeclaration = moduleDeclaration;
23
+ this.__hooks = {
24
+ onApplicationStart: async () => await this.createProvidersOnLoad(),
25
+ };
26
+ this.__container__ = arguments[0];
27
+ this.baseRepository_ = baseRepository;
28
+ this.authUserService_ = authUserService;
29
+ this.authProviderService_ = authProviderService;
30
+ }
31
+ async retrieveAuthProvider(provider, config = {}, sharedContext = {}) {
32
+ const authProvider = await this.authProviderService_.retrieve(provider, config, sharedContext);
33
+ return await this.baseRepository_.serialize(authProvider, { populate: true });
34
+ }
35
+ async listAuthProviders(filters = {}, config = {}, sharedContext = {}) {
36
+ const authProviders = await this.authProviderService_.list(filters, config, sharedContext);
37
+ return await this.baseRepository_.serialize(authProviders, { populate: true });
38
+ }
39
+ async listAndCountAuthProviders(filters = {}, config, sharedContext = {}) {
40
+ const [authProviders, count] = await this.authProviderService_.listAndCount(filters, config, sharedContext);
41
+ return [
42
+ await this.baseRepository_.serialize(authProviders, { populate: true }),
43
+ count,
44
+ ];
45
+ }
46
+ async createAuthProvider(data, sharedContext = {}) {
47
+ const input = Array.isArray(data) ? data : [data];
48
+ const providers = await this.createAuthProviders_(input, sharedContext);
49
+ const serializedProviders = await this.baseRepository_.serialize(providers, {
50
+ populate: true,
51
+ });
52
+ return Array.isArray(data) ? serializedProviders : serializedProviders[0];
53
+ }
54
+ async createAuthProviders_(data, sharedContext) {
55
+ return await this.authProviderService_.create(data, sharedContext);
56
+ }
57
+ async updateAuthProvider(data, sharedContext = {}) {
58
+ const input = Array.isArray(data) ? data : [data];
59
+ const providers = await this.updateAuthProvider_(input, sharedContext);
60
+ const serializedProviders = await this.baseRepository_.serialize(providers, {
61
+ populate: true,
62
+ });
63
+ return Array.isArray(data) ? serializedProviders : serializedProviders[0];
64
+ }
65
+ async updateAuthProvider_(data, sharedContext = {}) {
66
+ return await this.authProviderService_.update(data, sharedContext);
67
+ }
68
+ async deleteAuthProvider(ids, sharedContext = {}) {
69
+ await this.authProviderService_.delete(ids, sharedContext);
70
+ }
71
+ async retrieveAuthUser(id, config = {}, sharedContext = {}) {
72
+ const authUser = await this.authUserService_.retrieve(id, config, sharedContext);
73
+ return await this.baseRepository_.serialize(authUser, {
74
+ exclude: ["password_hash"],
75
+ });
76
+ }
77
+ async listAuthUsers(filters = {}, config = {}, sharedContext = {}) {
78
+ const authUsers = await this.authUserService_.list(filters, config, sharedContext);
79
+ return await this.baseRepository_.serialize(authUsers, {
80
+ populate: true,
81
+ });
82
+ }
83
+ async listAndCountAuthUsers(filters = {}, config = {}, sharedContext = {}) {
84
+ const [authUsers, count] = await this.authUserService_.listAndCount(filters, config, sharedContext);
85
+ return [
86
+ await this.baseRepository_.serialize(authUsers, {
87
+ populate: true,
88
+ }),
89
+ count,
90
+ ];
91
+ }
92
+ async createAuthUser(data, sharedContext = {}) {
93
+ const input = Array.isArray(data) ? data : [data];
94
+ const authUsers = await this.createAuthUsers_(input, sharedContext);
95
+ const serializedUsers = await this.baseRepository_.serialize(authUsers, {
96
+ populate: true,
97
+ });
98
+ return Array.isArray(data) ? serializedUsers : serializedUsers[0];
99
+ }
100
+ async createAuthUsers_(data, sharedContext) {
101
+ return await this.authUserService_.create(data, sharedContext);
102
+ }
103
+ async updateAuthUser(data, sharedContext = {}) {
104
+ const input = Array.isArray(data) ? data : [data];
105
+ const updatedUsers = await this.updateAuthUsers_(input, sharedContext);
106
+ const serializedUsers = await this.baseRepository_.serialize(updatedUsers, {
107
+ populate: true,
108
+ });
109
+ return Array.isArray(data) ? serializedUsers : serializedUsers[0];
110
+ }
111
+ async updateAuthUsers_(data, sharedContext) {
112
+ return await this.authUserService_.update(data, sharedContext);
113
+ }
114
+ async deleteAuthUser(ids, sharedContext = {}) {
115
+ await this.authUserService_.delete(ids, sharedContext);
116
+ }
117
+ getRegisteredAuthenticationProvider(provider, { scope }) {
118
+ let containerProvider;
119
+ try {
120
+ containerProvider = this.__container__[`auth_provider_${provider}`];
121
+ }
122
+ catch (error) {
123
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `AuthenticationProvider with for provider: ${provider} wasn't registered in the module. Have you configured your options correctly?`);
124
+ }
125
+ containerProvider.validateScope(scope);
126
+ return containerProvider;
127
+ }
128
+ async authenticate(provider, authenticationData) {
129
+ try {
130
+ await this.retrieveAuthProvider(provider, {});
131
+ const registeredProvider = this.getRegisteredAuthenticationProvider(provider, authenticationData);
132
+ return await registeredProvider.authenticate(authenticationData);
133
+ }
134
+ catch (error) {
135
+ return { success: false, error: error.message };
136
+ }
137
+ }
138
+ async validateCallback(provider, authenticationData) {
139
+ try {
140
+ await this.retrieveAuthProvider(provider, {});
141
+ const registeredProvider = this.getRegisteredAuthenticationProvider(provider, authenticationData);
142
+ return await registeredProvider.validateCallback(authenticationData);
143
+ }
144
+ catch (error) {
145
+ return { success: false, error: error.message };
146
+ }
147
+ }
148
+ async createProvidersOnLoad() {
149
+ const providersToLoad = this.__container__["auth_providers"];
150
+ const providers = await this.authProviderService_.list({
151
+ provider: providersToLoad.map((p) => p.provider),
152
+ });
153
+ const loadedProvidersMap = new Map(providers.map((p) => [p.provider, p]));
154
+ const providersToCreate = [];
155
+ for (const provider of providersToLoad) {
156
+ if (loadedProvidersMap.has(provider.provider)) {
157
+ continue;
158
+ }
159
+ providersToCreate.push({
160
+ provider: provider.provider,
161
+ name: provider.displayName,
162
+ });
163
+ }
164
+ await this.authProviderService_.create(providersToCreate);
165
+ }
166
+ }
167
+ exports.default = AuthModuleService;
168
+ __decorate([
169
+ __param(2, (0, utils_1.MedusaContext)()),
170
+ __metadata("design:type", Function),
171
+ __metadata("design:paramtypes", [String, Object, Object]),
172
+ __metadata("design:returntype", Promise)
173
+ ], AuthModuleService.prototype, "retrieveAuthProvider", null);
174
+ __decorate([
175
+ __param(2, (0, utils_1.MedusaContext)()),
176
+ __metadata("design:type", Function),
177
+ __metadata("design:paramtypes", [Object, Object, Object]),
178
+ __metadata("design:returntype", Promise)
179
+ ], AuthModuleService.prototype, "listAuthProviders", null);
180
+ __decorate([
181
+ (0, utils_1.InjectManager)("baseRepository_"),
182
+ __param(2, (0, utils_1.MedusaContext)()),
183
+ __metadata("design:type", Function),
184
+ __metadata("design:paramtypes", [Object, Object, Object]),
185
+ __metadata("design:returntype", Promise)
186
+ ], AuthModuleService.prototype, "listAndCountAuthProviders", null);
187
+ __decorate([
188
+ (0, utils_1.InjectManager)("baseRepository_"),
189
+ __param(1, (0, utils_1.MedusaContext)()),
190
+ __metadata("design:type", Function),
191
+ __metadata("design:paramtypes", [Object, Object]),
192
+ __metadata("design:returntype", Promise)
193
+ ], AuthModuleService.prototype, "createAuthProvider", null);
194
+ __decorate([
195
+ (0, utils_1.InjectTransactionManager)("baseRepository_"),
196
+ __param(1, (0, utils_1.MedusaContext)()),
197
+ __metadata("design:type", Function),
198
+ __metadata("design:paramtypes", [Array, Object]),
199
+ __metadata("design:returntype", Promise)
200
+ ], AuthModuleService.prototype, "createAuthProviders_", null);
201
+ __decorate([
202
+ (0, utils_1.InjectManager)("baseRepository_"),
203
+ __param(1, (0, utils_1.MedusaContext)()),
204
+ __metadata("design:type", Function),
205
+ __metadata("design:paramtypes", [Object, Object]),
206
+ __metadata("design:returntype", Promise)
207
+ ], AuthModuleService.prototype, "updateAuthProvider", null);
208
+ __decorate([
209
+ __param(1, (0, utils_1.MedusaContext)()),
210
+ __metadata("design:type", Function),
211
+ __metadata("design:paramtypes", [Array, Object]),
212
+ __metadata("design:returntype", Promise)
213
+ ], AuthModuleService.prototype, "updateAuthProvider_", null);
214
+ __decorate([
215
+ (0, utils_1.InjectTransactionManager)("baseRepository_"),
216
+ __param(1, (0, utils_1.MedusaContext)()),
217
+ __metadata("design:type", Function),
218
+ __metadata("design:paramtypes", [Array, Object]),
219
+ __metadata("design:returntype", Promise)
220
+ ], AuthModuleService.prototype, "deleteAuthProvider", null);
221
+ __decorate([
222
+ (0, utils_1.InjectManager)("baseRepository_"),
223
+ __param(2, (0, utils_1.MedusaContext)()),
224
+ __metadata("design:type", Function),
225
+ __metadata("design:paramtypes", [String, Object, Object]),
226
+ __metadata("design:returntype", Promise)
227
+ ], AuthModuleService.prototype, "retrieveAuthUser", null);
228
+ __decorate([
229
+ (0, utils_1.InjectManager)("baseRepository_"),
230
+ __param(2, (0, utils_1.MedusaContext)()),
231
+ __metadata("design:type", Function),
232
+ __metadata("design:paramtypes", [Object, Object, Object]),
233
+ __metadata("design:returntype", Promise)
234
+ ], AuthModuleService.prototype, "listAuthUsers", null);
235
+ __decorate([
236
+ (0, utils_1.InjectManager)("baseRepository_"),
237
+ __param(2, (0, utils_1.MedusaContext)()),
238
+ __metadata("design:type", Function),
239
+ __metadata("design:paramtypes", [Object, Object, Object]),
240
+ __metadata("design:returntype", Promise)
241
+ ], AuthModuleService.prototype, "listAndCountAuthUsers", null);
242
+ __decorate([
243
+ (0, utils_1.InjectManager)("baseRepository_"),
244
+ __param(1, (0, utils_1.MedusaContext)()),
245
+ __metadata("design:type", Function),
246
+ __metadata("design:paramtypes", [Object, Object]),
247
+ __metadata("design:returntype", Promise)
248
+ ], AuthModuleService.prototype, "createAuthUser", null);
249
+ __decorate([
250
+ (0, utils_1.InjectTransactionManager)("baseRepository_"),
251
+ __param(1, (0, utils_1.MedusaContext)()),
252
+ __metadata("design:type", Function),
253
+ __metadata("design:paramtypes", [Array, Object]),
254
+ __metadata("design:returntype", Promise)
255
+ ], AuthModuleService.prototype, "createAuthUsers_", null);
256
+ __decorate([
257
+ (0, utils_1.InjectManager)("baseRepository_"),
258
+ __param(1, (0, utils_1.MedusaContext)()),
259
+ __metadata("design:type", Function),
260
+ __metadata("design:paramtypes", [Object, Object]),
261
+ __metadata("design:returntype", Promise)
262
+ ], AuthModuleService.prototype, "updateAuthUser", null);
263
+ __decorate([
264
+ (0, utils_1.InjectTransactionManager)("baseRepository_"),
265
+ __param(1, (0, utils_1.MedusaContext)()),
266
+ __metadata("design:type", Function),
267
+ __metadata("design:paramtypes", [Array, Object]),
268
+ __metadata("design:returntype", Promise)
269
+ ], AuthModuleService.prototype, "updateAuthUsers_", null);
270
+ __decorate([
271
+ (0, utils_1.InjectTransactionManager)("baseRepository_"),
272
+ __param(1, (0, utils_1.MedusaContext)()),
273
+ __metadata("design:type", Function),
274
+ __metadata("design:paramtypes", [Array, Object]),
275
+ __metadata("design:returntype", Promise)
276
+ ], AuthModuleService.prototype, "deleteAuthUser", null);
@@ -0,0 +1,18 @@
1
+ import { DAL } from "@medusajs/types";
2
+ import { ModulesSdkUtils } from "@medusajs/utils";
3
+ import { AuthProvider } from "../models";
4
+ import { ServiceTypes } from "../types";
5
+ type InjectedDependencies = {
6
+ authProviderRepository: DAL.RepositoryService;
7
+ };
8
+ declare const AuthProviderService_base: new <TEntity_1 extends object = any>(container: InjectedDependencies) => ModulesSdkUtils.AbstractService<TEntity_1, InjectedDependencies, {
9
+ create: ServiceTypes.CreateAuthProviderDTO;
10
+ update: ServiceTypes.UpdateAuthProviderDTO;
11
+ }, {
12
+ list?: any;
13
+ listAndCount?: any;
14
+ }>;
15
+ export default class AuthProviderService<TEntity extends AuthProvider = AuthProvider> extends AuthProviderService_base<TEntity> {
16
+ constructor(container: InjectedDependencies);
17
+ }
18
+ export {};
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/utils");
4
+ const _models_1 = require("../models");
5
+ class AuthProviderService extends utils_1.ModulesSdkUtils.abstractServiceFactory(_models_1.AuthProvider) {
6
+ constructor(container) {
7
+ // @ts-ignore
8
+ super(...arguments);
9
+ }
10
+ }
11
+ exports.default = AuthProviderService;
@@ -0,0 +1,19 @@
1
+ import { AuthTypes, Context, DAL, FindConfig } from "@medusajs/types";
2
+ import { ModulesSdkUtils } from "@medusajs/utils";
3
+ import { AuthUser } from "../models";
4
+ import { ServiceTypes, RepositoryTypes } from "../types";
5
+ type InjectedDependencies = {
6
+ authUserRepository: DAL.RepositoryService;
7
+ };
8
+ declare const AuthUserService_base: new <TEntity_1 extends object = any>(container: InjectedDependencies) => ModulesSdkUtils.AbstractService<TEntity_1, InjectedDependencies, {
9
+ create: ServiceTypes.CreateAuthUserDTO;
10
+ }, {
11
+ list?: any;
12
+ listAndCount?: any;
13
+ }>;
14
+ export default class AuthUserService<TEntity extends AuthUser = AuthUser> extends AuthUserService_base<TEntity> {
15
+ protected readonly authUserRepository_: RepositoryTypes.IAuthUserRepository<TEntity>;
16
+ constructor(container: InjectedDependencies);
17
+ retrieveByProviderAndEntityId<TEntityMethod = AuthTypes.AuthUserDTO>(entityId: string, provider: string, config?: FindConfig<TEntityMethod>, sharedContext?: Context): Promise<TEntity>;
18
+ }
19
+ export {};