@boxyhq/saml-jackson 1.9.10 → 1.10.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 (104) hide show
  1. package/dist/controller/utils.d.ts +1 -0
  2. package/dist/controller/utils.js +2 -1
  3. package/dist/controller/utils.js.map +1 -1
  4. package/dist/db/planetscale/entity/JacksonIndex.js +2 -3
  5. package/dist/db/planetscale/entity/JacksonIndex.js.map +1 -1
  6. package/dist/db/planetscale/entity/JacksonStore.js +2 -3
  7. package/dist/db/planetscale/entity/JacksonStore.js.map +1 -1
  8. package/dist/db/planetscale/entity/JacksonTTL.js +2 -3
  9. package/dist/db/planetscale/entity/JacksonTTL.js.map +1 -1
  10. package/dist/db/redis.js +16 -26
  11. package/dist/db/redis.js.map +1 -1
  12. package/dist/db/sql/entity/JacksonIndex.js +2 -3
  13. package/dist/db/sql/entity/JacksonIndex.js.map +1 -1
  14. package/dist/db/sql/entity/JacksonStore.js +2 -3
  15. package/dist/db/sql/entity/JacksonStore.js.map +1 -1
  16. package/dist/db/sql/entity/JacksonTTL.js +2 -3
  17. package/dist/db/sql/entity/JacksonTTL.js.map +1 -1
  18. package/dist/db/sql/mariadb/entity/JacksonIndex.js +2 -3
  19. package/dist/db/sql/mariadb/entity/JacksonIndex.js.map +1 -1
  20. package/dist/db/sql/mariadb/entity/JacksonStore.js +2 -3
  21. package/dist/db/sql/mariadb/entity/JacksonStore.js.map +1 -1
  22. package/dist/db/sql/mariadb/entity/JacksonTTL.js +2 -3
  23. package/dist/db/sql/mariadb/entity/JacksonTTL.js.map +1 -1
  24. package/dist/db/sql/mssql/entity/JacksonIndex.js +2 -3
  25. package/dist/db/sql/mssql/entity/JacksonIndex.js.map +1 -1
  26. package/dist/db/sql/mssql/entity/JacksonStore.js +2 -3
  27. package/dist/db/sql/mssql/entity/JacksonStore.js.map +1 -1
  28. package/dist/db/sql/mssql/entity/JacksonTTL.js +2 -3
  29. package/dist/db/sql/mssql/entity/JacksonTTL.js.map +1 -1
  30. package/dist/directory-sync/index.d.ts +10 -8
  31. package/dist/directory-sync/index.js +22 -12
  32. package/dist/directory-sync/index.js.map +1 -1
  33. package/dist/directory-sync/non-scim/google/api.d.ts +48 -0
  34. package/dist/directory-sync/non-scim/google/api.js +147 -0
  35. package/dist/directory-sync/non-scim/google/api.js.map +1 -0
  36. package/dist/directory-sync/non-scim/google/index.d.ts +12 -0
  37. package/dist/directory-sync/non-scim/google/index.js +14 -0
  38. package/dist/directory-sync/non-scim/google/index.js.map +1 -0
  39. package/dist/directory-sync/non-scim/google/oauth.d.ts +27 -0
  40. package/dist/directory-sync/non-scim/google/oauth.js +109 -0
  41. package/dist/directory-sync/non-scim/google/oauth.js.map +1 -0
  42. package/dist/directory-sync/non-scim/index.d.ts +10 -0
  43. package/dist/directory-sync/non-scim/index.js +51 -0
  44. package/dist/directory-sync/non-scim/index.js.map +1 -0
  45. package/dist/directory-sync/non-scim/syncGroupMembers.d.ts +23 -0
  46. package/dist/directory-sync/non-scim/syncGroupMembers.js +112 -0
  47. package/dist/directory-sync/non-scim/syncGroupMembers.js.map +1 -0
  48. package/dist/directory-sync/non-scim/syncGroups.d.ts +24 -0
  49. package/dist/directory-sync/non-scim/syncGroups.js +124 -0
  50. package/dist/directory-sync/non-scim/syncGroups.js.map +1 -0
  51. package/dist/directory-sync/non-scim/syncUsers.d.ts +24 -0
  52. package/dist/directory-sync/non-scim/syncUsers.js +124 -0
  53. package/dist/directory-sync/non-scim/syncUsers.js.map +1 -0
  54. package/dist/directory-sync/non-scim/utils.d.ts +36 -0
  55. package/dist/directory-sync/non-scim/utils.js +124 -0
  56. package/dist/directory-sync/non-scim/utils.js.map +1 -0
  57. package/dist/directory-sync/{Base.d.ts → scim/Base.d.ts} +1 -5
  58. package/dist/directory-sync/{Base.js → scim/Base.js} +3 -17
  59. package/dist/directory-sync/scim/Base.js.map +1 -0
  60. package/dist/directory-sync/{DirectoryConfig.d.ts → scim/DirectoryConfig.d.ts} +21 -27
  61. package/dist/directory-sync/{DirectoryConfig.js → scim/DirectoryConfig.js} +76 -48
  62. package/dist/directory-sync/scim/DirectoryConfig.js.map +1 -0
  63. package/dist/directory-sync/{DirectoryGroups.d.ts → scim/DirectoryGroups.d.ts} +8 -6
  64. package/dist/directory-sync/{DirectoryGroups.js → scim/DirectoryGroups.js} +8 -12
  65. package/dist/directory-sync/scim/DirectoryGroups.js.map +1 -0
  66. package/dist/directory-sync/{DirectoryUsers.d.ts → scim/DirectoryUsers.d.ts} +7 -5
  67. package/dist/directory-sync/{DirectoryUsers.js → scim/DirectoryUsers.js} +4 -3
  68. package/dist/directory-sync/scim/DirectoryUsers.js.map +1 -0
  69. package/dist/directory-sync/scim/Groups.d.ts +38 -0
  70. package/dist/directory-sync/{Groups.js → scim/Groups.js} +38 -29
  71. package/dist/directory-sync/scim/Groups.js.map +1 -0
  72. package/dist/directory-sync/scim/Users.d.ts +32 -0
  73. package/dist/directory-sync/{Users.js → scim/Users.js} +27 -25
  74. package/dist/directory-sync/scim/Users.js.map +1 -0
  75. package/dist/directory-sync/{WebhookEventsLogger.d.ts → scim/WebhookEventsLogger.d.ts} +1 -1
  76. package/dist/directory-sync/{WebhookEventsLogger.js → scim/WebhookEventsLogger.js} +3 -1
  77. package/dist/directory-sync/scim/WebhookEventsLogger.js.map +1 -0
  78. package/dist/directory-sync/{events.d.ts → scim/events.d.ts} +5 -3
  79. package/dist/directory-sync/{events.js → scim/events.js} +6 -4
  80. package/dist/directory-sync/scim/events.js.map +1 -0
  81. package/dist/directory-sync/{transform.d.ts → scim/transform.d.ts} +1 -1
  82. package/dist/directory-sync/scim/transform.js.map +1 -0
  83. package/dist/directory-sync/scim/utils.d.ts +33 -0
  84. package/dist/directory-sync/{utils.js → scim/utils.js} +8 -3
  85. package/dist/directory-sync/scim/utils.js.map +1 -0
  86. package/dist/directory-sync/types.d.ts +65 -13
  87. package/dist/directory-sync/types.js +3 -2
  88. package/dist/directory-sync/types.js.map +1 -1
  89. package/dist/typings.d.ts +9 -0
  90. package/package.json +15 -12
  91. package/dist/directory-sync/Base.js.map +0 -1
  92. package/dist/directory-sync/DirectoryConfig.js.map +0 -1
  93. package/dist/directory-sync/DirectoryGroups.js.map +0 -1
  94. package/dist/directory-sync/DirectoryUsers.js.map +0 -1
  95. package/dist/directory-sync/Groups.d.ts +0 -48
  96. package/dist/directory-sync/Groups.js.map +0 -1
  97. package/dist/directory-sync/Users.d.ts +0 -49
  98. package/dist/directory-sync/Users.js.map +0 -1
  99. package/dist/directory-sync/WebhookEventsLogger.js.map +0 -1
  100. package/dist/directory-sync/events.js.map +0 -1
  101. package/dist/directory-sync/transform.js.map +0 -1
  102. package/dist/directory-sync/utils.d.ts +0 -33
  103. package/dist/directory-sync/utils.js.map +0 -1
  104. /package/dist/directory-sync/{transform.js → scim/transform.js} +0 -0
@@ -0,0 +1,124 @@
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.SyncGroups = void 0;
13
+ const utils_1 = require("./utils");
14
+ class SyncGroups {
15
+ constructor({ directory, groupController, callback, requestHandler, provider }) {
16
+ this.groupController = groupController;
17
+ this.provider = provider;
18
+ this.requestHandler = requestHandler;
19
+ this.callback = callback;
20
+ this.directory = directory;
21
+ }
22
+ sync() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const groupsFromProvider = [];
25
+ let nextPageOption = null;
26
+ do {
27
+ const { data: groups, metadata } = yield this.provider.getGroups(this.directory, nextPageOption);
28
+ if (!groups || groups.length === 0) {
29
+ break;
30
+ }
31
+ // Create or update groups
32
+ for (const group of groups) {
33
+ const { data: existingGroup } = yield this.groupController
34
+ .setTenantAndProduct(this.directory.tenant, this.directory.product)
35
+ .get(group.id);
36
+ if (!existingGroup) {
37
+ yield this.createGroup(group);
38
+ }
39
+ else if ((0, utils_1.isGroupUpdated)(existingGroup, group, this.provider.groupFieldsToExcludeWhenCompare)) {
40
+ yield this.updateGroup(group);
41
+ }
42
+ }
43
+ // Store groups to compare and delete later
44
+ groupsFromProvider.push(...groups);
45
+ nextPageOption = metadata;
46
+ } while (nextPageOption && nextPageOption.hasNextPage);
47
+ // Delete users that are not in the directory anymore
48
+ const existingGroups = yield this.getAllExistingGroups();
49
+ const groupsToDelete = (0, utils_1.compareAndFindDeletedGroups)(existingGroups, groupsFromProvider);
50
+ yield this.deleteGroups(groupsToDelete);
51
+ });
52
+ }
53
+ // Get all the existing groups from the Jackson store
54
+ getAllExistingGroups() {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const existingGroups = [];
57
+ const pageLimit = 500;
58
+ let pageOffset = 0;
59
+ while (true) {
60
+ const { data: groups } = yield this.groupController
61
+ .setTenantAndProduct(this.directory.tenant, this.directory.product)
62
+ .getAll({
63
+ directoryId: this.directory.id,
64
+ pageOffset,
65
+ pageLimit,
66
+ });
67
+ if (!groups || groups.length === 0) {
68
+ break;
69
+ }
70
+ existingGroups.push(...groups);
71
+ if (groups.length < pageLimit) {
72
+ break;
73
+ }
74
+ pageOffset += pageLimit;
75
+ }
76
+ return existingGroups;
77
+ });
78
+ }
79
+ createGroup(group) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ yield this.handleRequest({
82
+ method: 'POST',
83
+ body: (0, utils_1.toGroupSCIMPayload)(group),
84
+ resourceId: undefined,
85
+ });
86
+ });
87
+ }
88
+ updateGroup(group) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ yield this.handleRequest({
91
+ method: 'PUT',
92
+ body: (0, utils_1.toGroupSCIMPayload)(group),
93
+ resourceId: group.id,
94
+ });
95
+ });
96
+ }
97
+ deleteGroups(groups) {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ for (const group of groups) {
100
+ yield this.handleRequest({
101
+ method: 'DELETE',
102
+ body: (0, utils_1.toGroupSCIMPayload)(group),
103
+ resourceId: group.id,
104
+ });
105
+ }
106
+ });
107
+ }
108
+ handleRequest(payload) {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ const request = {
111
+ query: {},
112
+ body: payload.body,
113
+ resourceType: 'groups',
114
+ method: payload.method,
115
+ directoryId: this.directory.id,
116
+ apiSecret: this.directory.scim.secret,
117
+ resourceId: payload.resourceId,
118
+ };
119
+ yield this.requestHandler.handle(request, this.callback);
120
+ });
121
+ }
122
+ }
123
+ exports.SyncGroups = SyncGroups;
124
+ //# sourceMappingURL=syncGroups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncGroups.js","sourceRoot":"","sources":["../../../src/directory-sync/non-scim/syncGroups.ts"],"names":[],"mappings":"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"}
@@ -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 {};
@@ -0,0 +1,124 @@
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.SyncUsers = void 0;
13
+ const utils_1 = require("./utils");
14
+ class SyncUsers {
15
+ constructor({ directory, userController, callback, provider, requestHandler }) {
16
+ this.callback = callback;
17
+ this.provider = provider;
18
+ this.directory = directory;
19
+ this.requestHandler = requestHandler;
20
+ this.userController = userController;
21
+ }
22
+ sync() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const usersFromProvider = [];
25
+ let nextPageOption = null;
26
+ do {
27
+ const { data: users, metadata } = yield this.provider.getUsers(this.directory, nextPageOption);
28
+ if (users.length === 0) {
29
+ break;
30
+ }
31
+ // Create or update users
32
+ for (const user of users) {
33
+ const { data: existingUser } = yield this.userController
34
+ .setTenantAndProduct(this.directory.tenant, this.directory.product)
35
+ .get(user.id);
36
+ if (!existingUser) {
37
+ yield this.createUser(user);
38
+ }
39
+ else if ((0, utils_1.isUserUpdated)(existingUser, user, this.provider.userFieldsToExcludeWhenCompare)) {
40
+ yield this.updateUser(user);
41
+ }
42
+ }
43
+ // Store users to compare and delete later
44
+ usersFromProvider.push(...users);
45
+ nextPageOption = metadata;
46
+ } while (nextPageOption && nextPageOption.hasNextPage);
47
+ // Delete users that are not in the directory anymore
48
+ const existingUsers = yield this.getAllExistingUsers();
49
+ const usersToDelete = (0, utils_1.compareAndFindDeletedUsers)(existingUsers, usersFromProvider);
50
+ yield this.deleteUsers(usersToDelete);
51
+ });
52
+ }
53
+ // Get all the existing users from the Jackson store
54
+ getAllExistingUsers() {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const existingUsers = [];
57
+ const pageLimit = 500;
58
+ let pageOffset = 0;
59
+ while (true) {
60
+ const { data: users } = yield this.userController
61
+ .setTenantAndProduct(this.directory.tenant, this.directory.product)
62
+ .getAll({
63
+ directoryId: this.directory.id,
64
+ pageOffset,
65
+ pageLimit,
66
+ });
67
+ if (!users || users.length === 0) {
68
+ break;
69
+ }
70
+ existingUsers.push(...users);
71
+ if (users.length < pageLimit) {
72
+ break;
73
+ }
74
+ pageOffset += pageLimit;
75
+ }
76
+ return existingUsers;
77
+ });
78
+ }
79
+ createUser(user) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ yield this.handleRequest({
82
+ method: 'POST',
83
+ body: (0, utils_1.toUserSCIMPayload)(user),
84
+ resourceId: undefined,
85
+ });
86
+ });
87
+ }
88
+ updateUser(user) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ yield this.handleRequest({
91
+ method: 'PUT',
92
+ body: (0, utils_1.toUserSCIMPayload)(user),
93
+ resourceId: user.id,
94
+ });
95
+ });
96
+ }
97
+ deleteUsers(users) {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ for (const user of users) {
100
+ yield this.handleRequest({
101
+ method: 'DELETE',
102
+ body: (0, utils_1.toUserSCIMPayload)(user),
103
+ resourceId: user.id,
104
+ });
105
+ }
106
+ });
107
+ }
108
+ handleRequest(payload) {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ const request = {
111
+ query: {},
112
+ body: payload.body,
113
+ resourceType: 'users',
114
+ method: payload.method,
115
+ directoryId: this.directory.id,
116
+ apiSecret: this.directory.scim.secret,
117
+ resourceId: payload.resourceId,
118
+ };
119
+ yield this.requestHandler.handle(request, this.callback);
120
+ });
121
+ }
122
+ }
123
+ exports.SyncUsers = SyncUsers;
124
+ //# sourceMappingURL=syncUsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncUsers.js","sourceRoot":"","sources":["../../../src/directory-sync/non-scim/syncUsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { User, Group } from '../../typings';
2
+ export declare const toUserSCIMPayload: (user: User) => {
3
+ userName: string;
4
+ name: {
5
+ givenName: string;
6
+ familyName: string;
7
+ };
8
+ emails: {
9
+ primary: boolean;
10
+ value: string;
11
+ type: string;
12
+ }[];
13
+ userId: string;
14
+ active: boolean;
15
+ rawAttributes: any;
16
+ };
17
+ export declare const toGroupSCIMPayload: (group: Group) => {
18
+ displayName: string;
19
+ groupId: string;
20
+ rawAttributes: any;
21
+ };
22
+ export declare const toGroupMembershipSCIMPayload: (memberIds: string[], operation: 'add' | 'remove') => {
23
+ Operations: {
24
+ op: "add" | "remove";
25
+ path: string;
26
+ value: {
27
+ value: string;
28
+ }[];
29
+ }[];
30
+ };
31
+ export declare const isUserUpdated: (existingUser: User, userFromProvider: User, ignoreFields: string[] | undefined) => boolean;
32
+ export declare const isGroupUpdated: (existingGroup: Group, groupFromProvider: Group, ignoreFields: string[] | undefined) => boolean;
33
+ export declare const compareAndFindDeletedGroups: (existingGroups: Group[] | null, groups: Group[]) => Group[];
34
+ export declare const compareAndFindDeletedUsers: (existingUsers: User[] | null, users: User[]) => User[];
35
+ export declare const compareAndFindDeletedMembers: (idsFromDB: string[], idsFromProvider: string[]) => string[];
36
+ export declare const compareAndFindNewMembers: (idsFromDB: string[], idsFromProvider: string[]) => string[];
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.compareAndFindNewMembers = exports.compareAndFindDeletedMembers = exports.compareAndFindDeletedUsers = exports.compareAndFindDeletedGroups = exports.isGroupUpdated = exports.isUserUpdated = exports.toGroupMembershipSCIMPayload = exports.toGroupSCIMPayload = exports.toUserSCIMPayload = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const crypto_1 = __importDefault(require("crypto"));
9
+ const toUserSCIMPayload = (user) => {
10
+ return {
11
+ userName: user.email,
12
+ name: {
13
+ givenName: user.first_name,
14
+ familyName: user.last_name,
15
+ },
16
+ emails: [
17
+ {
18
+ primary: true,
19
+ value: user.email,
20
+ type: 'work',
21
+ },
22
+ ],
23
+ userId: user.id,
24
+ active: user.active,
25
+ rawAttributes: user.raw,
26
+ };
27
+ };
28
+ exports.toUserSCIMPayload = toUserSCIMPayload;
29
+ const toGroupSCIMPayload = (group) => {
30
+ return {
31
+ displayName: group.name,
32
+ groupId: group.id,
33
+ rawAttributes: group.raw,
34
+ };
35
+ };
36
+ exports.toGroupSCIMPayload = toGroupSCIMPayload;
37
+ const toGroupMembershipSCIMPayload = (memberIds, operation) => {
38
+ const memberValues = memberIds.map((memberId) => {
39
+ return {
40
+ value: memberId,
41
+ };
42
+ });
43
+ return {
44
+ Operations: [
45
+ {
46
+ op: operation,
47
+ path: 'members',
48
+ value: memberValues,
49
+ },
50
+ ],
51
+ };
52
+ };
53
+ exports.toGroupMembershipSCIMPayload = toGroupMembershipSCIMPayload;
54
+ const isUserUpdated = (existingUser, userFromProvider, ignoreFields) => {
55
+ const copyOfExistingUser = lodash_1.default.cloneDeep(existingUser);
56
+ const copyOfUserFromProvider = lodash_1.default.cloneDeep(userFromProvider);
57
+ if (ignoreFields && ignoreFields.length > 0) {
58
+ ignoreFields.forEach((field) => {
59
+ lodash_1.default.unset(copyOfExistingUser.raw, field);
60
+ lodash_1.default.unset(copyOfUserFromProvider.raw, field);
61
+ });
62
+ }
63
+ return getObjectHash(copyOfExistingUser.raw) !== getObjectHash(copyOfUserFromProvider.raw);
64
+ };
65
+ exports.isUserUpdated = isUserUpdated;
66
+ const isGroupUpdated = (existingGroup, groupFromProvider, ignoreFields) => {
67
+ const copyOfExistingGroup = lodash_1.default.cloneDeep(existingGroup);
68
+ const copyOfGroupFromProvider = lodash_1.default.cloneDeep(groupFromProvider);
69
+ if (ignoreFields && ignoreFields.length > 0) {
70
+ ignoreFields.forEach((field) => {
71
+ lodash_1.default.unset(copyOfExistingGroup.raw, field);
72
+ lodash_1.default.unset(copyOfGroupFromProvider.raw, field);
73
+ });
74
+ }
75
+ return getObjectHash(copyOfExistingGroup.raw) !== getObjectHash(copyOfGroupFromProvider.raw);
76
+ };
77
+ exports.isGroupUpdated = isGroupUpdated;
78
+ const compareAndFindDeletedGroups = (existingGroups, groups) => {
79
+ if (!existingGroups || existingGroups.length === 0) {
80
+ return [];
81
+ }
82
+ const groupsToDelete = existingGroups.filter((existingGroup) => {
83
+ return !groups.some((group) => group.id === existingGroup.id);
84
+ });
85
+ return groupsToDelete;
86
+ };
87
+ exports.compareAndFindDeletedGroups = compareAndFindDeletedGroups;
88
+ const compareAndFindDeletedUsers = (existingUsers, users) => {
89
+ if (!existingUsers || existingUsers.length === 0) {
90
+ return [];
91
+ }
92
+ const usersToDelete = existingUsers.filter((existingUser) => {
93
+ return !users.some((user) => user.id === existingUser.id);
94
+ });
95
+ return usersToDelete;
96
+ };
97
+ exports.compareAndFindDeletedUsers = compareAndFindDeletedUsers;
98
+ const compareAndFindDeletedMembers = (idsFromDB, idsFromProvider) => {
99
+ return idsFromDB.filter((userId) => !idsFromProvider.includes(userId));
100
+ };
101
+ exports.compareAndFindDeletedMembers = compareAndFindDeletedMembers;
102
+ const compareAndFindNewMembers = (idsFromDB, idsFromProvider) => {
103
+ return idsFromProvider.filter((userId) => !idsFromDB.includes(userId));
104
+ };
105
+ exports.compareAndFindNewMembers = compareAndFindNewMembers;
106
+ const normalizeObject = (obj) => {
107
+ if (lodash_1.default.isArray(obj)) {
108
+ return obj.map(normalizeObject);
109
+ }
110
+ else if (lodash_1.default.isObject(obj)) {
111
+ const sortedKeys = lodash_1.default.sortBy(Object.keys(obj));
112
+ return lodash_1.default.fromPairs(sortedKeys.map((key) => [key, normalizeObject(obj[key])]));
113
+ }
114
+ else {
115
+ return obj;
116
+ }
117
+ };
118
+ const getObjectHash = (obj) => {
119
+ const normalizedObj = normalizeObject(obj);
120
+ const hash = crypto_1.default.createHash('sha1');
121
+ hash.update(JSON.stringify(normalizedObj));
122
+ return hash.digest('hex');
123
+ };
124
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/directory-sync/non-scim/utils.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Storable, DatabaseStore } from '../typings';
1
+ import type { Storable, DatabaseStore } from '../../typings';
2
2
  export declare class Base {
3
3
  protected db: DatabaseStore;
4
4
  protected tenant: null | string;
@@ -8,9 +8,5 @@ export declare class Base {
8
8
  db: DatabaseStore;
9
9
  });
10
10
  store(type: 'groups' | 'members' | 'users' | 'logs'): Storable;
11
- setTenant(tenant: string): this;
12
- setProduct(product: string): this;
13
11
  setTenantAndProduct(tenant: string, product: string): this;
14
- with(tenant: string, product: string): this;
15
- createId(): string;
16
12
  }
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Base = void 0;
4
- const utils_1 = require("../controller/utils");
5
- const crypto_1 = require("crypto");
4
+ const utils_1 = require("../../controller/utils");
6
5
  class Base {
7
6
  constructor({ db }) {
8
7
  this.tenant = null;
@@ -17,25 +16,12 @@ class Base {
17
16
  }
18
17
  return this.db.store(`${utils_1.storeNamespacePrefix.dsync[type]}:${this.tenant}:${this.product}`);
19
18
  }
20
- setTenant(tenant) {
19
+ // Set the tenant and product
20
+ setTenantAndProduct(tenant, product) {
21
21
  this.tenant = tenant;
22
- return this;
23
- }
24
- setProduct(product) {
25
22
  this.product = product;
26
23
  return this;
27
24
  }
28
- // Set the tenant and product
29
- setTenantAndProduct(tenant, product) {
30
- return this.setTenant(tenant).setProduct(product);
31
- }
32
- // Set the tenant and product
33
- with(tenant, product) {
34
- return this.setTenant(tenant).setProduct(product);
35
- }
36
- createId() {
37
- return (0, crypto_1.randomUUID)();
38
- }
39
25
  }
40
26
  exports.Base = Base;
41
27
  //# sourceMappingURL=Base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../../src/directory-sync/scim/Base.ts"],"names":[],"mappings":";;;AACA,kDAA8D;AAE9D,MAAa,IAAI;IAMf,YAAY,EAAE,EAAE,EAAyB;QAJ/B,WAAM,GAAkB,IAAI,CAAC;QAC7B,YAAO,GAAkB,IAAI,CAAC;QAC9B,wBAAmB,GAAG,GAAG,CAAC;QAGlC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,IAA6C;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SAC/D;QAED,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,4BAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,6BAA6B;IAC7B,mBAAmB,CAAC,MAAc,EAAE,OAAe;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA1BD,oBA0BC"}
@@ -1,12 +1,12 @@
1
- import type { Directory, JacksonOption, DatabaseStore, DirectoryType, ApiError, PaginationParams, IUsers, IGroups, IWebhookEventsLogger, IEventController } from '../typings';
2
- type ConstructorParams = {
1
+ import type { Directory, JacksonOption, DatabaseStore, DirectoryType, PaginationParams, IUsers, IGroups, IWebhookEventsLogger, IEventController, Response } from '../../typings';
2
+ interface DirectoryConfigParams {
3
3
  db: DatabaseStore;
4
4
  opts: JacksonOption;
5
5
  users: IUsers;
6
6
  groups: IGroups;
7
7
  logger: IWebhookEventsLogger;
8
8
  eventController: IEventController;
9
- };
9
+ }
10
10
  export declare class DirectoryConfig {
11
11
  private _store;
12
12
  private opts;
@@ -15,7 +15,7 @@ export declare class DirectoryConfig {
15
15
  private groups;
16
16
  private logger;
17
17
  private eventController;
18
- constructor({ db, opts, users, groups, logger, eventController }: ConstructorParams);
18
+ constructor({ db, opts, users, groups, logger, eventController }: DirectoryConfigParams);
19
19
  private store;
20
20
  create(params: {
21
21
  name?: string;
@@ -24,31 +24,25 @@ export declare class DirectoryConfig {
24
24
  webhook_url?: string;
25
25
  webhook_secret?: string;
26
26
  type?: DirectoryType;
27
- }): Promise<{
28
- data: Directory | null;
29
- error: ApiError | null;
30
- }>;
31
- get(id: string): Promise<{
32
- data: Directory | null;
33
- error: ApiError | null;
34
- }>;
35
- update(id: string, param: Omit<Partial<Directory>, 'id' | 'tenant' | 'prodct' | 'scim'>): Promise<{
36
- data: Directory | null;
37
- error: ApiError | null;
38
- }>;
39
- getByTenantAndProduct(tenant: string, product: string): Promise<{
40
- data: Directory[] | null;
41
- error: ApiError | null;
42
- }>;
43
- getAll({ pageOffset, pageLimit, pageToken }?: PaginationParams): Promise<{
44
- data: Directory[] | null;
27
+ google_domain?: string;
28
+ google_access_token?: string;
29
+ google_refresh_token?: string;
30
+ }): Promise<Response<Directory>>;
31
+ get(id: string): Promise<Response<Directory>>;
32
+ update(id: string, param: Omit<Partial<Directory>, 'id' | 'tenant' | 'prodct' | 'scim' | 'type'>): Promise<Response<Directory>>;
33
+ getByTenantAndProduct(tenant: string, product: string): Promise<Response<Directory[]>>;
34
+ getAll(params?: PaginationParams): Promise<Response<Directory[]> & {
45
35
  pageToken?: string;
46
- error: ApiError | null;
47
- }>;
48
- delete(id: string): Promise<{
49
- data: null;
50
- error: ApiError | null;
51
36
  }>;
37
+ delete(id: string): Promise<Response<null>>;
52
38
  private transform;
39
+ getByProvider(params: {
40
+ provider: DirectoryType;
41
+ pageOffset?: number;
42
+ pageLimit?: number;
43
+ pageToken?: string;
44
+ }): Promise<Response<Directory[]> & {
45
+ pageToken?: string;
46
+ }>;
53
47
  }
54
48
  export {};