@things-factory/auth-base 7.0.1-beta.9 → 7.0.1-rc.1

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 (246) hide show
  1. package/dist-client/auth.js.map +1 -1
  2. package/dist-client/directive/privileged.d.ts +5 -5
  3. package/dist-client/directive/privileged.js.map +1 -1
  4. package/dist-client/profiled.js.map +1 -1
  5. package/dist-client/reducers/auth.js.map +1 -1
  6. package/dist-client/tsconfig.tsbuildinfo +1 -1
  7. package/dist-server/controllers/change-pwd.js +1 -2
  8. package/dist-server/controllers/change-pwd.js.map +1 -1
  9. package/dist-server/controllers/checkin.js +1 -2
  10. package/dist-server/controllers/checkin.js.map +1 -1
  11. package/dist-server/controllers/delete-user.js +2 -3
  12. package/dist-server/controllers/delete-user.js.map +1 -1
  13. package/dist-server/controllers/invitation.js +4 -5
  14. package/dist-server/controllers/invitation.js.map +1 -1
  15. package/dist-server/controllers/profile.js +1 -2
  16. package/dist-server/controllers/profile.js.map +1 -1
  17. package/dist-server/controllers/reset-password.js +2 -3
  18. package/dist-server/controllers/reset-password.js.map +1 -1
  19. package/dist-server/controllers/signin.js +1 -2
  20. package/dist-server/controllers/signin.js.map +1 -1
  21. package/dist-server/controllers/signup.js +1 -2
  22. package/dist-server/controllers/signup.js.map +1 -1
  23. package/dist-server/controllers/unlock-user.js +2 -3
  24. package/dist-server/controllers/unlock-user.js.map +1 -1
  25. package/dist-server/controllers/utils/make-invitation-token.js +1 -2
  26. package/dist-server/controllers/utils/make-invitation-token.js.map +1 -1
  27. package/dist-server/controllers/utils/make-verification-token.js +1 -2
  28. package/dist-server/controllers/utils/make-verification-token.js.map +1 -1
  29. package/dist-server/controllers/utils/password-rule.js +10 -10
  30. package/dist-server/controllers/utils/password-rule.js.map +1 -1
  31. package/dist-server/controllers/utils/save-invitation-token.js +1 -2
  32. package/dist-server/controllers/utils/save-invitation-token.js.map +1 -1
  33. package/dist-server/controllers/utils/save-verification-token.js +1 -2
  34. package/dist-server/controllers/utils/save-verification-token.js.map +1 -1
  35. package/dist-server/controllers/verification.js +3 -4
  36. package/dist-server/controllers/verification.js.map +1 -1
  37. package/dist-server/index.js.map +1 -1
  38. package/dist-server/middlewares/authenticate-401-middleware.js +1 -2
  39. package/dist-server/middlewares/authenticate-401-middleware.js.map +1 -1
  40. package/dist-server/middlewares/domain-authenticate-middleware.js +1 -2
  41. package/dist-server/middlewares/domain-authenticate-middleware.js.map +1 -1
  42. package/dist-server/middlewares/graphql-authenticate-middleware.js +1 -2
  43. package/dist-server/middlewares/graphql-authenticate-middleware.js.map +1 -1
  44. package/dist-server/middlewares/index.js +1 -2
  45. package/dist-server/middlewares/index.js.map +1 -1
  46. package/dist-server/middlewares/jwt-authenticate-middleware.js +1 -2
  47. package/dist-server/middlewares/jwt-authenticate-middleware.js.map +1 -1
  48. package/dist-server/middlewares/signin-middleware.js +1 -2
  49. package/dist-server/middlewares/signin-middleware.js.map +1 -1
  50. package/dist-server/middlewares/webauthn-middleware.js +2 -2
  51. package/dist-server/middlewares/webauthn-middleware.js.map +1 -1
  52. package/dist-server/migrations/1548206416130-SeedUser.js.map +1 -1
  53. package/dist-server/migrations/1566805283882-SeedPrivilege.js.map +1 -1
  54. package/dist-server/router/auth-checkin-router.js.map +1 -1
  55. package/dist-server/router/auth-private-process-router.js.map +1 -1
  56. package/dist-server/router/auth-public-process-router.js.map +1 -1
  57. package/dist-server/router/auth-signin-router.js.map +1 -1
  58. package/dist-server/router/auth-signup-router.js.map +1 -1
  59. package/dist-server/router/oauth2/oauth2-authorize-router.js.map +1 -1
  60. package/dist-server/router/oauth2/oauth2-router.js.map +1 -1
  61. package/dist-server/router/oauth2/oauth2-server.js.map +1 -1
  62. package/dist-server/router/oauth2/passport-oauth2-client-password.js +1 -2
  63. package/dist-server/router/oauth2/passport-oauth2-client-password.js.map +1 -1
  64. package/dist-server/router/oauth2/passport-refresh-token.js +1 -2
  65. package/dist-server/router/oauth2/passport-refresh-token.js.map +1 -1
  66. package/dist-server/router/site-root-router.js.map +1 -1
  67. package/dist-server/routes.js.map +1 -1
  68. package/dist-server/service/app-binding/app-binding-mutation.js +2 -2
  69. package/dist-server/service/app-binding/app-binding-mutation.js.map +1 -1
  70. package/dist-server/service/app-binding/app-binding-query.js +3 -3
  71. package/dist-server/service/app-binding/app-binding-query.js.map +1 -1
  72. package/dist-server/service/app-binding/app-binding-types.js +2 -2
  73. package/dist-server/service/app-binding/app-binding-types.js.map +1 -1
  74. package/dist-server/service/app-binding/app-binding.js +2 -2
  75. package/dist-server/service/app-binding/app-binding.js.map +1 -1
  76. package/dist-server/service/appliance/appliance-mutation.js +2 -2
  77. package/dist-server/service/appliance/appliance-mutation.js.map +1 -1
  78. package/dist-server/service/appliance/appliance-query.js +4 -4
  79. package/dist-server/service/appliance/appliance-query.js.map +1 -1
  80. package/dist-server/service/appliance/appliance-types.js +6 -6
  81. package/dist-server/service/appliance/appliance-types.js.map +1 -1
  82. package/dist-server/service/appliance/appliance.js +2 -2
  83. package/dist-server/service/appliance/appliance.js.map +1 -1
  84. package/dist-server/service/application/application-mutation.js +2 -2
  85. package/dist-server/service/application/application-mutation.js.map +1 -1
  86. package/dist-server/service/application/application-query.js +3 -3
  87. package/dist-server/service/application/application-query.js.map +1 -1
  88. package/dist-server/service/application/application-types.js +8 -8
  89. package/dist-server/service/application/application-types.js.map +1 -1
  90. package/dist-server/service/application/application.js +6 -6
  91. package/dist-server/service/application/application.js.map +1 -1
  92. package/dist-server/service/auth-provider/auth-provider-mutation.js +2 -2
  93. package/dist-server/service/auth-provider/auth-provider-mutation.js.map +1 -1
  94. package/dist-server/service/auth-provider/auth-provider-parameter-spec.js +2 -2
  95. package/dist-server/service/auth-provider/auth-provider-parameter-spec.js.map +1 -1
  96. package/dist-server/service/auth-provider/auth-provider-query.js +3 -3
  97. package/dist-server/service/auth-provider/auth-provider-query.js.map +1 -1
  98. package/dist-server/service/auth-provider/auth-provider-type.js +6 -6
  99. package/dist-server/service/auth-provider/auth-provider-type.js.map +1 -1
  100. package/dist-server/service/auth-provider/auth-provider.js +6 -6
  101. package/dist-server/service/auth-provider/auth-provider.js.map +1 -1
  102. package/dist-server/service/domain-generator/domain-generator-mutation.js +2 -2
  103. package/dist-server/service/domain-generator/domain-generator-mutation.js.map +1 -1
  104. package/dist-server/service/domain-generator/domain-generator-types.js +6 -6
  105. package/dist-server/service/domain-generator/domain-generator-types.js.map +1 -1
  106. package/dist-server/service/granted-role/granted-role-mutation.js +6 -6
  107. package/dist-server/service/granted-role/granted-role-mutation.js.map +1 -1
  108. package/dist-server/service/granted-role/granted-role-query.js +2 -2
  109. package/dist-server/service/granted-role/granted-role-query.js.map +1 -1
  110. package/dist-server/service/granted-role/granted-role.js +2 -2
  111. package/dist-server/service/granted-role/granted-role.js.map +1 -1
  112. package/dist-server/service/invitation/invitation-mutation.js +2 -2
  113. package/dist-server/service/invitation/invitation-mutation.js.map +1 -1
  114. package/dist-server/service/invitation/invitation-query.js +2 -2
  115. package/dist-server/service/invitation/invitation-query.js.map +1 -1
  116. package/dist-server/service/invitation/invitation-types.js +2 -2
  117. package/dist-server/service/invitation/invitation-types.js.map +1 -1
  118. package/dist-server/service/invitation/invitation.js +2 -2
  119. package/dist-server/service/invitation/invitation.js.map +1 -1
  120. package/dist-server/service/login-history/login-history-query.js +3 -3
  121. package/dist-server/service/login-history/login-history-query.js.map +1 -1
  122. package/dist-server/service/login-history/login-history-type.js +2 -2
  123. package/dist-server/service/login-history/login-history-type.js.map +1 -1
  124. package/dist-server/service/login-history/login-history.js +2 -2
  125. package/dist-server/service/login-history/login-history.js.map +1 -1
  126. package/dist-server/service/partner/partner-mutation.js +2 -2
  127. package/dist-server/service/partner/partner-mutation.js.map +1 -1
  128. package/dist-server/service/partner/partner-query.js +4 -4
  129. package/dist-server/service/partner/partner-query.js.map +1 -1
  130. package/dist-server/service/partner/partner-types.js +2 -2
  131. package/dist-server/service/partner/partner-types.js.map +1 -1
  132. package/dist-server/service/partner/partner.js +2 -2
  133. package/dist-server/service/partner/partner.js.map +1 -1
  134. package/dist-server/service/password-history/password-history.js +2 -2
  135. package/dist-server/service/password-history/password-history.js.map +1 -1
  136. package/dist-server/service/privilege/privilege-directive.js.map +1 -1
  137. package/dist-server/service/privilege/privilege-mutation.js +2 -2
  138. package/dist-server/service/privilege/privilege-mutation.js.map +1 -1
  139. package/dist-server/service/privilege/privilege-query.js +3 -3
  140. package/dist-server/service/privilege/privilege-query.js.map +1 -1
  141. package/dist-server/service/privilege/privilege-types.js +8 -8
  142. package/dist-server/service/privilege/privilege-types.js.map +1 -1
  143. package/dist-server/service/privilege/privilege.js +6 -6
  144. package/dist-server/service/privilege/privilege.js.map +1 -1
  145. package/dist-server/service/role/role-mutation.js +2 -2
  146. package/dist-server/service/role/role-mutation.js.map +1 -1
  147. package/dist-server/service/role/role-query.js +3 -3
  148. package/dist-server/service/role/role-query.js.map +1 -1
  149. package/dist-server/service/role/role-types.js +10 -10
  150. package/dist-server/service/role/role-types.js.map +1 -1
  151. package/dist-server/service/role/role.js +2 -2
  152. package/dist-server/service/role/role.js.map +1 -1
  153. package/dist-server/service/user/domain-query.js +2 -2
  154. package/dist-server/service/user/domain-query.js.map +1 -1
  155. package/dist-server/service/user/user-mutation.js +2 -2
  156. package/dist-server/service/user/user-mutation.js.map +1 -1
  157. package/dist-server/service/user/user-query.js +3 -3
  158. package/dist-server/service/user/user-query.js.map +1 -1
  159. package/dist-server/service/user/user-types.js +6 -6
  160. package/dist-server/service/user/user-types.js.map +1 -1
  161. package/dist-server/service/user/user.js +5 -5
  162. package/dist-server/service/user/user.js.map +1 -1
  163. package/dist-server/service/users-auth-providers/users-auth-providers.js +2 -2
  164. package/dist-server/service/users-auth-providers/users-auth-providers.js.map +1 -1
  165. package/dist-server/service/verification-token/verification-token.js +3 -3
  166. package/dist-server/service/verification-token/verification-token.js.map +1 -1
  167. package/dist-server/service/web-auth-credential/web-auth-credential.js +2 -2
  168. package/dist-server/service/web-auth-credential/web-auth-credential.js.map +1 -1
  169. package/dist-server/templates/account-unlock-email.js +1 -2
  170. package/dist-server/templates/account-unlock-email.js.map +1 -1
  171. package/dist-server/templates/invitation-email.js +1 -2
  172. package/dist-server/templates/invitation-email.js.map +1 -1
  173. package/dist-server/templates/reset-password-email.js +1 -2
  174. package/dist-server/templates/reset-password-email.js.map +1 -1
  175. package/dist-server/templates/verification-email.js +1 -2
  176. package/dist-server/templates/verification-email.js.map +1 -1
  177. package/dist-server/tsconfig.tsbuildinfo +1 -1
  178. package/dist-server/utils/accepts.js +1 -2
  179. package/dist-server/utils/accepts.js.map +1 -1
  180. package/dist-server/utils/access-token-cookie.js +4 -5
  181. package/dist-server/utils/access-token-cookie.js.map +1 -1
  182. package/dist-server/utils/check-permission.js +1 -2
  183. package/dist-server/utils/check-permission.js.map +1 -1
  184. package/dist-server/utils/check-user-belongs-domain.js +1 -2
  185. package/dist-server/utils/check-user-belongs-domain.js.map +1 -1
  186. package/dist-server/utils/encrypt-state.js +2 -3
  187. package/dist-server/utils/encrypt-state.js.map +1 -1
  188. package/dist-server/utils/get-aes-256-key.js.map +1 -1
  189. package/dist-server/utils/get-domain-from-hostname.js +1 -2
  190. package/dist-server/utils/get-domain-from-hostname.js.map +1 -1
  191. package/dist-server/utils/get-domain-users.js +2 -3
  192. package/dist-server/utils/get-domain-users.js.map +1 -1
  193. package/dist-server/utils/get-secret.js.map +1 -1
  194. package/dist-server/utils/get-user-domains.js +4 -5
  195. package/dist-server/utils/get-user-domains.js.map +1 -1
  196. package/helps/config/SECRET.ja.md +13 -0
  197. package/helps/config/SECRET.ko.md +13 -0
  198. package/helps/config/SECRET.md +3 -3
  199. package/helps/config/SECRET.ms.md +13 -0
  200. package/helps/config/SECRET.zh.md +13 -0
  201. package/helps/config/accessTokenCookieKey.ja.md +11 -0
  202. package/helps/config/accessTokenCookieKey.ko.md +11 -0
  203. package/helps/config/accessTokenCookieKey.md +1 -1
  204. package/helps/config/accessTokenCookieKey.ms.md +11 -0
  205. package/helps/config/accessTokenCookieKey.zh.md +11 -0
  206. package/helps/config/applianceJwtExpiresIn.ja.md +26 -0
  207. package/helps/config/applianceJwtExpiresIn.ko.md +26 -0
  208. package/helps/config/applianceJwtExpiresIn.md +18 -15
  209. package/helps/config/applianceJwtExpiresIn.ms.md +30 -0
  210. package/helps/config/applianceJwtExpiresIn.zh.md +26 -0
  211. package/helps/config/disableUserSignupProcess.ja.md +22 -0
  212. package/helps/config/disableUserSignupProcess.ko.md +22 -0
  213. package/helps/config/disableUserSignupProcess.md +3 -3
  214. package/helps/config/disableUserSignupProcess.ms.md +22 -0
  215. package/helps/config/disableUserSignupProcess.zh.md +22 -0
  216. package/helps/config/i18n.ja.md +44 -0
  217. package/helps/config/i18n.ko.md +44 -0
  218. package/helps/config/i18n.md +6 -6
  219. package/helps/config/i18n.ms.md +44 -0
  220. package/helps/config/i18n.zh.md +44 -0
  221. package/helps/config/password.ja.md +53 -0
  222. package/helps/config/password.ko.md +65 -0
  223. package/helps/config/password.md +8 -36
  224. package/helps/config/password.ms.md +65 -0
  225. package/helps/config/password.zh.md +65 -0
  226. package/helps/config/publicHomeRoute.ja.md +14 -0
  227. package/helps/config/publicHomeRoute.ko.md +14 -0
  228. package/helps/config/publicHomeRoute.md +3 -3
  229. package/helps/config/publicHomeRoute.ms.md +14 -0
  230. package/helps/config/publicHomeRoute.zh.md +14 -0
  231. package/helps/config/session.ja.md +45 -0
  232. package/helps/config/session.ko.md +49 -0
  233. package/helps/config/session.md +10 -10
  234. package/helps/config/session.ms.md +46 -0
  235. package/helps/config/session.zh.md +49 -0
  236. package/package.json +6 -6
  237. package/server/service/app-binding/app-binding-query.ts +1 -1
  238. package/server/service/appliance/appliance-query.ts +5 -2
  239. package/server/service/application/application-query.ts +1 -1
  240. package/server/service/application/application.ts +2 -2
  241. package/server/service/auth-provider/auth-provider-query.ts +4 -1
  242. package/server/service/login-history/login-history-query.ts +4 -1
  243. package/server/service/partner/partner-query.ts +5 -2
  244. package/server/service/privilege/privilege-query.ts +14 -3
  245. package/server/service/role/role-query.ts +1 -1
  246. package/server/service/user/user-query.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":"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","sourcesContent":["import { config } from '@things-factory/env'\n\nimport { domainAuthenticateMiddleware, jwtAuthenticateMiddleware } from './middlewares'\nimport {\n authCheckinRouter,\n authPrivateProcessRouter,\n authPublicProcessRouter,\n authSigninRouter,\n authSignupRouter,\n oauth2AuthorizeRouter,\n oauth2Router,\n pathBaseDomainRouter,\n siteRootRouter,\n webAuthnGlobalPublicRouter,\n webAuthnGlobalPrivateRouter\n} from './router'\n\nimport { setAccessTokenCookie } from './utils/access-token-cookie'\n\nconst isPathBaseDomain = !config.get('subdomain') && !config.get('useVirtualHostBasedDomain')\n\nprocess.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {\n globalPublicRouter.use(siteRootRouter.routes(), siteRootRouter.allowedMethods())\n globalPublicRouter.use(authPublicProcessRouter.routes(), authPublicProcessRouter.allowedMethods())\n\n /* ssoMiddleware가 정의되어있다면, /auth/sso-signin 패스를 활성화한다. */\n if (app.ssoMiddlewares.length > 0) {\n authSigninRouter.get('/auth/sso-signin', app.ssoMiddlewares[0], async context => {\n const { user } = context.state\n\n const token = await user.sign()\n setAccessTokenCookie(context, token)\n\n context.redirect('/auth/checkin')\n })\n }\n})\n\nprocess.on('bootstrap-module-global-private-route' as any, (app, globalPrivateRouter) => {\n globalPrivateRouter.use(jwtAuthenticateMiddleware)\n\n /* globalPrivateRouter based nested-routers */\n globalPrivateRouter.use(authCheckinRouter.routes(), authCheckinRouter.allowedMethods())\n globalPrivateRouter.use(authPrivateProcessRouter.routes(), authPrivateProcessRouter.allowedMethods())\n globalPrivateRouter.use(webAuthnGlobalPrivateRouter.routes(), webAuthnGlobalPrivateRouter.allowedMethods())\n})\n\nprocess.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {\n /* domainPublicRouter based nested-routers */\n domainPublicRouter.use(authSigninRouter.routes(), authSigninRouter.allowedMethods())\n domainPublicRouter.use(authSignupRouter.routes(), authSignupRouter.allowedMethods())\n domainPublicRouter.use(webAuthnGlobalPublicRouter.routes(), webAuthnGlobalPublicRouter.allowedMethods())\n\n /* path '/admin/oauth/...' is deprecated. should use path '/oauth/...' for oauth2 related routing */\n domainPublicRouter.use('/oauth', oauth2Router.routes(), oauth2Router.allowedMethods()) // if i use context\n})\n\nprocess.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {\n domainPrivateRouter.use(jwtAuthenticateMiddleware)\n domainPrivateRouter.use(domainAuthenticateMiddleware)\n\n /* domainPrivateRouter based nested-routers */\n if (isPathBaseDomain) {\n // pathBaseDomainRouter는 history-fallback의 경우에 인증 처리를 하기 위한 라우터이다.\n // (보통, URL 링크등을 통해서 domain path URL로 바로 요청하는 경우에 해당한다.)\n // pathBaseDomainRouter는 domain path를 domain-private-router를 사용하는 것을 전제로 한다.\n domainPrivateRouter.use('/domain/:domain/oauth', oauth2AuthorizeRouter.routes(), oauth2AuthorizeRouter.allowedMethods())\n domainPrivateRouter.use('/domain', pathBaseDomainRouter.routes(), pathBaseDomainRouter.allowedMethods())\n }\n\n // Client Routing : path 확장자가 없는 경우는 대부분 client 라우팅에 해당한다.\n // 즉, browser-history-fallback 으로 index.html을 send 하는 경우에, 사용자 로그인이 필요한 경우에,\n // 화면깜박임없이 signin page로 redirect 하고자하는 목적의 설정이다.\n // domain-private 라우트를 통과하고 싶지 않다면, regexp를 조정한다.\n // '(.[^.]+)' 은 '', '/'는 제외하고, '/xxx', '/yyy/zzz' 등 모두를 포함하지만, path에 '.'가 있는 경우는 제외한다.\n // (테스트는 여기서 : http://forbeslindesay.github.io/express-route-tester/)\n domainPrivateRouter.get('(.[^.]+)', async (context, next) => {\n await next()\n })\n})\n"]}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":"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","sourcesContent":["import { config } from '@things-factory/env'\n\nimport { domainAuthenticateMiddleware, jwtAuthenticateMiddleware } from './middlewares'\nimport {\n authCheckinRouter,\n authPrivateProcessRouter,\n authPublicProcessRouter,\n authSigninRouter,\n authSignupRouter,\n oauth2AuthorizeRouter,\n oauth2Router,\n pathBaseDomainRouter,\n siteRootRouter,\n webAuthnGlobalPublicRouter,\n webAuthnGlobalPrivateRouter\n} from './router'\n\nimport { setAccessTokenCookie } from './utils/access-token-cookie'\n\nconst isPathBaseDomain = !config.get('subdomain') && !config.get('useVirtualHostBasedDomain')\n\nprocess.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {\n globalPublicRouter.use(siteRootRouter.routes(), siteRootRouter.allowedMethods())\n globalPublicRouter.use(authPublicProcessRouter.routes(), authPublicProcessRouter.allowedMethods())\n\n /* ssoMiddleware가 정의되어있다면, /auth/sso-signin 패스를 활성화한다. */\n if (app.ssoMiddlewares.length > 0) {\n authSigninRouter.get('/auth/sso-signin', app.ssoMiddlewares[0], async context => {\n const { user } = context.state\n\n const token = await user.sign()\n setAccessTokenCookie(context, token)\n\n context.redirect('/auth/checkin')\n })\n }\n})\n\nprocess.on('bootstrap-module-global-private-route' as any, (app, globalPrivateRouter) => {\n globalPrivateRouter.use(jwtAuthenticateMiddleware)\n\n /* globalPrivateRouter based nested-routers */\n globalPrivateRouter.use(authCheckinRouter.routes(), authCheckinRouter.allowedMethods())\n globalPrivateRouter.use(authPrivateProcessRouter.routes(), authPrivateProcessRouter.allowedMethods())\n globalPrivateRouter.use(webAuthnGlobalPrivateRouter.routes(), webAuthnGlobalPrivateRouter.allowedMethods())\n})\n\nprocess.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {\n /* domainPublicRouter based nested-routers */\n domainPublicRouter.use(authSigninRouter.routes(), authSigninRouter.allowedMethods())\n domainPublicRouter.use(authSignupRouter.routes(), authSignupRouter.allowedMethods())\n domainPublicRouter.use(webAuthnGlobalPublicRouter.routes(), webAuthnGlobalPublicRouter.allowedMethods())\n\n /* path '/admin/oauth/...' is deprecated. should use path '/oauth/...' for oauth2 related routing */\n domainPublicRouter.use('/oauth', oauth2Router.routes(), oauth2Router.allowedMethods()) // if i use context\n})\n\nprocess.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {\n domainPrivateRouter.use(jwtAuthenticateMiddleware)\n domainPrivateRouter.use(domainAuthenticateMiddleware)\n\n /* domainPrivateRouter based nested-routers */\n if (isPathBaseDomain) {\n // pathBaseDomainRouter는 history-fallback의 경우에 인증 처리를 하기 위한 라우터이다.\n // (보통, URL 링크등을 통해서 domain path URL로 바로 요청하는 경우에 해당한다.)\n // pathBaseDomainRouter는 domain path를 domain-private-router를 사용하는 것을 전제로 한다.\n domainPrivateRouter.use('/domain/:domain/oauth', oauth2AuthorizeRouter.routes(), oauth2AuthorizeRouter.allowedMethods())\n domainPrivateRouter.use('/domain', pathBaseDomainRouter.routes(), pathBaseDomainRouter.allowedMethods())\n }\n\n // Client Routing : path 확장자가 없는 경우는 대부분 client 라우팅에 해당한다.\n // 즉, browser-history-fallback 으로 index.html을 send 하는 경우에, 사용자 로그인이 필요한 경우에,\n // 화면깜박임없이 signin page로 redirect 하고자하는 목적의 설정이다.\n // domain-private 라우트를 통과하고 싶지 않다면, regexp를 조정한다.\n // '(.[^.]+)' 은 '', '/'는 제외하고, '/xxx', '/yyy/zzz' 등 모두를 포함하지만, path에 '.'가 있는 경우는 제외한다.\n // (테스트는 여기서 : http://forbeslindesay.github.io/express-route-tester/)\n domainPrivateRouter.get('(.[^.]+)', async (context, next) => {\n await next()\n })\n})\n"]}
@@ -17,6 +17,7 @@ let AppBindingMutation = class AppBindingMutation {
17
17
  return true;
18
18
  }
19
19
  };
20
+ exports.AppBindingMutation = AppBindingMutation;
20
21
  tslib_1.__decorate([
21
22
  (0, type_graphql_1.Mutation)(returns => Boolean),
22
23
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
@@ -25,8 +26,7 @@ tslib_1.__decorate([
25
26
  tslib_1.__metadata("design:paramtypes", [String, Object]),
26
27
  tslib_1.__metadata("design:returntype", Promise)
27
28
  ], AppBindingMutation.prototype, "deleteAppBinding", null);
28
- AppBindingMutation = tslib_1.__decorate([
29
+ exports.AppBindingMutation = AppBindingMutation = tslib_1.__decorate([
29
30
  (0, type_graphql_1.Resolver)(app_binding_1.AppBinding)
30
31
  ], AppBindingMutation);
31
- exports.AppBindingMutation = AppBindingMutation;
32
32
  //# sourceMappingURL=app-binding-mutation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-binding-mutation.js","sourceRoot":"","sources":["../../../server/service/app-binding/app-binding-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAA2D;AAE3D,iDAAqD;AAErD,uCAAmC;AACnC,+CAA0C;AAGnC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAEvB,AAAN,KAAK,CAAC,gBAAgB,CAAY,EAAU,EAAS,OAAwB;QAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,qCAAqC;QACrC,iEAAiE;QACjE,MAAM,IAAA,qBAAa,EAAC,WAAI,CAAC,CAAC,MAAM,CAAC;YAC/B,EAAE;SACH,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AAXO;IADL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;IACL,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;0DAUnD;AAZU,kBAAkB;IAD9B,IAAA,uBAAQ,EAAC,wBAAU,CAAC;GACR,kBAAkB,CAa9B;AAbY,gDAAkB","sourcesContent":["import { Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { User } from '../user/user'\nimport { AppBinding } from './app-binding'\n\n@Resolver(AppBinding)\nexport class AppBindingMutation {\n @Mutation(returns => Boolean)\n async deleteAppBinding(@Arg('id') id: string, @Ctx() context: ResolverContext) {\n const { domain } = context.state\n\n // TODO 이 사용자가 이 도메인에 속한 사용자인지 확인해야함.\n // TODO 다른 도메인에도 포함되어있다면, domains-users 관게와 해당 도메인 관련 정보만 삭제해야 함.\n await getRepository(User).delete({\n id\n })\n\n return true\n }\n}\n"]}
1
+ {"version":3,"file":"app-binding-mutation.js","sourceRoot":"","sources":["../../../server/service/app-binding/app-binding-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAA2D;AAE3D,iDAAqD;AAErD,uCAAmC;AACnC,+CAA0C;AAGnC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAEvB,AAAN,KAAK,CAAC,gBAAgB,CAAY,EAAU,EAAS,OAAwB;QAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,qCAAqC;QACrC,iEAAiE;QACjE,MAAM,IAAA,qBAAa,EAAC,WAAI,CAAC,CAAC,MAAM,CAAC;YAC/B,EAAE;SACH,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AAbY,gDAAkB;AAEvB;IADL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;IACL,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;0DAUnD;6BAZU,kBAAkB;IAD9B,IAAA,uBAAQ,EAAC,wBAAU,CAAC;GACR,kBAAkB,CAa9B","sourcesContent":["import { Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { User } from '../user/user'\nimport { AppBinding } from './app-binding'\n\n@Resolver(AppBinding)\nexport class AppBindingMutation {\n @Mutation(returns => Boolean)\n async deleteAppBinding(@Arg('id') id: string, @Ctx() context: ResolverContext) {\n const { domain } = context.state\n\n // TODO 이 사용자가 이 도메인에 속한 사용자인지 확인해야함.\n // TODO 다른 도메인에도 포함되어있다면, domains-users 관게와 해당 도메인 관련 정보만 삭제해야 함.\n await getRepository(User).delete({\n id\n })\n\n return true\n }\n}\n"]}
@@ -68,6 +68,7 @@ let AppBindingQuery = class AppBindingQuery {
68
68
  return await (0, shell_1.getRepository)(user_1.User).findOneBy({ id: appBinding.creatorId });
69
69
  }
70
70
  };
71
+ exports.AppBindingQuery = AppBindingQuery;
71
72
  tslib_1.__decorate([
72
73
  (0, type_graphql_1.Query)(returns => app_binding_1.AppBinding),
73
74
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
@@ -78,7 +79,7 @@ tslib_1.__decorate([
78
79
  ], AppBindingQuery.prototype, "appBinding", null);
79
80
  tslib_1.__decorate([
80
81
  (0, type_graphql_1.Query)(returns => app_binding_types_1.AppBindingList),
81
- tslib_1.__param(0, (0, type_graphql_1.Args)()),
82
+ tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
82
83
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
83
84
  tslib_1.__metadata("design:type", Function),
84
85
  tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
@@ -119,8 +120,7 @@ tslib_1.__decorate([
119
120
  tslib_1.__metadata("design:paramtypes", [app_binding_1.AppBinding]),
120
121
  tslib_1.__metadata("design:returntype", Promise)
121
122
  ], AppBindingQuery.prototype, "creator", null);
122
- AppBindingQuery = tslib_1.__decorate([
123
+ exports.AppBindingQuery = AppBindingQuery = tslib_1.__decorate([
123
124
  (0, type_graphql_1.Resolver)(app_binding_1.AppBinding)
124
125
  ], AppBindingQuery);
125
- exports.AppBindingQuery = AppBindingQuery;
126
126
  //# sourceMappingURL=app-binding-query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-binding-query.js","sourceRoot":"","sources":["../../../server/service/app-binding/app-binding-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'\nimport { SelectQueryBuilder } from 'typeorm'\n\nimport { buildQuery, getRepository, ListParam } from '@things-factory/shell'\n\nimport { buildDomainUsersQueryBuilder } from '../../utils/get-domain-users'\nimport { Application } from '../application/application'\nimport { User } from '../user/user'\nimport { UserList } from '../user/user-types'\nimport { AppBinding } from './app-binding'\nimport { AppBindingList } from './app-binding-types'\n\n@Resolver(AppBinding)\nexport class AppBindingQuery {\n @Query(returns => AppBinding)\n async appBinding(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<User> {\n const { domain } = context.state\n\n // TODO should check domain is available\n return await getRepository(User).findOneBy({ id, userType: 'application' })\n }\n\n /* TODO optimize query */\n @Query(returns => AppBindingList)\n async appBindings(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<UserList> {\n const { domain } = context.state\n\n // const convertedParams = convertListParams(params)\n // convertedParams.where = {\n // ...convertedParams.where,\n // userType: 'application'\n // } as any\n\n const alias: string = 'USER'\n const qb: SelectQueryBuilder<User> = buildDomainUsersQueryBuilder(domain.id, alias)\n buildQuery(qb, params, null, { domainRef: false })\n var [items] = await qb\n // .leftJoinAndSelect(`${alias}.roles`, 'ROLES')\n // .leftJoinAndSelect(`${alias}.creator`, 'CREATOR')\n // .leftJoinAndSelect(`${alias}.updater`, 'UPDATER')\n .getManyAndCount()\n\n items = items.filter((user: User) => user.userType == 'application')\n\n // var boundApps = await Promise.all(\n // items\n // .filter((user: User) => user.userType == 'application')\n // .map(async (user: User) => {\n // const email = user.email\n // const appKey = email.substr(0, email.lastIndexOf('@'))\n // const application = await getRepository(Application).findOneBy({\n // appKey\n // })\n\n // return {\n // ...user,\n // application,\n // scope: user.roles.map(role => role.name).join(','),\n // refreshToken: user.password\n // }\n // })\n // )\n\n return { items, total: items.length }\n }\n\n @FieldResolver(type => Application)\n async application(@Root() appBinding: AppBinding): Promise<Application> {\n return await getRepository(Application).findOneBy({ id: appBinding.reference })\n }\n\n @FieldResolver(type => String)\n async scope(@Root() appBinding: AppBinding): Promise<string> {\n const u = await getRepository(User).findOne({ where: { reference: appBinding.reference }, relations: ['roles'] })\n return u.roles.map(role => role.name).join(',')\n }\n\n @FieldResolver(type => String)\n async refreshToken(@Root() appBinding: AppBinding): Promise<string> {\n return appBinding.password\n }\n\n @FieldResolver(type => User)\n async updater(@Root() appBinding: AppBinding): Promise<User> {\n return await getRepository(User).findOneBy({ id: appBinding.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() appBinding: AppBinding): Promise<User> {\n return await getRepository(User).findOneBy({ id: appBinding.creatorId })\n }\n}\n"]}
1
+ {"version":3,"file":"app-binding-query.js","sourceRoot":"","sources":["../../../server/service/app-binding/app-binding-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'\nimport { SelectQueryBuilder } from 'typeorm'\n\nimport { buildQuery, getRepository, ListParam } from '@things-factory/shell'\n\nimport { buildDomainUsersQueryBuilder } from '../../utils/get-domain-users'\nimport { Application } from '../application/application'\nimport { User } from '../user/user'\nimport { UserList } from '../user/user-types'\nimport { AppBinding } from './app-binding'\nimport { AppBindingList } from './app-binding-types'\n\n@Resolver(AppBinding)\nexport class AppBindingQuery {\n @Query(returns => AppBinding)\n async appBinding(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<User> {\n const { domain } = context.state\n\n // TODO should check domain is available\n return await getRepository(User).findOneBy({ id, userType: 'application' })\n }\n\n /* TODO optimize query */\n @Query(returns => AppBindingList)\n async appBindings(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<UserList> {\n const { domain } = context.state\n\n // const convertedParams = convertListParams(params)\n // convertedParams.where = {\n // ...convertedParams.where,\n // userType: 'application'\n // } as any\n\n const alias: string = 'USER'\n const qb: SelectQueryBuilder<User> = buildDomainUsersQueryBuilder(domain.id, alias)\n buildQuery(qb, params, null, { domainRef: false })\n var [items] = await qb\n // .leftJoinAndSelect(`${alias}.roles`, 'ROLES')\n // .leftJoinAndSelect(`${alias}.creator`, 'CREATOR')\n // .leftJoinAndSelect(`${alias}.updater`, 'UPDATER')\n .getManyAndCount()\n\n items = items.filter((user: User) => user.userType == 'application')\n\n // var boundApps = await Promise.all(\n // items\n // .filter((user: User) => user.userType == 'application')\n // .map(async (user: User) => {\n // const email = user.email\n // const appKey = email.substr(0, email.lastIndexOf('@'))\n // const application = await getRepository(Application).findOneBy({\n // appKey\n // })\n\n // return {\n // ...user,\n // application,\n // scope: user.roles.map(role => role.name).join(','),\n // refreshToken: user.password\n // }\n // })\n // )\n\n return { items, total: items.length }\n }\n\n @FieldResolver(type => Application)\n async application(@Root() appBinding: AppBinding): Promise<Application> {\n return await getRepository(Application).findOneBy({ id: appBinding.reference })\n }\n\n @FieldResolver(type => String)\n async scope(@Root() appBinding: AppBinding): Promise<string> {\n const u = await getRepository(User).findOne({ where: { reference: appBinding.reference }, relations: ['roles'] })\n return u.roles.map(role => role.name).join(',')\n }\n\n @FieldResolver(type => String)\n async refreshToken(@Root() appBinding: AppBinding): Promise<string> {\n return appBinding.password\n }\n\n @FieldResolver(type => User)\n async updater(@Root() appBinding: AppBinding): Promise<User> {\n return await getRepository(User).findOneBy({ id: appBinding.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() appBinding: AppBinding): Promise<User> {\n return await getRepository(User).findOneBy({ id: appBinding.creatorId })\n }\n}\n"]}
@@ -6,6 +6,7 @@ const type_graphql_1 = require("type-graphql");
6
6
  const app_binding_1 = require("./app-binding");
7
7
  let AppBindingList = class AppBindingList {
8
8
  };
9
+ exports.AppBindingList = AppBindingList;
9
10
  tslib_1.__decorate([
10
11
  (0, type_graphql_1.Field)(type => [app_binding_1.AppBinding], { nullable: true }),
11
12
  tslib_1.__metadata("design:type", Array)
@@ -14,8 +15,7 @@ tslib_1.__decorate([
14
15
  (0, type_graphql_1.Field)(type => type_graphql_1.Int, { nullable: true }),
15
16
  tslib_1.__metadata("design:type", Number)
16
17
  ], AppBindingList.prototype, "total", void 0);
17
- AppBindingList = tslib_1.__decorate([
18
+ exports.AppBindingList = AppBindingList = tslib_1.__decorate([
18
19
  (0, type_graphql_1.ObjectType)()
19
20
  ], AppBindingList);
20
- exports.AppBindingList = AppBindingList;
21
21
  //# sourceMappingURL=app-binding-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-binding-types.js","sourceRoot":"","sources":["../../../server/service/app-binding/app-binding-types.ts"],"names":[],"mappings":";;;;AAAA,+CAAqD;AACrD,+CAA0C;AAGnC,IAAM,cAAc,GAApB,MAAM,cAAc;CAM1B,CAAA;AALC;IAAC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,wBAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC5B;AAEpB;IAAC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACzB;AALH,cAAc;IAD1B,IAAA,yBAAU,GAAE;GACA,cAAc,CAM1B;AANY,wCAAc","sourcesContent":["import { Field, Int, ObjectType } from 'type-graphql'\nimport { AppBinding } from './app-binding'\n\n@ObjectType()\nexport class AppBindingList {\n @Field(type => [AppBinding], { nullable: true })\n items?: [AppBinding]\n\n @Field(type => Int, { nullable: true })\n total?: number\n}\n"]}
1
+ {"version":3,"file":"app-binding-types.js","sourceRoot":"","sources":["../../../server/service/app-binding/app-binding-types.ts"],"names":[],"mappings":";;;;AAAA,+CAAqD;AACrD,+CAA0C;AAGnC,IAAM,cAAc,GAApB,MAAM,cAAc;CAM1B,CAAA;AANY,wCAAc;AAEzB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,wBAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC5B;AAGpB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACzB;yBALH,cAAc;IAD1B,IAAA,yBAAU,GAAE;GACA,cAAc,CAM1B","sourcesContent":["import { Field, Int, ObjectType } from 'type-graphql'\nimport { AppBinding } from './app-binding'\n\n@ObjectType()\nexport class AppBindingList {\n @Field(type => [AppBinding], { nullable: true })\n items?: [AppBinding]\n\n @Field(type => Int, { nullable: true })\n total?: number\n}\n"]}
@@ -7,6 +7,7 @@ const application_1 = require("../application/application");
7
7
  const user_1 = require("../user/user");
8
8
  let AppBinding = class AppBinding extends user_1.User {
9
9
  };
10
+ exports.AppBinding = AppBinding;
10
11
  tslib_1.__decorate([
11
12
  (0, type_graphql_1.Field)({ nullable: true }),
12
13
  tslib_1.__metadata("design:type", application_1.Application)
@@ -20,8 +21,7 @@ tslib_1.__decorate([
20
21
  (0, type_graphql_1.Directive)('@privilege(category: "security", privilege: "query", domainOwnerGranted: true)'),
21
22
  tslib_1.__metadata("design:type", String)
22
23
  ], AppBinding.prototype, "refreshToken", void 0);
23
- AppBinding = tslib_1.__decorate([
24
+ exports.AppBinding = AppBinding = tslib_1.__decorate([
24
25
  (0, type_graphql_1.ObjectType)()
25
26
  ], AppBinding);
26
- exports.AppBinding = AppBinding;
27
27
  //# sourceMappingURL=app-binding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-binding.js","sourceRoot":"","sources":["../../../server/service/app-binding/app-binding.ts"],"names":[],"mappings":";;;;AAAA,+CAA2D;AAE3D,4DAAwD;AACxD,uCAA+C;AAGxC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,WAAI;CAUnC,CAAA;AATC;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACb,yBAAW;+CAAA;AAExB;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACb;AAEb;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzB,IAAA,wBAAS,EAAC,gFAAgF,CAAC;;gDACxE;AATT,UAAU;IADtB,IAAA,yBAAU,GAAE;GACA,UAAU,CAUtB;AAVY,gCAAU","sourcesContent":["import { ObjectType, Field, Directive } from 'type-graphql'\nimport { Domain } from '@things-factory/shell'\nimport { Application } from '../application/application'\nimport { User, UserStatus } from '../user/user'\n\n@ObjectType()\nexport class AppBinding extends User {\n @Field({ nullable: true })\n application: Application\n\n @Field({ nullable: true })\n scope: string\n\n @Field({ nullable: true })\n @Directive('@privilege(category: \"security\", privilege: \"query\", domainOwnerGranted: true)')\n refreshToken: string\n}\n"]}
1
+ {"version":3,"file":"app-binding.js","sourceRoot":"","sources":["../../../server/service/app-binding/app-binding.ts"],"names":[],"mappings":";;;;AAAA,+CAA2D;AAE3D,4DAAwD;AACxD,uCAA+C;AAGxC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,WAAI;CAUnC,CAAA;AAVY,gCAAU;AAErB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACb,yBAAW;+CAAA;AAGxB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACb;AAIb;IAFC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzB,IAAA,wBAAS,EAAC,gFAAgF,CAAC;;gDACxE;qBATT,UAAU;IADtB,IAAA,yBAAU,GAAE;GACA,UAAU,CAUtB","sourcesContent":["import { ObjectType, Field, Directive } from 'type-graphql'\nimport { Domain } from '@things-factory/shell'\nimport { Application } from '../application/application'\nimport { User, UserStatus } from '../user/user'\n\n@ObjectType()\nexport class AppBinding extends User {\n @Field({ nullable: true })\n application: Application\n\n @Field({ nullable: true })\n scope: string\n\n @Field({ nullable: true })\n @Directive('@privilege(category: \"security\", privilege: \"query\", domainOwnerGranted: true)')\n refreshToken: string\n}\n"]}
@@ -64,6 +64,7 @@ let ApplianceMutation = class ApplianceMutation {
64
64
  return await applianceRepository.save(Object.assign(Object.assign(Object.assign({}, appliance), patch), { updater: context.state.user }));
65
65
  }
66
66
  };
67
+ exports.ApplianceMutation = ApplianceMutation;
67
68
  tslib_1.__decorate([
68
69
  (0, type_graphql_1.Directive)('@privilege(category: "user", privilege: "mutation", domainOwnerGranted: true)'),
69
70
  (0, type_graphql_1.Mutation)(returns => appliance_1.Appliance, { description: 'To create new appliance' }),
@@ -101,8 +102,7 @@ tslib_1.__decorate([
101
102
  tslib_1.__metadata("design:paramtypes", [String, appliance_types_1.AppliancePatch, Object]),
102
103
  tslib_1.__metadata("design:returntype", Promise)
103
104
  ], ApplianceMutation.prototype, "updateAppliance", null);
104
- ApplianceMutation = tslib_1.__decorate([
105
+ exports.ApplianceMutation = ApplianceMutation = tslib_1.__decorate([
105
106
  (0, type_graphql_1.Resolver)(appliance_1.Appliance)
106
107
  ], ApplianceMutation);
107
- exports.ApplianceMutation = ApplianceMutation;
108
108
  //# sourceMappingURL=appliance-mutation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"appliance-mutation.js","sourceRoot":"","sources":["../../../server/service/appliance/appliance-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { User, UserStatus } from '../user/user'\nimport { Appliance } from './appliance'\nimport { AppliancePatch, NewAppliance } from './appliance-types'\n\nconst crypto = require('crypto')\n\n@Resolver(Appliance)\nexport class ApplianceMutation {\n @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Appliance, { description: 'To create new appliance' })\n async createAppliance(\n @Arg('appliance') appliance: NewAppliance,\n @Ctx() context: ResolverContext\n ): Promise<Appliance> {\n return await getRepository(Appliance).save({\n domain: context.state.domain,\n creator: context.state.user,\n updater: context.state.user,\n ...appliance\n })\n }\n\n @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete appliance' })\n async deleteAppliance(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { domain } = context.state\n // TODO 이 사용자가 이 도메인에 속한 사용자인지 확인해야함.\n // TODO 다른 도메인에도 포함되어있다면, domains-users 관게와 해당 도메인 관련 정보만 삭제해야 함.\n await getRepository(User).delete({\n reference: id,\n userType: 'appliance'\n })\n\n await getRepository(Appliance).delete({ domain: { id: domain.id }, id })\n\n return true\n }\n\n @Directive('@privilege(category: \"security\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Appliance)\n async generateApplianceSecret(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Appliance> {\n const { domain, user } = context.state\n\n const appliance: Appliance = await getRepository(Appliance).findOneBy({ domain: { id: domain.id }, id })\n\n const appuserEmail = `${crypto.randomUUID()}@${domain?.subdomain}`\n let appuser: User = await getRepository(User).findOne({\n where: {\n reference: id,\n userType: 'appliance'\n },\n relations: ['domains']\n })\n\n if (!appuser) {\n /* newly create appuser */\n appuser = await getRepository(User).save({\n email: appuserEmail,\n name: appliance.name,\n userType: 'appliance',\n reference: id,\n status: UserStatus.ACTIVATED,\n domains: [domain],\n updater: user,\n creator: user\n })\n }\n\n if (!appuser.domains.find(d => d.id === domain.id)) {\n context.throw(401, 'appliance is not allowed for this domain')\n }\n\n appuser.password = Appliance.generateAccessToken(domain, appuser, appliance)\n\n await getRepository(User).save(appuser)\n\n return await getRepository(Appliance).save({\n ...appliance,\n accessToken: appuser.password,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Appliance)\n async updateAppliance(\n @Arg('id') id: string,\n @Arg('patch') patch: AppliancePatch,\n @Ctx() context: ResolverContext\n ): Promise<Appliance> {\n const { domain } = context.state\n\n const applianceRepository = getRepository(Appliance)\n const userRepository = getRepository(User)\n const appliance = await applianceRepository.findOne({ where: { domain: { id: domain.id }, id } })\n const user = await userRepository.findOne({ where: { reference: id, userType: 'appliance' } })\n\n userRepository.save({\n ...user,\n name: patch?.name || user.name\n })\n\n return await applianceRepository.save({\n ...appliance,\n ...patch,\n updater: context.state.user\n })\n }\n}\n"]}
1
+ {"version":3,"file":"appliance-mutation.js","sourceRoot":"","sources":["../../../server/service/appliance/appliance-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { User, UserStatus } from '../user/user'\nimport { Appliance } from './appliance'\nimport { AppliancePatch, NewAppliance } from './appliance-types'\n\nconst crypto = require('crypto')\n\n@Resolver(Appliance)\nexport class ApplianceMutation {\n @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Appliance, { description: 'To create new appliance' })\n async createAppliance(\n @Arg('appliance') appliance: NewAppliance,\n @Ctx() context: ResolverContext\n ): Promise<Appliance> {\n return await getRepository(Appliance).save({\n domain: context.state.domain,\n creator: context.state.user,\n updater: context.state.user,\n ...appliance\n })\n }\n\n @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete appliance' })\n async deleteAppliance(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { domain } = context.state\n // TODO 이 사용자가 이 도메인에 속한 사용자인지 확인해야함.\n // TODO 다른 도메인에도 포함되어있다면, domains-users 관게와 해당 도메인 관련 정보만 삭제해야 함.\n await getRepository(User).delete({\n reference: id,\n userType: 'appliance'\n })\n\n await getRepository(Appliance).delete({ domain: { id: domain.id }, id })\n\n return true\n }\n\n @Directive('@privilege(category: \"security\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Appliance)\n async generateApplianceSecret(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Appliance> {\n const { domain, user } = context.state\n\n const appliance: Appliance = await getRepository(Appliance).findOneBy({ domain: { id: domain.id }, id })\n\n const appuserEmail = `${crypto.randomUUID()}@${domain?.subdomain}`\n let appuser: User = await getRepository(User).findOne({\n where: {\n reference: id,\n userType: 'appliance'\n },\n relations: ['domains']\n })\n\n if (!appuser) {\n /* newly create appuser */\n appuser = await getRepository(User).save({\n email: appuserEmail,\n name: appliance.name,\n userType: 'appliance',\n reference: id,\n status: UserStatus.ACTIVATED,\n domains: [domain],\n updater: user,\n creator: user\n })\n }\n\n if (!appuser.domains.find(d => d.id === domain.id)) {\n context.throw(401, 'appliance is not allowed for this domain')\n }\n\n appuser.password = Appliance.generateAccessToken(domain, appuser, appliance)\n\n await getRepository(User).save(appuser)\n\n return await getRepository(Appliance).save({\n ...appliance,\n accessToken: appuser.password,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Appliance)\n async updateAppliance(\n @Arg('id') id: string,\n @Arg('patch') patch: AppliancePatch,\n @Ctx() context: ResolverContext\n ): Promise<Appliance> {\n const { domain } = context.state\n\n const applianceRepository = getRepository(Appliance)\n const userRepository = getRepository(User)\n const appliance = await applianceRepository.findOne({ where: { domain: { id: domain.id }, id } })\n const user = await userRepository.findOne({ where: { reference: id, userType: 'appliance' } })\n\n userRepository.save({\n ...user,\n name: patch?.name || user.name\n })\n\n return await applianceRepository.save({\n ...appliance,\n ...patch,\n updater: context.state.user\n })\n }\n}\n"]}
@@ -49,6 +49,7 @@ let ApplianceQuery = class ApplianceQuery {
49
49
  return await (0, shell_1.getRepository)(user_1.User).findOneBy({ id: appliance.creatorId });
50
50
  }
51
51
  };
52
+ exports.ApplianceQuery = ApplianceQuery;
52
53
  tslib_1.__decorate([
53
54
  (0, type_graphql_1.Directive)('@privilege(category: "user", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
54
55
  (0, type_graphql_1.Query)(returns => appliance_1.Appliance, { description: ' To fetch appliance' }),
@@ -61,7 +62,7 @@ tslib_1.__decorate([
61
62
  tslib_1.__decorate([
62
63
  (0, type_graphql_1.Directive)('@privilege(category: "user", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
63
64
  (0, type_graphql_1.Query)(returns => appliance_types_1.ApplianceList, { description: 'To fetch multiple appliance' }),
64
- tslib_1.__param(0, (0, type_graphql_1.Args)()),
65
+ tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
65
66
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
66
67
  tslib_1.__metadata("design:type", Function),
67
68
  tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
@@ -70,7 +71,7 @@ tslib_1.__decorate([
70
71
  tslib_1.__decorate([
71
72
  (0, type_graphql_1.Directive)('@privilege(category: "user", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
72
73
  (0, type_graphql_1.Query)(returns => appliance_types_1.ApplianceList, { description: 'To fetch multiple appliance' }),
73
- tslib_1.__param(0, (0, type_graphql_1.Args)()),
74
+ tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
74
75
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
75
76
  tslib_1.__metadata("design:type", Function),
76
77
  tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
@@ -105,8 +106,7 @@ tslib_1.__decorate([
105
106
  tslib_1.__metadata("design:paramtypes", [appliance_1.Appliance]),
106
107
  tslib_1.__metadata("design:returntype", Promise)
107
108
  ], ApplianceQuery.prototype, "creator", null);
108
- ApplianceQuery = tslib_1.__decorate([
109
+ exports.ApplianceQuery = ApplianceQuery = tslib_1.__decorate([
109
110
  (0, type_graphql_1.Resolver)(appliance_1.Appliance)
110
111
  ], ApplianceQuery);
111
- exports.ApplianceQuery = ApplianceQuery;
112
112
  //# sourceMappingURL=appliance-query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"appliance-query.js","sourceRoot":"","sources":["../../../server/service/appliance/appliance-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { getQueryBuilderFromListParams, Domain, getRepository, ListParam } from '@things-factory/shell'\n\nimport { Appliance } from '../appliance/appliance'\nimport { User } from '../user/user'\nimport { ApplianceList } from './appliance-types'\n\n@Resolver(Appliance)\nexport class ApplianceQuery {\n @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => Appliance, { description: ' To fetch appliance' })\n async appliance(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Appliance> {\n const { domain } = context.state\n return await getRepository(Appliance).findOneBy({ domain: { id: domain.id }, id })\n }\n\n @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => ApplianceList, { description: 'To fetch multiple appliance' })\n async appliances(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ApplianceList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: getRepository(Appliance),\n alias: 'appliance',\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => ApplianceList, { description: 'To fetch multiple appliance' })\n async edges(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ApplianceList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: getRepository(Appliance),\n alias: 'appliance',\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => String)\n async accessToken(@Root() appliance: Appliance, @Ctx() context: ResolverContext) {\n return appliance.accessToken\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() appliance: Appliance): Promise<User> {\n return await getRepository(User).findOneBy({ id: appliance.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() appliance: Appliance): Promise<User> {\n return await getRepository(User).findOneBy({ id: appliance.creatorId })\n }\n}\n"]}
1
+ {"version":3,"file":"appliance-query.js","sourceRoot":"","sources":["../../../server/service/appliance/appliance-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { getQueryBuilderFromListParams, Domain, getRepository, ListParam } from '@things-factory/shell'\n\nimport { Appliance } from '../appliance/appliance'\nimport { User } from '../user/user'\nimport { ApplianceList } from './appliance-types'\n\n@Resolver(Appliance)\nexport class ApplianceQuery {\n @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => Appliance, { description: ' To fetch appliance' })\n async appliance(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Appliance> {\n const { domain } = context.state\n return await getRepository(Appliance).findOneBy({ domain: { id: domain.id }, id })\n }\n\n @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => ApplianceList, { description: 'To fetch multiple appliance' })\n async appliances(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<ApplianceList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: getRepository(Appliance),\n alias: 'appliance',\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => ApplianceList, { description: 'To fetch multiple appliance' })\n async edges(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<ApplianceList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: getRepository(Appliance),\n alias: 'appliance',\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => String)\n async accessToken(@Root() appliance: Appliance, @Ctx() context: ResolverContext) {\n return appliance.accessToken\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() appliance: Appliance): Promise<User> {\n return await getRepository(User).findOneBy({ id: appliance.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() appliance: Appliance): Promise<User> {\n return await getRepository(User).findOneBy({ id: appliance.creatorId })\n }\n}\n"]}
@@ -6,6 +6,7 @@ const type_graphql_1 = require("type-graphql");
6
6
  const appliance_1 = require("./appliance");
7
7
  let ApplianceList = class ApplianceList {
8
8
  };
9
+ exports.ApplianceList = ApplianceList;
9
10
  tslib_1.__decorate([
10
11
  (0, type_graphql_1.Field)(type => [appliance_1.Appliance], { nullable: true }),
11
12
  tslib_1.__metadata("design:type", Array)
@@ -14,12 +15,12 @@ tslib_1.__decorate([
14
15
  (0, type_graphql_1.Field)(type => type_graphql_1.Int, { nullable: true }),
15
16
  tslib_1.__metadata("design:type", Number)
16
17
  ], ApplianceList.prototype, "total", void 0);
17
- ApplianceList = tslib_1.__decorate([
18
+ exports.ApplianceList = ApplianceList = tslib_1.__decorate([
18
19
  (0, type_graphql_1.ObjectType)()
19
20
  ], ApplianceList);
20
- exports.ApplianceList = ApplianceList;
21
21
  let AppliancePatch = class AppliancePatch {
22
22
  };
23
+ exports.AppliancePatch = AppliancePatch;
23
24
  tslib_1.__decorate([
24
25
  (0, type_graphql_1.Field)(type => type_graphql_1.ID, { nullable: true }),
25
26
  tslib_1.__metadata("design:type", String)
@@ -48,12 +49,12 @@ tslib_1.__decorate([
48
49
  (0, type_graphql_1.Field)({ nullable: true }),
49
50
  tslib_1.__metadata("design:type", String)
50
51
  ], AppliancePatch.prototype, "netmask", void 0);
51
- AppliancePatch = tslib_1.__decorate([
52
+ exports.AppliancePatch = AppliancePatch = tslib_1.__decorate([
52
53
  (0, type_graphql_1.InputType)()
53
54
  ], AppliancePatch);
54
- exports.AppliancePatch = AppliancePatch;
55
55
  let NewAppliance = class NewAppliance {
56
56
  };
57
+ exports.NewAppliance = NewAppliance;
57
58
  tslib_1.__decorate([
58
59
  (0, type_graphql_1.Field)(),
59
60
  tslib_1.__metadata("design:type", String)
@@ -78,8 +79,7 @@ tslib_1.__decorate([
78
79
  (0, type_graphql_1.Field)({ nullable: true }),
79
80
  tslib_1.__metadata("design:type", String)
80
81
  ], NewAppliance.prototype, "netmask", void 0);
81
- NewAppliance = tslib_1.__decorate([
82
+ exports.NewAppliance = NewAppliance = tslib_1.__decorate([
82
83
  (0, type_graphql_1.InputType)()
83
84
  ], NewAppliance);
84
- exports.NewAppliance = NewAppliance;
85
85
  //# sourceMappingURL=appliance-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"appliance-types.js","sourceRoot":"","sources":["../../../server/service/appliance/appliance-types.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AACpE,2CAAuC;AAGhC,IAAM,aAAa,GAAnB,MAAM,aAAa;CAMzB,CAAA;AALC;IAAC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,qBAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CAC5B;AAEnB;IAAC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACzB;AALH,aAAa;IADzB,IAAA,yBAAU,GAAE;GACA,aAAa,CAMzB;AANY,sCAAa;AASnB,IAAM,cAAc,GAApB,MAAM,cAAc;CAqB1B,CAAA;AApBC;IAAC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CAC3B;AAEX;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDACT;AAEjB;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACb;AAEb;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACZ;AAEd;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACZ;AAEd;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACN;AAEpB;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACV;AApBL,cAAc;IAD1B,IAAA,wBAAS,GAAE;GACC,cAAc,CAqB1B;AArBY,wCAAc;AAwBpB,IAAM,YAAY,GAAlB,MAAM,YAAY;CAkBxB,CAAA;AAjBC;IAAC,IAAA,oBAAK,GAAE;;8CACQ;AAEhB;IAAC,IAAA,oBAAK,GAAE;;0CACI;AAEZ;IAAC,IAAA,oBAAK,GAAE;;2CACK;AAEb;IAAC,IAAA,oBAAK,GAAE;;2CACK;AAEb;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACN;AAEpB;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACV;AAjBL,YAAY;IADxB,IAAA,wBAAS,GAAE;GACC,YAAY,CAkBxB;AAlBY,oCAAY","sourcesContent":["import { ObjectType, InputType, Field, ID, Int } from 'type-graphql'\nimport { Appliance } from './appliance'\n\n@ObjectType()\nexport class ApplianceList {\n @Field(type => [Appliance], { nullable: true })\n items?: Appliance[]\n\n @Field(type => Int, { nullable: true })\n total?: number\n}\n\n@InputType()\nexport class AppliancePatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n serialNo?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n brand?: string\n\n @Field({ nullable: true })\n model?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n netmask?: string\n}\n\n@InputType()\nexport class NewAppliance {\n @Field()\n serialNo: string\n\n @Field()\n name: string\n\n @Field()\n brand: string\n\n @Field()\n model: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n netmask?: string\n}\n"]}
1
+ {"version":3,"file":"appliance-types.js","sourceRoot":"","sources":["../../../server/service/appliance/appliance-types.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AACpE,2CAAuC;AAGhC,IAAM,aAAa,GAAnB,MAAM,aAAa;CAMzB,CAAA;AANY,sCAAa;AAExB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,qBAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CAC5B;AAGnB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACzB;wBALH,aAAa;IADzB,IAAA,yBAAU,GAAE;GACA,aAAa,CAMzB;AAGM,IAAM,cAAc,GAApB,MAAM,cAAc;CAqB1B,CAAA;AArBY,wCAAc;AAEzB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CAC3B;AAGX;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDACT;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACb;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACZ;AAGd;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACZ;AAGd;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACV;yBApBL,cAAc;IAD1B,IAAA,wBAAS,GAAE;GACC,cAAc,CAqB1B;AAGM,IAAM,YAAY,GAAlB,MAAM,YAAY;CAkBxB,CAAA;AAlBY,oCAAY;AAEvB;IADC,IAAA,oBAAK,GAAE;;8CACQ;AAGhB;IADC,IAAA,oBAAK,GAAE;;0CACI;AAGZ;IADC,IAAA,oBAAK,GAAE;;2CACK;AAGb;IADC,IAAA,oBAAK,GAAE;;2CACK;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACV;uBAjBL,YAAY;IADxB,IAAA,wBAAS,GAAE;GACC,YAAY,CAkBxB","sourcesContent":["import { ObjectType, InputType, Field, ID, Int } from 'type-graphql'\nimport { Appliance } from './appliance'\n\n@ObjectType()\nexport class ApplianceList {\n @Field(type => [Appliance], { nullable: true })\n items?: Appliance[]\n\n @Field(type => Int, { nullable: true })\n total?: number\n}\n\n@InputType()\nexport class AppliancePatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n serialNo?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n brand?: string\n\n @Field({ nullable: true })\n model?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n netmask?: string\n}\n\n@InputType()\nexport class NewAppliance {\n @Field()\n serialNo: string\n\n @Field()\n name: string\n\n @Field()\n brand: string\n\n @Field()\n model: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n netmask?: string\n}\n"]}
@@ -37,6 +37,7 @@ let Appliance = class Appliance {
37
37
  return this.sign('access-token', expiresIn, domain, user, appliance);
38
38
  }
39
39
  };
40
+ exports.Appliance = Appliance;
40
41
  tslib_1.__decorate([
41
42
  (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
42
43
  (0, type_graphql_1.Field)(type => type_graphql_1.ID),
@@ -130,12 +131,11 @@ tslib_1.__decorate([
130
131
  /* signing for jsonwebtoken */
131
132
  )
132
133
  ], Appliance.prototype, "updatedAt", void 0);
133
- Appliance = tslib_1.__decorate([
134
+ exports.Appliance = Appliance = tslib_1.__decorate([
134
135
  (0, typeorm_1.Entity)(),
135
136
  (0, typeorm_1.Index)('ix_appliance_0', (appliance) => [appliance.domain, appliance.name], {
136
137
  unique: true
137
138
  }),
138
139
  (0, type_graphql_1.ObjectType)()
139
140
  ], Appliance);
140
- exports.Appliance = Appliance;
141
141
  //# sourceMappingURL=appliance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"appliance.js","sourceRoot":"","sources":["../../../server/service/appliance/appliance.ts"],"names":[],"mappings":";;;;AAAA,qCASgB;AAChB,+CAA+D;AAC/D,uCAA+C;AAE/C,iDAA8C;AAC9C,uDAA+C;AAC/C,6CAA4C;AAC5C,wEAA8B;AAE9B,MAAM,SAAS,GAAG,YAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;AAC7C,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAA;AAO7B,IAAM,SAAS,GAAf,MAAM,SAAS;IA6EpB,8BAA8B;IAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;QACrD,IAAI,UAAU,GAAG;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE;gBACT,EAAE,EAAE,SAAS,CAAC,EAAE;aACjB;YACD,MAAM,EAAE,iBAAU,CAAC,SAAS;YAC5B,MAAM,EAAE;gBACN,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B;SACF,CAAA;QAED,OAAO,sBAAG,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAM,EAAE;YAClC,SAAS;YACT,MAAM,EAAE,cAAc;YACtB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS;QAChD,uDAAuD;QACvD,IAAI,SAAS,GAAG,YAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;IACtE,CAAC;CACF,CAAA;AAtGC;IAAC,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;qCACC;AAEnB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IACzB,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;sCACb,cAAM;yCAAA;AAEf;IAAC,IAAA,oBAAU,EAAC,CAAC,SAAoB,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;;2CACvC;AAEhB;IAAC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACV;AAEhB;IAAC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,GAAE;;uCACI;AAEZ;IAAC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wCACb;AAEb;IAAC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wCACb;AAEb;IAAC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACX;AAEf;IAAC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACP;AAEnB;IAAC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;QACd,IAAI,EACF,aAAa,IAAI,OAAO,IAAI,aAAa,IAAI,SAAS;YACpD,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,aAAa,IAAI,QAAQ;gBACzB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,SAAS;KAClB,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzB,IAAA,wBAAS,EAAC,gFAAgF,CAAC;;8CACzE;AAEnB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,WAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACjB,WAAI;0CAAA;AAEb;IAAC,IAAA,oBAAU,EAAC,CAAC,SAAoB,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC;;4CACvC;AAEjB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,WAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACjB,WAAI;0CAAA;AAEb;IAAC,IAAA,oBAAU,EAAC,CAAC,SAAoB,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC;;4CACvC;AAEjB;IAAC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACf,IAAI;4CAAA;AAEf;IAAC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACf,IAAI;IAEf,8BAA8B;;4CAFf;AA3EJ,SAAS;IALrB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,gBAAgB,EAAE,CAAC,SAAoB,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE;QACrF,MAAM,EAAE,IAAI;KACb,CAAC;IACD,IAAA,yBAAU,GAAE;GACA,SAAS,CAuGrB;AAvGY,8BAAS","sourcesContent":["import {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\nimport { Directive, 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 @Field(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 @Directive('@privilege(category: \"security\", privilege: \"query\", domainOwnerGranted: true)')\n accessToken: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n creator: User\n\n @RelationId((appliance: Appliance) => appliance.creator)\n creatorId: string\n\n @ManyToOne(type => User, { nullable: true })\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 { Directive, 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 @Field(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 @Directive('@privilege(category: \"security\", privilege: \"query\", domainOwnerGranted: true)')\n accessToken: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n creator: User\n\n @RelationId((appliance: Appliance) => appliance.creator)\n creatorId: string\n\n @ManyToOne(type => User, { nullable: true })\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"]}
@@ -54,6 +54,7 @@ let ApplicationMutation = class ApplicationMutation {
54
54
  return await repository.save(Object.assign(Object.assign(Object.assign({}, application), patch), { updater: context.state.user }));
55
55
  }
56
56
  };
57
+ exports.ApplicationMutation = ApplicationMutation;
57
58
  tslib_1.__decorate([
58
59
  (0, type_graphql_1.Directive)('@privilege(category: "user", privilege: "mutation", domainOwnerGranted: true)'),
59
60
  (0, type_graphql_1.Mutation)(returns => application_1.Application, { description: 'To create new application' }),
@@ -101,8 +102,7 @@ tslib_1.__decorate([
101
102
  tslib_1.__metadata("design:paramtypes", [String, application_types_1.ApplicationPatch, Object]),
102
103
  tslib_1.__metadata("design:returntype", Promise)
103
104
  ], ApplicationMutation.prototype, "updateApplication", null);
104
- ApplicationMutation = tslib_1.__decorate([
105
+ exports.ApplicationMutation = ApplicationMutation = tslib_1.__decorate([
105
106
  (0, type_graphql_1.Resolver)(application_1.Application)
106
107
  ], ApplicationMutation);
107
- exports.ApplicationMutation = ApplicationMutation;
108
108
  //# sourceMappingURL=application-mutation.js.map
@@ -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 { Directive, 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 @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\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 @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\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 @Directive('@privilege(category: \"security\", privilege: \"mutation\", domainOwnerGranted: true)')\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 @Directive('@privilege(category: \"security\", privilege: \"mutation\", domainOwnerGranted: true)')\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 @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\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"]}
1
+ {"version":3,"file":"application-mutation.js","sourceRoot":"","sources":["../../../server/service/application/application-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, 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 @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\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 @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\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 @Directive('@privilege(category: \"security\", privilege: \"mutation\", domainOwnerGranted: true)')\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 @Directive('@privilege(category: \"security\", privilege: \"mutation\", domainOwnerGranted: true)')\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 @Directive('@privilege(category: \"user\", privilege: \"mutation\", domainOwnerGranted: true)')\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"]}
@@ -49,6 +49,7 @@ let ApplicationQuery = class ApplicationQuery {
49
49
  return await (0, shell_1.getRepository)(user_1.User).findOneBy({ id: application.creatorId });
50
50
  }
51
51
  };
52
+ exports.ApplicationQuery = ApplicationQuery;
52
53
  tslib_1.__decorate([
53
54
  (0, type_graphql_1.Directive)('@privilege(category: "user", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
54
55
  (0, type_graphql_1.Query)(returns => application_1.Application, { description: 'To fetch application' }),
@@ -61,7 +62,7 @@ tslib_1.__decorate([
61
62
  tslib_1.__decorate([
62
63
  (0, type_graphql_1.Directive)('@privilege(category: "user", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
63
64
  (0, type_graphql_1.Query)(returns => application_types_1.ApplicationList, { description: 'To fetch multiple application' }),
64
- tslib_1.__param(0, (0, type_graphql_1.Args)()),
65
+ tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
65
66
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
66
67
  tslib_1.__metadata("design:type", Function),
67
68
  tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
@@ -109,10 +110,9 @@ tslib_1.__decorate([
109
110
  tslib_1.__metadata("design:paramtypes", [application_1.Application]),
110
111
  tslib_1.__metadata("design:returntype", Promise)
111
112
  ], ApplicationQuery.prototype, "creator", null);
112
- ApplicationQuery = tslib_1.__decorate([
113
+ exports.ApplicationQuery = ApplicationQuery = tslib_1.__decorate([
113
114
  (0, type_graphql_1.Resolver)(application_1.Application)
114
115
  ], ApplicationQuery);
115
- exports.ApplicationQuery = ApplicationQuery;
116
116
  function buildAuthURL(pathname, context) {
117
117
  const originalProtocol = context.headers['x-forwarded-proto'];
118
118
  const originalHost = context.headers['x-forwarded-host'];
@@ -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 { Directive, 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 { getQueryBuilderFromListParams, 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 @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\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 @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => ApplicationList, { description: 'To fetch multiple application' })\n async applications(@Args() params: ListParam, @Ctx() context: ResolverContext) {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: getRepository(Application),\n alias: 'application',\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.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: { id: domain.id } })\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 originalProtocol = context.headers['x-forwarded-proto']\n const originalHost = context.headers['x-forwarded-host']\n const originalPort = context.headers['x-forwarded-port']\n\n if (originalProtocol && originalHost) {\n var url: URL = new URL(`${originalProtocol}://${originalHost}`)\n if (originalPort) {\n url.port = originalPort\n }\n } else {\n var url: URL = new URL(context.request.origin)\n }\n\n if (protocol) {\n url.protocol = protocol\n }\n\n url.pathname = pathname\n\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 { Directive, 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 { getQueryBuilderFromListParams, 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 @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\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 @Directive('@privilege(category: \"user\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => ApplicationList, { description: 'To fetch multiple application' })\n async applications(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext) {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: getRepository(Application),\n alias: 'application',\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.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: { id: domain.id } })\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 originalProtocol = context.headers['x-forwarded-proto']\n const originalHost = context.headers['x-forwarded-host']\n const originalPort = context.headers['x-forwarded-port']\n\n if (originalProtocol && originalHost) {\n var url: URL = new URL(`${originalProtocol}://${originalHost}`)\n if (originalPort) {\n url.port = originalPort\n }\n } else {\n var url: URL = new URL(context.request.origin)\n }\n\n if (protocol) {\n url.protocol = protocol\n }\n\n url.pathname = pathname\n\n return url.href\n}\n"]}