@proconnect-gouv/proconnect.identite 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/dist/data/organization/domains-whitelist.d.ts +2 -0
  3. package/dist/data/organization/domains-whitelist.d.ts.map +1 -0
  4. package/dist/data/organization/domains-whitelist.js +7 -0
  5. package/dist/data/organization/index.d.ts +2 -0
  6. package/dist/data/organization/index.d.ts.map +1 -0
  7. package/dist/data/organization/index.js +2 -0
  8. package/dist/errors/index.d.ts +22 -0
  9. package/dist/errors/index.d.ts.map +1 -0
  10. package/dist/errors/index.js +43 -0
  11. package/dist/managers/certification/distance.d.ts +4 -0
  12. package/dist/managers/certification/distance.d.ts.map +1 -0
  13. package/dist/managers/certification/distance.js +16 -0
  14. package/dist/managers/certification/index.d.ts +3 -0
  15. package/dist/managers/certification/index.d.ts.map +1 -0
  16. package/dist/managers/certification/index.js +3 -0
  17. package/dist/managers/certification/is-organization-dirigeant.d.ts +15 -0
  18. package/dist/managers/certification/is-organization-dirigeant.d.ts.map +1 -0
  19. package/dist/managers/certification/is-organization-dirigeant.js +60 -0
  20. package/dist/managers/franceconnect/index.d.ts +2 -0
  21. package/dist/managers/franceconnect/index.d.ts.map +1 -0
  22. package/dist/managers/franceconnect/index.js +2 -0
  23. package/dist/managers/franceconnect/openid-client.d.ts +37 -0
  24. package/dist/managers/franceconnect/openid-client.d.ts.map +1 -0
  25. package/dist/managers/franceconnect/openid-client.js +54 -0
  26. package/dist/managers/organization/force-join-organization.d.ts +29 -0
  27. package/dist/managers/organization/force-join-organization.d.ts.map +1 -0
  28. package/dist/managers/organization/force-join-organization.js +33 -0
  29. package/dist/managers/organization/get-organization-info.d.ts +5 -0
  30. package/dist/managers/organization/get-organization-info.d.ts.map +1 -0
  31. package/dist/managers/organization/get-organization-info.js +33 -0
  32. package/dist/managers/organization/index.d.ts +4 -0
  33. package/dist/managers/organization/index.d.ts.map +1 -0
  34. package/dist/managers/organization/index.js +4 -0
  35. package/dist/managers/organization/mark-domain-as-verified.d.ts +20 -0
  36. package/dist/managers/organization/mark-domain-as-verified.d.ts.map +1 -0
  37. package/dist/managers/organization/mark-domain-as-verified.js +63 -0
  38. package/dist/managers/user/assign-user-verification-type-to-domain.d.ts +10 -0
  39. package/dist/managers/user/assign-user-verification-type-to-domain.d.ts.map +1 -0
  40. package/dist/managers/user/assign-user-verification-type-to-domain.js +21 -0
  41. package/dist/managers/user/index.d.ts +2 -0
  42. package/dist/managers/user/index.d.ts.map +1 -0
  43. package/dist/managers/user/index.js +1 -0
  44. package/dist/mappers/certification/index.d.ts +4 -0
  45. package/dist/mappers/certification/index.d.ts.map +1 -0
  46. package/dist/mappers/certification/index.js +11 -0
  47. package/dist/mappers/index.d.ts +2 -0
  48. package/dist/mappers/index.d.ts.map +1 -0
  49. package/dist/mappers/index.js +2 -0
  50. package/dist/mappers/organization/from-siret.d.ts +5 -0
  51. package/dist/mappers/organization/from-siret.d.ts.map +1 -0
  52. package/dist/mappers/organization/from-siret.js +51 -0
  53. package/dist/mappers/organization/index.d.ts +2 -0
  54. package/dist/mappers/organization/index.d.ts.map +1 -0
  55. package/dist/mappers/organization/index.js +2 -0
  56. package/dist/repositories/email-domain/add-domain.d.ts +8 -0
  57. package/dist/repositories/email-domain/add-domain.d.ts.map +1 -0
  58. package/dist/repositories/email-domain/add-domain.js +25 -0
  59. package/dist/repositories/email-domain/delete-email-domains-by-verification-types.d.ts +8 -0
  60. package/dist/repositories/email-domain/delete-email-domains-by-verification-types.d.ts.map +1 -0
  61. package/dist/repositories/email-domain/delete-email-domains-by-verification-types.js +21 -0
  62. package/dist/repositories/email-domain/find-email-domains-by-organization-id.d.ts +4 -0
  63. package/dist/repositories/email-domain/find-email-domains-by-organization-id.d.ts.map +1 -0
  64. package/dist/repositories/email-domain/find-email-domains-by-organization-id.js +11 -0
  65. package/dist/repositories/email-domain/index.d.ts +12 -0
  66. package/dist/repositories/email-domain/index.d.ts.map +1 -0
  67. package/dist/repositories/email-domain/index.js +3 -0
  68. package/dist/repositories/organization/find-by-id.d.ts +4 -0
  69. package/dist/repositories/organization/find-by-id.d.ts.map +1 -0
  70. package/dist/repositories/organization/find-by-id.js +11 -0
  71. package/dist/repositories/organization/find-by-user-id.d.ts +12 -0
  72. package/dist/repositories/organization/find-by-user-id.d.ts.map +1 -0
  73. package/dist/repositories/organization/find-by-user-id.js +22 -0
  74. package/dist/repositories/organization/get-by-id.d.ts +4 -0
  75. package/dist/repositories/organization/get-by-id.d.ts.map +1 -0
  76. package/dist/repositories/organization/get-by-id.js +15 -0
  77. package/dist/repositories/organization/get-users-by-organization.d.ts +12 -0
  78. package/dist/repositories/organization/get-users-by-organization.d.ts.map +1 -0
  79. package/dist/repositories/organization/get-users-by-organization.js +23 -0
  80. package/dist/repositories/organization/index.d.ts +7 -0
  81. package/dist/repositories/organization/index.d.ts.map +1 -0
  82. package/dist/repositories/organization/index.js +7 -0
  83. package/dist/repositories/organization/link-user-to-organization.d.ts +16 -0
  84. package/dist/repositories/organization/link-user-to-organization.d.ts.map +1 -0
  85. package/dist/repositories/organization/link-user-to-organization.js +22 -0
  86. package/dist/repositories/organization/upsert.d.ts +7 -0
  87. package/dist/repositories/organization/upsert.d.ts.map +1 -0
  88. package/dist/repositories/organization/upsert.js +103 -0
  89. package/dist/repositories/user/create.d.ts +7 -0
  90. package/dist/repositories/user/create.d.ts.map +1 -0
  91. package/dist/repositories/user/create.js +25 -0
  92. package/dist/repositories/user/find-by-email.d.ts +4 -0
  93. package/dist/repositories/user/find-by-email.d.ts.map +1 -0
  94. package/dist/repositories/user/find-by-email.js +12 -0
  95. package/dist/repositories/user/find-by-id.d.ts +4 -0
  96. package/dist/repositories/user/find-by-id.d.ts.map +1 -0
  97. package/dist/repositories/user/find-by-id.js +13 -0
  98. package/dist/repositories/user/get-by-id.d.ts +4 -0
  99. package/dist/repositories/user/get-by-id.d.ts.map +1 -0
  100. package/dist/repositories/user/get-by-id.js +15 -0
  101. package/dist/repositories/user/get-franceconnect-user-info.d.ts +15 -0
  102. package/dist/repositories/user/get-franceconnect-user-info.d.ts.map +1 -0
  103. package/dist/repositories/user/get-franceconnect-user-info.js +13 -0
  104. package/dist/repositories/user/index.d.ts +9 -0
  105. package/dist/repositories/user/index.d.ts.map +1 -0
  106. package/dist/repositories/user/index.js +9 -0
  107. package/dist/repositories/user/update-user-organization-link.d.ts +16 -0
  108. package/dist/repositories/user/update-user-organization-link.d.ts.map +1 -0
  109. package/dist/repositories/user/update-user-organization-link.js +20 -0
  110. package/dist/repositories/user/update.d.ts +4 -0
  111. package/dist/repositories/user/update.d.ts.map +1 -0
  112. package/dist/repositories/user/update.js +19 -0
  113. package/dist/repositories/user/upsert-franceconnect-userinfo.d.ts +15 -0
  114. package/dist/repositories/user/upsert-franceconnect-userinfo.d.ts.map +1 -0
  115. package/dist/repositories/user/upsert-franceconnect-userinfo.js +23 -0
  116. package/dist/services/organization/index.d.ts +3 -0
  117. package/dist/services/organization/index.d.ts.map +1 -0
  118. package/dist/services/organization/index.js +3 -0
  119. package/dist/services/organization/is-domain-allowed-for-organization.d.ts +2 -0
  120. package/dist/services/organization/is-domain-allowed-for-organization.d.ts.map +1 -0
  121. package/dist/services/organization/is-domain-allowed-for-organization.js +8 -0
  122. package/dist/services/organization/is-entreprise-unipersonnelle.d.ts +9 -0
  123. package/dist/services/organization/is-entreprise-unipersonnelle.d.ts.map +1 -0
  124. package/dist/services/organization/is-entreprise-unipersonnelle.js +18 -0
  125. package/dist/services/postgres/hash-to-postgres-params.d.ts +6 -0
  126. package/dist/services/postgres/hash-to-postgres-params.d.ts.map +1 -0
  127. package/dist/services/postgres/hash-to-postgres-params.js +21 -0
  128. package/dist/services/postgres/index.d.ts +2 -0
  129. package/dist/services/postgres/index.d.ts.map +1 -0
  130. package/dist/services/postgres/index.js +2 -0
  131. package/dist/types/claims.d.ts +16 -0
  132. package/dist/types/claims.d.ts.map +1 -0
  133. package/dist/types/claims.js +16 -0
  134. package/dist/types/contexts.d.ts +5 -0
  135. package/dist/types/contexts.d.ts.map +1 -0
  136. package/dist/types/contexts.js +2 -0
  137. package/dist/types/dirigeant.d.ts +9 -0
  138. package/dist/types/dirigeant.d.ts.map +1 -0
  139. package/dist/types/dirigeant.js +9 -0
  140. package/dist/types/email-domain.d.ts +25 -0
  141. package/dist/types/email-domain.d.ts.map +1 -0
  142. package/dist/types/email-domain.js +14 -0
  143. package/dist/types/franceconnect.d.ts +28 -0
  144. package/dist/types/franceconnect.d.ts.map +1 -0
  145. package/dist/types/franceconnect.js +22 -0
  146. package/dist/types/index.d.ts +10 -0
  147. package/dist/types/index.d.ts.map +1 -0
  148. package/dist/types/index.js +10 -0
  149. package/dist/types/organization-info.d.ts +27 -0
  150. package/dist/types/organization-info.d.ts.map +1 -0
  151. package/dist/types/organization-info.js +26 -0
  152. package/dist/types/organization.d.ts +26 -0
  153. package/dist/types/organization.d.ts.map +1 -0
  154. package/dist/types/organization.js +2 -0
  155. package/dist/types/user-organization-link.d.ts +92 -0
  156. package/dist/types/user-organization-link.d.ts.map +1 -0
  157. package/dist/types/user-organization-link.js +44 -0
  158. package/dist/types/user.d.ts +28 -0
  159. package/dist/types/user.d.ts.map +1 -0
  160. package/dist/types/user.js +2 -0
  161. package/package.json +68 -0
  162. package/src/data/organization/domains-whitelist.ts +8 -0
  163. package/src/data/organization/index.ts +3 -0
  164. package/src/errors/index.ts +50 -0
  165. package/src/managers/certification/distance.test.ts +109 -0
  166. package/src/managers/certification/distance.ts +41 -0
  167. package/src/managers/certification/index.ts +4 -0
  168. package/src/managers/certification/is-organization-dirigeant.test.ts +125 -0
  169. package/src/managers/certification/is-organization-dirigeant.ts +136 -0
  170. package/src/managers/franceconnect/index.ts +3 -0
  171. package/src/managers/franceconnect/openid-client.ts +131 -0
  172. package/src/managers/organization/force-join-organization.test.ts +94 -0
  173. package/src/managers/organization/force-join-organization.ts +90 -0
  174. package/src/managers/organization/get-organization-info.test.ts +47 -0
  175. package/src/managers/organization/get-organization-info.test.ts.snapshot +68 -0
  176. package/src/managers/organization/get-organization-info.ts +58 -0
  177. package/src/managers/organization/index.ts +5 -0
  178. package/src/managers/organization/mark-domain-as-verified.test.ts +90 -0
  179. package/src/managers/organization/mark-domain-as-verified.test.ts.snapshot +52 -0
  180. package/src/managers/organization/mark-domain-as-verified.ts +140 -0
  181. package/src/managers/user/assign-user-verification-type-to-domain.ts +50 -0
  182. package/src/managers/user/index.ts +1 -0
  183. package/src/mappers/certification/index.ts +18 -0
  184. package/src/mappers/index.ts +3 -0
  185. package/src/mappers/organization/from-siret.test.ts +26 -0
  186. package/src/mappers/organization/from-siret.test.ts.snapshot +68 -0
  187. package/src/mappers/organization/from-siret.ts +75 -0
  188. package/src/mappers/organization/index.ts +3 -0
  189. package/src/repositories/email-domain/add-domain.test.ts +43 -0
  190. package/src/repositories/email-domain/add-domain.ts +48 -0
  191. package/src/repositories/email-domain/delete-email-domains-by-verification-types.test.ts +49 -0
  192. package/src/repositories/email-domain/delete-email-domains-by-verification-types.ts +45 -0
  193. package/src/repositories/email-domain/find-email-domains-by-organization-id.test.ts +55 -0
  194. package/src/repositories/email-domain/find-email-domains-by-organization-id.ts +28 -0
  195. package/src/repositories/email-domain/index.ts +13 -0
  196. package/src/repositories/organization/find-by-id.test.ts +51 -0
  197. package/src/repositories/organization/find-by-id.ts +22 -0
  198. package/src/repositories/organization/find-by-user-id.test.ts +70 -0
  199. package/src/repositories/organization/find-by-user-id.test.ts.snapshot +102 -0
  200. package/src/repositories/organization/find-by-user-id.ts +38 -0
  201. package/src/repositories/organization/get-by-id.test.ts +60 -0
  202. package/src/repositories/organization/get-by-id.ts +21 -0
  203. package/src/repositories/organization/get-users-by-organization.test.ts +50 -0
  204. package/src/repositories/organization/get-users-by-organization.test.ts.snapshot +38 -0
  205. package/src/repositories/organization/get-users-by-organization.ts +46 -0
  206. package/src/repositories/organization/index.ts +8 -0
  207. package/src/repositories/organization/link-user-to-organization.test.ts +65 -0
  208. package/src/repositories/organization/link-user-to-organization.test.ts.snapshot +31 -0
  209. package/src/repositories/organization/link-user-to-organization.ts +45 -0
  210. package/src/repositories/organization/upsert.ts +142 -0
  211. package/src/repositories/organization/upset.test.ts +95 -0
  212. package/src/repositories/user/create.test.ts +49 -0
  213. package/src/repositories/user/create.ts +44 -0
  214. package/src/repositories/user/find-by-email.test.ts +62 -0
  215. package/src/repositories/user/find-by-email.ts +22 -0
  216. package/src/repositories/user/find-by-id.test.ts +64 -0
  217. package/src/repositories/user/find-by-id.ts +23 -0
  218. package/src/repositories/user/get-by-id.test.ts +63 -0
  219. package/src/repositories/user/get-by-id.ts +21 -0
  220. package/src/repositories/user/get-franceconnect-user-info.test.ts +58 -0
  221. package/src/repositories/user/get-franceconnect-user-info.ts +25 -0
  222. package/src/repositories/user/index.ts +10 -0
  223. package/src/repositories/user/update-user-organization-link.test.ts +46 -0
  224. package/src/repositories/user/update-user-organization-link.ts +42 -0
  225. package/src/repositories/user/update.test.ts +26 -0
  226. package/src/repositories/user/update.ts +34 -0
  227. package/src/repositories/user/upsert-franceconnect-userinfo.test.ts +100 -0
  228. package/src/repositories/user/upsert-franceconnect-userinfo.ts +41 -0
  229. package/src/services/organization/index.ts +4 -0
  230. package/src/services/organization/is-domain-allowed-for-organization.ts +10 -0
  231. package/src/services/organization/is-entreprise-unipersonnelle.test.ts +32 -0
  232. package/src/services/organization/is-entreprise-unipersonnelle.ts +31 -0
  233. package/src/services/postgres/hash-to-postgres-params.ts +34 -0
  234. package/src/services/postgres/index.ts +3 -0
  235. package/src/types/claims.ts +21 -0
  236. package/src/types/contexts.ts +9 -0
  237. package/src/types/dirigeant.ts +13 -0
  238. package/src/types/email-domain.ts +48 -0
  239. package/src/types/franceconnect.ts +37 -0
  240. package/src/types/index.ts +11 -0
  241. package/src/types/organization-info.ts +32 -0
  242. package/src/types/organization.ts +30 -0
  243. package/src/types/user-organization-link.ts +71 -0
  244. package/src/types/user.ts +29 -0
  245. package/testing/index.ts +31 -0
  246. package/testing/seed/franceconnect/index.ts +40 -0
  247. package/testing/seed/insee/index.ts +22 -0
  248. package/testing/seed/mandataires/index.ts +32 -0
  249. package/testing/seed/organizations/index.ts +41 -0
  250. package/tsconfig.json +17 -0
  251. package/tsconfig.lib.json +9 -0
  252. package/tsconfig.lib.tsbuildinfo +1 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,96 @@
1
+ # @proconnect-gouv/proconnect.identite
2
+
3
+ ## 1.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - [#1455](https://github.com/proconnect-gouv/proconnect-identite/pull/1455) [`38fffb0`](https://github.com/proconnect-gouv/proconnect-identite/commit/38fffb00ca5a5d2341a662f684d2555bbfb5ff02) Thanks [@douglasduteil](https://github.com/douglasduteil)! - 📦 Première version officiel des packages `@proconnect-gouv/*`
8
+
9
+ ## 0.9.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#1385](https://github.com/proconnect-gouv/proconnect-identite/pull/1385) [`5906294`](https://github.com/proconnect-gouv/proconnect-identite/commit/5906294b6618d0d2cc1865a836886a35d740feb4) Thanks [@dependabot](https://github.com/apps/dependabot)! - feat: migration vers Zod v4
14
+
15
+ Migration de Zod v3 vers v4 - les utilisateurs du package doivent s'assurer que leur projet est compatible avec Zod v4 si ils importent des schémas ou types depuis ce package.
16
+
17
+ ## 0.8.1
18
+
19
+ ### Patch Changes
20
+
21
+ - [#1317](https://github.com/proconnect-gouv/proconnect-identite/pull/1317) [`749329f`](https://github.com/proconnect-gouv/proconnect-identite/commit/749329f4279db13151d42337e578cacbed8d2a26) Thanks [@douglasduteil](https://github.com/douglasduteil)! - 🐛 Correction du sélecteur lors de la suppression de domaines de vérification
22
+
23
+ see [`b5893a5`](https://github.com/proconnect-gouv/proconnect-identite/commit/b5893a5412faeea47afd8b4c9683bae47d389089)
24
+
25
+ ## 0.8.0
26
+
27
+ ### Minor Changes
28
+
29
+ - [#1284](https://github.com/proconnect-gouv/proconnect-identite/pull/1284) [`30db367`](https://github.com/proconnect-gouv/proconnect-identite/commit/30db367114350ae67fbdf3a283858addfab56d26) Thanks [@rebeccadumazert](https://github.com/rebeccadumazert)! - Renomme la vérification type "receipt_sent" en "proof_received"
30
+
31
+ ## 0.7.0
32
+
33
+ ### Minor Changes
34
+
35
+ - [#1282](https://github.com/proconnect-gouv/proconnect-identite/pull/1282) [`a3b52c3`](https://github.com/proconnect-gouv/proconnect-identite/commit/a3b52c33470f24bbe164d2435c717cb1f2f0a932) Thanks [@rebeccadumazert](https://github.com/rebeccadumazert)! - Ajoute deux nouveaux types de vérification
36
+ - in_liste_dirigeants_rne : Liste des dirigeants RNE
37
+ - receipt_sent : Justificatif transmis
38
+
39
+ ## 0.6.0
40
+
41
+ ### Minor Changes
42
+
43
+ - [#1251](https://github.com/proconnect-gouv/proconnect-identite/pull/1251) [`2bd56c8`](https://github.com/proconnect-gouv/proconnect-identite/commit/2bd56c8c857fd7a819cbc787faf030547e18023c) Thanks [@BenoitSerrano](https://github.com/BenoitSerrano)! - Centralize handling of email domains verification (addition, deletion, update for a specific domain)
44
+
45
+ ## 0.5.3
46
+
47
+ ### Patch Changes
48
+
49
+ - [#1252](https://github.com/proconnect-gouv/proconnect-identite/pull/1252) [`d2d6759`](https://github.com/proconnect-gouv/proconnect-identite/commit/d2d6759458b98ccc153005537ac2f5d063d0495a) Thanks [@rdubigny](https://github.com/rdubigny)! - La vérification de domaine official_contact permet de créer un lien vérifié avec le type "domain" plutôt qu'un lien non vérifié lors d'une validation du domaine par hyyypertool.
50
+
51
+ ## 0.5.2
52
+
53
+ ### Patch Changes
54
+
55
+ - [#1021](https://github.com/proconnect-gouv/proconnect-identite/pull/1021) [`86ad73c`](https://github.com/proconnect-gouv/proconnect-identite/commit/86ad73c9bb43f7171c0bda7b06fba14837449c1e) Thanks [@douglasduteil](https://github.com/douglasduteil)! - ❎ Les erreurs sont nommées
56
+
57
+ ## 0.5.1
58
+
59
+ ### Patch Changes
60
+
61
+ - [#990](https://github.com/proconnect-gouv/proconnect-identite/pull/990) [`5ad2bd9`](https://github.com/proconnect-gouv/proconnect-identite/commit/5ad2bd9031d9b01902401990ba79affb0082eb43) Thanks [@douglasduteil](https://github.com/douglasduteil)! - 🐛 Correction d'un code d'erreur
62
+ - si l'organisation est introuvable, `markDomainAsVerifiedFactory` retourne une erreur `NotFoundError` au lieu de `InseeNotFoundError`
63
+
64
+ ## 0.5.0
65
+
66
+ ### Minor Changes
67
+
68
+ - [#988](https://github.com/proconnect-gouv/proconnect-identite/pull/988) [`375ea4e`](https://github.com/proconnect-gouv/proconnect-identite/commit/375ea4e3c134bc70ae0bbda09663cc50fd511c59) Thanks [@douglasduteil](https://github.com/douglasduteil)! - ♻️ Prélevement d'un partie du buisness proconnect identité
69
+
70
+ ## 0.4.0
71
+
72
+ ### Minor Changes
73
+
74
+ - [#983](https://github.com/proconnect-gouv/proconnect-identite/pull/983) [`5f866a6`](https://github.com/proconnect-gouv/proconnect-identite/commit/5f866a6c57642229f8ccf8d517dc55519e7abee8) Thanks [@douglasduteil](https://github.com/douglasduteil)! - ♻️ Prélevement d'un partie du buisness proconnect identité
75
+
76
+ ## 0.3.2
77
+
78
+ ### Patch Changes
79
+
80
+ - [#975](https://github.com/proconnect-gouv/proconnect-identite/pull/975) [`8e57ecc`](https://github.com/proconnect-gouv/proconnect-identite/commit/8e57eccff4d3d614a4264b63f2583a63f82a88e6) Thanks [@douglasduteil](https://github.com/douglasduteil)! - 🚚 Renommage de moncomptepro en proconnect-identite
81
+
82
+ ## 0.3.1
83
+
84
+ ### Patch Changes
85
+
86
+ - [#964](https://github.com/proconnect-gouv/proconnect-identite/pull/964) [`eb63af3`](https://github.com/proconnect-gouv/proconnect-identite/commit/eb63af3bf33139adece820c1cfadf3ee387713f1) Thanks [@douglasduteil](https://github.com/douglasduteil)! - 🧑‍💻 Ajout du package @gouvfr-lasuite/proconnect.devtools.typescript
87
+
88
+ Partage de la configuration de TypeScript entre les packages.
89
+
90
+ ## 0.3.0
91
+
92
+ ### Minor Changes
93
+
94
+ - [#913](https://github.com/proconnect-gouv/proconnect-identite/pull/913) [`21d47b6`](https://github.com/proconnect-gouv/proconnect-identite/commit/21d47b6c00670b7bbea1ce1f59b96a91c59bbe7a) Thanks [@douglasduteil](https://github.com/douglasduteil)! - ♻️ Prélevement d'un partie du buisness proconnect identité
95
+
96
+ Dans le cadres la migration du script d'import de comptes coop, une partie de du buisness proconnect est déplacées dans le package `@gouvfr-lasuite/proconnect.identite` pour permettre leur réutilisation dans Hyyypertool.
@@ -0,0 +1,2 @@
1
+ export declare const DOMAINS_WHITELIST: Map<string, string[]>;
2
+ //# sourceMappingURL=domains-whitelist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains-whitelist.d.ts","sourceRoot":"","sources":["../../../src/data/organization/domains-whitelist.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,uBAK5B,CAAC"}
@@ -0,0 +1,7 @@
1
+ //
2
+ export const DOMAINS_WHITELIST = new Map([
3
+ [
4
+ "11000201100044", // ChorusPro siret
5
+ ["finances.gouv.fr"], // domains to whitelist
6
+ ],
7
+ ]);
@@ -0,0 +1,2 @@
1
+ export * from "./domains-whitelist.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/organization/index.ts"],"names":[],"mappings":"AAEA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ //
2
+ export * from "./domains-whitelist.js";
@@ -0,0 +1,22 @@
1
+ export declare class InvalidCertificationError extends Error {
2
+ constructor(message?: string, options?: ErrorOptions);
3
+ }
4
+ export declare class InvalidSiretError extends Error {
5
+ constructor(message?: string, options?: ErrorOptions);
6
+ }
7
+ export declare class NotFoundError extends Error {
8
+ constructor(message?: string, options?: ErrorOptions);
9
+ }
10
+ export declare class OrganizationNotActiveError extends Error {
11
+ constructor(message?: string, options?: ErrorOptions);
12
+ }
13
+ export declare class OrganizationNotFoundError extends Error {
14
+ constructor(message?: string, options?: ErrorOptions);
15
+ }
16
+ export declare class UserNotFoundError extends Error {
17
+ constructor(message?: string, options?: ErrorOptions);
18
+ }
19
+ export declare class ModerationNotFoundError extends Error {
20
+ constructor(message?: string, options?: ErrorOptions);
21
+ }
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAEA,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIrD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIrD;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIrD;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIrD;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIrD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIrD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIrD"}
@@ -0,0 +1,43 @@
1
+ //
2
+ export class InvalidCertificationError extends Error {
3
+ constructor(message, options) {
4
+ super(message, options);
5
+ this.name = "InvalidCertificationError";
6
+ }
7
+ }
8
+ export class InvalidSiretError extends Error {
9
+ constructor(message, options) {
10
+ super(message, options);
11
+ this.name = "InvalidSiretError";
12
+ }
13
+ }
14
+ export class NotFoundError extends Error {
15
+ constructor(message, options) {
16
+ super(message, options);
17
+ this.name = "NotFoundError";
18
+ }
19
+ }
20
+ export class OrganizationNotActiveError extends Error {
21
+ constructor(message, options) {
22
+ super(message, options);
23
+ this.name = "OrganizationNotActiveError";
24
+ }
25
+ }
26
+ export class OrganizationNotFoundError extends Error {
27
+ constructor(message, options) {
28
+ super(message, options);
29
+ this.name = "OrganizationNotFoundError";
30
+ }
31
+ }
32
+ export class UserNotFoundError extends Error {
33
+ constructor(message, options) {
34
+ super(message, options);
35
+ this.name = "UserNotFoundError";
36
+ }
37
+ }
38
+ export class ModerationNotFoundError extends Error {
39
+ constructor(message, options) {
40
+ super(message, options);
41
+ this.name = "ModerationNotFoundError";
42
+ }
43
+ }
@@ -0,0 +1,4 @@
1
+ import type { IdentityVector } from "#src/types";
2
+ export declare const millisecondsInDay = 86400000;
3
+ export declare function distance(franceconnectUserInfo: IdentityVector, sourceDirigeant: IdentityVector): number;
4
+ //# sourceMappingURL=distance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distance.d.ts","sourceRoot":"","sources":["../../../src/managers/certification/distance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,wBAAgB,QAAQ,CACtB,qBAAqB,EAAE,cAAc,EACrC,eAAe,EAAE,cAAc,GAC9B,MAAM,CA2BR"}
@@ -0,0 +1,16 @@
1
+ //
2
+ import leven from "leven";
3
+ //
4
+ // \from https://github.com/date-fns/date-fns/blob/v4.1.0/src/constants/index.ts#L84
5
+ export const millisecondsInDay = 86400000;
6
+ export function distance(franceconnectUserInfo, sourceDirigeant) {
7
+ const sameGivenName = () => leven(franceconnectUserInfo.given_name?.toUpperCase() ||
8
+ Math.random().toString(36), sourceDirigeant.given_name?.toUpperCase() || Math.random().toString(36));
9
+ const sameFamilyName = () => leven(franceconnectUserInfo.family_name?.toUpperCase() ||
10
+ Math.random().toString(36), sourceDirigeant.family_name?.toUpperCase() || Math.random().toString(36));
11
+ const sameBirthDay = () => (Number(sourceDirigeant.birthdate) -
12
+ Number(franceconnectUserInfo.birthdate)) /
13
+ millisecondsInDay;
14
+ const sameBirthPlace = () => leven(franceconnectUserInfo.birthplace || Math.random().toString(36), sourceDirigeant.birthplace || Math.random().toString(36));
15
+ return [sameGivenName, sameFamilyName, sameBirthDay, sameBirthPlace].reduce((value, metric) => value + metric(), 0);
16
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./distance.js";
2
+ export * from "./is-organization-dirigeant.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/managers/certification/index.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAC;AAC9B,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,3 @@
1
+ //
2
+ export * from "./distance.js";
3
+ export * from "./is-organization-dirigeant.js";
@@ -0,0 +1,15 @@
1
+ import type { GetFranceConnectUserInfoHandler } from "#src/repositories/user";
2
+ import type { EntrepriseApiInfogreffeRepository, EntrepriseApiInseeRepository } from "@proconnect-gouv/proconnect.entreprise/api";
3
+ import type { InseeApiRepository } from "@proconnect-gouv/proconnect.insee/api";
4
+ type IsOrganizationExecutiveFactoryFactoryConfig = {
5
+ EntrepriseApiInfogreffeRepository: EntrepriseApiInfogreffeRepository;
6
+ EntrepriseApiInseeRepository: Pick<EntrepriseApiInseeRepository, "findBySiret">;
7
+ EQUALITY_THRESHOLD?: number;
8
+ getFranceConnectUserInfo: GetFranceConnectUserInfoHandler;
9
+ InseeApiRepository: Pick<InseeApiRepository, "findBySiret">;
10
+ log?: typeof console.log;
11
+ };
12
+ export declare function isOrganizationDirigeantFactory(config: IsOrganizationExecutiveFactoryFactoryConfig): (siret: string, user_id: number) => Promise<boolean>;
13
+ export type IsOrganizationDirigeantHandler = ReturnType<typeof isOrganizationDirigeantFactory>;
14
+ export {};
15
+ //# sourceMappingURL=is-organization-dirigeant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-organization-dirigeant.d.ts","sourceRoot":"","sources":["../../../src/managers/certification/is-organization-dirigeant.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAG9E,OAAO,KAAK,EACV,iCAAiC,EACjC,4BAA4B,EAC7B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAMhF,KAAK,2CAA2C,GAAG;IACjD,iCAAiC,EAAE,iCAAiC,CAAC;IACrE,4BAA4B,EAAE,IAAI,CAChC,4BAA4B,EAC5B,aAAa,CACd,CAAC;IACF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,+BAA+B,CAAC;IAC1D,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;IAC5D,GAAG,CAAC,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;CAC1B,CAAC;AAIF,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,2CAA2C,IAYjD,OAAO,MAAM,EACb,SAAS,MAAM,sBAoFlB;AAED,MAAM,MAAM,8BAA8B,GAAG,UAAU,CACrD,OAAO,8BAA8B,CACtC,CAAC"}
@@ -0,0 +1,60 @@
1
+ //
2
+ import { NotFoundError } from "#src/errors";
3
+ import { fromInfogreffe } from "#src/mappers/certification";
4
+ import { fromSiret } from "#src/mappers/organization";
5
+ import { isEntrepriseUnipersonnelle } from "#src/services/organization";
6
+ import { formatBirthdate } from "@proconnect-gouv/proconnect.insee/formatters";
7
+ import { distance } from "./distance.js";
8
+ //
9
+ export function isOrganizationDirigeantFactory(config) {
10
+ const { EQUALITY_THRESHOLD = 0, EntrepriseApiInseeRepository, EntrepriseApiInfogreffeRepository, InseeApiRepository, getFranceConnectUserInfo, log = () => { }, } = config;
11
+ return async function isOrganizationDirigeant(siret, user_id) {
12
+ const establishment = await EntrepriseApiInseeRepository.findBySiret(siret);
13
+ const franceconnectUserInfo = await getFranceConnectUserInfo(user_id);
14
+ if (!franceconnectUserInfo) {
15
+ throw new NotFoundError("FranceConnect UserInfo not found");
16
+ }
17
+ const sourceDirigeants = await getSourceDirigeantsFromEstablishment(establishment);
18
+ if (sourceDirigeants.length === 0) {
19
+ throw new NotFoundError("No mandataires found");
20
+ }
21
+ const distances = sourceDirigeants.map((sourceDirigeant) => Math.abs(distance(franceconnectUserInfo, sourceDirigeant)));
22
+ const closestSourceDirigeantDistance = Math.min(...distances);
23
+ const closestSourceDirigeant = sourceDirigeants[distances.indexOf(closestSourceDirigeantDistance)];
24
+ log(closestSourceDirigeant, " is the closest source dirigeant to ", franceconnectUserInfo, " with a distance of ", closestSourceDirigeantDistance);
25
+ return closestSourceDirigeantDistance === EQUALITY_THRESHOLD;
26
+ };
27
+ async function getSourceDirigeantsFromEstablishment(establishment) {
28
+ const organization = fromSiret(establishment);
29
+ if (isEntrepriseUnipersonnelle({
30
+ cached_libelle_categorie_juridique: organization.libelleCategorieJuridique,
31
+ cached_tranche_effectifs: organization.trancheEffectifs,
32
+ })) {
33
+ return getSourceDirigeantsFromInsseApi(establishment.siret);
34
+ }
35
+ return getSourceDirigeantsFromEntrepriseApi(establishment.unite_legale.siren);
36
+ }
37
+ async function getSourceDirigeantsFromInsseApi(siret) {
38
+ const { uniteLegale } = await InseeApiRepository.findBySiret(siret);
39
+ const birthdate = formatBirthdate(String(uniteLegale?.dateNaissanceUniteLegale));
40
+ return [
41
+ {
42
+ birthplace: uniteLegale?.codeCommuneNaissanceUniteLegale ?? null,
43
+ birthdate: isNaN(birthdate.getTime()) ? null : birthdate,
44
+ family_name: uniteLegale?.nomUniteLegale ?? null,
45
+ given_name: [
46
+ uniteLegale?.prenom1UniteLegale,
47
+ uniteLegale?.prenom2UniteLegale,
48
+ uniteLegale?.prenom3UniteLegale,
49
+ uniteLegale?.prenom4UniteLegale,
50
+ ]
51
+ .filter(Boolean)
52
+ .join(" "),
53
+ },
54
+ ];
55
+ }
56
+ async function getSourceDirigeantsFromEntrepriseApi(siren) {
57
+ const mandataires = await EntrepriseApiInfogreffeRepository.findMandatairesSociauxBySiren(siren);
58
+ return mandataires.map((mandataire) => fromInfogreffe(mandataire));
59
+ }
60
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./openid-client.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/managers/franceconnect/index.ts"],"names":[],"mappings":"AAEA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ //
2
+ export * from "./openid-client.js";
@@ -0,0 +1,37 @@
1
+ import { type ClientMetadata } from "openid-client";
2
+ export type FranceConnectConfigurationParams = {
3
+ allowLocalhost?: boolean;
4
+ clientId: string;
5
+ clientSecret: string;
6
+ metadata: Partial<ClientMetadata>;
7
+ server: URL;
8
+ };
9
+ export declare function getFranceConnectConfigurationFactory(params: FranceConnectConfigurationParams): () => Promise<import("openid-client").Configuration>;
10
+ export type GetFranceConnectConfigurationHandler = ReturnType<typeof getFranceConnectConfigurationFactory>;
11
+ export declare function createOidcChecks(): {
12
+ state: string;
13
+ nonce: string;
14
+ };
15
+ export declare function getFranceConnectRedirectUrlFactory(getConfiguration: GetFranceConnectConfigurationHandler, parameters: {
16
+ callbackUrl: string;
17
+ scope: string;
18
+ }): (nonce: string, state: string) => Promise<URL>;
19
+ export declare function getFranceConnectUserFactory(getConfiguration: GetFranceConnectConfigurationHandler): (parameters: {
20
+ code: string;
21
+ currentUrl: URL;
22
+ expectedNonce: string;
23
+ expectedState: string;
24
+ }) => Promise<{
25
+ user_info: {
26
+ birthdate: Date;
27
+ birthplace: string;
28
+ family_name: string;
29
+ gender: string;
30
+ given_name: string;
31
+ sub: string;
32
+ preferred_username?: string | undefined;
33
+ };
34
+ id_token: string | undefined;
35
+ }>;
36
+ export declare function getFranceConnectLogoutRedirectUrlFactory(getConfiguration: GetFranceConnectConfigurationHandler): (id_token_hint: string, post_logout_redirect_uri: string, state: string) => Promise<URL>;
37
+ //# sourceMappingURL=openid-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openid-client.d.ts","sourceRoot":"","sources":["../../../src/managers/franceconnect/openid-client.ts"],"names":[],"mappings":"AAMA,OAAO,EAUL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAKvB,MAAM,MAAM,gCAAgC,GAAG;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,gCAAgC,wDAYzC;AAED,MAAM,MAAM,oCAAoC,GAAG,UAAU,CAC3D,OAAO,oCAAoC,CAC5C,CAAC;AAEF,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,kCAAkC,CAChD,gBAAgB,EAAE,oCAAoC,EACtD,UAAU,EAAE;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,IAG0C,OAAO,MAAM,EAAE,OAAO,MAAM,kBAaxE;AAED,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,oCAAoC,IAEX,YAAY;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;;;;;;;;;;;GA0BF;AAED,wBAAgB,wCAAwC,CACtD,gBAAgB,EAAE,oCAAoC,IAGpD,eAAe,MAAM,EACrB,0BAA0B,MAAM,EAChC,OAAO,MAAM,kBAShB"}
@@ -0,0 +1,54 @@
1
+ //
2
+ import { FranceConnectUserInfoResponseSchema, } from "#src/types";
3
+ import { allowInsecureRequests, authorizationCodeGrant, buildAuthorizationUrl, buildEndSessionUrl, ClientSecretBasic, discovery, fetchUserInfo, randomNonce, randomState, } from "openid-client";
4
+ import { z } from "zod";
5
+ export function getFranceConnectConfigurationFactory(params) {
6
+ const { allowLocalhost, clientId, clientSecret, metadata, server } = params;
7
+ return function getFranceConnectConfiguration() {
8
+ return discovery(server, clientId, metadata, ClientSecretBasic(clientSecret), allowLocalhost ? { execute: [allowInsecureRequests] } : undefined);
9
+ };
10
+ }
11
+ export function createOidcChecks() {
12
+ return {
13
+ state: randomState(),
14
+ nonce: randomNonce(),
15
+ };
16
+ }
17
+ export function getFranceConnectRedirectUrlFactory(getConfiguration, parameters) {
18
+ const { callbackUrl, scope } = parameters;
19
+ return async function getFranceConnectUser(nonce, state) {
20
+ const config = await getConfiguration();
21
+ return buildAuthorizationUrl(config, new URLSearchParams({
22
+ acr_values: "eidas1",
23
+ nonce,
24
+ redirect_uri: callbackUrl,
25
+ scope,
26
+ state,
27
+ }));
28
+ };
29
+ }
30
+ export function getFranceConnectUserFactory(getConfiguration) {
31
+ return async function getFranceConnectUser(parameters) {
32
+ const { code, currentUrl, expectedNonce, expectedState } = parameters;
33
+ const config = await getConfiguration();
34
+ const tokens = await authorizationCodeGrant(config, currentUrl, {
35
+ expectedNonce,
36
+ expectedState,
37
+ }, { code });
38
+ const claims = tokens.claims();
39
+ const { sub } = await z.object({ sub: z.string() }).parseAsync(claims);
40
+ const user_info_response = await fetchUserInfo(config, tokens.access_token, sub);
41
+ const user_info = await FranceConnectUserInfoResponseSchema.parseAsync(user_info_response);
42
+ return { user_info, id_token: tokens.id_token };
43
+ };
44
+ }
45
+ export function getFranceConnectLogoutRedirectUrlFactory(getConfiguration) {
46
+ return async function getFranceConnectLogoutRedirectUrl(id_token_hint, post_logout_redirect_uri, state) {
47
+ const config = await getConfiguration();
48
+ return buildEndSessionUrl(config, {
49
+ id_token_hint,
50
+ post_logout_redirect_uri,
51
+ state,
52
+ });
53
+ };
54
+ }
@@ -0,0 +1,29 @@
1
+ import type { FindEmailDomainsByOrganizationIdHandler } from "#src/repositories/email-domain";
2
+ import type { GetByIdHandler as GetOrganizationByIdHandler, LinkUserToOrganizationHandler } from "#src/repositories/organization";
3
+ import type { GetByIdHandler as GetUserByIdHandler } from "#src/repositories/user";
4
+ type FactoryDependencies = {
5
+ findEmailDomainsByOrganizationId: FindEmailDomainsByOrganizationIdHandler;
6
+ getById: GetOrganizationByIdHandler;
7
+ getUserById: GetUserByIdHandler;
8
+ linkUserToOrganization: LinkUserToOrganizationHandler;
9
+ };
10
+ export declare function forceJoinOrganizationFactory({ findEmailDomainsByOrganizationId, getById, getUserById, linkUserToOrganization, }: FactoryDependencies): ({ organization_id, user_id, is_external, }: {
11
+ organization_id: number;
12
+ user_id: number;
13
+ is_external?: boolean;
14
+ }) => Promise<{
15
+ is_external: boolean;
16
+ verification_type: "code_sent_to_official_contact_email" | "domain" | "imported_from_coop_mediation_numerique" | "imported_from_inclusion_connect" | "in_liste_dirigeants_rna" | "in_liste_dirigeants_rne" | "no_validation_means_available" | "no_verification_means_for_entreprise_unipersonnelle" | "no_verification_means_for_small_association" | "official_contact_email" | "organization_dirigeant" | "proof_received" | "bypassed" | null;
17
+ verified_at: Date | null;
18
+ has_been_greeted: boolean;
19
+ needs_official_contact_email_verification: boolean;
20
+ official_contact_email_verification_token: string | null;
21
+ official_contact_email_verification_sent_at: Date | null;
22
+ user_id: number;
23
+ organization_id: number;
24
+ created_at: Date;
25
+ updated_at: Date;
26
+ }>;
27
+ export type ForceJoinOrganizationHandler = ReturnType<typeof forceJoinOrganizationFactory>;
28
+ export {};
29
+ //# sourceMappingURL=force-join-organization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"force-join-organization.d.ts","sourceRoot":"","sources":["../../../src/managers/organization/force-join-organization.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,gCAAgC,CAAC;AAC9F,OAAO,KAAK,EACV,cAAc,IAAI,0BAA0B,EAC5C,6BAA6B,EAC9B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQnF,KAAK,mBAAmB,GAAG;IACzB,gCAAgC,EAAE,uCAAuC,CAAC;IAC1E,OAAO,EAAE,0BAA0B,CAAC;IACpC,WAAW,EAAE,kBAAkB,CAAC;IAChC,sBAAsB,EAAE,6BAA6B,CAAC;CACvD,CAAC;AAIF,wBAAgB,4BAA4B,CAAC,EAC3C,gCAAgC,EAChC,OAAO,EACP,WAAW,EACX,sBAAsB,GACvB,EAAE,mBAAmB,IACwB,4CAIzC;IACD,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;;;;;;;;;;;;GA+CF;AAED,MAAM,MAAM,4BAA4B,GAAG,UAAU,CACnD,OAAO,4BAA4B,CACpC,CAAC"}
@@ -0,0 +1,33 @@
1
+ //
2
+ import { getEmailDomain } from "@proconnect-gouv/proconnect.core/services/email";
3
+ import { match } from "ts-pattern";
4
+ import { UserOrganizationLinkVerificationTypeSchema } from "../../types/index.js";
5
+ //
6
+ export function forceJoinOrganizationFactory({ findEmailDomainsByOrganizationId, getById, getUserById, linkUserToOrganization, }) {
7
+ return async function forceJoinOrganization({ organization_id, user_id, is_external = false, }) {
8
+ const user = await getUserById(user_id);
9
+ // Ensure that the organization exists (Ceinture Bretelle)
10
+ await getById(organization_id);
11
+ const { email } = user;
12
+ const domain = getEmailDomain(email);
13
+ const organizationEmailDomains = await findEmailDomainsByOrganizationId(organization_id);
14
+ const link_verification_type = organizationEmailDomains
15
+ .filter(({ domain: currentDomain }) => currentDomain === domain)
16
+ .reduce((acc, { verification_type }) => {
17
+ if (acc === "domain") {
18
+ return acc;
19
+ }
20
+ return match(verification_type)
21
+ .with("verified", "trackdechets_postal_mail", "external", "official_contact", () => UserOrganizationLinkVerificationTypeSchema.enum.domain)
22
+ .with(null, "blacklisted", "refused", () => UserOrganizationLinkVerificationTypeSchema.enum
23
+ .no_validation_means_available)
24
+ .exhaustive();
25
+ }, "no_validation_means_available");
26
+ return await linkUserToOrganization({
27
+ organization_id,
28
+ user_id,
29
+ is_external,
30
+ verification_type: link_verification_type,
31
+ });
32
+ };
33
+ }
@@ -0,0 +1,5 @@
1
+ import { type OrganizationInfo } from "#src/types";
2
+ import type { EntrepriseApiInseeRepository } from "@proconnect-gouv/proconnect.entreprise/api";
3
+ export declare function getOrganizationInfoFactory(config: EntrepriseApiInseeRepository): (siretOrSiren: string) => Promise<OrganizationInfo>;
4
+ export type GetOrganizationInfoHandler = ReturnType<typeof getOrganizationInfoFactory>;
5
+ //# sourceMappingURL=get-organization-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-organization-info.d.ts","sourceRoot":"","sources":["../../../src/managers/organization/get-organization-info.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAQ/F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,4BAA4B,IAKlC,cAAc,MAAM,KACnB,OAAO,CAAC,gBAAgB,CAAC,CAiC7B;AAED,MAAM,MAAM,0BAA0B,GAAG,UAAU,CACjD,OAAO,0BAA0B,CAClC,CAAC"}
@@ -0,0 +1,33 @@
1
+ //
2
+ import { InvalidSiretError, NotFoundError } from "#src/errors";
3
+ import { OrganizationInfoMapper } from "#src/mappers";
4
+ import {} from "#src/types";
5
+ import { EntrepriseApiConnectionError, EntrepriseApiInvalidSiret, } from "@proconnect-gouv/proconnect.entreprise/types";
6
+ //
7
+ export function getOrganizationInfoFactory(config) {
8
+ const { findBySiren, findBySiret } = config;
9
+ return async function getOrganizationInfo(siretOrSiren) {
10
+ try {
11
+ let establishment;
12
+ if (siretOrSiren.match(/^\d{14}$/)) {
13
+ establishment = OrganizationInfoMapper.fromSiret(await findBySiret(siretOrSiren));
14
+ }
15
+ else if (siretOrSiren.match(/^\d{9}$/)) {
16
+ establishment = OrganizationInfoMapper.fromSiret(await findBySiren(siretOrSiren));
17
+ }
18
+ else {
19
+ throw new InvalidSiretError();
20
+ }
21
+ const { statutDiffusion } = establishment;
22
+ if (statutDiffusion === "non_diffusible") {
23
+ throw new NotFoundError();
24
+ }
25
+ return establishment;
26
+ }
27
+ catch (e) {
28
+ if (EntrepriseApiInvalidSiret.isInvalidSiret(e))
29
+ throw new InvalidSiretError();
30
+ throw new EntrepriseApiConnectionError("unknown error while fetching entreprise.api.gouv.fr", { cause: e });
31
+ }
32
+ };
33
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./force-join-organization.js";
2
+ export * from "./get-organization-info.js";
3
+ export * from "./mark-domain-as-verified.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/managers/organization/index.ts"],"names":[],"mappings":"AAEA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,4 @@
1
+ //
2
+ export * from "./force-join-organization.js";
3
+ export * from "./get-organization-info.js";
4
+ export * from "./mark-domain-as-verified.js";
@@ -0,0 +1,20 @@
1
+ import type { GetUsersByOrganizationHandler } from "#src/repositories/organization";
2
+ import type { UpdateUserOrganizationLinkHandler } from "#src/repositories/user";
3
+ import type { AddDomainHandler, DeleteEmailDomainsByVerificationTypesHandler } from "@proconnect-gouv/proconnect.identite/repositories/email-domain";
4
+ import type { FindByIdHandler } from "@proconnect-gouv/proconnect.identite/repositories/organization";
5
+ import { type EmailDomainVerificationType } from "@proconnect-gouv/proconnect.identite/types";
6
+ type FactoryDependencies = {
7
+ addDomain: AddDomainHandler;
8
+ deleteEmailDomainsByVerificationTypes: DeleteEmailDomainsByVerificationTypesHandler;
9
+ findOrganizationById: FindByIdHandler;
10
+ getUsers: GetUsersByOrganizationHandler;
11
+ updateUserOrganizationLink: UpdateUserOrganizationLinkHandler;
12
+ };
13
+ export declare function markDomainAsVerifiedFactory({ addDomain, deleteEmailDomainsByVerificationTypes, findOrganizationById, getUsers, updateUserOrganizationLink, }: FactoryDependencies): ({ organization_id, domain, domain_verification_type, }: {
14
+ organization_id: number;
15
+ domain: string;
16
+ domain_verification_type: NonNullable<EmailDomainVerificationType>;
17
+ }) => Promise<import("@proconnect-gouv/proconnect.identite/types").EmailDomain>;
18
+ export type MarkDomainAsVerifiedHandler = ReturnType<typeof markDomainAsVerifiedFactory>;
19
+ export {};
20
+ //# sourceMappingURL=mark-domain-as-verified.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mark-domain-as-verified.d.ts","sourceRoot":"","sources":["../../../src/managers/organization/mark-domain-as-verified.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EACV,gBAAgB,EAChB,4CAA4C,EAC7C,MAAM,gEAAgE,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gEAAgE,CAAC;AACtG,OAAO,EAKL,KAAK,2BAA2B,EACjC,MAAM,4CAA4C,CAAC;AAMpD,KAAK,mBAAmB,GAAG;IACzB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,qCAAqC,EAAE,4CAA4C,CAAC;IACpF,oBAAoB,EAAE,eAAe,CAAC;IACtC,QAAQ,EAAE,6BAA6B,CAAC;IACxC,0BAA0B,EAAE,iCAAiC,CAAC;CAC/D,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,EAC1C,SAAS,EACT,qCAAqC,EACrC,oBAAoB,EACpB,QAAQ,EACR,0BAA0B,GAC3B,EAAE,mBAAmB,IAMuB,wDAIxC;IACD,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB,EAAE,WAAW,CAAC,2BAA2B,CAAC,CAAC;CACpE,+EAoFF;AAED,MAAM,MAAM,2BAA2B,GAAG,UAAU,CAClD,OAAO,2BAA2B,CACnC,CAAC"}