@things-factory/auth-base 5.0.14 → 6.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/client/actions/auth.ts +23 -0
  2. package/client/{auth.js → auth.ts} +66 -59
  3. package/client/{bootstrap.js → bootstrap.ts} +5 -4
  4. package/client/index.ts +1 -0
  5. package/client/reducers/{auth.js → auth.ts} +1 -1
  6. package/dist-client/actions/auth.d.ts +8 -0
  7. package/dist-client/actions/auth.js +15 -0
  8. package/dist-client/actions/auth.js.map +1 -0
  9. package/dist-client/auth.d.ts +34 -0
  10. package/dist-client/auth.js +209 -0
  11. package/dist-client/auth.js.map +1 -0
  12. package/dist-client/bootstrap.d.ts +1 -0
  13. package/dist-client/bootstrap.js +34 -0
  14. package/dist-client/bootstrap.js.map +1 -0
  15. package/dist-client/index.d.ts +1 -0
  16. package/dist-client/index.js +2 -0
  17. package/dist-client/index.js.map +1 -0
  18. package/dist-client/reducers/auth.d.ts +14 -0
  19. package/dist-client/reducers/auth.js +19 -0
  20. package/dist-client/reducers/auth.js.map +1 -0
  21. package/dist-client/tsconfig.tsbuildinfo +1 -0
  22. package/dist-server/constants/error-code.d.ts +17 -0
  23. package/dist-server/constants/error-message.d.ts +0 -0
  24. package/dist-server/constants/max-age.d.ts +1 -0
  25. package/dist-server/controllers/auth.d.ts +5 -0
  26. package/dist-server/controllers/auth.js +1 -0
  27. package/dist-server/controllers/auth.js.map +1 -1
  28. package/dist-server/controllers/change-pwd.d.ts +1 -0
  29. package/dist-server/controllers/change-pwd.js +5 -4
  30. package/dist-server/controllers/change-pwd.js.map +1 -1
  31. package/dist-server/controllers/checkin.d.ts +4 -0
  32. package/dist-server/controllers/checkin.js +3 -3
  33. package/dist-server/controllers/checkin.js.map +1 -1
  34. package/dist-server/controllers/delete-user.d.ts +3 -0
  35. package/dist-server/controllers/invitation.d.ts +11 -0
  36. package/dist-server/controllers/invitation.js +11 -12
  37. package/dist-server/controllers/invitation.js.map +1 -1
  38. package/dist-server/controllers/profile.d.ts +26 -0
  39. package/dist-server/controllers/profile.js +4 -4
  40. package/dist-server/controllers/profile.js.map +1 -1
  41. package/dist-server/controllers/reset-password.d.ts +5 -0
  42. package/dist-server/controllers/reset-password.js +7 -7
  43. package/dist-server/controllers/reset-password.js.map +1 -1
  44. package/dist-server/controllers/signin.d.ts +6 -0
  45. package/dist-server/controllers/signin.js +4 -3
  46. package/dist-server/controllers/signin.js.map +1 -1
  47. package/dist-server/controllers/signup.d.ts +8 -0
  48. package/dist-server/controllers/signup.js +13 -9
  49. package/dist-server/controllers/signup.js.map +1 -1
  50. package/dist-server/controllers/unlock-user.d.ts +5 -0
  51. package/dist-server/controllers/unlock-user.js +6 -6
  52. package/dist-server/controllers/unlock-user.js.map +1 -1
  53. package/dist-server/controllers/utils/make-invitation-token.d.ts +1 -0
  54. package/dist-server/controllers/utils/make-verification-token.d.ts +1 -0
  55. package/dist-server/controllers/utils/password-rule.d.ts +14 -0
  56. package/dist-server/controllers/utils/save-invitation-token.d.ts +5 -0
  57. package/dist-server/controllers/utils/save-invitation-token.js +2 -2
  58. package/dist-server/controllers/utils/save-invitation-token.js.map +1 -1
  59. package/dist-server/controllers/utils/save-verification-token.d.ts +6 -0
  60. package/dist-server/controllers/utils/save-verification-token.js +2 -2
  61. package/dist-server/controllers/utils/save-verification-token.js.map +1 -1
  62. package/dist-server/controllers/verification.d.ts +6 -0
  63. package/dist-server/controllers/verification.js +8 -8
  64. package/dist-server/controllers/verification.js.map +1 -1
  65. package/dist-server/errors/auth-error.d.ts +11 -0
  66. package/dist-server/errors/auth-error.js.map +1 -1
  67. package/dist-server/errors/index.d.ts +2 -0
  68. package/dist-server/errors/user-domain-not-match-error.d.ts +9 -0
  69. package/dist-server/errors/user-domain-not-match-error.js.map +1 -1
  70. package/dist-server/index.d.ts +13 -0
  71. package/dist-server/index.js +2 -1
  72. package/dist-server/index.js.map +1 -1
  73. package/dist-server/middlewares/authenticate-401-middleware.d.ts +1 -0
  74. package/dist-server/middlewares/authenticate-401-middleware.js +12 -14
  75. package/dist-server/middlewares/authenticate-401-middleware.js.map +1 -1
  76. package/dist-server/middlewares/domain-authenticate-middleware.d.ts +11 -0
  77. package/dist-server/middlewares/domain-authenticate-middleware.js +7 -4
  78. package/dist-server/middlewares/domain-authenticate-middleware.js.map +1 -1
  79. package/dist-server/middlewares/graphql-authenticate-middleware.d.ts +1 -0
  80. package/dist-server/middlewares/index.d.ts +5 -0
  81. package/dist-server/middlewares/jwt-authenticate-middleware.d.ts +1 -0
  82. package/dist-server/middlewares/signin-middleware.d.ts +1 -0
  83. package/dist-server/migrations/1548206416130-SeedUser.d.ts +5 -0
  84. package/dist-server/migrations/1548206416130-SeedUser.js +4 -5
  85. package/dist-server/migrations/1548206416130-SeedUser.js.map +1 -1
  86. package/dist-server/migrations/1566805283882-SeedPrivilege.d.ts +5 -0
  87. package/dist-server/migrations/1566805283882-SeedPrivilege.js +2 -2
  88. package/dist-server/migrations/1566805283882-SeedPrivilege.js.map +1 -1
  89. package/dist-server/migrations/index.d.ts +1 -0
  90. package/dist-server/router/auth-checkin-router.d.ts +1 -0
  91. package/dist-server/router/auth-checkin-router.js.map +1 -1
  92. package/dist-server/router/auth-private-process-router.d.ts +1 -0
  93. package/dist-server/router/auth-private-process-router.js +2 -2
  94. package/dist-server/router/auth-private-process-router.js.map +1 -1
  95. package/dist-server/router/auth-public-process-router.d.ts +1 -0
  96. package/dist-server/router/auth-public-process-router.js +2 -3
  97. package/dist-server/router/auth-public-process-router.js.map +1 -1
  98. package/dist-server/router/auth-signin-router.d.ts +1 -0
  99. package/dist-server/router/auth-signup-router.d.ts +1 -0
  100. package/dist-server/router/auth-signup-router.js +31 -32
  101. package/dist-server/router/auth-signup-router.js.map +1 -1
  102. package/dist-server/router/index.d.ts +8 -0
  103. package/dist-server/router/oauth2/index.d.ts +2 -0
  104. package/dist-server/router/oauth2/oauth2-authorize-router.d.ts +1 -0
  105. package/dist-server/router/oauth2/oauth2-authorize-router.js +2 -2
  106. package/dist-server/router/oauth2/oauth2-authorize-router.js.map +1 -1
  107. package/dist-server/router/oauth2/oauth2-router.d.ts +9 -0
  108. package/dist-server/router/oauth2/oauth2-router.js +6 -7
  109. package/dist-server/router/oauth2/oauth2-router.js.map +1 -1
  110. package/dist-server/router/oauth2/oauth2-server.d.ts +5 -0
  111. package/dist-server/router/oauth2/oauth2-server.js +23 -21
  112. package/dist-server/router/oauth2/oauth2-server.js.map +1 -1
  113. package/dist-server/router/oauth2/passport-oauth2-client-password.d.ts +7 -0
  114. package/dist-server/router/oauth2/passport-refresh-token.d.ts +7 -0
  115. package/dist-server/router/path-base-domain-router.d.ts +1 -0
  116. package/dist-server/router/site-root-router.d.ts +1 -0
  117. package/dist-server/routes.d.ts +1 -0
  118. package/dist-server/service/app-binding/app-binding-mutation.d.ts +3 -0
  119. package/dist-server/service/app-binding/app-binding-mutation.js +2 -2
  120. package/dist-server/service/app-binding/app-binding-mutation.js.map +1 -1
  121. package/dist-server/service/app-binding/app-binding-query.d.ts +14 -0
  122. package/dist-server/service/app-binding/app-binding-query.js +7 -9
  123. package/dist-server/service/app-binding/app-binding-query.js.map +1 -1
  124. package/dist-server/service/app-binding/app-binding-types.d.ts +5 -0
  125. package/dist-server/service/app-binding/app-binding.d.ts +7 -0
  126. package/dist-server/service/app-binding/index.d.ts +3 -0
  127. package/dist-server/service/appliance/appliance-mutation.d.ts +8 -0
  128. package/dist-server/service/appliance/appliance-mutation.js +13 -12
  129. package/dist-server/service/appliance/appliance-mutation.js.map +1 -1
  130. package/dist-server/service/appliance/appliance-query.d.ts +11 -0
  131. package/dist-server/service/appliance/appliance-query.js +7 -9
  132. package/dist-server/service/appliance/appliance-query.js.map +1 -1
  133. package/dist-server/service/appliance/appliance-types.d.ts +22 -0
  134. package/dist-server/service/appliance/appliance.d.ts +22 -0
  135. package/dist-server/service/appliance/appliance.js +1 -2
  136. package/dist-server/service/appliance/appliance.js.map +1 -1
  137. package/dist-server/service/appliance/index.d.ts +5 -0
  138. package/dist-server/service/application/application-mutation.d.ts +66 -0
  139. package/dist-server/service/application/application-mutation.js +13 -13
  140. package/dist-server/service/application/application-mutation.js.map +1 -1
  141. package/dist-server/service/application/application-query.d.ts +16 -0
  142. package/dist-server/service/application/application-query.js +11 -13
  143. package/dist-server/service/application/application-query.js.map +1 -1
  144. package/dist-server/service/application/application-types.d.ts +27 -0
  145. package/dist-server/service/application/application.d.ts +35 -0
  146. package/dist-server/service/application/application.js +1 -2
  147. package/dist-server/service/application/application.js.map +1 -1
  148. package/dist-server/service/application/index.d.ts +5 -0
  149. package/dist-server/service/domain-generator/domain-generator-mutation.d.ts +6 -0
  150. package/dist-server/service/domain-generator/domain-generator-mutation.js +7 -7
  151. package/dist-server/service/domain-generator/domain-generator-mutation.js.map +1 -1
  152. package/dist-server/service/domain-generator/domain-generator-types.d.ts +19 -0
  153. package/dist-server/service/domain-generator/domain-generator-types.js +1 -2
  154. package/dist-server/service/domain-generator/domain-generator-types.js.map +1 -1
  155. package/dist-server/service/domain-generator/index.d.ts +2 -0
  156. package/dist-server/service/granted-role/granted-role-mutation.d.ts +11 -0
  157. package/dist-server/service/granted-role/granted-role-mutation.js +14 -9
  158. package/dist-server/service/granted-role/granted-role-mutation.js.map +1 -1
  159. package/dist-server/service/granted-role/granted-role-query.d.ts +16 -0
  160. package/dist-server/service/granted-role/granted-role-query.js +8 -9
  161. package/dist-server/service/granted-role/granted-role-query.js.map +1 -1
  162. package/dist-server/service/granted-role/granted-role.d.ts +9 -0
  163. package/dist-server/service/granted-role/granted-role.js +1 -2
  164. package/dist-server/service/granted-role/granted-role.js.map +1 -1
  165. package/dist-server/service/granted-role/index.d.ts +5 -0
  166. package/dist-server/service/index.d.ts +31 -0
  167. package/dist-server/service/invitation/index.d.ts +5 -0
  168. package/dist-server/service/invitation/invitation-mutation.d.ts +17 -0
  169. package/dist-server/service/invitation/invitation-mutation.js +9 -9
  170. package/dist-server/service/invitation/invitation-mutation.js.map +1 -1
  171. package/dist-server/service/invitation/invitation-query.d.ts +8 -0
  172. package/dist-server/service/invitation/invitation-query.js +4 -4
  173. package/dist-server/service/invitation/invitation-query.js.map +1 -1
  174. package/dist-server/service/invitation/invitation-types.d.ts +5 -0
  175. package/dist-server/service/invitation/invitation.d.ts +14 -0
  176. package/dist-server/service/login-history/index.d.ts +4 -0
  177. package/dist-server/service/login-history/login-history-query.d.ts +8 -0
  178. package/dist-server/service/login-history/login-history-query.js +9 -11
  179. package/dist-server/service/login-history/login-history-query.js.map +1 -1
  180. package/dist-server/service/login-history/login-history.d.ts +12 -0
  181. package/dist-server/service/login-history/login-history.js +14 -15
  182. package/dist-server/service/login-history/login-history.js.map +1 -1
  183. package/dist-server/service/partner/index.d.ts +5 -0
  184. package/dist-server/service/partner/partner-mutation.d.ts +4 -0
  185. package/dist-server/service/partner/partner-mutation.js +6 -7
  186. package/dist-server/service/partner/partner-mutation.js.map +1 -1
  187. package/dist-server/service/partner/partner-query.d.ts +14 -0
  188. package/dist-server/service/partner/partner-query.js +11 -13
  189. package/dist-server/service/partner/partner-query.js.map +1 -1
  190. package/dist-server/service/partner/partner-types.d.ts +5 -0
  191. package/dist-server/service/partner/partner.d.ts +15 -0
  192. package/dist-server/service/partner/partner.js +2 -3
  193. package/dist-server/service/partner/partner.js.map +1 -1
  194. package/dist-server/service/password-history/index.d.ts +2 -0
  195. package/dist-server/service/password-history/password-history.d.ts +4 -0
  196. package/dist-server/service/privilege/index.d.ts +5 -0
  197. package/dist-server/service/privilege/privilege-directive.d.ts +3 -0
  198. package/dist-server/service/privilege/privilege-directive.js +2 -2
  199. package/dist-server/service/privilege/privilege-directive.js.map +1 -1
  200. package/dist-server/service/privilege/privilege-mutation.d.ts +7 -0
  201. package/dist-server/service/privilege/privilege-mutation.js +6 -5
  202. package/dist-server/service/privilege/privilege-mutation.js.map +1 -1
  203. package/dist-server/service/privilege/privilege-query.d.ts +13 -0
  204. package/dist-server/service/privilege/privilege-query.js +7 -8
  205. package/dist-server/service/privilege/privilege-query.js.map +1 -1
  206. package/dist-server/service/privilege/privilege-types.d.ts +25 -0
  207. package/dist-server/service/privilege/privilege.d.ts +15 -0
  208. package/dist-server/service/role/index.d.ts +5 -0
  209. package/dist-server/service/role/role-mutation.d.ts +8 -0
  210. package/dist-server/service/role/role-mutation.js +13 -11
  211. package/dist-server/service/role/role-mutation.js.map +1 -1
  212. package/dist-server/service/role/role-query.d.ts +18 -0
  213. package/dist-server/service/role/role-query.js +13 -13
  214. package/dist-server/service/role/role-query.js.map +1 -1
  215. package/dist-server/service/role/role-types.d.ts +33 -0
  216. package/dist-server/service/role/role.d.ts +18 -0
  217. package/dist-server/service/role/role.js +1 -2
  218. package/dist-server/service/role/role.js.map +1 -1
  219. package/dist-server/service/user/index.d.ts +5 -0
  220. package/dist-server/service/user/user-mutation.d.ts +28 -0
  221. package/dist-server/service/user/user-mutation.js +24 -17
  222. package/dist-server/service/user/user-mutation.js.map +1 -1
  223. package/dist-server/service/user/user-query.d.ts +16 -0
  224. package/dist-server/service/user/user-query.js +15 -13
  225. package/dist-server/service/user/user-query.js.map +1 -1
  226. package/dist-server/service/user/user-types.d.ts +26 -0
  227. package/dist-server/service/user/user.d.ts +39 -0
  228. package/dist-server/service/user/user.js +9 -8
  229. package/dist-server/service/user/user.js.map +1 -1
  230. package/dist-server/service/verification-token/index.d.ts +2 -0
  231. package/dist-server/service/verification-token/verification-token.d.ts +14 -0
  232. package/dist-server/templates/account-unlock-email.d.ts +4 -0
  233. package/dist-server/templates/invitation-email.d.ts +4 -0
  234. package/dist-server/templates/reset-password-email.d.ts +4 -0
  235. package/dist-server/templates/verification-email.d.ts +4 -0
  236. package/dist-server/tsconfig.tsbuildinfo +1 -1
  237. package/dist-server/types.d.ts +17 -0
  238. package/dist-server/types.js +3 -0
  239. package/dist-server/types.js.map +1 -0
  240. package/dist-server/utils/accepts.d.ts +1 -0
  241. package/dist-server/utils/access-token-cookie.d.ts +3 -0
  242. package/dist-server/utils/check-user-belongs-domain.d.ts +10 -0
  243. package/dist-server/utils/check-user-belongs-domain.js +2 -2
  244. package/dist-server/utils/check-user-belongs-domain.js.map +1 -1
  245. package/dist-server/utils/get-domain-from-hostname.d.ts +1 -0
  246. package/dist-server/utils/get-domain-users.d.ts +5 -0
  247. package/dist-server/utils/get-domain-users.js +2 -3
  248. package/dist-server/utils/get-domain-users.js.map +1 -1
  249. package/dist-server/utils/get-secret.d.ts +1 -0
  250. package/dist-server/utils/get-user-domains.d.ts +5 -0
  251. package/dist-server/utils/get-user-domains.js +7 -5
  252. package/dist-server/utils/get-user-domains.js.map +1 -1
  253. package/package.json +15 -13
  254. package/server/controllers/auth.ts +1 -0
  255. package/server/controllers/change-pwd.ts +3 -3
  256. package/server/controllers/checkin.ts +3 -3
  257. package/server/controllers/invitation.ts +6 -7
  258. package/server/controllers/profile.ts +4 -3
  259. package/server/controllers/reset-password.ts +3 -3
  260. package/server/controllers/signin.ts +4 -2
  261. package/server/controllers/signup.ts +13 -8
  262. package/server/controllers/unlock-user.ts +5 -3
  263. package/server/controllers/utils/save-invitation-token.ts +2 -1
  264. package/server/controllers/utils/save-verification-token.ts +2 -1
  265. package/server/controllers/verification.ts +6 -4
  266. package/server/errors/auth-error.ts +3 -0
  267. package/server/errors/user-domain-not-match-error.ts +3 -0
  268. package/server/index.ts +3 -1
  269. package/server/middlewares/authenticate-401-middleware.ts +15 -3
  270. package/server/middlewares/domain-authenticate-middleware.ts +9 -6
  271. package/server/migrations/1548206416130-SeedUser.ts +3 -3
  272. package/server/migrations/1566805283882-SeedPrivilege.ts +2 -1
  273. package/server/router/auth-checkin-router.ts +1 -1
  274. package/server/router/auth-private-process-router.ts +1 -2
  275. package/server/router/auth-public-process-router.ts +2 -3
  276. package/server/router/auth-signup-router.ts +38 -38
  277. package/server/router/oauth2/oauth2-authorize-router.ts +3 -2
  278. package/server/router/oauth2/oauth2-router.ts +4 -5
  279. package/server/router/oauth2/oauth2-server.ts +19 -22
  280. package/server/service/app-binding/app-binding-mutation.ts +3 -2
  281. package/server/service/app-binding/app-binding-query.ts +9 -9
  282. package/server/service/appliance/appliance-mutation.ts +14 -8
  283. package/server/service/appliance/appliance-query.ts +11 -10
  284. package/server/service/application/application-mutation.ts +21 -12
  285. package/server/service/application/application-query.ts +20 -17
  286. package/server/service/domain-generator/domain-generator-mutation.ts +15 -10
  287. package/server/service/granted-role/granted-role-mutation.ts +14 -12
  288. package/server/service/granted-role/granted-role-query.ts +12 -10
  289. package/server/service/invitation/invitation-mutation.ts +7 -5
  290. package/server/service/invitation/invitation-query.ts +6 -4
  291. package/server/service/login-history/login-history-query.ts +13 -11
  292. package/server/service/login-history/login-history.ts +5 -4
  293. package/server/service/partner/partner-mutation.ts +10 -9
  294. package/server/service/partner/partner-query.ts +10 -10
  295. package/server/service/privilege/privilege-directive.ts +1 -1
  296. package/server/service/privilege/privilege-mutation.ts +10 -5
  297. package/server/service/privilege/privilege-query.ts +7 -7
  298. package/server/service/role/role-mutation.ts +18 -11
  299. package/server/service/role/role-query.ts +18 -16
  300. package/server/service/user/user-mutation.ts +39 -34
  301. package/server/service/user/user-query.ts +29 -21
  302. package/server/service/user/user.ts +12 -10
  303. package/server/types.ts +21 -0
  304. package/server/utils/check-user-belongs-domain.ts +2 -2
  305. package/server/utils/get-domain-users.ts +4 -2
  306. package/server/utils/get-user-domains.ts +8 -5
  307. package/things-factory.config.js +1 -1
  308. package/translations/en.json +2 -5
  309. package/translations/ko.json +5 -8
  310. package/translations/ms.json +2 -5
  311. package/translations/zh.json +2 -5
  312. package/client/actions/auth.js +0 -16
  313. package/client/index.js +0 -2
@@ -0,0 +1,22 @@
1
+ import { User } from '../user/user';
2
+ import { Domain } from '@things-factory/shell';
3
+ export declare class Appliance {
4
+ readonly id: string;
5
+ domain: Domain;
6
+ domainId: string;
7
+ serialNo: string;
8
+ name: string;
9
+ brand: string;
10
+ model: string;
11
+ netmask: string;
12
+ description: string;
13
+ accessToken: string;
14
+ creator: User;
15
+ creatorId: string;
16
+ updater: User;
17
+ updaterId: string;
18
+ createdAt: Date;
19
+ updatedAt: Date;
20
+ static sign(subject: any, expiresIn: any, domain: any, user: any, appliance: any): string;
21
+ static generateAccessToken(domain: any, user: any, appliance: any): string;
22
+ }
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.Appliance = void 0;
5
4
  const tslib_1 = require("tslib");
@@ -45,7 +44,7 @@ tslib_1.__decorate([
45
44
  ], Appliance.prototype, "id", void 0);
46
45
  tslib_1.__decorate([
47
46
  (0, typeorm_1.ManyToOne)(type => shell_1.Domain),
48
- tslib_1.__metadata("design:type", typeof (_a = typeof shell_1.Domain !== "undefined" && shell_1.Domain) === "function" ? _a : Object)
47
+ tslib_1.__metadata("design:type", shell_1.Domain)
49
48
  ], Appliance.prototype, "domain", void 0);
50
49
  tslib_1.__decorate([
51
50
  (0, typeorm_1.RelationId)((appliance) => appliance.domain),
@@ -1 +1 @@
1
- {"version":3,"file":"appliance.js","sourceRoot":"","sources":["../../../server/service/appliance/appliance.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\nimport { Field, ID, ObjectType } from 'type-graphql'\nimport { User, UserStatus } from '../user/user'\n\nimport { Domain } from '@things-factory/shell'\nimport { SECRET } from '../../utils/get-secret'\nimport { config } from '@things-factory/env'\nimport jwt from 'jsonwebtoken'\n\nconst ORMCONFIG = config.get('ormconfig', {})\nconst DATABASE_TYPE = ORMCONFIG.type\n\n@Entity()\n@Index('ix_appliance_0', (appliance: Appliance) => [appliance.domain, appliance.name], {\n unique: true\n})\n@ObjectType()\nexport class Appliance {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n domain: Domain\n\n @RelationId((appliance: Appliance) => appliance.domain)\n domainId: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n serialNo: string\n\n @Column()\n @Field()\n name: string\n\n @Column()\n @Field({ nullable: true })\n brand: string\n\n @Column()\n @Field({ nullable: true })\n model: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n netmask: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n description: string\n\n @Column({\n nullable: true,\n type:\n DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'\n ? 'longtext'\n : DATABASE_TYPE == 'oracle'\n ? 'clob'\n : 'varchar'\n })\n @Field({ nullable: true })\n accessToken: string\n\n @ManyToOne(type => User, {\n nullable: true\n })\n @Field({ nullable: true })\n creator: User\n\n @RelationId((appliance: Appliance) => appliance.creator)\n creatorId: string\n\n @ManyToOne(type => User, {\n nullable: true\n })\n @Field({ nullable: true })\n updater: User\n\n @RelationId((appliance: Appliance) => appliance.updater)\n updaterId: string\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt: Date\n\n /* signing for jsonwebtoken */\n static sign(subject, expiresIn, domain, user, appliance) {\n var credential = {\n id: user.id,\n userType: 'appliance',\n appliance: {\n id: appliance.id\n },\n status: UserStatus.ACTIVATED,\n domain: {\n subdomain: domain.subdomain\n }\n }\n\n return jwt.sign(credential, SECRET, {\n expiresIn,\n issuer: 'hatiolab.com',\n subject\n })\n }\n\n static generateAccessToken(domain, user, appliance) {\n /* how to set expiresIn https://github.com/vercel/ms */\n let expiresIn = config.get('applianceJwtExpiresIn', '1y')\n return this.sign('access-token', expiresIn, domain, user, appliance)\n }\n}\n"]}
1
+ {"version":3,"file":"appliance.js","sourceRoot":"","sources":["../../../server/service/appliance/appliance.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\nimport { Field, ID, ObjectType } from 'type-graphql'\nimport { User, UserStatus } from '../user/user'\n\nimport { Domain } from '@things-factory/shell'\nimport { SECRET } from '../../utils/get-secret'\nimport { config } from '@things-factory/env'\nimport jwt from 'jsonwebtoken'\n\nconst ORMCONFIG = config.get('ormconfig', {})\nconst DATABASE_TYPE = ORMCONFIG.type\n\n@Entity()\n@Index('ix_appliance_0', (appliance: Appliance) => [appliance.domain, appliance.name], {\n unique: true\n})\n@ObjectType()\nexport class Appliance {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n domain: Domain\n\n @RelationId((appliance: Appliance) => appliance.domain)\n domainId: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n serialNo: string\n\n @Column()\n @Field()\n name: string\n\n @Column()\n @Field({ nullable: true })\n brand: string\n\n @Column()\n @Field({ nullable: true })\n model: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n netmask: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n description: string\n\n @Column({\n nullable: true,\n type:\n DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'\n ? 'longtext'\n : DATABASE_TYPE == 'oracle'\n ? 'clob'\n : 'varchar'\n })\n @Field({ nullable: true })\n accessToken: string\n\n @ManyToOne(type => User, {\n nullable: true\n })\n @Field({ nullable: true })\n creator: User\n\n @RelationId((appliance: Appliance) => appliance.creator)\n creatorId: string\n\n @ManyToOne(type => User, {\n nullable: true\n })\n @Field({ nullable: true })\n updater: User\n\n @RelationId((appliance: Appliance) => appliance.updater)\n updaterId: string\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt: Date\n\n /* signing for jsonwebtoken */\n static sign(subject, expiresIn, domain, user, appliance) {\n var credential = {\n id: user.id,\n userType: 'appliance',\n appliance: {\n id: appliance.id\n },\n status: UserStatus.ACTIVATED,\n domain: {\n subdomain: domain.subdomain\n }\n }\n\n return jwt.sign(credential, SECRET, {\n expiresIn,\n issuer: 'hatiolab.com',\n subject\n })\n }\n\n static generateAccessToken(domain, user, appliance) {\n /* how to set expiresIn https://github.com/vercel/ms */\n let expiresIn = config.get('applianceJwtExpiresIn', '1y')\n return this.sign('access-token', expiresIn, domain, user, appliance)\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { Appliance } from './appliance';
2
+ import { ApplianceQuery } from './appliance-query';
3
+ import { ApplianceMutation } from './appliance-mutation';
4
+ export declare const entities: (typeof Appliance)[];
5
+ export declare const resolvers: (typeof ApplianceQuery | typeof ApplianceMutation)[];
@@ -0,0 +1,66 @@
1
+ import { User } from '../user/user';
2
+ import { Application } from './application';
3
+ import { ApplicationPatch, NewApplication } from './application-types';
4
+ export declare class ApplicationMutation {
5
+ createApplication(application: NewApplication, context: ResolverContext): Promise<{
6
+ domain: import("@things-factory/shell").Domain;
7
+ appKey: string;
8
+ appSecret: string;
9
+ creator: User;
10
+ updater: User;
11
+ name: string;
12
+ description?: string;
13
+ email?: string;
14
+ url?: string;
15
+ icon?: string;
16
+ redirectUrl?: string;
17
+ webhook?: string;
18
+ } & Application>;
19
+ deleteApplication(id: string, context: ResolverContext): Promise<boolean>;
20
+ generateApplicationSecret(id: string, context: ResolverContext): Promise<{
21
+ appSecret: string;
22
+ updater: User;
23
+ id: string;
24
+ domain: import("@things-factory/shell").Domain;
25
+ domainId: string;
26
+ name: string;
27
+ description: string;
28
+ email: string;
29
+ url: string;
30
+ icon: string;
31
+ redirectUrl: string;
32
+ webhook: string;
33
+ appKey: string;
34
+ status: import("./application").ApplicationStatus;
35
+ createdAt: Date;
36
+ updatedAt: Date;
37
+ creator: User;
38
+ creatorId: string;
39
+ updaterId: string;
40
+ } & Application>;
41
+ renewApplicationAccessToken(id: string, context: ResolverContext, scope?: string): Promise<{
42
+ accessToken: string;
43
+ refreshToken: string;
44
+ }>;
45
+ updateApplication(id: string, patch: ApplicationPatch, context: ResolverContext): Promise<{
46
+ updater: User;
47
+ name: string;
48
+ description: string;
49
+ email: string;
50
+ url: string;
51
+ icon: string;
52
+ redirectUrl: string;
53
+ webhook: string;
54
+ id: string;
55
+ domain: import("@things-factory/shell").Domain;
56
+ domainId: string;
57
+ appKey: string;
58
+ appSecret: string;
59
+ status: import("./application").ApplicationStatus;
60
+ createdAt: Date;
61
+ updatedAt: Date;
62
+ creator: User;
63
+ creatorId: string;
64
+ updaterId: string;
65
+ } & Application>;
66
+ }
@@ -3,54 +3,54 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ApplicationMutation = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
- const typeorm_1 = require("typeorm");
6
+ const shell_1 = require("@things-factory/shell");
7
7
  const user_1 = require("../user/user");
8
8
  const application_1 = require("./application");
9
9
  const application_types_1 = require("./application-types");
10
10
  let ApplicationMutation = class ApplicationMutation {
11
11
  async createApplication(application, context) {
12
12
  const { domain } = context.state;
13
- return await (0, typeorm_1.getRepository)(application_1.Application).save(Object.assign(Object.assign({}, application), { domain, appKey: application_1.Application.generateAppKey(), appSecret: application_1.Application.generateAppSecret(), creator: context.state.user, updater: context.state.user }));
13
+ return await (0, shell_1.getRepository)(application_1.Application).save(Object.assign(Object.assign({}, application), { domain, appKey: application_1.Application.generateAppKey(), appSecret: application_1.Application.generateAppSecret(), creator: context.state.user, updater: context.state.user }));
14
14
  }
15
15
  async deleteApplication(id, context) {
16
16
  const { domain } = context.state;
17
- await (0, typeorm_1.getRepository)(application_1.Application).delete({
18
- id,
19
- domain
17
+ await (0, shell_1.getRepository)(application_1.Application).delete({
18
+ domain: { id: domain.id },
19
+ id
20
20
  });
21
21
  return true;
22
22
  }
23
23
  async generateApplicationSecret(id, context) {
24
24
  const { domain } = context.state;
25
- const repository = (0, typeorm_1.getRepository)(application_1.Application);
26
- const application = await repository.findOne({ id, domain });
25
+ const repository = (0, shell_1.getRepository)(application_1.Application);
26
+ const application = await repository.findOneBy({ domain: { id: domain.id }, id });
27
27
  return await repository.save(Object.assign(Object.assign({}, application), { appSecret: application_1.Application.generateAppSecret(), updater: context.state.user }));
28
28
  }
29
29
  async renewApplicationAccessToken(id, context, scope) {
30
30
  const { domain } = context.state;
31
- var appuser = await (0, typeorm_1.getRepository)(user_1.User).findOne({
31
+ var appuser = await (0, shell_1.getRepository)(user_1.User).findOneBy({
32
32
  id,
33
33
  userType: 'application'
34
34
  });
35
35
  if (!appuser) {
36
36
  throw new Error('application is not bound');
37
37
  }
38
- const repository = (0, typeorm_1.getRepository)(application_1.Application);
39
- const application = await repository.findOne(appuser.reference);
38
+ const repository = (0, shell_1.getRepository)(application_1.Application);
39
+ const application = await repository.findOneBy({ id: appuser.reference });
40
40
  if (!application) {
41
41
  throw new Error('application not found');
42
42
  }
43
43
  var accessToken = application_1.Application.generateAccessToken(domain, appuser, application.appSecret, scope || '');
44
44
  var refreshToken = application_1.Application.generateRefreshToken(domain, appuser, application.appSecret, scope || '');
45
- await (0, typeorm_1.getRepository)(user_1.User).save(Object.assign(Object.assign({}, appuser), { password: refreshToken }));
45
+ await (0, shell_1.getRepository)(user_1.User).save(Object.assign(Object.assign({}, appuser), { password: refreshToken }));
46
46
  return {
47
47
  accessToken,
48
48
  refreshToken
49
49
  };
50
50
  }
51
51
  async updateApplication(id, patch, context) {
52
- const repository = (0, typeorm_1.getRepository)(application_1.Application);
53
- const application = await repository.findOne(id);
52
+ const repository = (0, shell_1.getRepository)(application_1.Application);
53
+ const application = await repository.findOneBy({ id });
54
54
  return await repository.save(Object.assign(Object.assign(Object.assign({}, application), patch), { updater: context.state.user }));
55
55
  }
56
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"application-mutation.js","sourceRoot":"","sources":["../../../server/service/application/application-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Resolver } from 'type-graphql'\nimport { getRepository } from 'typeorm'\n\nimport { User } from '../user/user'\nimport { Application } from './application'\nimport { AccessToken, ApplicationPatch, NewApplication } from './application-types'\n\n@Resolver(Application)\nexport class ApplicationMutation {\n @Mutation(returns => Application, { description: 'To create new application' })\n async createApplication(@Arg('application') application: NewApplication, @Ctx() context: any) {\n const { domain } = context.state\n return await getRepository(Application).save({\n ...application,\n domain,\n appKey: Application.generateAppKey(),\n appSecret: Application.generateAppSecret(),\n creator: context.state.user,\n updater: context.state.user\n })\n }\n\n @Mutation(returns => Boolean, { description: 'To delete application' })\n async deleteApplication(@Arg('id') id: string, @Ctx() context: any) {\n const { domain } = context.state\n await getRepository(Application).delete({\n id,\n domain\n })\n return true\n }\n\n @Mutation(returns => Application)\n async generateApplicationSecret(@Arg('id') id: string, @Ctx() context: any) {\n const { domain } = context.state\n const repository = getRepository(Application)\n const application = await repository.findOne({ id, domain })\n\n return await repository.save({\n ...application,\n appSecret: Application.generateAppSecret(),\n updater: context.state.user\n })\n }\n\n @Mutation(returns => AccessToken)\n async renewApplicationAccessToken(@Arg('id') id: string, @Ctx() context: any, @Arg('scope') scope?: string) {\n const { domain } = context.state\n\n var appuser: User = await getRepository(User).findOne({\n id,\n userType: 'application'\n })\n\n if (!appuser) {\n throw new Error('application is not bound')\n }\n\n const repository = getRepository(Application)\n const application = await repository.findOne(appuser.reference)\n if (!application) {\n throw new Error('application not found')\n }\n\n var accessToken = Application.generateAccessToken(domain, appuser, application.appSecret, scope || '')\n var refreshToken = Application.generateRefreshToken(domain, appuser, application.appSecret, scope || '')\n\n await getRepository(User).save({\n ...(appuser as any),\n password: refreshToken\n })\n\n return {\n accessToken,\n refreshToken\n }\n }\n\n @Mutation(returns => Application)\n async updateApplication(@Arg('id') id: string, @Arg('patch') patch: ApplicationPatch, @Ctx() context: any) {\n const repository = getRepository(Application)\n const application = await repository.findOne(id)\n\n return await repository.save({\n ...application,\n ...patch,\n updater: context.state.user\n })\n }\n}\n"]}
1
+ {"version":3,"file":"application-mutation.js","sourceRoot":"","sources":["../../../server/service/application/application-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { User } from '../user/user'\nimport { Application } from './application'\nimport { AccessToken, ApplicationPatch, NewApplication } from './application-types'\n\n@Resolver(Application)\nexport class ApplicationMutation {\n @Mutation(returns => Application, { description: 'To create new application' })\n async createApplication(@Arg('application') application: NewApplication, @Ctx() context: ResolverContext) {\n const { domain } = context.state\n return await getRepository(Application).save({\n ...application,\n domain,\n appKey: Application.generateAppKey(),\n appSecret: Application.generateAppSecret(),\n creator: context.state.user,\n updater: context.state.user\n })\n }\n\n @Mutation(returns => Boolean, { description: 'To delete application' })\n async deleteApplication(@Arg('id') id: string, @Ctx() context: ResolverContext) {\n const { domain } = context.state\n await getRepository(Application).delete({\n domain: { id: domain.id },\n id\n })\n return true\n }\n\n @Mutation(returns => Application)\n async generateApplicationSecret(@Arg('id') id: string, @Ctx() context: ResolverContext) {\n const { domain } = context.state\n const repository = getRepository(Application)\n const application = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n return await repository.save({\n ...application,\n appSecret: Application.generateAppSecret(),\n updater: context.state.user\n })\n }\n\n @Mutation(returns => AccessToken)\n async renewApplicationAccessToken(\n @Arg('id') id: string,\n @Ctx() context: ResolverContext,\n @Arg('scope') scope?: string\n ) {\n const { domain } = context.state\n\n var appuser: User = await getRepository(User).findOneBy({\n id,\n userType: 'application'\n })\n\n if (!appuser) {\n throw new Error('application is not bound')\n }\n\n const repository = getRepository(Application)\n const application = await repository.findOneBy({ id: appuser.reference })\n if (!application) {\n throw new Error('application not found')\n }\n\n var accessToken = Application.generateAccessToken(domain, appuser, application.appSecret, scope || '')\n var refreshToken = Application.generateRefreshToken(domain, appuser, application.appSecret, scope || '')\n\n await getRepository(User).save({\n ...(appuser as any),\n password: refreshToken\n })\n\n return {\n accessToken,\n refreshToken\n }\n }\n\n @Mutation(returns => Application)\n async updateApplication(\n @Arg('id') id: string,\n @Arg('patch') patch: ApplicationPatch,\n @Ctx() context: ResolverContext\n ) {\n const repository = getRepository(Application)\n const application = await repository.findOneBy({ id })\n\n return await repository.save({\n ...application,\n ...patch,\n updater: context.state.user\n })\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { Domain, ListParam } from '@things-factory/shell';
2
+ import { User } from '../user/user';
3
+ import { Application } from './application';
4
+ export declare class ApplicationQuery {
5
+ application(id: string, context: ResolverContext): Promise<Application>;
6
+ applications(params: ListParam, context: ResolverContext): Promise<{
7
+ items: Application[];
8
+ total: number;
9
+ }>;
10
+ availableScopes(context: ResolverContext): Promise<string>;
11
+ accessTokenUrl(context: ResolverContext): Promise<string>;
12
+ authUrl(context: ResolverContext): Promise<string>;
13
+ domain(context: ResolverContext): Promise<Domain>;
14
+ updater(application: Application): Promise<User>;
15
+ creator(application: Application): Promise<User>;
16
+ }
@@ -1,32 +1,30 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.ApplicationQuery = void 0;
5
4
  const tslib_1 = require("tslib");
6
5
  const type_graphql_1 = require("type-graphql");
7
- const user_1 = require("../user/user");
6
+ const url_1 = require("url");
7
+ const env_1 = require("@things-factory/env");
8
+ const shell_1 = require("@things-factory/shell");
8
9
  const role_1 = require("../role/role");
10
+ const user_1 = require("../user/user");
9
11
  const application_1 = require("./application");
10
- const typeorm_1 = require("typeorm");
11
12
  const application_types_1 = require("./application-types");
12
- const shell_1 = require("@things-factory/shell");
13
- const env_1 = require("@things-factory/env");
14
- const url_1 = require("url");
15
13
  const protocol = env_1.config.get('protocol');
16
14
  let ApplicationQuery = class ApplicationQuery {
17
15
  async application(id, context) {
18
- const repository = (0, typeorm_1.getRepository)(application_1.Application);
19
- return await repository.findOne(id);
16
+ const repository = (0, shell_1.getRepository)(application_1.Application);
17
+ return await repository.findOneBy({ id });
20
18
  }
21
19
  async applications(params, context) {
22
- const qb = (0, typeorm_1.getRepository)(application_1.Application).createQueryBuilder('Application');
20
+ const qb = (0, shell_1.getRepository)(application_1.Application).createQueryBuilder('Application');
23
21
  (0, shell_1.buildQuery)(qb, params, context);
24
22
  const [items, total] = await qb.getManyAndCount();
25
23
  return { items, total };
26
24
  }
27
25
  async availableScopes(context) {
28
26
  const { domain } = context.state;
29
- const roles = await (0, typeorm_1.getRepository)(role_1.Role).find({ domain });
27
+ const roles = await (0, shell_1.getRepository)(role_1.Role).findBy({ domain });
30
28
  return roles.map((role) => role.name).join(' ');
31
29
  }
32
30
  async accessTokenUrl(context) {
@@ -39,10 +37,10 @@ let ApplicationQuery = class ApplicationQuery {
39
37
  return context.state.domain;
40
38
  }
41
39
  async updater(application) {
42
- return await (0, typeorm_1.getRepository)(user_1.User).findOne(application.updaterId);
40
+ return await (0, shell_1.getRepository)(user_1.User).findOneBy({ id: application.updaterId });
43
41
  }
44
42
  async creator(application) {
45
- return await (0, typeorm_1.getRepository)(user_1.User).findOne(application.creatorId);
43
+ return await (0, shell_1.getRepository)(user_1.User).findOneBy({ id: application.creatorId });
46
44
  }
47
45
  };
48
46
  tslib_1.__decorate([
@@ -58,7 +56,7 @@ tslib_1.__decorate([
58
56
  tslib_1.__param(0, (0, type_graphql_1.Args)()),
59
57
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
60
58
  tslib_1.__metadata("design:type", Function),
61
- tslib_1.__metadata("design:paramtypes", [typeof (_a = typeof shell_1.ListParam !== "undefined" && shell_1.ListParam) === "function" ? _a : Object, Object]),
59
+ tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
62
60
  tslib_1.__metadata("design:returntype", Promise)
63
61
  ], ApplicationQuery.prototype, "applications", null);
64
62
  tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"application-query.js","sourceRoot":"","sources":["../../../server/service/application/application-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Args, Arg, Query, Ctx, Root, FieldResolver } from 'type-graphql'\nimport { User } from '../user/user'\nimport { Role } from '../role/role'\nimport { Application } from './application'\nimport { getRepository, SelectQueryBuilder } from 'typeorm'\nimport { ApplicationList } from './application-types'\nimport { ListParam, buildQuery, Domain } from '@things-factory/shell'\nimport { config } from '@things-factory/env'\nimport { URL } from 'url'\nconst protocol: string = config.get('protocol')\n\n@Resolver(Application)\nexport class ApplicationQuery {\n @Query(returns => Application, { description: 'To fetch application' })\n async application(@Arg('id') id: string, @Ctx() context: any): Promise<Application> {\n const repository = getRepository(Application)\n\n return await repository.findOne(id)\n }\n\n @Query(returns => ApplicationList, { description: 'To fetch multiple application' })\n async applications(@Args() params: ListParam, @Ctx() context: any) {\n const qb: SelectQueryBuilder<Application> = getRepository(Application).createQueryBuilder('Application')\n buildQuery(qb, params, context)\n\n const [items, total] = await qb.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => String)\n async availableScopes(@Ctx() context: any): Promise<string> {\n const { domain } = context.state\n const roles = await getRepository(Role).find({ domain })\n\n return roles.map((role: Role) => role.name).join(' ')\n }\n\n @FieldResolver(type => String)\n async accessTokenUrl(@Ctx() context: any): Promise<string> {\n return buildAuthURL('/oauth/access-token', context)\n }\n\n @FieldResolver(type => String)\n async authUrl(@Ctx() context: any): Promise<string> {\n return buildAuthURL('/oauth/authorize', context)\n }\n\n @FieldResolver(type => Domain)\n async domain(@Ctx() context: any) {\n return context.state.domain\n }\n\n @FieldResolver(type => User)\n async updater(@Root() application: Application): Promise<User> {\n return await getRepository(User).findOne(application.updaterId)\n }\n\n @FieldResolver(type => User)\n async creator(@Root() application: Application): Promise<User> {\n return await getRepository(User).findOne(application.creatorId)\n }\n}\n\nfunction buildAuthURL(pathname: string, context: any): string {\n const { origin } = context.request\n let url: URL = new URL(origin)\n url.protocol = protocol || url.protocol\n url.pathname = pathname\n return url.href\n}\n"]}
1
+ {"version":3,"file":"application-query.js","sourceRoot":"","sources":["../../../server/service/application/application-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'\nimport { SelectQueryBuilder } from 'typeorm'\nimport { URL } from 'url'\n\nimport { config } from '@things-factory/env'\nimport { buildQuery, Domain, getRepository, ListParam } from '@things-factory/shell'\n\nimport { Role } from '../role/role'\nimport { User } from '../user/user'\nimport { Application } from './application'\nimport { ApplicationList } from './application-types'\n\nconst protocol: string = config.get('protocol')\n\n@Resolver(Application)\nexport class ApplicationQuery {\n @Query(returns => Application, { description: 'To fetch application' })\n async application(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Application> {\n const repository = getRepository(Application)\n\n return await repository.findOneBy({ id })\n }\n\n @Query(returns => ApplicationList, { description: 'To fetch multiple application' })\n async applications(@Args() params: ListParam, @Ctx() context: ResolverContext) {\n const qb: SelectQueryBuilder<Application> = getRepository(Application).createQueryBuilder('Application')\n buildQuery(qb, params, context)\n\n const [items, total] = await qb.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => String)\n async availableScopes(@Ctx() context: ResolverContext): Promise<string> {\n const { domain } = context.state\n const roles = await getRepository(Role).findBy({ domain })\n\n return roles.map((role: Role) => role.name).join(' ')\n }\n\n @FieldResolver(type => String)\n async accessTokenUrl(@Ctx() context: ResolverContext): Promise<string> {\n return buildAuthURL('/oauth/access-token', context)\n }\n\n @FieldResolver(type => String)\n async authUrl(@Ctx() context: ResolverContext): Promise<string> {\n return buildAuthURL('/oauth/authorize', context)\n }\n\n @FieldResolver(type => Domain)\n async domain(@Ctx() context: ResolverContext) {\n return context.state.domain\n }\n\n @FieldResolver(type => User)\n async updater(@Root() application: Application): Promise<User> {\n return await getRepository(User).findOneBy({ id: application.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() application: Application): Promise<User> {\n return await getRepository(User).findOneBy({ id: application.creatorId })\n }\n}\n\nfunction buildAuthURL(pathname: string, context: ResolverContext): string {\n const { origin } = context.request\n let url: URL = new URL(origin)\n url.protocol = protocol || url.protocol\n url.pathname = pathname\n return url.href\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import { Application } from './application';
2
+ export declare class AccessToken {
3
+ accesToken: string;
4
+ refreshToken: string;
5
+ }
6
+ export declare class ApplicationList {
7
+ items?: Application[];
8
+ total?: number;
9
+ }
10
+ export declare class ApplicationPatch {
11
+ name?: string;
12
+ description?: string;
13
+ email?: string;
14
+ url?: string;
15
+ icon?: string;
16
+ redirectUrl?: string;
17
+ webhook?: string;
18
+ }
19
+ export declare class NewApplication {
20
+ name: string;
21
+ description?: string;
22
+ email?: string;
23
+ url?: string;
24
+ icon?: string;
25
+ redirectUrl?: string;
26
+ webhook?: string;
27
+ }
@@ -0,0 +1,35 @@
1
+ import { User } from '../user/user';
2
+ import { Domain } from '@things-factory/shell';
3
+ import jwt from 'jsonwebtoken';
4
+ export declare enum ApplicationStatus {
5
+ DRAFT = "DRAFT",
6
+ ACTIVATED = "ACTIVATED"
7
+ }
8
+ export declare class Application {
9
+ readonly id: string;
10
+ domain: Domain;
11
+ domainId: string;
12
+ name: string;
13
+ description: string;
14
+ email: string;
15
+ url: string;
16
+ icon: string;
17
+ redirectUrl: string;
18
+ webhook: string;
19
+ appKey: string;
20
+ appSecret: string;
21
+ status: ApplicationStatus;
22
+ createdAt: Date;
23
+ updatedAt: Date;
24
+ creator: User;
25
+ creatorId: string;
26
+ updater: User;
27
+ updaterId: string;
28
+ static generateAppSecret(): string;
29
+ static generateAppKey(): string;
30
+ static sign(subject: any, expiresIn: any, domain: any, user: any, appKey: any, scope: any): string;
31
+ static generateAccessToken(domain: any, user: any, appKey: any, scope: any): string;
32
+ static generateRefreshToken(domain: any, user: any, appKey: any, scope: any): string;
33
+ static generateAuthCode(email: any, appKey: any, subdomain: any, scopes: any, state: any): string;
34
+ static verifyAuthCode(authcode: any): string | jwt.JwtPayload;
35
+ }
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.Application = exports.ApplicationStatus = void 0;
5
4
  const tslib_1 = require("tslib");
@@ -83,7 +82,7 @@ tslib_1.__decorate([
83
82
  ], Application.prototype, "id", void 0);
84
83
  tslib_1.__decorate([
85
84
  (0, typeorm_1.ManyToOne)(type => shell_1.Domain),
86
- tslib_1.__metadata("design:type", typeof (_a = typeof shell_1.Domain !== "undefined" && shell_1.Domain) === "function" ? _a : Object)
85
+ tslib_1.__metadata("design:type", shell_1.Domain)
87
86
  ], Application.prototype, "domain", void 0);
88
87
  tslib_1.__decorate([
89
88
  (0, typeorm_1.RelationId)((application) => application.domain),
@@ -1 +1 @@
1
- {"version":3,"file":"application.js","sourceRoot":"","sources":["../../../server/service/application/application.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\nimport { Field, ID, ObjectType, registerEnumType } from 'type-graphql'\nimport { User, UserStatus } from '../user/user'\n\nimport { Domain } from '@things-factory/shell'\nimport { SECRET } from '../../utils/get-secret'\nimport { config } from '@things-factory/env'\nimport crypto from 'crypto'\nimport jwt from 'jsonwebtoken'\n\nconst ORMCONFIG = config.get('ormconfig', {})\nconst DATABASE_TYPE = ORMCONFIG.type\n\nexport enum ApplicationStatus {\n DRAFT = 'DRAFT',\n ACTIVATED = 'ACTIVATED'\n}\n\nregisterEnumType(ApplicationStatus, {\n name: 'ApplicationStatus',\n description: 'state enumeration of a application'\n})\n\n@Entity()\n@Index('ix_application_0', (application: Application) => [application.appKey], { unique: true })\n@ObjectType()\nexport class Application {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n domain: Domain\n\n @RelationId((application: Application) => application.domain)\n domainId: string\n\n @Column()\n @Field()\n name: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n description: string\n\n @Column()\n @Field()\n email: string\n\n @Column()\n @Field()\n url: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n icon: string\n\n @Column()\n @Field()\n redirectUrl: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n webhook: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n appKey: string\n\n @Column({\n nullable: true,\n type:\n DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'\n ? 'longtext'\n : DATABASE_TYPE == 'oracle'\n ? 'clob'\n : 'varchar'\n })\n @Field({ nullable: true })\n appSecret: string\n\n @Column({\n default: ApplicationStatus.DRAFT\n })\n @Field()\n status: ApplicationStatus\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt: Date\n\n @ManyToOne(type => User, {\n nullable: true\n })\n @Field({ nullable: true })\n creator: User\n\n @RelationId((application: Application) => application.creator)\n creatorId: string\n\n @ManyToOne(type => User, {\n nullable: true\n })\n @Field({ nullable: true })\n updater: User\n\n @RelationId((application: Application) => application.updater)\n updaterId: string\n\n /* generateAppSecret */\n static generateAppSecret() {\n return crypto.randomBytes(16).toString('hex')\n }\n\n static generateAppKey() {\n return crypto.randomBytes(16).toString('hex')\n }\n\n /* signing for jsonwebtoken */\n static sign(subject, expiresIn, domain, user, appKey, scope) {\n var application = {\n id: user.id,\n userType: 'application',\n application: {\n appKey\n },\n status: UserStatus.ACTIVATED,\n domain: {\n subdomain: domain.subdomain\n },\n scope\n }\n\n return jwt.sign(application, SECRET, {\n expiresIn,\n issuer: 'hatiolab.com',\n subject\n })\n }\n\n static generateAccessToken(domain, user, appKey, scope) {\n /* how to set expiresIn https://github.com/vercel/ms */\n return this.sign('access-token', '30d', domain, user, appKey, scope)\n }\n\n static generateRefreshToken(domain, user, appKey, scope) {\n /* how to set expiresIn https://github.com/vercel/ms */\n return this.sign('refresh-token', '1y', domain, user, appKey, scope)\n }\n\n /* auth-code signing for jsonwebtoken */\n static generateAuthCode(email, appKey, subdomain, scopes, state) {\n var credential = {\n email,\n appKey,\n subdomain,\n scopes,\n state\n }\n\n return jwt.sign(credential, SECRET, {\n expiresIn: '1m'\n })\n }\n\n /* auth-code signing for jsonwebtoken */\n static verifyAuthCode(authcode) {\n return jwt.verify(authcode, SECRET)\n }\n}\n"]}
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../../../server/service/application/application.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\nimport { Field, ID, ObjectType, registerEnumType } from 'type-graphql'\nimport { User, UserStatus } from '../user/user'\n\nimport { Domain } from '@things-factory/shell'\nimport { SECRET } from '../../utils/get-secret'\nimport { config } from '@things-factory/env'\nimport crypto from 'crypto'\nimport jwt from 'jsonwebtoken'\n\nconst ORMCONFIG = config.get('ormconfig', {})\nconst DATABASE_TYPE = ORMCONFIG.type\n\nexport enum ApplicationStatus {\n DRAFT = 'DRAFT',\n ACTIVATED = 'ACTIVATED'\n}\n\nregisterEnumType(ApplicationStatus, {\n name: 'ApplicationStatus',\n description: 'state enumeration of a application'\n})\n\n@Entity()\n@Index('ix_application_0', (application: Application) => [application.appKey], { unique: true })\n@ObjectType()\nexport class Application {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n domain: Domain\n\n @RelationId((application: Application) => application.domain)\n domainId: string\n\n @Column()\n @Field()\n name: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n description: string\n\n @Column()\n @Field()\n email: string\n\n @Column()\n @Field()\n url: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n icon: string\n\n @Column()\n @Field()\n redirectUrl: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n webhook: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n appKey: string\n\n @Column({\n nullable: true,\n type:\n DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'\n ? 'longtext'\n : DATABASE_TYPE == 'oracle'\n ? 'clob'\n : 'varchar'\n })\n @Field({ nullable: true })\n appSecret: string\n\n @Column({\n default: ApplicationStatus.DRAFT\n })\n @Field()\n status: ApplicationStatus\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt: Date\n\n @ManyToOne(type => User, {\n nullable: true\n })\n @Field({ nullable: true })\n creator: User\n\n @RelationId((application: Application) => application.creator)\n creatorId: string\n\n @ManyToOne(type => User, {\n nullable: true\n })\n @Field({ nullable: true })\n updater: User\n\n @RelationId((application: Application) => application.updater)\n updaterId: string\n\n /* generateAppSecret */\n static generateAppSecret() {\n return crypto.randomBytes(16).toString('hex')\n }\n\n static generateAppKey() {\n return crypto.randomBytes(16).toString('hex')\n }\n\n /* signing for jsonwebtoken */\n static sign(subject, expiresIn, domain, user, appKey, scope) {\n var application = {\n id: user.id,\n userType: 'application',\n application: {\n appKey\n },\n status: UserStatus.ACTIVATED,\n domain: {\n subdomain: domain.subdomain\n },\n scope\n }\n\n return jwt.sign(application, SECRET, {\n expiresIn,\n issuer: 'hatiolab.com',\n subject\n })\n }\n\n static generateAccessToken(domain, user, appKey, scope) {\n /* how to set expiresIn https://github.com/vercel/ms */\n return this.sign('access-token', '30d', domain, user, appKey, scope)\n }\n\n static generateRefreshToken(domain, user, appKey, scope) {\n /* how to set expiresIn https://github.com/vercel/ms */\n return this.sign('refresh-token', '1y', domain, user, appKey, scope)\n }\n\n /* auth-code signing for jsonwebtoken */\n static generateAuthCode(email, appKey, subdomain, scopes, state) {\n var credential = {\n email,\n appKey,\n subdomain,\n scopes,\n state\n }\n\n return jwt.sign(credential, SECRET, {\n expiresIn: '1m'\n })\n }\n\n /* auth-code signing for jsonwebtoken */\n static verifyAuthCode(authcode) {\n return jwt.verify(authcode, SECRET)\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { Application } from './application';
2
+ import { ApplicationQuery } from './application-query';
3
+ import { ApplicationMutation } from './application-mutation';
4
+ export declare const entities: (typeof Application)[];
5
+ export declare const resolvers: (typeof ApplicationQuery | typeof ApplicationMutation)[];
@@ -0,0 +1,6 @@
1
+ import { Domain } from '@things-factory/shell';
2
+ import { DomainGeneratorInput, DomainUserRoleInput } from './domain-generator-types';
3
+ export declare class DomainGeneratorMutation {
4
+ domainRegister(domainInput: DomainGeneratorInput, context: ResolverContext): Promise<Domain>;
5
+ domainUserRoleRegister(newDomainInfo: DomainUserRoleInput, context: ResolverContext): Promise<Domain>;
6
+ }
@@ -2,21 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DomainGeneratorMutation = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const shell_1 = require("@things-factory/shell");
5
+ const type_graphql_1 = require("type-graphql");
6
6
  const typeorm_1 = require("typeorm");
7
+ const shell_1 = require("@things-factory/shell");
7
8
  const utils_1 = require("@things-factory/utils");
8
- const type_graphql_1 = require("type-graphql");
9
- const domain_generator_types_1 = require("./domain-generator-types");
10
- const role_1 = require("../role/role");
11
9
  const privilege_1 = require("../privilege/privilege");
10
+ const role_1 = require("../role/role");
12
11
  const user_1 = require("../user/user");
12
+ const domain_generator_types_1 = require("./domain-generator-types");
13
13
  let DomainGeneratorMutation = class DomainGeneratorMutation {
14
14
  async domainRegister(domainInput, context) {
15
15
  const { user } = context.state;
16
16
  const { name, description } = domainInput;
17
- const domainRepo = (0, typeorm_1.getRepository)(shell_1.Domain);
17
+ const domainRepo = (0, shell_1.getRepository)(shell_1.Domain);
18
18
  const subdomain = (0, utils_1.slugger)(name);
19
- const domain = await domainRepo.findOne({ subdomain });
19
+ const domain = await domainRepo.findOneBy({ subdomain });
20
20
  if (domain) {
21
21
  throw new Error('domain is duplicated');
22
22
  }
@@ -42,7 +42,7 @@ let DomainGeneratorMutation = class DomainGeneratorMutation {
42
42
  var _a;
43
43
  if ((_a = role.privileges) === null || _a === void 0 ? void 0 : _a.length) {
44
44
  const privilegeIds = role.privileges.map((p) => p.id);
45
- role.privileges = await privilegeRepository.find({ id: (0, typeorm_1.In)(privilegeIds) });
45
+ role.privileges = await privilegeRepository.findBy({ id: (0, typeorm_1.In)(privilegeIds) });
46
46
  }
47
47
  role.domain = newDomain;
48
48
  return await roleRepository.save(role);
@@ -1 +1 @@
1
- {"version":3,"file":"domain-generator-mutation.js","sourceRoot":"","sources":["../../../server/service/domain-generator/domain-generator-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Domain } from '@things-factory/shell'\nimport { getRepository, Repository, EntityManager, In } from 'typeorm'\nimport { slugger } from '@things-factory/utils'\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { DomainGeneratorInput, DomainUserRoleInput } from './domain-generator-types'\nimport { Role } from '../role/role'\nimport { Privilege } from '../privilege/privilege'\nimport { User } from '../user/user'\n\n@Resolver()\nexport class DomainGeneratorMutation {\n @Directive('@privilege(category: \"system\", privilege: \"mutation\", superUserGranted: true)')\n @Mutation(returns => Domain)\n async domainRegister(@Arg('domainInput') domainInput: DomainGeneratorInput, @Ctx() context: any): Promise<Domain> {\n const { user } = context.state\n const { name, description } = domainInput\n const domainRepo: Repository<Domain> = getRepository(Domain)\n const subdomain: string = slugger(name)\n\n const domain: Domain = await domainRepo.findOne({ subdomain })\n if (domain) {\n throw new Error('domain is duplicated')\n }\n\n return await domainRepo.save({ name, description, subdomain, owner: user.id })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Domain)\n async domainUserRoleRegister(\n @Arg('newDomainInfo') newDomainInfo: DomainUserRoleInput,\n @Ctx() context: any\n ): Promise<Domain> {\n const { tx }: { tx: EntityManager } = context.state\n // 도메인 생성\n const { domain, users, roles } = newDomainInfo\n const domainOwner = users.find(user => user.owner === true)\n\n const domainRepository: Repository<Domain> = tx.getRepository(Domain)\n const roleRepository: Repository<Role> = tx.getRepository(Role)\n const userRepository: Repository<User> = tx.getRepository(User)\n const privilegeRepository: Repository<Privilege> = tx.getRepository(Privilege)\n\n const subdomain: string = slugger(domain.name)\n\n const newDomain = await domainRepository.save({\n name: domain.name,\n description: domain.description,\n subdomain\n })\n\n // 역할 생성\n const newRoles: Role[] = await Promise.all(\n roles.map(async (role: Role) => {\n if (role.privileges?.length) {\n const privilegeIds: string[] = role.privileges.map((p: Privilege) => p.id)\n role.privileges = await privilegeRepository.find({ id: In(privilegeIds) })\n }\n\n role.domain = newDomain\n return await roleRepository.save(role)\n })\n )\n\n // 사용자 생성\n let inviteUsers = []\n let createUsers = []\n users.forEach(user => (user.isInvitee ? inviteUsers.push(user) : createUsers.push(user)))\n\n // create user\n await Promise.all(\n createUsers.map(async user => {\n user.domains = [newDomain]\n user.password = User.encode(user.password, user.salt)\n user.salt = User.generateSalt()\n user.passwordUpdatedAt = new Date()\n user.userType = 'user'\n user.roles = filterUserRoles(user.roles, newRoles)\n\n return await userRepository.save(user)\n })\n )\n\n // invite user\n await Promise.all(\n inviteUsers.map(async inviteUser => {\n const user: User = await userRepository.findOne({\n where: { email: inviteUser.email },\n relations: ['domains', 'roles']\n })\n\n user.domains = [...user.domains, newDomain]\n user.roles = [...user.roles, ...filterUserRoles(inviteUser.roles, newRoles)]\n\n return await userRepository.save(user)\n })\n )\n\n // domain owner\n const { id } = await userRepository.findOne({ where: { email: domainOwner.email } })\n newDomain.owner = id\n return await domainRepository.save(newDomain)\n }\n}\n\nfunction filterUserRoles(userRoles: Role[], newRoles: Role[]): Role[] {\n const userRoleNames: string[] = userRoles.map((r: Role) => r.name)\n return newRoles.filter((r: Role) => userRoleNames.indexOf(r.name) >= 0)\n}\n"]}
1
+ {"version":3,"file":"domain-generator-mutation.js","sourceRoot":"","sources":["../../../server/service/domain-generator/domain-generator-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In, Repository } from 'typeorm'\n\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { slugger } from '@things-factory/utils'\n\nimport { Privilege } from '../privilege/privilege'\nimport { Role } from '../role/role'\nimport { User } from '../user/user'\nimport { DomainGeneratorInput, DomainUserRoleInput } from './domain-generator-types'\n\n@Resolver()\nexport class DomainGeneratorMutation {\n @Directive('@privilege(category: \"system\", privilege: \"mutation\", superUserGranted: true)')\n @Mutation(returns => Domain)\n async domainRegister(\n @Arg('domainInput') domainInput: DomainGeneratorInput,\n @Ctx() context: ResolverContext\n ): Promise<Domain> {\n const { user } = context.state\n const { name, description } = domainInput\n const domainRepo: Repository<Domain> = getRepository(Domain)\n const subdomain: string = slugger(name)\n\n const domain: Domain = await domainRepo.findOneBy({ subdomain })\n if (domain) {\n throw new Error('domain is duplicated')\n }\n\n return await domainRepo.save({ name, description, subdomain, owner: user.id })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Domain)\n async domainUserRoleRegister(\n @Arg('newDomainInfo') newDomainInfo: DomainUserRoleInput,\n @Ctx() context: ResolverContext\n ): Promise<Domain> {\n const { tx } = context.state\n // 도메인 생성\n const { domain, users, roles } = newDomainInfo\n const domainOwner = users.find(user => user.owner === true)\n\n const domainRepository: Repository<Domain> = tx.getRepository(Domain)\n const roleRepository: Repository<Role> = tx.getRepository(Role)\n const userRepository: Repository<User> = tx.getRepository(User)\n const privilegeRepository: Repository<Privilege> = tx.getRepository(Privilege)\n\n const subdomain: string = slugger(domain.name)\n\n const newDomain = await domainRepository.save({\n name: domain.name,\n description: domain.description,\n subdomain\n })\n\n // 역할 생성\n const newRoles: Role[] = await Promise.all(\n roles.map(async (role: Role) => {\n if (role.privileges?.length) {\n const privilegeIds: string[] = role.privileges.map((p: Privilege) => p.id)\n role.privileges = await privilegeRepository.findBy({ id: In(privilegeIds) })\n }\n\n role.domain = newDomain\n return await roleRepository.save(role)\n })\n )\n\n // 사용자 생성\n let inviteUsers = []\n let createUsers = []\n users.forEach(user => (user.isInvitee ? inviteUsers.push(user) : createUsers.push(user)))\n\n // create user\n await Promise.all(\n createUsers.map(async user => {\n user.domains = [newDomain]\n user.password = User.encode(user.password, user.salt)\n user.salt = User.generateSalt()\n user.passwordUpdatedAt = new Date()\n user.userType = 'user'\n user.roles = filterUserRoles(user.roles, newRoles)\n\n return await userRepository.save(user)\n })\n )\n\n // invite user\n await Promise.all(\n inviteUsers.map(async inviteUser => {\n const user: User = await userRepository.findOne({\n where: { email: inviteUser.email },\n relations: ['domains', 'roles']\n })\n\n user.domains = [...user.domains, newDomain]\n user.roles = [...user.roles, ...filterUserRoles(inviteUser.roles, newRoles)]\n\n return await userRepository.save(user)\n })\n )\n\n // domain owner\n const { id } = await userRepository.findOne({ where: { email: domainOwner.email } })\n newDomain.owner = id\n return await domainRepository.save(newDomain)\n }\n}\n\nfunction filterUserRoles(userRoles: Role[], newRoles: Role[]): Role[] {\n const userRoleNames: string[] = userRoles.map((r: Role) => r.name)\n return newRoles.filter((r: Role) => userRoleNames.indexOf(r.name) >= 0)\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import { DomainInput } from '@things-factory/shell';
2
+ import { NewRole } from '../role/role-types';
3
+ export declare class DomainGeneratorInput {
4
+ name: string;
5
+ description?: string;
6
+ }
7
+ export declare class DomainUserRoleInput {
8
+ domain: DomainInput;
9
+ users: NewUserByDomainWizardInput[];
10
+ roles: NewRole[];
11
+ }
12
+ export declare class NewUserByDomainWizardInput {
13
+ name: string;
14
+ email: string;
15
+ password: string;
16
+ isInvitee: Boolean;
17
+ owner: Boolean;
18
+ roles: NewRole[];
19
+ }
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.NewUserByDomainWizardInput = exports.DomainUserRoleInput = exports.DomainGeneratorInput = void 0;
5
4
  const tslib_1 = require("tslib");
@@ -24,7 +23,7 @@ let DomainUserRoleInput = class DomainUserRoleInput {
24
23
  };
25
24
  tslib_1.__decorate([
26
25
  (0, type_graphql_1.Field)(type => shell_1.DomainInput),
27
- tslib_1.__metadata("design:type", typeof (_a = typeof shell_1.DomainInput !== "undefined" && shell_1.DomainInput) === "function" ? _a : Object)
26
+ tslib_1.__metadata("design:type", shell_1.DomainInput)
28
27
  ], DomainUserRoleInput.prototype, "domain", void 0);
29
28
  tslib_1.__decorate([
30
29
  (0, type_graphql_1.Field)(type => [NewUserByDomainWizardInput]),