@boxyhq/saml-jackson 1.9.11 → 1.10.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 (111) hide show
  1. package/dist/controller/api.d.ts +9 -0
  2. package/dist/controller/api.js +14 -0
  3. package/dist/controller/api.js.map +1 -1
  4. package/dist/controller/connection/oidc.js +8 -0
  5. package/dist/controller/connection/oidc.js.map +1 -1
  6. package/dist/controller/connection/saml.js +8 -0
  7. package/dist/controller/connection/saml.js.map +1 -1
  8. package/dist/controller/utils.d.ts +3 -1
  9. package/dist/controller/utils.js +3 -1
  10. package/dist/controller/utils.js.map +1 -1
  11. package/dist/db/planetscale/entity/JacksonIndex.js +2 -3
  12. package/dist/db/planetscale/entity/JacksonIndex.js.map +1 -1
  13. package/dist/db/planetscale/entity/JacksonStore.js +2 -3
  14. package/dist/db/planetscale/entity/JacksonStore.js.map +1 -1
  15. package/dist/db/planetscale/entity/JacksonTTL.js +2 -3
  16. package/dist/db/planetscale/entity/JacksonTTL.js.map +1 -1
  17. package/dist/db/redis.js +16 -26
  18. package/dist/db/redis.js.map +1 -1
  19. package/dist/db/sql/entity/JacksonIndex.js +2 -3
  20. package/dist/db/sql/entity/JacksonIndex.js.map +1 -1
  21. package/dist/db/sql/entity/JacksonStore.js +2 -3
  22. package/dist/db/sql/entity/JacksonStore.js.map +1 -1
  23. package/dist/db/sql/entity/JacksonTTL.js +2 -3
  24. package/dist/db/sql/entity/JacksonTTL.js.map +1 -1
  25. package/dist/db/sql/mariadb/entity/JacksonIndex.js +2 -3
  26. package/dist/db/sql/mariadb/entity/JacksonIndex.js.map +1 -1
  27. package/dist/db/sql/mariadb/entity/JacksonStore.js +2 -3
  28. package/dist/db/sql/mariadb/entity/JacksonStore.js.map +1 -1
  29. package/dist/db/sql/mariadb/entity/JacksonTTL.js +2 -3
  30. package/dist/db/sql/mariadb/entity/JacksonTTL.js.map +1 -1
  31. package/dist/db/sql/mssql/entity/JacksonIndex.js +2 -3
  32. package/dist/db/sql/mssql/entity/JacksonIndex.js.map +1 -1
  33. package/dist/db/sql/mssql/entity/JacksonStore.js +2 -3
  34. package/dist/db/sql/mssql/entity/JacksonStore.js.map +1 -1
  35. package/dist/db/sql/mssql/entity/JacksonTTL.js +2 -3
  36. package/dist/db/sql/mssql/entity/JacksonTTL.js.map +1 -1
  37. package/dist/directory-sync/index.d.ts +10 -8
  38. package/dist/directory-sync/index.js +22 -12
  39. package/dist/directory-sync/index.js.map +1 -1
  40. package/dist/directory-sync/non-scim/google/api.d.ts +48 -0
  41. package/dist/directory-sync/non-scim/google/api.js +147 -0
  42. package/dist/directory-sync/non-scim/google/api.js.map +1 -0
  43. package/dist/directory-sync/non-scim/google/index.d.ts +12 -0
  44. package/dist/directory-sync/non-scim/google/index.js +14 -0
  45. package/dist/directory-sync/non-scim/google/index.js.map +1 -0
  46. package/dist/directory-sync/non-scim/google/oauth.d.ts +27 -0
  47. package/dist/directory-sync/non-scim/google/oauth.js +109 -0
  48. package/dist/directory-sync/non-scim/google/oauth.js.map +1 -0
  49. package/dist/directory-sync/non-scim/index.d.ts +10 -0
  50. package/dist/directory-sync/non-scim/index.js +51 -0
  51. package/dist/directory-sync/non-scim/index.js.map +1 -0
  52. package/dist/directory-sync/non-scim/syncGroupMembers.d.ts +23 -0
  53. package/dist/directory-sync/non-scim/syncGroupMembers.js +112 -0
  54. package/dist/directory-sync/non-scim/syncGroupMembers.js.map +1 -0
  55. package/dist/directory-sync/non-scim/syncGroups.d.ts +24 -0
  56. package/dist/directory-sync/non-scim/syncGroups.js +124 -0
  57. package/dist/directory-sync/non-scim/syncGroups.js.map +1 -0
  58. package/dist/directory-sync/non-scim/syncUsers.d.ts +24 -0
  59. package/dist/directory-sync/non-scim/syncUsers.js +124 -0
  60. package/dist/directory-sync/non-scim/syncUsers.js.map +1 -0
  61. package/dist/directory-sync/non-scim/utils.d.ts +36 -0
  62. package/dist/directory-sync/non-scim/utils.js +124 -0
  63. package/dist/directory-sync/non-scim/utils.js.map +1 -0
  64. package/dist/directory-sync/{Base.d.ts → scim/Base.d.ts} +1 -5
  65. package/dist/directory-sync/{Base.js → scim/Base.js} +3 -17
  66. package/dist/directory-sync/scim/Base.js.map +1 -0
  67. package/dist/directory-sync/{DirectoryConfig.d.ts → scim/DirectoryConfig.d.ts} +20 -27
  68. package/dist/directory-sync/{DirectoryConfig.js → scim/DirectoryConfig.js} +94 -48
  69. package/dist/directory-sync/scim/DirectoryConfig.js.map +1 -0
  70. package/dist/directory-sync/{DirectoryGroups.d.ts → scim/DirectoryGroups.d.ts} +8 -6
  71. package/dist/directory-sync/{DirectoryGroups.js → scim/DirectoryGroups.js} +8 -12
  72. package/dist/directory-sync/scim/DirectoryGroups.js.map +1 -0
  73. package/dist/directory-sync/{DirectoryUsers.d.ts → scim/DirectoryUsers.d.ts} +7 -5
  74. package/dist/directory-sync/{DirectoryUsers.js → scim/DirectoryUsers.js} +4 -3
  75. package/dist/directory-sync/scim/DirectoryUsers.js.map +1 -0
  76. package/dist/directory-sync/scim/Groups.d.ts +38 -0
  77. package/dist/directory-sync/{Groups.js → scim/Groups.js} +38 -29
  78. package/dist/directory-sync/scim/Groups.js.map +1 -0
  79. package/dist/directory-sync/scim/Users.d.ts +32 -0
  80. package/dist/directory-sync/{Users.js → scim/Users.js} +27 -25
  81. package/dist/directory-sync/scim/Users.js.map +1 -0
  82. package/dist/directory-sync/{WebhookEventsLogger.d.ts → scim/WebhookEventsLogger.d.ts} +1 -1
  83. package/dist/directory-sync/{WebhookEventsLogger.js → scim/WebhookEventsLogger.js} +3 -1
  84. package/dist/directory-sync/scim/WebhookEventsLogger.js.map +1 -0
  85. package/dist/directory-sync/{events.d.ts → scim/events.d.ts} +5 -3
  86. package/dist/directory-sync/{events.js → scim/events.js} +6 -4
  87. package/dist/directory-sync/scim/events.js.map +1 -0
  88. package/dist/directory-sync/{transform.d.ts → scim/transform.d.ts} +1 -1
  89. package/dist/directory-sync/scim/transform.js.map +1 -0
  90. package/dist/directory-sync/scim/utils.d.ts +33 -0
  91. package/dist/directory-sync/{utils.js → scim/utils.js} +8 -3
  92. package/dist/directory-sync/scim/utils.js.map +1 -0
  93. package/dist/directory-sync/types.d.ts +65 -13
  94. package/dist/directory-sync/types.js +3 -2
  95. package/dist/directory-sync/types.js.map +1 -1
  96. package/dist/typings.d.ts +18 -0
  97. package/package.json +15 -12
  98. package/dist/directory-sync/Base.js.map +0 -1
  99. package/dist/directory-sync/DirectoryConfig.js.map +0 -1
  100. package/dist/directory-sync/DirectoryGroups.js.map +0 -1
  101. package/dist/directory-sync/DirectoryUsers.js.map +0 -1
  102. package/dist/directory-sync/Groups.d.ts +0 -48
  103. package/dist/directory-sync/Groups.js.map +0 -1
  104. package/dist/directory-sync/Users.d.ts +0 -49
  105. package/dist/directory-sync/Users.js.map +0 -1
  106. package/dist/directory-sync/WebhookEventsLogger.js.map +0 -1
  107. package/dist/directory-sync/events.js.map +0 -1
  108. package/dist/directory-sync/transform.js.map +0 -1
  109. package/dist/directory-sync/utils.d.ts +0 -33
  110. package/dist/directory-sync/utils.js.map +0 -1
  111. /package/dist/directory-sync/{transform.js → scim/transform.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"JacksonTTL.js","sourceRoot":"","sources":["../../../../../src/db/sql/mariadb/entity/JacksonTTL.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAgD;AAGhD,IAAa,UAAU,GAAvB,MAAa,UAAU;CAatB,CAAA;AAPC;IALC,IAAA,gBAAM,EAAC;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;uCACW;AAMb;IAJC,IAAA,eAAK,EAAC,yBAAyB,CAAC;IAChC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,QAAQ;KACf,CAAC;6CACiB;AAZR,UAAU;IADtB,IAAA,gBAAM,GAAE;GACI,UAAU,CAatB;AAbY,gCAAU"}
1
+ {"version":3,"file":"JacksonTTL.js","sourceRoot":"","sources":["../../../../../src/db/sql/mariadb/entity/JacksonTTL.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAgD;AAGzC,IAAM,UAAU,wBAAhB,MAAM,UAAU;CAatB,CAAA;AAPC;IALC,IAAA,gBAAM,EAAC;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;uCACW;AAMb;IAJC,IAAA,eAAK,EAAC,yBAAyB,CAAC;IAChC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,QAAQ;KACf,CAAC;6CACiB;qBAZR,UAAU;IADtB,IAAA,gBAAM,GAAE;GACI,UAAU,CAatB"}
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.JacksonIndex = void 0;
10
10
  const JacksonStore_1 = require("./JacksonStore");
11
11
  const typeorm_1 = require("typeorm");
12
- let JacksonIndex = class JacksonIndex {
12
+ let JacksonIndex = exports.JacksonIndex = class JacksonIndex {
13
13
  };
14
14
  __decorate([
15
15
  (0, typeorm_1.PrimaryGeneratedColumn)()
@@ -34,9 +34,8 @@ __decorate([
34
34
  onDelete: 'CASCADE',
35
35
  })
36
36
  ], JacksonIndex.prototype, "store", void 0);
37
- JacksonIndex = __decorate([
37
+ exports.JacksonIndex = JacksonIndex = __decorate([
38
38
  (0, typeorm_1.Index)('_jackson_index_key_store', ['key', 'storeKey']),
39
39
  (0, typeorm_1.Entity)()
40
40
  ], JacksonIndex);
41
- exports.JacksonIndex = JacksonIndex;
42
41
  //# sourceMappingURL=JacksonIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JacksonIndex.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonIndex.ts"],"names":[],"mappings":";;;;;;;;;AAAA,iDAA8C;AAE9C,qCAAmF;AAInF,IAAa,YAAY,GAAzB,MAAa,YAAY;CAuBxB,CAAA;AArBC;IADC,IAAA,gCAAsB,GAAE;wCACb;AAOZ;IALC,IAAA,eAAK,EAAC,oBAAoB,CAAC;IAC3B,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;yCACW;AAMb;IAJC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;8CACgB;AAOlB;IALC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,2BAAY,EAAE,SAAS,EAAE;QACxC,oBAAoB;QACpB,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,SAAS;KACpB,CAAC;2CACmB;AAtBV,YAAY;IAFxB,IAAA,eAAK,EAAC,0BAA0B,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACtD,IAAA,gBAAM,GAAE;GACI,YAAY,CAuBxB;AAvBY,oCAAY"}
1
+ {"version":3,"file":"JacksonIndex.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonIndex.ts"],"names":[],"mappings":";;;;;;;;;AAAA,iDAA8C;AAE9C,qCAAmF;AAI5E,IAAM,YAAY,0BAAlB,MAAM,YAAY;CAuBxB,CAAA;AArBC;IADC,IAAA,gCAAsB,GAAE;wCACb;AAOZ;IALC,IAAA,eAAK,EAAC,oBAAoB,CAAC;IAC3B,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;yCACW;AAMb;IAJC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;8CACgB;AAOlB;IALC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,2BAAY,EAAE,SAAS,EAAE;QACxC,oBAAoB;QACpB,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,SAAS;KACpB,CAAC;2CACmB;uBAtBV,YAAY;IAFxB,IAAA,eAAK,EAAC,0BAA0B,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACtD,IAAA,gBAAM,GAAE;GACI,YAAY,CAuBxB"}
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.JacksonStore = void 0;
10
10
  const typeorm_1 = require("typeorm");
11
- let JacksonStore = class JacksonStore {
11
+ let JacksonStore = exports.JacksonStore = class JacksonStore {
12
12
  };
13
13
  __decorate([
14
14
  (0, typeorm_1.Column)({
@@ -49,8 +49,7 @@ __decorate([
49
49
  nullable: true,
50
50
  })
51
51
  ], JacksonStore.prototype, "modifiedAt", void 0);
52
- JacksonStore = __decorate([
52
+ exports.JacksonStore = JacksonStore = __decorate([
53
53
  (0, typeorm_1.Entity)()
54
54
  ], JacksonStore);
55
- exports.JacksonStore = JacksonStore;
56
55
  //# sourceMappingURL=JacksonStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JacksonStore.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonStore.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAyC;AAGzC,IAAa,YAAY,GAAzB,MAAa,YAAY;CAuCxB,CAAA;AAjCC;IALC,IAAA,gBAAM,EAAC;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;yCACW;AAKb;IAHC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;KACb,CAAC;2CACa;AAOf;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;KACf,CAAC;wCACU;AAOZ;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;KACf,CAAC;yCACW;AAOb;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB;QAClC,QAAQ,EAAE,KAAK;KAChB,CAAC;+CACe;AAMjB;IAJC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,IAAI;KACf,CAAC;gDACkB;AAtCT,YAAY;IADxB,IAAA,gBAAM,GAAE;GACI,YAAY,CAuCxB;AAvCY,oCAAY"}
1
+ {"version":3,"file":"JacksonStore.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonStore.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,YAAY,0BAAlB,MAAM,YAAY;CAuCxB,CAAA;AAjCC;IALC,IAAA,gBAAM,EAAC;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;yCACW;AAKb;IAHC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;KACb,CAAC;2CACa;AAOf;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;KACf,CAAC;wCACU;AAOZ;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;KACf,CAAC;yCACW;AAOb;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB;QAClC,QAAQ,EAAE,KAAK;KAChB,CAAC;+CACe;AAMjB;IAJC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,IAAI;KACf,CAAC;gDACkB;uBAtCT,YAAY;IADxB,IAAA,gBAAM,GAAE;GACI,YAAY,CAuCxB"}
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.JacksonTTL = void 0;
10
10
  const typeorm_1 = require("typeorm");
11
- let JacksonTTL = class JacksonTTL {
11
+ let JacksonTTL = exports.JacksonTTL = class JacksonTTL {
12
12
  };
13
13
  __decorate([
14
14
  (0, typeorm_1.Column)({
@@ -23,8 +23,7 @@ __decorate([
23
23
  type: 'bigint',
24
24
  })
25
25
  ], JacksonTTL.prototype, "expiresAt", void 0);
26
- JacksonTTL = __decorate([
26
+ exports.JacksonTTL = JacksonTTL = __decorate([
27
27
  (0, typeorm_1.Entity)()
28
28
  ], JacksonTTL);
29
- exports.JacksonTTL = JacksonTTL;
30
29
  //# sourceMappingURL=JacksonTTL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JacksonTTL.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonTTL.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAgD;AAGhD,IAAa,UAAU,GAAvB,MAAa,UAAU;CAatB,CAAA;AAPC;IALC,IAAA,gBAAM,EAAC;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;uCACW;AAMb;IAJC,IAAA,eAAK,EAAC,yBAAyB,CAAC;IAChC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,QAAQ;KACf,CAAC;6CACiB;AAZR,UAAU;IADtB,IAAA,gBAAM,GAAE;GACI,UAAU,CAatB;AAbY,gCAAU"}
1
+ {"version":3,"file":"JacksonTTL.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonTTL.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAgD;AAGzC,IAAM,UAAU,wBAAhB,MAAM,UAAU;CAatB,CAAA;AAPC;IALC,IAAA,gBAAM,EAAC;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;uCACW;AAMb;IAJC,IAAA,eAAK,EAAC,yBAAyB,CAAC;IAChC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,QAAQ;KACf,CAAC;6CACiB;qBAZR,UAAU;IADtB,IAAA,gBAAM,GAAE;GACI,UAAU,CAatB"}
@@ -1,9 +1,9 @@
1
- import type { DatabaseStore, JacksonOption, IEventController } from '../typings';
2
- import { DirectoryConfig } from './DirectoryConfig';
3
- import { Users } from './Users';
4
- import { Groups } from './Groups';
1
+ import type { DatabaseStore, JacksonOption, IEventController, EventCallback } from '../typings';
2
+ import { DirectoryConfig } from './scim/DirectoryConfig';
3
+ import { Users } from './scim/Users';
4
+ import { Groups } from './scim/Groups';
5
5
  import { RequestHandler } from './request';
6
- import { WebhookEventsLogger } from './WebhookEventsLogger';
6
+ import { WebhookEventsLogger } from './scim/WebhookEventsLogger';
7
7
  declare const directorySync: (params: {
8
8
  db: DatabaseStore;
9
9
  opts: JacksonOption;
@@ -14,11 +14,13 @@ declare const directorySync: (params: {
14
14
  directories: DirectoryConfig;
15
15
  webhookLogs: WebhookEventsLogger;
16
16
  requests: RequestHandler;
17
- events: {
18
- callback: (event: import("./types").DirectorySyncEvent) => Promise<void>;
19
- };
20
17
  providers: () => {
21
18
  [K: string]: string;
22
19
  };
20
+ events: {
21
+ callback: (event: import("./types").DirectorySyncEvent) => Promise<void>;
22
+ };
23
+ google: import("./non-scim/google/oauth").GoogleAuth;
24
+ sync: (callback: EventCallback) => Promise<void>;
23
25
  }>;
24
26
  export default directorySync;
@@ -9,15 +9,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const DirectoryConfig_1 = require("./DirectoryConfig");
13
- const DirectoryUsers_1 = require("./DirectoryUsers");
14
- const DirectoryGroups_1 = require("./DirectoryGroups");
15
- const Users_1 = require("./Users");
16
- const Groups_1 = require("./Groups");
17
- const utils_1 = require("./utils");
12
+ const DirectoryConfig_1 = require("./scim/DirectoryConfig");
13
+ const DirectoryUsers_1 = require("./scim/DirectoryUsers");
14
+ const DirectoryGroups_1 = require("./scim/DirectoryGroups");
15
+ const Users_1 = require("./scim/Users");
16
+ const Groups_1 = require("./scim/Groups");
17
+ const utils_1 = require("./scim/utils");
18
18
  const request_1 = require("./request");
19
- const events_1 = require("./events");
20
- const WebhookEventsLogger_1 = require("./WebhookEventsLogger");
19
+ const events_1 = require("./scim/events");
20
+ const WebhookEventsLogger_1 = require("./scim/WebhookEventsLogger");
21
+ const google_1 = require("./non-scim/google");
22
+ const non_scim_1 = require("./non-scim");
21
23
  const directorySync = (params) => __awaiter(void 0, void 0, void 0, function* () {
22
24
  const { db, opts, eventController } = params;
23
25
  const users = new Users_1.Users({ db });
@@ -26,18 +28,26 @@ const directorySync = (params) => __awaiter(void 0, void 0, void 0, function* ()
26
28
  const directories = new DirectoryConfig_1.DirectoryConfig({ db, opts, users, groups, logger, eventController });
27
29
  const directoryUsers = new DirectoryUsers_1.DirectoryUsers({ directories, users });
28
30
  const directoryGroups = new DirectoryGroups_1.DirectoryGroups({ directories, users, groups });
31
+ const requestHandler = new request_1.RequestHandler(directoryUsers, directoryGroups);
32
+ // Fetch the supported providers
33
+ const getProviders = () => {
34
+ return (0, utils_1.getDirectorySyncProviders)();
35
+ };
36
+ const googleProvider = (0, google_1.newGoogleProvider)({ directories, opts });
29
37
  return {
30
38
  users,
31
39
  groups,
32
40
  directories,
33
41
  webhookLogs: logger,
34
- requests: new request_1.RequestHandler(directoryUsers, directoryGroups),
42
+ requests: requestHandler,
43
+ providers: getProviders,
35
44
  events: {
36
45
  callback: yield (0, events_1.handleEventCallback)(directories, logger),
37
46
  },
38
- providers: () => {
39
- return (0, utils_1.getDirectorySyncProviders)();
40
- },
47
+ google: googleProvider.oauth,
48
+ sync: (callback) => __awaiter(void 0, void 0, void 0, function* () {
49
+ return yield (0, non_scim_1.startSync)({ userController: users, groupController: groups, opts, directories, requestHandler }, callback);
50
+ }),
41
51
  };
42
52
  });
43
53
  exports.default = directorySync;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/directory-sync/index.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,uDAAoD;AACpD,qDAAkD;AAClD,uDAAoD;AACpD,mCAAgC;AAChC,qCAAkC;AAClC,mCAAoD;AACpD,uCAA2C;AAC3C,qCAA+C;AAC/C,+DAA4D;AAE5D,MAAM,aAAa,GAAG,CAAO,MAI5B,EAAE,EAAE;IACH,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAE7C,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,yCAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,iCAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAE9F,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5E,OAAO;QACL,KAAK;QACL,MAAM;QACN,WAAW;QACX,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE,IAAI,wBAAc,CAAC,cAAc,EAAE,eAAe,CAAC;QAC7D,MAAM,EAAE;YACN,QAAQ,EAAE,MAAM,IAAA,4BAAmB,EAAC,WAAW,EAAE,MAAM,CAAC;SACzD;QACD,SAAS,EAAE,GAAG,EAAE;YACd,OAAO,IAAA,iCAAyB,GAAE,CAAC;QACrC,CAAC;KACF,CAAC;AACJ,CAAC,CAAA,CAAC;AAEF,kBAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/directory-sync/index.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,4DAAyD;AACzD,0DAAuD;AACvD,4DAAyD;AACzD,wCAAqC;AACrC,0CAAuC;AACvC,wCAAyD;AACzD,uCAA2C;AAC3C,0CAAoD;AACpD,oEAAiE;AACjE,8CAAsD;AACtD,yCAAuC;AAEvC,MAAM,aAAa,GAAG,CAAO,MAI5B,EAAE,EAAE;IACH,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAE7C,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,yCAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,iCAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAE9F,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAG,IAAI,wBAAc,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAE3E,gCAAgC;IAChC,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,OAAO,IAAA,iCAAyB,GAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,IAAA,0BAAiB,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,OAAO;QACL,KAAK;QACL,MAAM;QACN,WAAW;QACX,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE;YACN,QAAQ,EAAE,MAAM,IAAA,4BAAmB,EAAC,WAAW,EAAE,MAAM,CAAC;SACzD;QACD,MAAM,EAAE,cAAc,CAAC,KAAK;QAC5B,IAAI,EAAE,CAAO,QAAuB,EAAE,EAAE;YACtC,OAAO,MAAM,IAAA,oBAAS,EACpB,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,EACrF,QAAQ,CACT,CAAC;QACJ,CAAC,CAAA;KACF,CAAC;AACJ,CAAC,CAAA,CAAC;AAEF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { OAuth2Client } from 'google-auth-library';
2
+ import type { Directory, IDirectoryConfig, Group, GroupMember, IDirectoryProvider, JacksonOption, PaginationParams } from '../../../typings';
3
+ interface GoogleProviderParams {
4
+ opts: JacksonOption;
5
+ directories: IDirectoryConfig;
6
+ }
7
+ export declare class GoogleProvider implements IDirectoryProvider {
8
+ opts: JacksonOption;
9
+ directories: IDirectoryConfig;
10
+ groupFieldsToExcludeWhenCompare: string[];
11
+ userFieldsToExcludeWhenCompare: string[];
12
+ constructor({ directories, opts }: GoogleProviderParams);
13
+ createOAuth2Client(directory: Directory): OAuth2Client;
14
+ getDirectories(): Promise<Directory[]>;
15
+ getUsers(directory: Directory, options: PaginationParams | null): Promise<{
16
+ data: never[];
17
+ metadata: null;
18
+ } | {
19
+ data: {
20
+ id: string;
21
+ email: string;
22
+ first_name: string;
23
+ last_name: string;
24
+ active: boolean;
25
+ raw: import("googleapis").admin_directory_v1.Schema$User;
26
+ }[];
27
+ metadata: {
28
+ nextPageToken: string | null | undefined;
29
+ hasNextPage: boolean;
30
+ };
31
+ }>;
32
+ getGroups(directory: Directory, options: PaginationParams | null): Promise<{
33
+ data: never[];
34
+ metadata: null;
35
+ } | {
36
+ data: {
37
+ id: string;
38
+ name: string;
39
+ raw: import("googleapis").admin_directory_v1.Schema$Group;
40
+ }[];
41
+ metadata: {
42
+ pageToken: string;
43
+ hasNextPage: boolean;
44
+ };
45
+ }>;
46
+ getGroupMembers(directory: Directory, group: Group): Promise<GroupMember[]>;
47
+ }
48
+ export {};
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.GoogleProvider = void 0;
13
+ const googleapis_1 = require("googleapis");
14
+ const google_auth_library_1 = require("google-auth-library");
15
+ class GoogleProvider {
16
+ constructor({ directories, opts }) {
17
+ this.groupFieldsToExcludeWhenCompare = ['etag'];
18
+ this.userFieldsToExcludeWhenCompare = ['etag', 'lastLoginTime', 'thumbnailPhotoEtag'];
19
+ this.opts = opts;
20
+ this.directories = directories;
21
+ }
22
+ createOAuth2Client(directory) {
23
+ var _a;
24
+ const googleProvider = (_a = this.opts.dsync) === null || _a === void 0 ? void 0 : _a.providers.google;
25
+ const authClient = new google_auth_library_1.OAuth2Client(googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientId, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientSecret, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.callbackUrl);
26
+ authClient.setCredentials({
27
+ access_token: directory.google_access_token,
28
+ refresh_token: directory.google_refresh_token,
29
+ });
30
+ return authClient;
31
+ }
32
+ getDirectories() {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ const { data: directories } = yield this.directories.filterBy({
35
+ provider: 'google',
36
+ });
37
+ if (!directories || directories.length === 0) {
38
+ return [];
39
+ }
40
+ return directories.filter((directory) => {
41
+ return (directory.google_access_token && directory.google_refresh_token && directory.google_domain !== '');
42
+ });
43
+ });
44
+ }
45
+ getUsers(directory, options) {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ const query = {
48
+ maxResults: 200,
49
+ domain: directory.google_domain,
50
+ };
51
+ if (options === null || options === void 0 ? void 0 : options.pageToken) {
52
+ query['pageToken'] = options.pageToken;
53
+ }
54
+ const googleAdmin = googleapis_1.google.admin({ version: 'directory_v1', auth: this.createOAuth2Client(directory) });
55
+ const response = yield googleAdmin.users.list(query);
56
+ if (!response.data.users) {
57
+ return {
58
+ data: [],
59
+ metadata: null,
60
+ };
61
+ }
62
+ const users = response.data.users.map((user) => {
63
+ var _a, _b;
64
+ return {
65
+ id: user.id,
66
+ email: user.primaryEmail,
67
+ first_name: (_a = user.name) === null || _a === void 0 ? void 0 : _a.givenName,
68
+ last_name: (_b = user.name) === null || _b === void 0 ? void 0 : _b.familyName,
69
+ active: !user.suspended,
70
+ raw: user,
71
+ };
72
+ });
73
+ return {
74
+ data: users,
75
+ metadata: {
76
+ nextPageToken: response.data.nextPageToken,
77
+ hasNextPage: !!response.data.nextPageToken,
78
+ },
79
+ };
80
+ });
81
+ }
82
+ getGroups(directory, options) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ const googleAdmin = googleapis_1.google.admin({ version: 'directory_v1', auth: this.createOAuth2Client(directory) });
85
+ const query = {
86
+ maxResults: 200,
87
+ domain: directory.google_domain,
88
+ };
89
+ if (options === null || options === void 0 ? void 0 : options.pageToken) {
90
+ query['pageToken'] = options.pageToken;
91
+ }
92
+ const response = yield googleAdmin.groups.list(query);
93
+ if (!response.data.groups) {
94
+ return {
95
+ data: [],
96
+ metadata: null,
97
+ };
98
+ }
99
+ const groups = response.data.groups.map((group) => {
100
+ return {
101
+ id: group.id,
102
+ name: group.name,
103
+ raw: group,
104
+ };
105
+ });
106
+ return {
107
+ data: groups,
108
+ metadata: {
109
+ pageToken: response.data.nextPageToken,
110
+ hasNextPage: !!response.data.nextPageToken,
111
+ },
112
+ };
113
+ });
114
+ }
115
+ getGroupMembers(directory, group) {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ const googleAdmin = googleapis_1.google.admin({ version: 'directory_v1', auth: this.createOAuth2Client(directory) });
118
+ const allMembers = [];
119
+ const query = {
120
+ maxResults: 200,
121
+ groupKey: group.id,
122
+ domain: directory.google_domain,
123
+ };
124
+ let nextPageToken = null;
125
+ do {
126
+ if (nextPageToken) {
127
+ query['pageToken'] = nextPageToken;
128
+ }
129
+ const response = yield googleAdmin.members.list(query);
130
+ if (!response.data.members) {
131
+ break;
132
+ }
133
+ const members = response.data.members.map((user) => {
134
+ return {
135
+ id: user.id,
136
+ raw: user,
137
+ };
138
+ });
139
+ allMembers.push(...members);
140
+ nextPageToken = response.data.nextPageToken;
141
+ } while (nextPageToken);
142
+ return allMembers;
143
+ });
144
+ }
145
+ }
146
+ exports.GoogleProvider = GoogleProvider;
147
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/google/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { GoogleAuth } from './oauth';
2
+ import { GoogleProvider } from './api';
3
+ import type { IDirectoryConfig, JacksonOption } from '../../../typings';
4
+ interface NewGoogleProviderParams {
5
+ directories: IDirectoryConfig;
6
+ opts: JacksonOption;
7
+ }
8
+ export declare const newGoogleProvider: (params: NewGoogleProviderParams) => {
9
+ directory: GoogleProvider;
10
+ oauth: GoogleAuth;
11
+ };
12
+ export {};
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.newGoogleProvider = void 0;
4
+ const oauth_1 = require("./oauth");
5
+ const api_1 = require("./api");
6
+ const newGoogleProvider = (params) => {
7
+ const { directories, opts } = params;
8
+ return {
9
+ directory: new api_1.GoogleProvider({ opts, directories }),
10
+ oauth: new oauth_1.GoogleAuth({ opts, directories }),
11
+ };
12
+ };
13
+ exports.newGoogleProvider = newGoogleProvider;
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/google/index.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AACrC,+BAAuC;AAQhC,MAAM,iBAAiB,GAAG,CAAC,MAA+B,EAAE,EAAE;IACnE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAErC,OAAO;QACL,SAAS,EAAE,IAAI,oBAAc,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QACpD,KAAK,EAAE,IAAI,kBAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,iBAAiB,qBAO5B"}
@@ -0,0 +1,27 @@
1
+ import { OAuth2Client, Credentials } from 'google-auth-library';
2
+ import type { Directory, IDirectoryConfig, JacksonOption, Response } from '../../../typings';
3
+ interface GoogleAuthParams {
4
+ opts: JacksonOption;
5
+ directories: IDirectoryConfig;
6
+ }
7
+ export declare class GoogleAuth {
8
+ private opts;
9
+ private directories;
10
+ constructor({ directories, opts }: GoogleAuthParams);
11
+ createOAuth2Client(directory: Directory): OAuth2Client;
12
+ generateAuthorizationUrl(params: {
13
+ directoryId: string;
14
+ }): Promise<Response<{
15
+ authorizationUrl: string;
16
+ }>>;
17
+ getAccessToken(params: {
18
+ directoryId: string;
19
+ code: string;
20
+ }): Promise<Response<Credentials>>;
21
+ setToken(params: {
22
+ directoryId: string;
23
+ accessToken: Credentials['access_token'];
24
+ refreshToken: Credentials['refresh_token'];
25
+ }): Promise<Response<Directory>>;
26
+ }
27
+ export {};
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.GoogleAuth = void 0;
13
+ const google_auth_library_1 = require("google-auth-library");
14
+ const error_1 = require("../../../controller/error");
15
+ const scope = [
16
+ 'https://www.googleapis.com/auth/admin.directory.user.readonly',
17
+ 'https://www.googleapis.com/auth/admin.directory.group.readonly',
18
+ 'https://www.googleapis.com/auth/admin.directory.group.member.readonly',
19
+ ];
20
+ class GoogleAuth {
21
+ constructor({ directories, opts }) {
22
+ this.opts = opts;
23
+ this.directories = directories;
24
+ }
25
+ createOAuth2Client(directory) {
26
+ var _a;
27
+ const googleProvider = (_a = this.opts.dsync) === null || _a === void 0 ? void 0 : _a.providers.google;
28
+ const authClient = new google_auth_library_1.OAuth2Client(googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientId, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientSecret, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.callbackUrl);
29
+ authClient.setCredentials({
30
+ access_token: directory.google_access_token,
31
+ refresh_token: directory.google_refresh_token,
32
+ });
33
+ return authClient;
34
+ }
35
+ // Generate the Google authorization URL
36
+ generateAuthorizationUrl(params) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const { directoryId } = params;
39
+ try {
40
+ const { data: directory, error } = yield this.directories.get(directoryId);
41
+ if (error) {
42
+ throw error;
43
+ }
44
+ if ((directory === null || directory === void 0 ? void 0 : directory.type) !== 'google') {
45
+ throw new error_1.JacksonError('Directory is not a Google Directory', 400);
46
+ }
47
+ const oauth2Client = this.createOAuth2Client(directory);
48
+ const authorizationUrl = oauth2Client.generateAuthUrl({
49
+ access_type: 'offline',
50
+ prompt: 'consent',
51
+ scope,
52
+ state: JSON.stringify({ directoryId }),
53
+ });
54
+ const data = {
55
+ authorizationUrl,
56
+ };
57
+ return { data, error: null };
58
+ }
59
+ catch (error) {
60
+ return (0, error_1.apiError)(error);
61
+ }
62
+ });
63
+ }
64
+ // Get the Google API access token from the authorization code
65
+ getAccessToken(params) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ const { directoryId, code } = params;
68
+ try {
69
+ const { data: directory, error } = yield this.directories.get(directoryId);
70
+ if (error) {
71
+ throw error;
72
+ }
73
+ const oauth2Client = this.createOAuth2Client(directory);
74
+ const { tokens } = yield oauth2Client.getToken(code);
75
+ return { data: tokens, error: null };
76
+ }
77
+ catch (error) {
78
+ return (0, error_1.apiError)(error);
79
+ }
80
+ });
81
+ }
82
+ // Set the Google API access token and refresh token for the directory
83
+ setToken(params) {
84
+ return __awaiter(this, void 0, void 0, function* () {
85
+ const { directoryId, accessToken, refreshToken } = params;
86
+ try {
87
+ if (!accessToken) {
88
+ throw new error_1.JacksonError(`Access token is required`, 400);
89
+ }
90
+ if (!refreshToken) {
91
+ throw new error_1.JacksonError(`Refresh token is required`, 400);
92
+ }
93
+ const { data } = yield this.directories.update(directoryId, {
94
+ google_access_token: accessToken,
95
+ google_refresh_token: refreshToken,
96
+ });
97
+ if (!data) {
98
+ throw new error_1.JacksonError('Failed to update directory', 400);
99
+ }
100
+ return { data, error: null };
101
+ }
102
+ catch (error) {
103
+ return (0, error_1.apiError)(error);
104
+ }
105
+ });
106
+ }
107
+ }
108
+ exports.GoogleAuth = GoogleAuth;
109
+ //# 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,10 @@
1
+ import type { IDirectoryConfig, IUsers, IGroups, IRequestHandler, JacksonOption, EventCallback } from '../../typings';
2
+ interface SyncParams {
3
+ userController: IUsers;
4
+ groupController: IGroups;
5
+ opts: JacksonOption;
6
+ directories: IDirectoryConfig;
7
+ requestHandler: IRequestHandler;
8
+ }
9
+ export declare const startSync: (params: SyncParams, callback: EventCallback) => Promise<void>;
10
+ export {};
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.startSync = void 0;
13
+ const google_1 = require("./google");
14
+ const syncUsers_1 = require("./syncUsers");
15
+ const syncGroups_1 = require("./syncGroups");
16
+ const syncGroupMembers_1 = require("./syncGroupMembers");
17
+ // Method to start the directory sync process
18
+ // This method will be called by the directory sync cron job
19
+ const startSync = (params, callback) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const { userController, groupController, opts, directories, requestHandler } = params;
21
+ const { directory: provider } = (0, google_1.newGoogleProvider)({ directories, opts });
22
+ const startTime = Date.now();
23
+ console.info('Starting the sync process');
24
+ const allDirectories = yield provider.getDirectories();
25
+ if (allDirectories.length === 0) {
26
+ console.info('No directories found. Skipping the sync process');
27
+ return;
28
+ }
29
+ try {
30
+ for (const directory of allDirectories) {
31
+ const params = {
32
+ directory,
33
+ userController,
34
+ groupController,
35
+ provider,
36
+ requestHandler,
37
+ callback,
38
+ };
39
+ yield new syncUsers_1.SyncUsers(params).sync();
40
+ yield new syncGroups_1.SyncGroups(params).sync();
41
+ yield new syncGroupMembers_1.SyncGroupMembers(params).sync();
42
+ }
43
+ }
44
+ catch (e) {
45
+ console.error(e);
46
+ }
47
+ const endTime = Date.now();
48
+ console.info(`Sync process completed in ${(endTime - startTime) / 1000} seconds`);
49
+ });
50
+ exports.startSync = startSync;
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/directory-sync/non-scim/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA6C;AAS7C,2CAAwC;AACxC,6CAA0C;AAC1C,yDAAsD;AAUtD,6CAA6C;AAC7C,4DAA4D;AACrD,MAAM,SAAS,GAAG,CAAO,MAAkB,EAAE,QAAuB,EAAE,EAAE;IAC7E,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAEtF,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAA,0BAAiB,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAE1C,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;IAEvD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/B,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO;KACR;IAED,IAAI;QACF,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE;YACtC,MAAM,MAAM,GAAG;gBACb,SAAS;gBACT,cAAc;gBACd,eAAe;gBACf,QAAQ;gBACR,cAAc;gBACd,QAAQ;aACT,CAAC;YAEF,MAAM,IAAI,qBAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,uBAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,mCAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;SAC3C;KACF;IAAC,OAAO,CAAM,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAClB;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;AACpF,CAAC,CAAA,CAAC;AAtCW,QAAA,SAAS,aAsCpB"}