@boxyhq/saml-jackson 1.9.3 → 1.9.6
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.
- package/dist/controller/api.d.ts +6 -10
- package/dist/controller/api.js +29 -6
- package/dist/controller/api.js.map +1 -1
- package/dist/controller/connection/oidc.d.ts +2 -5
- package/dist/controller/connection/oidc.js +4 -0
- package/dist/controller/connection/oidc.js.map +1 -1
- package/dist/controller/connection/saml.d.ts +2 -5
- package/dist/controller/connection/saml.js +8 -1
- package/dist/controller/connection/saml.js.map +1 -1
- package/dist/controller/oauth.js +3 -0
- package/dist/controller/oauth.js.map +1 -1
- package/dist/controller/utils.d.ts +16 -1
- package/dist/controller/utils.js +20 -8
- package/dist/controller/utils.js.map +1 -1
- package/dist/db/db.d.ts +1 -0
- package/dist/db/db.js +5 -0
- package/dist/db/db.js.map +1 -1
- package/dist/db/dynamoDb.d.ts +1 -0
- package/dist/db/dynamoDb.js +19 -6
- package/dist/db/dynamoDb.js.map +1 -1
- package/dist/db/mem.d.ts +1 -0
- package/dist/db/mem.js +10 -0
- package/dist/db/mem.js.map +1 -1
- package/dist/db/mongo.d.ts +1 -0
- package/dist/db/mongo.js +11 -0
- package/dist/db/mongo.js.map +1 -1
- package/dist/db/planetscale/entity/JacksonIndex.js.map +1 -1
- package/dist/db/planetscale/entity/JacksonStore.js.map +1 -1
- package/dist/db/planetscale/entity/JacksonTTL.js.map +1 -1
- package/dist/db/redis.d.ts +1 -0
- package/dist/db/redis.js +21 -0
- package/dist/db/redis.js.map +1 -1
- package/dist/db/sql/entity/JacksonIndex.js.map +1 -1
- package/dist/db/sql/entity/JacksonStore.js.map +1 -1
- package/dist/db/sql/entity/JacksonTTL.js.map +1 -1
- package/dist/db/sql/mariadb/entity/JacksonIndex.js.map +1 -1
- package/dist/db/sql/mariadb/entity/JacksonStore.js.map +1 -1
- package/dist/db/sql/mariadb/entity/JacksonTTL.js.map +1 -1
- package/dist/db/sql/mssql/entity/JacksonIndex.js.map +1 -1
- package/dist/db/sql/mssql/entity/JacksonStore.js.map +1 -1
- package/dist/db/sql/mssql/entity/JacksonTTL.js.map +1 -1
- package/dist/db/sql/sql.d.ts +1 -0
- package/dist/db/sql/sql.js +29 -0
- package/dist/db/sql/sql.js.map +1 -1
- package/dist/db/store.js +5 -0
- package/dist/db/store.js.map +1 -1
- package/dist/directory-sync/Base.d.ts +1 -0
- package/dist/directory-sync/Base.js +1 -0
- package/dist/directory-sync/Base.js.map +1 -1
- package/dist/directory-sync/DirectoryConfig.d.ts +20 -7
- package/dist/directory-sync/DirectoryConfig.js +53 -16
- package/dist/directory-sync/DirectoryConfig.js.map +1 -1
- package/dist/directory-sync/DirectoryGroups.js +0 -1
- package/dist/directory-sync/DirectoryGroups.js.map +1 -1
- package/dist/directory-sync/Groups.d.ts +3 -2
- package/dist/directory-sync/Groups.js +49 -19
- package/dist/directory-sync/Groups.js.map +1 -1
- package/dist/directory-sync/Users.d.ts +1 -1
- package/dist/directory-sync/Users.js +13 -9
- package/dist/directory-sync/Users.js.map +1 -1
- package/dist/directory-sync/WebhookEventsLogger.d.ts +7 -6
- package/dist/directory-sync/WebhookEventsLogger.js +26 -18
- package/dist/directory-sync/WebhookEventsLogger.js.map +1 -1
- package/dist/directory-sync/events.js +11 -18
- package/dist/directory-sync/events.js.map +1 -1
- package/dist/directory-sync/index.d.ts +3 -2
- package/dist/directory-sync/index.js +6 -5
- package/dist/directory-sync/index.js.map +1 -1
- package/dist/directory-sync/transform.d.ts +9 -5
- package/dist/directory-sync/transform.js +26 -2
- package/dist/directory-sync/transform.js.map +1 -1
- package/dist/directory-sync/types.d.ts +11 -3
- package/dist/directory-sync/utils.d.ts +2 -12
- package/dist/directory-sync/utils.js +1 -57
- package/dist/directory-sync/utils.js.map +1 -1
- package/dist/event/axios.js.map +1 -0
- package/dist/event/index.d.ts +10 -0
- package/dist/event/index.js +54 -0
- package/dist/event/index.js.map +1 -0
- package/dist/event/types.d.ts +21 -0
- package/dist/event/types.js +3 -0
- package/dist/event/types.js.map +1 -0
- package/dist/event/utils.d.ts +4 -0
- package/dist/event/utils.js +39 -0
- package/dist/event/utils.js.map +1 -0
- package/dist/event/webhook.d.ts +3 -0
- package/dist/event/webhook.js +39 -0
- package/dist/event/webhook.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/loadConnection.js +1 -2
- package/dist/loadConnection.js.map +1 -1
- package/dist/opentelemetry/metrics.d.ts +10 -3
- package/dist/opentelemetry/metrics.js +38 -31
- package/dist/opentelemetry/metrics.js.map +1 -1
- package/dist/typings.d.ts +35 -12
- package/dist/typings.js +1 -0
- package/dist/typings.js.map +1 -1
- package/package.json +18 -17
- package/dist/directory-sync/axios.js.map +0 -1
- /package/dist/{directory-sync → event}/axios.d.ts +0 -0
- /package/dist/{directory-sync → event}/axios.js +0 -0
@@ -1,12 +1,13 @@
|
|
1
|
-
import type { DatabaseStore, JacksonOption } from '../typings';
|
1
|
+
import type { DatabaseStore, JacksonOption, IEventController } from '../typings';
|
2
2
|
import { DirectoryConfig } from './DirectoryConfig';
|
3
3
|
import { Users } from './Users';
|
4
4
|
import { Groups } from './Groups';
|
5
5
|
import { RequestHandler } from './request';
|
6
6
|
import { WebhookEventsLogger } from './WebhookEventsLogger';
|
7
|
-
declare const directorySync: (
|
7
|
+
declare const directorySync: (params: {
|
8
8
|
db: DatabaseStore;
|
9
9
|
opts: JacksonOption;
|
10
|
+
eventController: IEventController;
|
10
11
|
}) => Promise<{
|
11
12
|
users: Users;
|
12
13
|
groups: Groups;
|
@@ -18,21 +18,22 @@ const utils_1 = require("./utils");
|
|
18
18
|
const request_1 = require("./request");
|
19
19
|
const events_1 = require("./events");
|
20
20
|
const WebhookEventsLogger_1 = require("./WebhookEventsLogger");
|
21
|
-
const directorySync = (
|
22
|
-
const
|
21
|
+
const directorySync = (params) => __awaiter(void 0, void 0, void 0, function* () {
|
22
|
+
const { db, opts, eventController } = params;
|
23
23
|
const users = new Users_1.Users({ db });
|
24
24
|
const groups = new Groups_1.Groups({ db });
|
25
|
+
const logger = new WebhookEventsLogger_1.WebhookEventsLogger({ db });
|
26
|
+
const directories = new DirectoryConfig_1.DirectoryConfig({ db, opts, users, groups, logger, eventController });
|
25
27
|
const directoryUsers = new DirectoryUsers_1.DirectoryUsers({ directories, users });
|
26
28
|
const directoryGroups = new DirectoryGroups_1.DirectoryGroups({ directories, users, groups });
|
27
|
-
const webhookEventsLogger = new WebhookEventsLogger_1.WebhookEventsLogger({ db });
|
28
29
|
return {
|
29
30
|
users,
|
30
31
|
groups,
|
31
32
|
directories,
|
32
|
-
webhookLogs:
|
33
|
+
webhookLogs: logger,
|
33
34
|
requests: new request_1.RequestHandler(directoryUsers, directoryGroups),
|
34
35
|
events: {
|
35
|
-
callback: yield (0, events_1.handleEventCallback)(directories,
|
36
|
+
callback: yield (0, events_1.handleEventCallback)(directories, logger),
|
36
37
|
},
|
37
38
|
providers: () => {
|
38
39
|
return (0, utils_1.getDirectorySyncProviders)();
|
@@ -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,EAAE,EAAE,EAAE,IAAI,
|
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,7 +1,11 @@
|
|
1
|
-
import { Group, User } from '../typings';
|
2
|
-
declare const transformUser: (user: User) => User;
|
3
|
-
declare const transformGroup: (group: Group) => Group;
|
4
|
-
declare const transformUserGroup: (user: User, group: Group) => User & {
|
1
|
+
import { Directory, DirectorySyncEvent, DirectorySyncEventType, Group, User } from '../typings';
|
2
|
+
export declare const transformUser: (user: User) => User;
|
3
|
+
export declare const transformGroup: (group: Group) => Group;
|
4
|
+
export declare const transformUserGroup: (user: User, group: Group) => User & {
|
5
5
|
group: Group;
|
6
6
|
};
|
7
|
-
export
|
7
|
+
export declare const transformEventPayload: (event: DirectorySyncEventType, payload: {
|
8
|
+
directory: Directory;
|
9
|
+
group?: Group | null;
|
10
|
+
user?: User | null;
|
11
|
+
}) => DirectorySyncEvent;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.transformUserGroup = exports.transformGroup = exports.transformUser = void 0;
|
3
|
+
exports.transformEventPayload = exports.transformUserGroup = exports.transformGroup = exports.transformUser = void 0;
|
4
4
|
const transformUser = (user) => {
|
5
5
|
return {
|
6
6
|
id: user.id,
|
@@ -21,7 +21,31 @@ const transformGroup = (group) => {
|
|
21
21
|
};
|
22
22
|
exports.transformGroup = transformGroup;
|
23
23
|
const transformUserGroup = (user, group) => {
|
24
|
-
return Object.assign(Object.assign({}, transformUser(user)), { group: transformGroup(group) });
|
24
|
+
return Object.assign(Object.assign({}, (0, exports.transformUser)(user)), { group: (0, exports.transformGroup)(group) });
|
25
25
|
};
|
26
26
|
exports.transformUserGroup = transformUserGroup;
|
27
|
+
const transformEventPayload = (event, payload) => {
|
28
|
+
const { directory, group, user } = payload;
|
29
|
+
const { tenant, product, id: directory_id } = directory;
|
30
|
+
const eventPayload = {
|
31
|
+
event,
|
32
|
+
tenant,
|
33
|
+
product,
|
34
|
+
directory_id,
|
35
|
+
};
|
36
|
+
// User events
|
37
|
+
if (['user.created', 'user.updated', 'user.deleted'].includes(event) && user) {
|
38
|
+
eventPayload['data'] = (0, exports.transformUser)(user);
|
39
|
+
}
|
40
|
+
// Group events
|
41
|
+
if (['group.created', 'group.updated', 'group.deleted'].includes(event) && group) {
|
42
|
+
eventPayload['data'] = (0, exports.transformGroup)(group);
|
43
|
+
}
|
44
|
+
// Group membership events
|
45
|
+
if (['group.user_added', 'group.user_removed'].includes(event) && user && group) {
|
46
|
+
eventPayload['data'] = (0, exports.transformUserGroup)(user, group);
|
47
|
+
}
|
48
|
+
return eventPayload;
|
49
|
+
};
|
50
|
+
exports.transformEventPayload = transformEventPayload;
|
27
51
|
//# sourceMappingURL=transform.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/directory-sync/transform.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/directory-sync/transform.ts"],"names":[],"mappings":";;;AAEO,MAAM,aAAa,GAAG,CAAC,IAAU,EAAQ,EAAE;IAChD,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,aAAa,iBASxB;AAEK,MAAM,cAAc,GAAG,CAAC,KAAY,EAAS,EAAE;IACpD,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,cAAc,kBAMzB;AAEK,MAAM,kBAAkB,GAAG,CAAC,IAAU,EAAE,KAAY,EAA2B,EAAE;IACtF,uCACK,IAAA,qBAAa,EAAC,IAAI,CAAC,KACtB,KAAK,EAAE,IAAA,sBAAc,EAAC,KAAK,CAAC,IAC5B;AACJ,CAAC,CAAC;AALW,QAAA,kBAAkB,sBAK7B;AAEK,MAAM,qBAAqB,GAAG,CACnC,KAA6B,EAC7B,OAA2E,EAC3E,EAAE;IACF,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IAExD,MAAM,YAAY,GAAG;QACnB,KAAK;QACL,MAAM;QACN,OAAO;QACP,YAAY;KACb,CAAC;IAEF,cAAc;IACd,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;QAC5E,YAAY,CAAC,MAAM,CAAC,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,CAAC;KAC5C;IAED,eAAe;IACf,IAAI,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE;QAChF,YAAY,CAAC,MAAM,CAAC,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAC;KAC9C;IAED,0BAA0B;IAC1B,IAAI,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,KAAK,EAAE;QAC/E,YAAY,CAAC,MAAM,CAAC,GAAG,IAAA,0BAAkB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACxD;IAED,OAAO,YAAkC,CAAC;AAC5C,CAAC,CAAC;AA9BW,QAAA,qBAAqB,yBA8BhC"}
|
@@ -37,6 +37,7 @@ export type Directory = {
|
|
37
37
|
endpoint: string;
|
38
38
|
secret: string;
|
39
39
|
};
|
40
|
+
deactivated?: boolean;
|
40
41
|
};
|
41
42
|
export type DirectorySyncGroupMember = {
|
42
43
|
value: string;
|
@@ -65,12 +66,11 @@ export interface DirectorySyncRequest {
|
|
65
66
|
filter?: string;
|
66
67
|
};
|
67
68
|
}
|
69
|
+
export type DirectorySyncEventData = User | Group | UserWithGroup;
|
68
70
|
export interface DirectorySyncEvent {
|
69
71
|
directory_id: Directory['id'];
|
70
72
|
event: DirectorySyncEventType;
|
71
|
-
data:
|
72
|
-
group: Group;
|
73
|
-
});
|
73
|
+
data: DirectorySyncEventData;
|
74
74
|
tenant: string;
|
75
75
|
product: string;
|
76
76
|
}
|
@@ -97,6 +97,9 @@ export type Group = {
|
|
97
97
|
name: string;
|
98
98
|
raw?: any;
|
99
99
|
};
|
100
|
+
export type UserWithGroup = User & {
|
101
|
+
group: Group;
|
102
|
+
};
|
100
103
|
export type PaginationParams = {
|
101
104
|
pageOffset?: number;
|
102
105
|
pageLimit?: number;
|
@@ -125,3 +128,8 @@ export type GroupPatchOperation = {
|
|
125
128
|
display?: string;
|
126
129
|
}[];
|
127
130
|
};
|
131
|
+
export type GroupMembership = {
|
132
|
+
id: string;
|
133
|
+
group_id: string;
|
134
|
+
user_id: string;
|
135
|
+
};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import type {
|
1
|
+
import type { User } from '../typings';
|
2
2
|
import { UserPatchOperation, GroupPatchOperation } from '../typings';
|
3
3
|
declare const parseGroupOperation: (operation: GroupPatchOperation) => {
|
4
4
|
action: string;
|
@@ -19,16 +19,6 @@ declare const parseGroupOperation: (operation: GroupPatchOperation) => {
|
|
19
19
|
declare const getDirectorySyncProviders: () => {
|
20
20
|
[K: string]: string;
|
21
21
|
};
|
22
|
-
declare const transformEventPayload: (event: DirectorySyncEventType, payload: {
|
23
|
-
directory: Directory;
|
24
|
-
group?: Group | null;
|
25
|
-
user?: User | null;
|
26
|
-
}) => DirectorySyncEvent;
|
27
|
-
declare const createHeader: (secret: string, event: DirectorySyncEvent) => Promise<{
|
28
|
-
'Content-Type': string;
|
29
|
-
'BoxyHQ-Signature': string;
|
30
|
-
}>;
|
31
|
-
declare const createSignatureString: (secret: string, event: DirectorySyncEvent) => Promise<string>;
|
32
22
|
declare const parseUserPatchRequest: (operation: UserPatchOperation) => {
|
33
23
|
attributes: Partial<User>;
|
34
24
|
rawAttributes: {};
|
@@ -40,4 +30,4 @@ declare const extractStandardUserAttributes: (body: any) => {
|
|
40
30
|
active: true;
|
41
31
|
};
|
42
32
|
declare const updateRawUserAttributes: (raw: any, attributes: any) => any;
|
43
|
-
export { parseGroupOperation, getDirectorySyncProviders,
|
33
|
+
export { parseGroupOperation, getDirectorySyncProviders, parseUserPatchRequest, extractStandardUserAttributes, updateRawUserAttributes, };
|
@@ -1,21 +1,10 @@
|
|
1
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
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
4
|
};
|
14
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
-
exports.updateRawUserAttributes = exports.extractStandardUserAttributes = exports.parseUserPatchRequest = exports.
|
6
|
+
exports.updateRawUserAttributes = exports.extractStandardUserAttributes = exports.parseUserPatchRequest = exports.getDirectorySyncProviders = exports.parseGroupOperation = void 0;
|
16
7
|
const typings_1 = require("../typings");
|
17
|
-
const transform_1 = require("./transform");
|
18
|
-
const crypto_1 = __importDefault(require("crypto"));
|
19
8
|
const lodash_1 = __importDefault(require("lodash"));
|
20
9
|
const parseGroupOperation = (operation) => {
|
21
10
|
const { op, path, value } = operation;
|
@@ -62,51 +51,6 @@ const getDirectorySyncProviders = () => {
|
|
62
51
|
}, {});
|
63
52
|
};
|
64
53
|
exports.getDirectorySyncProviders = getDirectorySyncProviders;
|
65
|
-
const transformEventPayload = (event, payload) => {
|
66
|
-
const { directory, group, user } = payload;
|
67
|
-
const { tenant, product, id: directory_id } = directory;
|
68
|
-
const eventPayload = {
|
69
|
-
event,
|
70
|
-
tenant,
|
71
|
-
product,
|
72
|
-
directory_id,
|
73
|
-
};
|
74
|
-
// User events
|
75
|
-
if (['user.created', 'user.updated', 'user.deleted'].includes(event) && user) {
|
76
|
-
eventPayload['data'] = (0, transform_1.transformUser)(user);
|
77
|
-
}
|
78
|
-
// Group events
|
79
|
-
if (['group.created', 'group.updated', 'group.deleted'].includes(event) && group) {
|
80
|
-
eventPayload['data'] = (0, transform_1.transformGroup)(group);
|
81
|
-
}
|
82
|
-
// Group membership events
|
83
|
-
if (['group.user_added', 'group.user_removed'].includes(event) && user && group) {
|
84
|
-
eventPayload['data'] = (0, transform_1.transformUserGroup)(user, group);
|
85
|
-
}
|
86
|
-
return eventPayload;
|
87
|
-
};
|
88
|
-
exports.transformEventPayload = transformEventPayload;
|
89
|
-
// Create request headers
|
90
|
-
const createHeader = (secret, event) => __awaiter(void 0, void 0, void 0, function* () {
|
91
|
-
return {
|
92
|
-
'Content-Type': 'application/json',
|
93
|
-
'BoxyHQ-Signature': yield createSignatureString(secret, event),
|
94
|
-
};
|
95
|
-
});
|
96
|
-
exports.createHeader = createHeader;
|
97
|
-
// Create a signature string
|
98
|
-
const createSignatureString = (secret, event) => __awaiter(void 0, void 0, void 0, function* () {
|
99
|
-
if (!secret) {
|
100
|
-
return '';
|
101
|
-
}
|
102
|
-
const timestamp = new Date().getTime();
|
103
|
-
const signature = crypto_1.default
|
104
|
-
.createHmac('sha256', secret)
|
105
|
-
.update(`${timestamp}.${JSON.stringify(event)}`)
|
106
|
-
.digest('hex');
|
107
|
-
return `t=${timestamp},s=${signature}`;
|
108
|
-
});
|
109
|
-
exports.createSignatureString = createSignatureString;
|
110
54
|
// Parse the PATCH request body and return the user attributes (both standard and custom)
|
111
55
|
const parseUserPatchRequest = (operation) => {
|
112
56
|
const { value, path } = operation;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/directory-sync/utils.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/directory-sync/utils.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"axios.js","sourceRoot":"","sources":["../../src/event/axios.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAE1B,MAAM,KAAK,GAAG,CAAC,CAAC;AAChB,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,aAAa,GAAG,eAAK,CAAC,MAAM,EAAE,CAAC;AAErC,mDAAmD;AACnD,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAQ,EAAE,EAAE;IAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAE1B,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC5B;IAED,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAE/C,IAAI,MAAM,CAAC,YAAY,IAAI,KAAK,EAAE;QAChC,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC5B;IAED,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,OAAO;QAC3C,UAAU,CAAC;YACT,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,GAAG,eAAe,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAClG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,kBAAe,aAAa,CAAC"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import type { Directory, JacksonOption, SAMLSSORecord, EventType, SSOConnectionEventType, Webhook, EventPayloadSchema, OIDCSSORecord } from '../typings';
|
2
|
+
export default class Event {
|
3
|
+
private webhook;
|
4
|
+
constructor({ opts }: {
|
5
|
+
opts: JacksonOption;
|
6
|
+
});
|
7
|
+
notify<T extends EventType>(event: T, data: T extends SSOConnectionEventType ? SAMLSSORecord | OIDCSSORecord : Directory): Promise<import("axios").AxiosResponse<any, any> | undefined>;
|
8
|
+
private constructPayload;
|
9
|
+
sendWebhookEvent(webhook: Webhook | undefined, payload: EventPayloadSchema): Promise<import("axios").AxiosResponse<any, any> | undefined>;
|
10
|
+
}
|
@@ -0,0 +1,54 @@
|
|
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
|
+
const webhook_1 = require("./webhook");
|
13
|
+
const utils_1 = require("./utils");
|
14
|
+
class Event {
|
15
|
+
constructor({ opts }) {
|
16
|
+
this.webhook = opts.webhook;
|
17
|
+
}
|
18
|
+
notify(event, data) {
|
19
|
+
return __awaiter(this, void 0, void 0, function* () {
|
20
|
+
const payload = this.constructPayload(event, data);
|
21
|
+
return this.sendWebhookEvent(this.webhook, payload);
|
22
|
+
});
|
23
|
+
}
|
24
|
+
constructPayload(event, data) {
|
25
|
+
let transformedData;
|
26
|
+
if ('idpMetadata' in data) {
|
27
|
+
transformedData = (0, utils_1.transformSAMLSSOConnection)(data);
|
28
|
+
}
|
29
|
+
else if ('oidcProvider' in data) {
|
30
|
+
transformedData = (0, utils_1.transformOIDCSSOConnection)(data);
|
31
|
+
}
|
32
|
+
else {
|
33
|
+
transformedData = (0, utils_1.transformDirectoryConnection)(data);
|
34
|
+
}
|
35
|
+
const { tenant, product } = data;
|
36
|
+
const payload = {
|
37
|
+
event,
|
38
|
+
tenant,
|
39
|
+
product,
|
40
|
+
data: transformedData,
|
41
|
+
};
|
42
|
+
return payload;
|
43
|
+
}
|
44
|
+
sendWebhookEvent(webhook, payload) {
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
46
|
+
if (!(webhook === null || webhook === void 0 ? void 0 : webhook.endpoint) || !webhook.secret) {
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
return yield (0, webhook_1.sendPayloadToWebhook)(webhook, payload);
|
50
|
+
});
|
51
|
+
}
|
52
|
+
}
|
53
|
+
exports.default = Event;
|
54
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/event/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAWA,uCAAiD;AACjD,mCAIiB;AAEjB,MAAqB,KAAK;IAGxB,YAAY,EAAE,IAAI,EAA2B;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9B,CAAC;IAEK,MAAM,CACV,KAAQ,EACR,IAAkF;;YAElF,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAEnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;KAAA;IAEO,gBAAgB,CAAC,KAAgB,EAAE,IAA+C;QACxF,IAAI,eAA0B,CAAC;QAE/B,IAAI,aAAa,IAAI,IAAI,EAAE;YACzB,eAAe,GAAG,IAAA,kCAA0B,EAAC,IAAI,CAAC,CAAC;SACpD;aAAM,IAAI,cAAc,IAAI,IAAI,EAAE;YACjC,eAAe,GAAG,IAAA,kCAA0B,EAAC,IAAI,CAAC,CAAC;SACpD;aAAM;YACL,eAAe,GAAG,IAAA,oCAA4B,EAAC,IAAI,CAAC,CAAC;SACtD;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEjC,MAAM,OAAO,GAAuB;YAClC,KAAK;YACL,MAAM;YACN,OAAO;YACP,IAAI,EAAE,eAAe;SACtB,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;IAEK,gBAAgB,CAAC,OAA4B,EAAE,OAA2B;;YAC9E,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACzC,OAAO;aACR;YAED,OAAO,MAAM,IAAA,8BAAoB,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;KAAA;CACF;AA9CD,wBA8CC"}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import EventController from '../event';
|
2
|
+
import type { Directory, DirectorySyncEventType, SAMLSSORecord, OIDCSSORecord, DirectorySyncEventData } from '../typings';
|
3
|
+
export type IEventController = InstanceType<typeof EventController>;
|
4
|
+
export type SSOConnectionEventType = 'sso.created' | 'sso.deleted' | 'sso.activated' | 'sso.deactivated';
|
5
|
+
export type DsyncConnectionEventType = 'dsync.created' | 'dsync.deleted' | 'dsync.activated' | 'dsync.deactivated';
|
6
|
+
export type EventType = SSOConnectionEventType | DsyncConnectionEventType | DirectorySyncEventType;
|
7
|
+
export type SAMLSSOConnectionEventData = Pick<SAMLSSORecord, 'name' | 'description' | 'clientID' | 'clientSecret'> & {
|
8
|
+
provider: string;
|
9
|
+
friendlyProviderName: string;
|
10
|
+
};
|
11
|
+
export type OIDCSSOConnectionEventData = Pick<OIDCSSORecord, 'name' | 'description' | 'clientID' | 'clientSecret'> & {
|
12
|
+
provider: string | undefined;
|
13
|
+
};
|
14
|
+
export type DsyncConnectionEventData = Pick<Directory, 'id' | 'name' | 'type'>;
|
15
|
+
export type EventData = SAMLSSOConnectionEventData | OIDCSSOConnectionEventData | DsyncConnectionEventData | DirectorySyncEventData;
|
16
|
+
export type EventPayloadSchema = {
|
17
|
+
tenant: string;
|
18
|
+
product: string;
|
19
|
+
event: EventType;
|
20
|
+
data: EventData;
|
21
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/event/types.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import type { Directory, DsyncConnectionEventData, SAMLSSOConnectionEventData, OIDCSSOConnectionEventData, SAMLSSORecord, OIDCSSORecord } from '../typings';
|
2
|
+
export declare const transformSAMLSSOConnection: (data: SAMLSSORecord) => SAMLSSOConnectionEventData;
|
3
|
+
export declare const transformOIDCSSOConnection: (data: OIDCSSORecord) => OIDCSSOConnectionEventData;
|
4
|
+
export declare const transformDirectoryConnection: (data: Directory) => DsyncConnectionEventData;
|
@@ -0,0 +1,39 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.transformDirectoryConnection = exports.transformOIDCSSOConnection = exports.transformSAMLSSOConnection = void 0;
|
4
|
+
const utils_1 = require("../controller/utils");
|
5
|
+
const transformSAMLSSOConnection = (data) => {
|
6
|
+
const { name, description, clientID, clientSecret, idpMetadata } = data;
|
7
|
+
const { provider } = idpMetadata;
|
8
|
+
return {
|
9
|
+
name,
|
10
|
+
description,
|
11
|
+
clientID,
|
12
|
+
clientSecret,
|
13
|
+
provider,
|
14
|
+
friendlyProviderName: (0, utils_1.findFriendlyProviderName)(provider),
|
15
|
+
};
|
16
|
+
};
|
17
|
+
exports.transformSAMLSSOConnection = transformSAMLSSOConnection;
|
18
|
+
const transformOIDCSSOConnection = (data) => {
|
19
|
+
const { name, description, clientID, clientSecret, oidcProvider } = data;
|
20
|
+
const { provider } = oidcProvider;
|
21
|
+
return {
|
22
|
+
name,
|
23
|
+
description,
|
24
|
+
clientID,
|
25
|
+
clientSecret,
|
26
|
+
provider,
|
27
|
+
};
|
28
|
+
};
|
29
|
+
exports.transformOIDCSSOConnection = transformOIDCSSOConnection;
|
30
|
+
const transformDirectoryConnection = (data) => {
|
31
|
+
const { id, name, type } = data;
|
32
|
+
return {
|
33
|
+
id,
|
34
|
+
name,
|
35
|
+
type,
|
36
|
+
};
|
37
|
+
};
|
38
|
+
exports.transformDirectoryConnection = transformDirectoryConnection;
|
39
|
+
//# sourceMappingURL=utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/event/utils.ts"],"names":[],"mappings":";;;AAQA,+CAA+D;AAExD,MAAM,0BAA0B,GAAG,CAAC,IAAmB,EAA8B,EAAE;IAC5F,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;IAEjC,OAAO;QACL,IAAI;QACJ,WAAW;QACX,QAAQ;QACR,YAAY;QACZ,QAAQ;QACR,oBAAoB,EAAE,IAAA,gCAAwB,EAAC,QAAQ,CAAC;KACzD,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,0BAA0B,8BAYrC;AAEK,MAAM,0BAA0B,GAAG,CAAC,IAAmB,EAA8B,EAAE;IAC5F,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC;IAElC,OAAO;QACL,IAAI;QACJ,WAAW;QACX,QAAQ;QACR,YAAY;QACZ,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,0BAA0B,8BAWrC;AAEK,MAAM,4BAA4B,GAAG,CAAC,IAAe,EAA4B,EAAE;IACxF,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAEhC,OAAO;QACL,EAAE;QACF,IAAI;QACJ,IAAI;KACL,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,4BAA4B,gCAQvC"}
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import type { EventPayloadSchema, Webhook } from '../typings';
|
2
|
+
export declare const createSignatureString: (secret: string, payload: EventPayloadSchema) => string;
|
3
|
+
export declare const sendPayloadToWebhook: (webhook: Webhook, payload: EventPayloadSchema) => Promise<import("axios").AxiosResponse<any, any>>;
|
@@ -0,0 +1,39 @@
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.sendPayloadToWebhook = exports.createSignatureString = void 0;
|
16
|
+
const crypto_1 = __importDefault(require("crypto"));
|
17
|
+
const axios_1 = __importDefault(require("./axios"));
|
18
|
+
const createSignatureString = (secret, payload) => {
|
19
|
+
if (!secret) {
|
20
|
+
return '';
|
21
|
+
}
|
22
|
+
const timestamp = new Date().getTime();
|
23
|
+
const signature = crypto_1.default
|
24
|
+
.createHmac('sha256', secret)
|
25
|
+
.update(`${timestamp}.${JSON.stringify(payload)}`)
|
26
|
+
.digest('hex');
|
27
|
+
return `t=${timestamp},s=${signature}`;
|
28
|
+
};
|
29
|
+
exports.createSignatureString = createSignatureString;
|
30
|
+
const sendPayloadToWebhook = (webhook, payload) => __awaiter(void 0, void 0, void 0, function* () {
|
31
|
+
return yield axios_1.default.post(webhook.endpoint, payload, {
|
32
|
+
headers: {
|
33
|
+
'Content-Type': 'application/json',
|
34
|
+
'BoxyHQ-Signature': (0, exports.createSignatureString)(webhook.secret, payload),
|
35
|
+
},
|
36
|
+
});
|
37
|
+
});
|
38
|
+
exports.sendPayloadToWebhook = sendPayloadToWebhook;
|
39
|
+
//# sourceMappingURL=webhook.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/event/webhook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,oDAA4B;AAC5B,oDAA4B;AAErB,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,OAA2B,EAAE,EAAE;IACnF,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,EAAE,CAAC;KACX;IAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAEvC,MAAM,SAAS,GAAG,gBAAM;SACrB,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;SAC5B,MAAM,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;SACjD,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjB,OAAO,KAAK,SAAS,MAAM,SAAS,EAAE,CAAC;AACzC,CAAC,CAAC;AAbW,QAAA,qBAAqB,yBAahC;AAEK,MAAM,oBAAoB,GAAG,CAAO,OAAgB,EAAE,OAA2B,EAAE,EAAE;IAC1F,OAAO,MAAM,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE;QACjD,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,kBAAkB,EAAE,IAAA,6BAAqB,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;SACnE;KACF,CAAC,CAAC;AACL,CAAC,CAAA,CAAC;AAPW,QAAA,oBAAoB,wBAO/B"}
|
package/dist/index.js
CHANGED
@@ -42,7 +42,6 @@ exports.controllers = void 0;
|
|
42
42
|
const db_1 = __importDefault(require("./db/db"));
|
43
43
|
const defaultDb_1 = __importDefault(require("./db/defaultDb"));
|
44
44
|
const loadConnection_1 = __importDefault(require("./loadConnection"));
|
45
|
-
const metrics_1 = require("./opentelemetry/metrics");
|
46
45
|
const admin_1 = require("./controller/admin");
|
47
46
|
const api_1 = require("./controller/api");
|
48
47
|
const oauth_1 = require("./controller/oauth");
|
@@ -58,6 +57,7 @@ const federated_saml_1 = __importDefault(require("./ee/federated-saml"));
|
|
58
57
|
const checkLicense_1 = __importDefault(require("./ee/common/checkLicense"));
|
59
58
|
const branding_1 = require("./ee/branding");
|
60
59
|
const saml_tracer_1 = __importDefault(require("./saml-tracer"));
|
60
|
+
const event_1 = __importDefault(require("./event"));
|
61
61
|
const defaultOpts = (opts) => {
|
62
62
|
const newOpts = Object.assign({}, opts);
|
63
63
|
if (!newOpts.externalUrl) {
|
@@ -82,7 +82,6 @@ const defaultOpts = (opts) => {
|
|
82
82
|
};
|
83
83
|
const controllers = (opts) => __awaiter(void 0, void 0, void 0, function* () {
|
84
84
|
opts = defaultOpts(opts);
|
85
|
-
(0, metrics_1.init)();
|
86
85
|
const db = yield db_1.default.new(opts.db);
|
87
86
|
const connectionStore = db.store('saml:config');
|
88
87
|
const sessionStore = db.store('oauth:session', opts.db.ttl);
|
@@ -93,7 +92,8 @@ const controllers = (opts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
93
92
|
const certificateStore = db.store('x509:certificates');
|
94
93
|
const settingsStore = db.store('portal:settings');
|
95
94
|
const samlTracer = new saml_tracer_1.default({ db });
|
96
|
-
const
|
95
|
+
const eventController = new event_1.default({ opts });
|
96
|
+
const connectionAPIController = new api_1.ConnectionAPIController({ connectionStore, opts, eventController });
|
97
97
|
const adminController = new admin_1.AdminController({ connectionStore, samlTracer });
|
98
98
|
const healthCheckController = new health_check_1.HealthCheckController({ healthCheckStore });
|
99
99
|
yield healthCheckController.init();
|
@@ -121,7 +121,7 @@ const controllers = (opts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
121
121
|
});
|
122
122
|
const oidcDiscoveryController = new oidc_discovery_1.OidcDiscoveryController({ opts });
|
123
123
|
const spConfig = new sp_config_1.SPSAMLConfig(opts);
|
124
|
-
const directorySyncController = yield (0, directory_sync_1.default)({ db, opts });
|
124
|
+
const directorySyncController = yield (0, directory_sync_1.default)({ db, opts, eventController });
|
125
125
|
// Enterprise Features
|
126
126
|
const samlFederatedController = yield (0, federated_saml_1.default)({ db, opts, samlTracer });
|
127
127
|
const brandingController = (yield (0, checkLicense_1.default)(opts.boxyhqLicenseKey))
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,iDAAyB;AACzB,+DAAuC;AACvC,sEAA8C;AAC9C,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/loadConnection.js
CHANGED
@@ -36,7 +36,6 @@ const fs = __importStar(require("fs"));
|
|
36
36
|
const path = __importStar(require("path"));
|
37
37
|
const url = __importStar(require("url"));
|
38
38
|
const loadConnection = (preLoadedConnection) => __awaiter(void 0, void 0, void 0, function* () {
|
39
|
-
var _a;
|
40
39
|
if (preLoadedConnection.startsWith('./')) {
|
41
40
|
preLoadedConnection = path.resolve(process.cwd(), preLoadedConnection);
|
42
41
|
}
|
@@ -50,7 +49,7 @@ const loadConnection = (preLoadedConnection) => __awaiter(void 0, void 0, void 0
|
|
50
49
|
if (file.endsWith('.js')) {
|
51
50
|
const filePath = path.join(preLoadedConnection, file);
|
52
51
|
const fileUrl = preLoadedConnection.startsWith('/') ? filePath : url.pathToFileURL(filePath).toString();
|
53
|
-
const { default: connection, } = yield
|
52
|
+
const { default: connection, } = yield Promise.resolve(`${fileUrl}`).then(s => __importStar(require(s)));
|
54
53
|
if (!('oidcDiscoveryUrl' in connection) && !('oidcMetadata' in connection)) {
|
55
54
|
const rawMetadata = yield fs.promises.readFile(path.join(preLoadedConnection, path.parse(file).name + '.xml'), 'utf8');
|
56
55
|
connection.encodedRawMetadata = Buffer.from(rawMetadata, 'utf8').toString('base64');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"loadConnection.js","sourceRoot":"","sources":["../src/loadConnection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,yCAA2B;AAc3B,MAAM,cAAc,GAAG,CAAO,mBAA2B,EAAyB,EAAE
|
1
|
+
{"version":3,"file":"loadConnection.js","sourceRoot":"","sources":["../src/loadConnection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,yCAA2B;AAc3B,MAAM,cAAc,GAAG,CAAO,mBAA2B,EAAyB,EAAE;IAClF,IAAI,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACxC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAC;KACxE;SAAM;QACL,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;KACzD;IAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxG,MAAM,EACJ,OAAO,EAAE,UAAU,GACpB,GAEG,yBAAuC,OAAO,uCAAC,CAAC;YACpD,IAAI,CAAC,CAAC,kBAAkB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,cAAc,IAAI,UAAU,CAAC,EAAE;gBAC1E,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAC5C,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,EAC9D,MAAM,CACP,CAAC;gBACF,UAAU,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACrF;YAED,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC9B;KACF;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAA,CAAC;AAEF,kBAAe,cAAc,CAAC"}
|
@@ -1,3 +1,10 @@
|
|
1
|
-
declare const
|
2
|
-
|
3
|
-
|
1
|
+
declare const counters: {
|
2
|
+
createConnection: () => void;
|
3
|
+
getConnections: () => void;
|
4
|
+
deleteConnections: () => void;
|
5
|
+
oauthAuthorize: () => void;
|
6
|
+
oauthToken: () => void;
|
7
|
+
oauthUserInfo: () => void;
|
8
|
+
};
|
9
|
+
declare const increment: (action: keyof typeof counters) => void;
|
10
|
+
export { increment };
|