@contember/engine-tenant-api 2.0.0-alpha.31 → 2.0.0-alpha.35

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 (730) hide show
  1. package/dist/development/src/TenantContainer.cjs.map +1 -1
  2. package/dist/development/src/TenantContainer.js.map +1 -1
  3. package/dist/development/src/bridges/system/IdentityFetcher.cjs.map +1 -1
  4. package/dist/development/src/bridges/system/IdentityFetcher.js.map +1 -1
  5. package/dist/development/src/exceptions.cjs.map +1 -1
  6. package/dist/development/src/exceptions.js.map +1 -1
  7. package/dist/development/src/migrations/runner.cjs.map +1 -1
  8. package/dist/development/src/migrations/runner.js.map +1 -1
  9. package/dist/development/src/migrations/tenantCredentials.cjs.map +1 -1
  10. package/dist/development/src/migrations/tenantCredentials.js.map +1 -1
  11. package/dist/development/src/model/authorization/AclSchemaAccessNodeFactory.cjs.map +1 -1
  12. package/dist/development/src/model/authorization/AclSchemaAccessNodeFactory.js.map +1 -1
  13. package/dist/development/src/model/authorization/DirectPermissionsAccessNode.cjs.map +1 -1
  14. package/dist/development/src/model/authorization/DirectPermissionsAccessNode.js.map +1 -1
  15. package/dist/development/src/model/authorization/Identity.cjs.map +1 -1
  16. package/dist/development/src/model/authorization/Identity.js.map +1 -1
  17. package/dist/development/src/model/authorization/IdentityFactory.cjs.map +1 -1
  18. package/dist/development/src/model/authorization/IdentityFactory.js.map +1 -1
  19. package/dist/development/src/model/authorization/IdentityScope.cjs.map +1 -1
  20. package/dist/development/src/model/authorization/IdentityScope.js.map +1 -1
  21. package/dist/development/src/model/authorization/MembershipMatcher.cjs.map +1 -1
  22. package/dist/development/src/model/authorization/MembershipMatcher.js.map +1 -1
  23. package/dist/development/src/model/authorization/PermissionActions.cjs.map +1 -1
  24. package/dist/development/src/model/authorization/PermissionActions.js.map +1 -1
  25. package/dist/development/src/model/authorization/PermissionContext.cjs.map +1 -1
  26. package/dist/development/src/model/authorization/PermissionContext.js.map +1 -1
  27. package/dist/development/src/model/authorization/PermissionContextFactory.cjs.map +1 -1
  28. package/dist/development/src/model/authorization/PermissionContextFactory.js.map +1 -1
  29. package/dist/development/src/model/authorization/PermissionsFactory.cjs.map +1 -1
  30. package/dist/development/src/model/authorization/PermissionsFactory.js.map +1 -1
  31. package/dist/development/src/model/authorization/ProjectScope.cjs.map +1 -1
  32. package/dist/development/src/model/authorization/ProjectScope.js.map +1 -1
  33. package/dist/development/src/model/authorization/ProjectScopeFactory.cjs.map +1 -1
  34. package/dist/development/src/model/authorization/ProjectScopeFactory.js.map +1 -1
  35. package/dist/development/src/model/commands/CommandBus.cjs.map +1 -1
  36. package/dist/development/src/model/commands/CommandBus.js.map +1 -1
  37. package/dist/development/src/model/commands/apiKey/ApiKeyHelper.cjs.map +1 -1
  38. package/dist/development/src/model/commands/apiKey/ApiKeyHelper.js.map +1 -1
  39. package/dist/development/src/model/commands/apiKey/CreateApiKeyCommand.cjs.map +1 -1
  40. package/dist/development/src/model/commands/apiKey/CreateApiKeyCommand.js.map +1 -1
  41. package/dist/development/src/model/commands/apiKey/DisableApiKeyCommand.cjs.map +1 -1
  42. package/dist/development/src/model/commands/apiKey/DisableApiKeyCommand.js.map +1 -1
  43. package/dist/development/src/model/commands/apiKey/DisableIdentityApiKeysCommand.cjs.map +1 -1
  44. package/dist/development/src/model/commands/apiKey/DisableIdentityApiKeysCommand.js.map +1 -1
  45. package/dist/development/src/model/commands/apiKey/DisableOneOffApiKeyCommand.cjs.map +1 -1
  46. package/dist/development/src/model/commands/apiKey/DisableOneOffApiKeyCommand.js.map +1 -1
  47. package/dist/development/src/model/commands/apiKey/ProlongApiKeyCommand.cjs.map +1 -1
  48. package/dist/development/src/model/commands/apiKey/ProlongApiKeyCommand.js.map +1 -1
  49. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
  50. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
  51. package/dist/development/src/model/commands/identity/CreateIdentityCommand.cjs.map +1 -1
  52. package/dist/development/src/model/commands/identity/CreateIdentityCommand.js.map +1 -1
  53. package/dist/development/src/model/commands/identity/PatchIdentityGlobalRoles.cjs.map +1 -1
  54. package/dist/development/src/model/commands/identity/PatchIdentityGlobalRoles.js.map +1 -1
  55. package/dist/development/src/model/commands/idp/CreateIdpCommand.cjs.map +1 -1
  56. package/dist/development/src/model/commands/idp/CreateIdpCommand.js.map +1 -1
  57. package/dist/development/src/model/commands/idp/DisableIdpCommand.cjs.map +1 -1
  58. package/dist/development/src/model/commands/idp/DisableIdpCommand.js.map +1 -1
  59. package/dist/development/src/model/commands/idp/EnableIdpCommand.cjs.map +1 -1
  60. package/dist/development/src/model/commands/idp/EnableIdpCommand.js.map +1 -1
  61. package/dist/development/src/model/commands/idp/UpdateIdpCommand.cjs.map +1 -1
  62. package/dist/development/src/model/commands/idp/UpdateIdpCommand.js.map +1 -1
  63. package/dist/development/src/model/commands/mailTemplate/AddMailTemplateCommand.cjs.map +1 -1
  64. package/dist/development/src/model/commands/mailTemplate/AddMailTemplateCommand.js.map +1 -1
  65. package/dist/development/src/model/commands/mailTemplate/RemoveMailTemplateCommand.cjs.map +1 -1
  66. package/dist/development/src/model/commands/mailTemplate/RemoveMailTemplateCommand.js.map +1 -1
  67. package/dist/development/src/model/commands/membership/AddProjectMemberCommand.cjs.map +1 -1
  68. package/dist/development/src/model/commands/membership/AddProjectMemberCommand.js.map +1 -1
  69. package/dist/development/src/model/commands/membership/CreateOrUpdateProjectMembershipCommand.cjs.map +1 -1
  70. package/dist/development/src/model/commands/membership/CreateOrUpdateProjectMembershipCommand.js.map +1 -1
  71. package/dist/development/src/model/commands/membership/RemoveProjectMemberCommand.cjs.map +1 -1
  72. package/dist/development/src/model/commands/membership/RemoveProjectMemberCommand.js.map +1 -1
  73. package/dist/development/src/model/commands/membership/RemoveProjectMembershipsCommand.cjs.map +1 -1
  74. package/dist/development/src/model/commands/membership/RemoveProjectMembershipsCommand.js.map +1 -1
  75. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.cjs.map +1 -1
  76. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.js.map +1 -1
  77. package/dist/development/src/model/commands/membership/variables/PatchProjectMembershipVariableValuesCommand.cjs.map +1 -1
  78. package/dist/development/src/model/commands/membership/variables/PatchProjectMembershipVariableValuesCommand.js.map +1 -1
  79. package/dist/development/src/model/commands/membership/variables/PatchProjectMembershipVariablesCommand.cjs.map +1 -1
  80. package/dist/development/src/model/commands/membership/variables/PatchProjectMembershipVariablesCommand.js.map +1 -1
  81. package/dist/development/src/model/commands/membership/variables/SetProjectMembershipVariableValuesCommand.cjs.map +1 -1
  82. package/dist/development/src/model/commands/membership/variables/SetProjectMembershipVariableValuesCommand.js.map +1 -1
  83. package/dist/development/src/model/commands/otp/ConfirmOtpCommand.cjs.map +1 -1
  84. package/dist/development/src/model/commands/otp/ConfirmOtpCommand.js.map +1 -1
  85. package/dist/development/src/model/commands/otp/DisableOtpCommand.cjs.map +1 -1
  86. package/dist/development/src/model/commands/otp/DisableOtpCommand.js.map +1 -1
  87. package/dist/development/src/model/commands/otp/PrepareOtpCommand.cjs.map +1 -1
  88. package/dist/development/src/model/commands/otp/PrepareOtpCommand.js.map +1 -1
  89. package/dist/development/src/model/commands/person/ChangePasswordCommand.cjs.map +1 -1
  90. package/dist/development/src/model/commands/person/ChangePasswordCommand.js.map +1 -1
  91. package/dist/development/src/model/commands/person/ChangeProfileCommand.cjs.map +1 -1
  92. package/dist/development/src/model/commands/person/ChangeProfileCommand.js.map +1 -1
  93. package/dist/development/src/model/commands/person/CreatePersonCommand.cjs.map +1 -1
  94. package/dist/development/src/model/commands/person/CreatePersonCommand.js.map +1 -1
  95. package/dist/development/src/model/commands/person/CreatePersonIdentityProviderIdentifierCommand.cjs.map +1 -1
  96. package/dist/development/src/model/commands/person/CreatePersonIdentityProviderIdentifierCommand.js.map +1 -1
  97. package/dist/development/src/model/commands/person/DisablePersonCommand.cjs.map +1 -1
  98. package/dist/development/src/model/commands/person/DisablePersonCommand.js.map +1 -1
  99. package/dist/development/src/model/commands/person/TogglePersonPasswordlessCommand.cjs.map +1 -1
  100. package/dist/development/src/model/commands/person/TogglePersonPasswordlessCommand.js.map +1 -1
  101. package/dist/development/src/model/commands/personToken/ActivateOtpCommand.cjs.map +1 -1
  102. package/dist/development/src/model/commands/personToken/ActivateOtpCommand.js.map +1 -1
  103. package/dist/development/src/model/commands/personToken/CreatePersonTokenCommand.cjs.map +1 -1
  104. package/dist/development/src/model/commands/personToken/CreatePersonTokenCommand.js.map +1 -1
  105. package/dist/development/src/model/commands/personToken/IncreaseOtpAttemptCommand.cjs.map +1 -1
  106. package/dist/development/src/model/commands/personToken/IncreaseOtpAttemptCommand.js.map +1 -1
  107. package/dist/development/src/model/commands/personToken/InvalidateTokenCommand.cjs.map +1 -1
  108. package/dist/development/src/model/commands/personToken/InvalidateTokenCommand.js.map +1 -1
  109. package/dist/development/src/model/commands/personToken/ResetPasswordCommand.cjs.map +1 -1
  110. package/dist/development/src/model/commands/personToken/ResetPasswordCommand.js.map +1 -1
  111. package/dist/development/src/model/commands/personToken/SavePersonTokenCommand.cjs.map +1 -1
  112. package/dist/development/src/model/commands/personToken/SavePersonTokenCommand.js.map +1 -1
  113. package/dist/development/src/model/commands/project/CreateProjectCommand.cjs.map +1 -1
  114. package/dist/development/src/model/commands/project/CreateProjectCommand.js.map +1 -1
  115. package/dist/development/src/model/commands/project/SetProjectSecretCommand.cjs.map +1 -1
  116. package/dist/development/src/model/commands/project/SetProjectSecretCommand.js.map +1 -1
  117. package/dist/development/src/model/commands/project/UpdateProjectCommand.cjs.map +1 -1
  118. package/dist/development/src/model/commands/project/UpdateProjectCommand.js.map +1 -1
  119. package/dist/development/src/model/dtos/Password.cjs.map +1 -1
  120. package/dist/development/src/model/dtos/Password.js.map +1 -1
  121. package/dist/development/src/model/mailing/UserMailer.cjs.map +1 -1
  122. package/dist/development/src/model/mailing/UserMailer.js.map +1 -1
  123. package/dist/development/src/model/mailing/templates/ExistingUserInvited.mustache.cjs.map +1 -1
  124. package/dist/development/src/model/mailing/templates/ExistingUserInvited.mustache.js.map +1 -1
  125. package/dist/development/src/model/mailing/templates/NewUserInvited.mustache.cjs.map +1 -1
  126. package/dist/development/src/model/mailing/templates/NewUserInvited.mustache.js.map +1 -1
  127. package/dist/development/src/model/mailing/templates/PasswordReset.mustache.cjs.map +1 -1
  128. package/dist/development/src/model/mailing/templates/PasswordReset.mustache.js.map +1 -1
  129. package/dist/development/src/model/mailing/templates/PasswordlessSignIn.mustache.cjs.map +1 -1
  130. package/dist/development/src/model/mailing/templates/PasswordlessSignIn.mustache.js.map +1 -1
  131. package/dist/development/src/model/mailing/type.cjs.map +1 -1
  132. package/dist/development/src/model/mailing/type.js.map +1 -1
  133. package/dist/development/src/model/queries/apiKey/ApiKeyQuery.cjs.map +1 -1
  134. package/dist/development/src/model/queries/apiKey/ApiKeyQuery.js.map +1 -1
  135. package/dist/development/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
  136. package/dist/development/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
  137. package/dist/development/src/model/queries/identity/IdentityQuery.cjs.map +1 -1
  138. package/dist/development/src/model/queries/identity/IdentityQuery.js.map +1 -1
  139. package/dist/development/src/model/queries/idp/IdentityProviderBySlugQuery.cjs.map +1 -1
  140. package/dist/development/src/model/queries/idp/IdentityProviderBySlugQuery.js.map +1 -1
  141. package/dist/development/src/model/queries/idp/IdentityProvidersQuery.cjs.map +1 -1
  142. package/dist/development/src/model/queries/idp/IdentityProvidersQuery.js.map +1 -1
  143. package/dist/development/src/model/queries/idp/helpers.cjs.map +1 -1
  144. package/dist/development/src/model/queries/idp/helpers.js.map +1 -1
  145. package/dist/development/src/model/queries/mailTemplate/MailTemplateListQuery.cjs.map +1 -1
  146. package/dist/development/src/model/queries/mailTemplate/MailTemplateListQuery.js.map +1 -1
  147. package/dist/development/src/model/queries/mailTemplate/MailTemplateQuery.cjs.map +1 -1
  148. package/dist/development/src/model/queries/mailTemplate/MailTemplateQuery.js.map +1 -1
  149. package/dist/development/src/model/queries/membership/ProjectMembersQuery.cjs.map +1 -1
  150. package/dist/development/src/model/queries/membership/ProjectMembersQuery.js.map +1 -1
  151. package/dist/development/src/model/queries/membership/ProjectMembershipByIdentityQuery.cjs.map +1 -1
  152. package/dist/development/src/model/queries/membership/ProjectMembershipByIdentityQuery.js.map +1 -1
  153. package/dist/development/src/model/queries/membership/ProjectRolesByIdentityQuery.cjs.map +1 -1
  154. package/dist/development/src/model/queries/membership/ProjectRolesByIdentityQuery.js.map +1 -1
  155. package/dist/development/src/model/queries/membership/ProjectSlugSpecification.cjs.map +1 -1
  156. package/dist/development/src/model/queries/membership/ProjectSlugSpecification.js.map +1 -1
  157. package/dist/development/src/model/queries/person/PersonByIdPQuery.cjs.map +1 -1
  158. package/dist/development/src/model/queries/person/PersonByIdPQuery.js.map +1 -1
  159. package/dist/development/src/model/queries/person/PersonByIdentityBatchQuery.cjs.map +1 -1
  160. package/dist/development/src/model/queries/person/PersonByIdentityBatchQuery.js.map +1 -1
  161. package/dist/development/src/model/queries/person/PersonQuery.cjs.map +1 -1
  162. package/dist/development/src/model/queries/person/PersonQuery.js.map +1 -1
  163. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.cjs.map +1 -1
  164. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.js.map +1 -1
  165. package/dist/development/src/model/queries/personToken/PersonTokenQuery.cjs.map +1 -1
  166. package/dist/development/src/model/queries/personToken/PersonTokenQuery.js.map +1 -1
  167. package/dist/development/src/model/queries/project/ProjectBySlugQuery.cjs.map +1 -1
  168. package/dist/development/src/model/queries/project/ProjectBySlugQuery.js.map +1 -1
  169. package/dist/development/src/model/queries/project/ProjectSecretsQuery.cjs.map +1 -1
  170. package/dist/development/src/model/queries/project/ProjectSecretsQuery.js.map +1 -1
  171. package/dist/development/src/model/queries/project/ProjectUpdateTimestampQuery.cjs.map +1 -1
  172. package/dist/development/src/model/queries/project/ProjectUpdateTimestampQuery.js.map +1 -1
  173. package/dist/development/src/model/queries/project/ProjectsByIdentityQuery.cjs.map +1 -1
  174. package/dist/development/src/model/queries/project/ProjectsByIdentityQuery.js.map +1 -1
  175. package/dist/development/src/model/queries/project/ProjectsQuery.cjs.map +1 -1
  176. package/dist/development/src/model/queries/project/ProjectsQuery.js.map +1 -1
  177. package/dist/development/src/model/service/ConfigurationManager.cjs.map +1 -1
  178. package/dist/development/src/model/service/ConfigurationManager.js.map +1 -1
  179. package/dist/development/src/model/service/EmailValidator.cjs.map +1 -1
  180. package/dist/development/src/model/service/EmailValidator.js.map +1 -1
  181. package/dist/development/src/model/service/IDPSignInManager.cjs.map +1 -1
  182. package/dist/development/src/model/service/IDPSignInManager.js.map +1 -1
  183. package/dist/development/src/model/service/InviteManager.cjs.map +1 -1
  184. package/dist/development/src/model/service/InviteManager.js.map +1 -1
  185. package/dist/development/src/model/service/MailTemplateManager.cjs.map +1 -1
  186. package/dist/development/src/model/service/MailTemplateManager.js.map +1 -1
  187. package/dist/development/src/model/service/MembershipValidator.cjs.map +1 -1
  188. package/dist/development/src/model/service/MembershipValidator.js.map +1 -1
  189. package/dist/development/src/model/service/OtpAuthenticator.cjs.map +1 -1
  190. package/dist/development/src/model/service/OtpAuthenticator.js.map +1 -1
  191. package/dist/development/src/model/service/OtpManager.cjs.map +1 -1
  192. package/dist/development/src/model/service/OtpManager.js.map +1 -1
  193. package/dist/development/src/model/service/PasswordChangeManager.cjs.map +1 -1
  194. package/dist/development/src/model/service/PasswordChangeManager.js.map +1 -1
  195. package/dist/development/src/model/service/PasswordResetManager.cjs.map +1 -1
  196. package/dist/development/src/model/service/PasswordResetManager.js.map +1 -1
  197. package/dist/development/src/model/service/PasswordlessSignInManager.cjs.map +1 -1
  198. package/dist/development/src/model/service/PasswordlessSignInManager.js.map +1 -1
  199. package/dist/development/src/model/service/PersonAccessManager.cjs.map +1 -1
  200. package/dist/development/src/model/service/PersonAccessManager.js.map +1 -1
  201. package/dist/development/src/model/service/PersonManager.cjs.map +1 -1
  202. package/dist/development/src/model/service/PersonManager.js.map +1 -1
  203. package/dist/development/src/model/service/ProjectManager.cjs.map +1 -1
  204. package/dist/development/src/model/service/ProjectManager.js.map +1 -1
  205. package/dist/development/src/model/service/ProjectMemberManager.cjs.map +1 -1
  206. package/dist/development/src/model/service/ProjectMemberManager.js.map +1 -1
  207. package/dist/development/src/model/service/RolesManager.cjs.map +1 -1
  208. package/dist/development/src/model/service/RolesManager.js.map +1 -1
  209. package/dist/development/src/model/service/SecretsManager.cjs.map +1 -1
  210. package/dist/development/src/model/service/SecretsManager.js.map +1 -1
  211. package/dist/development/src/model/service/SignInManager.cjs.map +1 -1
  212. package/dist/development/src/model/service/SignInManager.js.map +1 -1
  213. package/dist/development/src/model/service/SignUpManager.cjs.map +1 -1
  214. package/dist/development/src/model/service/SignUpManager.js.map +1 -1
  215. package/dist/development/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
  216. package/dist/development/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
  217. package/dist/development/src/model/service/apiKey/ApiKeyService.cjs.map +1 -1
  218. package/dist/development/src/model/service/apiKey/ApiKeyService.js.map +1 -1
  219. package/dist/development/src/model/service/helpers/getPreferredProject.cjs.map +1 -1
  220. package/dist/development/src/model/service/helpers/getPreferredProject.js.map +1 -1
  221. package/dist/development/src/model/service/idp/IDPHandlerRegistry.cjs.map +1 -1
  222. package/dist/development/src/model/service/idp/IDPHandlerRegistry.js.map +1 -1
  223. package/dist/development/src/model/service/idp/IDPManager.cjs.map +1 -1
  224. package/dist/development/src/model/service/idp/IDPManager.js.map +1 -1
  225. package/dist/development/src/model/service/idp/IDPResponseError.cjs.map +1 -1
  226. package/dist/development/src/model/service/idp/IDPResponseError.js.map +1 -1
  227. package/dist/development/src/model/service/idp/IDPValidationError.cjs.map +1 -1
  228. package/dist/development/src/model/service/idp/IDPValidationError.js.map +1 -1
  229. package/dist/development/src/model/service/idp/IdentityProviderNotFoundError.cjs.map +1 -1
  230. package/dist/development/src/model/service/idp/IdentityProviderNotFoundError.js.map +1 -1
  231. package/dist/development/src/model/service/idp/InvalidIDPConfigurationError.cjs.map +1 -1
  232. package/dist/development/src/model/service/idp/InvalidIDPConfigurationError.js.map +1 -1
  233. package/dist/development/src/model/service/idp/providers/AppleProvider.cjs.map +1 -1
  234. package/dist/development/src/model/service/idp/providers/AppleProvider.js.map +1 -1
  235. package/dist/development/src/model/service/idp/providers/FacebookProvider.cjs.map +1 -1
  236. package/dist/development/src/model/service/idp/providers/FacebookProvider.js.map +1 -1
  237. package/dist/development/src/model/service/idp/providers/OIDCHelpers.cjs.map +1 -1
  238. package/dist/development/src/model/service/idp/providers/OIDCHelpers.js.map +1 -1
  239. package/dist/development/src/model/service/idp/providers/OIDCProvider.cjs.map +1 -1
  240. package/dist/development/src/model/service/idp/providers/OIDCProvider.js.map +1 -1
  241. package/dist/development/src/model/service/idp/providers/OIDCTypes.cjs.map +1 -1
  242. package/dist/development/src/model/service/idp/providers/OIDCTypes.js.map +1 -1
  243. package/dist/development/src/model/service/idp/providers/helpers.cjs.map +1 -1
  244. package/dist/development/src/model/service/idp/providers/helpers.js.map +1 -1
  245. package/dist/development/src/model/service/membershipUtils.cjs.map +1 -1
  246. package/dist/development/src/model/service/membershipUtils.js.map +1 -1
  247. package/dist/development/src/model/type/ApiKey.cjs.map +1 -1
  248. package/dist/development/src/model/type/ApiKey.js.map +1 -1
  249. package/dist/development/src/model/utils/DatabaseContext.cjs.map +1 -1
  250. package/dist/development/src/model/utils/DatabaseContext.js.map +1 -1
  251. package/dist/development/src/model/utils/Response.cjs.map +1 -1
  252. package/dist/development/src/model/utils/Response.js.map +1 -1
  253. package/dist/development/src/model/utils/password.cjs.map +1 -1
  254. package/dist/development/src/model/utils/password.js.map +1 -1
  255. package/dist/development/src/model/utils/tokenUtils.cjs.map +1 -1
  256. package/dist/development/src/model/utils/tokenUtils.js.map +1 -1
  257. package/dist/development/src/resolvers/ResolverFactory.cjs.map +1 -1
  258. package/dist/development/src/resolvers/ResolverFactory.js.map +1 -1
  259. package/dist/development/src/resolvers/TenantResolverContextFactory.cjs.map +1 -1
  260. package/dist/development/src/resolvers/TenantResolverContextFactory.js.map +1 -1
  261. package/dist/development/src/resolvers/errorUtils.cjs.map +1 -1
  262. package/dist/development/src/resolvers/errorUtils.js.map +1 -1
  263. package/dist/development/src/resolvers/membershipUtils.cjs.map +1 -1
  264. package/dist/development/src/resolvers/membershipUtils.js.map +1 -1
  265. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs.map +1 -1
  266. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js.map +1 -1
  267. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
  268. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
  269. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
  270. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
  271. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
  272. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
  273. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
  274. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
  275. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
  276. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
  277. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
  278. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
  279. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
  280. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
  281. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
  282. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
  283. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
  284. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
  285. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
  286. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
  287. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
  288. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
  289. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
  290. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
  291. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.cjs.map +1 -1
  292. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.js.map +1 -1
  293. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
  294. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
  295. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
  296. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
  297. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
  298. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
  299. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
  300. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
  301. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
  302. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.js.map +1 -1
  303. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.cjs.map +1 -1
  304. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.js.map +1 -1
  305. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
  306. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
  307. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs.map +1 -1
  308. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.js.map +1 -1
  309. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
  310. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
  311. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
  312. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
  313. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
  314. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
  315. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
  316. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
  317. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
  318. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
  319. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
  320. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
  321. package/dist/development/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
  322. package/dist/development/src/resolvers/query/IDPQueryResolver.js.map +1 -1
  323. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
  324. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
  325. package/dist/development/src/resolvers/query/MeQueryResolver.cjs.map +1 -1
  326. package/dist/development/src/resolvers/query/MeQueryResolver.js.map +1 -1
  327. package/dist/development/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
  328. package/dist/development/src/resolvers/query/PersonQueryResolver.js.map +1 -1
  329. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
  330. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
  331. package/dist/development/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
  332. package/dist/development/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
  333. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.cjs.map +1 -1
  334. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.js.map +1 -1
  335. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
  336. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
  337. package/dist/development/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
  338. package/dist/development/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
  339. package/dist/development/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
  340. package/dist/development/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
  341. package/dist/development/src/schema/tenant.graphql.cjs.map +1 -1
  342. package/dist/development/src/utils/Mailer.cjs.map +1 -1
  343. package/dist/development/src/utils/Mailer.js.map +1 -1
  344. package/dist/development/src/utils/TemplateRenderer.cjs.map +1 -1
  345. package/dist/development/src/utils/TemplateRenderer.js.map +1 -1
  346. package/dist/development/src/utils/array.cjs.map +1 -1
  347. package/dist/development/src/utils/array.js.map +1 -1
  348. package/dist/development/src/utils/batchQuery.cjs.map +1 -1
  349. package/dist/development/src/utils/batchQuery.js.map +1 -1
  350. package/dist/production/src/TenantContainer.cjs.map +1 -1
  351. package/dist/production/src/TenantContainer.js.map +1 -1
  352. package/dist/production/src/bridges/system/IdentityFetcher.cjs.map +1 -1
  353. package/dist/production/src/bridges/system/IdentityFetcher.js.map +1 -1
  354. package/dist/production/src/exceptions.cjs.map +1 -1
  355. package/dist/production/src/exceptions.js.map +1 -1
  356. package/dist/production/src/migrations/runner.cjs.map +1 -1
  357. package/dist/production/src/migrations/runner.js.map +1 -1
  358. package/dist/production/src/migrations/tenantCredentials.cjs.map +1 -1
  359. package/dist/production/src/migrations/tenantCredentials.js.map +1 -1
  360. package/dist/production/src/model/authorization/AclSchemaAccessNodeFactory.cjs.map +1 -1
  361. package/dist/production/src/model/authorization/AclSchemaAccessNodeFactory.js.map +1 -1
  362. package/dist/production/src/model/authorization/DirectPermissionsAccessNode.cjs.map +1 -1
  363. package/dist/production/src/model/authorization/DirectPermissionsAccessNode.js.map +1 -1
  364. package/dist/production/src/model/authorization/Identity.cjs.map +1 -1
  365. package/dist/production/src/model/authorization/Identity.js.map +1 -1
  366. package/dist/production/src/model/authorization/IdentityFactory.cjs.map +1 -1
  367. package/dist/production/src/model/authorization/IdentityFactory.js.map +1 -1
  368. package/dist/production/src/model/authorization/IdentityScope.cjs.map +1 -1
  369. package/dist/production/src/model/authorization/IdentityScope.js.map +1 -1
  370. package/dist/production/src/model/authorization/MembershipMatcher.cjs.map +1 -1
  371. package/dist/production/src/model/authorization/MembershipMatcher.js.map +1 -1
  372. package/dist/production/src/model/authorization/PermissionActions.cjs.map +1 -1
  373. package/dist/production/src/model/authorization/PermissionActions.js.map +1 -1
  374. package/dist/production/src/model/authorization/PermissionContext.cjs.map +1 -1
  375. package/dist/production/src/model/authorization/PermissionContext.js.map +1 -1
  376. package/dist/production/src/model/authorization/PermissionContextFactory.cjs.map +1 -1
  377. package/dist/production/src/model/authorization/PermissionContextFactory.js.map +1 -1
  378. package/dist/production/src/model/authorization/PermissionsFactory.cjs.map +1 -1
  379. package/dist/production/src/model/authorization/PermissionsFactory.js.map +1 -1
  380. package/dist/production/src/model/authorization/ProjectScope.cjs.map +1 -1
  381. package/dist/production/src/model/authorization/ProjectScope.js.map +1 -1
  382. package/dist/production/src/model/authorization/ProjectScopeFactory.cjs.map +1 -1
  383. package/dist/production/src/model/authorization/ProjectScopeFactory.js.map +1 -1
  384. package/dist/production/src/model/commands/CommandBus.cjs.map +1 -1
  385. package/dist/production/src/model/commands/CommandBus.js.map +1 -1
  386. package/dist/production/src/model/commands/apiKey/ApiKeyHelper.cjs.map +1 -1
  387. package/dist/production/src/model/commands/apiKey/ApiKeyHelper.js.map +1 -1
  388. package/dist/production/src/model/commands/apiKey/CreateApiKeyCommand.cjs.map +1 -1
  389. package/dist/production/src/model/commands/apiKey/CreateApiKeyCommand.js.map +1 -1
  390. package/dist/production/src/model/commands/apiKey/DisableApiKeyCommand.cjs.map +1 -1
  391. package/dist/production/src/model/commands/apiKey/DisableApiKeyCommand.js.map +1 -1
  392. package/dist/production/src/model/commands/apiKey/DisableIdentityApiKeysCommand.cjs.map +1 -1
  393. package/dist/production/src/model/commands/apiKey/DisableIdentityApiKeysCommand.js.map +1 -1
  394. package/dist/production/src/model/commands/apiKey/DisableOneOffApiKeyCommand.cjs.map +1 -1
  395. package/dist/production/src/model/commands/apiKey/DisableOneOffApiKeyCommand.js.map +1 -1
  396. package/dist/production/src/model/commands/apiKey/ProlongApiKeyCommand.cjs.map +1 -1
  397. package/dist/production/src/model/commands/apiKey/ProlongApiKeyCommand.js.map +1 -1
  398. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
  399. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
  400. package/dist/production/src/model/commands/identity/CreateIdentityCommand.cjs.map +1 -1
  401. package/dist/production/src/model/commands/identity/CreateIdentityCommand.js.map +1 -1
  402. package/dist/production/src/model/commands/identity/PatchIdentityGlobalRoles.cjs.map +1 -1
  403. package/dist/production/src/model/commands/identity/PatchIdentityGlobalRoles.js.map +1 -1
  404. package/dist/production/src/model/commands/idp/CreateIdpCommand.cjs.map +1 -1
  405. package/dist/production/src/model/commands/idp/CreateIdpCommand.js.map +1 -1
  406. package/dist/production/src/model/commands/idp/DisableIdpCommand.cjs.map +1 -1
  407. package/dist/production/src/model/commands/idp/DisableIdpCommand.js.map +1 -1
  408. package/dist/production/src/model/commands/idp/EnableIdpCommand.cjs.map +1 -1
  409. package/dist/production/src/model/commands/idp/EnableIdpCommand.js.map +1 -1
  410. package/dist/production/src/model/commands/idp/UpdateIdpCommand.cjs.map +1 -1
  411. package/dist/production/src/model/commands/idp/UpdateIdpCommand.js.map +1 -1
  412. package/dist/production/src/model/commands/mailTemplate/AddMailTemplateCommand.cjs.map +1 -1
  413. package/dist/production/src/model/commands/mailTemplate/AddMailTemplateCommand.js.map +1 -1
  414. package/dist/production/src/model/commands/mailTemplate/RemoveMailTemplateCommand.cjs.map +1 -1
  415. package/dist/production/src/model/commands/mailTemplate/RemoveMailTemplateCommand.js.map +1 -1
  416. package/dist/production/src/model/commands/membership/AddProjectMemberCommand.cjs.map +1 -1
  417. package/dist/production/src/model/commands/membership/AddProjectMemberCommand.js.map +1 -1
  418. package/dist/production/src/model/commands/membership/CreateOrUpdateProjectMembershipCommand.cjs.map +1 -1
  419. package/dist/production/src/model/commands/membership/CreateOrUpdateProjectMembershipCommand.js.map +1 -1
  420. package/dist/production/src/model/commands/membership/RemoveProjectMemberCommand.cjs.map +1 -1
  421. package/dist/production/src/model/commands/membership/RemoveProjectMemberCommand.js.map +1 -1
  422. package/dist/production/src/model/commands/membership/RemoveProjectMembershipsCommand.cjs.map +1 -1
  423. package/dist/production/src/model/commands/membership/RemoveProjectMembershipsCommand.js.map +1 -1
  424. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.cjs.map +1 -1
  425. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.js.map +1 -1
  426. package/dist/production/src/model/commands/membership/variables/PatchProjectMembershipVariableValuesCommand.cjs.map +1 -1
  427. package/dist/production/src/model/commands/membership/variables/PatchProjectMembershipVariableValuesCommand.js.map +1 -1
  428. package/dist/production/src/model/commands/membership/variables/PatchProjectMembershipVariablesCommand.cjs.map +1 -1
  429. package/dist/production/src/model/commands/membership/variables/PatchProjectMembershipVariablesCommand.js.map +1 -1
  430. package/dist/production/src/model/commands/membership/variables/SetProjectMembershipVariableValuesCommand.cjs.map +1 -1
  431. package/dist/production/src/model/commands/membership/variables/SetProjectMembershipVariableValuesCommand.js.map +1 -1
  432. package/dist/production/src/model/commands/otp/ConfirmOtpCommand.cjs.map +1 -1
  433. package/dist/production/src/model/commands/otp/ConfirmOtpCommand.js.map +1 -1
  434. package/dist/production/src/model/commands/otp/DisableOtpCommand.cjs.map +1 -1
  435. package/dist/production/src/model/commands/otp/DisableOtpCommand.js.map +1 -1
  436. package/dist/production/src/model/commands/otp/PrepareOtpCommand.cjs.map +1 -1
  437. package/dist/production/src/model/commands/otp/PrepareOtpCommand.js.map +1 -1
  438. package/dist/production/src/model/commands/person/ChangePasswordCommand.cjs.map +1 -1
  439. package/dist/production/src/model/commands/person/ChangePasswordCommand.js.map +1 -1
  440. package/dist/production/src/model/commands/person/ChangeProfileCommand.cjs.map +1 -1
  441. package/dist/production/src/model/commands/person/ChangeProfileCommand.js.map +1 -1
  442. package/dist/production/src/model/commands/person/CreatePersonCommand.cjs.map +1 -1
  443. package/dist/production/src/model/commands/person/CreatePersonCommand.js.map +1 -1
  444. package/dist/production/src/model/commands/person/CreatePersonIdentityProviderIdentifierCommand.cjs.map +1 -1
  445. package/dist/production/src/model/commands/person/CreatePersonIdentityProviderIdentifierCommand.js.map +1 -1
  446. package/dist/production/src/model/commands/person/DisablePersonCommand.cjs.map +1 -1
  447. package/dist/production/src/model/commands/person/DisablePersonCommand.js.map +1 -1
  448. package/dist/production/src/model/commands/person/TogglePersonPasswordlessCommand.cjs.map +1 -1
  449. package/dist/production/src/model/commands/person/TogglePersonPasswordlessCommand.js.map +1 -1
  450. package/dist/production/src/model/commands/personToken/ActivateOtpCommand.cjs.map +1 -1
  451. package/dist/production/src/model/commands/personToken/ActivateOtpCommand.js.map +1 -1
  452. package/dist/production/src/model/commands/personToken/CreatePersonTokenCommand.cjs.map +1 -1
  453. package/dist/production/src/model/commands/personToken/CreatePersonTokenCommand.js.map +1 -1
  454. package/dist/production/src/model/commands/personToken/IncreaseOtpAttemptCommand.cjs.map +1 -1
  455. package/dist/production/src/model/commands/personToken/IncreaseOtpAttemptCommand.js.map +1 -1
  456. package/dist/production/src/model/commands/personToken/InvalidateTokenCommand.cjs.map +1 -1
  457. package/dist/production/src/model/commands/personToken/InvalidateTokenCommand.js.map +1 -1
  458. package/dist/production/src/model/commands/personToken/ResetPasswordCommand.cjs.map +1 -1
  459. package/dist/production/src/model/commands/personToken/ResetPasswordCommand.js.map +1 -1
  460. package/dist/production/src/model/commands/personToken/SavePersonTokenCommand.cjs.map +1 -1
  461. package/dist/production/src/model/commands/personToken/SavePersonTokenCommand.js.map +1 -1
  462. package/dist/production/src/model/commands/project/CreateProjectCommand.cjs.map +1 -1
  463. package/dist/production/src/model/commands/project/CreateProjectCommand.js.map +1 -1
  464. package/dist/production/src/model/commands/project/SetProjectSecretCommand.cjs.map +1 -1
  465. package/dist/production/src/model/commands/project/SetProjectSecretCommand.js.map +1 -1
  466. package/dist/production/src/model/commands/project/UpdateProjectCommand.cjs.map +1 -1
  467. package/dist/production/src/model/commands/project/UpdateProjectCommand.js.map +1 -1
  468. package/dist/production/src/model/dtos/Password.cjs.map +1 -1
  469. package/dist/production/src/model/dtos/Password.js.map +1 -1
  470. package/dist/production/src/model/mailing/UserMailer.cjs.map +1 -1
  471. package/dist/production/src/model/mailing/UserMailer.js.map +1 -1
  472. package/dist/production/src/model/mailing/templates/ExistingUserInvited.mustache.cjs.map +1 -1
  473. package/dist/production/src/model/mailing/templates/ExistingUserInvited.mustache.js.map +1 -1
  474. package/dist/production/src/model/mailing/templates/NewUserInvited.mustache.cjs.map +1 -1
  475. package/dist/production/src/model/mailing/templates/NewUserInvited.mustache.js.map +1 -1
  476. package/dist/production/src/model/mailing/templates/PasswordReset.mustache.cjs.map +1 -1
  477. package/dist/production/src/model/mailing/templates/PasswordReset.mustache.js.map +1 -1
  478. package/dist/production/src/model/mailing/templates/PasswordlessSignIn.mustache.cjs.map +1 -1
  479. package/dist/production/src/model/mailing/templates/PasswordlessSignIn.mustache.js.map +1 -1
  480. package/dist/production/src/model/mailing/type.cjs.map +1 -1
  481. package/dist/production/src/model/mailing/type.js.map +1 -1
  482. package/dist/production/src/model/queries/apiKey/ApiKeyQuery.cjs.map +1 -1
  483. package/dist/production/src/model/queries/apiKey/ApiKeyQuery.js.map +1 -1
  484. package/dist/production/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
  485. package/dist/production/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
  486. package/dist/production/src/model/queries/identity/IdentityQuery.cjs.map +1 -1
  487. package/dist/production/src/model/queries/identity/IdentityQuery.js.map +1 -1
  488. package/dist/production/src/model/queries/idp/IdentityProviderBySlugQuery.cjs.map +1 -1
  489. package/dist/production/src/model/queries/idp/IdentityProviderBySlugQuery.js.map +1 -1
  490. package/dist/production/src/model/queries/idp/IdentityProvidersQuery.cjs.map +1 -1
  491. package/dist/production/src/model/queries/idp/IdentityProvidersQuery.js.map +1 -1
  492. package/dist/production/src/model/queries/idp/helpers.cjs.map +1 -1
  493. package/dist/production/src/model/queries/idp/helpers.js.map +1 -1
  494. package/dist/production/src/model/queries/mailTemplate/MailTemplateListQuery.cjs.map +1 -1
  495. package/dist/production/src/model/queries/mailTemplate/MailTemplateListQuery.js.map +1 -1
  496. package/dist/production/src/model/queries/mailTemplate/MailTemplateQuery.cjs.map +1 -1
  497. package/dist/production/src/model/queries/mailTemplate/MailTemplateQuery.js.map +1 -1
  498. package/dist/production/src/model/queries/membership/ProjectMembersQuery.cjs.map +1 -1
  499. package/dist/production/src/model/queries/membership/ProjectMembersQuery.js.map +1 -1
  500. package/dist/production/src/model/queries/membership/ProjectMembershipByIdentityQuery.cjs.map +1 -1
  501. package/dist/production/src/model/queries/membership/ProjectMembershipByIdentityQuery.js.map +1 -1
  502. package/dist/production/src/model/queries/membership/ProjectRolesByIdentityQuery.cjs.map +1 -1
  503. package/dist/production/src/model/queries/membership/ProjectRolesByIdentityQuery.js.map +1 -1
  504. package/dist/production/src/model/queries/membership/ProjectSlugSpecification.cjs.map +1 -1
  505. package/dist/production/src/model/queries/membership/ProjectSlugSpecification.js.map +1 -1
  506. package/dist/production/src/model/queries/person/PersonByIdPQuery.cjs.map +1 -1
  507. package/dist/production/src/model/queries/person/PersonByIdPQuery.js.map +1 -1
  508. package/dist/production/src/model/queries/person/PersonByIdentityBatchQuery.cjs.map +1 -1
  509. package/dist/production/src/model/queries/person/PersonByIdentityBatchQuery.js.map +1 -1
  510. package/dist/production/src/model/queries/person/PersonQuery.cjs.map +1 -1
  511. package/dist/production/src/model/queries/person/PersonQuery.js.map +1 -1
  512. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.cjs.map +1 -1
  513. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.js.map +1 -1
  514. package/dist/production/src/model/queries/personToken/PersonTokenQuery.cjs.map +1 -1
  515. package/dist/production/src/model/queries/personToken/PersonTokenQuery.js.map +1 -1
  516. package/dist/production/src/model/queries/project/ProjectBySlugQuery.cjs.map +1 -1
  517. package/dist/production/src/model/queries/project/ProjectBySlugQuery.js.map +1 -1
  518. package/dist/production/src/model/queries/project/ProjectSecretsQuery.cjs.map +1 -1
  519. package/dist/production/src/model/queries/project/ProjectSecretsQuery.js.map +1 -1
  520. package/dist/production/src/model/queries/project/ProjectUpdateTimestampQuery.cjs.map +1 -1
  521. package/dist/production/src/model/queries/project/ProjectUpdateTimestampQuery.js.map +1 -1
  522. package/dist/production/src/model/queries/project/ProjectsByIdentityQuery.cjs.map +1 -1
  523. package/dist/production/src/model/queries/project/ProjectsByIdentityQuery.js.map +1 -1
  524. package/dist/production/src/model/queries/project/ProjectsQuery.cjs.map +1 -1
  525. package/dist/production/src/model/queries/project/ProjectsQuery.js.map +1 -1
  526. package/dist/production/src/model/service/ConfigurationManager.cjs.map +1 -1
  527. package/dist/production/src/model/service/ConfigurationManager.js.map +1 -1
  528. package/dist/production/src/model/service/EmailValidator.cjs.map +1 -1
  529. package/dist/production/src/model/service/EmailValidator.js.map +1 -1
  530. package/dist/production/src/model/service/IDPSignInManager.cjs.map +1 -1
  531. package/dist/production/src/model/service/IDPSignInManager.js.map +1 -1
  532. package/dist/production/src/model/service/InviteManager.cjs.map +1 -1
  533. package/dist/production/src/model/service/InviteManager.js.map +1 -1
  534. package/dist/production/src/model/service/MailTemplateManager.cjs.map +1 -1
  535. package/dist/production/src/model/service/MailTemplateManager.js.map +1 -1
  536. package/dist/production/src/model/service/MembershipValidator.cjs.map +1 -1
  537. package/dist/production/src/model/service/MembershipValidator.js.map +1 -1
  538. package/dist/production/src/model/service/OtpAuthenticator.cjs.map +1 -1
  539. package/dist/production/src/model/service/OtpAuthenticator.js.map +1 -1
  540. package/dist/production/src/model/service/OtpManager.cjs.map +1 -1
  541. package/dist/production/src/model/service/OtpManager.js.map +1 -1
  542. package/dist/production/src/model/service/PasswordChangeManager.cjs.map +1 -1
  543. package/dist/production/src/model/service/PasswordChangeManager.js.map +1 -1
  544. package/dist/production/src/model/service/PasswordResetManager.cjs.map +1 -1
  545. package/dist/production/src/model/service/PasswordResetManager.js.map +1 -1
  546. package/dist/production/src/model/service/PasswordlessSignInManager.cjs.map +1 -1
  547. package/dist/production/src/model/service/PasswordlessSignInManager.js.map +1 -1
  548. package/dist/production/src/model/service/PersonAccessManager.cjs.map +1 -1
  549. package/dist/production/src/model/service/PersonAccessManager.js.map +1 -1
  550. package/dist/production/src/model/service/PersonManager.cjs.map +1 -1
  551. package/dist/production/src/model/service/PersonManager.js.map +1 -1
  552. package/dist/production/src/model/service/ProjectManager.cjs.map +1 -1
  553. package/dist/production/src/model/service/ProjectManager.js.map +1 -1
  554. package/dist/production/src/model/service/ProjectMemberManager.cjs.map +1 -1
  555. package/dist/production/src/model/service/ProjectMemberManager.js.map +1 -1
  556. package/dist/production/src/model/service/RolesManager.cjs.map +1 -1
  557. package/dist/production/src/model/service/RolesManager.js.map +1 -1
  558. package/dist/production/src/model/service/SecretsManager.cjs.map +1 -1
  559. package/dist/production/src/model/service/SecretsManager.js.map +1 -1
  560. package/dist/production/src/model/service/SignInManager.cjs.map +1 -1
  561. package/dist/production/src/model/service/SignInManager.js.map +1 -1
  562. package/dist/production/src/model/service/SignUpManager.cjs.map +1 -1
  563. package/dist/production/src/model/service/SignUpManager.js.map +1 -1
  564. package/dist/production/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
  565. package/dist/production/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
  566. package/dist/production/src/model/service/apiKey/ApiKeyService.cjs.map +1 -1
  567. package/dist/production/src/model/service/apiKey/ApiKeyService.js.map +1 -1
  568. package/dist/production/src/model/service/helpers/getPreferredProject.cjs.map +1 -1
  569. package/dist/production/src/model/service/helpers/getPreferredProject.js.map +1 -1
  570. package/dist/production/src/model/service/idp/IDPHandlerRegistry.cjs.map +1 -1
  571. package/dist/production/src/model/service/idp/IDPHandlerRegistry.js.map +1 -1
  572. package/dist/production/src/model/service/idp/IDPManager.cjs.map +1 -1
  573. package/dist/production/src/model/service/idp/IDPManager.js.map +1 -1
  574. package/dist/production/src/model/service/idp/IDPResponseError.cjs.map +1 -1
  575. package/dist/production/src/model/service/idp/IDPResponseError.js.map +1 -1
  576. package/dist/production/src/model/service/idp/IDPValidationError.cjs.map +1 -1
  577. package/dist/production/src/model/service/idp/IDPValidationError.js.map +1 -1
  578. package/dist/production/src/model/service/idp/IdentityProviderNotFoundError.cjs.map +1 -1
  579. package/dist/production/src/model/service/idp/IdentityProviderNotFoundError.js.map +1 -1
  580. package/dist/production/src/model/service/idp/InvalidIDPConfigurationError.cjs.map +1 -1
  581. package/dist/production/src/model/service/idp/InvalidIDPConfigurationError.js.map +1 -1
  582. package/dist/production/src/model/service/idp/providers/AppleProvider.cjs.map +1 -1
  583. package/dist/production/src/model/service/idp/providers/AppleProvider.js.map +1 -1
  584. package/dist/production/src/model/service/idp/providers/FacebookProvider.cjs.map +1 -1
  585. package/dist/production/src/model/service/idp/providers/FacebookProvider.js.map +1 -1
  586. package/dist/production/src/model/service/idp/providers/OIDCHelpers.cjs.map +1 -1
  587. package/dist/production/src/model/service/idp/providers/OIDCHelpers.js.map +1 -1
  588. package/dist/production/src/model/service/idp/providers/OIDCProvider.cjs.map +1 -1
  589. package/dist/production/src/model/service/idp/providers/OIDCProvider.js.map +1 -1
  590. package/dist/production/src/model/service/idp/providers/OIDCTypes.cjs.map +1 -1
  591. package/dist/production/src/model/service/idp/providers/OIDCTypes.js.map +1 -1
  592. package/dist/production/src/model/service/idp/providers/helpers.cjs.map +1 -1
  593. package/dist/production/src/model/service/idp/providers/helpers.js.map +1 -1
  594. package/dist/production/src/model/service/membershipUtils.cjs.map +1 -1
  595. package/dist/production/src/model/service/membershipUtils.js.map +1 -1
  596. package/dist/production/src/model/type/ApiKey.cjs.map +1 -1
  597. package/dist/production/src/model/type/ApiKey.js.map +1 -1
  598. package/dist/production/src/model/utils/DatabaseContext.cjs.map +1 -1
  599. package/dist/production/src/model/utils/DatabaseContext.js.map +1 -1
  600. package/dist/production/src/model/utils/Response.cjs.map +1 -1
  601. package/dist/production/src/model/utils/Response.js.map +1 -1
  602. package/dist/production/src/model/utils/password.cjs.map +1 -1
  603. package/dist/production/src/model/utils/password.js.map +1 -1
  604. package/dist/production/src/model/utils/tokenUtils.cjs.map +1 -1
  605. package/dist/production/src/model/utils/tokenUtils.js.map +1 -1
  606. package/dist/production/src/resolvers/ResolverFactory.cjs.map +1 -1
  607. package/dist/production/src/resolvers/ResolverFactory.js.map +1 -1
  608. package/dist/production/src/resolvers/TenantResolverContextFactory.cjs.map +1 -1
  609. package/dist/production/src/resolvers/TenantResolverContextFactory.js.map +1 -1
  610. package/dist/production/src/resolvers/errorUtils.cjs.map +1 -1
  611. package/dist/production/src/resolvers/errorUtils.js.map +1 -1
  612. package/dist/production/src/resolvers/membershipUtils.cjs.map +1 -1
  613. package/dist/production/src/resolvers/membershipUtils.js.map +1 -1
  614. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs.map +1 -1
  615. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js.map +1 -1
  616. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
  617. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
  618. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
  619. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
  620. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
  621. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
  622. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
  623. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
  624. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
  625. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
  626. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
  627. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
  628. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
  629. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
  630. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
  631. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
  632. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
  633. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
  634. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
  635. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
  636. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
  637. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
  638. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
  639. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
  640. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.cjs.map +1 -1
  641. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.js.map +1 -1
  642. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
  643. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
  644. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
  645. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
  646. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
  647. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
  648. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
  649. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
  650. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
  651. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.js.map +1 -1
  652. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.cjs.map +1 -1
  653. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.js.map +1 -1
  654. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
  655. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
  656. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs.map +1 -1
  657. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.js.map +1 -1
  658. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
  659. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
  660. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
  661. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
  662. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
  663. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
  664. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
  665. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
  666. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
  667. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
  668. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
  669. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
  670. package/dist/production/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
  671. package/dist/production/src/resolvers/query/IDPQueryResolver.js.map +1 -1
  672. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
  673. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
  674. package/dist/production/src/resolvers/query/MeQueryResolver.cjs.map +1 -1
  675. package/dist/production/src/resolvers/query/MeQueryResolver.js.map +1 -1
  676. package/dist/production/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
  677. package/dist/production/src/resolvers/query/PersonQueryResolver.js.map +1 -1
  678. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
  679. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
  680. package/dist/production/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
  681. package/dist/production/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
  682. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.cjs.map +1 -1
  683. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.js.map +1 -1
  684. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
  685. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
  686. package/dist/production/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
  687. package/dist/production/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
  688. package/dist/production/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
  689. package/dist/production/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
  690. package/dist/production/src/schema/tenant.graphql.cjs.map +1 -1
  691. package/dist/production/src/utils/Mailer.cjs.map +1 -1
  692. package/dist/production/src/utils/Mailer.js.map +1 -1
  693. package/dist/production/src/utils/TemplateRenderer.cjs.map +1 -1
  694. package/dist/production/src/utils/TemplateRenderer.js.map +1 -1
  695. package/dist/production/src/utils/array.cjs.map +1 -1
  696. package/dist/production/src/utils/array.js.map +1 -1
  697. package/dist/production/src/utils/batchQuery.cjs.map +1 -1
  698. package/dist/production/src/utils/batchQuery.js.map +1 -1
  699. package/dist/tests/src/mailer.d.ts.map +1 -1
  700. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  701. package/dist/types/tsconfig.tsbuildinfo +1 -1
  702. package/package.json +13 -13
  703. package/src/model/service/OtpAuthenticator.ts +1 -1
  704. package/tests/cases/integration/mocked/addProjectMemberMutation.test.ts +1 -1
  705. package/tests/cases/integration/mocked/changeMyPasswordMutation.test.ts +2 -2
  706. package/tests/cases/integration/mocked/changeMyProfileMutation.test.ts +2 -2
  707. package/tests/cases/integration/mocked/changePasswordMutation.test.ts +1 -1
  708. package/tests/cases/integration/mocked/changeProfileMutation.test.ts +2 -2
  709. package/tests/cases/integration/mocked/confirmOtpMutation.test.ts +1 -1
  710. package/tests/cases/integration/mocked/createApiKeyMutation.test.ts +1 -1
  711. package/tests/cases/integration/mocked/createSessionKeyMutation.test.ts +1 -1
  712. package/tests/cases/integration/mocked/disableApiKeyMutation.ts +1 -1
  713. package/tests/cases/integration/mocked/inviteMutations.test.ts +1 -1
  714. package/tests/cases/integration/mocked/listProjectMembersQuery.test.ts +1 -1
  715. package/tests/cases/integration/mocked/personByIdQuery.test.ts +1 -1
  716. package/tests/cases/integration/mocked/prepareOtpMutation.test.ts +3 -3
  717. package/tests/cases/integration/mocked/removeProjectMemberMutation.test.ts +1 -1
  718. package/tests/cases/integration/mocked/signInIdpMutation.test.ts +1 -1
  719. package/tests/cases/integration/mocked/signInMutation.test.ts +1 -1
  720. package/tests/cases/integration/mocked/signOutMutation.test.ts +1 -1
  721. package/tests/cases/integration/mocked/signUpMutation.test.ts +1 -1
  722. package/tests/cases/integration/mocked/updateProjectMemberMutation.test.ts +1 -1
  723. package/tests/cases/migrations/2020-06-08-134000-tenant-credentials.test.ts +5 -3
  724. package/tests/cases/unit/authorization/membershipAwareAccessNode.test.ts +9 -9
  725. package/tests/cases/unit/authorization/membershipMatcher.test.ts +10 -10
  726. package/tests/src/mailer.ts +3 -4
  727. package/tests/src/testGraphql.ts +2 -2
  728. package/dist/tests/src/testTenantDb.d.ts +0 -31
  729. package/dist/tests/src/testTenantDb.d.ts.map +0 -1
  730. package/tests/src/testTenantDb.ts +0 -202
@@ -1 +1 @@
1
- {"version":3,"file":"SignInManager.js","sources":["../../../../../../packages/engine-tenant-api/src/model/service/SignInManager.ts"],"sourcesContent":["import { CreateSessionTokenErrorCode, SignInErrorCode } from '../../schema'\nimport { ApiKeyManager, OtpAuthenticator } from '../service'\nimport { PersonQuery, PersonRow, PersonUniqueIdentifier } from '../queries'\nimport { Providers } from '../providers'\nimport { DatabaseContext } from '../utils'\nimport { Response, ResponseError, ResponseOk } from '../utils/Response'\nimport { ImplementationException } from '../../exceptions'\n\nclass SignInManager {\n\tconstructor(\n\t\tprivate readonly apiKeyManager: ApiKeyManager,\n\t\tprivate readonly providers: Providers,\n\t\tprivate readonly otpAuthenticator: OtpAuthenticator,\n\t) {}\n\n\tasync signIn(dbContext: DatabaseContext, email: string, password: string, expiration?: number, otpCode?: string): Promise<SignInResponse> {\n\t\tconst personRow = await dbContext.queryHandler.fetch(PersonQuery.byEmail(email))\n\n\t\tif (personRow === null) {\n\t\t\treturn new ResponseError('UNKNOWN_EMAIL', `Person with email ${email} not found`)\n\t\t}\n\n\t\tif (!personRow.password_hash) {\n\t\t\treturn new ResponseError('NO_PASSWORD_SET', `No password set`)\n\t\t}\n\n\t\tif (personRow.disabled_at !== null) {\n\t\t\treturn new ResponseError('PERSON_DISABLED', `Person is disabled`)\n\t\t}\n\n\t\tconst passwordValid = await this.providers.bcryptCompare(password, personRow.password_hash)\n\n\t\tif (!passwordValid) {\n\t\t\treturn new ResponseError('INVALID_PASSWORD', `Password does not match`)\n\t\t}\n\n\t\tif (personRow.otp_uri && personRow.otp_activated_at) {\n\t\t\tif (!otpCode) {\n\t\t\t\treturn new ResponseError('OTP_REQUIRED', `2FA is enabled. OTP token is required`)\n\t\t\t}\n\n\t\t\tif (!this.otpAuthenticator.validate({ uri: personRow.otp_uri }, otpCode)) {\n\t\t\t\treturn new ResponseError('INVALID_OTP_TOKEN', 'OTP token validation has failed')\n\t\t\t}\n\t\t}\n\n\t\tconst sessionToken = await this.apiKeyManager.createSessionApiKey(dbContext, personRow.identity_id, expiration)\n\n\t\treturn new ResponseOk(new SignInResult(personRow, sessionToken))\n\t}\n\n\tasync createSessionToken(\n\t\tdbContext: DatabaseContext,\n\t\tpersonIdentifier: PersonUniqueIdentifier,\n\t\texpiration?: number,\n\t\tverifier?: (person: PersonRow) => Promise<void>,\n\t): Promise<CreateSessionTokenResponse> {\n\t\tconst personRow = await dbContext.queryHandler.fetch(PersonQuery.byUniqueIdentifier(personIdentifier))\n\n\t\tif (personRow === null) {\n\t\t\tif (personIdentifier.type === 'email') {\n\t\t\t\treturn new ResponseError('UNKNOWN_EMAIL', `Person with email ${personIdentifier.email} not found`)\n\n\t\t\t} else if (personIdentifier.type === 'id') {\n\t\t\t\treturn new ResponseError('UNKNOWN_PERSON_ID', `Person with id ${personIdentifier.id} not found`)\n\t\t\t}\n\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tif (personRow.disabled_at !== null) {\n\t\t\treturn new ResponseError('PERSON_DISABLED', `Person with id ${personRow.id} is disabled`)\n\t\t}\n\n\t\tawait verifier?.(personRow)\n\n\t\tconst sessionToken = await this.apiKeyManager.createSessionApiKey(dbContext, personRow.identity_id, expiration)\n\t\treturn new ResponseOk(new SignInResult(personRow, sessionToken))\n\t}\n}\n\nexport class SignInResult {\n\tconstructor(\n\t\tpublic readonly person: PersonRow,\n\t\tpublic readonly token: string,\n\t) {}\n}\n\nexport type SignInResponse = Response<SignInResult, SignInErrorCode>\nexport type CreateSessionTokenResponse = Response<SignInResult, CreateSessionTokenErrorCode>\n\nexport { SignInManager }\n"],"names":[],"mappings":";;;;;;;;;;AAQA,MAAM,cAAc;AAAA,EACnB,YACkB,eACA,WACA,kBAChB;AAHgB,SAAA,gBAAA;AACA,SAAA,YAAA;AACA,SAAA,mBAAA;AAAA,EACf;AAAA,EAEH,MAAM,OAAO,WAA4B,OAAe,UAAkB,YAAqB,SAA2C;AACnI,UAAA,YAAY,MAAM,UAAU,aAAa,MAAM,YAAY,QAAQ,KAAK,CAAC;AAE/E,QAAI,cAAc,MAAM;AACvB,aAAO,IAAI,cAAc,iBAAiB,qBAAqB,KAAK,YAAY;AAAA,IACjF;AAEI,QAAA,CAAC,UAAU,eAAe;AACtB,aAAA,IAAI,cAAc,mBAAmB,iBAAiB;AAAA,IAC9D;AAEI,QAAA,UAAU,gBAAgB,MAAM;AAC5B,aAAA,IAAI,cAAc,mBAAmB,oBAAoB;AAAA,IACjE;AAEA,UAAM,gBAAgB,MAAM,KAAK,UAAU,cAAc,UAAU,UAAU,aAAa;AAE1F,QAAI,CAAC,eAAe;AACZ,aAAA,IAAI,cAAc,oBAAoB,yBAAyB;AAAA,IACvE;AAEI,QAAA,UAAU,WAAW,UAAU,kBAAkB;AACpD,UAAI,CAAC,SAAS;AACN,eAAA,IAAI,cAAc,gBAAgB,uCAAuC;AAAA,MACjF;AAEI,UAAA,CAAC,KAAK,iBAAiB,SAAS,EAAE,KAAK,UAAU,WAAW,OAAO,GAAG;AAClE,eAAA,IAAI,cAAc,qBAAqB,iCAAiC;AAAA,MAChF;AAAA,IACD;AAEM,UAAA,eAAe,MAAM,KAAK,cAAc,oBAAoB,WAAW,UAAU,aAAa,UAAU;AAE9G,WAAO,IAAI,WAAW,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,mBACL,WACA,kBACA,YACA,UACsC;AAChC,UAAA,YAAY,MAAM,UAAU,aAAa,MAAM,YAAY,mBAAmB,gBAAgB,CAAC;AAErG,QAAI,cAAc,MAAM;AACnB,UAAA,iBAAiB,SAAS,SAAS;AACtC,eAAO,IAAI,cAAc,iBAAiB,qBAAqB,iBAAiB,KAAK,YAAY;AAAA,MAAA,WAEvF,iBAAiB,SAAS,MAAM;AAC1C,eAAO,IAAI,cAAc,qBAAqB,kBAAkB,iBAAiB,EAAE,YAAY;AAAA,MAChG;AAEA,YAAM,IAAI,wBAAwB;AAAA,IACnC;AAEI,QAAA,UAAU,gBAAgB,MAAM;AACnC,aAAO,IAAI,cAAc,mBAAmB,kBAAkB,UAAU,EAAE,cAAc;AAAA,IACzF;AAEA,UAAM,WAAW,SAAS;AAEpB,UAAA,eAAe,MAAM,KAAK,cAAc,oBAAoB,WAAW,UAAU,aAAa,UAAU;AAC9G,WAAO,IAAI,WAAW,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,EAChE;AACD;AAEO,MAAM,aAAa;AAAA,EACzB,YACiB,QACA,OACf;AAFe,SAAA,SAAA;AACA,SAAA,QAAA;AAAA,EACd;AACJ;"}
1
+ {"version":3,"file":"SignInManager.js","sources":["../../../../../../packages/engine-tenant-api/src/model/service/SignInManager.ts"],"sourcesContent":["import { CreateSessionTokenErrorCode, SignInErrorCode } from '../../schema'\nimport { ApiKeyManager, OtpAuthenticator } from '../service'\nimport { PersonQuery, PersonRow, PersonUniqueIdentifier } from '../queries'\nimport { Providers } from '../providers'\nimport { DatabaseContext } from '../utils'\nimport { Response, ResponseError, ResponseOk } from '../utils/Response'\nimport { ImplementationException } from '../../exceptions'\n\nclass SignInManager {\n\tconstructor(\n\t\tprivate readonly apiKeyManager: ApiKeyManager,\n\t\tprivate readonly providers: Providers,\n\t\tprivate readonly otpAuthenticator: OtpAuthenticator,\n\t) {}\n\n\tasync signIn(dbContext: DatabaseContext, email: string, password: string, expiration?: number, otpCode?: string): Promise<SignInResponse> {\n\t\tconst personRow = await dbContext.queryHandler.fetch(PersonQuery.byEmail(email))\n\n\t\tif (personRow === null) {\n\t\t\treturn new ResponseError('UNKNOWN_EMAIL', `Person with email ${email} not found`)\n\t\t}\n\n\t\tif (!personRow.password_hash) {\n\t\t\treturn new ResponseError('NO_PASSWORD_SET', `No password set`)\n\t\t}\n\n\t\tif (personRow.disabled_at !== null) {\n\t\t\treturn new ResponseError('PERSON_DISABLED', `Person is disabled`)\n\t\t}\n\n\t\tconst passwordValid = await this.providers.bcryptCompare(password, personRow.password_hash)\n\n\t\tif (!passwordValid) {\n\t\t\treturn new ResponseError('INVALID_PASSWORD', `Password does not match`)\n\t\t}\n\n\t\tif (personRow.otp_uri && personRow.otp_activated_at) {\n\t\t\tif (!otpCode) {\n\t\t\t\treturn new ResponseError('OTP_REQUIRED', `2FA is enabled. OTP token is required`)\n\t\t\t}\n\n\t\t\tif (!this.otpAuthenticator.validate({ uri: personRow.otp_uri }, otpCode)) {\n\t\t\t\treturn new ResponseError('INVALID_OTP_TOKEN', 'OTP token validation has failed')\n\t\t\t}\n\t\t}\n\n\t\tconst sessionToken = await this.apiKeyManager.createSessionApiKey(dbContext, personRow.identity_id, expiration)\n\n\t\treturn new ResponseOk(new SignInResult(personRow, sessionToken))\n\t}\n\n\tasync createSessionToken(\n\t\tdbContext: DatabaseContext,\n\t\tpersonIdentifier: PersonUniqueIdentifier,\n\t\texpiration?: number,\n\t\tverifier?: (person: PersonRow) => Promise<void>,\n\t): Promise<CreateSessionTokenResponse> {\n\t\tconst personRow = await dbContext.queryHandler.fetch(PersonQuery.byUniqueIdentifier(personIdentifier))\n\n\t\tif (personRow === null) {\n\t\t\tif (personIdentifier.type === 'email') {\n\t\t\t\treturn new ResponseError('UNKNOWN_EMAIL', `Person with email ${personIdentifier.email} not found`)\n\n\t\t\t} else if (personIdentifier.type === 'id') {\n\t\t\t\treturn new ResponseError('UNKNOWN_PERSON_ID', `Person with id ${personIdentifier.id} not found`)\n\t\t\t}\n\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tif (personRow.disabled_at !== null) {\n\t\t\treturn new ResponseError('PERSON_DISABLED', `Person with id ${personRow.id} is disabled`)\n\t\t}\n\n\t\tawait verifier?.(personRow)\n\n\t\tconst sessionToken = await this.apiKeyManager.createSessionApiKey(dbContext, personRow.identity_id, expiration)\n\t\treturn new ResponseOk(new SignInResult(personRow, sessionToken))\n\t}\n}\n\nexport class SignInResult {\n\tconstructor(\n\t\tpublic readonly person: PersonRow,\n\t\tpublic readonly token: string,\n\t) {}\n}\n\nexport type SignInResponse = Response<SignInResult, SignInErrorCode>\nexport type CreateSessionTokenResponse = Response<SignInResult, CreateSessionTokenErrorCode>\n\nexport { SignInManager }\n"],"names":[],"mappings":";;;;;;;;;;AAQA,MAAM,cAAc;AAAA,EACnB,YACkB,eACA,WACA,kBAChB;AAHgB,SAAA,gBAAA;AACA,SAAA,YAAA;AACA,SAAA,mBAAA;AAAA,EAAA;AAAA,EAGlB,MAAM,OAAO,WAA4B,OAAe,UAAkB,YAAqB,SAA2C;AACnI,UAAA,YAAY,MAAM,UAAU,aAAa,MAAM,YAAY,QAAQ,KAAK,CAAC;AAE/E,QAAI,cAAc,MAAM;AACvB,aAAO,IAAI,cAAc,iBAAiB,qBAAqB,KAAK,YAAY;AAAA,IAAA;AAG7E,QAAA,CAAC,UAAU,eAAe;AACtB,aAAA,IAAI,cAAc,mBAAmB,iBAAiB;AAAA,IAAA;AAG1D,QAAA,UAAU,gBAAgB,MAAM;AAC5B,aAAA,IAAI,cAAc,mBAAmB,oBAAoB;AAAA,IAAA;AAGjE,UAAM,gBAAgB,MAAM,KAAK,UAAU,cAAc,UAAU,UAAU,aAAa;AAE1F,QAAI,CAAC,eAAe;AACZ,aAAA,IAAI,cAAc,oBAAoB,yBAAyB;AAAA,IAAA;AAGnE,QAAA,UAAU,WAAW,UAAU,kBAAkB;AACpD,UAAI,CAAC,SAAS;AACN,eAAA,IAAI,cAAc,gBAAgB,uCAAuC;AAAA,MAAA;AAG7E,UAAA,CAAC,KAAK,iBAAiB,SAAS,EAAE,KAAK,UAAU,WAAW,OAAO,GAAG;AAClE,eAAA,IAAI,cAAc,qBAAqB,iCAAiC;AAAA,MAAA;AAAA,IAChF;AAGK,UAAA,eAAe,MAAM,KAAK,cAAc,oBAAoB,WAAW,UAAU,aAAa,UAAU;AAE9G,WAAO,IAAI,WAAW,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,EAAA;AAAA,EAGhE,MAAM,mBACL,WACA,kBACA,YACA,UACsC;AAChC,UAAA,YAAY,MAAM,UAAU,aAAa,MAAM,YAAY,mBAAmB,gBAAgB,CAAC;AAErG,QAAI,cAAc,MAAM;AACnB,UAAA,iBAAiB,SAAS,SAAS;AACtC,eAAO,IAAI,cAAc,iBAAiB,qBAAqB,iBAAiB,KAAK,YAAY;AAAA,MAAA,WAEvF,iBAAiB,SAAS,MAAM;AAC1C,eAAO,IAAI,cAAc,qBAAqB,kBAAkB,iBAAiB,EAAE,YAAY;AAAA,MAAA;AAGhG,YAAM,IAAI,wBAAwB;AAAA,IAAA;AAG/B,QAAA,UAAU,gBAAgB,MAAM;AACnC,aAAO,IAAI,cAAc,mBAAmB,kBAAkB,UAAU,EAAE,cAAc;AAAA,IAAA;AAGzF,UAAM,WAAW,SAAS;AAEpB,UAAA,eAAe,MAAM,KAAK,cAAc,oBAAoB,WAAW,UAAU,aAAa,UAAU;AAC9G,WAAO,IAAI,WAAW,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,EAAA;AAEjE;AAEO,MAAM,aAAa;AAAA,EACzB,YACiB,QACA,OACf;AAFe,SAAA,SAAA;AACA,SAAA,QAAA;AAAA,EAAA;AAElB;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SignUpManager.cjs","sources":["../../../../../../packages/engine-tenant-api/src/model/service/SignUpManager.ts"],"sourcesContent":["import { CreateIdentityCommand, CreatePersonCommand } from '../commands'\nimport { PersonQuery, PersonRow } from '../queries'\nimport { SignUpErrorCode } from '../../schema'\nimport { TenantRole } from '../authorization'\nimport { getPasswordWeaknessMessage } from '../utils/password'\nimport { Response, ResponseError, ResponseOk } from '../utils/Response'\nimport { DatabaseContext } from '../utils'\nimport { MaybePassword } from '../dtos'\nimport { EmailValidator } from './EmailValidator'\n\ntype SignUpUser = {\n\temail: string\n\tname?: string\n\tpassword: MaybePassword\n\troles?: readonly string[]\n}\n\nexport class SignUpManager {\n\tconstructor(\n\t\tprivate readonly emailValidator: EmailValidator,\n\t) {\n\t}\n\n\tasync signUp(dbContext: DatabaseContext, { email, password, roles = [] }: SignUpUser): Promise<SignUpResponse> {\n\t\tconst validationError = await this.emailValidator.validateEmail(dbContext, email)\n\t\tif (validationError !== null) {\n\t\t\treturn validationError\n\t\t}\n\t\tconst plainPassword = password.getPlain()\n\t\tconst weakPassword = plainPassword ? getPasswordWeaknessMessage(plainPassword) : null\n\t\tif (weakPassword) {\n\t\t\treturn new ResponseError('TOO_WEAK', weakPassword)\n\t\t}\n\t\tconst person = await dbContext.transaction(async db => {\n\t\t\tconst identityId = await db.commandBus.execute(new CreateIdentityCommand([...roles, TenantRole.PERSON]))\n\t\t\treturn await db.commandBus.execute(new CreatePersonCommand({ identityId, email, password }))\n\t\t})\n\t\treturn new ResponseOk(new SignUpResult(person))\n\t}\n}\n\nexport class SignUpResult {\n\tconstructor(public readonly person: Omit<PersonRow, 'roles'>) {}\n}\nexport type SignUpResponse = Response<SignUpResult, SignUpErrorCode>\n"],"names":["password","getPasswordWeaknessMessage","ResponseError","CreateIdentityCommand","TenantRole","CreatePersonCommand","ResponseOk"],"mappings":";;;;;;;;;;;;;;;AAiBO,MAAM,cAAc;AAAA,EAC1B,YACkB,gBAChB;AADgB,SAAA,iBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,OAAO,WAA4B,EAAE,OAAOA,UAAAA,YAAU,QAAQ,CAAA,KAA2C;AAC9G,UAAM,kBAAkB,MAAM,KAAK,eAAe,cAAc,WAAW,KAAK;AAChF,QAAI,oBAAoB,MAAM;AACtB,aAAA;AAAA,IACR;AACM,UAAA,gBAAgBA,WAAS;AAC/B,UAAM,eAAe,gBAAgBC,SAA2B,2BAAA,aAAa,IAAI;AACjF,QAAI,cAAc;AACV,aAAA,IAAIC,SAAc,cAAA,YAAY,YAAY;AAAA,IAClD;AACA,UAAM,SAAS,MAAM,UAAU,YAAY,OAAM,OAAM;AACtD,YAAM,aAAa,MAAM,GAAG,WAAW,QAAQ,IAAIC,4CAAsB,CAAC,GAAG,OAAOC,MAAAA,WAAW,MAAM,CAAC,CAAC;AAChG,aAAA,MAAM,GAAG,WAAW,QAAQ,IAAIC,oBAAAA,oBAAoB,EAAE,YAAY,OAAA,UAAOL,WAAU,CAAA,CAAC;AAAA,IAAA,CAC3F;AACD,WAAO,IAAIM,SAAAA,WAAW,IAAI,aAAa,MAAM,CAAC;AAAA,EAC/C;AACD;AAEO,MAAM,aAAa;AAAA,EACzB,YAA4B,QAAkC;AAAlC,SAAA,SAAA;AAAA,EAAmC;AAChE;;;"}
1
+ {"version":3,"file":"SignUpManager.cjs","sources":["../../../../../../packages/engine-tenant-api/src/model/service/SignUpManager.ts"],"sourcesContent":["import { CreateIdentityCommand, CreatePersonCommand } from '../commands'\nimport { PersonQuery, PersonRow } from '../queries'\nimport { SignUpErrorCode } from '../../schema'\nimport { TenantRole } from '../authorization'\nimport { getPasswordWeaknessMessage } from '../utils/password'\nimport { Response, ResponseError, ResponseOk } from '../utils/Response'\nimport { DatabaseContext } from '../utils'\nimport { MaybePassword } from '../dtos'\nimport { EmailValidator } from './EmailValidator'\n\ntype SignUpUser = {\n\temail: string\n\tname?: string\n\tpassword: MaybePassword\n\troles?: readonly string[]\n}\n\nexport class SignUpManager {\n\tconstructor(\n\t\tprivate readonly emailValidator: EmailValidator,\n\t) {\n\t}\n\n\tasync signUp(dbContext: DatabaseContext, { email, password, roles = [] }: SignUpUser): Promise<SignUpResponse> {\n\t\tconst validationError = await this.emailValidator.validateEmail(dbContext, email)\n\t\tif (validationError !== null) {\n\t\t\treturn validationError\n\t\t}\n\t\tconst plainPassword = password.getPlain()\n\t\tconst weakPassword = plainPassword ? getPasswordWeaknessMessage(plainPassword) : null\n\t\tif (weakPassword) {\n\t\t\treturn new ResponseError('TOO_WEAK', weakPassword)\n\t\t}\n\t\tconst person = await dbContext.transaction(async db => {\n\t\t\tconst identityId = await db.commandBus.execute(new CreateIdentityCommand([...roles, TenantRole.PERSON]))\n\t\t\treturn await db.commandBus.execute(new CreatePersonCommand({ identityId, email, password }))\n\t\t})\n\t\treturn new ResponseOk(new SignUpResult(person))\n\t}\n}\n\nexport class SignUpResult {\n\tconstructor(public readonly person: Omit<PersonRow, 'roles'>) {}\n}\nexport type SignUpResponse = Response<SignUpResult, SignUpErrorCode>\n"],"names":["password","getPasswordWeaknessMessage","ResponseError","CreateIdentityCommand","TenantRole","CreatePersonCommand","ResponseOk"],"mappings":";;;;;;;;;;;;;;;AAiBO,MAAM,cAAc;AAAA,EAC1B,YACkB,gBAChB;AADgB,SAAA,iBAAA;AAAA,EAAA;AAAA,EAIlB,MAAM,OAAO,WAA4B,EAAE,OAAOA,UAAAA,YAAU,QAAQ,CAAA,KAA2C;AAC9G,UAAM,kBAAkB,MAAM,KAAK,eAAe,cAAc,WAAW,KAAK;AAChF,QAAI,oBAAoB,MAAM;AACtB,aAAA;AAAA,IAAA;AAEF,UAAA,gBAAgBA,WAAS,SAAS;AACxC,UAAM,eAAe,gBAAgBC,oCAA2B,aAAa,IAAI;AACjF,QAAI,cAAc;AACV,aAAA,IAAIC,SAAAA,cAAc,YAAY,YAAY;AAAA,IAAA;AAElD,UAAM,SAAS,MAAM,UAAU,YAAY,OAAM,OAAM;AACtD,YAAM,aAAa,MAAM,GAAG,WAAW,QAAQ,IAAIC,4CAAsB,CAAC,GAAG,OAAOC,iBAAW,MAAM,CAAC,CAAC;AAChG,aAAA,MAAM,GAAG,WAAW,QAAQ,IAAIC,wCAAoB,EAAE,YAAY,iBAAOL,WAAS,CAAC,CAAC;AAAA,IAAA,CAC3F;AACD,WAAO,IAAIM,SAAA,WAAW,IAAI,aAAa,MAAM,CAAC;AAAA,EAAA;AAEhD;AAEO,MAAM,aAAa;AAAA,EACzB,YAA4B,QAAkC;AAAlC,SAAA,SAAA;AAAA,EAAA;AAC7B;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SignUpManager.js","sources":["../../../../../../packages/engine-tenant-api/src/model/service/SignUpManager.ts"],"sourcesContent":["import { CreateIdentityCommand, CreatePersonCommand } from '../commands'\nimport { PersonQuery, PersonRow } from '../queries'\nimport { SignUpErrorCode } from '../../schema'\nimport { TenantRole } from '../authorization'\nimport { getPasswordWeaknessMessage } from '../utils/password'\nimport { Response, ResponseError, ResponseOk } from '../utils/Response'\nimport { DatabaseContext } from '../utils'\nimport { MaybePassword } from '../dtos'\nimport { EmailValidator } from './EmailValidator'\n\ntype SignUpUser = {\n\temail: string\n\tname?: string\n\tpassword: MaybePassword\n\troles?: readonly string[]\n}\n\nexport class SignUpManager {\n\tconstructor(\n\t\tprivate readonly emailValidator: EmailValidator,\n\t) {\n\t}\n\n\tasync signUp(dbContext: DatabaseContext, { email, password, roles = [] }: SignUpUser): Promise<SignUpResponse> {\n\t\tconst validationError = await this.emailValidator.validateEmail(dbContext, email)\n\t\tif (validationError !== null) {\n\t\t\treturn validationError\n\t\t}\n\t\tconst plainPassword = password.getPlain()\n\t\tconst weakPassword = plainPassword ? getPasswordWeaknessMessage(plainPassword) : null\n\t\tif (weakPassword) {\n\t\t\treturn new ResponseError('TOO_WEAK', weakPassword)\n\t\t}\n\t\tconst person = await dbContext.transaction(async db => {\n\t\t\tconst identityId = await db.commandBus.execute(new CreateIdentityCommand([...roles, TenantRole.PERSON]))\n\t\t\treturn await db.commandBus.execute(new CreatePersonCommand({ identityId, email, password }))\n\t\t})\n\t\treturn new ResponseOk(new SignUpResult(person))\n\t}\n}\n\nexport class SignUpResult {\n\tconstructor(public readonly person: Omit<PersonRow, 'roles'>) {}\n}\nexport type SignUpResponse = Response<SignUpResult, SignUpErrorCode>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAiBO,MAAM,cAAc;AAAA,EAC1B,YACkB,gBAChB;AADgB,SAAA,iBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,OAAO,WAA4B,EAAE,OAAO,UAAU,QAAQ,CAAA,KAA2C;AAC9G,UAAM,kBAAkB,MAAM,KAAK,eAAe,cAAc,WAAW,KAAK;AAChF,QAAI,oBAAoB,MAAM;AACtB,aAAA;AAAA,IACR;AACM,UAAA,gBAAgB,SAAS;AAC/B,UAAM,eAAe,gBAAgB,2BAA2B,aAAa,IAAI;AACjF,QAAI,cAAc;AACV,aAAA,IAAI,cAAc,YAAY,YAAY;AAAA,IAClD;AACA,UAAM,SAAS,MAAM,UAAU,YAAY,OAAM,OAAM;AACtD,YAAM,aAAa,MAAM,GAAG,WAAW,QAAQ,IAAI,sBAAsB,CAAC,GAAG,OAAO,WAAW,MAAM,CAAC,CAAC;AAChG,aAAA,MAAM,GAAG,WAAW,QAAQ,IAAI,oBAAoB,EAAE,YAAY,OAAO,SAAU,CAAA,CAAC;AAAA,IAAA,CAC3F;AACD,WAAO,IAAI,WAAW,IAAI,aAAa,MAAM,CAAC;AAAA,EAC/C;AACD;AAEO,MAAM,aAAa;AAAA,EACzB,YAA4B,QAAkC;AAAlC,SAAA,SAAA;AAAA,EAAmC;AAChE;"}
1
+ {"version":3,"file":"SignUpManager.js","sources":["../../../../../../packages/engine-tenant-api/src/model/service/SignUpManager.ts"],"sourcesContent":["import { CreateIdentityCommand, CreatePersonCommand } from '../commands'\nimport { PersonQuery, PersonRow } from '../queries'\nimport { SignUpErrorCode } from '../../schema'\nimport { TenantRole } from '../authorization'\nimport { getPasswordWeaknessMessage } from '../utils/password'\nimport { Response, ResponseError, ResponseOk } from '../utils/Response'\nimport { DatabaseContext } from '../utils'\nimport { MaybePassword } from '../dtos'\nimport { EmailValidator } from './EmailValidator'\n\ntype SignUpUser = {\n\temail: string\n\tname?: string\n\tpassword: MaybePassword\n\troles?: readonly string[]\n}\n\nexport class SignUpManager {\n\tconstructor(\n\t\tprivate readonly emailValidator: EmailValidator,\n\t) {\n\t}\n\n\tasync signUp(dbContext: DatabaseContext, { email, password, roles = [] }: SignUpUser): Promise<SignUpResponse> {\n\t\tconst validationError = await this.emailValidator.validateEmail(dbContext, email)\n\t\tif (validationError !== null) {\n\t\t\treturn validationError\n\t\t}\n\t\tconst plainPassword = password.getPlain()\n\t\tconst weakPassword = plainPassword ? getPasswordWeaknessMessage(plainPassword) : null\n\t\tif (weakPassword) {\n\t\t\treturn new ResponseError('TOO_WEAK', weakPassword)\n\t\t}\n\t\tconst person = await dbContext.transaction(async db => {\n\t\t\tconst identityId = await db.commandBus.execute(new CreateIdentityCommand([...roles, TenantRole.PERSON]))\n\t\t\treturn await db.commandBus.execute(new CreatePersonCommand({ identityId, email, password }))\n\t\t})\n\t\treturn new ResponseOk(new SignUpResult(person))\n\t}\n}\n\nexport class SignUpResult {\n\tconstructor(public readonly person: Omit<PersonRow, 'roles'>) {}\n}\nexport type SignUpResponse = Response<SignUpResult, SignUpErrorCode>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAiBO,MAAM,cAAc;AAAA,EAC1B,YACkB,gBAChB;AADgB,SAAA,iBAAA;AAAA,EAAA;AAAA,EAIlB,MAAM,OAAO,WAA4B,EAAE,OAAO,UAAU,QAAQ,CAAA,KAA2C;AAC9G,UAAM,kBAAkB,MAAM,KAAK,eAAe,cAAc,WAAW,KAAK;AAChF,QAAI,oBAAoB,MAAM;AACtB,aAAA;AAAA,IAAA;AAEF,UAAA,gBAAgB,SAAS,SAAS;AACxC,UAAM,eAAe,gBAAgB,2BAA2B,aAAa,IAAI;AACjF,QAAI,cAAc;AACV,aAAA,IAAI,cAAc,YAAY,YAAY;AAAA,IAAA;AAElD,UAAM,SAAS,MAAM,UAAU,YAAY,OAAM,OAAM;AACtD,YAAM,aAAa,MAAM,GAAG,WAAW,QAAQ,IAAI,sBAAsB,CAAC,GAAG,OAAO,WAAW,MAAM,CAAC,CAAC;AAChG,aAAA,MAAM,GAAG,WAAW,QAAQ,IAAI,oBAAoB,EAAE,YAAY,OAAO,SAAS,CAAC,CAAC;AAAA,IAAA,CAC3F;AACD,WAAO,IAAI,WAAW,IAAI,aAAa,MAAM,CAAC;AAAA,EAAA;AAEhD;AAEO,MAAM,aAAa;AAAA,EACzB,YAA4B,QAAkC;AAAlC,SAAA,SAAA;AAAA,EAAA;AAC7B;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyManager.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/apiKey/ApiKeyManager.ts"],"sourcesContent":["import {\n\tCreateApiKeyCommand,\n\tDisableApiKeyCommand,\n\tDisableIdentityApiKeysCommand,\n\tDisableOneOffApiKeyCommand,\n\tProlongApiKeyCommand,\n} from '../../commands'\nimport { ApiKey } from '../../type'\n\nimport { Response, ResponseError, ResponseOk } from '../../utils/Response'\nimport { DatabaseContext, TokenHash } from '../../utils'\nimport { ApiKeyService, CreateApiKeyResponse } from './ApiKeyService'\nimport assert from 'node:assert'\nimport { Acl } from '@contember/schema'\nimport { ApiKeyByIdQuery, ApiKeyByTokenQuery, ApiKeyRow } from '../../queries'\n\nexport class ApiKeyManager {\n\tconstructor(\n\t\tprivate readonly apiKeyService: ApiKeyService,\n\t) {}\n\n\tasync verifyAndProlong(\n\t\tdbContext: DatabaseContext,\n\t\treadDbContext: DatabaseContext,\n\t\ttoken: string,\n\t): Promise<VerifyResponse> {\n\t\tconst apiKeyRow = await readDbContext.queryHandler.fetch(new ApiKeyByTokenQuery(token))\n\t\tif (apiKeyRow === null) {\n\t\t\treturn new ResponseError(VerifyErrorCode.NOT_FOUND, 'API key was not found')\n\t\t}\n\n\t\tif (apiKeyRow.disabled_at !== null) {\n\t\t\treturn new ResponseError(\n\t\t\t\tVerifyErrorCode.DISABLED,\n\t\t\t\t`API key was disabled at ${apiKeyRow.disabled_at.toISOString()}`,\n\t\t\t)\n\t\t}\n\n\t\tconst now = new Date()\n\t\tif (apiKeyRow.expires_at !== null && apiKeyRow.expires_at <= now) {\n\t\t\treturn new ResponseError(VerifyErrorCode.DISABLED, `API key expired at ${apiKeyRow.expires_at.toISOString()}`)\n\t\t}\n\n\t\tsetImmediate(async () => {\n\t\t\tawait dbContext.commandBus.execute(\n\t\t\t\tnew ProlongApiKeyCommand(\n\t\t\t\t\tapiKeyRow.id,\n\t\t\t\t\tapiKeyRow.type,\n\t\t\t\t\tapiKeyRow.expiration,\n\t\t\t\t\tapiKeyRow.expires_at,\n\t\t\t\t),\n\t\t\t)\n\t\t})\n\n\t\treturn new ResponseOk(new VerifyResult(apiKeyRow.identity_id, apiKeyRow.id, apiKeyRow.roles, apiKeyRow.person_id))\n\t}\n\n\tasync createSessionApiKey(dbContext: DatabaseContext, identityId: string, expiration?: number): Promise<string> {\n\t\tconst command = new CreateApiKeyCommand({ type: ApiKey.Type.SESSION, identityId, expiration })\n\t\tconst token = (await dbContext.commandBus.execute(command)).token\n\t\tassert(token !== undefined)\n\t\treturn token\n\t}\n\n\n\tasync findApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<ApiKeyRow | null> {\n\t\treturn await dbContext.queryHandler.fetch(\n\t\t\tnew ApiKeyByIdQuery(apiKeyId),\n\t\t)\n\t}\n\n\tasync disableOneOffApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<void> {\n\t\tawait dbContext.commandBus.execute(new DisableOneOffApiKeyCommand(apiKeyId))\n\t}\n\n\tasync disableApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<boolean> {\n\t\treturn await dbContext.commandBus.execute(new DisableApiKeyCommand(apiKeyId))\n\t}\n\n\tasync disableIdentityApiKeys(dbContext: DatabaseContext, identityId: string): Promise<void> {\n\t\tawait dbContext.commandBus.execute(new DisableIdentityApiKeysCommand(identityId))\n\t}\n\n\tasync createGlobalPermanentApiKey(\n\t\tdbContext: DatabaseContext,\n\t\tdescription: string,\n\t\troles: readonly string[],\n\t\ttokenHash?: TokenHash,\n\t): Promise<CreateApiKeyResponse> {\n\t\treturn await dbContext.transaction(async db => {\n\t\t\treturn await this.apiKeyService.createPermanentApiKey(db, description, roles, tokenHash)\n\t\t})\n\t}\n\n\tasync createProjectPermanentApiKey(\n\t\tdbContext: DatabaseContext,\n\t\tprojectId: string,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tdescription: string,\n\t\ttokenHash?: TokenHash,\n\t): Promise<CreateApiKeyResponse> {\n\t\treturn await dbContext.transaction(async db => {\n\t\t\treturn await this.apiKeyService.createProjectPermanentApiKey(db, projectId, memberships, description, tokenHash)\n\t\t})\n\t}\n\n}\n\nexport type VerifyResponse = Response<VerifyResult, VerifyErrorCode>\n\nexport class VerifyResult {\n\treadonly valid = true\n\n\tconstructor(\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly apiKeyId: string,\n\t\tpublic readonly roles: string[],\n\t\tpublic readonly personId: string | null,\n\t) {}\n}\n\nexport const enum VerifyErrorCode {\n\tNOT_FOUND = 'not_found',\n\tDISABLED = 'disabled',\n\tEXPIRED = 'expired',\n\tNO_AUTH_HEADER = 'no_auth_header',\n\tINVALID_AUTH_HEADER = 'invalid_auth_header',\n}\n"],"names":["ApiKeyByTokenQuery","ResponseError","ProlongApiKeyCommand","ResponseOk","CreateApiKeyCommand","ApiKey","ApiKeyByIdQuery","DisableOneOffApiKeyCommand","DisableApiKeyCommand","DisableIdentityApiKeysCommand","VerifyErrorCode"],"mappings":"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"}
1
+ {"version":3,"file":"ApiKeyManager.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/apiKey/ApiKeyManager.ts"],"sourcesContent":["import {\n\tCreateApiKeyCommand,\n\tDisableApiKeyCommand,\n\tDisableIdentityApiKeysCommand,\n\tDisableOneOffApiKeyCommand,\n\tProlongApiKeyCommand,\n} from '../../commands'\nimport { ApiKey } from '../../type'\n\nimport { Response, ResponseError, ResponseOk } from '../../utils/Response'\nimport { DatabaseContext, TokenHash } from '../../utils'\nimport { ApiKeyService, CreateApiKeyResponse } from './ApiKeyService'\nimport assert from 'node:assert'\nimport { Acl } from '@contember/schema'\nimport { ApiKeyByIdQuery, ApiKeyByTokenQuery, ApiKeyRow } from '../../queries'\n\nexport class ApiKeyManager {\n\tconstructor(\n\t\tprivate readonly apiKeyService: ApiKeyService,\n\t) {}\n\n\tasync verifyAndProlong(\n\t\tdbContext: DatabaseContext,\n\t\treadDbContext: DatabaseContext,\n\t\ttoken: string,\n\t): Promise<VerifyResponse> {\n\t\tconst apiKeyRow = await readDbContext.queryHandler.fetch(new ApiKeyByTokenQuery(token))\n\t\tif (apiKeyRow === null) {\n\t\t\treturn new ResponseError(VerifyErrorCode.NOT_FOUND, 'API key was not found')\n\t\t}\n\n\t\tif (apiKeyRow.disabled_at !== null) {\n\t\t\treturn new ResponseError(\n\t\t\t\tVerifyErrorCode.DISABLED,\n\t\t\t\t`API key was disabled at ${apiKeyRow.disabled_at.toISOString()}`,\n\t\t\t)\n\t\t}\n\n\t\tconst now = new Date()\n\t\tif (apiKeyRow.expires_at !== null && apiKeyRow.expires_at <= now) {\n\t\t\treturn new ResponseError(VerifyErrorCode.DISABLED, `API key expired at ${apiKeyRow.expires_at.toISOString()}`)\n\t\t}\n\n\t\tsetImmediate(async () => {\n\t\t\tawait dbContext.commandBus.execute(\n\t\t\t\tnew ProlongApiKeyCommand(\n\t\t\t\t\tapiKeyRow.id,\n\t\t\t\t\tapiKeyRow.type,\n\t\t\t\t\tapiKeyRow.expiration,\n\t\t\t\t\tapiKeyRow.expires_at,\n\t\t\t\t),\n\t\t\t)\n\t\t})\n\n\t\treturn new ResponseOk(new VerifyResult(apiKeyRow.identity_id, apiKeyRow.id, apiKeyRow.roles, apiKeyRow.person_id))\n\t}\n\n\tasync createSessionApiKey(dbContext: DatabaseContext, identityId: string, expiration?: number): Promise<string> {\n\t\tconst command = new CreateApiKeyCommand({ type: ApiKey.Type.SESSION, identityId, expiration })\n\t\tconst token = (await dbContext.commandBus.execute(command)).token\n\t\tassert(token !== undefined)\n\t\treturn token\n\t}\n\n\n\tasync findApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<ApiKeyRow | null> {\n\t\treturn await dbContext.queryHandler.fetch(\n\t\t\tnew ApiKeyByIdQuery(apiKeyId),\n\t\t)\n\t}\n\n\tasync disableOneOffApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<void> {\n\t\tawait dbContext.commandBus.execute(new DisableOneOffApiKeyCommand(apiKeyId))\n\t}\n\n\tasync disableApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<boolean> {\n\t\treturn await dbContext.commandBus.execute(new DisableApiKeyCommand(apiKeyId))\n\t}\n\n\tasync disableIdentityApiKeys(dbContext: DatabaseContext, identityId: string): Promise<void> {\n\t\tawait dbContext.commandBus.execute(new DisableIdentityApiKeysCommand(identityId))\n\t}\n\n\tasync createGlobalPermanentApiKey(\n\t\tdbContext: DatabaseContext,\n\t\tdescription: string,\n\t\troles: readonly string[],\n\t\ttokenHash?: TokenHash,\n\t): Promise<CreateApiKeyResponse> {\n\t\treturn await dbContext.transaction(async db => {\n\t\t\treturn await this.apiKeyService.createPermanentApiKey(db, description, roles, tokenHash)\n\t\t})\n\t}\n\n\tasync createProjectPermanentApiKey(\n\t\tdbContext: DatabaseContext,\n\t\tprojectId: string,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tdescription: string,\n\t\ttokenHash?: TokenHash,\n\t): Promise<CreateApiKeyResponse> {\n\t\treturn await dbContext.transaction(async db => {\n\t\t\treturn await this.apiKeyService.createProjectPermanentApiKey(db, projectId, memberships, description, tokenHash)\n\t\t})\n\t}\n\n}\n\nexport type VerifyResponse = Response<VerifyResult, VerifyErrorCode>\n\nexport class VerifyResult {\n\treadonly valid = true\n\n\tconstructor(\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly apiKeyId: string,\n\t\tpublic readonly roles: string[],\n\t\tpublic readonly personId: string | null,\n\t) {}\n}\n\nexport const enum VerifyErrorCode {\n\tNOT_FOUND = 'not_found',\n\tDISABLED = 'disabled',\n\tEXPIRED = 'expired',\n\tNO_AUTH_HEADER = 'no_auth_header',\n\tINVALID_AUTH_HEADER = 'invalid_auth_header',\n}\n"],"names":["ApiKeyByTokenQuery","ResponseError","ProlongApiKeyCommand","ResponseOk","CreateApiKeyCommand","ApiKey","ApiKeyByIdQuery","DisableOneOffApiKeyCommand","DisableApiKeyCommand","DisableIdentityApiKeysCommand","VerifyErrorCode"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyManager.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/apiKey/ApiKeyManager.ts"],"sourcesContent":["import {\n\tCreateApiKeyCommand,\n\tDisableApiKeyCommand,\n\tDisableIdentityApiKeysCommand,\n\tDisableOneOffApiKeyCommand,\n\tProlongApiKeyCommand,\n} from '../../commands'\nimport { ApiKey } from '../../type'\n\nimport { Response, ResponseError, ResponseOk } from '../../utils/Response'\nimport { DatabaseContext, TokenHash } from '../../utils'\nimport { ApiKeyService, CreateApiKeyResponse } from './ApiKeyService'\nimport assert from 'node:assert'\nimport { Acl } from '@contember/schema'\nimport { ApiKeyByIdQuery, ApiKeyByTokenQuery, ApiKeyRow } from '../../queries'\n\nexport class ApiKeyManager {\n\tconstructor(\n\t\tprivate readonly apiKeyService: ApiKeyService,\n\t) {}\n\n\tasync verifyAndProlong(\n\t\tdbContext: DatabaseContext,\n\t\treadDbContext: DatabaseContext,\n\t\ttoken: string,\n\t): Promise<VerifyResponse> {\n\t\tconst apiKeyRow = await readDbContext.queryHandler.fetch(new ApiKeyByTokenQuery(token))\n\t\tif (apiKeyRow === null) {\n\t\t\treturn new ResponseError(VerifyErrorCode.NOT_FOUND, 'API key was not found')\n\t\t}\n\n\t\tif (apiKeyRow.disabled_at !== null) {\n\t\t\treturn new ResponseError(\n\t\t\t\tVerifyErrorCode.DISABLED,\n\t\t\t\t`API key was disabled at ${apiKeyRow.disabled_at.toISOString()}`,\n\t\t\t)\n\t\t}\n\n\t\tconst now = new Date()\n\t\tif (apiKeyRow.expires_at !== null && apiKeyRow.expires_at <= now) {\n\t\t\treturn new ResponseError(VerifyErrorCode.DISABLED, `API key expired at ${apiKeyRow.expires_at.toISOString()}`)\n\t\t}\n\n\t\tsetImmediate(async () => {\n\t\t\tawait dbContext.commandBus.execute(\n\t\t\t\tnew ProlongApiKeyCommand(\n\t\t\t\t\tapiKeyRow.id,\n\t\t\t\t\tapiKeyRow.type,\n\t\t\t\t\tapiKeyRow.expiration,\n\t\t\t\t\tapiKeyRow.expires_at,\n\t\t\t\t),\n\t\t\t)\n\t\t})\n\n\t\treturn new ResponseOk(new VerifyResult(apiKeyRow.identity_id, apiKeyRow.id, apiKeyRow.roles, apiKeyRow.person_id))\n\t}\n\n\tasync createSessionApiKey(dbContext: DatabaseContext, identityId: string, expiration?: number): Promise<string> {\n\t\tconst command = new CreateApiKeyCommand({ type: ApiKey.Type.SESSION, identityId, expiration })\n\t\tconst token = (await dbContext.commandBus.execute(command)).token\n\t\tassert(token !== undefined)\n\t\treturn token\n\t}\n\n\n\tasync findApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<ApiKeyRow | null> {\n\t\treturn await dbContext.queryHandler.fetch(\n\t\t\tnew ApiKeyByIdQuery(apiKeyId),\n\t\t)\n\t}\n\n\tasync disableOneOffApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<void> {\n\t\tawait dbContext.commandBus.execute(new DisableOneOffApiKeyCommand(apiKeyId))\n\t}\n\n\tasync disableApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<boolean> {\n\t\treturn await dbContext.commandBus.execute(new DisableApiKeyCommand(apiKeyId))\n\t}\n\n\tasync disableIdentityApiKeys(dbContext: DatabaseContext, identityId: string): Promise<void> {\n\t\tawait dbContext.commandBus.execute(new DisableIdentityApiKeysCommand(identityId))\n\t}\n\n\tasync createGlobalPermanentApiKey(\n\t\tdbContext: DatabaseContext,\n\t\tdescription: string,\n\t\troles: readonly string[],\n\t\ttokenHash?: TokenHash,\n\t): Promise<CreateApiKeyResponse> {\n\t\treturn await dbContext.transaction(async db => {\n\t\t\treturn await this.apiKeyService.createPermanentApiKey(db, description, roles, tokenHash)\n\t\t})\n\t}\n\n\tasync createProjectPermanentApiKey(\n\t\tdbContext: DatabaseContext,\n\t\tprojectId: string,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tdescription: string,\n\t\ttokenHash?: TokenHash,\n\t): Promise<CreateApiKeyResponse> {\n\t\treturn await dbContext.transaction(async db => {\n\t\t\treturn await this.apiKeyService.createProjectPermanentApiKey(db, projectId, memberships, description, tokenHash)\n\t\t})\n\t}\n\n}\n\nexport type VerifyResponse = Response<VerifyResult, VerifyErrorCode>\n\nexport class VerifyResult {\n\treadonly valid = true\n\n\tconstructor(\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly apiKeyId: string,\n\t\tpublic readonly roles: string[],\n\t\tpublic readonly personId: string | null,\n\t) {}\n}\n\nexport const enum VerifyErrorCode {\n\tNOT_FOUND = 'not_found',\n\tDISABLED = 'disabled',\n\tEXPIRED = 'expired',\n\tNO_AUTH_HEADER = 'no_auth_header',\n\tINVALID_AUTH_HEADER = 'invalid_auth_header',\n}\n"],"names":["VerifyErrorCode"],"mappings":";;;;;;;;;;;;;;;;;;;AAgBO,MAAM,cAAc;AAAA,EAC1B,YACkB,eAChB;AADgB,SAAA,gBAAA;AAAA,EACf;AAAA,EAEH,MAAM,iBACL,WACA,eACA,OAC0B;AACpB,UAAA,YAAY,MAAM,cAAc,aAAa,MAAM,IAAI,mBAAmB,KAAK,CAAC;AACtF,QAAI,cAAc,MAAM;AAChB,aAAA,IAAI,cAAc,aAA2B,uBAAuB;AAAA,IAC5E;AAEI,QAAA,UAAU,gBAAgB,MAAM;AACnC,aAAO,IAAI;AAAA,QACV;AAAA,QACA,2BAA2B,UAAU,YAAY,YAAa,CAAA;AAAA,MAAA;AAAA,IAEhE;AAEM,UAAA,0BAAU;AAChB,QAAI,UAAU,eAAe,QAAQ,UAAU,cAAc,KAAK;AAC1D,aAAA,IAAI,cAAc,YAA0B,sBAAsB,UAAU,WAAW,aAAa,EAAE;AAAA,IAC9G;AAEA,iBAAa,YAAY;AACxB,YAAM,UAAU,WAAW;AAAA,QAC1B,IAAI;AAAA,UACH,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU;AAAA,QACX;AAAA,MAAA;AAAA,IACD,CACA;AAED,WAAO,IAAI,WAAW,IAAI,aAAa,UAAU,aAAa,UAAU,IAAI,UAAU,OAAO,UAAU,SAAS,CAAC;AAAA,EAClH;AAAA,EAEA,MAAM,oBAAoB,WAA4B,YAAoB,YAAsC;AACzG,UAAA,UAAU,IAAI,oBAAoB,EAAE,MAAM,OAAO,KAAK,SAAS,YAAY,WAAA,CAAY;AAC7F,UAAM,SAAS,MAAM,UAAU,WAAW,QAAQ,OAAO,GAAG;AAC5D,WAAO,UAAU,MAAS;AACnB,WAAA;AAAA,EACR;AAAA,EAGA,MAAM,WAAW,WAA4B,UAA6C;AAClF,WAAA,MAAM,UAAU,aAAa;AAAA,MACnC,IAAI,gBAAgB,QAAQ;AAAA,IAAA;AAAA,EAE9B;AAAA,EAEA,MAAM,oBAAoB,WAA4B,UAAiC;AACtF,UAAM,UAAU,WAAW,QAAQ,IAAI,2BAA2B,QAAQ,CAAC;AAAA,EAC5E;AAAA,EAEA,MAAM,cAAc,WAA4B,UAAoC;AACnF,WAAO,MAAM,UAAU,WAAW,QAAQ,IAAI,qBAAqB,QAAQ,CAAC;AAAA,EAC7E;AAAA,EAEA,MAAM,uBAAuB,WAA4B,YAAmC;AAC3F,UAAM,UAAU,WAAW,QAAQ,IAAI,8BAA8B,UAAU,CAAC;AAAA,EACjF;AAAA,EAEA,MAAM,4BACL,WACA,aACA,OACA,WACgC;AAChC,WAAO,MAAM,UAAU,YAAY,OAAM,OAAM;AAC9C,aAAO,MAAM,KAAK,cAAc,sBAAsB,IAAI,aAAa,OAAO,SAAS;AAAA,IAAA,CACvF;AAAA,EACF;AAAA,EAEA,MAAM,6BACL,WACA,WACA,aACA,aACA,WACgC;AAChC,WAAO,MAAM,UAAU,YAAY,OAAM,OAAM;AACvC,aAAA,MAAM,KAAK,cAAc,6BAA6B,IAAI,WAAW,aAAa,aAAa,SAAS;AAAA,IAAA,CAC/G;AAAA,EACF;AAED;AAIO,MAAM,aAAa;AAAA,EAGzB,YACiB,YACA,UACA,OACA,UACf;AAJe,SAAA,aAAA;AACA,SAAA,WAAA;AACA,SAAA,QAAA;AACA,SAAA,WAAA;AANjB,kBAAA,MAAS,SAAQ,IAAA;AAAA,EAOd;AACJ;AAEkB,IAAA,oCAAAA,qBAAX;AACNA,mBAAA,WAAY,IAAA;AACZA,mBAAA,UAAW,IAAA;AACXA,mBAAA,SAAU,IAAA;AACVA,mBAAA,gBAAiB,IAAA;AACjBA,mBAAA,qBAAsB,IAAA;AALLA,SAAAA;AAAA,GAAA,mBAAA,CAAA,CAAA;"}
1
+ {"version":3,"file":"ApiKeyManager.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/apiKey/ApiKeyManager.ts"],"sourcesContent":["import {\n\tCreateApiKeyCommand,\n\tDisableApiKeyCommand,\n\tDisableIdentityApiKeysCommand,\n\tDisableOneOffApiKeyCommand,\n\tProlongApiKeyCommand,\n} from '../../commands'\nimport { ApiKey } from '../../type'\n\nimport { Response, ResponseError, ResponseOk } from '../../utils/Response'\nimport { DatabaseContext, TokenHash } from '../../utils'\nimport { ApiKeyService, CreateApiKeyResponse } from './ApiKeyService'\nimport assert from 'node:assert'\nimport { Acl } from '@contember/schema'\nimport { ApiKeyByIdQuery, ApiKeyByTokenQuery, ApiKeyRow } from '../../queries'\n\nexport class ApiKeyManager {\n\tconstructor(\n\t\tprivate readonly apiKeyService: ApiKeyService,\n\t) {}\n\n\tasync verifyAndProlong(\n\t\tdbContext: DatabaseContext,\n\t\treadDbContext: DatabaseContext,\n\t\ttoken: string,\n\t): Promise<VerifyResponse> {\n\t\tconst apiKeyRow = await readDbContext.queryHandler.fetch(new ApiKeyByTokenQuery(token))\n\t\tif (apiKeyRow === null) {\n\t\t\treturn new ResponseError(VerifyErrorCode.NOT_FOUND, 'API key was not found')\n\t\t}\n\n\t\tif (apiKeyRow.disabled_at !== null) {\n\t\t\treturn new ResponseError(\n\t\t\t\tVerifyErrorCode.DISABLED,\n\t\t\t\t`API key was disabled at ${apiKeyRow.disabled_at.toISOString()}`,\n\t\t\t)\n\t\t}\n\n\t\tconst now = new Date()\n\t\tif (apiKeyRow.expires_at !== null && apiKeyRow.expires_at <= now) {\n\t\t\treturn new ResponseError(VerifyErrorCode.DISABLED, `API key expired at ${apiKeyRow.expires_at.toISOString()}`)\n\t\t}\n\n\t\tsetImmediate(async () => {\n\t\t\tawait dbContext.commandBus.execute(\n\t\t\t\tnew ProlongApiKeyCommand(\n\t\t\t\t\tapiKeyRow.id,\n\t\t\t\t\tapiKeyRow.type,\n\t\t\t\t\tapiKeyRow.expiration,\n\t\t\t\t\tapiKeyRow.expires_at,\n\t\t\t\t),\n\t\t\t)\n\t\t})\n\n\t\treturn new ResponseOk(new VerifyResult(apiKeyRow.identity_id, apiKeyRow.id, apiKeyRow.roles, apiKeyRow.person_id))\n\t}\n\n\tasync createSessionApiKey(dbContext: DatabaseContext, identityId: string, expiration?: number): Promise<string> {\n\t\tconst command = new CreateApiKeyCommand({ type: ApiKey.Type.SESSION, identityId, expiration })\n\t\tconst token = (await dbContext.commandBus.execute(command)).token\n\t\tassert(token !== undefined)\n\t\treturn token\n\t}\n\n\n\tasync findApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<ApiKeyRow | null> {\n\t\treturn await dbContext.queryHandler.fetch(\n\t\t\tnew ApiKeyByIdQuery(apiKeyId),\n\t\t)\n\t}\n\n\tasync disableOneOffApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<void> {\n\t\tawait dbContext.commandBus.execute(new DisableOneOffApiKeyCommand(apiKeyId))\n\t}\n\n\tasync disableApiKey(dbContext: DatabaseContext, apiKeyId: string): Promise<boolean> {\n\t\treturn await dbContext.commandBus.execute(new DisableApiKeyCommand(apiKeyId))\n\t}\n\n\tasync disableIdentityApiKeys(dbContext: DatabaseContext, identityId: string): Promise<void> {\n\t\tawait dbContext.commandBus.execute(new DisableIdentityApiKeysCommand(identityId))\n\t}\n\n\tasync createGlobalPermanentApiKey(\n\t\tdbContext: DatabaseContext,\n\t\tdescription: string,\n\t\troles: readonly string[],\n\t\ttokenHash?: TokenHash,\n\t): Promise<CreateApiKeyResponse> {\n\t\treturn await dbContext.transaction(async db => {\n\t\t\treturn await this.apiKeyService.createPermanentApiKey(db, description, roles, tokenHash)\n\t\t})\n\t}\n\n\tasync createProjectPermanentApiKey(\n\t\tdbContext: DatabaseContext,\n\t\tprojectId: string,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tdescription: string,\n\t\ttokenHash?: TokenHash,\n\t): Promise<CreateApiKeyResponse> {\n\t\treturn await dbContext.transaction(async db => {\n\t\t\treturn await this.apiKeyService.createProjectPermanentApiKey(db, projectId, memberships, description, tokenHash)\n\t\t})\n\t}\n\n}\n\nexport type VerifyResponse = Response<VerifyResult, VerifyErrorCode>\n\nexport class VerifyResult {\n\treadonly valid = true\n\n\tconstructor(\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly apiKeyId: string,\n\t\tpublic readonly roles: string[],\n\t\tpublic readonly personId: string | null,\n\t) {}\n}\n\nexport const enum VerifyErrorCode {\n\tNOT_FOUND = 'not_found',\n\tDISABLED = 'disabled',\n\tEXPIRED = 'expired',\n\tNO_AUTH_HEADER = 'no_auth_header',\n\tINVALID_AUTH_HEADER = 'invalid_auth_header',\n}\n"],"names":["VerifyErrorCode"],"mappings":";;;;;;;;;;;;;;;;;;;AAgBO,MAAM,cAAc;AAAA,EAC1B,YACkB,eAChB;AADgB,SAAA,gBAAA;AAAA,EAAA;AAAA,EAGlB,MAAM,iBACL,WACA,eACA,OAC0B;AACpB,UAAA,YAAY,MAAM,cAAc,aAAa,MAAM,IAAI,mBAAmB,KAAK,CAAC;AACtF,QAAI,cAAc,MAAM;AAChB,aAAA,IAAI,cAAc,aAA2B,uBAAuB;AAAA,IAAA;AAGxE,QAAA,UAAU,gBAAgB,MAAM;AACnC,aAAO,IAAI;AAAA,QACV;AAAA,QACA,2BAA2B,UAAU,YAAY,YAAA,CAAa;AAAA,MAC/D;AAAA,IAAA;AAGK,UAAA,0BAAU,KAAK;AACrB,QAAI,UAAU,eAAe,QAAQ,UAAU,cAAc,KAAK;AAC1D,aAAA,IAAI,cAAc,YAA0B,sBAAsB,UAAU,WAAW,YAAa,CAAA,EAAE;AAAA,IAAA;AAG9G,iBAAa,YAAY;AACxB,YAAM,UAAU,WAAW;AAAA,QAC1B,IAAI;AAAA,UACH,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU;AAAA,QAAA;AAAA,MAEZ;AAAA,IAAA,CACA;AAED,WAAO,IAAI,WAAW,IAAI,aAAa,UAAU,aAAa,UAAU,IAAI,UAAU,OAAO,UAAU,SAAS,CAAC;AAAA,EAAA;AAAA,EAGlH,MAAM,oBAAoB,WAA4B,YAAoB,YAAsC;AACzG,UAAA,UAAU,IAAI,oBAAoB,EAAE,MAAM,OAAO,KAAK,SAAS,YAAY,YAAY;AAC7F,UAAM,SAAS,MAAM,UAAU,WAAW,QAAQ,OAAO,GAAG;AAC5D,WAAO,UAAU,MAAS;AACnB,WAAA;AAAA,EAAA;AAAA,EAIR,MAAM,WAAW,WAA4B,UAA6C;AAClF,WAAA,MAAM,UAAU,aAAa;AAAA,MACnC,IAAI,gBAAgB,QAAQ;AAAA,IAC7B;AAAA,EAAA;AAAA,EAGD,MAAM,oBAAoB,WAA4B,UAAiC;AACtF,UAAM,UAAU,WAAW,QAAQ,IAAI,2BAA2B,QAAQ,CAAC;AAAA,EAAA;AAAA,EAG5E,MAAM,cAAc,WAA4B,UAAoC;AACnF,WAAO,MAAM,UAAU,WAAW,QAAQ,IAAI,qBAAqB,QAAQ,CAAC;AAAA,EAAA;AAAA,EAG7E,MAAM,uBAAuB,WAA4B,YAAmC;AAC3F,UAAM,UAAU,WAAW,QAAQ,IAAI,8BAA8B,UAAU,CAAC;AAAA,EAAA;AAAA,EAGjF,MAAM,4BACL,WACA,aACA,OACA,WACgC;AAChC,WAAO,MAAM,UAAU,YAAY,OAAM,OAAM;AAC9C,aAAO,MAAM,KAAK,cAAc,sBAAsB,IAAI,aAAa,OAAO,SAAS;AAAA,IAAA,CACvF;AAAA,EAAA;AAAA,EAGF,MAAM,6BACL,WACA,WACA,aACA,aACA,WACgC;AAChC,WAAO,MAAM,UAAU,YAAY,OAAM,OAAM;AACvC,aAAA,MAAM,KAAK,cAAc,6BAA6B,IAAI,WAAW,aAAa,aAAa,SAAS;AAAA,IAAA,CAC/G;AAAA,EAAA;AAGH;AAIO,MAAM,aAAa;AAAA,EAGzB,YACiB,YACA,UACA,OACA,UACf;AAJe,SAAA,aAAA;AACA,SAAA,WAAA;AACA,SAAA,QAAA;AACA,SAAA,WAAA;AANjB,kBAAA,MAAS,SAAQ,IAAA;AAAA,EAAA;AAQlB;AAEkB,IAAA,oCAAAA,qBAAX;AACNA,mBAAA,WAAY,IAAA;AACZA,mBAAA,UAAW,IAAA;AACXA,mBAAA,SAAU,IAAA;AACVA,mBAAA,gBAAiB,IAAA;AACjBA,mBAAA,qBAAsB,IAAA;AALLA,SAAAA;AAAA,GAAA,mBAAA,CAAA,CAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyService.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/apiKey/ApiKeyService.ts"],"sourcesContent":["import { DatabaseContext, TokenHash } from '../../utils'\nimport { AddProjectMemberCommand, CreateApiKeyCommand, CreateIdentityCommand } from '../../commands'\nimport { ApiKey } from '../../type'\nimport { createSetMembershipVariables } from '../membershipUtils'\nimport { ImplementationException } from '../../../exceptions'\nimport { Response, ResponseOk } from '../../utils/Response'\nimport { ApiKeyWithToken } from '../../../schema'\nimport { Acl } from '@contember/schema'\n\nexport class ApiKeyService {\n\tasync createPermanentApiKey(\n\t\tdb: DatabaseContext,\n\t\tdescription: string,\n\t\troles: readonly string[] = [],\n\t\ttokenHash?: TokenHash,\n\t) {\n\t\tconst identityId = await db.commandBus.execute(new CreateIdentityCommand(roles, description))\n\t\tconst apiKeyResult = await db.commandBus.execute(new CreateApiKeyCommand({ type: ApiKey.Type.PERMANENT, identityId, tokenHash }))\n\n\t\treturn new ResponseOk(new CreateApiKeyResult({ id: identityId, description }, apiKeyResult))\n\t}\n\n\tasync createProjectPermanentApiKey(\n\t\tdb: DatabaseContext,\n\t\tprojectId: string,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tdescription: string,\n\t\ttokenHash?: TokenHash,\n\t) {\n\t\tconst response = await this.createPermanentApiKey(db, description, [], tokenHash)\n\n\t\tconst addMemberResult = await db.commandBus.execute(\n\t\t\tnew AddProjectMemberCommand(projectId, response.result.identity.id, createSetMembershipVariables(memberships)),\n\t\t)\n\t\tif (!addMemberResult.ok) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn response\n\t}\n}\n\n\nexport type CreateApiKeyResponse = Response<CreateApiKeyResult, never>\n\nexport class CreateApiKeyResult {\n\tconstructor(public readonly identity: {id: string; description?: string}, public readonly apiKey: { id: string; token?: string }) {\n\t}\n\n\ttoApiKeyWithToken(): ApiKeyWithToken {\n\t\treturn {\n\t\t\tid: this.apiKey.id,\n\t\t\ttoken: this.apiKey.token,\n\t\t\tidentity: {\n\t\t\t\t...this.identity,\n\t\t\t\tprojects: [],\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["CreateIdentityCommand","CreateApiKeyCommand","ApiKey","ResponseOk","AddProjectMemberCommand","createSetMembershipVariables","ImplementationException"],"mappings":";;;;;;;;;;;AASO,MAAM,cAAc;AAAA,EAC1B,MAAM,sBACL,IACA,aACA,QAA2B,CAAA,GAC3B,WACC;AACK,UAAA,aAAa,MAAM,GAAG,WAAW,QAAQ,IAAIA,4CAAsB,OAAO,WAAW,CAAC;AAC5F,UAAM,eAAe,MAAM,GAAG,WAAW,QAAQ,IAAIC,oBAAAA,oBAAoB,EAAE,MAAMC,cAAO,KAAK,WAAW,YAAY,UAAA,CAAW,CAAC;AAEzH,WAAA,IAAIC,SAAAA,WAAW,IAAI,mBAAmB,EAAE,IAAI,YAAY,YAAA,GAAe,YAAY,CAAC;AAAA,EAC5F;AAAA,EAEA,MAAM,6BACL,IACA,WACA,aACA,aACA,WACC;AACK,UAAA,WAAW,MAAM,KAAK,sBAAsB,IAAI,aAAa,CAAA,GAAI,SAAS;AAE1E,UAAA,kBAAkB,MAAM,GAAG,WAAW;AAAA,MAC3C,IAAIC,gDAAwB,WAAW,SAAS,OAAO,SAAS,IAAIC,6CAA6B,WAAW,CAAC;AAAA,IAAA;AAE1G,QAAA,CAAC,gBAAgB,IAAI;AACxB,YAAM,IAAIC,WAAwB,wBAAA;AAAA,IACnC;AACO,WAAA;AAAA,EACR;AACD;AAKO,MAAM,mBAAmB;AAAA,EAC/B,YAA4B,UAA8D,QAAwC;AAAtG,SAAA,WAAA;AAA8D,SAAA,SAAA;AAAA,EAC1F;AAAA,EAEA,oBAAqC;AAC7B,WAAA;AAAA,MACN,IAAI,KAAK,OAAO;AAAA,MAChB,OAAO,KAAK,OAAO;AAAA,MACnB,UAAU;AAAA,QACT,GAAG,KAAK;AAAA,QACR,UAAU,CAAC;AAAA,MACZ;AAAA,IAAA;AAAA,EAEF;AACD;;;"}
1
+ {"version":3,"file":"ApiKeyService.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/apiKey/ApiKeyService.ts"],"sourcesContent":["import { DatabaseContext, TokenHash } from '../../utils'\nimport { AddProjectMemberCommand, CreateApiKeyCommand, CreateIdentityCommand } from '../../commands'\nimport { ApiKey } from '../../type'\nimport { createSetMembershipVariables } from '../membershipUtils'\nimport { ImplementationException } from '../../../exceptions'\nimport { Response, ResponseOk } from '../../utils/Response'\nimport { ApiKeyWithToken } from '../../../schema'\nimport { Acl } from '@contember/schema'\n\nexport class ApiKeyService {\n\tasync createPermanentApiKey(\n\t\tdb: DatabaseContext,\n\t\tdescription: string,\n\t\troles: readonly string[] = [],\n\t\ttokenHash?: TokenHash,\n\t) {\n\t\tconst identityId = await db.commandBus.execute(new CreateIdentityCommand(roles, description))\n\t\tconst apiKeyResult = await db.commandBus.execute(new CreateApiKeyCommand({ type: ApiKey.Type.PERMANENT, identityId, tokenHash }))\n\n\t\treturn new ResponseOk(new CreateApiKeyResult({ id: identityId, description }, apiKeyResult))\n\t}\n\n\tasync createProjectPermanentApiKey(\n\t\tdb: DatabaseContext,\n\t\tprojectId: string,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tdescription: string,\n\t\ttokenHash?: TokenHash,\n\t) {\n\t\tconst response = await this.createPermanentApiKey(db, description, [], tokenHash)\n\n\t\tconst addMemberResult = await db.commandBus.execute(\n\t\t\tnew AddProjectMemberCommand(projectId, response.result.identity.id, createSetMembershipVariables(memberships)),\n\t\t)\n\t\tif (!addMemberResult.ok) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn response\n\t}\n}\n\n\nexport type CreateApiKeyResponse = Response<CreateApiKeyResult, never>\n\nexport class CreateApiKeyResult {\n\tconstructor(public readonly identity: {id: string; description?: string}, public readonly apiKey: { id: string; token?: string }) {\n\t}\n\n\ttoApiKeyWithToken(): ApiKeyWithToken {\n\t\treturn {\n\t\t\tid: this.apiKey.id,\n\t\t\ttoken: this.apiKey.token,\n\t\t\tidentity: {\n\t\t\t\t...this.identity,\n\t\t\t\tprojects: [],\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["CreateIdentityCommand","CreateApiKeyCommand","ApiKey","ResponseOk","AddProjectMemberCommand","createSetMembershipVariables","ImplementationException"],"mappings":";;;;;;;;;;;AASO,MAAM,cAAc;AAAA,EAC1B,MAAM,sBACL,IACA,aACA,QAA2B,CAAA,GAC3B,WACC;AACK,UAAA,aAAa,MAAM,GAAG,WAAW,QAAQ,IAAIA,sBAAA,sBAAsB,OAAO,WAAW,CAAC;AAC5F,UAAM,eAAe,MAAM,GAAG,WAAW,QAAQ,IAAIC,oBAAA,oBAAoB,EAAE,MAAMC,OAAAA,OAAO,KAAK,WAAW,YAAY,UAAW,CAAA,CAAC;AAEzH,WAAA,IAAIC,SAAAA,WAAW,IAAI,mBAAmB,EAAE,IAAI,YAAY,eAAe,YAAY,CAAC;AAAA,EAAA;AAAA,EAG5F,MAAM,6BACL,IACA,WACA,aACA,aACA,WACC;AACK,UAAA,WAAW,MAAM,KAAK,sBAAsB,IAAI,aAAa,IAAI,SAAS;AAE1E,UAAA,kBAAkB,MAAM,GAAG,WAAW;AAAA,MAC3C,IAAIC,gDAAwB,WAAW,SAAS,OAAO,SAAS,IAAIC,gBAA6B,6BAAA,WAAW,CAAC;AAAA,IAC9G;AACI,QAAA,CAAC,gBAAgB,IAAI;AACxB,YAAM,IAAIC,WAAAA,wBAAwB;AAAA,IAAA;AAE5B,WAAA;AAAA,EAAA;AAET;AAKO,MAAM,mBAAmB;AAAA,EAC/B,YAA4B,UAA8D,QAAwC;AAAtG,SAAA,WAAA;AAA8D,SAAA,SAAA;AAAA,EAAA;AAAA,EAG1F,oBAAqC;AAC7B,WAAA;AAAA,MACN,IAAI,KAAK,OAAO;AAAA,MAChB,OAAO,KAAK,OAAO;AAAA,MACnB,UAAU;AAAA,QACT,GAAG,KAAK;AAAA,QACR,UAAU,CAAA;AAAA,MAAC;AAAA,IAEb;AAAA,EAAA;AAEF;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyService.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/apiKey/ApiKeyService.ts"],"sourcesContent":["import { DatabaseContext, TokenHash } from '../../utils'\nimport { AddProjectMemberCommand, CreateApiKeyCommand, CreateIdentityCommand } from '../../commands'\nimport { ApiKey } from '../../type'\nimport { createSetMembershipVariables } from '../membershipUtils'\nimport { ImplementationException } from '../../../exceptions'\nimport { Response, ResponseOk } from '../../utils/Response'\nimport { ApiKeyWithToken } from '../../../schema'\nimport { Acl } from '@contember/schema'\n\nexport class ApiKeyService {\n\tasync createPermanentApiKey(\n\t\tdb: DatabaseContext,\n\t\tdescription: string,\n\t\troles: readonly string[] = [],\n\t\ttokenHash?: TokenHash,\n\t) {\n\t\tconst identityId = await db.commandBus.execute(new CreateIdentityCommand(roles, description))\n\t\tconst apiKeyResult = await db.commandBus.execute(new CreateApiKeyCommand({ type: ApiKey.Type.PERMANENT, identityId, tokenHash }))\n\n\t\treturn new ResponseOk(new CreateApiKeyResult({ id: identityId, description }, apiKeyResult))\n\t}\n\n\tasync createProjectPermanentApiKey(\n\t\tdb: DatabaseContext,\n\t\tprojectId: string,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tdescription: string,\n\t\ttokenHash?: TokenHash,\n\t) {\n\t\tconst response = await this.createPermanentApiKey(db, description, [], tokenHash)\n\n\t\tconst addMemberResult = await db.commandBus.execute(\n\t\t\tnew AddProjectMemberCommand(projectId, response.result.identity.id, createSetMembershipVariables(memberships)),\n\t\t)\n\t\tif (!addMemberResult.ok) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn response\n\t}\n}\n\n\nexport type CreateApiKeyResponse = Response<CreateApiKeyResult, never>\n\nexport class CreateApiKeyResult {\n\tconstructor(public readonly identity: {id: string; description?: string}, public readonly apiKey: { id: string; token?: string }) {\n\t}\n\n\ttoApiKeyWithToken(): ApiKeyWithToken {\n\t\treturn {\n\t\t\tid: this.apiKey.id,\n\t\t\ttoken: this.apiKey.token,\n\t\t\tidentity: {\n\t\t\t\t...this.identity,\n\t\t\t\tprojects: [],\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;AASO,MAAM,cAAc;AAAA,EAC1B,MAAM,sBACL,IACA,aACA,QAA2B,CAAA,GAC3B,WACC;AACK,UAAA,aAAa,MAAM,GAAG,WAAW,QAAQ,IAAI,sBAAsB,OAAO,WAAW,CAAC;AAC5F,UAAM,eAAe,MAAM,GAAG,WAAW,QAAQ,IAAI,oBAAoB,EAAE,MAAM,OAAO,KAAK,WAAW,YAAY,UAAA,CAAW,CAAC;AAEzH,WAAA,IAAI,WAAW,IAAI,mBAAmB,EAAE,IAAI,YAAY,YAAA,GAAe,YAAY,CAAC;AAAA,EAC5F;AAAA,EAEA,MAAM,6BACL,IACA,WACA,aACA,aACA,WACC;AACK,UAAA,WAAW,MAAM,KAAK,sBAAsB,IAAI,aAAa,CAAA,GAAI,SAAS;AAE1E,UAAA,kBAAkB,MAAM,GAAG,WAAW;AAAA,MAC3C,IAAI,wBAAwB,WAAW,SAAS,OAAO,SAAS,IAAI,6BAA6B,WAAW,CAAC;AAAA,IAAA;AAE1G,QAAA,CAAC,gBAAgB,IAAI;AACxB,YAAM,IAAI,wBAAwB;AAAA,IACnC;AACO,WAAA;AAAA,EACR;AACD;AAKO,MAAM,mBAAmB;AAAA,EAC/B,YAA4B,UAA8D,QAAwC;AAAtG,SAAA,WAAA;AAA8D,SAAA,SAAA;AAAA,EAC1F;AAAA,EAEA,oBAAqC;AAC7B,WAAA;AAAA,MACN,IAAI,KAAK,OAAO;AAAA,MAChB,OAAO,KAAK,OAAO;AAAA,MACnB,UAAU;AAAA,QACT,GAAG,KAAK;AAAA,QACR,UAAU,CAAC;AAAA,MACZ;AAAA,IAAA;AAAA,EAEF;AACD;"}
1
+ {"version":3,"file":"ApiKeyService.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/apiKey/ApiKeyService.ts"],"sourcesContent":["import { DatabaseContext, TokenHash } from '../../utils'\nimport { AddProjectMemberCommand, CreateApiKeyCommand, CreateIdentityCommand } from '../../commands'\nimport { ApiKey } from '../../type'\nimport { createSetMembershipVariables } from '../membershipUtils'\nimport { ImplementationException } from '../../../exceptions'\nimport { Response, ResponseOk } from '../../utils/Response'\nimport { ApiKeyWithToken } from '../../../schema'\nimport { Acl } from '@contember/schema'\n\nexport class ApiKeyService {\n\tasync createPermanentApiKey(\n\t\tdb: DatabaseContext,\n\t\tdescription: string,\n\t\troles: readonly string[] = [],\n\t\ttokenHash?: TokenHash,\n\t) {\n\t\tconst identityId = await db.commandBus.execute(new CreateIdentityCommand(roles, description))\n\t\tconst apiKeyResult = await db.commandBus.execute(new CreateApiKeyCommand({ type: ApiKey.Type.PERMANENT, identityId, tokenHash }))\n\n\t\treturn new ResponseOk(new CreateApiKeyResult({ id: identityId, description }, apiKeyResult))\n\t}\n\n\tasync createProjectPermanentApiKey(\n\t\tdb: DatabaseContext,\n\t\tprojectId: string,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tdescription: string,\n\t\ttokenHash?: TokenHash,\n\t) {\n\t\tconst response = await this.createPermanentApiKey(db, description, [], tokenHash)\n\n\t\tconst addMemberResult = await db.commandBus.execute(\n\t\t\tnew AddProjectMemberCommand(projectId, response.result.identity.id, createSetMembershipVariables(memberships)),\n\t\t)\n\t\tif (!addMemberResult.ok) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn response\n\t}\n}\n\n\nexport type CreateApiKeyResponse = Response<CreateApiKeyResult, never>\n\nexport class CreateApiKeyResult {\n\tconstructor(public readonly identity: {id: string; description?: string}, public readonly apiKey: { id: string; token?: string }) {\n\t}\n\n\ttoApiKeyWithToken(): ApiKeyWithToken {\n\t\treturn {\n\t\t\tid: this.apiKey.id,\n\t\t\ttoken: this.apiKey.token,\n\t\t\tidentity: {\n\t\t\t\t...this.identity,\n\t\t\t\tprojects: [],\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;AASO,MAAM,cAAc;AAAA,EAC1B,MAAM,sBACL,IACA,aACA,QAA2B,CAAA,GAC3B,WACC;AACK,UAAA,aAAa,MAAM,GAAG,WAAW,QAAQ,IAAI,sBAAsB,OAAO,WAAW,CAAC;AAC5F,UAAM,eAAe,MAAM,GAAG,WAAW,QAAQ,IAAI,oBAAoB,EAAE,MAAM,OAAO,KAAK,WAAW,YAAY,UAAW,CAAA,CAAC;AAEzH,WAAA,IAAI,WAAW,IAAI,mBAAmB,EAAE,IAAI,YAAY,eAAe,YAAY,CAAC;AAAA,EAAA;AAAA,EAG5F,MAAM,6BACL,IACA,WACA,aACA,aACA,WACC;AACK,UAAA,WAAW,MAAM,KAAK,sBAAsB,IAAI,aAAa,IAAI,SAAS;AAE1E,UAAA,kBAAkB,MAAM,GAAG,WAAW;AAAA,MAC3C,IAAI,wBAAwB,WAAW,SAAS,OAAO,SAAS,IAAI,6BAA6B,WAAW,CAAC;AAAA,IAC9G;AACI,QAAA,CAAC,gBAAgB,IAAI;AACxB,YAAM,IAAI,wBAAwB;AAAA,IAAA;AAE5B,WAAA;AAAA,EAAA;AAET;AAKO,MAAM,mBAAmB;AAAA,EAC/B,YAA4B,UAA8D,QAAwC;AAAtG,SAAA,WAAA;AAA8D,SAAA,SAAA;AAAA,EAAA;AAAA,EAG1F,oBAAqC;AAC7B,WAAA;AAAA,MACN,IAAI,KAAK,OAAO;AAAA,MAChB,OAAO,KAAK,OAAO;AAAA,MACnB,UAAU;AAAA,QACT,GAAG,KAAK;AAAA,QACR,UAAU,CAAA;AAAA,MAAC;AAAA,IAEb;AAAA,EAAA;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"getPreferredProject.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/helpers/getPreferredProject.ts"],"sourcesContent":["import { Project } from '../../type'\n\nexport const getPreferredProject = (projects: Project[], preferredProjectSlug: string | null): Project | null => {\n\tif (projects.length === 1) {\n\t\treturn projects[0]\n\t}\n\tif (preferredProjectSlug) {\n\t\treturn projects.find(it => it.slug === preferredProjectSlug) || null\n\t}\n\treturn null\n}\n"],"names":[],"mappings":";;AAEa,MAAA,sBAAsB,CAAC,UAAqB,yBAAwD;AAC5G,MAAA,SAAS,WAAW,GAAG;AAC1B,WAAO,SAAS,CAAC;AAAA,EAClB;AACA,MAAI,sBAAsB;AACzB,WAAO,SAAS,KAAK,CAAA,OAAM,GAAG,SAAS,oBAAoB,KAAK;AAAA,EACjE;AACO,SAAA;AACR;;"}
1
+ {"version":3,"file":"getPreferredProject.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/helpers/getPreferredProject.ts"],"sourcesContent":["import { Project } from '../../type'\n\nexport const getPreferredProject = (projects: Project[], preferredProjectSlug: string | null): Project | null => {\n\tif (projects.length === 1) {\n\t\treturn projects[0]\n\t}\n\tif (preferredProjectSlug) {\n\t\treturn projects.find(it => it.slug === preferredProjectSlug) || null\n\t}\n\treturn null\n}\n"],"names":[],"mappings":";;AAEa,MAAA,sBAAsB,CAAC,UAAqB,yBAAwD;AAC5G,MAAA,SAAS,WAAW,GAAG;AAC1B,WAAO,SAAS,CAAC;AAAA,EAAA;AAElB,MAAI,sBAAsB;AACzB,WAAO,SAAS,KAAK,CAAA,OAAM,GAAG,SAAS,oBAAoB,KAAK;AAAA,EAAA;AAE1D,SAAA;AACR;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"getPreferredProject.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/helpers/getPreferredProject.ts"],"sourcesContent":["import { Project } from '../../type'\n\nexport const getPreferredProject = (projects: Project[], preferredProjectSlug: string | null): Project | null => {\n\tif (projects.length === 1) {\n\t\treturn projects[0]\n\t}\n\tif (preferredProjectSlug) {\n\t\treturn projects.find(it => it.slug === preferredProjectSlug) || null\n\t}\n\treturn null\n}\n"],"names":[],"mappings":"AAEa,MAAA,sBAAsB,CAAC,UAAqB,yBAAwD;AAC5G,MAAA,SAAS,WAAW,GAAG;AAC1B,WAAO,SAAS,CAAC;AAAA,EAClB;AACA,MAAI,sBAAsB;AACzB,WAAO,SAAS,KAAK,CAAA,OAAM,GAAG,SAAS,oBAAoB,KAAK;AAAA,EACjE;AACO,SAAA;AACR;"}
1
+ {"version":3,"file":"getPreferredProject.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/helpers/getPreferredProject.ts"],"sourcesContent":["import { Project } from '../../type'\n\nexport const getPreferredProject = (projects: Project[], preferredProjectSlug: string | null): Project | null => {\n\tif (projects.length === 1) {\n\t\treturn projects[0]\n\t}\n\tif (preferredProjectSlug) {\n\t\treturn projects.find(it => it.slug === preferredProjectSlug) || null\n\t}\n\treturn null\n}\n"],"names":[],"mappings":"AAEa,MAAA,sBAAsB,CAAC,UAAqB,yBAAwD;AAC5G,MAAA,SAAS,WAAW,GAAG;AAC1B,WAAO,SAAS,CAAC;AAAA,EAAA;AAElB,MAAI,sBAAsB;AACzB,WAAO,SAAS,KAAK,CAAA,OAAM,GAAG,SAAS,oBAAoB,KAAK;AAAA,EAAA;AAE1D,SAAA;AACR;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IDPHandlerRegistry.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPHandlerRegistry.ts"],"sourcesContent":["import { IdentityProviderHandler } from './IdentityProviderHandler'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError'\n\nexport class IDPHandlerRegistry {\n\tprivate providers: Record<string, IdentityProviderHandler<any>> = {}\n\n\tpublic registerHandler(type: string, provider: IdentityProviderHandler<any>): void {\n\t\tthis.providers[type] = provider\n\t}\n\n\tpublic getHandlerOrNull(type: string): IdentityProviderHandler<{}> | null {\n\t\treturn this.providers[type] ?? null\n\t}\n\n\tpublic getHandler(type: string): IdentityProviderHandler<{}> {\n\t\tconst provider = this.providers[type]\n\t\tif (!provider) {\n\t\t\tthrow new IdentityProviderNotFoundError(`Identity provider handler ${type} not found`)\n\t\t}\n\t\treturn provider\n\t}\n}\n"],"names":["IdentityProviderNotFoundError"],"mappings":";;;;;;AAGO,MAAM,mBAAmB;AAAA,EAAzB,cAAA;AACN,kBAAA,MAAQ,aAA0D,CAAA,CAAC;AAAA,EAAA;AAAA,EAE5D,gBAAgB,MAAc,UAA8C;AAC7E,SAAA,UAAU,IAAI,IAAI;AAAA,EACxB;AAAA,EAEO,iBAAiB,MAAkD;AAClE,WAAA,KAAK,UAAU,IAAI,KAAK;AAAA,EAChC;AAAA,EAEO,WAAW,MAA2C;AACtD,UAAA,WAAW,KAAK,UAAU,IAAI;AACpC,QAAI,CAAC,UAAU;AACd,YAAM,IAAIA,8BAAA,8BAA8B,6BAA6B,IAAI,YAAY;AAAA,IACtF;AACO,WAAA;AAAA,EACR;AACD;;"}
1
+ {"version":3,"file":"IDPHandlerRegistry.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPHandlerRegistry.ts"],"sourcesContent":["import { IdentityProviderHandler } from './IdentityProviderHandler'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError'\n\nexport class IDPHandlerRegistry {\n\tprivate providers: Record<string, IdentityProviderHandler<any>> = {}\n\n\tpublic registerHandler(type: string, provider: IdentityProviderHandler<any>): void {\n\t\tthis.providers[type] = provider\n\t}\n\n\tpublic getHandlerOrNull(type: string): IdentityProviderHandler<{}> | null {\n\t\treturn this.providers[type] ?? null\n\t}\n\n\tpublic getHandler(type: string): IdentityProviderHandler<{}> {\n\t\tconst provider = this.providers[type]\n\t\tif (!provider) {\n\t\t\tthrow new IdentityProviderNotFoundError(`Identity provider handler ${type} not found`)\n\t\t}\n\t\treturn provider\n\t}\n}\n"],"names":["IdentityProviderNotFoundError"],"mappings":";;;;;;AAGO,MAAM,mBAAmB;AAAA,EAAzB,cAAA;AACN,kBAAA,MAAQ,aAA0D,EAAC;AAAA,EAAA;AAAA,EAE5D,gBAAgB,MAAc,UAA8C;AAC7E,SAAA,UAAU,IAAI,IAAI;AAAA,EAAA;AAAA,EAGjB,iBAAiB,MAAkD;AAClE,WAAA,KAAK,UAAU,IAAI,KAAK;AAAA,EAAA;AAAA,EAGzB,WAAW,MAA2C;AACtD,UAAA,WAAW,KAAK,UAAU,IAAI;AACpC,QAAI,CAAC,UAAU;AACd,YAAM,IAAIA,8BAAAA,8BAA8B,6BAA6B,IAAI,YAAY;AAAA,IAAA;AAE/E,WAAA;AAAA,EAAA;AAET;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IDPHandlerRegistry.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPHandlerRegistry.ts"],"sourcesContent":["import { IdentityProviderHandler } from './IdentityProviderHandler'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError'\n\nexport class IDPHandlerRegistry {\n\tprivate providers: Record<string, IdentityProviderHandler<any>> = {}\n\n\tpublic registerHandler(type: string, provider: IdentityProviderHandler<any>): void {\n\t\tthis.providers[type] = provider\n\t}\n\n\tpublic getHandlerOrNull(type: string): IdentityProviderHandler<{}> | null {\n\t\treturn this.providers[type] ?? null\n\t}\n\n\tpublic getHandler(type: string): IdentityProviderHandler<{}> {\n\t\tconst provider = this.providers[type]\n\t\tif (!provider) {\n\t\t\tthrow new IdentityProviderNotFoundError(`Identity provider handler ${type} not found`)\n\t\t}\n\t\treturn provider\n\t}\n}\n"],"names":[],"mappings":";;;;AAGO,MAAM,mBAAmB;AAAA,EAAzB,cAAA;AACN,kBAAA,MAAQ,aAA0D,CAAA,CAAC;AAAA,EAAA;AAAA,EAE5D,gBAAgB,MAAc,UAA8C;AAC7E,SAAA,UAAU,IAAI,IAAI;AAAA,EACxB;AAAA,EAEO,iBAAiB,MAAkD;AAClE,WAAA,KAAK,UAAU,IAAI,KAAK;AAAA,EAChC;AAAA,EAEO,WAAW,MAA2C;AACtD,UAAA,WAAW,KAAK,UAAU,IAAI;AACpC,QAAI,CAAC,UAAU;AACd,YAAM,IAAI,8BAA8B,6BAA6B,IAAI,YAAY;AAAA,IACtF;AACO,WAAA;AAAA,EACR;AACD;"}
1
+ {"version":3,"file":"IDPHandlerRegistry.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPHandlerRegistry.ts"],"sourcesContent":["import { IdentityProviderHandler } from './IdentityProviderHandler'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError'\n\nexport class IDPHandlerRegistry {\n\tprivate providers: Record<string, IdentityProviderHandler<any>> = {}\n\n\tpublic registerHandler(type: string, provider: IdentityProviderHandler<any>): void {\n\t\tthis.providers[type] = provider\n\t}\n\n\tpublic getHandlerOrNull(type: string): IdentityProviderHandler<{}> | null {\n\t\treturn this.providers[type] ?? null\n\t}\n\n\tpublic getHandler(type: string): IdentityProviderHandler<{}> {\n\t\tconst provider = this.providers[type]\n\t\tif (!provider) {\n\t\t\tthrow new IdentityProviderNotFoundError(`Identity provider handler ${type} not found`)\n\t\t}\n\t\treturn provider\n\t}\n}\n"],"names":[],"mappings":";;;;AAGO,MAAM,mBAAmB;AAAA,EAAzB,cAAA;AACN,kBAAA,MAAQ,aAA0D,EAAC;AAAA,EAAA;AAAA,EAE5D,gBAAgB,MAAc,UAA8C;AAC7E,SAAA,UAAU,IAAI,IAAI;AAAA,EAAA;AAAA,EAGjB,iBAAiB,MAAkD;AAClE,WAAA,KAAK,UAAU,IAAI,KAAK;AAAA,EAAA;AAAA,EAGzB,WAAW,MAA2C;AACtD,UAAA,WAAW,KAAK,UAAU,IAAI;AACpC,QAAI,CAAC,UAAU;AACd,YAAM,IAAI,8BAA8B,6BAA6B,IAAI,YAAY;AAAA,IAAA;AAE/E,WAAA;AAAA,EAAA;AAET;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IDPManager.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPManager.ts"],"sourcesContent":["import { Response, ResponseError, ResponseOk } from '../../utils/Response'\nimport { AddIdpErrorCode, DisableIdpErrorCode, EnableIdpErrorCode, UpdateIdpErrorCode } from '../../../schema'\nimport { DatabaseContext } from '../../utils'\nimport { IdentityProviderData } from '../../type'\nimport { IdentityProviderBySlugQuery, IdentityProvidersQuery } from '../../queries'\nimport { CreateIdpCommand } from '../../commands/idp/CreateIdpCommand'\nimport { IDPHandlerRegistry } from './IDPHandlerRegistry'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError'\nimport { InvalidIDPConfigurationError } from './InvalidIDPConfigurationError'\nimport { DisableIdpCommand } from '../../commands/idp/DisableIdpCommand'\nimport { EnableIdpCommand } from '../../commands/idp/EnableIdpCommand'\nimport { UpdateIdpCommand, UpdateIdpData } from '../../commands/idp/UpdateIdpCommand'\nimport { IdentityProviderDto } from '../../queries/idp/types'\n\nexport class IDPManager {\n\tconstructor(\n\t\tprivate readonly idpRegistry: IDPHandlerRegistry,\n\t) {\n\t}\n\n\tpublic async addIDP(db: DatabaseContext, idp: IdentityProviderData): Promise<RegisterIDPResponse> {\n\t\treturn await db.transaction(async (db): Promise<RegisterIDPResponse> => {\n\t\t\ttry {\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(idp.type)\n\t\t\t\tproviderService.validateConfiguration(idp.configuration)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof IdentityProviderNotFoundError) {\n\t\t\t\t\treturn new ResponseError('UNKNOWN_TYPE', `IDP type ${idp.type} not found`)\n\t\t\t\t}\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(idp.slug))\n\t\t\tif (existing) {\n\t\t\t\treturn new ResponseError('ALREADY_EXISTS', `IDP with slug ${idp.slug} already exists`)\n\t\t\t}\n\t\t\tawait db.commandBus.execute(new CreateIdpCommand(idp))\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async disableIDP(db: DatabaseContext, slug: string): Promise<DisableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (!existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new DisableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\n\tpublic async enableIDP(db: DatabaseContext, slug: string): Promise<EnableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new EnableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async updateIDP(db: DatabaseContext, slug: string, data: UpdateIdpData, mergeConfiguration: boolean): Promise<UpdateIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\n\t\t\tconst newConfiguration = (() => {\n\t\t\t\tif (!data.configuration) {\n\t\t\t\t\treturn existing.configuration\n\t\t\t\t}\n\t\t\t\tif (!mergeConfiguration) {\n\t\t\t\t\treturn data.configuration\n\t\t\t\t}\n\n\t\t\t\tconst newConfiguration = { ...existing.configuration }\n\t\t\t\tfor (const [key, value] of Object.entries(data.configuration)) {\n\t\t\t\t\tif (value === null) {\n\t\t\t\t\t\tdelete newConfiguration[key]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewConfiguration[key] = value\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newConfiguration\n\t\t\t})()\n\n\t\t\ttry {\n\t\t\t\tconst type = data.type ?? existing.type\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(type)\n\t\t\t\tif (data.configuration !== undefined || type !== existing.type) {\n\t\t\t\t\tproviderService.validateConfiguration(newConfiguration)\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tawait db.commandBus.execute(new UpdateIdpCommand(existing.id, {\n\t\t\t\t...data,\n\t\t\t\tconfiguration: data.configuration ? newConfiguration : undefined,\n\t\t\t}))\n\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async listIDP(db: DatabaseContext): Promise<IdentityProviderDto[]> {\n\t\tconst result = await db.queryHandler.fetch(new IdentityProvidersQuery())\n\t\treturn result.map(it => {\n\t\t\tconst providerService = this.idpRegistry.getHandlerOrNull(it.type)\n\t\t\tconst configuration = providerService?.getPublicConfiguration\n\t\t\t\t? providerService.getPublicConfiguration(it.configuration)\n\t\t\t\t: it.configuration\n\n\t\t\treturn { ...it, configuration }\n\t\t})\n\t}\n}\n\nexport type RegisterIDPResponse = Response<null, AddIdpErrorCode>\nexport type DisableIDPResponse = Response<null, DisableIdpErrorCode>\nexport type EnableIDPResponse = Response<null, EnableIdpErrorCode>\nexport type UpdateIDPResponse = Response<null, UpdateIdpErrorCode>\n"],"names":["db","IdentityProviderNotFoundError","ResponseError","InvalidIDPConfigurationError","IdentityProviderBySlugQuery","CreateIdpCommand","ResponseOk","DisableIdpCommand","EnableIdpCommand","newConfiguration","UpdateIdpCommand","IdentityProvidersQuery"],"mappings":"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"}
1
+ {"version":3,"file":"IDPManager.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPManager.ts"],"sourcesContent":["import { Response, ResponseError, ResponseOk } from '../../utils/Response'\nimport { AddIdpErrorCode, DisableIdpErrorCode, EnableIdpErrorCode, UpdateIdpErrorCode } from '../../../schema'\nimport { DatabaseContext } from '../../utils'\nimport { IdentityProviderData } from '../../type'\nimport { IdentityProviderBySlugQuery, IdentityProvidersQuery } from '../../queries'\nimport { CreateIdpCommand } from '../../commands/idp/CreateIdpCommand'\nimport { IDPHandlerRegistry } from './IDPHandlerRegistry'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError'\nimport { InvalidIDPConfigurationError } from './InvalidIDPConfigurationError'\nimport { DisableIdpCommand } from '../../commands/idp/DisableIdpCommand'\nimport { EnableIdpCommand } from '../../commands/idp/EnableIdpCommand'\nimport { UpdateIdpCommand, UpdateIdpData } from '../../commands/idp/UpdateIdpCommand'\nimport { IdentityProviderDto } from '../../queries/idp/types'\n\nexport class IDPManager {\n\tconstructor(\n\t\tprivate readonly idpRegistry: IDPHandlerRegistry,\n\t) {\n\t}\n\n\tpublic async addIDP(db: DatabaseContext, idp: IdentityProviderData): Promise<RegisterIDPResponse> {\n\t\treturn await db.transaction(async (db): Promise<RegisterIDPResponse> => {\n\t\t\ttry {\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(idp.type)\n\t\t\t\tproviderService.validateConfiguration(idp.configuration)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof IdentityProviderNotFoundError) {\n\t\t\t\t\treturn new ResponseError('UNKNOWN_TYPE', `IDP type ${idp.type} not found`)\n\t\t\t\t}\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(idp.slug))\n\t\t\tif (existing) {\n\t\t\t\treturn new ResponseError('ALREADY_EXISTS', `IDP with slug ${idp.slug} already exists`)\n\t\t\t}\n\t\t\tawait db.commandBus.execute(new CreateIdpCommand(idp))\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async disableIDP(db: DatabaseContext, slug: string): Promise<DisableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (!existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new DisableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\n\tpublic async enableIDP(db: DatabaseContext, slug: string): Promise<EnableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new EnableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async updateIDP(db: DatabaseContext, slug: string, data: UpdateIdpData, mergeConfiguration: boolean): Promise<UpdateIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\n\t\t\tconst newConfiguration = (() => {\n\t\t\t\tif (!data.configuration) {\n\t\t\t\t\treturn existing.configuration\n\t\t\t\t}\n\t\t\t\tif (!mergeConfiguration) {\n\t\t\t\t\treturn data.configuration\n\t\t\t\t}\n\n\t\t\t\tconst newConfiguration = { ...existing.configuration }\n\t\t\t\tfor (const [key, value] of Object.entries(data.configuration)) {\n\t\t\t\t\tif (value === null) {\n\t\t\t\t\t\tdelete newConfiguration[key]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewConfiguration[key] = value\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newConfiguration\n\t\t\t})()\n\n\t\t\ttry {\n\t\t\t\tconst type = data.type ?? existing.type\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(type)\n\t\t\t\tif (data.configuration !== undefined || type !== existing.type) {\n\t\t\t\t\tproviderService.validateConfiguration(newConfiguration)\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tawait db.commandBus.execute(new UpdateIdpCommand(existing.id, {\n\t\t\t\t...data,\n\t\t\t\tconfiguration: data.configuration ? newConfiguration : undefined,\n\t\t\t}))\n\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async listIDP(db: DatabaseContext): Promise<IdentityProviderDto[]> {\n\t\tconst result = await db.queryHandler.fetch(new IdentityProvidersQuery())\n\t\treturn result.map(it => {\n\t\t\tconst providerService = this.idpRegistry.getHandlerOrNull(it.type)\n\t\t\tconst configuration = providerService?.getPublicConfiguration\n\t\t\t\t? providerService.getPublicConfiguration(it.configuration)\n\t\t\t\t: it.configuration\n\n\t\t\treturn { ...it, configuration }\n\t\t})\n\t}\n}\n\nexport type RegisterIDPResponse = Response<null, AddIdpErrorCode>\nexport type DisableIDPResponse = Response<null, DisableIdpErrorCode>\nexport type EnableIDPResponse = Response<null, EnableIdpErrorCode>\nexport type UpdateIDPResponse = Response<null, UpdateIdpErrorCode>\n"],"names":["db","IdentityProviderNotFoundError","ResponseError","InvalidIDPConfigurationError","IdentityProviderBySlugQuery","CreateIdpCommand","ResponseOk","DisableIdpCommand","EnableIdpCommand","newConfiguration","UpdateIdpCommand","IdentityProvidersQuery"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"IDPManager.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPManager.ts"],"sourcesContent":["import { Response, ResponseError, ResponseOk } from '../../utils/Response'\nimport { AddIdpErrorCode, DisableIdpErrorCode, EnableIdpErrorCode, UpdateIdpErrorCode } from '../../../schema'\nimport { DatabaseContext } from '../../utils'\nimport { IdentityProviderData } from '../../type'\nimport { IdentityProviderBySlugQuery, IdentityProvidersQuery } from '../../queries'\nimport { CreateIdpCommand } from '../../commands/idp/CreateIdpCommand'\nimport { IDPHandlerRegistry } from './IDPHandlerRegistry'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError'\nimport { InvalidIDPConfigurationError } from './InvalidIDPConfigurationError'\nimport { DisableIdpCommand } from '../../commands/idp/DisableIdpCommand'\nimport { EnableIdpCommand } from '../../commands/idp/EnableIdpCommand'\nimport { UpdateIdpCommand, UpdateIdpData } from '../../commands/idp/UpdateIdpCommand'\nimport { IdentityProviderDto } from '../../queries/idp/types'\n\nexport class IDPManager {\n\tconstructor(\n\t\tprivate readonly idpRegistry: IDPHandlerRegistry,\n\t) {\n\t}\n\n\tpublic async addIDP(db: DatabaseContext, idp: IdentityProviderData): Promise<RegisterIDPResponse> {\n\t\treturn await db.transaction(async (db): Promise<RegisterIDPResponse> => {\n\t\t\ttry {\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(idp.type)\n\t\t\t\tproviderService.validateConfiguration(idp.configuration)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof IdentityProviderNotFoundError) {\n\t\t\t\t\treturn new ResponseError('UNKNOWN_TYPE', `IDP type ${idp.type} not found`)\n\t\t\t\t}\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(idp.slug))\n\t\t\tif (existing) {\n\t\t\t\treturn new ResponseError('ALREADY_EXISTS', `IDP with slug ${idp.slug} already exists`)\n\t\t\t}\n\t\t\tawait db.commandBus.execute(new CreateIdpCommand(idp))\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async disableIDP(db: DatabaseContext, slug: string): Promise<DisableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (!existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new DisableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\n\tpublic async enableIDP(db: DatabaseContext, slug: string): Promise<EnableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new EnableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async updateIDP(db: DatabaseContext, slug: string, data: UpdateIdpData, mergeConfiguration: boolean): Promise<UpdateIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\n\t\t\tconst newConfiguration = (() => {\n\t\t\t\tif (!data.configuration) {\n\t\t\t\t\treturn existing.configuration\n\t\t\t\t}\n\t\t\t\tif (!mergeConfiguration) {\n\t\t\t\t\treturn data.configuration\n\t\t\t\t}\n\n\t\t\t\tconst newConfiguration = { ...existing.configuration }\n\t\t\t\tfor (const [key, value] of Object.entries(data.configuration)) {\n\t\t\t\t\tif (value === null) {\n\t\t\t\t\t\tdelete newConfiguration[key]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewConfiguration[key] = value\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newConfiguration\n\t\t\t})()\n\n\t\t\ttry {\n\t\t\t\tconst type = data.type ?? existing.type\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(type)\n\t\t\t\tif (data.configuration !== undefined || type !== existing.type) {\n\t\t\t\t\tproviderService.validateConfiguration(newConfiguration)\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tawait db.commandBus.execute(new UpdateIdpCommand(existing.id, {\n\t\t\t\t...data,\n\t\t\t\tconfiguration: data.configuration ? newConfiguration : undefined,\n\t\t\t}))\n\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async listIDP(db: DatabaseContext): Promise<IdentityProviderDto[]> {\n\t\tconst result = await db.queryHandler.fetch(new IdentityProvidersQuery())\n\t\treturn result.map(it => {\n\t\t\tconst providerService = this.idpRegistry.getHandlerOrNull(it.type)\n\t\t\tconst configuration = providerService?.getPublicConfiguration\n\t\t\t\t? providerService.getPublicConfiguration(it.configuration)\n\t\t\t\t: it.configuration\n\n\t\t\treturn { ...it, configuration }\n\t\t})\n\t}\n}\n\nexport type RegisterIDPResponse = Response<null, AddIdpErrorCode>\nexport type DisableIDPResponse = Response<null, DisableIdpErrorCode>\nexport type EnableIDPResponse = Response<null, EnableIdpErrorCode>\nexport type UpdateIDPResponse = Response<null, UpdateIdpErrorCode>\n"],"names":["db","newConfiguration"],"mappings":"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"}
1
+ {"version":3,"file":"IDPManager.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPManager.ts"],"sourcesContent":["import { Response, ResponseError, ResponseOk } from '../../utils/Response'\nimport { AddIdpErrorCode, DisableIdpErrorCode, EnableIdpErrorCode, UpdateIdpErrorCode } from '../../../schema'\nimport { DatabaseContext } from '../../utils'\nimport { IdentityProviderData } from '../../type'\nimport { IdentityProviderBySlugQuery, IdentityProvidersQuery } from '../../queries'\nimport { CreateIdpCommand } from '../../commands/idp/CreateIdpCommand'\nimport { IDPHandlerRegistry } from './IDPHandlerRegistry'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError'\nimport { InvalidIDPConfigurationError } from './InvalidIDPConfigurationError'\nimport { DisableIdpCommand } from '../../commands/idp/DisableIdpCommand'\nimport { EnableIdpCommand } from '../../commands/idp/EnableIdpCommand'\nimport { UpdateIdpCommand, UpdateIdpData } from '../../commands/idp/UpdateIdpCommand'\nimport { IdentityProviderDto } from '../../queries/idp/types'\n\nexport class IDPManager {\n\tconstructor(\n\t\tprivate readonly idpRegistry: IDPHandlerRegistry,\n\t) {\n\t}\n\n\tpublic async addIDP(db: DatabaseContext, idp: IdentityProviderData): Promise<RegisterIDPResponse> {\n\t\treturn await db.transaction(async (db): Promise<RegisterIDPResponse> => {\n\t\t\ttry {\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(idp.type)\n\t\t\t\tproviderService.validateConfiguration(idp.configuration)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof IdentityProviderNotFoundError) {\n\t\t\t\t\treturn new ResponseError('UNKNOWN_TYPE', `IDP type ${idp.type} not found`)\n\t\t\t\t}\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(idp.slug))\n\t\t\tif (existing) {\n\t\t\t\treturn new ResponseError('ALREADY_EXISTS', `IDP with slug ${idp.slug} already exists`)\n\t\t\t}\n\t\t\tawait db.commandBus.execute(new CreateIdpCommand(idp))\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async disableIDP(db: DatabaseContext, slug: string): Promise<DisableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (!existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new DisableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\n\tpublic async enableIDP(db: DatabaseContext, slug: string): Promise<EnableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new EnableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async updateIDP(db: DatabaseContext, slug: string, data: UpdateIdpData, mergeConfiguration: boolean): Promise<UpdateIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\n\t\t\tconst newConfiguration = (() => {\n\t\t\t\tif (!data.configuration) {\n\t\t\t\t\treturn existing.configuration\n\t\t\t\t}\n\t\t\t\tif (!mergeConfiguration) {\n\t\t\t\t\treturn data.configuration\n\t\t\t\t}\n\n\t\t\t\tconst newConfiguration = { ...existing.configuration }\n\t\t\t\tfor (const [key, value] of Object.entries(data.configuration)) {\n\t\t\t\t\tif (value === null) {\n\t\t\t\t\t\tdelete newConfiguration[key]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewConfiguration[key] = value\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newConfiguration\n\t\t\t})()\n\n\t\t\ttry {\n\t\t\t\tconst type = data.type ?? existing.type\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(type)\n\t\t\t\tif (data.configuration !== undefined || type !== existing.type) {\n\t\t\t\t\tproviderService.validateConfiguration(newConfiguration)\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tawait db.commandBus.execute(new UpdateIdpCommand(existing.id, {\n\t\t\t\t...data,\n\t\t\t\tconfiguration: data.configuration ? newConfiguration : undefined,\n\t\t\t}))\n\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async listIDP(db: DatabaseContext): Promise<IdentityProviderDto[]> {\n\t\tconst result = await db.queryHandler.fetch(new IdentityProvidersQuery())\n\t\treturn result.map(it => {\n\t\t\tconst providerService = this.idpRegistry.getHandlerOrNull(it.type)\n\t\t\tconst configuration = providerService?.getPublicConfiguration\n\t\t\t\t? providerService.getPublicConfiguration(it.configuration)\n\t\t\t\t: it.configuration\n\n\t\t\treturn { ...it, configuration }\n\t\t})\n\t}\n}\n\nexport type RegisterIDPResponse = Response<null, AddIdpErrorCode>\nexport type DisableIDPResponse = Response<null, DisableIdpErrorCode>\nexport type EnableIDPResponse = Response<null, EnableIdpErrorCode>\nexport type UpdateIDPResponse = Response<null, UpdateIdpErrorCode>\n"],"names":["db","newConfiguration"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"IDPResponseError.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPResponseError.ts"],"sourcesContent":["export class IDPResponseError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":";;AAAO,MAAM,yBAAyB,MAAM;AAAA,EAC3C,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EACd;AACD;;"}
1
+ {"version":3,"file":"IDPResponseError.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPResponseError.ts"],"sourcesContent":["export class IDPResponseError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":";;AAAO,MAAM,yBAAyB,MAAM;AAAA,EAC3C,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EAAA;AAEf;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IDPResponseError.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPResponseError.ts"],"sourcesContent":["export class IDPResponseError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":"AAAO,MAAM,yBAAyB,MAAM;AAAA,EAC3C,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EACd;AACD;"}
1
+ {"version":3,"file":"IDPResponseError.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPResponseError.ts"],"sourcesContent":["export class IDPResponseError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":"AAAO,MAAM,yBAAyB,MAAM;AAAA,EAC3C,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EAAA;AAEf;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IDPValidationError.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPValidationError.ts"],"sourcesContent":["export class IDPValidationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":";;AAAO,MAAM,2BAA2B,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EACd;AACD;;"}
1
+ {"version":3,"file":"IDPValidationError.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPValidationError.ts"],"sourcesContent":["export class IDPValidationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":";;AAAO,MAAM,2BAA2B,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EAAA;AAEf;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IDPValidationError.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPValidationError.ts"],"sourcesContent":["export class IDPValidationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":"AAAO,MAAM,2BAA2B,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EACd;AACD;"}
1
+ {"version":3,"file":"IDPValidationError.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPValidationError.ts"],"sourcesContent":["export class IDPValidationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":"AAAO,MAAM,2BAA2B,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EAAA;AAEf;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityProviderNotFoundError.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IdentityProviderNotFoundError.ts"],"sourcesContent":["export class IdentityProviderNotFoundError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":";;AAAO,MAAM,sCAAsC,MAAM;AAAA,EACxD,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EACd;AACD;;"}
1
+ {"version":3,"file":"IdentityProviderNotFoundError.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IdentityProviderNotFoundError.ts"],"sourcesContent":["export class IdentityProviderNotFoundError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":";;AAAO,MAAM,sCAAsC,MAAM;AAAA,EACxD,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EAAA;AAEf;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityProviderNotFoundError.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IdentityProviderNotFoundError.ts"],"sourcesContent":["export class IdentityProviderNotFoundError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":"AAAO,MAAM,sCAAsC,MAAM;AAAA,EACxD,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EACd;AACD;"}
1
+ {"version":3,"file":"IdentityProviderNotFoundError.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IdentityProviderNotFoundError.ts"],"sourcesContent":["export class IdentityProviderNotFoundError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":"AAAO,MAAM,sCAAsC,MAAM;AAAA,EACxD,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EAAA;AAEf;"}
@@ -1 +1 @@
1
- {"version":3,"file":"InvalidIDPConfigurationError.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/InvalidIDPConfigurationError.ts"],"sourcesContent":["export class InvalidIDPConfigurationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":";;AAAO,MAAM,qCAAqC,MAAM;AAAA,EACvD,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EACd;AACD;;"}
1
+ {"version":3,"file":"InvalidIDPConfigurationError.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/InvalidIDPConfigurationError.ts"],"sourcesContent":["export class InvalidIDPConfigurationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":";;AAAO,MAAM,qCAAqC,MAAM;AAAA,EACvD,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EAAA;AAEf;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"InvalidIDPConfigurationError.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/InvalidIDPConfigurationError.ts"],"sourcesContent":["export class InvalidIDPConfigurationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":"AAAO,MAAM,qCAAqC,MAAM;AAAA,EACvD,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EACd;AACD;"}
1
+ {"version":3,"file":"InvalidIDPConfigurationError.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/InvalidIDPConfigurationError.ts"],"sourcesContent":["export class InvalidIDPConfigurationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n"],"names":[],"mappings":"AAAO,MAAM,qCAAqC,MAAM;AAAA,EACvD,YAAY,SAAiB;AAC5B,UAAM,OAAO;AAAA,EAAA;AAEf;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AppleProvider.cjs","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/AppleProvider.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { IdentityProviderHandler, IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\nimport { OIDCConfiguration, OIDCConfigurationOptions, OIDCInitData, OIDCResponseData, OIDCSessionData } from './OIDCTypes'\nimport { catchTypesafe } from './helpers'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { InvalidIDPConfigurationError } from '../InvalidIDPConfigurationError'\nimport { handleOIDCResponse, initOIDCAuth } from './OIDCHelpers'\nimport { Client, Issuer } from 'openid-client'\nimport { importPKCS8, SignJWT } from 'jose'\n\nexport const AppleConfiguration = Typesafe.intersection(\n\tTypesafe.object({\n\t\tkeyId: Typesafe.string,\n\t\tteamId: Typesafe.string,\n\t\tclientId: Typesafe.string,\n\t\tprivateKey: Typesafe.string,\n\t}),\n\tOIDCConfigurationOptions,\n)\n\ntype AppleConfiguration = ReturnType<typeof AppleConfiguration>\n\nconst APPLE_OIDC_CONFIGURATION_ENDPOINT = 'https://appleid.apple.com/.well-known/openid-configuration'\n\nexport class AppleProvider implements IdentityProviderHandler<AppleConfiguration> {\n\tprivate issuer: Issuer<Client> | undefined\n\n\tvalidateConfiguration = catchTypesafe(AppleConfiguration, InvalidIDPConfigurationError)\n\n\tpublic async initAuth(configuration: AppleConfiguration, data: unknown): Promise<InitIDPAuthResult> {\n\t\tconst initData = catchTypesafe(OIDCInitData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await initOIDCAuth(client, {\n\t\t\tscope: configuration.scope ?? configuration.claims,\n\t\t\t...initData,\n\t\t})\n\t}\n\n\tpublic async processResponse(configuration: AppleConfiguration, data: unknown): Promise<IDPResponse> {\n\t\tconst responseData = catchTypesafe(OIDCResponseData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await handleOIDCResponse(client, responseData)\n\t}\n\n\tgetPublicConfiguration({ privateKey, ...config }: AppleConfiguration): Partial<AppleConfiguration> {\n\t\treturn config\n\t}\n\n\tprivate async createOIDCClient(configuration: AppleConfiguration): Promise<Client> {\n\t\tthis.issuer ??= await Issuer.discover(APPLE_OIDC_CONFIGURATION_ENDPOINT)\n\t\tconst privateKey = await importPKCS8(configuration.privateKey, 'ES256')\n\n\t\tconst jwt = await new SignJWT({})\n\t\t\t.setProtectedHeader({ alg: 'ES256', typ: 'JWT', kid: configuration.keyId })\n\t\t\t.setIssuedAt()\n\t\t\t.setIssuer(configuration.teamId)\n\t\t\t.setAudience('https://appleid.apple.com')\n\t\t\t.setSubject(configuration.clientId)\n\t\t\t.setExpirationTime('10m')\n\t\t\t.sign(privateKey)\n\n\t\treturn new this.issuer.Client(\n\t\t\t{\n\t\t\t\tclient_id: configuration.clientId,\n\t\t\t\tclient_secret: jwt,\n\t\t\t\tresponse_types: [configuration.responseType || 'code'],\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tadditionalAuthorizedParties: [...(configuration.additionalAuthorizedParties ?? [])],\n\t\t\t},\n\t\t)\n\t}\n}\n"],"names":["Typesafe","OIDCConfigurationOptions","catchTypesafe","InvalidIDPConfigurationError","OIDCInitData","IDPValidationError","initOIDCAuth","OIDCResponseData","handleOIDCResponse","Issuer","importPKCS8","SignJWT"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,MAAM,qBAAqBA,oBAAS;AAAA,EAC1CA,oBAAS,OAAO;AAAA,IACf,OAAOA,oBAAS;AAAA,IAChB,QAAQA,oBAAS;AAAA,IACjB,UAAUA,oBAAS;AAAA,IACnB,YAAYA,oBAAS;AAAA,EAAA,CACrB;AAAA,EACDC,UAAA;AACD;AAIA,MAAM,oCAAoC;AAEnC,MAAM,cAAqE;AAAA,EAA3E,cAAA;AACE,kBAAA,MAAA,QAAA;AAEgB,kBAAA,MAAA,yBAAAC,QAAA,cAAc,oBAAoBC,6BAA4B,4BAAA,CAAA;AAAA,EAAA;AAAA,EAEtF,MAAa,SAAS,eAAmC,MAA2C;AACnG,UAAM,WAAWD,QAAAA,cAAcE,UAAAA,cAAcC,mBAAAA,kBAAkB,EAAE,IAAI;AACrE,UAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,WAAA,MAAMC,yBAAa,QAAQ;AAAA,MACjC,OAAO,cAAc,SAAS,cAAc;AAAA,MAC5C,GAAG;AAAA,IAAA,CACH;AAAA,EACF;AAAA,EAEA,MAAa,gBAAgB,eAAmC,MAAqC;AACpG,UAAM,eAAeJ,QAAAA,cAAcK,UAAAA,kBAAkBF,mBAAAA,kBAAkB,EAAE,IAAI;AAC7E,UAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,WAAA,MAAMG,YAAmB,mBAAA,QAAQ,YAAY;AAAA,EACrD;AAAA,EAEA,uBAAuB,EAAE,YAAY,GAAG,UAA2D;AAC3F,WAAA;AAAA,EACR;AAAA,EAEA,MAAc,iBAAiB,eAAoD;AAClF,SAAK,WAAL,KAAK,SAAW,MAAMC,aAAAA,OAAO,SAAS,iCAAiC;AACvE,UAAM,aAAa,MAAMC,KAAY,YAAA,cAAc,YAAY,OAAO;AAEtE,UAAM,MAAM,MAAM,IAAIC,KAAAA,QAAQ,CAAA,CAAE,EAC9B,mBAAmB,EAAE,KAAK,SAAS,KAAK,OAAO,KAAK,cAAc,MAAO,CAAA,EACzE,cACA,UAAU,cAAc,MAAM,EAC9B,YAAY,2BAA2B,EACvC,WAAW,cAAc,QAAQ,EACjC,kBAAkB,KAAK,EACvB,KAAK,UAAU;AAEV,WAAA,IAAI,KAAK,OAAO;AAAA,MACtB;AAAA,QACC,WAAW,cAAc;AAAA,QACzB,eAAe;AAAA,QACf,gBAAgB,CAAC,cAAc,gBAAgB,MAAM;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,QACC,6BAA6B,CAAC,GAAI,cAAc,+BAA+B,CAAA,CAAG;AAAA,MACnF;AAAA,IAAA;AAAA,EAEF;AACD;;;"}
1
+ {"version":3,"file":"AppleProvider.cjs","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/AppleProvider.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { IdentityProviderHandler, IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\nimport { OIDCConfiguration, OIDCConfigurationOptions, OIDCInitData, OIDCResponseData, OIDCSessionData } from './OIDCTypes'\nimport { catchTypesafe } from './helpers'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { InvalidIDPConfigurationError } from '../InvalidIDPConfigurationError'\nimport { handleOIDCResponse, initOIDCAuth } from './OIDCHelpers'\nimport { Client, Issuer } from 'openid-client'\nimport { importPKCS8, SignJWT } from 'jose'\n\nexport const AppleConfiguration = Typesafe.intersection(\n\tTypesafe.object({\n\t\tkeyId: Typesafe.string,\n\t\tteamId: Typesafe.string,\n\t\tclientId: Typesafe.string,\n\t\tprivateKey: Typesafe.string,\n\t}),\n\tOIDCConfigurationOptions,\n)\n\ntype AppleConfiguration = ReturnType<typeof AppleConfiguration>\n\nconst APPLE_OIDC_CONFIGURATION_ENDPOINT = 'https://appleid.apple.com/.well-known/openid-configuration'\n\nexport class AppleProvider implements IdentityProviderHandler<AppleConfiguration> {\n\tprivate issuer: Issuer<Client> | undefined\n\n\tvalidateConfiguration = catchTypesafe(AppleConfiguration, InvalidIDPConfigurationError)\n\n\tpublic async initAuth(configuration: AppleConfiguration, data: unknown): Promise<InitIDPAuthResult> {\n\t\tconst initData = catchTypesafe(OIDCInitData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await initOIDCAuth(client, {\n\t\t\tscope: configuration.scope ?? configuration.claims,\n\t\t\t...initData,\n\t\t})\n\t}\n\n\tpublic async processResponse(configuration: AppleConfiguration, data: unknown): Promise<IDPResponse> {\n\t\tconst responseData = catchTypesafe(OIDCResponseData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await handleOIDCResponse(client, responseData)\n\t}\n\n\tgetPublicConfiguration({ privateKey, ...config }: AppleConfiguration): Partial<AppleConfiguration> {\n\t\treturn config\n\t}\n\n\tprivate async createOIDCClient(configuration: AppleConfiguration): Promise<Client> {\n\t\tthis.issuer ??= await Issuer.discover(APPLE_OIDC_CONFIGURATION_ENDPOINT)\n\t\tconst privateKey = await importPKCS8(configuration.privateKey, 'ES256')\n\n\t\tconst jwt = await new SignJWT({})\n\t\t\t.setProtectedHeader({ alg: 'ES256', typ: 'JWT', kid: configuration.keyId })\n\t\t\t.setIssuedAt()\n\t\t\t.setIssuer(configuration.teamId)\n\t\t\t.setAudience('https://appleid.apple.com')\n\t\t\t.setSubject(configuration.clientId)\n\t\t\t.setExpirationTime('10m')\n\t\t\t.sign(privateKey)\n\n\t\treturn new this.issuer.Client(\n\t\t\t{\n\t\t\t\tclient_id: configuration.clientId,\n\t\t\t\tclient_secret: jwt,\n\t\t\t\tresponse_types: [configuration.responseType || 'code'],\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tadditionalAuthorizedParties: [...(configuration.additionalAuthorizedParties ?? [])],\n\t\t\t},\n\t\t)\n\t}\n}\n"],"names":["Typesafe","OIDCConfigurationOptions","catchTypesafe","InvalidIDPConfigurationError","OIDCInitData","IDPValidationError","initOIDCAuth","OIDCResponseData","handleOIDCResponse","Issuer","importPKCS8","SignJWT"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,MAAM,qBAAqBA,oBAAS;AAAA,EAC1CA,oBAAS,OAAO;AAAA,IACf,OAAOA,oBAAS;AAAA,IAChB,QAAQA,oBAAS;AAAA,IACjB,UAAUA,oBAAS;AAAA,IACnB,YAAYA,oBAAS;AAAA,EAAA,CACrB;AAAA,EACDC,UAAAA;AACD;AAIA,MAAM,oCAAoC;AAEnC,MAAM,cAAqE;AAAA,EAA3E,cAAA;AACE,kBAAA,MAAA,QAAA;AAEgB,kBAAA,MAAA,yBAAAC,QAAA,cAAc,oBAAoBC,6BAA4B,4BAAA,CAAA;AAAA,EAAA;AAAA,EAEtF,MAAa,SAAS,eAAmC,MAA2C;AACnG,UAAM,WAAWD,QAAA,cAAcE,UAAc,cAAAC,mBAAkB,kBAAA,EAAE,IAAI;AACrE,UAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,WAAA,MAAMC,yBAAa,QAAQ;AAAA,MACjC,OAAO,cAAc,SAAS,cAAc;AAAA,MAC5C,GAAG;AAAA,IAAA,CACH;AAAA,EAAA;AAAA,EAGF,MAAa,gBAAgB,eAAmC,MAAqC;AACpG,UAAM,eAAeJ,QAAA,cAAcK,UAAkB,kBAAAF,mBAAkB,kBAAA,EAAE,IAAI;AAC7E,UAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,WAAA,MAAMG,YAAAA,mBAAmB,QAAQ,YAAY;AAAA,EAAA;AAAA,EAGrD,uBAAuB,EAAE,YAAY,GAAG,UAA2D;AAC3F,WAAA;AAAA,EAAA;AAAA,EAGR,MAAc,iBAAiB,eAAoD;AAClF,SAAK,WAAL,KAAK,SAAW,MAAMC,oBAAO,SAAS,iCAAiC;AACvE,UAAM,aAAa,MAAMC,KAAAA,YAAY,cAAc,YAAY,OAAO;AAEtE,UAAM,MAAM,MAAM,IAAIC,KAAA,QAAQ,CAAE,CAAA,EAC9B,mBAAmB,EAAE,KAAK,SAAS,KAAK,OAAO,KAAK,cAAc,MAAM,CAAC,EACzE,YAAA,EACA,UAAU,cAAc,MAAM,EAC9B,YAAY,2BAA2B,EACvC,WAAW,cAAc,QAAQ,EACjC,kBAAkB,KAAK,EACvB,KAAK,UAAU;AAEV,WAAA,IAAI,KAAK,OAAO;AAAA,MACtB;AAAA,QACC,WAAW,cAAc;AAAA,QACzB,eAAe;AAAA,QACf,gBAAgB,CAAC,cAAc,gBAAgB,MAAM;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,QACC,6BAA6B,CAAC,GAAI,cAAc,+BAA+B,CAAG,CAAA;AAAA,MAAA;AAAA,IAEpF;AAAA,EAAA;AAEF;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AppleProvider.js","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/AppleProvider.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { IdentityProviderHandler, IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\nimport { OIDCConfiguration, OIDCConfigurationOptions, OIDCInitData, OIDCResponseData, OIDCSessionData } from './OIDCTypes'\nimport { catchTypesafe } from './helpers'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { InvalidIDPConfigurationError } from '../InvalidIDPConfigurationError'\nimport { handleOIDCResponse, initOIDCAuth } from './OIDCHelpers'\nimport { Client, Issuer } from 'openid-client'\nimport { importPKCS8, SignJWT } from 'jose'\n\nexport const AppleConfiguration = Typesafe.intersection(\n\tTypesafe.object({\n\t\tkeyId: Typesafe.string,\n\t\tteamId: Typesafe.string,\n\t\tclientId: Typesafe.string,\n\t\tprivateKey: Typesafe.string,\n\t}),\n\tOIDCConfigurationOptions,\n)\n\ntype AppleConfiguration = ReturnType<typeof AppleConfiguration>\n\nconst APPLE_OIDC_CONFIGURATION_ENDPOINT = 'https://appleid.apple.com/.well-known/openid-configuration'\n\nexport class AppleProvider implements IdentityProviderHandler<AppleConfiguration> {\n\tprivate issuer: Issuer<Client> | undefined\n\n\tvalidateConfiguration = catchTypesafe(AppleConfiguration, InvalidIDPConfigurationError)\n\n\tpublic async initAuth(configuration: AppleConfiguration, data: unknown): Promise<InitIDPAuthResult> {\n\t\tconst initData = catchTypesafe(OIDCInitData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await initOIDCAuth(client, {\n\t\t\tscope: configuration.scope ?? configuration.claims,\n\t\t\t...initData,\n\t\t})\n\t}\n\n\tpublic async processResponse(configuration: AppleConfiguration, data: unknown): Promise<IDPResponse> {\n\t\tconst responseData = catchTypesafe(OIDCResponseData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await handleOIDCResponse(client, responseData)\n\t}\n\n\tgetPublicConfiguration({ privateKey, ...config }: AppleConfiguration): Partial<AppleConfiguration> {\n\t\treturn config\n\t}\n\n\tprivate async createOIDCClient(configuration: AppleConfiguration): Promise<Client> {\n\t\tthis.issuer ??= await Issuer.discover(APPLE_OIDC_CONFIGURATION_ENDPOINT)\n\t\tconst privateKey = await importPKCS8(configuration.privateKey, 'ES256')\n\n\t\tconst jwt = await new SignJWT({})\n\t\t\t.setProtectedHeader({ alg: 'ES256', typ: 'JWT', kid: configuration.keyId })\n\t\t\t.setIssuedAt()\n\t\t\t.setIssuer(configuration.teamId)\n\t\t\t.setAudience('https://appleid.apple.com')\n\t\t\t.setSubject(configuration.clientId)\n\t\t\t.setExpirationTime('10m')\n\t\t\t.sign(privateKey)\n\n\t\treturn new this.issuer.Client(\n\t\t\t{\n\t\t\t\tclient_id: configuration.clientId,\n\t\t\t\tclient_secret: jwt,\n\t\t\t\tresponse_types: [configuration.responseType || 'code'],\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tadditionalAuthorizedParties: [...(configuration.additionalAuthorizedParties ?? [])],\n\t\t\t},\n\t\t)\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAUO,MAAM,qBAAqB,SAAS;AAAA,EAC1C,SAAS,OAAO;AAAA,IACf,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,IACjB,UAAU,SAAS;AAAA,IACnB,YAAY,SAAS;AAAA,EAAA,CACrB;AAAA,EACD;AACD;AAIA,MAAM,oCAAoC;AAEnC,MAAM,cAAqE;AAAA,EAA3E,cAAA;AACE,kBAAA,MAAA,QAAA;AAEgB,kBAAA,MAAA,yBAAA,cAAc,oBAAoB,4BAA4B,CAAA;AAAA,EAAA;AAAA,EAEtF,MAAa,SAAS,eAAmC,MAA2C;AACnG,UAAM,WAAW,cAAc,cAAc,kBAAkB,EAAE,IAAI;AACrE,UAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,WAAA,MAAM,aAAa,QAAQ;AAAA,MACjC,OAAO,cAAc,SAAS,cAAc;AAAA,MAC5C,GAAG;AAAA,IAAA,CACH;AAAA,EACF;AAAA,EAEA,MAAa,gBAAgB,eAAmC,MAAqC;AACpG,UAAM,eAAe,cAAc,kBAAkB,kBAAkB,EAAE,IAAI;AAC7E,UAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,WAAA,MAAM,mBAAmB,QAAQ,YAAY;AAAA,EACrD;AAAA,EAEA,uBAAuB,EAAE,YAAY,GAAG,UAA2D;AAC3F,WAAA;AAAA,EACR;AAAA,EAEA,MAAc,iBAAiB,eAAoD;AAClF,SAAK,WAAL,KAAK,SAAW,MAAM,OAAO,SAAS,iCAAiC;AACvE,UAAM,aAAa,MAAM,YAAY,cAAc,YAAY,OAAO;AAEtE,UAAM,MAAM,MAAM,IAAI,QAAQ,CAAA,CAAE,EAC9B,mBAAmB,EAAE,KAAK,SAAS,KAAK,OAAO,KAAK,cAAc,MAAO,CAAA,EACzE,cACA,UAAU,cAAc,MAAM,EAC9B,YAAY,2BAA2B,EACvC,WAAW,cAAc,QAAQ,EACjC,kBAAkB,KAAK,EACvB,KAAK,UAAU;AAEV,WAAA,IAAI,KAAK,OAAO;AAAA,MACtB;AAAA,QACC,WAAW,cAAc;AAAA,QACzB,eAAe;AAAA,QACf,gBAAgB,CAAC,cAAc,gBAAgB,MAAM;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,QACC,6BAA6B,CAAC,GAAI,cAAc,+BAA+B,CAAA,CAAG;AAAA,MACnF;AAAA,IAAA;AAAA,EAEF;AACD;"}
1
+ {"version":3,"file":"AppleProvider.js","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/AppleProvider.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { IdentityProviderHandler, IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\nimport { OIDCConfiguration, OIDCConfigurationOptions, OIDCInitData, OIDCResponseData, OIDCSessionData } from './OIDCTypes'\nimport { catchTypesafe } from './helpers'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { InvalidIDPConfigurationError } from '../InvalidIDPConfigurationError'\nimport { handleOIDCResponse, initOIDCAuth } from './OIDCHelpers'\nimport { Client, Issuer } from 'openid-client'\nimport { importPKCS8, SignJWT } from 'jose'\n\nexport const AppleConfiguration = Typesafe.intersection(\n\tTypesafe.object({\n\t\tkeyId: Typesafe.string,\n\t\tteamId: Typesafe.string,\n\t\tclientId: Typesafe.string,\n\t\tprivateKey: Typesafe.string,\n\t}),\n\tOIDCConfigurationOptions,\n)\n\ntype AppleConfiguration = ReturnType<typeof AppleConfiguration>\n\nconst APPLE_OIDC_CONFIGURATION_ENDPOINT = 'https://appleid.apple.com/.well-known/openid-configuration'\n\nexport class AppleProvider implements IdentityProviderHandler<AppleConfiguration> {\n\tprivate issuer: Issuer<Client> | undefined\n\n\tvalidateConfiguration = catchTypesafe(AppleConfiguration, InvalidIDPConfigurationError)\n\n\tpublic async initAuth(configuration: AppleConfiguration, data: unknown): Promise<InitIDPAuthResult> {\n\t\tconst initData = catchTypesafe(OIDCInitData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await initOIDCAuth(client, {\n\t\t\tscope: configuration.scope ?? configuration.claims,\n\t\t\t...initData,\n\t\t})\n\t}\n\n\tpublic async processResponse(configuration: AppleConfiguration, data: unknown): Promise<IDPResponse> {\n\t\tconst responseData = catchTypesafe(OIDCResponseData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await handleOIDCResponse(client, responseData)\n\t}\n\n\tgetPublicConfiguration({ privateKey, ...config }: AppleConfiguration): Partial<AppleConfiguration> {\n\t\treturn config\n\t}\n\n\tprivate async createOIDCClient(configuration: AppleConfiguration): Promise<Client> {\n\t\tthis.issuer ??= await Issuer.discover(APPLE_OIDC_CONFIGURATION_ENDPOINT)\n\t\tconst privateKey = await importPKCS8(configuration.privateKey, 'ES256')\n\n\t\tconst jwt = await new SignJWT({})\n\t\t\t.setProtectedHeader({ alg: 'ES256', typ: 'JWT', kid: configuration.keyId })\n\t\t\t.setIssuedAt()\n\t\t\t.setIssuer(configuration.teamId)\n\t\t\t.setAudience('https://appleid.apple.com')\n\t\t\t.setSubject(configuration.clientId)\n\t\t\t.setExpirationTime('10m')\n\t\t\t.sign(privateKey)\n\n\t\treturn new this.issuer.Client(\n\t\t\t{\n\t\t\t\tclient_id: configuration.clientId,\n\t\t\t\tclient_secret: jwt,\n\t\t\t\tresponse_types: [configuration.responseType || 'code'],\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tadditionalAuthorizedParties: [...(configuration.additionalAuthorizedParties ?? [])],\n\t\t\t},\n\t\t)\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAUO,MAAM,qBAAqB,SAAS;AAAA,EAC1C,SAAS,OAAO;AAAA,IACf,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,IACjB,UAAU,SAAS;AAAA,IACnB,YAAY,SAAS;AAAA,EAAA,CACrB;AAAA,EACD;AACD;AAIA,MAAM,oCAAoC;AAEnC,MAAM,cAAqE;AAAA,EAA3E,cAAA;AACE,kBAAA,MAAA,QAAA;AAEgB,kBAAA,MAAA,yBAAA,cAAc,oBAAoB,4BAA4B,CAAA;AAAA,EAAA;AAAA,EAEtF,MAAa,SAAS,eAAmC,MAA2C;AACnG,UAAM,WAAW,cAAc,cAAc,kBAAkB,EAAE,IAAI;AACrE,UAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,WAAA,MAAM,aAAa,QAAQ;AAAA,MACjC,OAAO,cAAc,SAAS,cAAc;AAAA,MAC5C,GAAG;AAAA,IAAA,CACH;AAAA,EAAA;AAAA,EAGF,MAAa,gBAAgB,eAAmC,MAAqC;AACpG,UAAM,eAAe,cAAc,kBAAkB,kBAAkB,EAAE,IAAI;AAC7E,UAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,WAAA,MAAM,mBAAmB,QAAQ,YAAY;AAAA,EAAA;AAAA,EAGrD,uBAAuB,EAAE,YAAY,GAAG,UAA2D;AAC3F,WAAA;AAAA,EAAA;AAAA,EAGR,MAAc,iBAAiB,eAAoD;AAClF,SAAK,WAAL,KAAK,SAAW,MAAM,OAAO,SAAS,iCAAiC;AACvE,UAAM,aAAa,MAAM,YAAY,cAAc,YAAY,OAAO;AAEtE,UAAM,MAAM,MAAM,IAAI,QAAQ,CAAE,CAAA,EAC9B,mBAAmB,EAAE,KAAK,SAAS,KAAK,OAAO,KAAK,cAAc,MAAM,CAAC,EACzE,YAAA,EACA,UAAU,cAAc,MAAM,EAC9B,YAAY,2BAA2B,EACvC,WAAW,cAAc,QAAQ,EACjC,kBAAkB,KAAK,EACvB,KAAK,UAAU;AAEV,WAAA,IAAI,KAAK,OAAO;AAAA,MACtB;AAAA,QACC,WAAW,cAAc;AAAA,QACzB,eAAe;AAAA,QACf,gBAAgB,CAAC,cAAc,gBAAgB,MAAM;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,QACC,6BAA6B,CAAC,GAAI,cAAc,+BAA+B,CAAG,CAAA;AAAA,MAAA;AAAA,IAEpF;AAAA,EAAA;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FacebookProvider.cjs","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/FacebookProvider.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Client, Issuer } from 'openid-client'\nimport { IdentityProviderHandler, IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { InvalidIDPConfigurationError } from '../InvalidIDPConfigurationError'\nimport { catchTypesafe } from './helpers'\nimport { BaseOIDCConfiguration, OIDCConfiguration, OIDCInitData, OIDCResponseData } from './OIDCTypes'\nimport { handleOIDCResponse, initOIDCAuth } from './OIDCHelpers'\nimport { createHmac } from 'node:crypto'\nimport { IDPResponseError } from '../IDPResponseError'\n\n\n\nconst FacebookConfiguration = BaseOIDCConfiguration\ntype FacebookConfiguration = ReturnType<typeof FacebookConfiguration>\n\nconst FacebookResponseData = Typesafe.union(\n\tOIDCResponseData,\n\tTypesafe.object({\n\t\tauthResponse: Typesafe.object({\n\t\t\taccessToken: Typesafe.string,\n\t\t\tsignedRequest: Typesafe.string,\n\t\t}),\n\t}),\n)\nconst FacebookResponsePayload = Typesafe.object({\n\tuser_id: Typesafe.string,\n\tcode: Typesafe.string,\n})\n\ntype FacebookResponseData = ReturnType<typeof FacebookResponseData>\n\n\nexport class FacebookProvider implements IdentityProviderHandler<FacebookConfiguration> {\n\t// based on https://www.facebook.com/.well-known/openid-configuration/\n\t// facebook .well-known endpoint does have \"token_endpoint\" field\n\tprivate facebookIssuer = new Issuer({\n\t\tissuer: 'https://www.facebook.com',\n\t\tauthorization_endpoint: 'https://facebook.com/dialog/oauth/',\n\t\tjwks_uri: 'https://www.facebook.com/.well-known/oauth/openid/jwks/',\n\t\tresponse_types_supported: [\n\t\t\t'id_token',\n\t\t\t'token id_token',\n\t\t],\n\t\tsubject_types_supported: [\n\t\t\t'pairwise',\n\t\t],\n\t\tid_token_signing_alg_values_supported: [\n\t\t\t'RS256',\n\t\t],\n\t\tclaims_supported: [\n\t\t\t'iss',\n\t\t\t'aud',\n\t\t\t'sub',\n\t\t\t'iat',\n\t\t\t'exp',\n\t\t\t'jti',\n\t\t\t'nonce',\n\t\t\t'at_hash',\n\t\t\t'name',\n\t\t\t'given_name',\n\t\t\t'middle_name',\n\t\t\t'family_name',\n\t\t\t'email',\n\t\t\t'picture',\n\t\t\t'user_friends',\n\t\t\t'user_birthday',\n\t\t\t'user_age_range',\n\t\t\t'user_link',\n\t\t\t'user_hometown',\n\t\t\t'user_location',\n\t\t\t'user_gender',\n\t\t],\n\t\ttoken_endpoint: 'https://graph.facebook.com/v11.0/oauth/access_token',\n\t})\n\n\tvalidateConfiguration = catchTypesafe(FacebookConfiguration, InvalidIDPConfigurationError)\n\n\tpublic async initAuth(configuration: FacebookConfiguration, data: unknown): Promise<InitIDPAuthResult> {\n\t\tconst initData = catchTypesafe(OIDCInitData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await initOIDCAuth(client, {\n\t\t\tscope: configuration.scope ?? configuration.claims,\n\t\t\t...initData,\n\t\t})\n\t}\n\n\tpublic async processResponse(configuration: FacebookConfiguration, data: unknown): Promise<IDPResponse> {\n\t\tconst responseData = catchTypesafe(FacebookResponseData, IDPValidationError)(data)\n\n\t\tif (!('authResponse' in responseData)) {\n\t\t\tconst client = await this.createOIDCClient(configuration)\n\t\t\treturn await handleOIDCResponse(client, responseData)\n\t\t} else {\n\t\t\tconst [sig, payload] = responseData.authResponse.signedRequest.split('.')\n\t\t\tconst data = catchTypesafe(FacebookResponsePayload, IDPValidationError)(JSON.parse(Buffer.from(payload, 'base64').toString('utf8')))\n\t\t\tconst hmac = createHmac('sha256', configuration.clientSecret)\n\t\t\tconst signature = hmac.update(payload).digest()\n\t\t\tconst isSignatureValid = signature.compare(Buffer.from(sig, 'base64')) === 0\n\t\t\tif (!isSignatureValid) {\n\t\t\t\tthrow new IDPValidationError('Invalid signature')\n\t\t\t}\n\t\t\tconst url = `https://graph.facebook.com/${data.user_id}?fields=id,email,name&access_token=${responseData.authResponse.accessToken}`\n\t\t\tconst response = await fetch(url)\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new IDPResponseError(`Invalid Facebook response: [${response.status}] ${await response.text()}`)\n\t\t\t}\n\t\t\tconst apiData = await response.json()\n\n\t\t\treturn {\n\t\t\t\texternalIdentifier: data.user_id,\n\t\t\t\tname: apiData.name,\n\t\t\t\temail: apiData.email,\n\t\t\t}\n\t\t}\n\t}\n\n\tgetPublicConfiguration({ clientSecret, ...config }: FacebookConfiguration): Partial<FacebookConfiguration> {\n\t\treturn config\n\t}\n\n\tprivate async createOIDCClient(configuration: FacebookConfiguration): Promise<Client> {\n\t\treturn new this.facebookIssuer.Client(\n\t\t\t{\n\t\t\t\tclient_id: configuration.clientId,\n\t\t\t\tclient_secret: configuration.clientSecret,\n\t\t\t\tresponse_types: [configuration.responseType || 'code'],\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tadditionalAuthorizedParties: [...(configuration.additionalAuthorizedParties ?? [])],\n\t\t\t},\n\t\t)\n\t}\n}\n"],"names":["BaseOIDCConfiguration","Typesafe","OIDCResponseData","Issuer","catchTypesafe","InvalidIDPConfigurationError","OIDCInitData","IDPValidationError","initOIDCAuth","handleOIDCResponse","data","createHmac","IDPResponseError"],"mappings":"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"}
1
+ {"version":3,"file":"FacebookProvider.cjs","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/FacebookProvider.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Client, Issuer } from 'openid-client'\nimport { IdentityProviderHandler, IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { InvalidIDPConfigurationError } from '../InvalidIDPConfigurationError'\nimport { catchTypesafe } from './helpers'\nimport { BaseOIDCConfiguration, OIDCConfiguration, OIDCInitData, OIDCResponseData } from './OIDCTypes'\nimport { handleOIDCResponse, initOIDCAuth } from './OIDCHelpers'\nimport { createHmac } from 'node:crypto'\nimport { IDPResponseError } from '../IDPResponseError'\n\n\n\nconst FacebookConfiguration = BaseOIDCConfiguration\ntype FacebookConfiguration = ReturnType<typeof FacebookConfiguration>\n\nconst FacebookResponseData = Typesafe.union(\n\tOIDCResponseData,\n\tTypesafe.object({\n\t\tauthResponse: Typesafe.object({\n\t\t\taccessToken: Typesafe.string,\n\t\t\tsignedRequest: Typesafe.string,\n\t\t}),\n\t}),\n)\nconst FacebookResponsePayload = Typesafe.object({\n\tuser_id: Typesafe.string,\n\tcode: Typesafe.string,\n})\n\ntype FacebookResponseData = ReturnType<typeof FacebookResponseData>\n\n\nexport class FacebookProvider implements IdentityProviderHandler<FacebookConfiguration> {\n\t// based on https://www.facebook.com/.well-known/openid-configuration/\n\t// facebook .well-known endpoint does have \"token_endpoint\" field\n\tprivate facebookIssuer = new Issuer({\n\t\tissuer: 'https://www.facebook.com',\n\t\tauthorization_endpoint: 'https://facebook.com/dialog/oauth/',\n\t\tjwks_uri: 'https://www.facebook.com/.well-known/oauth/openid/jwks/',\n\t\tresponse_types_supported: [\n\t\t\t'id_token',\n\t\t\t'token id_token',\n\t\t],\n\t\tsubject_types_supported: [\n\t\t\t'pairwise',\n\t\t],\n\t\tid_token_signing_alg_values_supported: [\n\t\t\t'RS256',\n\t\t],\n\t\tclaims_supported: [\n\t\t\t'iss',\n\t\t\t'aud',\n\t\t\t'sub',\n\t\t\t'iat',\n\t\t\t'exp',\n\t\t\t'jti',\n\t\t\t'nonce',\n\t\t\t'at_hash',\n\t\t\t'name',\n\t\t\t'given_name',\n\t\t\t'middle_name',\n\t\t\t'family_name',\n\t\t\t'email',\n\t\t\t'picture',\n\t\t\t'user_friends',\n\t\t\t'user_birthday',\n\t\t\t'user_age_range',\n\t\t\t'user_link',\n\t\t\t'user_hometown',\n\t\t\t'user_location',\n\t\t\t'user_gender',\n\t\t],\n\t\ttoken_endpoint: 'https://graph.facebook.com/v11.0/oauth/access_token',\n\t})\n\n\tvalidateConfiguration = catchTypesafe(FacebookConfiguration, InvalidIDPConfigurationError)\n\n\tpublic async initAuth(configuration: FacebookConfiguration, data: unknown): Promise<InitIDPAuthResult> {\n\t\tconst initData = catchTypesafe(OIDCInitData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await initOIDCAuth(client, {\n\t\t\tscope: configuration.scope ?? configuration.claims,\n\t\t\t...initData,\n\t\t})\n\t}\n\n\tpublic async processResponse(configuration: FacebookConfiguration, data: unknown): Promise<IDPResponse> {\n\t\tconst responseData = catchTypesafe(FacebookResponseData, IDPValidationError)(data)\n\n\t\tif (!('authResponse' in responseData)) {\n\t\t\tconst client = await this.createOIDCClient(configuration)\n\t\t\treturn await handleOIDCResponse(client, responseData)\n\t\t} else {\n\t\t\tconst [sig, payload] = responseData.authResponse.signedRequest.split('.')\n\t\t\tconst data = catchTypesafe(FacebookResponsePayload, IDPValidationError)(JSON.parse(Buffer.from(payload, 'base64').toString('utf8')))\n\t\t\tconst hmac = createHmac('sha256', configuration.clientSecret)\n\t\t\tconst signature = hmac.update(payload).digest()\n\t\t\tconst isSignatureValid = signature.compare(Buffer.from(sig, 'base64')) === 0\n\t\t\tif (!isSignatureValid) {\n\t\t\t\tthrow new IDPValidationError('Invalid signature')\n\t\t\t}\n\t\t\tconst url = `https://graph.facebook.com/${data.user_id}?fields=id,email,name&access_token=${responseData.authResponse.accessToken}`\n\t\t\tconst response = await fetch(url)\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new IDPResponseError(`Invalid Facebook response: [${response.status}] ${await response.text()}`)\n\t\t\t}\n\t\t\tconst apiData = await response.json()\n\n\t\t\treturn {\n\t\t\t\texternalIdentifier: data.user_id,\n\t\t\t\tname: apiData.name,\n\t\t\t\temail: apiData.email,\n\t\t\t}\n\t\t}\n\t}\n\n\tgetPublicConfiguration({ clientSecret, ...config }: FacebookConfiguration): Partial<FacebookConfiguration> {\n\t\treturn config\n\t}\n\n\tprivate async createOIDCClient(configuration: FacebookConfiguration): Promise<Client> {\n\t\treturn new this.facebookIssuer.Client(\n\t\t\t{\n\t\t\t\tclient_id: configuration.clientId,\n\t\t\t\tclient_secret: configuration.clientSecret,\n\t\t\t\tresponse_types: [configuration.responseType || 'code'],\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tadditionalAuthorizedParties: [...(configuration.additionalAuthorizedParties ?? [])],\n\t\t\t},\n\t\t)\n\t}\n}\n"],"names":["BaseOIDCConfiguration","Typesafe","OIDCResponseData","Issuer","catchTypesafe","InvalidIDPConfigurationError","OIDCInitData","IDPValidationError","initOIDCAuth","handleOIDCResponse","data","createHmac","IDPResponseError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,MAAM,wBAAwBA,UAAA;AAG9B,MAAM,uBAAuBC,oBAAS;AAAA,EACrCC,UAAA;AAAA,EACAD,oBAAS,OAAO;AAAA,IACf,cAAcA,oBAAS,OAAO;AAAA,MAC7B,aAAaA,oBAAS;AAAA,MACtB,eAAeA,oBAAS;AAAA,IACxB,CAAA;AAAA,EACD,CAAA;AACF;AACA,MAAM,0BAA0BA,oBAAS,OAAO;AAAA,EAC/C,SAASA,oBAAS;AAAA,EAClB,MAAMA,oBAAS;AAChB,CAAC;AAKM,MAAM,iBAA2E;AAAA,EAAjF,cAAA;AAGE,kBAAA,MAAA,kBAAiB,IAAIE,oBAAO;AAAA,MACnC,QAAQ;AAAA,MACR,wBAAwB;AAAA,MACxB,UAAU;AAAA,MACV,0BAA0B;AAAA,QACzB;AAAA,QACA;AAAA,MACD;AAAA,MACA,yBAAyB;AAAA,QACxB;AAAA,MACD;AAAA,MACA,uCAAuC;AAAA,QACtC;AAAA,MACD;AAAA,MACA,kBAAkB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MACA,gBAAgB;AAAA,IAAA,CAChB,CAAA;AAEuB,kBAAA,MAAA,yBAAAC,QAAA,cAAc,uBAAuBC,6BAA4B,4BAAA,CAAA;AAAA,EAAA;AAAA,EAEzF,MAAa,SAAS,eAAsC,MAA2C;AACtG,UAAM,WAAWD,QAAA,cAAcE,UAAc,cAAAC,mBAAkB,kBAAA,EAAE,IAAI;AACrE,UAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,WAAA,MAAMC,yBAAa,QAAQ;AAAA,MACjC,OAAO,cAAc,SAAS,cAAc;AAAA,MAC5C,GAAG;AAAA,IAAA,CACH;AAAA,EAAA;AAAA,EAGF,MAAa,gBAAgB,eAAsC,MAAqC;AACvG,UAAM,eAAeJ,QAAA,cAAc,sBAAsBG,mBAAkB,kBAAA,EAAE,IAAI;AAE7E,QAAA,EAAE,kBAAkB,eAAe;AACtC,YAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;AACjD,aAAA,MAAME,YAAAA,mBAAmB,QAAQ,YAAY;AAAA,IAAA,OAC9C;AACA,YAAA,CAAC,KAAK,OAAO,IAAI,aAAa,aAAa,cAAc,MAAM,GAAG;AACxE,YAAMC,QAAON,QAAAA,cAAc,yBAAyBG,mBAAAA,kBAAkB,EAAE,KAAK,MAAM,OAAO,KAAK,SAAS,QAAQ,EAAE,SAAS,MAAM,CAAC,CAAC;AACnI,YAAM,OAAOI,OAAA,WAAW,UAAU,cAAc,YAAY;AAC5D,YAAM,YAAY,KAAK,OAAO,OAAO,EAAE,OAAO;AACxC,YAAA,mBAAmB,UAAU,QAAQ,OAAO,KAAK,KAAK,QAAQ,CAAC,MAAM;AAC3E,UAAI,CAAC,kBAAkB;AAChB,cAAA,IAAIJ,sCAAmB,mBAAmB;AAAA,MAAA;AAEjD,YAAM,MAAM,8BAA8BG,MAAK,OAAO,sCAAsC,aAAa,aAAa,WAAW;AAC3H,YAAA,WAAW,MAAM,MAAM,GAAG;AAC5B,UAAA,CAAC,SAAS,IAAI;AACX,cAAA,IAAIE,iBAAiB,iBAAA,+BAA+B,SAAS,MAAM,KAAK,MAAM,SAAS,KAAM,CAAA,EAAE;AAAA,MAAA;AAEhG,YAAA,UAAU,MAAM,SAAS,KAAK;AAE7B,aAAA;AAAA,QACN,oBAAoBF,MAAK;AAAA,QACzB,MAAM,QAAQ;AAAA,QACd,OAAO,QAAQ;AAAA,MAChB;AAAA,IAAA;AAAA,EACD;AAAA,EAGD,uBAAuB,EAAE,cAAc,GAAG,UAAiE;AACnG,WAAA;AAAA,EAAA;AAAA,EAGR,MAAc,iBAAiB,eAAuD;AAC9E,WAAA,IAAI,KAAK,eAAe;AAAA,MAC9B;AAAA,QACC,WAAW,cAAc;AAAA,QACzB,eAAe,cAAc;AAAA,QAC7B,gBAAgB,CAAC,cAAc,gBAAgB,MAAM;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,QACC,6BAA6B,CAAC,GAAI,cAAc,+BAA+B,CAAG,CAAA;AAAA,MAAA;AAAA,IAEpF;AAAA,EAAA;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FacebookProvider.js","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/FacebookProvider.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Client, Issuer } from 'openid-client'\nimport { IdentityProviderHandler, IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { InvalidIDPConfigurationError } from '../InvalidIDPConfigurationError'\nimport { catchTypesafe } from './helpers'\nimport { BaseOIDCConfiguration, OIDCConfiguration, OIDCInitData, OIDCResponseData } from './OIDCTypes'\nimport { handleOIDCResponse, initOIDCAuth } from './OIDCHelpers'\nimport { createHmac } from 'node:crypto'\nimport { IDPResponseError } from '../IDPResponseError'\n\n\n\nconst FacebookConfiguration = BaseOIDCConfiguration\ntype FacebookConfiguration = ReturnType<typeof FacebookConfiguration>\n\nconst FacebookResponseData = Typesafe.union(\n\tOIDCResponseData,\n\tTypesafe.object({\n\t\tauthResponse: Typesafe.object({\n\t\t\taccessToken: Typesafe.string,\n\t\t\tsignedRequest: Typesafe.string,\n\t\t}),\n\t}),\n)\nconst FacebookResponsePayload = Typesafe.object({\n\tuser_id: Typesafe.string,\n\tcode: Typesafe.string,\n})\n\ntype FacebookResponseData = ReturnType<typeof FacebookResponseData>\n\n\nexport class FacebookProvider implements IdentityProviderHandler<FacebookConfiguration> {\n\t// based on https://www.facebook.com/.well-known/openid-configuration/\n\t// facebook .well-known endpoint does have \"token_endpoint\" field\n\tprivate facebookIssuer = new Issuer({\n\t\tissuer: 'https://www.facebook.com',\n\t\tauthorization_endpoint: 'https://facebook.com/dialog/oauth/',\n\t\tjwks_uri: 'https://www.facebook.com/.well-known/oauth/openid/jwks/',\n\t\tresponse_types_supported: [\n\t\t\t'id_token',\n\t\t\t'token id_token',\n\t\t],\n\t\tsubject_types_supported: [\n\t\t\t'pairwise',\n\t\t],\n\t\tid_token_signing_alg_values_supported: [\n\t\t\t'RS256',\n\t\t],\n\t\tclaims_supported: [\n\t\t\t'iss',\n\t\t\t'aud',\n\t\t\t'sub',\n\t\t\t'iat',\n\t\t\t'exp',\n\t\t\t'jti',\n\t\t\t'nonce',\n\t\t\t'at_hash',\n\t\t\t'name',\n\t\t\t'given_name',\n\t\t\t'middle_name',\n\t\t\t'family_name',\n\t\t\t'email',\n\t\t\t'picture',\n\t\t\t'user_friends',\n\t\t\t'user_birthday',\n\t\t\t'user_age_range',\n\t\t\t'user_link',\n\t\t\t'user_hometown',\n\t\t\t'user_location',\n\t\t\t'user_gender',\n\t\t],\n\t\ttoken_endpoint: 'https://graph.facebook.com/v11.0/oauth/access_token',\n\t})\n\n\tvalidateConfiguration = catchTypesafe(FacebookConfiguration, InvalidIDPConfigurationError)\n\n\tpublic async initAuth(configuration: FacebookConfiguration, data: unknown): Promise<InitIDPAuthResult> {\n\t\tconst initData = catchTypesafe(OIDCInitData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await initOIDCAuth(client, {\n\t\t\tscope: configuration.scope ?? configuration.claims,\n\t\t\t...initData,\n\t\t})\n\t}\n\n\tpublic async processResponse(configuration: FacebookConfiguration, data: unknown): Promise<IDPResponse> {\n\t\tconst responseData = catchTypesafe(FacebookResponseData, IDPValidationError)(data)\n\n\t\tif (!('authResponse' in responseData)) {\n\t\t\tconst client = await this.createOIDCClient(configuration)\n\t\t\treturn await handleOIDCResponse(client, responseData)\n\t\t} else {\n\t\t\tconst [sig, payload] = responseData.authResponse.signedRequest.split('.')\n\t\t\tconst data = catchTypesafe(FacebookResponsePayload, IDPValidationError)(JSON.parse(Buffer.from(payload, 'base64').toString('utf8')))\n\t\t\tconst hmac = createHmac('sha256', configuration.clientSecret)\n\t\t\tconst signature = hmac.update(payload).digest()\n\t\t\tconst isSignatureValid = signature.compare(Buffer.from(sig, 'base64')) === 0\n\t\t\tif (!isSignatureValid) {\n\t\t\t\tthrow new IDPValidationError('Invalid signature')\n\t\t\t}\n\t\t\tconst url = `https://graph.facebook.com/${data.user_id}?fields=id,email,name&access_token=${responseData.authResponse.accessToken}`\n\t\t\tconst response = await fetch(url)\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new IDPResponseError(`Invalid Facebook response: [${response.status}] ${await response.text()}`)\n\t\t\t}\n\t\t\tconst apiData = await response.json()\n\n\t\t\treturn {\n\t\t\t\texternalIdentifier: data.user_id,\n\t\t\t\tname: apiData.name,\n\t\t\t\temail: apiData.email,\n\t\t\t}\n\t\t}\n\t}\n\n\tgetPublicConfiguration({ clientSecret, ...config }: FacebookConfiguration): Partial<FacebookConfiguration> {\n\t\treturn config\n\t}\n\n\tprivate async createOIDCClient(configuration: FacebookConfiguration): Promise<Client> {\n\t\treturn new this.facebookIssuer.Client(\n\t\t\t{\n\t\t\t\tclient_id: configuration.clientId,\n\t\t\t\tclient_secret: configuration.clientSecret,\n\t\t\t\tresponse_types: [configuration.responseType || 'code'],\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tadditionalAuthorizedParties: [...(configuration.additionalAuthorizedParties ?? [])],\n\t\t\t},\n\t\t)\n\t}\n}\n"],"names":["data"],"mappings":"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"}
1
+ {"version":3,"file":"FacebookProvider.js","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/FacebookProvider.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Client, Issuer } from 'openid-client'\nimport { IdentityProviderHandler, IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { InvalidIDPConfigurationError } from '../InvalidIDPConfigurationError'\nimport { catchTypesafe } from './helpers'\nimport { BaseOIDCConfiguration, OIDCConfiguration, OIDCInitData, OIDCResponseData } from './OIDCTypes'\nimport { handleOIDCResponse, initOIDCAuth } from './OIDCHelpers'\nimport { createHmac } from 'node:crypto'\nimport { IDPResponseError } from '../IDPResponseError'\n\n\n\nconst FacebookConfiguration = BaseOIDCConfiguration\ntype FacebookConfiguration = ReturnType<typeof FacebookConfiguration>\n\nconst FacebookResponseData = Typesafe.union(\n\tOIDCResponseData,\n\tTypesafe.object({\n\t\tauthResponse: Typesafe.object({\n\t\t\taccessToken: Typesafe.string,\n\t\t\tsignedRequest: Typesafe.string,\n\t\t}),\n\t}),\n)\nconst FacebookResponsePayload = Typesafe.object({\n\tuser_id: Typesafe.string,\n\tcode: Typesafe.string,\n})\n\ntype FacebookResponseData = ReturnType<typeof FacebookResponseData>\n\n\nexport class FacebookProvider implements IdentityProviderHandler<FacebookConfiguration> {\n\t// based on https://www.facebook.com/.well-known/openid-configuration/\n\t// facebook .well-known endpoint does have \"token_endpoint\" field\n\tprivate facebookIssuer = new Issuer({\n\t\tissuer: 'https://www.facebook.com',\n\t\tauthorization_endpoint: 'https://facebook.com/dialog/oauth/',\n\t\tjwks_uri: 'https://www.facebook.com/.well-known/oauth/openid/jwks/',\n\t\tresponse_types_supported: [\n\t\t\t'id_token',\n\t\t\t'token id_token',\n\t\t],\n\t\tsubject_types_supported: [\n\t\t\t'pairwise',\n\t\t],\n\t\tid_token_signing_alg_values_supported: [\n\t\t\t'RS256',\n\t\t],\n\t\tclaims_supported: [\n\t\t\t'iss',\n\t\t\t'aud',\n\t\t\t'sub',\n\t\t\t'iat',\n\t\t\t'exp',\n\t\t\t'jti',\n\t\t\t'nonce',\n\t\t\t'at_hash',\n\t\t\t'name',\n\t\t\t'given_name',\n\t\t\t'middle_name',\n\t\t\t'family_name',\n\t\t\t'email',\n\t\t\t'picture',\n\t\t\t'user_friends',\n\t\t\t'user_birthday',\n\t\t\t'user_age_range',\n\t\t\t'user_link',\n\t\t\t'user_hometown',\n\t\t\t'user_location',\n\t\t\t'user_gender',\n\t\t],\n\t\ttoken_endpoint: 'https://graph.facebook.com/v11.0/oauth/access_token',\n\t})\n\n\tvalidateConfiguration = catchTypesafe(FacebookConfiguration, InvalidIDPConfigurationError)\n\n\tpublic async initAuth(configuration: FacebookConfiguration, data: unknown): Promise<InitIDPAuthResult> {\n\t\tconst initData = catchTypesafe(OIDCInitData, IDPValidationError)(data)\n\t\tconst client = await this.createOIDCClient(configuration)\n\t\treturn await initOIDCAuth(client, {\n\t\t\tscope: configuration.scope ?? configuration.claims,\n\t\t\t...initData,\n\t\t})\n\t}\n\n\tpublic async processResponse(configuration: FacebookConfiguration, data: unknown): Promise<IDPResponse> {\n\t\tconst responseData = catchTypesafe(FacebookResponseData, IDPValidationError)(data)\n\n\t\tif (!('authResponse' in responseData)) {\n\t\t\tconst client = await this.createOIDCClient(configuration)\n\t\t\treturn await handleOIDCResponse(client, responseData)\n\t\t} else {\n\t\t\tconst [sig, payload] = responseData.authResponse.signedRequest.split('.')\n\t\t\tconst data = catchTypesafe(FacebookResponsePayload, IDPValidationError)(JSON.parse(Buffer.from(payload, 'base64').toString('utf8')))\n\t\t\tconst hmac = createHmac('sha256', configuration.clientSecret)\n\t\t\tconst signature = hmac.update(payload).digest()\n\t\t\tconst isSignatureValid = signature.compare(Buffer.from(sig, 'base64')) === 0\n\t\t\tif (!isSignatureValid) {\n\t\t\t\tthrow new IDPValidationError('Invalid signature')\n\t\t\t}\n\t\t\tconst url = `https://graph.facebook.com/${data.user_id}?fields=id,email,name&access_token=${responseData.authResponse.accessToken}`\n\t\t\tconst response = await fetch(url)\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new IDPResponseError(`Invalid Facebook response: [${response.status}] ${await response.text()}`)\n\t\t\t}\n\t\t\tconst apiData = await response.json()\n\n\t\t\treturn {\n\t\t\t\texternalIdentifier: data.user_id,\n\t\t\t\tname: apiData.name,\n\t\t\t\temail: apiData.email,\n\t\t\t}\n\t\t}\n\t}\n\n\tgetPublicConfiguration({ clientSecret, ...config }: FacebookConfiguration): Partial<FacebookConfiguration> {\n\t\treturn config\n\t}\n\n\tprivate async createOIDCClient(configuration: FacebookConfiguration): Promise<Client> {\n\t\treturn new this.facebookIssuer.Client(\n\t\t\t{\n\t\t\t\tclient_id: configuration.clientId,\n\t\t\t\tclient_secret: configuration.clientSecret,\n\t\t\t\tresponse_types: [configuration.responseType || 'code'],\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tadditionalAuthorizedParties: [...(configuration.additionalAuthorizedParties ?? [])],\n\t\t\t},\n\t\t)\n\t}\n}\n"],"names":["data"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OIDCHelpers.cjs","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/OIDCHelpers.ts"],"sourcesContent":["import { Client, custom, errors, generators } from 'openid-client'\nimport { OIDCResponseData } from './OIDCTypes'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { IDPResponseError } from '../IDPResponseError'\nimport { IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\n\ncustom.setHttpOptionsDefaults({\n\ttimeout: 5000,\n})\n\nexport const initOIDCAuth = async (client: Client, { redirectUrl, scope, responseMode }: { redirectUrl: string; scope?: string; responseMode?: string }): Promise<InitIDPAuthResult> => {\n\tconst nonce = generators.nonce()\n\tconst state = generators.state()\n\tconst url = client.authorizationUrl({\n\t\tredirect_uri: redirectUrl,\n\t\tresponse_mode: responseMode,\n\t\tscope: scope ?? 'openid email',\n\t\tnonce,\n\t\tstate,\n\t})\n\n\treturn {\n\t\tauthUrl: url,\n\t\tsessionData: { nonce, state },\n\t}\n}\n\nexport const handleOIDCResponse = async (client: Client, { sessionData, redirectUrl, ...otherData }: OIDCResponseData, fetchUserInfo?: boolean, returnOIDCResult?: boolean): Promise<IDPResponse> => {\n\tconst params = 'parameters' in otherData ? otherData.parameters : client.callbackParams(otherData.url)\n\tif (params.state && !sessionData?.state) {\n\t\tthrow new IDPValidationError(`state is present in parameters, but missing in session data`)\n\t}\n\ttry {\n\t\tconst result = await client.callback(redirectUrl, params, sessionData)\n\t\tconst claims = result.claims()\n\t\tconst { at_hash, c_hash, nonce, ...claimsWithoutHashes } = claims\n\t\tconst userInfo = result.access_token && fetchUserInfo ? await client.userinfo(result) : {}\n\t\tconst oidcResult = returnOIDCResult ? result : {}\n\t\t\n\t\treturn {\n\t\t\texternalIdentifier: claims.sub,\n\t\t\t...oidcResult,\n\t\t\t...claimsWithoutHashes,\n\t\t\t...userInfo,\n\t\t}\n\t} catch (e: any) {\n\t\tif (e instanceof errors.RPError) {\n\t\t\tthrow new IDPValidationError(e.message)\n\t\t}\n\t\tif (e instanceof errors.OPError) {\n\t\t\tconst body = e.response?.body as any\n\t\t\tif (typeof body === 'object' && typeof body?.error === 'object' && typeof body.error?.message === 'string') {\n\t\t\t\tthrow new IDPResponseError(body.error.message)\n\t\t\t}\n\t\t\tthrow new IDPResponseError(e.message)\n\t\t}\n\t\tthrow e\n\t}\n}\n"],"names":["custom","generators","IDPValidationError","errors","IDPResponseError"],"mappings":";;;;;AAMAA,aAAA,OAAO,uBAAuB;AAAA,EAC7B,SAAS;AACV,CAAC;AAEM,MAAM,eAAe,OAAO,QAAgB,EAAE,aAAa,OAAO,mBAA+G;AACjL,QAAA,QAAQC,wBAAW;AACnB,QAAA,QAAQA,wBAAW;AACnB,QAAA,MAAM,OAAO,iBAAiB;AAAA,IACnC,cAAc;AAAA,IACd,eAAe;AAAA,IACf,OAAO,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,EAAA,CACA;AAEM,SAAA;AAAA,IACN,SAAS;AAAA,IACT,aAAa,EAAE,OAAO,MAAM;AAAA,EAAA;AAE9B;AAEa,MAAA,qBAAqB,OAAO,QAAgB,EAAE,aAAa,aAAa,GAAG,UAAA,GAA+B,eAAyB,qBAAqD;AAC9L,QAAA,SAAS,gBAAgB,YAAY,UAAU,aAAa,OAAO,eAAe,UAAU,GAAG;AACrG,MAAI,OAAO,SAAS,CAAC,aAAa,OAAO;AAClC,UAAA,IAAIC,sCAAmB,6DAA6D;AAAA,EAC3F;AACI,MAAA;AACH,UAAM,SAAS,MAAM,OAAO,SAAS,aAAa,QAAQ,WAAW;AAC/D,UAAA,SAAS,OAAO;AACtB,UAAM,EAAE,SAAS,QAAQ,OAAO,GAAG,oBAAwB,IAAA;AACrD,UAAA,WAAW,OAAO,gBAAgB,gBAAgB,MAAM,OAAO,SAAS,MAAM,IAAI;AAClF,UAAA,aAAa,mBAAmB,SAAS;AAExC,WAAA;AAAA,MACN,oBAAoB,OAAO;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,WAEI,GAAQ;AACZ,QAAA,aAAaC,oBAAO,SAAS;AAC1B,YAAA,IAAID,mBAAmB,mBAAA,EAAE,OAAO;AAAA,IACvC;AACI,QAAA,aAAaC,oBAAO,SAAS;AAC1B,YAAA,OAAO,EAAE,UAAU;AACrB,UAAA,OAAO,SAAS,YAAY,OAAO,MAAM,UAAU,YAAY,OAAO,KAAK,OAAO,YAAY,UAAU;AAC3G,cAAM,IAAIC,iBAAAA,iBAAiB,KAAK,MAAM,OAAO;AAAA,MAC9C;AACM,YAAA,IAAIA,iBAAiB,iBAAA,EAAE,OAAO;AAAA,IACrC;AACM,UAAA;AAAA,EACP;AACD;;;"}
1
+ {"version":3,"file":"OIDCHelpers.cjs","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/OIDCHelpers.ts"],"sourcesContent":["import { Client, custom, errors, generators } from 'openid-client'\nimport { OIDCResponseData } from './OIDCTypes'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { IDPResponseError } from '../IDPResponseError'\nimport { IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\n\ncustom.setHttpOptionsDefaults({\n\ttimeout: 5000,\n})\n\nexport const initOIDCAuth = async (client: Client, { redirectUrl, scope, responseMode }: { redirectUrl: string; scope?: string; responseMode?: string }): Promise<InitIDPAuthResult> => {\n\tconst nonce = generators.nonce()\n\tconst state = generators.state()\n\tconst url = client.authorizationUrl({\n\t\tredirect_uri: redirectUrl,\n\t\tresponse_mode: responseMode,\n\t\tscope: scope ?? 'openid email',\n\t\tnonce,\n\t\tstate,\n\t})\n\n\treturn {\n\t\tauthUrl: url,\n\t\tsessionData: { nonce, state },\n\t}\n}\n\nexport const handleOIDCResponse = async (client: Client, { sessionData, redirectUrl, ...otherData }: OIDCResponseData, fetchUserInfo?: boolean, returnOIDCResult?: boolean): Promise<IDPResponse> => {\n\tconst params = 'parameters' in otherData ? otherData.parameters : client.callbackParams(otherData.url)\n\tif (params.state && !sessionData?.state) {\n\t\tthrow new IDPValidationError(`state is present in parameters, but missing in session data`)\n\t}\n\ttry {\n\t\tconst result = await client.callback(redirectUrl, params, sessionData)\n\t\tconst claims = result.claims()\n\t\tconst { at_hash, c_hash, nonce, ...claimsWithoutHashes } = claims\n\t\tconst userInfo = result.access_token && fetchUserInfo ? await client.userinfo(result) : {}\n\t\tconst oidcResult = returnOIDCResult ? result : {}\n\t\t\n\t\treturn {\n\t\t\texternalIdentifier: claims.sub,\n\t\t\t...oidcResult,\n\t\t\t...claimsWithoutHashes,\n\t\t\t...userInfo,\n\t\t}\n\t} catch (e: any) {\n\t\tif (e instanceof errors.RPError) {\n\t\t\tthrow new IDPValidationError(e.message)\n\t\t}\n\t\tif (e instanceof errors.OPError) {\n\t\t\tconst body = e.response?.body as any\n\t\t\tif (typeof body === 'object' && typeof body?.error === 'object' && typeof body.error?.message === 'string') {\n\t\t\t\tthrow new IDPResponseError(body.error.message)\n\t\t\t}\n\t\t\tthrow new IDPResponseError(e.message)\n\t\t}\n\t\tthrow e\n\t}\n}\n"],"names":["custom","generators","IDPValidationError","errors","IDPResponseError"],"mappings":";;;;;AAMAA,aAAA,OAAO,uBAAuB;AAAA,EAC7B,SAAS;AACV,CAAC;AAEM,MAAM,eAAe,OAAO,QAAgB,EAAE,aAAa,OAAO,mBAA+G;AACjL,QAAA,QAAQC,wBAAW,MAAM;AACzB,QAAA,QAAQA,wBAAW,MAAM;AACzB,QAAA,MAAM,OAAO,iBAAiB;AAAA,IACnC,cAAc;AAAA,IACd,eAAe;AAAA,IACf,OAAO,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,EAAA,CACA;AAEM,SAAA;AAAA,IACN,SAAS;AAAA,IACT,aAAa,EAAE,OAAO,MAAM;AAAA,EAC7B;AACD;AAEa,MAAA,qBAAqB,OAAO,QAAgB,EAAE,aAAa,aAAa,GAAG,UAAA,GAA+B,eAAyB,qBAAqD;AAC9L,QAAA,SAAS,gBAAgB,YAAY,UAAU,aAAa,OAAO,eAAe,UAAU,GAAG;AACrG,MAAI,OAAO,SAAS,CAAC,aAAa,OAAO;AAClC,UAAA,IAAIC,mBAAAA,mBAAmB,6DAA6D;AAAA,EAAA;AAEvF,MAAA;AACH,UAAM,SAAS,MAAM,OAAO,SAAS,aAAa,QAAQ,WAAW;AAC/D,UAAA,SAAS,OAAO,OAAO;AAC7B,UAAM,EAAE,SAAS,QAAQ,OAAO,GAAG,oBAAwB,IAAA;AACrD,UAAA,WAAW,OAAO,gBAAgB,gBAAgB,MAAM,OAAO,SAAS,MAAM,IAAI,CAAC;AACnF,UAAA,aAAa,mBAAmB,SAAS,CAAC;AAEzC,WAAA;AAAA,MACN,oBAAoB,OAAO;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACJ;AAAA,WACQ,GAAQ;AACZ,QAAA,aAAaC,oBAAO,SAAS;AAC1B,YAAA,IAAID,mBAAAA,mBAAmB,EAAE,OAAO;AAAA,IAAA;AAEnC,QAAA,aAAaC,oBAAO,SAAS;AAC1B,YAAA,OAAO,EAAE,UAAU;AACrB,UAAA,OAAO,SAAS,YAAY,OAAO,MAAM,UAAU,YAAY,OAAO,KAAK,OAAO,YAAY,UAAU;AAC3G,cAAM,IAAIC,iBAAA,iBAAiB,KAAK,MAAM,OAAO;AAAA,MAAA;AAExC,YAAA,IAAIA,iBAAAA,iBAAiB,EAAE,OAAO;AAAA,IAAA;AAE/B,UAAA;AAAA,EAAA;AAER;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"OIDCHelpers.js","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/OIDCHelpers.ts"],"sourcesContent":["import { Client, custom, errors, generators } from 'openid-client'\nimport { OIDCResponseData } from './OIDCTypes'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { IDPResponseError } from '../IDPResponseError'\nimport { IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\n\ncustom.setHttpOptionsDefaults({\n\ttimeout: 5000,\n})\n\nexport const initOIDCAuth = async (client: Client, { redirectUrl, scope, responseMode }: { redirectUrl: string; scope?: string; responseMode?: string }): Promise<InitIDPAuthResult> => {\n\tconst nonce = generators.nonce()\n\tconst state = generators.state()\n\tconst url = client.authorizationUrl({\n\t\tredirect_uri: redirectUrl,\n\t\tresponse_mode: responseMode,\n\t\tscope: scope ?? 'openid email',\n\t\tnonce,\n\t\tstate,\n\t})\n\n\treturn {\n\t\tauthUrl: url,\n\t\tsessionData: { nonce, state },\n\t}\n}\n\nexport const handleOIDCResponse = async (client: Client, { sessionData, redirectUrl, ...otherData }: OIDCResponseData, fetchUserInfo?: boolean, returnOIDCResult?: boolean): Promise<IDPResponse> => {\n\tconst params = 'parameters' in otherData ? otherData.parameters : client.callbackParams(otherData.url)\n\tif (params.state && !sessionData?.state) {\n\t\tthrow new IDPValidationError(`state is present in parameters, but missing in session data`)\n\t}\n\ttry {\n\t\tconst result = await client.callback(redirectUrl, params, sessionData)\n\t\tconst claims = result.claims()\n\t\tconst { at_hash, c_hash, nonce, ...claimsWithoutHashes } = claims\n\t\tconst userInfo = result.access_token && fetchUserInfo ? await client.userinfo(result) : {}\n\t\tconst oidcResult = returnOIDCResult ? result : {}\n\t\t\n\t\treturn {\n\t\t\texternalIdentifier: claims.sub,\n\t\t\t...oidcResult,\n\t\t\t...claimsWithoutHashes,\n\t\t\t...userInfo,\n\t\t}\n\t} catch (e: any) {\n\t\tif (e instanceof errors.RPError) {\n\t\t\tthrow new IDPValidationError(e.message)\n\t\t}\n\t\tif (e instanceof errors.OPError) {\n\t\t\tconst body = e.response?.body as any\n\t\t\tif (typeof body === 'object' && typeof body?.error === 'object' && typeof body.error?.message === 'string') {\n\t\t\t\tthrow new IDPResponseError(body.error.message)\n\t\t\t}\n\t\t\tthrow new IDPResponseError(e.message)\n\t\t}\n\t\tthrow e\n\t}\n}\n"],"names":[],"mappings":";;;AAMA,OAAO,uBAAuB;AAAA,EAC7B,SAAS;AACV,CAAC;AAEM,MAAM,eAAe,OAAO,QAAgB,EAAE,aAAa,OAAO,mBAA+G;AACjL,QAAA,QAAQ,WAAW;AACnB,QAAA,QAAQ,WAAW;AACnB,QAAA,MAAM,OAAO,iBAAiB;AAAA,IACnC,cAAc;AAAA,IACd,eAAe;AAAA,IACf,OAAO,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,EAAA,CACA;AAEM,SAAA;AAAA,IACN,SAAS;AAAA,IACT,aAAa,EAAE,OAAO,MAAM;AAAA,EAAA;AAE9B;AAEa,MAAA,qBAAqB,OAAO,QAAgB,EAAE,aAAa,aAAa,GAAG,UAAA,GAA+B,eAAyB,qBAAqD;AAC9L,QAAA,SAAS,gBAAgB,YAAY,UAAU,aAAa,OAAO,eAAe,UAAU,GAAG;AACrG,MAAI,OAAO,SAAS,CAAC,aAAa,OAAO;AAClC,UAAA,IAAI,mBAAmB,6DAA6D;AAAA,EAC3F;AACI,MAAA;AACH,UAAM,SAAS,MAAM,OAAO,SAAS,aAAa,QAAQ,WAAW;AAC/D,UAAA,SAAS,OAAO;AACtB,UAAM,EAAE,SAAS,QAAQ,OAAO,GAAG,oBAAwB,IAAA;AACrD,UAAA,WAAW,OAAO,gBAAgB,gBAAgB,MAAM,OAAO,SAAS,MAAM,IAAI;AAClF,UAAA,aAAa,mBAAmB,SAAS;AAExC,WAAA;AAAA,MACN,oBAAoB,OAAO;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,WAEI,GAAQ;AACZ,QAAA,aAAa,OAAO,SAAS;AAC1B,YAAA,IAAI,mBAAmB,EAAE,OAAO;AAAA,IACvC;AACI,QAAA,aAAa,OAAO,SAAS;AAC1B,YAAA,OAAO,EAAE,UAAU;AACrB,UAAA,OAAO,SAAS,YAAY,OAAO,MAAM,UAAU,YAAY,OAAO,KAAK,OAAO,YAAY,UAAU;AAC3G,cAAM,IAAI,iBAAiB,KAAK,MAAM,OAAO;AAAA,MAC9C;AACM,YAAA,IAAI,iBAAiB,EAAE,OAAO;AAAA,IACrC;AACM,UAAA;AAAA,EACP;AACD;"}
1
+ {"version":3,"file":"OIDCHelpers.js","sources":["../../../../../../../../packages/engine-tenant-api/src/model/service/idp/providers/OIDCHelpers.ts"],"sourcesContent":["import { Client, custom, errors, generators } from 'openid-client'\nimport { OIDCResponseData } from './OIDCTypes'\nimport { IDPValidationError } from '../IDPValidationError'\nimport { IDPResponseError } from '../IDPResponseError'\nimport { IDPResponse, InitIDPAuthResult } from '../IdentityProviderHandler'\n\ncustom.setHttpOptionsDefaults({\n\ttimeout: 5000,\n})\n\nexport const initOIDCAuth = async (client: Client, { redirectUrl, scope, responseMode }: { redirectUrl: string; scope?: string; responseMode?: string }): Promise<InitIDPAuthResult> => {\n\tconst nonce = generators.nonce()\n\tconst state = generators.state()\n\tconst url = client.authorizationUrl({\n\t\tredirect_uri: redirectUrl,\n\t\tresponse_mode: responseMode,\n\t\tscope: scope ?? 'openid email',\n\t\tnonce,\n\t\tstate,\n\t})\n\n\treturn {\n\t\tauthUrl: url,\n\t\tsessionData: { nonce, state },\n\t}\n}\n\nexport const handleOIDCResponse = async (client: Client, { sessionData, redirectUrl, ...otherData }: OIDCResponseData, fetchUserInfo?: boolean, returnOIDCResult?: boolean): Promise<IDPResponse> => {\n\tconst params = 'parameters' in otherData ? otherData.parameters : client.callbackParams(otherData.url)\n\tif (params.state && !sessionData?.state) {\n\t\tthrow new IDPValidationError(`state is present in parameters, but missing in session data`)\n\t}\n\ttry {\n\t\tconst result = await client.callback(redirectUrl, params, sessionData)\n\t\tconst claims = result.claims()\n\t\tconst { at_hash, c_hash, nonce, ...claimsWithoutHashes } = claims\n\t\tconst userInfo = result.access_token && fetchUserInfo ? await client.userinfo(result) : {}\n\t\tconst oidcResult = returnOIDCResult ? result : {}\n\t\t\n\t\treturn {\n\t\t\texternalIdentifier: claims.sub,\n\t\t\t...oidcResult,\n\t\t\t...claimsWithoutHashes,\n\t\t\t...userInfo,\n\t\t}\n\t} catch (e: any) {\n\t\tif (e instanceof errors.RPError) {\n\t\t\tthrow new IDPValidationError(e.message)\n\t\t}\n\t\tif (e instanceof errors.OPError) {\n\t\t\tconst body = e.response?.body as any\n\t\t\tif (typeof body === 'object' && typeof body?.error === 'object' && typeof body.error?.message === 'string') {\n\t\t\t\tthrow new IDPResponseError(body.error.message)\n\t\t\t}\n\t\t\tthrow new IDPResponseError(e.message)\n\t\t}\n\t\tthrow e\n\t}\n}\n"],"names":[],"mappings":";;;AAMA,OAAO,uBAAuB;AAAA,EAC7B,SAAS;AACV,CAAC;AAEM,MAAM,eAAe,OAAO,QAAgB,EAAE,aAAa,OAAO,mBAA+G;AACjL,QAAA,QAAQ,WAAW,MAAM;AACzB,QAAA,QAAQ,WAAW,MAAM;AACzB,QAAA,MAAM,OAAO,iBAAiB;AAAA,IACnC,cAAc;AAAA,IACd,eAAe;AAAA,IACf,OAAO,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,EAAA,CACA;AAEM,SAAA;AAAA,IACN,SAAS;AAAA,IACT,aAAa,EAAE,OAAO,MAAM;AAAA,EAC7B;AACD;AAEa,MAAA,qBAAqB,OAAO,QAAgB,EAAE,aAAa,aAAa,GAAG,UAAA,GAA+B,eAAyB,qBAAqD;AAC9L,QAAA,SAAS,gBAAgB,YAAY,UAAU,aAAa,OAAO,eAAe,UAAU,GAAG;AACrG,MAAI,OAAO,SAAS,CAAC,aAAa,OAAO;AAClC,UAAA,IAAI,mBAAmB,6DAA6D;AAAA,EAAA;AAEvF,MAAA;AACH,UAAM,SAAS,MAAM,OAAO,SAAS,aAAa,QAAQ,WAAW;AAC/D,UAAA,SAAS,OAAO,OAAO;AAC7B,UAAM,EAAE,SAAS,QAAQ,OAAO,GAAG,oBAAwB,IAAA;AACrD,UAAA,WAAW,OAAO,gBAAgB,gBAAgB,MAAM,OAAO,SAAS,MAAM,IAAI,CAAC;AACnF,UAAA,aAAa,mBAAmB,SAAS,CAAC;AAEzC,WAAA;AAAA,MACN,oBAAoB,OAAO;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACJ;AAAA,WACQ,GAAQ;AACZ,QAAA,aAAa,OAAO,SAAS;AAC1B,YAAA,IAAI,mBAAmB,EAAE,OAAO;AAAA,IAAA;AAEnC,QAAA,aAAa,OAAO,SAAS;AAC1B,YAAA,OAAO,EAAE,UAAU;AACrB,UAAA,OAAO,SAAS,YAAY,OAAO,MAAM,UAAU,YAAY,OAAO,KAAK,OAAO,YAAY,UAAU;AAC3G,cAAM,IAAI,iBAAiB,KAAK,MAAM,OAAO;AAAA,MAAA;AAExC,YAAA,IAAI,iBAAiB,EAAE,OAAO;AAAA,IAAA;AAE/B,UAAA;AAAA,EAAA;AAER;"}