@sgftech/medusa-plugin-marketplace-v2 0.1.26

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 (222) hide show
  1. package/.babelrc.js +12 -0
  2. package/.eslintrc.js +68 -0
  3. package/.vscode/settings.json +2 -0
  4. package/.yarnrc.yml +1 -0
  5. package/README.md +70 -0
  6. package/SECURITY.md +21 -0
  7. package/data/seed-onboarding.json +141 -0
  8. package/data/seed.json +1006 -0
  9. package/dist/api/middlewares/authenticate-user.d.ts +15 -0
  10. package/dist/api/middlewares/authenticate-user.js +212 -0
  11. package/dist/api/middlewares/authenticate-user.js.map +1 -0
  12. package/dist/api/middlewares/logged-in-user-v2.d.ts +3 -0
  13. package/dist/api/middlewares/logged-in-user-v2.js +69 -0
  14. package/dist/api/middlewares/logged-in-user-v2.js.map +1 -0
  15. package/dist/api/middlewares/logged-in-user.d.ts +1 -0
  16. package/dist/api/middlewares/logged-in-user.js +18 -0
  17. package/dist/api/middlewares/logged-in-user.js.map +1 -0
  18. package/dist/api/routes/admin/create-product.d.ts +1 -0
  19. package/dist/api/routes/admin/create-product.js +19 -0
  20. package/dist/api/routes/admin/create-product.js.map +1 -0
  21. package/dist/api/routes/admin/create-store.d.ts +1 -0
  22. package/dist/api/routes/admin/create-store.js +19 -0
  23. package/dist/api/routes/admin/create-store.js.map +1 -0
  24. package/dist/api/routes/admin/create-user.d.ts +1 -0
  25. package/dist/api/routes/admin/create-user.js +19 -0
  26. package/dist/api/routes/admin/create-user.js.map +1 -0
  27. package/dist/index.d.ts +0 -0
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/migrations/1629000000000-create-workflow-table.d.ts +5 -0
  31. package/dist/migrations/1629000000000-create-workflow-table.js +29 -0
  32. package/dist/migrations/1629000000000-create-workflow-table.js.map +1 -0
  33. package/dist/migrations/1629000000001-workflow-table-stage.d.ts +5 -0
  34. package/dist/migrations/1629000000001-workflow-table-stage.js +48 -0
  35. package/dist/migrations/1629000000001-workflow-table-stage.js.map +1 -0
  36. package/dist/migrations/1632467997443-workflow-requests.d.ts +5 -0
  37. package/dist/migrations/1632467997443-workflow-requests.js +48 -0
  38. package/dist/migrations/1632467997443-workflow-requests.js.map +1 -0
  39. package/dist/migrations/1632468000000-update-workflow-keys-table.d.ts +5 -0
  40. package/dist/migrations/1632468000000-update-workflow-keys-table.js +31 -0
  41. package/dist/migrations/1632468000000-update-workflow-keys-table.js.map +1 -0
  42. package/dist/migrations/1632470000000-add-approvers-to-workflow-stage.d.ts +5 -0
  43. package/dist/migrations/1632470000000-add-approvers-to-workflow-stage.js +52 -0
  44. package/dist/migrations/1632470000000-add-approvers-to-workflow-stage.js.map +1 -0
  45. package/dist/migrations/1632471000000-update-user-table-for-approvers.d.ts +5 -0
  46. package/dist/migrations/1632471000000-update-user-table-for-approvers.js +43 -0
  47. package/dist/migrations/1632471000000-update-user-table-for-approvers.js.map +1 -0
  48. package/dist/migrations/1632472000000-update-workflow-request-table-for-approvals.d.ts +5 -0
  49. package/dist/migrations/1632472000000-update-workflow-request-table-for-approvals.js +43 -0
  50. package/dist/migrations/1632472000000-update-workflow-request-table-for-approvals.js.map +1 -0
  51. package/dist/migrations/1632473000000-create-approval-table.d.ts +5 -0
  52. package/dist/migrations/1632473000000-create-approval-table.js +54 -0
  53. package/dist/migrations/1632473000000-create-approval-table.js.map +1 -0
  54. package/dist/migrations/1652101349791-order.migration.d.ts +6 -0
  55. package/dist/migrations/1652101349791-order.migration.js +26 -0
  56. package/dist/migrations/1652101349791-order.migration.js.map +1 -0
  57. package/dist/migrations/1655123458263-invite.migration.d.ts +6 -0
  58. package/dist/migrations/1655123458263-invite.migration.js +23 -0
  59. package/dist/migrations/1655123458263-invite.migration.js.map +1 -0
  60. package/dist/migrations/1655131148363-role.migration.d.ts +6 -0
  61. package/dist/migrations/1655131148363-role.migration.js +32 -0
  62. package/dist/migrations/1655131148363-role.migration.js.map +1 -0
  63. package/dist/migrations/1655131601491-permission.migration.d.ts +6 -0
  64. package/dist/migrations/1655131601491-permission.migration.js +47 -0
  65. package/dist/migrations/1655131601491-permission.migration.js.map +1 -0
  66. package/dist/migrations/1655132360987-user.migration.d.ts +6 -0
  67. package/dist/migrations/1655132360987-user.migration.js +29 -0
  68. package/dist/migrations/1655132360987-user.migration.js.map +1 -0
  69. package/dist/migrations/1666588571522-user.migration.d.ts +6 -0
  70. package/dist/migrations/1666588571522-user.migration.js +27 -0
  71. package/dist/migrations/1666588571522-user.migration.js.map +1 -0
  72. package/dist/migrations/1666588577183-store.migration.d.ts +6 -0
  73. package/dist/migrations/1666588577183-store.migration.js +26 -0
  74. package/dist/migrations/1666588577183-store.migration.js.map +1 -0
  75. package/dist/migrations/1667045765051-customer.migration.d.ts +6 -0
  76. package/dist/migrations/1667045765051-customer.migration.js +33 -0
  77. package/dist/migrations/1667045765051-customer.migration.js.map +1 -0
  78. package/dist/migrations/1683175918497-add-user-stores.migration.d.ts +6 -0
  79. package/dist/migrations/1683175918497-add-user-stores.migration.js +60 -0
  80. package/dist/migrations/1683175918497-add-user-stores.migration.js.map +1 -0
  81. package/dist/migrations/1683177500538-add-product-store-id.migration.d.ts +6 -0
  82. package/dist/migrations/1683177500538-add-product-store-id.migration.js +53 -0
  83. package/dist/migrations/1683177500538-add-product-store-id.migration.js.map +1 -0
  84. package/dist/migrations/address.migration.d.ts +6 -0
  85. package/dist/migrations/address.migration.js +25 -0
  86. package/dist/migrations/address.migration.js.map +1 -0
  87. package/dist/migrations/product.migration.d.ts +6 -0
  88. package/dist/migrations/product.migration.js +21 -0
  89. package/dist/migrations/product.migration.js.map +1 -0
  90. package/dist/migrations/stage-status.d.ts +5 -0
  91. package/dist/migrations/stage-status.js +22 -0
  92. package/dist/migrations/stage-status.js.map +1 -0
  93. package/dist/migrations/user.migration.d.ts +6 -0
  94. package/dist/migrations/user.migration.js +21 -0
  95. package/dist/migrations/user.migration.js.map +1 -0
  96. package/dist/models/address.d.ts +3 -0
  97. package/dist/models/address.js +18 -0
  98. package/dist/models/address.js.map +1 -0
  99. package/dist/models/customer.d.ts +9 -0
  100. package/dist/models/customer.js +49 -0
  101. package/dist/models/customer.js.map +1 -0
  102. package/dist/models/invite.d.ts +6 -0
  103. package/dist/models/invite.js +32 -0
  104. package/dist/models/invite.js.map +1 -0
  105. package/dist/models/order.d.ts +9 -0
  106. package/dist/models/order.js +48 -0
  107. package/dist/models/order.js.map +1 -0
  108. package/dist/models/permission.d.ts +8 -0
  109. package/dist/models/permission.js +56 -0
  110. package/dist/models/permission.js.map +1 -0
  111. package/dist/models/product.d.ts +5 -0
  112. package/dist/models/product.js +43 -0
  113. package/dist/models/product.js.map +1 -0
  114. package/dist/models/role.d.ts +12 -0
  115. package/dist/models/role.js +68 -0
  116. package/dist/models/role.js.map +1 -0
  117. package/dist/models/setting.d.ts +69 -0
  118. package/dist/models/setting.js +46 -0
  119. package/dist/models/setting.js.map +1 -0
  120. package/dist/models/store.d.ts +15 -0
  121. package/dist/models/store.js +85 -0
  122. package/dist/models/store.js.map +1 -0
  123. package/dist/models/user.d.ts +15 -0
  124. package/dist/models/user.js +76 -0
  125. package/dist/models/user.js.map +1 -0
  126. package/dist/models/workflow-approval.d.ts +8 -0
  127. package/dist/models/workflow-approval.js +37 -0
  128. package/dist/models/workflow-approval.js.map +1 -0
  129. package/dist/models/workflow-requests.d.ts +9 -0
  130. package/dist/models/workflow-requests.js +42 -0
  131. package/dist/models/workflow-requests.js.map +1 -0
  132. package/dist/models/workflow-stage.d.ts +8 -0
  133. package/dist/models/workflow-stage.js +38 -0
  134. package/dist/models/workflow-stage.js.map +1 -0
  135. package/dist/models/workflow.d.ts +8 -0
  136. package/dist/models/workflow.js +37 -0
  137. package/dist/models/workflow.js.map +1 -0
  138. package/dist/repositories/address.d.ts +7 -0
  139. package/dist/repositories/address.js +11 -0
  140. package/dist/repositories/address.js.map +1 -0
  141. package/dist/repositories/currency.d.ts +7 -0
  142. package/dist/repositories/currency.js +11 -0
  143. package/dist/repositories/currency.js.map +1 -0
  144. package/dist/repositories/customer.d.ts +12 -0
  145. package/dist/repositories/customer.js +11 -0
  146. package/dist/repositories/customer.js.map +1 -0
  147. package/dist/repositories/invite.d.ts +7 -0
  148. package/dist/repositories/invite.js +11 -0
  149. package/dist/repositories/invite.js.map +1 -0
  150. package/dist/repositories/order.d.ts +9 -0
  151. package/dist/repositories/order.js +11 -0
  152. package/dist/repositories/order.js.map +1 -0
  153. package/dist/repositories/permission.d.ts +3 -0
  154. package/dist/repositories/permission.js +8 -0
  155. package/dist/repositories/permission.js.map +1 -0
  156. package/dist/repositories/product.d.ts +43 -0
  157. package/dist/repositories/product.js +11 -0
  158. package/dist/repositories/product.js.map +1 -0
  159. package/dist/repositories/role.d.ts +3 -0
  160. package/dist/repositories/role.js +8 -0
  161. package/dist/repositories/role.js.map +1 -0
  162. package/dist/repositories/store.d.ts +7 -0
  163. package/dist/repositories/store.js +11 -0
  164. package/dist/repositories/store.js.map +1 -0
  165. package/dist/repositories/user.d.ts +7 -0
  166. package/dist/repositories/user.js +11 -0
  167. package/dist/repositories/user.js.map +1 -0
  168. package/dist/services/currency.d.ts +24 -0
  169. package/dist/services/currency.js +49 -0
  170. package/dist/services/currency.js.map +1 -0
  171. package/dist/services/customer.d.ts +34 -0
  172. package/dist/services/customer.js +137 -0
  173. package/dist/services/customer.js.map +1 -0
  174. package/dist/services/process-constant.d.ts +17 -0
  175. package/dist/services/process-constant.js +27 -0
  176. package/dist/services/process-constant.js.map +1 -0
  177. package/dist/services/product.d.ts +121 -0
  178. package/dist/services/product.js +382 -0
  179. package/dist/services/product.js.map +1 -0
  180. package/dist/services/region.d.ts +42 -0
  181. package/dist/services/region.js +190 -0
  182. package/dist/services/region.js.map +1 -0
  183. package/dist/services/store.d.ts +98 -0
  184. package/dist/services/store.js +607 -0
  185. package/dist/services/store.js.map +1 -0
  186. package/dist/services/user.d.ts +74 -0
  187. package/dist/services/user.js +356 -0
  188. package/dist/services/user.js.map +1 -0
  189. package/dist/services/workflow-request.d.ts +14 -0
  190. package/dist/services/workflow-request.js +100 -0
  191. package/dist/services/workflow-request.js.map +1 -0
  192. package/dist/services/workflow-stage.d.ts +19 -0
  193. package/dist/services/workflow-stage.js +46 -0
  194. package/dist/services/workflow-stage.js.map +1 -0
  195. package/dist/services/workflow.d.ts +22 -0
  196. package/dist/services/workflow.js +108 -0
  197. package/dist/services/workflow.js.map +1 -0
  198. package/dist/subscribers/customer.d.ts +5 -0
  199. package/dist/subscribers/customer.js +20 -0
  200. package/dist/subscribers/customer.js.map +1 -0
  201. package/dist/subscribers/product.d.ts +11 -0
  202. package/dist/subscribers/product.js +30 -0
  203. package/dist/subscribers/product.js.map +1 -0
  204. package/dist/subscribers/store.d.ts +25 -0
  205. package/dist/subscribers/store.js +54 -0
  206. package/dist/subscribers/store.js.map +1 -0
  207. package/dist/subscribers/user.d.ts +16 -0
  208. package/dist/subscribers/user.js +62 -0
  209. package/dist/subscribers/user.js.map +1 -0
  210. package/dist/types/global.d.ts +1 -0
  211. package/dist/types/global.js +3 -0
  212. package/dist/types/global.js.map +1 -0
  213. package/dist/types/oidc-types.d.ts +13 -0
  214. package/dist/types/oidc-types.js +3 -0
  215. package/dist/types/oidc-types.js.map +1 -0
  216. package/index.js +50 -0
  217. package/package.json +105 -0
  218. package/tsconfig.admin.json +8 -0
  219. package/tsconfig.json +33 -0
  220. package/tsconfig.server.json +8 -0
  221. package/tsconfig.spec.json +5 -0
  222. package/yarn-error.log +12869 -0
@@ -0,0 +1,607 @@
1
+ "use strict";
2
+ /* eslint-disable valid-jsdoc */
3
+ /* eslint-disable max-len */
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const awilix_1 = require("awilix");
9
+ const services_1 = require("@medusajs/medusa/dist/services");
10
+ const store_1 = require("../models/store");
11
+ const medusa_1 = require("@medusajs/medusa");
12
+ const medusa_core_utils_1 = require("medusa-core-utils");
13
+ const process_constant_1 = require("./process-constant");
14
+ const currency_1 = __importDefault(require("./currency"));
15
+ const lodash_1 = __importDefault(require("lodash"));
16
+ class StoreService extends services_1.StoreService {
17
+ constructor(container, configModule, defaultStore) {
18
+ super(container);
19
+ this.container = container;
20
+ this.manager = container.manager;
21
+ this.logger = container.logger;
22
+ this.configModule = configModule;
23
+ this.storeRepository_ = container.storeRepository;
24
+ this.eventBus_ = container.eventBusService;
25
+ this.currencyService = container.currencyService;
26
+ this.defaultStore = defaultStore;
27
+ this.loggedInUser = Object.keys(container).includes("loggedInUser")
28
+ ? container.loggedInUser
29
+ : undefined;
30
+ this.defaultAdmin = Object.keys(container).includes("defaultAdmin")
31
+ ? container.defaultAdmin
32
+ : undefined;
33
+ const setDefaultAdmin = async (data) => {
34
+ if (data.process == process_constant_1.ProcessConstantService.process_signature) {
35
+ this.defaultAdmin = data.user;
36
+ this.eventBus_.unsubscribe("medusa.default.admin.registered", setDefaultAdmin, {
37
+ subscriberId: "medusa.default.admin.registered"
38
+ });
39
+ }
40
+ };
41
+ this.eventBus_.subscribe("medusa.default.admin.registered", setDefaultAdmin);
42
+ }
43
+ withTransaction(transactionManager) {
44
+ if (!transactionManager) {
45
+ return this;
46
+ }
47
+ const cloned = new StoreService({
48
+ manager: transactionManager,
49
+ storeRepository: this.storeRepository_,
50
+ currencyRepository: this.currencyRepository_,
51
+ eventBusService: this.eventBus_,
52
+ logger: this.logger,
53
+ defaultAdmin: this.defaultAdmin,
54
+ loggedInUser: this.loggedInUser,
55
+ currencyService: this.currencyService
56
+ }, this.configModule, this.defaultStore);
57
+ cloned.transactionManager_ = transactionManager;
58
+ return cloned;
59
+ }
60
+ /* @OnMedusaEntityEvent.After.Insert(User, { async: true })
61
+ public async createStoreForNewUser(
62
+ params: MedusaEventHandlerParams<User, "Insert">,
63
+ ): Promise<EntityEventType<User, "Insert">> {
64
+ const { event } = params;
65
+ const user = event.entity;
66
+ let storeId = Object.keys(this.container).includes("loggedInUser") ?
67
+ this.container.loggedInUser.store_id :
68
+ null;
69
+ if (storeId) {
70
+ return event;
71
+ }
72
+
73
+ const existingStoreInAccount = await this.retrieveStoreInAccount();
74
+ if (existingStoreInAccount && !storeId) {
75
+ if (!existingStoreInAccount.members) {
76
+ throw new Error("Store created without admin user");
77
+ } else {
78
+ existingStoreInAccount.members.push(user);
79
+ this.manager.save(existingStoreInAccount);
80
+ }
81
+ } else if (!storeId && user.role == UserRoles.ADMIN) {
82
+ const createdStore = (await this.create()) as Store;
83
+ storeId = createdStore.id;
84
+ } else {
85
+ throw new Error("Attempting to create store for non admin user");
86
+ }
87
+
88
+
89
+ user.store_id = storeId;
90
+ event.manager.save(user);
91
+
92
+ return event;
93
+ }
94
+ */
95
+ async attachExternalAccountToStoreAfterUpdate(event) {
96
+ const user = event.entity;
97
+ await this.attachStoreToExternalAccount(user, event);
98
+ return event;
99
+ }
100
+ async attachStoreToExternalAccount(user, event) {
101
+ var _a, _b;
102
+ if (((_b = (_a = user.stores) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) == 0) {
103
+ console.log(`user ${user.email} is not attached to store`);
104
+ return;
105
+ }
106
+ const ids = user.stores.map((store) => {
107
+ return {
108
+ id: store.id
109
+ };
110
+ });
111
+ const stores = await this.manager.find(store_1.Store, {
112
+ where: ids
113
+ });
114
+ stores.map((store) => {
115
+ store.externalAccountId = event.entity.externalAccountId;
116
+ store.externalProviderId = event.entity.externalProviderId;
117
+ });
118
+ const result = await this.manager.save(stores);
119
+ return result;
120
+ }
121
+ async attachExternalAccountToStore(event) {
122
+ const user = event.entity;
123
+ await this.attachStoreToExternalAccount(user, event);
124
+ return event;
125
+ }
126
+ /*
127
+ @OnMedusaEntityEvent.Before.Insert(Invite, { async: true })
128
+ public async addStoreToInvite(
129
+ params: MedusaEventHandlerParams<Invite, "Insert">
130
+ ): Promise<EntityEventType<Invite, "Insert">> {
131
+ const { event } = params;
132
+ const stores = this.container.loggedInUser.stores;
133
+
134
+ if (!event.entity.store_id && stores?.length>0) {
135
+ event.entity.store_id = store_id;
136
+ }
137
+
138
+ return event;
139
+ }
140
+
141
+ */
142
+ /** Create a store for a particular user. It mainly used from the event BeforeInsert to create a store
143
+ * for the user that is being inserting.
144
+ * @param user
145
+ */
146
+ /* public async createForUser(user: User): Promise<Store | void> {
147
+ if (user.stores?.length>0) {
148
+ return;
149
+ }
150
+ const storeRepo = this.activeManager_.withRepository(
151
+ this.storeRepository_
152
+ );
153
+ const store = storeRepo.create() as Store;
154
+ return storeRepo.save(store);
155
+ }*/
156
+ /**
157
+ * Return the store that belongs to the authenticated user.
158
+ * @param relations
159
+ */
160
+ async retrieve(config) {
161
+ if (config) {
162
+ return await this.retrieveRelations(config.relations);
163
+ }
164
+ else {
165
+ return await this.retrieveRelations();
166
+ }
167
+ }
168
+ async retrieveByStoreIdOrName(storeId, config) {
169
+ if (config) {
170
+ return (await this.retrieveRelationsByStoreId(storeId, config.relations));
171
+ }
172
+ else {
173
+ return (await this.retrieveRelationsByStoreId(storeId));
174
+ }
175
+ }
176
+ /**
177
+ * Return the store that belongs to the account.
178
+ * @param relations
179
+ * @account Id
180
+ */
181
+ async retrieveRelationsByStoreId(storeId, relations) {
182
+ if (!storeId) {
183
+ return super.retrieve({
184
+ relations
185
+ });
186
+ }
187
+ const storeRepo = this.activeManager_.withRepository(this.storeRepository_);
188
+ const store = await storeRepo.findOne({
189
+ relations,
190
+ where: [{ id: storeId }, { name: storeId }]
191
+ });
192
+ return store;
193
+ }
194
+ /**
195
+ * Return the store that belongs to the account.
196
+ * @param relations
197
+ * @account Id
198
+ */
199
+ async retrieveStoreInAccount(accountId, relations) {
200
+ return await this.atomicPhase_(async (manager) => {
201
+ if (!accountId) {
202
+ return (await super
203
+ .withTransaction(manager)
204
+ .retrieve());
205
+ }
206
+ const storeRepo = this.activeManager_.getRepository(store_1.Store);
207
+ const store = await storeRepo.findOne({
208
+ relations,
209
+ where: {
210
+ externalAccountId: accountId
211
+ }
212
+ });
213
+ return store;
214
+ });
215
+ }
216
+ /**
217
+ * Return the store that belongs to the account the logged in user is attached to.
218
+ * @param relations
219
+ */
220
+ async retrieveStoreInLoggedInUserAccount(relations, accountId) {
221
+ var _a;
222
+ if (!(Object.keys(this.container).includes("loggedInUser") &&
223
+ this.container.loggedInUser)) {
224
+ return super.retrieve();
225
+ }
226
+ const storeRepo = this.activeManager_.getRepository(store_1.Store);
227
+ const store = await storeRepo.findOne({
228
+ relations,
229
+ where: {
230
+ externalAccountId: (_a = this.container.loggedInUser.externalAccountId) !== null && _a !== void 0 ? _a : accountId
231
+ }
232
+ });
233
+ return store;
234
+ }
235
+ async retrieveActiveUsers() {
236
+ let user = Object.keys(this.container).includes("loggedInUser")
237
+ ? this.container.loggedInUser
238
+ : undefined;
239
+ const defaultAdmin = Object.keys(this.container).includes("defaultAdmin")
240
+ ? this.container.defaultAdmin
241
+ : undefined;
242
+ let defaultAdminUser;
243
+ if (defaultAdmin) {
244
+ defaultAdminUser = Array.isArray(defaultAdmin)
245
+ ? this.container.defaultAdmin[0]
246
+ : this.container.defaultAdmin;
247
+ user = user !== null && user !== void 0 ? user : defaultAdminUser;
248
+ }
249
+ return { user, adminUser: defaultAdminUser };
250
+ }
251
+ async getUserStores(user) {
252
+ const stores = await this.atomicPhase_(async (manager) => {
253
+ if (user.stores) {
254
+ return user.stores;
255
+ }
256
+ else {
257
+ const storeSelection = manager
258
+ .getRepository(store_1.Store)
259
+ .createQueryBuilder("stores")
260
+ .leftJoinAndSelect("store.members", "user")
261
+ .andWhere(`user.id=${user.id}`);
262
+ const filteredStores = await storeSelection.getMany();
263
+ return filteredStores;
264
+ }
265
+ });
266
+ return stores;
267
+ }
268
+ async getUserStoreIds(user) {
269
+ const stores = await this.getUserStores(user);
270
+ const ids = stores.map((store) => {
271
+ return {
272
+ id: store.id
273
+ };
274
+ });
275
+ return ids;
276
+ }
277
+ async getUserStore(user, relations) {
278
+ /** filter the non default store */
279
+ const storeRepo = this.activeManager_.getRepository(store_1.Store);
280
+ let store;
281
+ const ids = await this.getUserStoreIds(user);
282
+ const storeRelations = relations !== null && relations !== void 0 ? relations : [];
283
+ if (!storeRelations.includes("members")) {
284
+ storeRelations.push("members");
285
+ }
286
+ if (!storeRelations.includes("products")) {
287
+ storeRelations.push("products");
288
+ }
289
+ if ((relations === null || relations === void 0 ? void 0 : relations.length) && (relations === null || relations === void 0 ? void 0 : relations.length) > 0) {
290
+ store = (await storeRepo.findOne({
291
+ where: ids,
292
+ relations
293
+ }));
294
+ }
295
+ return store;
296
+ }
297
+ async retrieveDefaultStore(relations) {
298
+ if (this.defaultStore && !relations) {
299
+ return this.defaultStore;
300
+ }
301
+ const defaultStoreName = process.env.DEFAULT_STORE_NAME;
302
+ const storeRepo = this.activeManager_.getRepository(store_1.Store);
303
+ this.logger.debug("referencing default store");
304
+ const relationsToInclude = !relations
305
+ ? ["members"]
306
+ : (relations === null || relations === void 0 ? void 0 : relations.includes("members"))
307
+ ? relations.concat(" ").concat("members")
308
+ : relations;
309
+ const store = (await storeRepo.findOne({
310
+ where: {
311
+ name: defaultStoreName
312
+ },
313
+ relations: relationsToInclude
314
+ }));
315
+ this.defaultStore = lodash_1.default.cloneDeep(store);
316
+ return this.defaultStore;
317
+ }
318
+ async retrieveRelations(relations) {
319
+ // while (!user && timeOut) {
320
+ const { user, adminUser } = await this.retrieveActiveUsers();
321
+ let store;
322
+ if (!user) {
323
+ this.logger.info("no logged in user");
324
+ }
325
+ /** fetching the default store */
326
+ /** no user logged in usually at startup time */
327
+ if (!user || user == adminUser) {
328
+ store = await this.retrieveDefaultStore(relations);
329
+ /** return the default store */
330
+ }
331
+ else {
332
+ /** fetching user store */
333
+ store = await this.getUserStore(user, relations);
334
+ }
335
+ if (!store && !user) {
336
+ const defaultStoreName = process.env.DEFAULT_STORE_NAME;
337
+ store = await this.createUserStore(defaultStoreName);
338
+ }
339
+ return store;
340
+ }
341
+ async createUserStore(storeName) {
342
+ let store;
343
+ const storeRepo = this.activeManager_.getRepository(store_1.Store);
344
+ try {
345
+ store = await storeRepo.findOne({
346
+ where: {
347
+ name: storeName
348
+ }
349
+ });
350
+ if (store) {
351
+ return store;
352
+ }
353
+ }
354
+ catch {
355
+ this.logger.info("unable to retrieve store");
356
+ }
357
+ this.logger.info("creating default store");
358
+ const defaultCurrency = await this.currencyService
359
+ .withTransaction(this.activeManager_)
360
+ .getDefaultCurrency();
361
+ store = storeRepo.create();
362
+ store = await storeRepo.save(store);
363
+ store.name = storeName;
364
+ this.logger.info("updating currencies in default store");
365
+ this.setDefaultCurrency(currency_1.default.DEFAULT_CURRENCY_CODE, store.id);
366
+ store.default_currency_code = defaultCurrency.code;
367
+ /* store = (await this.withTransaction(this.activeManager_).update(
368
+ {
369
+ name: storeName,
370
+ default_currency_code: defaultCurrency.code
371
+ },
372
+ store.id
373
+ )) as Store;*/
374
+ await storeRepo.save(store);
375
+ return store;
376
+ }
377
+ async addMemberToStore(user, storeId, role) {
378
+ const storeRepo = this.activeManager_.getRepository(store_1.Store);
379
+ const store = await storeRepo.findOne({
380
+ where: {
381
+ id: storeId
382
+ },
383
+ relations: ["members"]
384
+ });
385
+ user.role = role !== null && role !== void 0 ? role : user.role; /** over ride default role */
386
+ /** check if member exists in store */
387
+ if (store.members) {
388
+ const existingUser = store.members.find((userInStore) => {
389
+ return userInStore.id == user.id;
390
+ });
391
+ if (existingUser) {
392
+ return store;
393
+ }
394
+ }
395
+ if (store.members &&
396
+ user.externalAccountId == store.externalAccountId &&
397
+ user.externalProviderId == store.externalProviderId) {
398
+ store.members.push(user);
399
+ }
400
+ else {
401
+ store.externalAccountId = user.externalAccountId;
402
+ store.externalProviderId = user.externalProviderId;
403
+ store.members = [user];
404
+ }
405
+ const updatedStore = await storeRepo.save(store);
406
+ return updatedStore;
407
+ }
408
+ async updateMemberToStore(user, storeId, role) {
409
+ return await this.atomicPhase_(async (manager) => {
410
+ var _a;
411
+ const storeRepo = manager.getRepository(store_1.Store);
412
+ const store = await storeRepo.findOne({
413
+ where: { id: storeId },
414
+ relations: ["members"]
415
+ });
416
+ user.role = role !== null && role !== void 0 ? role : user.role; /** over ride default role */
417
+ if (store.members &&
418
+ user.externalAccountId == store.externalAccountId &&
419
+ user.externalProviderId == store.externalProviderId) {
420
+ const index = store.members.findIndex((userInStore) => {
421
+ return (userInStore.id == user.id &&
422
+ userInStore.email == user.email);
423
+ });
424
+ if (index) {
425
+ /** updating member */
426
+ const member = store.members[index];
427
+ for (const key of Object.keys(user)) {
428
+ if (key == "email") {
429
+ continue;
430
+ }
431
+ member[key] = user[key];
432
+ }
433
+ // await storeRepo.save(store);
434
+ }
435
+ else {
436
+ throw new Error(`${user.email} doesn't belong to this store ${(_a = store.name) !== null && _a !== void 0 ? _a : store.id}`);
437
+ }
438
+ }
439
+ else {
440
+ store.externalAccountId = user.externalAccountId;
441
+ store.externalProviderId = user.externalProviderId;
442
+ store.members = [user];
443
+ }
444
+ return await storeRepo.save(store);
445
+ // return store;
446
+ });
447
+ }
448
+ async createRegisteredStore(event) {
449
+ var _a;
450
+ let store;
451
+ const user = event.entity;
452
+ if ((_a = user.stores) === null || _a === void 0 ? void 0 : _a.length) {
453
+ return (store = await this.retrieve());
454
+ }
455
+ else if (user.role == medusa_1.UserRoles.ADMIN) {
456
+ store = (await this.create());
457
+ await this.addMemberToStore(user, store.id, user.role);
458
+ }
459
+ else {
460
+ store = await this.retrieveStoreInLoggedInUserAccount();
461
+ await this.addMemberToStore(user, store.id, user.role);
462
+ }
463
+ return store;
464
+ }
465
+ async setDefaultCurrency(code, store_id) {
466
+ const storeRepo = this.activeManager_.withRepository(this.storeRepository_);
467
+ const currencyRepository = this.activeManager_.withRepository(this.currencyRepository_);
468
+ const curr = await currencyRepository.findOne({
469
+ where: { code: code.toLowerCase() }
470
+ });
471
+ if (!curr) {
472
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, `Currency ${code} not found`);
473
+ }
474
+ const store = await this.retrieveByStoreIdOrName(store_id, {
475
+ relations: ["currencies"]
476
+ });
477
+ const doesStoreInclCurrency = store.currencies
478
+ .map((c) => c.code.toLowerCase())
479
+ .includes(curr.code.toLowerCase());
480
+ if (doesStoreInclCurrency) {
481
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.DUPLICATE_ERROR, "Currency already added");
482
+ }
483
+ store.currencies = [curr];
484
+ store.default_currency_code = curr.code;
485
+ store.default_currency = curr;
486
+ return await storeRepo.save(store);
487
+ }
488
+ async update(data, id) {
489
+ if (!id) {
490
+ return (await super.update(data));
491
+ }
492
+ return await this.atomicPhase_(async (transactionManager) => {
493
+ const storeRepository = transactionManager.getRepository(store_1.Store);
494
+ const currencyRepository = transactionManager.getRepository(medusa_1.Currency);
495
+ const { metadata, default_currency_code, currencies: storeCurrencies, ...rest } = data;
496
+ const store = await this.retrieveByStoreIdOrName(id, {
497
+ relations: ["currencies"]
498
+ });
499
+ if (metadata) {
500
+ store.metadata = (0, medusa_1.setMetadata)(store, metadata);
501
+ }
502
+ if (storeCurrencies) {
503
+ const defaultCurr = default_currency_code !== null && default_currency_code !== void 0 ? default_currency_code : store.default_currency_code;
504
+ const hasDefCurrency = storeCurrencies.find((c) => c.toLowerCase() === defaultCurr.toLowerCase());
505
+ // throw if we are trying to remove a currency from store currently used as default
506
+ if (!hasDefCurrency) {
507
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "You are not allowed to remove default currency from store currencies without replacing it as well");
508
+ }
509
+ store.currencies = await Promise.all(storeCurrencies.map(async (curr) => {
510
+ const currency = await currencyRepository.findOne({
511
+ where: { code: curr.toLowerCase() }
512
+ });
513
+ if (!currency) {
514
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, `Currency with code ${curr} does not exist`);
515
+ }
516
+ return currency;
517
+ }));
518
+ }
519
+ if (default_currency_code) {
520
+ const hasDefCurrency = store.currencies.find((c) => c.code.toLowerCase() ===
521
+ default_currency_code.toLowerCase());
522
+ if (!hasDefCurrency) {
523
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, `Store does not have currency: ${default_currency_code}`);
524
+ }
525
+ const curr = (await currencyRepository.findOne({
526
+ where: {
527
+ code: default_currency_code.toLowerCase()
528
+ }
529
+ }));
530
+ store.default_currency = curr;
531
+ store.default_currency_code = curr.code;
532
+ }
533
+ for (const [key, value] of Object.entries(rest)) {
534
+ store[key] = value;
535
+ }
536
+ return await storeRepository.save(store);
537
+ });
538
+ }
539
+ async addCurrency(code, id) {
540
+ if (!id) {
541
+ return (await super.addCurrency(code));
542
+ }
543
+ return await this.atomicPhase_(async (transactionManager) => {
544
+ const storeRepo = transactionManager.getRepository(store_1.Store);
545
+ const currencyRepository = transactionManager.getRepository(medusa_1.Currency);
546
+ const curr = await currencyRepository.findOne({
547
+ where: { code: code.toLowerCase() }
548
+ });
549
+ if (!curr) {
550
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, `Currency ${code} not found`);
551
+ }
552
+ const store = await this.retrieve({
553
+ relations: ["currencies"]
554
+ });
555
+ const doesStoreInclCurrency = store.currencies
556
+ .map((c) => c.code.toLowerCase())
557
+ .includes(curr.code.toLowerCase());
558
+ if (doesStoreInclCurrency) {
559
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.DUPLICATE_ERROR, "Currency already added");
560
+ }
561
+ store.currencies = [...store.currencies, curr];
562
+ return await storeRepo.save(store);
563
+ });
564
+ }
565
+ /**
566
+ * Removes a currency from the store
567
+ * @param code - 3 character ISO currency code
568
+ * @return result after update
569
+ */
570
+ async removeCurrency(code, id) {
571
+ if (!id) {
572
+ return (await super.removeCurrency(code));
573
+ }
574
+ const storeRepo = this.activeManager_.getRepository(store_1.Store);
575
+ const store = await this.retrieveByStoreIdOrName(id, {
576
+ relations: ["currencies"]
577
+ });
578
+ const doesCurrencyExists = store.currencies.some((c) => c.code === code.toLowerCase());
579
+ if (!doesCurrencyExists) {
580
+ return store;
581
+ }
582
+ store.currencies = store.currencies.filter((c) => c.code !== code);
583
+ return await storeRepo.save(store);
584
+ }
585
+ async purgeStore(store_id) {
586
+ const storeRepo = this.activeManager_.getRepository(store_1.Store);
587
+ return await storeRepo.delete({
588
+ id: store_id
589
+ });
590
+ }
591
+ async retrieveStore(idOrNameOrSlug) {
592
+ const storeRepo = this.activeManager_.getRepository(store_1.Store);
593
+ return await storeRepo.findOne({
594
+ where: [
595
+ {
596
+ id: idOrNameOrSlug
597
+ },
598
+ {
599
+ name: idOrNameOrSlug
600
+ }
601
+ ]
602
+ });
603
+ }
604
+ }
605
+ exports.default = StoreService;
606
+ StoreService.LIFE_TIME = awilix_1.Lifetime.SCOPED;
607
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/services/store.ts"],"names":[],"mappings":"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"}