@sipgate/integration-bridge 0.22.2 → 0.22.3
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/util/callEventHelper.d.ts +7 -0
- package/dist/util/callEventHelper.js +37 -0
- package/dist/util/callEventHelper.js.map +1 -0
- package/dist/util/env.d.ts +14 -0
- package/dist/util/env.js +73 -1
- package/dist/util/env.js.map +1 -1
- package/dist/util/gdpr/gdprSlackNotification.d.ts +4 -0
- package/dist/util/gdpr/gdprSlackNotification.js +79 -0
- package/dist/util/gdpr/gdprSlackNotification.js.map +1 -0
- package/dist/util/gdpr/index.d.ts +3 -0
- package/dist/util/gdpr/index.js +33 -0
- package/dist/util/gdpr/index.js.map +1 -0
- package/dist/util/http/index.d.ts +7 -0
- package/dist/util/http/index.js +39 -0
- package/dist/util/http/index.js.map +1 -0
- package/dist/util/http/pagination.d.ts +7 -0
- package/dist/util/http/pagination.js +56 -0
- package/dist/util/http/pagination.js.map +1 -0
- package/dist/util/http/rate-limited-axios.d.ts +13 -0
- package/dist/util/http/rate-limited-axios.js +79 -0
- package/dist/util/http/rate-limited-axios.js.map +1 -0
- package/dist/util/http/url.d.ts +1 -0
- package/dist/util/http/url.js +14 -0
- package/dist/util/http/url.js.map +1 -0
- package/dist/util/index.d.ts +13 -0
- package/dist/util/index.js +31 -0
- package/dist/util/index.js.map +1 -1
- package/dist/util/lang/diff.d.ts +8 -0
- package/dist/util/lang/diff.js +80 -0
- package/dist/util/lang/diff.js.map +1 -0
- package/dist/util/lang/index.d.ts +2 -0
- package/dist/util/lang/index.js +6 -0
- package/dist/util/lang/index.js.map +1 -0
- package/dist/util/oauth.d.ts +32 -0
- package/dist/util/oauth.js +167 -0
- package/dist/util/oauth.js.map +1 -0
- package/dist/util/security/index.d.ts +3 -0
- package/dist/util/security/index.js +33 -0
- package/dist/util/security/index.js.map +1 -0
- package/dist/util/security/nonce.d.ts +5 -0
- package/dist/util/security/nonce.js +49 -0
- package/dist/util/security/nonce.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CallEvent } from "../models";
|
|
2
|
+
export interface CallMembers {
|
|
3
|
+
from: string | undefined;
|
|
4
|
+
to: string | undefined;
|
|
5
|
+
}
|
|
6
|
+
export declare const getCallMembers: (event: CallEvent) => CallMembers;
|
|
7
|
+
export declare const getTextDescriptionForCallevent: (callEvent: CallEvent) => string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTextDescriptionForCallevent = exports.getCallMembers = void 0;
|
|
4
|
+
const models_1 = require("../models");
|
|
5
|
+
const getCallMembers = (event) => {
|
|
6
|
+
const localParticipant = event.participants.find((item) => item.type === models_1.CallParticipantType.LOCAL);
|
|
7
|
+
const remoteParticipant = event.participants.find((item) => item.type === models_1.CallParticipantType.REMOTE);
|
|
8
|
+
const to = event.direction === models_1.CallDirection.OUT
|
|
9
|
+
? remoteParticipant === null || remoteParticipant === void 0 ? void 0 : remoteParticipant.phoneNumber
|
|
10
|
+
: localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.phoneNumber;
|
|
11
|
+
const from = event.direction === models_1.CallDirection.IN
|
|
12
|
+
? remoteParticipant === null || remoteParticipant === void 0 ? void 0 : remoteParticipant.phoneNumber
|
|
13
|
+
: localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.phoneNumber;
|
|
14
|
+
return { from, to };
|
|
15
|
+
};
|
|
16
|
+
exports.getCallMembers = getCallMembers;
|
|
17
|
+
function formatDuration(durationInMilliSeconds) {
|
|
18
|
+
const minutes = Math.floor(durationInMilliSeconds / (60 * 1000));
|
|
19
|
+
const seconds = Math.floor((durationInMilliSeconds - minutes * 60) / 1000)
|
|
20
|
+
.toString()
|
|
21
|
+
.padStart(2, "0")
|
|
22
|
+
.substring(0, 2);
|
|
23
|
+
return `${minutes}:${seconds} min`;
|
|
24
|
+
}
|
|
25
|
+
const getTextDescriptionForCallevent = (callEvent) => {
|
|
26
|
+
var _a;
|
|
27
|
+
const date = new Date(callEvent.startTime);
|
|
28
|
+
const duration = formatDuration(callEvent.endTime - callEvent.startTime);
|
|
29
|
+
const directionInfo = callEvent.direction === models_1.CallDirection.IN ? "eingehender" : "ausgehender";
|
|
30
|
+
const remoteParticipantDescription = (callEvent.direction === models_1.CallDirection.IN ? " von " : " an ") +
|
|
31
|
+
((_a = callEvent.participants.find((x) => x.type == models_1.CallParticipantType.REMOTE)) === null || _a === void 0 ? void 0 : _a.phoneNumber);
|
|
32
|
+
const callState = callEvent.state === "MISSED" ? "Nicht angenommener " : "Angenommener";
|
|
33
|
+
const durationInfo = callEvent.state === "MISSED" ? "" : ` ,Dauer: ${duration}`;
|
|
34
|
+
return `${callState} ${directionInfo} Anruf ${remoteParticipantDescription} am ${date.toLocaleString("de", { timeZone: "Europe/Berlin" })} ${durationInfo}`;
|
|
35
|
+
};
|
|
36
|
+
exports.getTextDescriptionForCallevent = getTextDescriptionForCallevent;
|
|
37
|
+
//# sourceMappingURL=callEventHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callEventHelper.js","sourceRoot":"","sources":["../../src/util/callEventHelper.ts"],"names":[],"mappings":";;;AAAA,sCAA0E;AAOnE,MAAM,cAAc,GAAG,CAAC,KAAgB,EAAe,EAAE;IAC9D,MAAM,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,4BAAmB,CAAC,KAAK,CAClD,CAAC;IACF,MAAM,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAC/C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,4BAAmB,CAAC,MAAM,CACnD,CAAC;IAEF,MAAM,EAAE,GACN,KAAK,CAAC,SAAS,KAAK,sBAAa,CAAC,GAAG;QACnC,CAAC,CAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,WAAW;QAChC,CAAC,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,WAAW,CAAC;IACpC,MAAM,IAAI,GACR,KAAK,CAAC,SAAS,KAAK,sBAAa,CAAC,EAAE;QAClC,CAAC,CAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,WAAW;QAChC,CAAC,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,WAAW,CAAC;IAEpC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC,CAAC;AAlBW,QAAA,cAAc,kBAkBzB;AACF,SAAS,cAAc,CAAC,sBAA8B;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,sBAAsB,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;SACvE,QAAQ,EAAE;SACV,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;SAChB,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,OAAO,GAAG,OAAO,IAAI,OAAO,MAAM,CAAC;AACrC,CAAC;AACM,MAAM,8BAA8B,GAAG,CAC5C,SAAoB,EACZ,EAAE;;IACV,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACzE,MAAM,aAAa,GACjB,SAAS,CAAC,SAAS,KAAK,sBAAa,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;IAC3E,MAAM,4BAA4B,GAChC,CAAC,SAAS,CAAC,SAAS,KAAK,sBAAa,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;SAC7D,MAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,4BAAmB,CAAC,MAAM,CAAC,0CACpE,WAAW,CAAA,CAAC;IAClB,MAAM,SAAS,GACb,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,CAAC;IACxE,MAAM,YAAY,GAChB,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE,CAAC;IAC7D,OAAO,GAAG,SAAS,IAAI,aAAa,UAAU,4BAA4B,OAAO,IAAI,CAAC,cAAc,CAClG,IAAI,EACJ,EAAE,QAAQ,EAAE,eAAe,EAAE,CAC9B,IAAI,YAAY,EAAE,CAAC;AACtB,CAAC,CAAC;AAnBW,QAAA,8BAA8B,kCAmBzC"}
|
package/dist/util/env.d.ts
CHANGED
|
@@ -1 +1,15 @@
|
|
|
1
1
|
export declare function isProduction(): boolean;
|
|
2
|
+
export interface APIConfig {
|
|
3
|
+
API_URL: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const parseEnvironment: () => APIConfig;
|
|
6
|
+
export interface OAuth2Options {
|
|
7
|
+
APP_ID: string;
|
|
8
|
+
APP_SECRET: string;
|
|
9
|
+
APP_REDIRECT_URL: string;
|
|
10
|
+
NONCE_COOKIE_NAME: string;
|
|
11
|
+
API_URL: string;
|
|
12
|
+
APP_AUTHORIZE_URL: string;
|
|
13
|
+
APP_ACCESSTOKEN_URL: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const parseOAuthOptionFromEnvironment: () => OAuth2Options;
|
package/dist/util/env.js
CHANGED
|
@@ -1,8 +1,80 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isProduction = void 0;
|
|
26
|
+
exports.parseOAuthOptionFromEnvironment = exports.parseEnvironment = exports.isProduction = void 0;
|
|
27
|
+
const dotenv = __importStar(require("dotenv"));
|
|
4
28
|
function isProduction() {
|
|
5
29
|
return process.env.NODE_ENV === "production";
|
|
6
30
|
}
|
|
7
31
|
exports.isProduction = isProduction;
|
|
32
|
+
const parseEnvironment = () => {
|
|
33
|
+
if (process.env.NODE_ENV === "development")
|
|
34
|
+
dotenv.config();
|
|
35
|
+
const { API_URL } = process.env;
|
|
36
|
+
if (!API_URL) {
|
|
37
|
+
throw new Error("Missing API_URL in environment.");
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
API_URL,
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
exports.parseEnvironment = parseEnvironment;
|
|
44
|
+
const DEFAULT_COOKIE_NAME = "oauth_nonce";
|
|
45
|
+
const parseOAuthOptionFromEnvironment = () => {
|
|
46
|
+
if (process.env.NODE_ENV === "development")
|
|
47
|
+
dotenv.config();
|
|
48
|
+
const { APP_ID, APP_SECRET, APP_REDIRECT_URL, API_URL, APP_AUTHORIZE_URL, APP_ACCESSTOKEN_URL, NONCE_COOKIE_NAME, } = process.env;
|
|
49
|
+
if (!APP_ID) {
|
|
50
|
+
throw new Error("Missing APP_ID in environment.");
|
|
51
|
+
}
|
|
52
|
+
if (!APP_SECRET) {
|
|
53
|
+
throw new Error("Missing APP_SECRET in environment.");
|
|
54
|
+
}
|
|
55
|
+
if (!APP_REDIRECT_URL) {
|
|
56
|
+
throw new Error("Missing APP_REDIRECT_URL in environment.");
|
|
57
|
+
}
|
|
58
|
+
if (!API_URL) {
|
|
59
|
+
throw new Error("Missing API_URL in environment.");
|
|
60
|
+
}
|
|
61
|
+
if (!APP_AUTHORIZE_URL) {
|
|
62
|
+
throw new Error("Missing APP_AUTHORIZE_URL in environment.");
|
|
63
|
+
}
|
|
64
|
+
if (!APP_ACCESSTOKEN_URL) {
|
|
65
|
+
throw new Error("Missing APP_ACCESSTOKEN_URL in environment.");
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
APP_ID,
|
|
69
|
+
APP_SECRET,
|
|
70
|
+
APP_REDIRECT_URL,
|
|
71
|
+
API_URL,
|
|
72
|
+
APP_AUTHORIZE_URL,
|
|
73
|
+
APP_ACCESSTOKEN_URL,
|
|
74
|
+
NONCE_COOKIE_NAME: NONCE_COOKIE_NAME
|
|
75
|
+
? NONCE_COOKIE_NAME
|
|
76
|
+
: DEFAULT_COOKIE_NAME,
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
exports.parseOAuthOptionFromEnvironment = parseOAuthOptionFromEnvironment;
|
|
8
80
|
//# sourceMappingURL=env.js.map
|
package/dist/util/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC,SAAgB,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAC/C,CAAC;AAFD,oCAEC;AAMM,MAAM,gBAAgB,GAAG,GAAc,EAAE;IAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;QAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAE5D,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhC,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACpD;IAED,OAAO;QACL,OAAO;KACR,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,gBAAgB,oBAY3B;AAYF,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAEnC,MAAM,+BAA+B,GAAG,GAAkB,EAAE;IACjE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;QAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAE5D,MAAM,EACJ,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhB,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACnD;IACD,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;KACvD;IACD,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;KAC7D;IACD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACpD;IACD,IAAI,CAAC,iBAAiB,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IACD,IAAI,CAAC,mBAAmB,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;KAChE;IACD,OAAO;QACL,MAAM;QACN,UAAU;QACV,gBAAgB;QAChB,OAAO;QACP,iBAAiB;QACjB,mBAAmB;QACnB,iBAAiB,EAAE,iBAAiB;YAClC,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,mBAAmB;KACxB,CAAC;AACJ,CAAC,CAAC;AA1CW,QAAA,+BAA+B,mCA0C1C"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { CustomRouter } from "../../models/custom-router.model";
|
|
3
|
+
export declare function slackNotificationRoute(slackWebhookUrl: string, path: string): Router;
|
|
4
|
+
export declare function getGDPRSlackNotificationRouter(slackWebhookUrl: string): CustomRouter[];
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.getGDPRSlackNotificationRouter = exports.slackNotificationRoute = void 0;
|
|
36
|
+
const express_1 = require("express");
|
|
37
|
+
const util = __importStar(require("util"));
|
|
38
|
+
const webhook_1 = require("@slack/webhook");
|
|
39
|
+
const models_1 = require("../../models");
|
|
40
|
+
function slackNotificationRoute(slackWebhookUrl, path) {
|
|
41
|
+
const route = (0, express_1.Router)();
|
|
42
|
+
route.post(path, (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
try {
|
|
44
|
+
const payloadStringified = JSON.stringify(req.body, null, 4);
|
|
45
|
+
const host = req.headers.host;
|
|
46
|
+
const message = `GDPR request: host ${host}, path ${path}\nRequest Payload:\n ${payloadStringified}`;
|
|
47
|
+
console.log(message);
|
|
48
|
+
const webhook = new webhook_1.IncomingWebhook(slackWebhookUrl);
|
|
49
|
+
yield webhook.send({ text: message });
|
|
50
|
+
res.send();
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const errorMessage = `Error in ${path}: ${util.inspect(error)}`;
|
|
54
|
+
console.error(errorMessage);
|
|
55
|
+
throw new models_1.ServerError(500, errorMessage);
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
return route;
|
|
59
|
+
}
|
|
60
|
+
exports.slackNotificationRoute = slackNotificationRoute;
|
|
61
|
+
function getGDPRSlackNotificationRouter(slackWebhookUrl) {
|
|
62
|
+
const gdprRouter = [
|
|
63
|
+
{
|
|
64
|
+
path: "/gdpr/",
|
|
65
|
+
router: slackNotificationRoute(slackWebhookUrl, "/customers/data_request/"),
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
path: "/gdpr/",
|
|
69
|
+
router: slackNotificationRoute(slackWebhookUrl, "/customers/redact/"),
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
path: "/gdpr/",
|
|
73
|
+
router: slackNotificationRoute(slackWebhookUrl, "/shop/redact/"),
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
return gdprRouter;
|
|
77
|
+
}
|
|
78
|
+
exports.getGDPRSlackNotificationRouter = getGDPRSlackNotificationRouter;
|
|
79
|
+
//# sourceMappingURL=gdprSlackNotification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gdprSlackNotification.js","sourceRoot":"","sources":["../../../src/util/gdpr/gdprSlackNotification.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAiC;AAEjC,2CAA6B;AAC7B,4CAAiD;AACjD,yCAA2C;AAG3C,SAAgB,sBAAsB,CACpC,eAAuB,EACvB,IAAY;IAEZ,MAAM,KAAK,GAAG,IAAA,gBAAM,GAAE,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAO,GAAY,EAAE,GAAa,EAAE,EAAE;QACrD,IAAI;YACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YAC9B,MAAM,OAAO,GAAG,sBAAsB,IAAI,UAAU,IAAI,wBAAwB,kBAAkB,EAAE,CAAC;YACrG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,IAAI,yBAAe,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACtC,GAAG,CAAC,IAAI,EAAE,CAAC;SACZ;QAAC,OAAO,KAAU,EAAE;YACnB,MAAM,YAAY,GAAG,YAAY,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5B,MAAM,IAAI,oBAAW,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;SAC1C;IACH,CAAC,CAAA,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AArBD,wDAqBC;AAED,SAAgB,8BAA8B,CAC5C,eAAuB;IAEvB,MAAM,UAAU,GAAmB;QACjC;YACE,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,sBAAsB,CAC5B,eAAe,EACf,0BAA0B,CAC3B;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,sBAAsB,CAAC,eAAe,EAAE,oBAAoB,CAAC;SACtE;QACD;YACE,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,sBAAsB,CAAC,eAAe,EAAE,eAAe,CAAC;SACjE;KACF,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AArBD,wEAqBC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
26
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.GDPRSlackNotification = void 0;
|
|
30
|
+
const GDPRSlackNotification = __importStar(require("./gdprSlackNotification"));
|
|
31
|
+
exports.GDPRSlackNotification = GDPRSlackNotification;
|
|
32
|
+
__exportStar(require("./gdprSlackNotification"), exports);
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/gdpr/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+EAAiE;AAExD,sDAAqB;AAE9B,0DAAwC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Pagination from "./pagination";
|
|
2
|
+
import { RateLimitedAxios } from "./rate-limited-axios";
|
|
3
|
+
import { getSubdomain } from "./url";
|
|
4
|
+
export { Pagination, RateLimitedAxios, getSubdomain };
|
|
5
|
+
export * from "./pagination";
|
|
6
|
+
export * from "./rate-limited-axios";
|
|
7
|
+
export * from "./url";
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
26
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.getSubdomain = exports.RateLimitedAxios = exports.Pagination = void 0;
|
|
30
|
+
const Pagination = __importStar(require("./pagination"));
|
|
31
|
+
exports.Pagination = Pagination;
|
|
32
|
+
const rate_limited_axios_1 = require("./rate-limited-axios");
|
|
33
|
+
Object.defineProperty(exports, "RateLimitedAxios", { enumerable: true, get: function () { return rate_limited_axios_1.RateLimitedAxios; } });
|
|
34
|
+
const url_1 = require("./url");
|
|
35
|
+
Object.defineProperty(exports, "getSubdomain", { enumerable: true, get: function () { return url_1.getSubdomain; } });
|
|
36
|
+
__exportStar(require("./pagination"), exports);
|
|
37
|
+
__exportStar(require("./rate-limited-axios"), exports);
|
|
38
|
+
__exportStar(require("./url"), exports);
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/http/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;AAIlC,gCAAU;AAHnB,6DAAwD;AAGnC,iGAHZ,qCAAgB,OAGY;AAFrC,+BAAqC;AAEE,6FAF9B,kBAAY,OAE8B;AAEnD,+CAA6B;AAC7B,uDAAqC;AACrC,wCAAsB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AxiosResponse } from "axios";
|
|
2
|
+
export type MergeDataFn<T> = (data: T, newData: T) => T;
|
|
3
|
+
export type ExtractDataFromResponseFn<T> = (response: AxiosResponse) => T;
|
|
4
|
+
export type IsEofFn<T> = (response: AxiosResponse, data: T) => boolean;
|
|
5
|
+
export type RetryOnError = (exception: any) => Promise<boolean>;
|
|
6
|
+
export type InvokeNextRequestFn<T> = (previousResponse: AxiosResponse | undefined, data: T) => Promise<AxiosResponse>;
|
|
7
|
+
export declare function paginate<T>(mergeData: MergeDataFn<T>, extractDataFromResponse: ExtractDataFromResponseFn<T>, isEof: IsEofFn<T>, invokeNextRequest: InvokeNextRequestFn<T>, delayMs: number, initialData: T, retryOnError?: RetryOnError): Promise<T>;
|
|
@@ -0,0 +1,56 @@
|
|
|
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.paginate = void 0;
|
|
13
|
+
function sleep(ms) {
|
|
14
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
return new Promise((resolve, reject) => setTimeout(() => resolve(undefined), ms || 0));
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function paginate(mergeData, extractDataFromResponse, isEof, invokeNextRequest, delayMs, initialData, retryOnError) {
|
|
19
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
const paginateId = Math.floor(Math.random() * 100000);
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const fetchNextPage = (data, previousResponse) => __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
try {
|
|
24
|
+
if (previousResponse) {
|
|
25
|
+
yield sleep(delayMs);
|
|
26
|
+
}
|
|
27
|
+
const response = yield invokeNextRequest(previousResponse, data);
|
|
28
|
+
const responseData = extractDataFromResponse(response);
|
|
29
|
+
const allData = mergeData(data, responseData);
|
|
30
|
+
if (!isEof(response, allData)) {
|
|
31
|
+
setImmediate(() => fetchNextPage(allData, response));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
resolve(allData);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
if (retryOnError && (yield retryOnError(e))) {
|
|
39
|
+
setImmediate(() => fetchNextPage(data, previousResponse));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.error("[paginate] Error during pagination", `${e}`);
|
|
43
|
+
reject(e);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
console.log(`[paginate] ${paginateId} start`);
|
|
48
|
+
return fetchNextPage(initialData);
|
|
49
|
+
}).then((resultData) => {
|
|
50
|
+
console.log(`[paginate] ${paginateId} end`);
|
|
51
|
+
return resultData;
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
exports.paginate = paginate;
|
|
56
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/util/http/pagination.ts"],"names":[],"mappings":";;;;;;;;;;;;AAWA,SAAe,KAAK,CAAC,EAAU;;QAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACrC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAC9C,CAAC;IACJ,CAAC;CAAA;AAED,SAAsB,QAAQ,CAC5B,SAAyB,EACzB,uBAAqD,EACrD,KAAiB,EACjB,iBAAyC,EACzC,OAAe,EACf,WAAc,EACd,YAA2B;;QAE3B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;QAEtD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,aAAa,GAAG,CAAO,IAAO,EAAE,gBAAgC,EAAE,EAAE;gBACxE,IAAI;oBACF,IAAI,gBAAgB,EAAE;wBACpB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;qBACtB;oBAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;oBACjE,MAAM,YAAY,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;oBACvD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAE9C,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;wBAC7B,YAAY,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;qBACtD;yBAAM;wBACL,OAAO,CAAC,OAAO,CAAC,CAAC;qBAClB;iBACF;gBAAC,OAAO,CAAM,EAAE;oBACf,IAAI,YAAY,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;wBAC3C,YAAY,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;qBAC3D;yBAAM;wBACL,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC5D,MAAM,CAAC,CAAC,CAAC,CAAC;qBACX;iBACF;YACH,CAAC,CAAA,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,QAAQ,CAAC,CAAC;YAC9C,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAa,EAAK,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,MAAM,CAAC,CAAC;YAE5C,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;CAAA;AA5CD,4BA4CC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AxiosRequestConfig, AxiosResponse } from "axios";
|
|
2
|
+
import { RateLimiterMemory } from "rate-limiter-flexible";
|
|
3
|
+
export declare class RateLimitedAxios {
|
|
4
|
+
rateLimiter: RateLimiterMemory;
|
|
5
|
+
enableLogging: boolean;
|
|
6
|
+
constructor(allowedCalls: number, intervall: number, enableLogging?: boolean);
|
|
7
|
+
checkRateLimitAndWait(key?: string): Promise<void>;
|
|
8
|
+
get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>, key?: string): Promise<R>;
|
|
9
|
+
delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>, key?: string): Promise<R>;
|
|
10
|
+
post<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>, key?: string): Promise<R>;
|
|
11
|
+
put<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>, key?: string): Promise<R>;
|
|
12
|
+
patch<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>, key?: string): Promise<R>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
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.RateLimitedAxios = void 0;
|
|
16
|
+
const axios_1 = __importDefault(require("axios"));
|
|
17
|
+
const rate_limiter_flexible_1 = require("rate-limiter-flexible");
|
|
18
|
+
const logger_util_1 = require("../logger.util");
|
|
19
|
+
const DEFAULT_KEY = "DEFAULT_KEY";
|
|
20
|
+
class RateLimitedAxios {
|
|
21
|
+
constructor(allowedCalls, intervall, enableLogging = false) {
|
|
22
|
+
this.rateLimiter = new rate_limiter_flexible_1.RateLimiterMemory({
|
|
23
|
+
points: allowedCalls,
|
|
24
|
+
duration: intervall,
|
|
25
|
+
});
|
|
26
|
+
this.enableLogging = enableLogging;
|
|
27
|
+
}
|
|
28
|
+
checkRateLimitAndWait(key) {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
try {
|
|
31
|
+
if (key)
|
|
32
|
+
yield this.rateLimiter.consume(key, 1);
|
|
33
|
+
else
|
|
34
|
+
yield this.rateLimiter.consume(DEFAULT_KEY, 1);
|
|
35
|
+
}
|
|
36
|
+
catch (rateLimiterRes) {
|
|
37
|
+
if (this.enableLogging) {
|
|
38
|
+
(0, logger_util_1.infoLogger)("checkRateLimitAndWait", `Waiting ${rateLimiterRes.msBeforeNext} to respect rate limit`, key ? key : "");
|
|
39
|
+
}
|
|
40
|
+
yield new Promise((resolve) => {
|
|
41
|
+
setTimeout(resolve, rateLimiterRes.msBeforeNext);
|
|
42
|
+
});
|
|
43
|
+
yield this.checkRateLimitAndWait(key);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
get(url, config, key) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
yield this.checkRateLimitAndWait(key);
|
|
50
|
+
return axios_1.default.get(url, config);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
delete(url, config, key) {
|
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
yield this.checkRateLimitAndWait(key);
|
|
56
|
+
return axios_1.default.delete(url, config);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
post(url, data, config, key) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
yield this.checkRateLimitAndWait(key);
|
|
62
|
+
return axios_1.default.post(url, data, config);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
put(url, data, config, key) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
yield this.checkRateLimitAndWait(key);
|
|
68
|
+
return axios_1.default.put(url, data, config);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
patch(url, data, config, key) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
yield this.checkRateLimitAndWait(key);
|
|
74
|
+
return axios_1.default.patch(url, data, config);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.RateLimitedAxios = RateLimitedAxios;
|
|
79
|
+
//# sourceMappingURL=rate-limited-axios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limited-axios.js","sourceRoot":"","sources":["../../../src/util/http/rate-limited-axios.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAAiE;AACjE,iEAA0D;AAC1D,gDAA4C;AAE5C,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC,MAAa,gBAAgB;IAG3B,YACE,YAAoB,EACpB,SAAiB,EACjB,gBAAyB,KAAK;QAE9B,IAAI,CAAC,WAAW,GAAG,IAAI,yCAAiB,CAAC;YACvC,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAEK,qBAAqB,CAAC,GAAY;;YACtC,IAAI;gBACF,IAAI,GAAG;oBAAE,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;oBAC3C,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;aACrD;YAAC,OAAO,cAAmB,EAAE;gBAC5B,IAAI,IAAI,CAAC,aAAa,EAAE;oBACtB,IAAA,wBAAU,EACR,uBAAuB,EACvB,WAAW,cAAc,CAAC,YAAY,wBAAwB,EAC9D,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACf,CAAC;iBACH;gBACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC5B,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;aACvC;QACH,CAAC;KAAA;IAEK,GAAG,CACP,GAAW,EACX,MAA8B,EAC9B,GAAY;;YAEZ,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC;KAAA;IAEK,MAAM,CACV,GAAW,EACX,MAA8B,EAC9B,GAAY;;YAEZ,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,eAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;KAAA;IAEK,IAAI,CACR,GAAW,EACX,IAAQ,EACR,MAA8B,EAC9B,GAAY;;YAEZ,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;KAAA;IAEK,GAAG,CACP,GAAW,EACX,IAAQ,EACR,MAA8B,EAC9B,GAAY;;YAEZ,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;KAAA;IAEK,KAAK,CACT,GAAW,EACX,IAAQ,EACR,MAA8B,EAC9B,GAAY;;YAEZ,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,eAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;KAAA;CACF;AAjFD,4CAiFC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getSubdomain(url: string): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSubdomain = void 0;
|
|
4
|
+
function getSubdomain(url) {
|
|
5
|
+
// remove https protocol from url if exists
|
|
6
|
+
url = url.replace(/^(https?:\/\/)/, "");
|
|
7
|
+
const subdomain = url.split(".")[0];
|
|
8
|
+
if (subdomain)
|
|
9
|
+
return subdomain;
|
|
10
|
+
else
|
|
11
|
+
return url;
|
|
12
|
+
}
|
|
13
|
+
exports.getSubdomain = getSubdomain;
|
|
14
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/util/http/url.ts"],"names":[],"mappings":";;;AAAA,SAAgB,YAAY,CAAC,GAAW;IACtC,2CAA2C;IAC3C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;;QAC3B,OAAO,GAAG,CAAC;AAClB,CAAC;AAND,oCAMC"}
|
package/dist/util/index.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import * as Http from "./http";
|
|
2
|
+
import * as CallEventHelper from "./callEventHelper";
|
|
3
|
+
import * as Security from "./security";
|
|
4
|
+
import * as Lang from "./lang";
|
|
5
|
+
import * as GDPR from "./gdpr";
|
|
6
|
+
import * as OAuth from "./oauth";
|
|
1
7
|
export * from "./anonymize-key";
|
|
2
8
|
export * from "./call-comment";
|
|
3
9
|
export * from "./env";
|
|
@@ -5,3 +11,10 @@ export * from "./error";
|
|
|
5
11
|
export * from "./integration-entity";
|
|
6
12
|
export * from "./logger.util";
|
|
7
13
|
export * from "./phone-number-utils";
|
|
14
|
+
export * from "./http";
|
|
15
|
+
export * from "./callEventHelper";
|
|
16
|
+
export * from "./security";
|
|
17
|
+
export * from "./gdpr";
|
|
18
|
+
export * from "./oauth";
|
|
19
|
+
export * from "./env";
|
|
20
|
+
export { Http, CallEventHelper, Security, Lang, GDPR, OAuth };
|
package/dist/util/index.js
CHANGED
|
@@ -10,10 +10,35 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
12
|
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
13
25
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
26
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
27
|
};
|
|
16
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.OAuth = exports.GDPR = exports.Lang = exports.Security = exports.CallEventHelper = exports.Http = void 0;
|
|
30
|
+
const Http = __importStar(require("./http"));
|
|
31
|
+
exports.Http = Http;
|
|
32
|
+
const CallEventHelper = __importStar(require("./callEventHelper"));
|
|
33
|
+
exports.CallEventHelper = CallEventHelper;
|
|
34
|
+
const Security = __importStar(require("./security"));
|
|
35
|
+
exports.Security = Security;
|
|
36
|
+
const Lang = __importStar(require("./lang"));
|
|
37
|
+
exports.Lang = Lang;
|
|
38
|
+
const GDPR = __importStar(require("./gdpr"));
|
|
39
|
+
exports.GDPR = GDPR;
|
|
40
|
+
const OAuth = __importStar(require("./oauth"));
|
|
41
|
+
exports.OAuth = OAuth;
|
|
17
42
|
__exportStar(require("./anonymize-key"), exports);
|
|
18
43
|
__exportStar(require("./call-comment"), exports);
|
|
19
44
|
__exportStar(require("./env"), exports);
|
|
@@ -21,4 +46,10 @@ __exportStar(require("./error"), exports);
|
|
|
21
46
|
__exportStar(require("./integration-entity"), exports);
|
|
22
47
|
__exportStar(require("./logger.util"), exports);
|
|
23
48
|
__exportStar(require("./phone-number-utils"), exports);
|
|
49
|
+
__exportStar(require("./http"), exports);
|
|
50
|
+
__exportStar(require("./callEventHelper"), exports);
|
|
51
|
+
__exportStar(require("./security"), exports);
|
|
52
|
+
__exportStar(require("./gdpr"), exports);
|
|
53
|
+
__exportStar(require("./oauth"), exports);
|
|
54
|
+
__exportStar(require("./env"), exports);
|
|
24
55
|
//# sourceMappingURL=index.js.map
|
package/dist/util/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAqBtB,oBAAI;AApBb,mEAAqD;AAoBtC,0CAAe;AAnB9B,qDAAuC;AAmBP,4BAAQ;AAlBxC,6CAA+B;AAkBW,oBAAI;AAjB9C,6CAA+B;AAiBiB,oBAAI;AAhBpD,+CAAiC;AAgBqB,sBAAK;AAd3D,kDAAgC;AAChC,iDAA+B;AAC/B,wCAAsB;AACtB,0CAAwB;AACxB,uDAAqC;AACrC,gDAA8B;AAC9B,uDAAqC;AACrC,yCAAuB;AACvB,oDAAkC;AAClC,6CAA2B;AAC3B,yCAAuB;AACvB,0CAAwB;AACxB,wCAAsB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.diffArrays = void 0;
|
|
27
|
+
const fp = __importStar(require("lodash/fp"));
|
|
28
|
+
function byId(idOf, xs) {
|
|
29
|
+
return fp.reduce((byIds, x) => (Object.assign(Object.assign({}, byIds), { [idOf(x)]: x })), {}, xs);
|
|
30
|
+
}
|
|
31
|
+
function diffArrays(idOfX, idOfY, xs, ys) {
|
|
32
|
+
const xsByIds = byId(idOfX, xs);
|
|
33
|
+
const ysByIds = byId(idOfY, ys);
|
|
34
|
+
const xsIds = new Set(Object.keys(xsByIds));
|
|
35
|
+
const ysIds = new Set(Object.keys(ysByIds));
|
|
36
|
+
const allIds = new Set([...xsIds.keys(), ...ysIds.keys()]);
|
|
37
|
+
return fp.reduce(({ distinctXs, distinctYs, commonXs, commonYs }, id) => {
|
|
38
|
+
const inX = xsIds.has(id);
|
|
39
|
+
const inY = ysIds.has(id);
|
|
40
|
+
if (inX && inY) {
|
|
41
|
+
return {
|
|
42
|
+
distinctXs,
|
|
43
|
+
distinctYs,
|
|
44
|
+
commonXs: [...commonXs, xsByIds[id]],
|
|
45
|
+
commonYs: [...commonYs, ysByIds[id]],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
else if (inX && !inY) {
|
|
49
|
+
return {
|
|
50
|
+
distinctXs: [...distinctXs, xsByIds[id]],
|
|
51
|
+
distinctYs,
|
|
52
|
+
commonXs,
|
|
53
|
+
commonYs,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
else if (!inX && inY) {
|
|
57
|
+
return {
|
|
58
|
+
distinctXs,
|
|
59
|
+
distinctYs: [...distinctYs, ysByIds[id]],
|
|
60
|
+
commonXs,
|
|
61
|
+
commonYs,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return {
|
|
66
|
+
distinctXs,
|
|
67
|
+
distinctYs,
|
|
68
|
+
commonXs,
|
|
69
|
+
commonYs,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}, {
|
|
73
|
+
distinctXs: [],
|
|
74
|
+
distinctYs: [],
|
|
75
|
+
commonXs: [],
|
|
76
|
+
commonYs: [],
|
|
77
|
+
}, Array.from(allIds));
|
|
78
|
+
}
|
|
79
|
+
exports.diffArrays = diffArrays;
|
|
80
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/util/lang/diff.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAgC;AAUhC,SAAS,IAAI,CAAI,IAAa,EAAE,EAAO;IACrC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,iCAAM,KAAK,KAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAgB,UAAU,CACxB,KAAc,EACd,KAAc,EACd,EAAO,EACP,EAAO;IAEP,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE3D,OAAO,EAAE,CAAC,MAAM,CACd,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAc,EAAE,EAAE,EAAE,EAAE;QACjE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1B,IAAI,GAAG,IAAI,GAAG,EAAE;YACd,OAAO;gBACL,UAAU;gBACV,UAAU;gBACV,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBACpC,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;aACrC,CAAC;SACH;aAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;YACtB,OAAO;gBACL,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBACxC,UAAU;gBACV,QAAQ;gBACR,QAAQ;aACT,CAAC;SACH;aAAM,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;YACtB,OAAO;gBACL,UAAU;gBACV,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBACxC,QAAQ;gBACR,QAAQ;aACT,CAAC;SACH;aAAM;YACL,OAAO;gBACL,UAAU;gBACV,UAAU;gBACV,QAAQ;gBACR,QAAQ;aACT,CAAC;SACH;IACH,CAAC,EACD;QACE,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;KACb,EACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CACnB,CAAC;AACJ,CAAC;AAxDD,gCAwDC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.diffArrays = void 0;
|
|
4
|
+
const diff_1 = require("./diff");
|
|
5
|
+
Object.defineProperty(exports, "diffArrays", { enumerable: true, get: function () { return diff_1.diffArrays; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/lang/index.ts"],"names":[],"mappings":";;;AAAA,iCAAoC;AAE3B,2FAFA,iBAAU,OAEA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Request, Response } from "express";
|
|
2
|
+
import { AxiosResponse } from "axios";
|
|
3
|
+
export type ExtractTokenFromResponseFn<T> = (response: AxiosResponse) => T;
|
|
4
|
+
export interface OAuthParams {
|
|
5
|
+
accesTokenUrl: string;
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
redirect_uri: string;
|
|
8
|
+
cookieName: string;
|
|
9
|
+
client_id: string;
|
|
10
|
+
client_secret: string;
|
|
11
|
+
authorizeUrl: string;
|
|
12
|
+
}
|
|
13
|
+
export interface OAuthCallbackParams {
|
|
14
|
+
cookieName: string;
|
|
15
|
+
client_id: string;
|
|
16
|
+
client_secret: string;
|
|
17
|
+
redirect_uri: string;
|
|
18
|
+
extractToken: ExtractTokenFromResponseFn<any>;
|
|
19
|
+
}
|
|
20
|
+
export declare function getOAuth2RedirectUrl(config: OAuthParams, req: Request, res: Response): Promise<string>;
|
|
21
|
+
export declare function handleOAuth2Callback(config: OAuthCallbackParams, req: Request, res: Response, checkNonceCookie?: boolean, paramCommunication?: GetAccessTokenParamCommunication): Promise<{
|
|
22
|
+
apiKey: string;
|
|
23
|
+
apiUrl: string;
|
|
24
|
+
query_params: any;
|
|
25
|
+
}>;
|
|
26
|
+
export declare enum GetAccessTokenParamCommunication {
|
|
27
|
+
QUERY_PARAM = 0,
|
|
28
|
+
X_WWW_FORM_URL_ENCODED = 1,
|
|
29
|
+
BODY = 2
|
|
30
|
+
}
|
|
31
|
+
export declare function getAccessToken(accessTokenURL: string, authorizationCode: string, clientId: string, clientSecret: string, redirect_uri: string, paramCommunication?: GetAccessTokenParamCommunication): Promise<AxiosResponse<any, any>>;
|
|
32
|
+
export declare function refreshToken(accessTokenURL: string, refresh_token: string, clientId: string, clientSecret: string, paramCommunication?: GetAccessTokenParamCommunication): Promise<AxiosResponse<any, any>>;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.refreshToken = exports.getAccessToken = exports.GetAccessTokenParamCommunication = exports.handleOAuth2Callback = exports.getOAuth2RedirectUrl = void 0;
|
|
39
|
+
const _1 = require(".");
|
|
40
|
+
const util = __importStar(require("util"));
|
|
41
|
+
const axios_1 = __importDefault(require("axios"));
|
|
42
|
+
const models_1 = require("../models");
|
|
43
|
+
function getOAuth2RedirectUrl(config, req, res) {
|
|
44
|
+
var _a;
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
try {
|
|
47
|
+
const nonce_string = _1.Security.Nonce.nonce();
|
|
48
|
+
const state = JSON.stringify({
|
|
49
|
+
nonce: nonce_string,
|
|
50
|
+
accessTokenUrl: config.accesTokenUrl,
|
|
51
|
+
apiUrl: config.apiUrl,
|
|
52
|
+
});
|
|
53
|
+
const searchParamsAuth = new URLSearchParams({
|
|
54
|
+
response_type: "code",
|
|
55
|
+
redirect_uri: config.redirect_uri,
|
|
56
|
+
client_id: config.client_id,
|
|
57
|
+
state,
|
|
58
|
+
});
|
|
59
|
+
_1.Security.Nonce.setNonceCookie(req, res, config.cookieName, config.client_secret, nonce_string);
|
|
60
|
+
const url = new URL(config.authorizeUrl);
|
|
61
|
+
url.search = searchParamsAuth.toString();
|
|
62
|
+
return url.toString();
|
|
63
|
+
}
|
|
64
|
+
catch (exception) {
|
|
65
|
+
const errorMessage = `Error in getOAuth2RedirectUrl: ${JSON.stringify(exception, Object.getOwnPropertyNames(exception))} ${util.inspect((_a = exception === null || exception === void 0 ? void 0 : exception.response) === null || _a === void 0 ? void 0 : _a.data, { depth: 3 })}`;
|
|
66
|
+
console.error(errorMessage);
|
|
67
|
+
throw new models_1.ServerError(500, errorMessage);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
exports.getOAuth2RedirectUrl = getOAuth2RedirectUrl;
|
|
72
|
+
function handleOAuth2Callback(config, req, res, checkNonceCookie = false, paramCommunication = GetAccessTokenParamCommunication.BODY) {
|
|
73
|
+
var _a, _b, _c, _d;
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
try {
|
|
76
|
+
if (req.query.error)
|
|
77
|
+
throw `Error in handleOAuth2Callback flow: ${req.query.error} ${(_a = req === null || req === void 0 ? void 0 : req.query) === null || _a === void 0 ? void 0 : _a.error_description}`;
|
|
78
|
+
if (!((_b = req === null || req === void 0 ? void 0 : req.query) === null || _b === void 0 ? void 0 : _b.state))
|
|
79
|
+
throw 'Unexpected: request has not query param "state"';
|
|
80
|
+
if (!((_c = req === null || req === void 0 ? void 0 : req.query) === null || _c === void 0 ? void 0 : _c.code))
|
|
81
|
+
throw 'Unexpected: request has not query param "code"';
|
|
82
|
+
const nonce_cookie = _1.Security.Nonce.getNonceFromCookie(req, res, config.cookieName, config.client_secret);
|
|
83
|
+
const state = JSON.parse(req.query.state.toString());
|
|
84
|
+
if (checkNonceCookie) {
|
|
85
|
+
if (!nonce_cookie)
|
|
86
|
+
throw `Unexpected: cookie ${config.cookieName} not found`;
|
|
87
|
+
const nonce_request = state.nonce;
|
|
88
|
+
if (nonce_request !== nonce_cookie)
|
|
89
|
+
if (nonce_request !== nonce_cookie)
|
|
90
|
+
throw `Unexpected: nonce parameter from request and from cookie are different. Possible CSFR attack!`;
|
|
91
|
+
_1.Security.Nonce.deleteNonceCookie(req, res, config.cookieName, config.client_secret);
|
|
92
|
+
}
|
|
93
|
+
const response = yield getAccessToken(state.accessTokenUrl, req.query.code.toString(), config.client_id, config.client_secret, config.redirect_uri, paramCommunication);
|
|
94
|
+
return {
|
|
95
|
+
apiKey: config.extractToken(response),
|
|
96
|
+
apiUrl: state.apiUrl,
|
|
97
|
+
query_params: req.query,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (exception) {
|
|
101
|
+
const errorMessage = `Error in handleOAuth2Callback: ${JSON.stringify(exception, Object.getOwnPropertyNames(exception))} ${util.inspect((_d = exception === null || exception === void 0 ? void 0 : exception.response) === null || _d === void 0 ? void 0 : _d.data, { depth: 3 })}`;
|
|
102
|
+
console.error(errorMessage);
|
|
103
|
+
throw new models_1.ServerError(500, errorMessage);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
exports.handleOAuth2Callback = handleOAuth2Callback;
|
|
108
|
+
var GetAccessTokenParamCommunication;
|
|
109
|
+
(function (GetAccessTokenParamCommunication) {
|
|
110
|
+
GetAccessTokenParamCommunication[GetAccessTokenParamCommunication["QUERY_PARAM"] = 0] = "QUERY_PARAM";
|
|
111
|
+
GetAccessTokenParamCommunication[GetAccessTokenParamCommunication["X_WWW_FORM_URL_ENCODED"] = 1] = "X_WWW_FORM_URL_ENCODED";
|
|
112
|
+
GetAccessTokenParamCommunication[GetAccessTokenParamCommunication["BODY"] = 2] = "BODY";
|
|
113
|
+
})(GetAccessTokenParamCommunication = exports.GetAccessTokenParamCommunication || (exports.GetAccessTokenParamCommunication = {}));
|
|
114
|
+
function getAccessToken(accessTokenURL, authorizationCode, clientId, clientSecret, redirect_uri, paramCommunication = GetAccessTokenParamCommunication.BODY) {
|
|
115
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
116
|
+
console.log(`Start: fetching access tokens`);
|
|
117
|
+
const params = {
|
|
118
|
+
grant_type: "authorization_code",
|
|
119
|
+
code: authorizationCode,
|
|
120
|
+
client_id: clientId,
|
|
121
|
+
client_secret: clientSecret,
|
|
122
|
+
redirect_uri: redirect_uri,
|
|
123
|
+
};
|
|
124
|
+
switch (paramCommunication) {
|
|
125
|
+
case GetAccessTokenParamCommunication.QUERY_PARAM:
|
|
126
|
+
return yield axios_1.default.post(accessTokenURL, {}, { params: params });
|
|
127
|
+
case GetAccessTokenParamCommunication.X_WWW_FORM_URL_ENCODED:
|
|
128
|
+
return yield axios_1.default.post(accessTokenURL, new URLSearchParams(params), {
|
|
129
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
130
|
+
});
|
|
131
|
+
case GetAccessTokenParamCommunication.BODY:
|
|
132
|
+
return yield axios_1.default.post(accessTokenURL, params);
|
|
133
|
+
default:
|
|
134
|
+
throw Error("Unexpected parameter communication type");
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
console.log(`End: fetching access tokens`);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
exports.getAccessToken = getAccessToken;
|
|
141
|
+
function refreshToken(accessTokenURL, refresh_token, clientId, clientSecret, paramCommunication = GetAccessTokenParamCommunication.BODY) {
|
|
142
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
143
|
+
console.log(`Start: refreshing access tokens`);
|
|
144
|
+
const params = {
|
|
145
|
+
grant_type: "refresh_token",
|
|
146
|
+
refresh_token: refresh_token,
|
|
147
|
+
client_id: clientId,
|
|
148
|
+
client_secret: clientSecret,
|
|
149
|
+
};
|
|
150
|
+
switch (paramCommunication) {
|
|
151
|
+
case GetAccessTokenParamCommunication.QUERY_PARAM:
|
|
152
|
+
return yield axios_1.default.post(accessTokenURL, {}, { params: params });
|
|
153
|
+
case GetAccessTokenParamCommunication.X_WWW_FORM_URL_ENCODED:
|
|
154
|
+
return yield axios_1.default.post(accessTokenURL, new URLSearchParams(params), {
|
|
155
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
156
|
+
});
|
|
157
|
+
case GetAccessTokenParamCommunication.BODY:
|
|
158
|
+
return yield axios_1.default.post(accessTokenURL, params);
|
|
159
|
+
default:
|
|
160
|
+
throw Error("Unexpected parameter communication type");
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
console.log(`End: refreshing access tokens`);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
exports.refreshToken = refreshToken;
|
|
167
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/util/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
26
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Nonce = void 0;
|
|
30
|
+
const Nonce = __importStar(require("./nonce"));
|
|
31
|
+
exports.Nonce = Nonce;
|
|
32
|
+
__exportStar(require("./nonce"), exports);
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/security/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAExB,sBAAK;AAEd,0CAAwB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Request, Response } from "express";
|
|
2
|
+
export declare function nonce(): string;
|
|
3
|
+
export declare function getNonceFromCookie(request: Request, response: Response, name: string, secret: string): string | undefined;
|
|
4
|
+
export declare function setNonceCookie(req: Request, res: Response, cookieName: string, secret: string, state: string): void;
|
|
5
|
+
export declare function deleteNonceCookie(req: Request, res: Response, cookieName: string, secret: string): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
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.deleteNonceCookie = exports.setNonceCookie = exports.getNonceFromCookie = exports.nonce = void 0;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const cookies_1 = __importDefault(require("cookies"));
|
|
9
|
+
function nonce() {
|
|
10
|
+
const length = 15;
|
|
11
|
+
const bytes = (0, crypto_1.randomBytes)(length);
|
|
12
|
+
const nonce = bytes
|
|
13
|
+
.map((byte) => {
|
|
14
|
+
return byte % 10;
|
|
15
|
+
})
|
|
16
|
+
.join("");
|
|
17
|
+
return nonce;
|
|
18
|
+
}
|
|
19
|
+
exports.nonce = nonce;
|
|
20
|
+
function getNonceFromCookie(request, response, name, secret) {
|
|
21
|
+
const cookies = new cookies_1.default(request, response, {
|
|
22
|
+
secure: true,
|
|
23
|
+
keys: [secret],
|
|
24
|
+
});
|
|
25
|
+
return cookies.get(name, { signed: true });
|
|
26
|
+
}
|
|
27
|
+
exports.getNonceFromCookie = getNonceFromCookie;
|
|
28
|
+
function setNonceCookie(req, res, cookieName, secret, state) {
|
|
29
|
+
const cookies = new cookies_1.default(req, res, {
|
|
30
|
+
keys: [secret],
|
|
31
|
+
secure: true,
|
|
32
|
+
});
|
|
33
|
+
cookies.set(cookieName, state, {
|
|
34
|
+
signed: true,
|
|
35
|
+
expires: new Date(Date.now() + 60000),
|
|
36
|
+
sameSite: "none",
|
|
37
|
+
secure: true,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
exports.setNonceCookie = setNonceCookie;
|
|
41
|
+
function deleteNonceCookie(req, res, cookieName, secret) {
|
|
42
|
+
const cookies = new cookies_1.default(req, res, {
|
|
43
|
+
keys: [secret],
|
|
44
|
+
secure: true,
|
|
45
|
+
});
|
|
46
|
+
cookies.set(cookieName);
|
|
47
|
+
}
|
|
48
|
+
exports.deleteNonceCookie = deleteNonceCookie;
|
|
49
|
+
//# sourceMappingURL=nonce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nonce.js","sourceRoot":"","sources":["../../../src/util/security/nonce.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAqC;AAErC,sDAA8B;AAE9B,SAAgB,KAAK;IACnB,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,KAAK,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAElC,MAAM,KAAK,GAAG,KAAK;SAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,KAAK,CAAC;AACf,CAAC;AAXD,sBAWC;AAED,SAAgB,kBAAkB,CAChC,OAAgB,EAChB,QAAkB,EAClB,IAAY,EACZ,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,OAAO,EAAE,QAAQ,EAAE;QAC7C,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,CAAC,MAAM,CAAC;KACf,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC;AAXD,gDAWC;AAED,SAAgB,cAAc,CAC5B,GAAY,EACZ,GAAa,EACb,UAAkB,EAClB,MAAc,EACd,KAAa;IAEb,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,GAAG,EAAE,GAAG,EAAE;QACpC,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE;QAC7B,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACrC,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;AACL,CAAC;AAjBD,wCAiBC;AAED,SAAgB,iBAAiB,CAC/B,GAAY,EACZ,GAAa,EACb,UAAkB,EAClB,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,GAAG,EAAE,GAAG,EAAE;QACpC,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC1B,CAAC;AAXD,8CAWC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sipgate/integration-bridge",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.3",
|
|
4
4
|
"description": "sipgate Integration Bridge Framework",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -54,6 +54,8 @@
|
|
|
54
54
|
"@types/lru-cache": "7.10.9",
|
|
55
55
|
"@types/node": "18.16.5",
|
|
56
56
|
"@types/redis": "4.0.10",
|
|
57
|
+
"@types/cookies": "^0.7.7",
|
|
58
|
+
"@types/lodash": "^4.14.191",
|
|
57
59
|
"husky": "8.0.3",
|
|
58
60
|
"jest": "^29.4.0",
|
|
59
61
|
"lint-staged": "13.2.2",
|
|
@@ -74,6 +76,11 @@
|
|
|
74
76
|
"express": "^4.18.1",
|
|
75
77
|
"lru-cache": "^7.13.1",
|
|
76
78
|
"moment": "^2.29.4",
|
|
77
|
-
"redis": "^4.2.0"
|
|
79
|
+
"redis": "^4.2.0",
|
|
80
|
+
"@slack/webhook": "^6.1.0",
|
|
81
|
+
"cookies": "^0.8.0",
|
|
82
|
+
"dotenv": "^16.0.3",
|
|
83
|
+
"lodash": "^4.17.21",
|
|
84
|
+
"rate-limiter-flexible": "^2.3.11"
|
|
78
85
|
}
|
|
79
86
|
}
|