dce-expresskit 4.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/.eslintrc.js +93 -0
  2. package/LICENSE +21 -0
  3. package/README.md +17 -0
  4. package/genEncodedSecret.ts +107 -0
  5. package/genSalt.ts +15 -0
  6. package/lib/constants/LOG_REVIEW_ROUTE_PATH_PREFIX.d.ts +6 -0
  7. package/lib/constants/LOG_REVIEW_ROUTE_PATH_PREFIX.js +13 -0
  8. package/lib/constants/LOG_REVIEW_ROUTE_PATH_PREFIX.js.map +1 -0
  9. package/lib/constants/LOG_REVIEW_STATUS_ROUTE.d.ts +7 -0
  10. package/lib/constants/LOG_REVIEW_STATUS_ROUTE.js +14 -0
  11. package/lib/constants/LOG_REVIEW_STATUS_ROUTE.js.map +1 -0
  12. package/lib/constants/LOG_ROUTE_PATH.d.ts +6 -0
  13. package/lib/constants/LOG_ROUTE_PATH.js +13 -0
  14. package/lib/constants/LOG_ROUTE_PATH.js.map +1 -0
  15. package/lib/constants/ROUTE_PATH_PREFIX.d.ts +6 -0
  16. package/lib/constants/ROUTE_PATH_PREFIX.js +9 -0
  17. package/lib/constants/ROUTE_PATH_PREFIX.js.map +1 -0
  18. package/lib/errors/ErrorWithCode.d.ts +9 -0
  19. package/lib/errors/ErrorWithCode.js +33 -0
  20. package/lib/errors/ErrorWithCode.js.map +1 -0
  21. package/lib/helpers/addDBEditorEndpoints/generateEndpointPath.d.ts +9 -0
  22. package/lib/helpers/addDBEditorEndpoints/generateEndpointPath.js +17 -0
  23. package/lib/helpers/addDBEditorEndpoints/generateEndpointPath.js.map +1 -0
  24. package/lib/helpers/addDBEditorEndpoints/index.d.ts +41 -0
  25. package/lib/helpers/addDBEditorEndpoints/index.js +134 -0
  26. package/lib/helpers/addDBEditorEndpoints/index.js.map +1 -0
  27. package/lib/helpers/dataSigner.d.ts +40 -0
  28. package/lib/helpers/dataSigner.js +236 -0
  29. package/lib/helpers/dataSigner.js.map +1 -0
  30. package/lib/helpers/genRouteHandler.d.ts +75 -0
  31. package/lib/helpers/genRouteHandler.js +661 -0
  32. package/lib/helpers/genRouteHandler.js.map +1 -0
  33. package/lib/helpers/handleError.d.ts +18 -0
  34. package/lib/helpers/handleError.js +51 -0
  35. package/lib/helpers/handleError.js.map +1 -0
  36. package/lib/helpers/handleSuccess.d.ts +8 -0
  37. package/lib/helpers/handleSuccess.js +20 -0
  38. package/lib/helpers/handleSuccess.js.map +1 -0
  39. package/lib/helpers/initCrossServerCredentialCollection.d.ts +11 -0
  40. package/lib/helpers/initCrossServerCredentialCollection.js +15 -0
  41. package/lib/helpers/initCrossServerCredentialCollection.js.map +1 -0
  42. package/lib/helpers/initLogCollection.d.ts +11 -0
  43. package/lib/helpers/initLogCollection.js +26 -0
  44. package/lib/helpers/initLogCollection.js.map +1 -0
  45. package/lib/helpers/initServer.d.ts +45 -0
  46. package/lib/helpers/initServer.js +293 -0
  47. package/lib/helpers/initServer.js.map +1 -0
  48. package/lib/helpers/parseUserAgent.d.ts +17 -0
  49. package/lib/helpers/parseUserAgent.js +108 -0
  50. package/lib/helpers/parseUserAgent.js.map +1 -0
  51. package/lib/helpers/visitEndpointOnAnotherServer/index.d.ts +18 -0
  52. package/lib/helpers/visitEndpointOnAnotherServer/index.js +156 -0
  53. package/lib/helpers/visitEndpointOnAnotherServer/index.js.map +1 -0
  54. package/lib/helpers/visitEndpointOnAnotherServer/sendServerToServerRequest.d.ts +23 -0
  55. package/lib/helpers/visitEndpointOnAnotherServer/sendServerToServerRequest.js +168 -0
  56. package/lib/helpers/visitEndpointOnAnotherServer/sendServerToServerRequest.js.map +1 -0
  57. package/lib/html/genErrorPage.d.ts +19 -0
  58. package/lib/html/genErrorPage.js +27 -0
  59. package/lib/html/genErrorPage.js.map +1 -0
  60. package/lib/html/genInfoPage.d.ts +13 -0
  61. package/lib/html/genInfoPage.js +16 -0
  62. package/lib/html/genInfoPage.js.map +1 -0
  63. package/lib/index.d.ts +11 -0
  64. package/lib/index.js +68 -0
  65. package/lib/index.js.map +1 -0
  66. package/lib/types/CrossServerCredential.d.ts +11 -0
  67. package/lib/types/CrossServerCredential.js +3 -0
  68. package/lib/types/CrossServerCredential.js.map +1 -0
  69. package/lib/types/ExpressKitErrorCode.d.ts +31 -0
  70. package/lib/types/ExpressKitErrorCode.js +38 -0
  71. package/lib/types/ExpressKitErrorCode.js.map +1 -0
  72. package/package.json +53 -0
  73. package/src/constants/LOG_REVIEW_ROUTE_PATH_PREFIX.ts +9 -0
  74. package/src/constants/LOG_REVIEW_STATUS_ROUTE.ts +10 -0
  75. package/src/constants/LOG_ROUTE_PATH.ts +9 -0
  76. package/src/constants/ROUTE_PATH_PREFIX.ts +7 -0
  77. package/src/errors/ErrorWithCode.tsx +15 -0
  78. package/src/helpers/addDBEditorEndpoints/generateEndpointPath.ts +16 -0
  79. package/src/helpers/addDBEditorEndpoints/index.ts +130 -0
  80. package/src/helpers/dataSigner.ts +306 -0
  81. package/src/helpers/genRouteHandler.ts +914 -0
  82. package/src/helpers/handleError.ts +66 -0
  83. package/src/helpers/handleSuccess.ts +18 -0
  84. package/src/helpers/initCrossServerCredentialCollection.ts +19 -0
  85. package/src/helpers/initLogCollection.ts +31 -0
  86. package/src/helpers/initServer.ts +284 -0
  87. package/src/helpers/parseUserAgent.ts +108 -0
  88. package/src/helpers/visitEndpointOnAnotherServer/index.ts +157 -0
  89. package/src/helpers/visitEndpointOnAnotherServer/sendServerToServerRequest.ts +164 -0
  90. package/src/html/genErrorPage.ts +144 -0
  91. package/src/html/genInfoPage.ts +101 -0
  92. package/src/index.ts +125 -0
  93. package/src/types/CrossServerCredential.ts +16 -0
  94. package/src/types/ExpressKitErrorCode.ts +37 -0
  95. package/tsconfig.json +19 -0
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Perform a rudimentary parsing of the user's browser agent string
5
+ * @author Gabe Abrams
6
+ * @param userAgent the user's browser agent
7
+ * @returns user info
8
+ */
9
+ var parseUserAgent = function (userAgent) {
10
+ /* ------------- Browser ------------ */
11
+ var browser = {
12
+ name: 'Unknown',
13
+ version: 'Unknown',
14
+ };
15
+ // Parse user agent
16
+ var verOffset;
17
+ var nameOffset;
18
+ if ((verOffset = userAgent.indexOf('Opera')) !== -1) {
19
+ // In Opera, the true version is after 'Opera' or after 'Version'
20
+ browser = {
21
+ name: 'Opera',
22
+ version: userAgent.substring(verOffset + 6),
23
+ };
24
+ if ((verOffset = userAgent.indexOf('Version')) !== -1) {
25
+ browser.version = userAgent.substring(verOffset + 8);
26
+ }
27
+ }
28
+ else if ((verOffset = userAgent.indexOf('MSIE')) !== -1) {
29
+ // In MSIE, the true version is after 'MSIE' in userAgent
30
+ browser = {
31
+ name: 'Internet Explorer',
32
+ version: userAgent.substring(verOffset + 5),
33
+ };
34
+ }
35
+ else if ((verOffset = userAgent.indexOf('Chrome')) !== -1) {
36
+ // In Chrome, the true version is after 'Chrome'
37
+ browser = {
38
+ name: 'Chrome',
39
+ version: userAgent.substring(verOffset + 7),
40
+ };
41
+ }
42
+ else if ((verOffset = userAgent.indexOf('Safari')) !== -1) {
43
+ // In Safari, the true version is after 'Safari' or after 'Version'
44
+ browser = {
45
+ name: 'Safari',
46
+ version: userAgent.substring(verOffset + 7),
47
+ };
48
+ if ((verOffset = userAgent.indexOf('Version')) !== -1) {
49
+ browser.version = userAgent.substring(verOffset + 8);
50
+ }
51
+ }
52
+ else if ((verOffset = userAgent.indexOf('Firefox')) != -1) {
53
+ // In Firefox, the true version is after 'Firefox'
54
+ browser = {
55
+ name: 'Firefox',
56
+ version: userAgent.substring(verOffset + 8),
57
+ };
58
+ }
59
+ else if ((nameOffset = userAgent.lastIndexOf(' ') + 1)
60
+ < (verOffset = userAgent.lastIndexOf('/'))) {
61
+ browser = {
62
+ name: userAgent.substring(nameOffset, verOffset),
63
+ version: userAgent.substring(verOffset + 1),
64
+ };
65
+ }
66
+ // Postprocess version
67
+ // trim the fullVersion string at semicolon/space if present
68
+ var ix;
69
+ if ((ix = browser.version.indexOf(';')) !== -1) {
70
+ browser.version = browser.version.substring(0, ix);
71
+ }
72
+ if ((ix = browser.version.indexOf(' ')) !== -1) {
73
+ browser.version = browser.version.substring(0, ix);
74
+ }
75
+ /* ------------- Device ------------- */
76
+ // Detect os
77
+ var os = 'Unknown';
78
+ if (userAgent.includes('Linux')) {
79
+ os = 'Linux';
80
+ }
81
+ else if (userAgent.includes('like Mac')) {
82
+ os = 'iOS';
83
+ }
84
+ else if (userAgent.includes('Mac')) {
85
+ os = 'Mac';
86
+ }
87
+ else if (userAgent.includes('Android')) {
88
+ os = 'Android';
89
+ }
90
+ else if (userAgent.includes('Win')) {
91
+ os = 'Win';
92
+ }
93
+ // Check if mobile
94
+ var isMobile = !!userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);
95
+ // Device
96
+ var device = {
97
+ isMobile: isMobile,
98
+ os: os,
99
+ };
100
+ /* ------------- Finish ------------- */
101
+ // Return info
102
+ return {
103
+ browser: browser,
104
+ device: device,
105
+ };
106
+ };
107
+ exports.default = parseUserAgent;
108
+ //# sourceMappingURL=parseUserAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseUserAgent.js","sourceRoot":"","sources":["../../src/helpers/parseUserAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Visit an endpoint on another server
3
+ * @author Gabe Abrams
4
+ * @param opts object containing all arguments
5
+ * @param opts.method the method of the endpoint
6
+ * @param opts.path the path of the other server's endpoint
7
+ * @param opts.host the host of the other server
8
+ * @param [opts.params={}] query/body parameters to include
9
+ * @param [opts.responseType=JSON] the response type from the other server
10
+ */
11
+ declare const visitEndpointOnAnotherServer: (opts: {
12
+ method: "GET" | "POST" | "DELETE" | "PUT";
13
+ path: string;
14
+ host: string;
15
+ params?: { [key in string]: any; };
16
+ responseType?: "JSON" | "Text";
17
+ }) => Promise<any>;
18
+ export default visitEndpointOnAnotherServer;
@@ -0,0 +1,156 @@
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 __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ var _a;
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ // Import dce-reactkit
44
+ var dce_reactkit_1 = require("dce-reactkit");
45
+ // Import data signer
46
+ var dataSigner_1 = require("../dataSigner");
47
+ // Import shared types
48
+ var ExpressKitErrorCode_1 = __importDefault(require("../../types/ExpressKitErrorCode"));
49
+ var sendServerToServerRequest_1 = __importDefault(require("./sendServerToServerRequest"));
50
+ /*------------------------------------------------------------------------*/
51
+ /* ----------------------------- Credentials ---------------------------- */
52
+ /*------------------------------------------------------------------------*/
53
+ /*
54
+ DCEKIT_CROSS_SERVER_CREDENTIALS format:
55
+ |host:key:secret||host:key:secret|...
56
+ */
57
+ var credentials = (((_a = process.env.DCEKIT_CROSS_SERVER_CREDENTIALS) !== null && _a !== void 0 ? _a : '')
58
+ // Replace multiple | with a single one
59
+ .replace(/\|+/g, '|')
60
+ // Split by |
61
+ .split('|')
62
+ // Remove empty strings
63
+ .filter(function (str) {
64
+ return str.trim().length > 0;
65
+ })
66
+ // Process each credential
67
+ .map(function (str) {
68
+ // Split by :
69
+ var parts = str.split(':');
70
+ // Check for errors
71
+ if (parts.length !== 3) {
72
+ throw new dce_reactkit_1.ErrorWithCode('Invalid DCEKIT_CROSS_SERVER_CREDENTIALS format. Each credential must be in the format |host:key:secret|', ExpressKitErrorCode_1.default.InvalidCrossServerCredentialsFormat);
73
+ }
74
+ // Return the credential
75
+ return {
76
+ host: parts[0].trim(),
77
+ key: parts[1].trim(),
78
+ secret: parts[2].trim(),
79
+ };
80
+ }));
81
+ /*------------------------------------------------------------------------*/
82
+ /* ------------------------------- Helpers ------------------------------ */
83
+ /*------------------------------------------------------------------------*/
84
+ /**
85
+ * Get the credential to use for the request to another server
86
+ * @author Gabe Abrams
87
+ * @param host the host of the other server
88
+ * @return the credential to use
89
+ */
90
+ var getCrossServerCredential = function (host) {
91
+ // Find the credential
92
+ var credential = credentials.find(function (cred) {
93
+ return cred.host.toLowerCase() === host.toLowerCase();
94
+ });
95
+ if (!credential) {
96
+ throw new dce_reactkit_1.ErrorWithCode('Cannot send cross-server signed request there was no credential that matched the host that the request is being sent to.', ExpressKitErrorCode_1.default.CrossServerNoCredentialsToSignWith);
97
+ }
98
+ // Return credential
99
+ return credential;
100
+ };
101
+ /*------------------------------------------------------------------------*/
102
+ /* -------------------------------- Main -------------------------------- */
103
+ /*------------------------------------------------------------------------*/
104
+ /**
105
+ * Visit an endpoint on another server
106
+ * @author Gabe Abrams
107
+ * @param opts object containing all arguments
108
+ * @param opts.method the method of the endpoint
109
+ * @param opts.path the path of the other server's endpoint
110
+ * @param opts.host the host of the other server
111
+ * @param [opts.params={}] query/body parameters to include
112
+ * @param [opts.responseType=JSON] the response type from the other server
113
+ */
114
+ var visitEndpointOnAnotherServer = function (opts) { return __awaiter(void 0, void 0, void 0, function () {
115
+ var credential, augmentedParams, response, body;
116
+ var _a;
117
+ return __generator(this, function (_b) {
118
+ switch (_b.label) {
119
+ case 0:
120
+ credential = getCrossServerCredential(opts.host);
121
+ return [4 /*yield*/, (0, dataSigner_1.signRequest)({
122
+ method: opts.method,
123
+ path: opts.path,
124
+ params: (_a = opts.params) !== null && _a !== void 0 ? _a : {},
125
+ key: credential.key,
126
+ secret: credential.secret,
127
+ })];
128
+ case 1:
129
+ augmentedParams = _b.sent();
130
+ return [4 /*yield*/, (0, sendServerToServerRequest_1.default)({
131
+ path: opts.path,
132
+ host: opts.host,
133
+ method: opts.method,
134
+ params: augmentedParams,
135
+ responseType: opts.responseType,
136
+ })];
137
+ case 2:
138
+ response = _b.sent();
139
+ // Check for failure
140
+ if (!response || !response.body) {
141
+ throw new dce_reactkit_1.ErrorWithCode('We didn\'t get a response from the other server. Please check the network between the two connection.', dce_reactkit_1.ReactKitErrorCode.NoResponse);
142
+ }
143
+ if (!response.body.success) {
144
+ // Other errors
145
+ throw new dce_reactkit_1.ErrorWithCode((response.body.message
146
+ || 'An unknown error occurred. Please contact an admin.'), (response.body.code
147
+ || dce_reactkit_1.ReactKitErrorCode.NoCode));
148
+ }
149
+ body = response.body.body;
150
+ // Return
151
+ return [2 /*return*/, body];
152
+ }
153
+ });
154
+ }); };
155
+ exports.default = visitEndpointOnAnotherServer;
156
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/visitEndpointOnAnotherServer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Sends and retries an http request
3
+ * @author Gabriel Abrams
4
+ * @param opts object containing all arguments
5
+ * @param opts.path path to send request to
6
+ * @param [opts.host] host to send request to
7
+ * @param [opts.method=GET] http method to use
8
+ * @param [opts.params] body/data to include in the request
9
+ * @param [opts.responseType=JSON] expected response type
10
+ * @returns { body, status, headers } on success
11
+ */
12
+ declare const sendServerToServerRequest: (opts: {
13
+ path: string;
14
+ host?: string;
15
+ method?: ("GET" | "POST" | "PUT" | "DELETE");
16
+ params?: { [k in string]: any; };
17
+ responseType?: "Text" | "JSON";
18
+ }) => Promise<{
19
+ body: any;
20
+ status: number;
21
+ headers: { [k in string]: any; };
22
+ }>;
23
+ export default sendServerToServerRequest;
@@ -0,0 +1,168 @@
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 __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ // Import libs
43
+ var qs_1 = __importDefault(require("qs"));
44
+ // Import dce-reactkit
45
+ var dce_reactkit_1 = require("dce-reactkit");
46
+ // Import shared types
47
+ var ExpressKitErrorCode_1 = __importDefault(require("../../types/ExpressKitErrorCode"));
48
+ /**
49
+ * Sends and retries an http request
50
+ * @author Gabriel Abrams
51
+ * @param opts object containing all arguments
52
+ * @param opts.path path to send request to
53
+ * @param [opts.host] host to send request to
54
+ * @param [opts.method=GET] http method to use
55
+ * @param [opts.params] body/data to include in the request
56
+ * @param [opts.responseType=JSON] expected response type
57
+ * @returns { body, status, headers } on success
58
+ */
59
+ var sendServerToServerRequest = function (opts) { return __awaiter(void 0, void 0, void 0, function () {
60
+ var method, params, stringifiedParams, query, url, headers, data, encodedData, response, responseHeaders_1, responseBody, err_1, err_2;
61
+ var _a;
62
+ return __generator(this, function (_b) {
63
+ switch (_b.label) {
64
+ case 0:
65
+ method = (opts.method || 'GET');
66
+ if (opts.params) {
67
+ params = {};
68
+ Object.entries(opts.params).forEach(function (_a) {
69
+ var key = _a[0], val = _a[1];
70
+ if (typeof val === 'object' && !Array.isArray(val)) {
71
+ params[key] = JSON.stringify(val);
72
+ }
73
+ else {
74
+ params[key] = val;
75
+ }
76
+ });
77
+ }
78
+ stringifiedParams = qs_1.default.stringify(params || {}, {
79
+ encodeValuesOnly: true,
80
+ arrayFormat: 'brackets',
81
+ });
82
+ query = (method === 'GET' ? "?".concat(stringifiedParams) : '');
83
+ if (!opts.host) {
84
+ // No host included at all. Just send to a path
85
+ url = "".concat(opts.path).concat(query);
86
+ }
87
+ else {
88
+ url = "https://".concat(opts.host).concat(opts.path).concat(query);
89
+ }
90
+ headers = {};
91
+ data = null;
92
+ if (!headers['Content-Type']) {
93
+ // Form encoded
94
+ headers['Content-Type'] = 'application/x-www-form-urlencoded';
95
+ // Add data if applicable
96
+ data = (method !== 'GET' ? stringifiedParams : null);
97
+ }
98
+ else {
99
+ // JSON encode
100
+ data = params;
101
+ }
102
+ if (data) {
103
+ if (headers['Content-Type'] === 'application/x-www-form-urlencoded') {
104
+ encodedData = new URLSearchParams(params);
105
+ }
106
+ else {
107
+ encodedData = JSON.stringify(data);
108
+ }
109
+ }
110
+ _b.label = 1;
111
+ case 1:
112
+ _b.trys.push([1, 10, , 11]);
113
+ return [4 /*yield*/, fetch(url, {
114
+ method: method,
115
+ mode: 'cors',
116
+ headers: headers !== null && headers !== void 0 ? headers : {},
117
+ body: ((method !== 'GET' && encodedData)
118
+ ? encodedData
119
+ : undefined),
120
+ redirect: 'follow',
121
+ })];
122
+ case 2:
123
+ response = _b.sent();
124
+ responseHeaders_1 = {};
125
+ response.headers.forEach(function (value, key) {
126
+ responseHeaders_1[key] = value;
127
+ });
128
+ _b.label = 3;
129
+ case 3:
130
+ _b.trys.push([3, 8, , 9]);
131
+ responseBody = void 0;
132
+ if (!(opts.responseType
133
+ && opts.responseType === 'Text')) return [3 /*break*/, 5];
134
+ return [4 /*yield*/, response.text()];
135
+ case 4:
136
+ // Response type is text
137
+ responseBody = _b.sent();
138
+ return [3 /*break*/, 7];
139
+ case 5: return [4 /*yield*/, response.json()];
140
+ case 6:
141
+ // Response type is JSON
142
+ responseBody = _b.sent();
143
+ _b.label = 7;
144
+ case 7:
145
+ // Return response
146
+ return [2 /*return*/, {
147
+ body: responseBody,
148
+ status: response.status,
149
+ headers: responseHeaders_1,
150
+ }];
151
+ case 8:
152
+ err_1 = _b.sent();
153
+ throw new dce_reactkit_1.ErrorWithCode("Failed to parse response as ".concat(opts.responseType, ": ").concat(err_1 === null || err_1 === void 0 ? void 0 : err_1.message), ExpressKitErrorCode_1.default.ResponseParseError);
154
+ case 9: return [3 /*break*/, 11];
155
+ case 10:
156
+ err_2 = _b.sent();
157
+ // Self-signed certificate error:
158
+ if ((_a = err_2 === null || err_2 === void 0 ? void 0 : err_2.message) === null || _a === void 0 ? void 0 : _a.includes('self signed certificate')) {
159
+ throw new dce_reactkit_1.ErrorWithCode('We refused to send a request because the receiver has self-signed certificates.', ExpressKitErrorCode_1.default.SelfSigned);
160
+ }
161
+ // No tries left
162
+ throw new dce_reactkit_1.ErrorWithCode("We encountered an error when trying to send a network request. If this issue persists, contact an admin. Error: ".concat(err_2 === null || err_2 === void 0 ? void 0 : err_2.message), ExpressKitErrorCode_1.default.NotConnected);
163
+ case 11: return [2 /*return*/];
164
+ }
165
+ });
166
+ }); };
167
+ exports.default = sendServerToServerRequest;
168
+ //# sourceMappingURL=sendServerToServerRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendServerToServerRequest.js","sourceRoot":"","sources":["../../../src/helpers/visitEndpointOnAnotherServer/sendServerToServerRequest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Generate a static error page
3
+ * @author Gabe Abrams
4
+ * @param opts object containing all arguments
5
+ * @param [opts.title=An Error Occurred] title of the error box
6
+ * @param [opts.description=An unknown server error occurred. Please contact support.]
7
+ * a human-readable description of the error
8
+ * @param [opts.code=ReactKitErrorCode.NoCode] error code to show
9
+ * @param [opts.pageTitle=opts.title] title of the page/tab if it differs from
10
+ * the title of the error
11
+ * @returns html of the page
12
+ */
13
+ declare const genErrorPage: (opts?: {
14
+ title?: string;
15
+ description?: string;
16
+ code?: string;
17
+ pageTitle?: string;
18
+ }) => string;
19
+ export default genErrorPage;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // Import dce-reactkit
4
+ var dce_reactkit_1 = require("dce-reactkit");
5
+ /**
6
+ * Generate a static error page
7
+ * @author Gabe Abrams
8
+ * @param opts object containing all arguments
9
+ * @param [opts.title=An Error Occurred] title of the error box
10
+ * @param [opts.description=An unknown server error occurred. Please contact support.]
11
+ * a human-readable description of the error
12
+ * @param [opts.code=ReactKitErrorCode.NoCode] error code to show
13
+ * @param [opts.pageTitle=opts.title] title of the page/tab if it differs from
14
+ * the title of the error
15
+ * @returns html of the page
16
+ */
17
+ var genErrorPage = function (opts) {
18
+ var _a, _b, _c, _d;
19
+ if (opts === void 0) { opts = {}; }
20
+ var title = ((_a = opts.title) !== null && _a !== void 0 ? _a : 'An Error Occurred');
21
+ var pageTitle = ((_b = opts.pageTitle) !== null && _b !== void 0 ? _b : title);
22
+ var description = ((_c = opts.description) !== null && _c !== void 0 ? _c : 'An unknown server error occurred. Please contact support.');
23
+ var code = ((_d = opts.code) !== null && _d !== void 0 ? _d : dce_reactkit_1.ReactKitErrorCode.NoCode);
24
+ return "\n<head>\n <!-- Metadata -->\n <meta\n name=\"viewport\"\n content=\"width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0\"\n >\n\n <!-- Title -->\n <title>".concat(pageTitle, "</title>\n\n <!-- Bootstrap -->\n <link\n rel=\"stylesheet\"\n href=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.1/css/bootstrap.min.css\"\n integrity=\"sha512-siwe/oXMhSjGCwLn+scraPOWrJxHlUgMBMZXdPe2Tnk3I0x3ESCoLz7WZ5NTH6SZrywMY+PB1cjyqJ5jAluCOg==\"\n crossorigin=\"anonymous\"\n referrerpolicy=\"no-referrer\"\n />\n <script\n src=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.1/js/bootstrap.min.js\"\n integrity=\"sha512-vyRAVI0IEm6LI/fVSv/Wq/d0KUfrg3hJq2Qz5FlfER69sf3ZHlOrsLriNm49FxnpUGmhx+TaJKwJ+ByTLKT+Yg==\"\n crossorigin=\"anonymous\"\n referrerpolicy=\"no-referrer\"\n ></script>\n\n <!-- FontAwesome -->\n <link\n rel=\"stylesheet\"\n href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css\"\n integrity=\"sha512-xh6O/CkQoPOWDdYTDqeRdPCVd1SpvCA9XXcUnZS2FmJNp1coAFzvtCN9BmamE+4aHK8yyUHUSCcJHgXloTyT2A==\"\n crossorigin=\"anonymous\"\n referrerpolicy=\"no-referrer\"\n />\n\n <!-- Style -->\n <style>\n .DCEReactKit-pop-in {\n animation-name: DCEReactKit-pop-in;\n animation-duration: 0.5s;\n animation-iteration-count: 1;\n animation-timing-function: ease-out;\n animation-fill-mode: both;\n\n transform-origin: center;\n }\n\n @keyframes DCEReactKit-pop-in {\n 0% {\n opacity: 0;\n transform: scale(0.9);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n .DCEReactKit-slide-in {\n animation-name: DCEReactKit-slide-in;\n animation-duration: 1s;\n animation-iteration-count: 1;\n animation-timing-function: ease-out;\n animation-fill-mode: both;\n animation-delay: 0.2s;\n }\n\n @keyframes DCEReactKit-slide-in {\n 0% {\n opacity: 0;\n transform: translate(0, 0.3em);\n }\n 100% {\n opacity: 1;\n transform: translate(0, 0);\n }\n }\n </style>\n</head>\n\n<!-- Body -->\n<body class=\"bg-dark text-center pt-3 ps-3 pe-3\">\n <!-- Alert -->\n <div\n class=\"DCEReactKit-pop-in alert alert-warning d-inline-block\"\n style=\"width: 50em; max-width: 100%\"\n >\n <!-- Title -->\n <h2>\n <i class=\"me-1 fa-solid fa-triangle-exclamation\"></i>\n ").concat(title, "\n </h2>\n <!-- Description -->\n <div>\n ").concat(description, "\n </div>\n </div>\n\n <!-- Error Code -->\n <div class=\"DCEReactKit-slide-in text-light\">\n <strong>\n Error Code:\n </strong>\n ").concat(code, "\n </div>\n</body>\n ");
25
+ };
26
+ exports.default = genErrorPage;
27
+ //# sourceMappingURL=genErrorPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genErrorPage.js","sourceRoot":"","sources":["../../src/html/genErrorPage.ts"],"names":[],"mappings":";;AAAA,sBAAsB;AACtB,6CAAiD;AAKjD;;;;;;;;;;;GAWG;AACH,IAAM,YAAY,GAAG,UACnB,IAKM;;IALN,qBAAA,EAAA,SAKM;IAEN,IAAM,KAAK,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,mBAAmB,CAAC,CAAC;IAClD,IAAM,SAAS,GAAG,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,KAAK,CAAC,CAAC;IAC5C,IAAM,WAAW,GAAG,CAClB,MAAA,IAAI,CAAC,WAAW,mCACb,2DAA2D,CAC/D,CAAC;IACF,IAAM,IAAI,GAAG,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,gCAAiB,CAAC,MAAM,CAAC,CAAC;IAErD,OAAO,2MASE,SAAS,uuEAiFZ,KAAK,qEAIL,WAAW,qKASb,IAAI,4BAGP,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Generate a static info page
3
+ * @author Gabe Abrams
4
+ * @param opts object containing all arguments
5
+ * @param opts.title title of the info box
6
+ * @param opts.body a human-readable text body for the info alert
7
+ * @returns the HTML for the info page
8
+ */
9
+ declare const genInfoPage: (opts: {
10
+ title: string;
11
+ body: string;
12
+ }) => string;
13
+ export default genInfoPage;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Generate a static info page
5
+ * @author Gabe Abrams
6
+ * @param opts object containing all arguments
7
+ * @param opts.title title of the info box
8
+ * @param opts.body a human-readable text body for the info alert
9
+ * @returns the HTML for the info page
10
+ */
11
+ var genInfoPage = function (opts) {
12
+ var title = opts.title, body = opts.body;
13
+ return "\n<head>\n <!-- Metadata -->\n <meta\n name=\"viewport\"\n content=\"width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0\"\n >\n\n <!-- Title -->\n <title>".concat(title, "</title>\n\n <!-- Bootstrap -->\n <link\n rel=\"stylesheet\"\n href=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.1/css/bootstrap.min.css\"\n integrity=\"sha512-siwe/oXMhSjGCwLn+scraPOWrJxHlUgMBMZXdPe2Tnk3I0x3ESCoLz7WZ5NTH6SZrywMY+PB1cjyqJ5jAluCOg==\"\n crossorigin=\"anonymous\"\n referrerpolicy=\"no-referrer\"\n />\n <script\n src=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.1/js/bootstrap.min.js\"\n integrity=\"sha512-vyRAVI0IEm6LI/fVSv/Wq/d0KUfrg3hJq2Qz5FlfER69sf3ZHlOrsLriNm49FxnpUGmhx+TaJKwJ+ByTLKT+Yg==\"\n crossorigin=\"anonymous\"\n referrerpolicy=\"no-referrer\"\n ></script>\n\n <!-- FontAwesome -->\n <link\n rel=\"stylesheet\"\n href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css\"\n integrity=\"sha512-xh6O/CkQoPOWDdYTDqeRdPCVd1SpvCA9XXcUnZS2FmJNp1coAFzvtCN9BmamE+4aHK8yyUHUSCcJHgXloTyT2A==\"\n crossorigin=\"anonymous\"\n referrerpolicy=\"no-referrer\"\n />\n\n <!-- Style -->\n <style>\n .DCEReactKit-pop-in {\n animation-name: DCEReactKit-pop-in;\n animation-duration: 0.5s;\n animation-iteration-count: 1;\n animation-timing-function: ease-out;\n animation-fill-mode: both;\n\n transform-origin: center;\n }\n\n @keyframes DCEReactKit-pop-in {\n 0% {\n opacity: 0;\n transform: scale(0.9);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n }\n </style>\n</head>\n\n<!-- Body -->\n<body class=\"bg-dark text-center pt-3 ps-3 pe-3\">\n <!-- Alert -->\n <div\n class=\"DCEReactKit-pop-in alert alert-info d-inline-block\"\n style=\"width: 50em; max-width: 100%\"\n >\n <!-- Title -->\n <h2>\n <i class=\"me-1 fa-solid fa-circle-info\"></i>\n ").concat(title, "\n </h2>\n <!-- Body -->\n <div>\n ").concat(body, "\n </div>\n </div>\n</body>\n ");
14
+ };
15
+ exports.default = genInfoPage;
16
+ //# sourceMappingURL=genInfoPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genInfoPage.js","sourceRoot":"","sources":["../../src/html/genInfoPage.ts"],"names":[],"mappings":";;AAAA;;;;;;;GAOG;AACH,IAAM,WAAW,GAAG,UAClB,IAGC;IAGC,IAAA,KAAK,GAEH,IAAI,MAFD,EACL,IAAI,GACF,IAAI,KADF,CACG;IAET,OAAO,2MASE,KAAK,owDA6DR,KAAK,8DAIL,IAAI,wCAIT,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,WAAW,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { abbreviate, avg, ceilToNumDecimals, floorToNumDecimals, forceNumIntoBounds, padDecimalZeros, padZerosLeft, roundToNumDecimals, sum, waitMs, getOrdinal, getTimeInfoInET, startMinWait, getHumanReadableDate, getPartOfDay, stringsToHumanReadableList, onlyKeepLetters, parallelLimit, getMonthName, genCSV, extractProp, compareArraysByProp, getLocalTimeInfo, genCommaList, prefixWithAOrAn, everyAsync, filterAsync, forEachAsync, mapAsync, someAsync, capitalize, shuffleArray, DayOfWeek, Log, LogType, LogSource, LogAction, LogBuiltInMetadata, LogMetadataType, LogFunction, MINUTE_IN_MS, HOUR_IN_MS, DAY_IN_MS, ErrorWithCode, ParamType } from 'dce-reactkit';
2
+ import initCrossServerCredentialCollection from './helpers/initCrossServerCredentialCollection';
3
+ import initLogCollection from './helpers/initLogCollection';
4
+ import initServer from './helpers/initServer';
5
+ import genRouteHandler from './helpers/genRouteHandler';
6
+ import handleError from './helpers/handleError';
7
+ import handleSuccess from './helpers/handleSuccess';
8
+ import addDBEditorEndpoints from './helpers/addDBEditorEndpoints';
9
+ import visitEndpointOnAnotherServer from './helpers/visitEndpointOnAnotherServer';
10
+ import CrossServerCredential from './types/CrossServerCredential';
11
+ export { ErrorWithCode, MINUTE_IN_MS, HOUR_IN_MS, DAY_IN_MS, abbreviate, avg, ceilToNumDecimals, floorToNumDecimals, forceNumIntoBounds, padDecimalZeros, padZerosLeft, roundToNumDecimals, sum, waitMs, getOrdinal, getTimeInfoInET, startMinWait, getHumanReadableDate, getPartOfDay, stringsToHumanReadableList, onlyKeepLetters, parallelLimit, getMonthName, genCSV, extractProp, compareArraysByProp, genCommaList, getLocalTimeInfo, prefixWithAOrAn, everyAsync, filterAsync, forEachAsync, mapAsync, someAsync, capitalize, shuffleArray, initServer, genRouteHandler, handleError, handleSuccess, initLogCollection, initCrossServerCredentialCollection, addDBEditorEndpoints, visitEndpointOnAnotherServer, DayOfWeek, Log, LogType, LogSource, LogAction, LogBuiltInMetadata, LogMetadataType, LogFunction, CrossServerCredential, ParamType, };