@boxyhq/saml-jackson 1.32.0 → 1.33.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/dist/controller/api.js +17 -7
  2. package/dist/controller/api.js.map +1 -1
  3. package/dist/controller/connection/oidc.js +17 -7
  4. package/dist/controller/connection/oidc.js.map +1 -1
  5. package/dist/controller/connection/saml.js +17 -7
  6. package/dist/controller/connection/saml.js.map +1 -1
  7. package/dist/controller/logout.js +17 -7
  8. package/dist/controller/logout.js.map +1 -1
  9. package/dist/controller/oauth/oidc-client.d.ts +9 -4
  10. package/dist/controller/oauth/oidc-client.js +80 -11
  11. package/dist/controller/oauth/oidc-client.js.map +1 -1
  12. package/dist/controller/oauth/oidc-issuer.d.ts +2 -0
  13. package/dist/controller/oauth/oidc-issuer.js +25 -0
  14. package/dist/controller/oauth/oidc-issuer.js.map +1 -0
  15. package/dist/controller/oauth.js +97 -46
  16. package/dist/controller/oauth.js.map +1 -1
  17. package/dist/controller/setup-link.js +17 -7
  18. package/dist/controller/setup-link.js.map +1 -1
  19. package/dist/controller/sso-handler.d.ts +10 -2
  20. package/dist/controller/sso-handler.js +34 -12
  21. package/dist/controller/sso-handler.js.map +1 -1
  22. package/dist/controller/utils.d.ts +5 -3
  23. package/dist/controller/utils.js +27 -9
  24. package/dist/controller/utils.js.map +1 -1
  25. package/dist/db/db.js +17 -7
  26. package/dist/db/db.js.map +1 -1
  27. package/dist/db/dynamoDb.js +17 -7
  28. package/dist/db/dynamoDb.js.map +1 -1
  29. package/dist/db/mem.js +17 -7
  30. package/dist/db/mem.js.map +1 -1
  31. package/dist/db/mongo.js +17 -7
  32. package/dist/db/mongo.js.map +1 -1
  33. package/dist/db/redis.js +17 -7
  34. package/dist/db/redis.js.map +1 -1
  35. package/dist/db/sql/sql.js +17 -7
  36. package/dist/db/sql/sql.js.map +1 -1
  37. package/dist/db/store.js +17 -7
  38. package/dist/db/store.js.map +1 -1
  39. package/dist/directory-sync/batch-events/queue.js +17 -7
  40. package/dist/directory-sync/batch-events/queue.js.map +1 -1
  41. package/dist/directory-sync/scim/DirectoryConfig.js +17 -7
  42. package/dist/directory-sync/scim/DirectoryConfig.js.map +1 -1
  43. package/dist/directory-sync/scim/Groups.js +17 -7
  44. package/dist/directory-sync/scim/Groups.js.map +1 -1
  45. package/dist/ee/identity-federation/idp-login.js +20 -14
  46. package/dist/ee/identity-federation/idp-login.js.map +1 -1
  47. package/dist/ee/identity-federation/sso.js +16 -11
  48. package/dist/ee/identity-federation/sso.js.map +1 -1
  49. package/dist/event/axios.d.ts +2 -1
  50. package/dist/index.js +17 -7
  51. package/dist/index.js.map +1 -1
  52. package/dist/loadConnection.js +17 -7
  53. package/dist/loadConnection.js.map +1 -1
  54. package/dist/saml/lib.js +17 -7
  55. package/dist/saml/lib.js.map +1 -1
  56. package/dist/saml/x509.js +17 -7
  57. package/dist/saml/x509.js.map +1 -1
  58. package/dist/src/controller/admin.d.ts +27 -0
  59. package/dist/src/controller/admin.js +60 -0
  60. package/dist/src/controller/admin.js.map +1 -0
  61. package/dist/src/controller/analytics.d.ts +16 -0
  62. package/dist/src/controller/analytics.js +79 -0
  63. package/dist/src/controller/analytics.js.map +1 -0
  64. package/dist/src/controller/api.d.ts +557 -0
  65. package/dist/src/controller/api.js +806 -0
  66. package/dist/src/controller/api.js.map +1 -0
  67. package/dist/src/controller/connection/oidc.d.ts +7 -0
  68. package/dist/src/controller/connection/oidc.js +181 -0
  69. package/dist/src/controller/connection/oidc.js.map +1 -0
  70. package/dist/src/controller/connection/saml.d.ts +7 -0
  71. package/dist/src/controller/connection/saml.js +250 -0
  72. package/dist/src/controller/connection/saml.js.map +1 -0
  73. package/dist/src/controller/error.d.ts +10 -0
  74. package/dist/src/controller/error.js +13 -0
  75. package/dist/src/controller/error.js.map +1 -0
  76. package/dist/src/controller/health-check.d.ts +11 -0
  77. package/dist/src/controller/health-check.js +51 -0
  78. package/dist/src/controller/health-check.js.map +1 -0
  79. package/dist/src/controller/logout.d.ts +18 -0
  80. package/dist/src/controller/logout.js +132 -0
  81. package/dist/src/controller/logout.js.map +1 -0
  82. package/dist/src/controller/oauth/allowed.d.ts +1 -0
  83. package/dist/src/controller/oauth/allowed.js +30 -0
  84. package/dist/src/controller/oauth/allowed.js.map +1 -0
  85. package/dist/src/controller/oauth/code-verifier.d.ts +1 -0
  86. package/dist/src/controller/oauth/code-verifier.js +8 -0
  87. package/dist/src/controller/oauth/code-verifier.js.map +1 -0
  88. package/dist/src/controller/oauth/oidc-client.d.ts +12 -0
  89. package/dist/src/controller/oauth/oidc-client.js +89 -0
  90. package/dist/src/controller/oauth/oidc-client.js.map +1 -0
  91. package/dist/src/controller/oauth/redirect.d.ts +1 -0
  92. package/dist/src/controller/oauth/redirect.js +13 -0
  93. package/dist/src/controller/oauth/redirect.js.map +1 -0
  94. package/dist/src/controller/oauth.d.ts +142 -0
  95. package/dist/src/controller/oauth.js +1112 -0
  96. package/dist/src/controller/oauth.js.map +1 -0
  97. package/dist/src/controller/oidc-discovery.d.ts +22 -0
  98. package/dist/src/controller/oidc-discovery.js +47 -0
  99. package/dist/src/controller/oidc-discovery.js.map +1 -0
  100. package/dist/src/controller/setup-link.d.ts +307 -0
  101. package/dist/src/controller/setup-link.js +462 -0
  102. package/dist/src/controller/setup-link.js.map +1 -0
  103. package/dist/src/controller/sp-config.d.ts +22 -0
  104. package/dist/src/controller/sp-config.js +89 -0
  105. package/dist/src/controller/sp-config.js.map +1 -0
  106. package/dist/src/controller/sso-handler.d.ts +66 -0
  107. package/dist/src/controller/sso-handler.js +306 -0
  108. package/dist/src/controller/sso-handler.js.map +1 -0
  109. package/dist/src/controller/utils.d.ts +84 -0
  110. package/dist/src/controller/utils.js +328 -0
  111. package/dist/src/controller/utils.js.map +1 -0
  112. package/dist/src/cron/lock.d.ts +18 -0
  113. package/dist/src/cron/lock.js +98 -0
  114. package/dist/src/cron/lock.js.map +1 -0
  115. package/dist/src/db/db.d.ts +5 -0
  116. package/dist/src/db/db.js +178 -0
  117. package/dist/src/db/db.js.map +1 -0
  118. package/dist/src/db/defaultDb.d.ts +2 -0
  119. package/dist/src/db/defaultDb.js +18 -0
  120. package/dist/src/db/defaultDb.js.map +1 -0
  121. package/dist/src/db/dynamoDb.d.ts +19 -0
  122. package/dist/src/db/dynamoDb.js +320 -0
  123. package/dist/src/db/dynamoDb.js.map +1 -0
  124. package/dist/src/db/encrypter.d.ts +3 -0
  125. package/dist/src/db/encrypter.js +22 -0
  126. package/dist/src/db/encrypter.js.map +1 -0
  127. package/dist/src/db/mem.d.ts +23 -0
  128. package/dist/src/db/mem.js +186 -0
  129. package/dist/src/db/mem.js.map +1 -0
  130. package/dist/src/db/mongo.d.ts +22 -0
  131. package/dist/src/db/mongo.js +177 -0
  132. package/dist/src/db/mongo.js.map +1 -0
  133. package/dist/src/db/planetscale/entity/JacksonIndex.d.ts +5 -0
  134. package/dist/src/db/planetscale/entity/JacksonIndex.js +32 -0
  135. package/dist/src/db/planetscale/entity/JacksonIndex.js.map +1 -0
  136. package/dist/src/db/planetscale/entity/JacksonStore.d.ts +9 -0
  137. package/dist/src/db/planetscale/entity/JacksonStore.js +63 -0
  138. package/dist/src/db/planetscale/entity/JacksonStore.js.map +1 -0
  139. package/dist/src/db/planetscale/entity/JacksonTTL.d.ts +4 -0
  140. package/dist/src/db/planetscale/entity/JacksonTTL.js +27 -0
  141. package/dist/src/db/planetscale/entity/JacksonTTL.js.map +1 -0
  142. package/dist/src/db/redis.d.ts +18 -0
  143. package/dist/src/db/redis.js +214 -0
  144. package/dist/src/db/redis.js.map +1 -0
  145. package/dist/src/db/sql/entity/JacksonIndex.d.ts +7 -0
  146. package/dist/src/db/sql/entity/JacksonIndex.js +39 -0
  147. package/dist/src/db/sql/entity/JacksonIndex.js.map +1 -0
  148. package/dist/src/db/sql/entity/JacksonStore.d.ts +9 -0
  149. package/dist/src/db/sql/entity/JacksonStore.js +61 -0
  150. package/dist/src/db/sql/entity/JacksonStore.js.map +1 -0
  151. package/dist/src/db/sql/entity/JacksonTTL.d.ts +4 -0
  152. package/dist/src/db/sql/entity/JacksonTTL.js +27 -0
  153. package/dist/src/db/sql/entity/JacksonTTL.js.map +1 -0
  154. package/dist/src/db/sql/mariadb/entity/JacksonIndex.d.ts +7 -0
  155. package/dist/src/db/sql/mariadb/entity/JacksonIndex.js +39 -0
  156. package/dist/src/db/sql/mariadb/entity/JacksonIndex.js.map +1 -0
  157. package/dist/src/db/sql/mariadb/entity/JacksonStore.d.ts +9 -0
  158. package/dist/src/db/sql/mariadb/entity/JacksonStore.js +63 -0
  159. package/dist/src/db/sql/mariadb/entity/JacksonStore.js.map +1 -0
  160. package/dist/src/db/sql/mariadb/entity/JacksonTTL.d.ts +4 -0
  161. package/dist/src/db/sql/mariadb/entity/JacksonTTL.js +27 -0
  162. package/dist/src/db/sql/mariadb/entity/JacksonTTL.js.map +1 -0
  163. package/dist/src/db/sql/mssql/entity/JacksonIndex.d.ts +7 -0
  164. package/dist/src/db/sql/mssql/entity/JacksonIndex.js +39 -0
  165. package/dist/src/db/sql/mssql/entity/JacksonIndex.js.map +1 -0
  166. package/dist/src/db/sql/mssql/entity/JacksonStore.d.ts +9 -0
  167. package/dist/src/db/sql/mssql/entity/JacksonStore.js +61 -0
  168. package/dist/src/db/sql/mssql/entity/JacksonStore.js.map +1 -0
  169. package/dist/src/db/sql/mssql/entity/JacksonTTL.d.ts +4 -0
  170. package/dist/src/db/sql/mssql/entity/JacksonTTL.js +27 -0
  171. package/dist/src/db/sql/mssql/entity/JacksonTTL.js.map +1 -0
  172. package/dist/src/db/sql/mssql.d.ts +1 -0
  173. package/dist/src/db/sql/mssql.js +44 -0
  174. package/dist/src/db/sql/mssql.js.map +1 -0
  175. package/dist/src/db/sql/sql.d.ts +32 -0
  176. package/dist/src/db/sql/sql.js +318 -0
  177. package/dist/src/db/sql/sql.js.map +1 -0
  178. package/dist/src/db/sql/sqlite/entity/JacksonIndex.d.ts +7 -0
  179. package/dist/src/db/sql/sqlite/entity/JacksonIndex.js +39 -0
  180. package/dist/src/db/sql/sqlite/entity/JacksonIndex.js.map +1 -0
  181. package/dist/src/db/sql/sqlite/entity/JacksonStore.d.ts +9 -0
  182. package/dist/src/db/sql/sqlite/entity/JacksonStore.js +61 -0
  183. package/dist/src/db/sql/sqlite/entity/JacksonStore.js.map +1 -0
  184. package/dist/src/db/sql/sqlite/entity/JacksonTTL.d.ts +4 -0
  185. package/dist/src/db/sql/sqlite/entity/JacksonTTL.js +27 -0
  186. package/dist/src/db/sql/sqlite/entity/JacksonTTL.js.map +1 -0
  187. package/dist/src/db/store.d.ts +5 -0
  188. package/dist/src/db/store.js +65 -0
  189. package/dist/src/db/store.js.map +1 -0
  190. package/dist/src/db/utils.d.ts +16 -0
  191. package/dist/src/db/utils.js +28 -0
  192. package/dist/src/db/utils.js.map +1 -0
  193. package/dist/src/directory-sync/batch-events/queue.d.ts +40 -0
  194. package/dist/src/directory-sync/batch-events/queue.js +225 -0
  195. package/dist/src/directory-sync/batch-events/queue.js.map +1 -0
  196. package/dist/src/directory-sync/index.d.ts +27 -0
  197. package/dist/src/directory-sync/index.js +97 -0
  198. package/dist/src/directory-sync/index.js.map +1 -0
  199. package/dist/src/directory-sync/non-scim/google/api.d.ts +36 -0
  200. package/dist/src/directory-sync/non-scim/google/api.js +143 -0
  201. package/dist/src/directory-sync/non-scim/google/api.js.map +1 -0
  202. package/dist/src/directory-sync/non-scim/google/index.d.ts +12 -0
  203. package/dist/src/directory-sync/non-scim/google/index.js +10 -0
  204. package/dist/src/directory-sync/non-scim/google/index.js.map +1 -0
  205. package/dist/src/directory-sync/non-scim/google/oauth.d.ts +27 -0
  206. package/dist/src/directory-sync/non-scim/google/oauth.js +105 -0
  207. package/dist/src/directory-sync/non-scim/google/oauth.js.map +1 -0
  208. package/dist/src/directory-sync/non-scim/index.d.ts +24 -0
  209. package/dist/src/directory-sync/non-scim/index.js +85 -0
  210. package/dist/src/directory-sync/non-scim/index.js.map +1 -0
  211. package/dist/src/directory-sync/non-scim/syncGroupMembers.d.ts +23 -0
  212. package/dist/src/directory-sync/non-scim/syncGroupMembers.js +105 -0
  213. package/dist/src/directory-sync/non-scim/syncGroupMembers.js.map +1 -0
  214. package/dist/src/directory-sync/non-scim/syncGroups.d.ts +24 -0
  215. package/dist/src/directory-sync/non-scim/syncGroups.js +120 -0
  216. package/dist/src/directory-sync/non-scim/syncGroups.js.map +1 -0
  217. package/dist/src/directory-sync/non-scim/syncUsers.d.ts +24 -0
  218. package/dist/src/directory-sync/non-scim/syncUsers.js +120 -0
  219. package/dist/src/directory-sync/non-scim/syncUsers.js.map +1 -0
  220. package/dist/src/directory-sync/non-scim/utils.d.ts +36 -0
  221. package/dist/src/directory-sync/non-scim/utils.js +109 -0
  222. package/dist/src/directory-sync/non-scim/utils.js.map +1 -0
  223. package/dist/src/directory-sync/request.d.ts +14 -0
  224. package/dist/src/directory-sync/request.js +29 -0
  225. package/dist/src/directory-sync/request.js.map +1 -0
  226. package/dist/src/directory-sync/scim/Base.d.ts +12 -0
  227. package/dist/src/directory-sync/scim/Base.js +23 -0
  228. package/dist/src/directory-sync/scim/Base.js.map +1 -0
  229. package/dist/src/directory-sync/scim/DirectoryConfig.d.ts +343 -0
  230. package/dist/src/directory-sync/scim/DirectoryConfig.js +580 -0
  231. package/dist/src/directory-sync/scim/DirectoryConfig.js.map +1 -0
  232. package/dist/src/directory-sync/scim/DirectoryGroups.d.ts +28 -0
  233. package/dist/src/directory-sync/scim/DirectoryGroups.js +252 -0
  234. package/dist/src/directory-sync/scim/DirectoryGroups.js.map +1 -0
  235. package/dist/src/directory-sync/scim/DirectoryUsers.d.ts +25 -0
  236. package/dist/src/directory-sync/scim/DirectoryUsers.js +193 -0
  237. package/dist/src/directory-sync/scim/DirectoryUsers.js.map +1 -0
  238. package/dist/src/directory-sync/scim/Groups.d.ts +166 -0
  239. package/dist/src/directory-sync/scim/Groups.js +348 -0
  240. package/dist/src/directory-sync/scim/Groups.js.map +1 -0
  241. package/dist/src/directory-sync/scim/Users.d.ts +99 -0
  242. package/dist/src/directory-sync/scim/Users.js +215 -0
  243. package/dist/src/directory-sync/scim/Users.js.map +1 -0
  244. package/dist/src/directory-sync/scim/WebhookEventsLogger.d.ts +101 -0
  245. package/dist/src/directory-sync/scim/WebhookEventsLogger.js +165 -0
  246. package/dist/src/directory-sync/scim/WebhookEventsLogger.js.map +1 -0
  247. package/dist/src/directory-sync/scim/transform.d.ts +6 -0
  248. package/dist/src/directory-sync/scim/transform.js +37 -0
  249. package/dist/src/directory-sync/scim/transform.js.map +1 -0
  250. package/dist/src/directory-sync/scim/utils.d.ts +33 -0
  251. package/dist/src/directory-sync/scim/utils.js +129 -0
  252. package/dist/src/directory-sync/scim/utils.js.map +1 -0
  253. package/dist/src/directory-sync/types.d.ts +195 -0
  254. package/dist/src/directory-sync/types.js +10 -0
  255. package/dist/src/directory-sync/types.js.map +1 -0
  256. package/dist/src/directory-sync/utils.d.ts +19 -0
  257. package/dist/src/directory-sync/utils.js +56 -0
  258. package/dist/src/directory-sync/utils.js.map +1 -0
  259. package/dist/src/ee/branding/index.d.ts +17 -0
  260. package/dist/src/ee/branding/index.js +49 -0
  261. package/dist/src/ee/branding/index.js.map +1 -0
  262. package/dist/src/ee/common/checkLicense.d.ts +3 -0
  263. package/dist/src/ee/common/checkLicense.js +23 -0
  264. package/dist/src/ee/common/checkLicense.js.map +1 -0
  265. package/dist/src/ee/identity-federation/app.d.ts +328 -0
  266. package/dist/src/ee/identity-federation/app.js +532 -0
  267. package/dist/src/ee/identity-federation/app.js.map +1 -0
  268. package/dist/src/ee/identity-federation/idp-login.d.ts +18 -0
  269. package/dist/src/ee/identity-federation/idp-login.js +98 -0
  270. package/dist/src/ee/identity-federation/idp-login.js.map +1 -0
  271. package/dist/src/ee/identity-federation/index.d.ts +15 -0
  272. package/dist/src/ee/identity-federation/index.js +43 -0
  273. package/dist/src/ee/identity-federation/index.js.map +1 -0
  274. package/dist/src/ee/identity-federation/sso.d.ts +24 -0
  275. package/dist/src/ee/identity-federation/sso.js +124 -0
  276. package/dist/src/ee/identity-federation/sso.js.map +1 -0
  277. package/dist/src/ee/identity-federation/types.d.ts +38 -0
  278. package/dist/src/ee/identity-federation/types.js +2 -0
  279. package/dist/src/ee/identity-federation/types.js.map +1 -0
  280. package/dist/src/ee/ory/ory.d.ts +18 -0
  281. package/dist/src/ee/ory/ory.js +195 -0
  282. package/dist/src/ee/ory/ory.js.map +1 -0
  283. package/dist/src/ee/product/index.d.ts +14 -0
  284. package/dist/src/ee/product/index.js +45 -0
  285. package/dist/src/ee/product/index.js.map +1 -0
  286. package/dist/src/event/axios.d.ts +2 -0
  287. package/dist/src/event/axios.js +27 -0
  288. package/dist/src/event/axios.js.map +1 -0
  289. package/dist/src/event/index.d.ts +11 -0
  290. package/dist/src/event/index.js +53 -0
  291. package/dist/src/event/index.js.map +1 -0
  292. package/dist/src/event/types.d.ts +21 -0
  293. package/dist/src/event/types.js +2 -0
  294. package/dist/src/event/types.js.map +1 -0
  295. package/dist/src/event/utils.d.ts +4 -0
  296. package/dist/src/event/utils.js +33 -0
  297. package/dist/src/event/utils.js.map +1 -0
  298. package/dist/src/event/webhook.d.ts +3 -0
  299. package/dist/src/event/webhook.js +34 -0
  300. package/dist/src/event/webhook.js.map +1 -0
  301. package/dist/src/index.d.ts +35 -0
  302. package/dist/src/index.js +161 -0
  303. package/dist/src/index.js.map +1 -0
  304. package/dist/src/loadConnection.d.ts +4 -0
  305. package/dist/src/loadConnection.js +38 -0
  306. package/dist/src/loadConnection.js.map +1 -0
  307. package/dist/src/opentelemetry/metrics.d.ts +14 -0
  308. package/dist/src/opentelemetry/metrics.js +64 -0
  309. package/dist/src/opentelemetry/metrics.js.map +1 -0
  310. package/dist/src/saml/claims.d.ts +12 -0
  311. package/dist/src/saml/claims.js +57 -0
  312. package/dist/src/saml/claims.js.map +1 -0
  313. package/dist/src/saml/lib.d.ts +8 -0
  314. package/dist/src/saml/lib.js +29 -0
  315. package/dist/src/saml/lib.js.map +1 -0
  316. package/dist/src/saml/x509.d.ts +9 -0
  317. package/dist/src/saml/x509.js +93 -0
  318. package/dist/src/saml/x509.js.map +1 -0
  319. package/dist/src/sso-traces/index.d.ts +114 -0
  320. package/dist/src/sso-traces/index.js +229 -0
  321. package/dist/src/sso-traces/index.js.map +1 -0
  322. package/dist/src/sso-traces/types.d.ts +44 -0
  323. package/dist/src/sso-traces/types.js +2 -0
  324. package/dist/src/sso-traces/types.js.map +1 -0
  325. package/dist/src/typings.d.ts +540 -0
  326. package/dist/src/typings.js +5 -0
  327. package/dist/src/typings.js.map +1 -0
  328. package/dist/typeorm.d.ts +3 -0
  329. package/dist/typeorm.js +58 -0
  330. package/dist/typeorm.js.map +1 -0
  331. package/dist/typings.d.ts +1 -1
  332. package/package.json +13 -13
@@ -0,0 +1,105 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { OAuth2Client } from 'google-auth-library';
11
+ import { JacksonError, apiError } from '../../../controller/error';
12
+ const scope = [
13
+ 'https://www.googleapis.com/auth/admin.directory.user.readonly',
14
+ 'https://www.googleapis.com/auth/admin.directory.group.readonly',
15
+ 'https://www.googleapis.com/auth/admin.directory.group.member.readonly',
16
+ ];
17
+ export class GoogleAuth {
18
+ constructor({ directories, opts }) {
19
+ this.opts = opts;
20
+ this.directories = directories;
21
+ }
22
+ createOAuth2Client(directory) {
23
+ var _a, _b;
24
+ const googleProvider = (_b = (_a = this.opts.dsync) === null || _a === void 0 ? void 0 : _a.providers) === null || _b === void 0 ? void 0 : _b.google;
25
+ const authClient = new OAuth2Client(googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientId, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientSecret, `${this.opts.externalUrl}${googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.callbackPath}`);
26
+ authClient.setCredentials({
27
+ access_token: directory.google_access_token,
28
+ refresh_token: directory.google_refresh_token,
29
+ });
30
+ return authClient;
31
+ }
32
+ // Generate the Google authorization URL
33
+ generateAuthorizationUrl(params) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const { directoryId } = params;
36
+ try {
37
+ const { data: directory, error } = yield this.directories.get(directoryId);
38
+ if (error) {
39
+ throw error;
40
+ }
41
+ if ((directory === null || directory === void 0 ? void 0 : directory.type) !== 'google') {
42
+ throw new JacksonError('Directory is not a Google Directory', 400);
43
+ }
44
+ const oauth2Client = this.createOAuth2Client(directory);
45
+ const authorizationUrl = oauth2Client.generateAuthUrl({
46
+ access_type: 'offline',
47
+ prompt: 'consent',
48
+ scope,
49
+ state: JSON.stringify({ directoryId }),
50
+ });
51
+ const data = {
52
+ authorizationUrl,
53
+ };
54
+ return { data, error: null };
55
+ }
56
+ catch (error) {
57
+ return apiError(error);
58
+ }
59
+ });
60
+ }
61
+ // Get the Google API access token from the authorization code
62
+ getAccessToken(params) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const { directoryId, code } = params;
65
+ try {
66
+ const { data: directory, error } = yield this.directories.get(directoryId);
67
+ if (error) {
68
+ throw error;
69
+ }
70
+ const oauth2Client = this.createOAuth2Client(directory);
71
+ const { tokens } = yield oauth2Client.getToken(code);
72
+ return { data: tokens, error: null };
73
+ }
74
+ catch (error) {
75
+ return apiError(error);
76
+ }
77
+ });
78
+ }
79
+ // Set the Google API access token and refresh token for the directory
80
+ setToken(params) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ const { directoryId, accessToken, refreshToken } = params;
83
+ try {
84
+ if (!accessToken) {
85
+ throw new JacksonError(`Access token is required`, 400);
86
+ }
87
+ if (!refreshToken) {
88
+ throw new JacksonError(`Refresh token is required`, 400);
89
+ }
90
+ const { data } = yield this.directories.update(directoryId, {
91
+ google_access_token: accessToken,
92
+ google_refresh_token: refreshToken,
93
+ });
94
+ if (!data) {
95
+ throw new JacksonError('Failed to update directory', 400);
96
+ }
97
+ return { data, error: null };
98
+ }
99
+ catch (error) {
100
+ return apiError(error);
101
+ }
102
+ });
103
+ }
104
+ }
105
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../../src/directory-sync/non-scim/google/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { IDirectoryConfig, IUsers, IGroups, IRequestHandler, JacksonOption, EventCallback, CronLock } from '../../typings';
2
+ interface SyncParams {
3
+ userController: IUsers;
4
+ groupController: IGroups;
5
+ opts: JacksonOption;
6
+ directories: IDirectoryConfig;
7
+ requestHandler: IRequestHandler;
8
+ eventCallback: EventCallback;
9
+ eventLock: CronLock;
10
+ }
11
+ export declare class SyncProviders {
12
+ private userController;
13
+ private groupController;
14
+ private directories;
15
+ private requestHandler;
16
+ private opts;
17
+ private cronInterval;
18
+ private eventCallback;
19
+ private eventLock;
20
+ constructor({ userController, groupController, opts, directories, requestHandler, eventCallback, eventLock, }: SyncParams);
21
+ startSync(): Promise<void>;
22
+ private scheduleSync;
23
+ }
24
+ export {};
@@ -0,0 +1,85 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { newGoogleProvider } from './google';
11
+ import { SyncUsers } from './syncUsers';
12
+ import { SyncGroups } from './syncGroups';
13
+ import { SyncGroupMembers } from './syncGroupMembers';
14
+ let isJobRunning = false;
15
+ let intervalId;
16
+ export class SyncProviders {
17
+ constructor({ userController, groupController, opts, directories, requestHandler, eventCallback, eventLock, }) {
18
+ var _a, _b;
19
+ this.userController = userController;
20
+ this.groupController = groupController;
21
+ this.directories = directories;
22
+ this.requestHandler = requestHandler;
23
+ this.eventCallback = eventCallback;
24
+ this.opts = opts;
25
+ this.cronInterval = (_b = (_a = this.opts.dsync) === null || _a === void 0 ? void 0 : _a.providers) === null || _b === void 0 ? void 0 : _b.google.cronInterval;
26
+ this.eventLock = eventLock;
27
+ if (this.cronInterval) {
28
+ this.scheduleSync = this.scheduleSync.bind(this);
29
+ this.scheduleSync();
30
+ }
31
+ }
32
+ // Start the sync process
33
+ startSync() {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ if (isJobRunning) {
36
+ console.info('A sync process is already running, skipping.');
37
+ return;
38
+ }
39
+ if (!(yield this.eventLock.acquire())) {
40
+ return;
41
+ }
42
+ isJobRunning = true;
43
+ const { directory: provider } = newGoogleProvider({ directories: this.directories, opts: this.opts });
44
+ const startTime = Date.now();
45
+ try {
46
+ const allDirectories = yield provider.getDirectories();
47
+ console.info(`Starting the sync process for ${allDirectories.length} directories`);
48
+ for (const directory of allDirectories) {
49
+ const params = {
50
+ directory,
51
+ provider,
52
+ userController: this.userController,
53
+ groupController: this.groupController,
54
+ requestHandler: this.requestHandler,
55
+ callback: this.eventCallback,
56
+ };
57
+ yield new SyncUsers(params).sync();
58
+ yield new SyncGroups(params).sync();
59
+ yield new SyncGroupMembers(params).sync();
60
+ }
61
+ }
62
+ catch (e) {
63
+ console.error(' Error processing Google sync:', e);
64
+ }
65
+ yield this.eventLock.release();
66
+ const endTime = Date.now();
67
+ console.info(`Sync process completed in ${(endTime - startTime) / 1000} seconds`);
68
+ isJobRunning = false;
69
+ if (this.cronInterval) {
70
+ this.scheduleSync();
71
+ }
72
+ });
73
+ }
74
+ // Schedule the next sync process
75
+ scheduleSync() {
76
+ if (!this.cronInterval) {
77
+ return;
78
+ }
79
+ if (intervalId) {
80
+ clearInterval(intervalId);
81
+ }
82
+ intervalId = setInterval(() => this.startSync(), this.cronInterval * 1000);
83
+ }
84
+ }
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Directory, IGroups, Group, IRequestHandler, DirectorySyncRequest, EventCallback, IDirectoryProvider, GroupMembership } from '../../typings';
2
+ interface SyncGroupMembersParams {
3
+ groupController: IGroups;
4
+ provider: IDirectoryProvider;
5
+ requestHandler: IRequestHandler;
6
+ callback: EventCallback;
7
+ directory: Directory;
8
+ }
9
+ type HandleRequestParams = Pick<DirectorySyncRequest, 'method' | 'body' | 'resourceId'>;
10
+ export declare class SyncGroupMembers {
11
+ private groupController;
12
+ private provider;
13
+ private requestHandler;
14
+ private callback;
15
+ private directory;
16
+ constructor({ directory, groupController, requestHandler, provider, callback }: SyncGroupMembersParams);
17
+ sync(): Promise<void>;
18
+ getAllExistingMembers(group: Group): Promise<Pick<GroupMembership, "user_id">[]>;
19
+ addMembers(group: Group, memberIds: string[]): Promise<void>;
20
+ deleteMembers(group: Group, memberIds: string[]): Promise<void>;
21
+ handleRequest(payload: HandleRequestParams): Promise<void>;
22
+ }
23
+ export {};
@@ -0,0 +1,105 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import _ from 'lodash';
11
+ import { compareAndFindDeletedMembers, compareAndFindNewMembers, toGroupMembershipSCIMPayload, } from './utils';
12
+ export class SyncGroupMembers {
13
+ constructor({ directory, groupController, requestHandler, provider, callback }) {
14
+ this.groupController = groupController;
15
+ this.provider = provider;
16
+ this.requestHandler = requestHandler;
17
+ this.callback = callback;
18
+ this.directory = directory;
19
+ }
20
+ sync() {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ let nextPageOption = null;
23
+ do {
24
+ const { data: groups, metadata } = yield this.provider.getGroups(this.directory, nextPageOption);
25
+ if (!groups || groups.length === 0) {
26
+ break;
27
+ }
28
+ for (const group of groups) {
29
+ const membersFromDB = yield this.getAllExistingMembers(group);
30
+ const membersFromProvider = yield this.provider.getGroupMembers(this.directory, group);
31
+ const idsFromDB = _.map(membersFromDB, 'user_id');
32
+ const idsFromProvider = _.map(membersFromProvider, 'id');
33
+ const deletedMembers = compareAndFindDeletedMembers(idsFromDB, idsFromProvider);
34
+ const newMembers = compareAndFindNewMembers(idsFromDB, idsFromProvider);
35
+ if (deletedMembers && deletedMembers.length > 0) {
36
+ yield this.deleteMembers(group, deletedMembers);
37
+ }
38
+ if (newMembers && newMembers.length > 0) {
39
+ yield this.addMembers(group, newMembers);
40
+ }
41
+ }
42
+ nextPageOption = metadata;
43
+ } while (nextPageOption && nextPageOption.hasNextPage);
44
+ });
45
+ }
46
+ // Get all existing members for a group from the Jackson store
47
+ getAllExistingMembers(group) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ const existingMembers = [];
50
+ const pageLimit = 500;
51
+ let pageOffset = 0;
52
+ while (true) {
53
+ const { data: members } = yield this.groupController
54
+ .setTenantAndProduct(this.directory.tenant, this.directory.product)
55
+ .getGroupMembers({
56
+ groupId: group.id,
57
+ pageOffset,
58
+ pageLimit,
59
+ });
60
+ if (!members || members.length === 0) {
61
+ break;
62
+ }
63
+ existingMembers.push(...members);
64
+ if (members.length < pageLimit) {
65
+ break;
66
+ }
67
+ pageOffset += pageLimit;
68
+ }
69
+ return existingMembers;
70
+ });
71
+ }
72
+ addMembers(group, memberIds) {
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ yield this.handleRequest({
75
+ method: 'PATCH',
76
+ body: toGroupMembershipSCIMPayload(memberIds, 'add'),
77
+ resourceId: group.id,
78
+ });
79
+ });
80
+ }
81
+ deleteMembers(group, memberIds) {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ yield this.handleRequest({
84
+ method: 'PATCH',
85
+ body: toGroupMembershipSCIMPayload(memberIds, 'remove'),
86
+ resourceId: group.id,
87
+ });
88
+ });
89
+ }
90
+ handleRequest(payload) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ const request = {
93
+ query: {},
94
+ body: payload.body,
95
+ resourceType: 'groups',
96
+ method: payload.method,
97
+ directoryId: this.directory.id,
98
+ apiSecret: this.directory.scim.secret,
99
+ resourceId: payload.resourceId,
100
+ };
101
+ yield this.requestHandler.handle(request, this.callback);
102
+ });
103
+ }
104
+ }
105
+ //# sourceMappingURL=syncGroupMembers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncGroupMembers.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/syncGroupMembers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Directory, IGroups, Group, IRequestHandler, DirectorySyncRequest, EventCallback, IDirectoryProvider } from '../../typings';
2
+ interface SyncGroupsParams {
3
+ groupController: IGroups;
4
+ provider: IDirectoryProvider;
5
+ requestHandler: IRequestHandler;
6
+ callback: EventCallback;
7
+ directory: Directory;
8
+ }
9
+ type HandleRequestParams = Pick<DirectorySyncRequest, 'method' | 'body' | 'resourceId'>;
10
+ export declare class SyncGroups {
11
+ private groupController;
12
+ private provider;
13
+ private requestHandler;
14
+ private callback;
15
+ private directory;
16
+ constructor({ directory, groupController, callback, requestHandler, provider }: SyncGroupsParams);
17
+ sync(): Promise<void>;
18
+ getAllExistingGroups(): Promise<Group[]>;
19
+ createGroup(group: Group): Promise<void>;
20
+ updateGroup(group: Group): Promise<void>;
21
+ deleteGroups(groups: Group[]): Promise<void>;
22
+ handleRequest(payload: HandleRequestParams): Promise<void>;
23
+ }
24
+ export {};
@@ -0,0 +1,120 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { compareAndFindDeletedGroups, isGroupUpdated, toGroupSCIMPayload } from './utils';
11
+ export class SyncGroups {
12
+ constructor({ directory, groupController, callback, requestHandler, provider }) {
13
+ this.groupController = groupController;
14
+ this.provider = provider;
15
+ this.requestHandler = requestHandler;
16
+ this.callback = callback;
17
+ this.directory = directory;
18
+ }
19
+ sync() {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const groupsFromProvider = [];
22
+ let nextPageOption = null;
23
+ do {
24
+ const { data: groups, metadata } = yield this.provider.getGroups(this.directory, nextPageOption);
25
+ if (!groups || groups.length === 0) {
26
+ break;
27
+ }
28
+ // Create or update groups
29
+ for (const group of groups) {
30
+ const { data: existingGroup } = yield this.groupController
31
+ .setTenantAndProduct(this.directory.tenant, this.directory.product)
32
+ .get(group.id);
33
+ if (!existingGroup) {
34
+ yield this.createGroup(group);
35
+ }
36
+ else if (isGroupUpdated(existingGroup, group, this.provider.groupFieldsToExcludeWhenCompare)) {
37
+ yield this.updateGroup(group);
38
+ }
39
+ }
40
+ // Store groups to compare and delete later
41
+ groupsFromProvider.push(...groups);
42
+ nextPageOption = metadata;
43
+ } while (nextPageOption && nextPageOption.hasNextPage);
44
+ // Delete users that are not in the directory anymore
45
+ const existingGroups = yield this.getAllExistingGroups();
46
+ const groupsToDelete = compareAndFindDeletedGroups(existingGroups, groupsFromProvider);
47
+ yield this.deleteGroups(groupsToDelete);
48
+ });
49
+ }
50
+ // Get all the existing groups from the Jackson store
51
+ getAllExistingGroups() {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const existingGroups = [];
54
+ const pageLimit = 500;
55
+ let pageOffset = 0;
56
+ while (true) {
57
+ const { data: groups } = yield this.groupController
58
+ .setTenantAndProduct(this.directory.tenant, this.directory.product)
59
+ .getAll({
60
+ directoryId: this.directory.id,
61
+ pageOffset,
62
+ pageLimit,
63
+ });
64
+ if (!groups || groups.length === 0) {
65
+ break;
66
+ }
67
+ existingGroups.push(...groups);
68
+ if (groups.length < pageLimit) {
69
+ break;
70
+ }
71
+ pageOffset += pageLimit;
72
+ }
73
+ return existingGroups;
74
+ });
75
+ }
76
+ createGroup(group) {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ yield this.handleRequest({
79
+ method: 'POST',
80
+ body: toGroupSCIMPayload(group),
81
+ resourceId: undefined,
82
+ });
83
+ });
84
+ }
85
+ updateGroup(group) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ yield this.handleRequest({
88
+ method: 'PUT',
89
+ body: toGroupSCIMPayload(group),
90
+ resourceId: group.id,
91
+ });
92
+ });
93
+ }
94
+ deleteGroups(groups) {
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ for (const group of groups) {
97
+ yield this.handleRequest({
98
+ method: 'DELETE',
99
+ body: toGroupSCIMPayload(group),
100
+ resourceId: group.id,
101
+ });
102
+ }
103
+ });
104
+ }
105
+ handleRequest(payload) {
106
+ return __awaiter(this, void 0, void 0, function* () {
107
+ const request = {
108
+ query: {},
109
+ body: payload.body,
110
+ resourceType: 'groups',
111
+ method: payload.method,
112
+ directoryId: this.directory.id,
113
+ apiSecret: this.directory.scim.secret,
114
+ resourceId: payload.resourceId,
115
+ };
116
+ yield this.requestHandler.handle(request, this.callback);
117
+ });
118
+ }
119
+ }
120
+ //# sourceMappingURL=syncGroups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncGroups.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/syncGroups.ts"],"names":[],"mappings":";;;;;;;;;AAUA,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAY1F,MAAM,OAAO,UAAU;IAOrB,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAoB;QAC9F,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEK,IAAI;;YACR,MAAM,kBAAkB,GAAY,EAAE,CAAC;YACvC,IAAI,cAAc,GAA4B,IAAI,CAAC;YAEnD,GAAG,CAAC;gBACF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;gBAEjG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACnC,MAAM;gBACR,CAAC;gBAED,0BAA0B;gBAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe;yBACvD,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;yBAClE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAEjB,IAAI,CAAC,aAAa,EAAE,CAAC;wBACnB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBAChC,CAAC;yBAAM,IAAI,cAAc,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;wBAC/F,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;gBAED,2CAA2C;gBAC3C,kBAAkB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;gBAEnC,cAAc,GAAG,QAAQ,CAAC;YAC5B,CAAC,QAAQ,cAAc,IAAI,cAAc,CAAC,WAAW,EAAE;YAEvD,qDAAqD;YACrD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACzD,MAAM,cAAc,GAAG,2BAA2B,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAEvF,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAC1C,CAAC;KAAA;IAED,qDAAqD;IAC/C,oBAAoB;;YACxB,MAAM,cAAc,GAAY,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,GAAG,CAAC;YACtB,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,OAAO,IAAe,EAAE,CAAC;gBACvB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe;qBAChD,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;qBAClE,MAAM,CAAC;oBACN,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;oBAC9B,UAAU;oBACV,SAAS;iBACV,CAAC,CAAC;gBAEL,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACnC,MAAM;gBACR,CAAC;gBAED,cAAc,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;gBAE/B,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;oBAC9B,MAAM;gBACR,CAAC;gBAED,UAAU,IAAI,SAAS,CAAC;YAC1B,CAAC;YAED,OAAO,cAAc,CAAC;QACxB,CAAC;KAAA;IAEK,WAAW,CAAC,KAAY;;YAC5B,MAAM,IAAI,CAAC,aAAa,CAAC;gBACvB,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC;gBAC/B,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,WAAW,CAAC,KAAY;;YAC5B,MAAM,IAAI,CAAC,aAAa,CAAC;gBACvB,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC;gBAC/B,UAAU,EAAE,KAAK,CAAC,EAAE;aACrB,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,YAAY,CAAC,MAAe;;YAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,CAAC,aAAa,CAAC;oBACvB,MAAM,EAAE,QAAQ;oBAChB,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC;oBAC/B,UAAU,EAAE,KAAK,CAAC,EAAE;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KAAA;IAEK,aAAa,CAAC,OAA4B;;YAC9C,MAAM,OAAO,GAAyB;gBACpC,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,YAAY,EAAE,QAAQ;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC9B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM;gBACrC,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC;YAEF,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC;KAAA;CACF"}
@@ -0,0 +1,24 @@
1
+ import type { Directory, User, IUsers, IRequestHandler, DirectorySyncRequest, EventCallback, IDirectoryProvider } from '../../typings';
2
+ interface SyncUserParams {
3
+ directory: Directory;
4
+ userController: IUsers;
5
+ callback: EventCallback;
6
+ provider: IDirectoryProvider;
7
+ requestHandler: IRequestHandler;
8
+ }
9
+ type HandleRequestParams = Pick<DirectorySyncRequest, 'method' | 'body' | 'resourceId'>;
10
+ export declare class SyncUsers {
11
+ private directory;
12
+ private userController;
13
+ private callback;
14
+ private provider;
15
+ private requestHandler;
16
+ constructor({ directory, userController, callback, provider, requestHandler }: SyncUserParams);
17
+ sync(): Promise<void>;
18
+ getAllExistingUsers(): Promise<User[]>;
19
+ createUser(user: User): Promise<void>;
20
+ updateUser(user: User): Promise<void>;
21
+ deleteUsers(users: User[]): Promise<void>;
22
+ handleRequest(payload: HandleRequestParams): Promise<void>;
23
+ }
24
+ export {};