@terreno/api 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +170 -0
- package/biome.jsonc +22 -0
- package/bunfig.toml +4 -0
- package/dist/api.d.ts +227 -0
- package/dist/api.js +1024 -0
- package/dist/api.test.d.ts +1 -0
- package/dist/api.test.js +2143 -0
- package/dist/auth.d.ts +50 -0
- package/dist/auth.js +512 -0
- package/dist/auth.test.d.ts +1 -0
- package/dist/auth.test.js +778 -0
- package/dist/errors.d.ts +75 -0
- package/dist/errors.js +216 -0
- package/dist/example.d.ts +1 -0
- package/dist/example.js +118 -0
- package/dist/expressServer.d.ts +35 -0
- package/dist/expressServer.js +436 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +30 -0
- package/dist/logger.d.ts +23 -0
- package/dist/logger.js +249 -0
- package/dist/middleware.d.ts +10 -0
- package/dist/middleware.js +52 -0
- package/dist/notifiers/googleChatNotifier.d.ts +5 -0
- package/dist/notifiers/googleChatNotifier.js +130 -0
- package/dist/notifiers/googleChatNotifier.test.d.ts +1 -0
- package/dist/notifiers/googleChatNotifier.test.js +260 -0
- package/dist/notifiers/index.d.ts +3 -0
- package/dist/notifiers/index.js +19 -0
- package/dist/notifiers/slackNotifier.d.ts +5 -0
- package/dist/notifiers/slackNotifier.js +130 -0
- package/dist/notifiers/slackNotifier.test.d.ts +1 -0
- package/dist/notifiers/slackNotifier.test.js +259 -0
- package/dist/notifiers/zoomNotifier.d.ts +34 -0
- package/dist/notifiers/zoomNotifier.js +181 -0
- package/dist/notifiers/zoomNotifier.test.d.ts +1 -0
- package/dist/notifiers/zoomNotifier.test.js +370 -0
- package/dist/openApi.d.ts +60 -0
- package/dist/openApi.js +441 -0
- package/dist/openApi.test.d.ts +1 -0
- package/dist/openApi.test.js +445 -0
- package/dist/openApiBuilder.d.ts +419 -0
- package/dist/openApiBuilder.js +424 -0
- package/dist/openApiBuilder.test.d.ts +1 -0
- package/dist/openApiBuilder.test.js +509 -0
- package/dist/openApiEtag.d.ts +7 -0
- package/dist/openApiEtag.js +38 -0
- package/dist/permissions.d.ts +26 -0
- package/dist/permissions.js +331 -0
- package/dist/permissions.test.d.ts +1 -0
- package/dist/permissions.test.js +413 -0
- package/dist/plugins.d.ts +67 -0
- package/dist/plugins.js +315 -0
- package/dist/plugins.test.d.ts +1 -0
- package/dist/plugins.test.js +639 -0
- package/dist/populate.d.ts +14 -0
- package/dist/populate.js +315 -0
- package/dist/populate.test.d.ts +1 -0
- package/dist/populate.test.js +133 -0
- package/dist/response.d.ts +0 -0
- package/dist/response.js +1 -0
- package/dist/tests/bunSetup.d.ts +1 -0
- package/dist/tests/bunSetup.js +297 -0
- package/dist/tests/index.d.ts +1 -0
- package/dist/tests/index.js +17 -0
- package/dist/tests.d.ts +99 -0
- package/dist/tests.js +273 -0
- package/dist/transformers.d.ts +25 -0
- package/dist/transformers.js +217 -0
- package/dist/transformers.test.d.ts +1 -0
- package/dist/transformers.test.js +370 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.js +143 -0
- package/dist/utils.test.d.ts +1 -0
- package/dist/utils.test.js +14 -0
- package/index.ts +1 -0
- package/package.json +88 -0
- package/src/__snapshots__/openApi.test.ts.snap +4814 -0
- package/src/__snapshots__/openApiBuilder.test.ts.snap +1485 -0
- package/src/api.test.ts +1661 -0
- package/src/api.ts +1036 -0
- package/src/auth.test.ts +550 -0
- package/src/auth.ts +408 -0
- package/src/errors.ts +225 -0
- package/src/example.ts +99 -0
- package/src/express.d.ts +5 -0
- package/src/expressServer.ts +387 -0
- package/src/index.ts +14 -0
- package/src/logger.ts +190 -0
- package/src/middleware.ts +18 -0
- package/src/notifiers/googleChatNotifier.test.ts +114 -0
- package/src/notifiers/googleChatNotifier.ts +47 -0
- package/src/notifiers/index.ts +3 -0
- package/src/notifiers/slackNotifier.test.ts +113 -0
- package/src/notifiers/slackNotifier.ts +55 -0
- package/src/notifiers/zoomNotifier.test.ts +207 -0
- package/src/notifiers/zoomNotifier.ts +111 -0
- package/src/openApi.test.ts +331 -0
- package/src/openApi.ts +494 -0
- package/src/openApiBuilder.test.ts +442 -0
- package/src/openApiBuilder.ts +636 -0
- package/src/openApiEtag.ts +40 -0
- package/src/permissions.test.ts +219 -0
- package/src/permissions.ts +228 -0
- package/src/plugins.test.ts +390 -0
- package/src/plugins.ts +289 -0
- package/src/populate.test.ts +65 -0
- package/src/populate.ts +258 -0
- package/src/response.ts +0 -0
- package/src/tests/bunSetup.ts +234 -0
- package/src/tests/index.ts +1 -0
- package/src/tests.ts +218 -0
- package/src/transformers.test.ts +202 -0
- package/src/transformers.ts +170 -0
- package/src/utils.test.ts +14 -0
- package/src/utils.ts +47 -0
- package/tsconfig.json +60 -0
- package/types.d.ts +17 -0
package/dist/logger.js
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
47
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
48
|
+
if (!m) return o;
|
|
49
|
+
var i = m.call(o), r, ar = [], e;
|
|
50
|
+
try {
|
|
51
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
52
|
+
}
|
|
53
|
+
catch (error) { e = { error: error }; }
|
|
54
|
+
finally {
|
|
55
|
+
try {
|
|
56
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
57
|
+
}
|
|
58
|
+
finally { if (e) throw e.error; }
|
|
59
|
+
}
|
|
60
|
+
return ar;
|
|
61
|
+
};
|
|
62
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
63
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
64
|
+
if (ar || !(i in from)) {
|
|
65
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
66
|
+
ar[i] = from[i];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
70
|
+
};
|
|
71
|
+
var __values = (this && this.__values) || function(o) {
|
|
72
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
73
|
+
if (m) return m.call(o);
|
|
74
|
+
if (o && typeof o.length === "number") return {
|
|
75
|
+
next: function () {
|
|
76
|
+
if (o && i >= o.length) o = void 0;
|
|
77
|
+
return { value: o && o[i++], done: !o };
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
81
|
+
};
|
|
82
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
83
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
84
|
+
};
|
|
85
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
86
|
+
exports.logger = exports.winstonLogger = void 0;
|
|
87
|
+
exports.setupLogging = setupLogging;
|
|
88
|
+
var node_fs_1 = __importDefault(require("node:fs"));
|
|
89
|
+
var node_util_1 = require("node:util");
|
|
90
|
+
var Sentry = __importStar(require("@sentry/node"));
|
|
91
|
+
var winston_1 = __importDefault(require("winston"));
|
|
92
|
+
function isPrimitive(val) {
|
|
93
|
+
return val === null || (typeof val !== "object" && typeof val !== "function");
|
|
94
|
+
}
|
|
95
|
+
function formatWithInspect(val) {
|
|
96
|
+
var prefix = isPrimitive(val) ? "" : "\n";
|
|
97
|
+
var shouldFormat = typeof val !== "string";
|
|
98
|
+
return prefix + (shouldFormat ? (0, node_util_1.inspect)(val, { colors: true, depth: null }) : val);
|
|
99
|
+
}
|
|
100
|
+
// Winston doesn't operate like console.log by default, e.g. `logger.error('error',
|
|
101
|
+
// error)` only prints the message and no args. Add handling for all the args,
|
|
102
|
+
// while also supporting splat logging.
|
|
103
|
+
function printf(timestamp) {
|
|
104
|
+
if (timestamp === void 0) { timestamp = false; }
|
|
105
|
+
return function (info) {
|
|
106
|
+
var msg = formatWithInspect(info.message);
|
|
107
|
+
var splatArgs = (info[Symbol.for("splat")] || []);
|
|
108
|
+
var rest = splatArgs.map(function (data) { return formatWithInspect(data); }).join(" ");
|
|
109
|
+
if (timestamp) {
|
|
110
|
+
return "".concat(info.timestamp, " - ").concat(info.level, ": ").concat(msg, " ").concat(rest);
|
|
111
|
+
}
|
|
112
|
+
return "".concat(info.level, ": ").concat(msg, " ").concat(rest);
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Setup a global, default rejection handler.
|
|
116
|
+
winston_1.default.add(new winston_1.default.transports.Console({
|
|
117
|
+
debugStdout: true,
|
|
118
|
+
format: winston_1.default.format.combine(winston_1.default.format.colorize(), winston_1.default.format.simple(), winston_1.default.format.printf(printf(false))),
|
|
119
|
+
handleExceptions: true,
|
|
120
|
+
handleRejections: true,
|
|
121
|
+
level: "error",
|
|
122
|
+
}));
|
|
123
|
+
// Setup a default console logger.
|
|
124
|
+
exports.winstonLogger = winston_1.default.createLogger({
|
|
125
|
+
level: "debug",
|
|
126
|
+
transports: [
|
|
127
|
+
new winston_1.default.transports.Console({
|
|
128
|
+
debugStdout: true,
|
|
129
|
+
format: winston_1.default.format.combine(winston_1.default.format.colorize(), winston_1.default.format.simple(), winston_1.default.format.printf(printf(false))),
|
|
130
|
+
handleExceptions: true,
|
|
131
|
+
handleRejections: true,
|
|
132
|
+
level: "debug",
|
|
133
|
+
}),
|
|
134
|
+
],
|
|
135
|
+
});
|
|
136
|
+
// Helper function to send logs to Sentry if enabled
|
|
137
|
+
function sendToSentry(message, level) {
|
|
138
|
+
if (process.env.USE_SENTRY_LOGGING === "true" && Sentry.logger) {
|
|
139
|
+
Sentry.logger[level](message);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.logger = {
|
|
143
|
+
// simple way to log a caught exception. e.g. promise().catch(logger.catch)
|
|
144
|
+
catch: function (e) {
|
|
145
|
+
var errorMsg = "Caught: ".concat(e === null || e === void 0 ? void 0 : e.message, " ").concat(e === null || e === void 0 ? void 0 : e.stack);
|
|
146
|
+
exports.winstonLogger.error(errorMsg);
|
|
147
|
+
if (process.env.USE_SENTRY_LOGGING === "true") {
|
|
148
|
+
if (e instanceof Error) {
|
|
149
|
+
Sentry.captureException(e);
|
|
150
|
+
}
|
|
151
|
+
else if (Sentry.logger) {
|
|
152
|
+
Sentry.logger.error(errorMsg);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
debug: function (msg) {
|
|
157
|
+
var args = [];
|
|
158
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
159
|
+
args[_i - 1] = arguments[_i];
|
|
160
|
+
}
|
|
161
|
+
exports.winstonLogger.debug.apply(exports.winstonLogger, __spreadArray([msg], __read(args), false));
|
|
162
|
+
sendToSentry(msg, "debug");
|
|
163
|
+
},
|
|
164
|
+
error: function (msg) {
|
|
165
|
+
var args = [];
|
|
166
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
167
|
+
args[_i - 1] = arguments[_i];
|
|
168
|
+
}
|
|
169
|
+
exports.winstonLogger.error.apply(exports.winstonLogger, __spreadArray([msg], __read(args), false));
|
|
170
|
+
sendToSentry(msg, "error");
|
|
171
|
+
},
|
|
172
|
+
info: function (msg) {
|
|
173
|
+
var args = [];
|
|
174
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
175
|
+
args[_i - 1] = arguments[_i];
|
|
176
|
+
}
|
|
177
|
+
exports.winstonLogger.info.apply(exports.winstonLogger, __spreadArray([msg], __read(args), false));
|
|
178
|
+
sendToSentry(msg, "info");
|
|
179
|
+
},
|
|
180
|
+
warn: function (msg) {
|
|
181
|
+
var args = [];
|
|
182
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
183
|
+
args[_i - 1] = arguments[_i];
|
|
184
|
+
}
|
|
185
|
+
exports.winstonLogger.warn.apply(exports.winstonLogger, __spreadArray([msg], __read(args), false));
|
|
186
|
+
sendToSentry(msg, "warn");
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
function setupLogging(options) {
|
|
190
|
+
var _a, e_1, _b;
|
|
191
|
+
var _c, _d;
|
|
192
|
+
exports.winstonLogger.clear();
|
|
193
|
+
if (!(options === null || options === void 0 ? void 0 : options.disableConsoleLogging)) {
|
|
194
|
+
var formats = [winston_1.default.format.simple()];
|
|
195
|
+
if (!(options === null || options === void 0 ? void 0 : options.disableConsoleColors)) {
|
|
196
|
+
formats.push(winston_1.default.format.colorize());
|
|
197
|
+
}
|
|
198
|
+
formats.push(winston_1.default.format.printf(printf(options === null || options === void 0 ? void 0 : options.showConsoleTimestamps)));
|
|
199
|
+
exports.winstonLogger.add(new winston_1.default.transports.Console({
|
|
200
|
+
debugStdout: !(options === null || options === void 0 ? void 0 : options.level) || (options === null || options === void 0 ? void 0 : options.level) === "debug",
|
|
201
|
+
format: (_a = winston_1.default.format).combine.apply(_a, __spreadArray([], __read(formats), false)),
|
|
202
|
+
level: (_c = options === null || options === void 0 ? void 0 : options.level) !== null && _c !== void 0 ? _c : "debug",
|
|
203
|
+
}));
|
|
204
|
+
}
|
|
205
|
+
if (!(options === null || options === void 0 ? void 0 : options.disableFileLogging)) {
|
|
206
|
+
var logDirectory = (_d = options === null || options === void 0 ? void 0 : options.logDirectory) !== null && _d !== void 0 ? _d : "./log";
|
|
207
|
+
if (!node_fs_1.default.existsSync(logDirectory)) {
|
|
208
|
+
node_fs_1.default.mkdirSync(logDirectory, { recursive: true });
|
|
209
|
+
}
|
|
210
|
+
var FILE_LOG_DEFAULTS = {
|
|
211
|
+
colorize: false,
|
|
212
|
+
compress: true,
|
|
213
|
+
dirname: logDirectory,
|
|
214
|
+
format: winston_1.default.format.simple(),
|
|
215
|
+
// 30 days of retention
|
|
216
|
+
maxFiles: 30,
|
|
217
|
+
// 50MB max file size
|
|
218
|
+
maxSize: 1024 * 1024 * 50,
|
|
219
|
+
// Only readable by server user
|
|
220
|
+
options: { mode: 384 },
|
|
221
|
+
};
|
|
222
|
+
exports.winstonLogger.add(new winston_1.default.transports.Stream(__assign(__assign({}, FILE_LOG_DEFAULTS), { handleExceptions: true, level: "error",
|
|
223
|
+
// Use stream so we can open log in append mode rather than overwriting.
|
|
224
|
+
stream: node_fs_1.default.createWriteStream("error.log", { flags: "a" }) })));
|
|
225
|
+
exports.winstonLogger.add(new winston_1.default.transports.Stream(__assign(__assign({}, FILE_LOG_DEFAULTS), { level: "info",
|
|
226
|
+
// Use stream so we can open log in append mode rather than overwriting.
|
|
227
|
+
stream: node_fs_1.default.createWriteStream("out.log", { flags: "a" }) })));
|
|
228
|
+
if (!(options === null || options === void 0 ? void 0 : options.level) || (options === null || options === void 0 ? void 0 : options.level) === "debug") {
|
|
229
|
+
exports.winstonLogger.add(new winston_1.default.transports.Stream(__assign(__assign({}, FILE_LOG_DEFAULTS), { level: "debug",
|
|
230
|
+
// Use stream so we can open log in append mode rather than overwriting.
|
|
231
|
+
stream: node_fs_1.default.createWriteStream("debug.log", { flags: "a" }) })));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (options === null || options === void 0 ? void 0 : options.transports) {
|
|
235
|
+
try {
|
|
236
|
+
for (var _e = __values(options.transports), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
237
|
+
var transport = _f.value;
|
|
238
|
+
exports.winstonLogger.add(transport);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
242
|
+
finally {
|
|
243
|
+
try {
|
|
244
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
245
|
+
}
|
|
246
|
+
finally { if (e_1) throw e_1.error; }
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { NextFunction, Request, Response } from "express";
|
|
2
|
+
/**
|
|
3
|
+
* Express middleware that captures the app version from the request header
|
|
4
|
+
* and adds it as a tag to the current Sentry scope.
|
|
5
|
+
*
|
|
6
|
+
* This allows filtering Sentry errors by app version.
|
|
7
|
+
*
|
|
8
|
+
* Expected header: `App-Version`
|
|
9
|
+
*/
|
|
10
|
+
export declare function sentryAppVersionMiddleware(req: Request, _res: Response, next: NextFunction): void;
|
|
@@ -0,0 +1,52 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.sentryAppVersionMiddleware = sentryAppVersionMiddleware;
|
|
37
|
+
var Sentry = __importStar(require("@sentry/node"));
|
|
38
|
+
/**
|
|
39
|
+
* Express middleware that captures the app version from the request header
|
|
40
|
+
* and adds it as a tag to the current Sentry scope.
|
|
41
|
+
*
|
|
42
|
+
* This allows filtering Sentry errors by app version.
|
|
43
|
+
*
|
|
44
|
+
* Expected header: `App-Version`
|
|
45
|
+
*/
|
|
46
|
+
function sentryAppVersionMiddleware(req, _res, next) {
|
|
47
|
+
var appVersion = req.get("App-Version");
|
|
48
|
+
if (appVersion) {
|
|
49
|
+
Sentry.getCurrentScope().setTag("app_version", appVersion);
|
|
50
|
+
}
|
|
51
|
+
next();
|
|
52
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
+
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);
|
|
46
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
+
function step(op) {
|
|
49
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
51
|
+
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;
|
|
52
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
+
switch (op[0]) {
|
|
54
|
+
case 0: case 1: t = op; break;
|
|
55
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
+
default:
|
|
59
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
+
if (t[2]) _.ops.pop();
|
|
64
|
+
_.trys.pop(); continue;
|
|
65
|
+
}
|
|
66
|
+
op = body.call(thisArg, _);
|
|
67
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
72
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
73
|
+
};
|
|
74
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
|
+
exports.sendToGoogleChat = sendToGoogleChat;
|
|
76
|
+
var Sentry = __importStar(require("@sentry/node"));
|
|
77
|
+
var axios_1 = __importDefault(require("axios"));
|
|
78
|
+
var errors_1 = require("../errors");
|
|
79
|
+
var logger_1 = require("../logger");
|
|
80
|
+
function sendToGoogleChat(messageText_1) {
|
|
81
|
+
return __awaiter(this, arguments, void 0, function (messageText, _a) {
|
|
82
|
+
var chatWebhooksString, msg, chatWebhooks, chatChannel, chatWebhookUrl, msg, formattedMessageText, error_1;
|
|
83
|
+
var _b, _c, _d;
|
|
84
|
+
var _e = _a === void 0 ? {} : _a, channel = _e.channel, _f = _e.shouldThrow, shouldThrow = _f === void 0 ? false : _f, env = _e.env;
|
|
85
|
+
return __generator(this, function (_g) {
|
|
86
|
+
switch (_g.label) {
|
|
87
|
+
case 0:
|
|
88
|
+
chatWebhooksString = process.env.GOOGLE_CHAT_WEBHOOKS;
|
|
89
|
+
if (!chatWebhooksString) {
|
|
90
|
+
msg = "GOOGLE_CHAT_WEBHOOKS not set. Google Chat message not sent";
|
|
91
|
+
Sentry.captureException(new Error(msg));
|
|
92
|
+
logger_1.logger.error(msg);
|
|
93
|
+
return [2 /*return*/];
|
|
94
|
+
}
|
|
95
|
+
chatWebhooks = JSON.parse(chatWebhooksString !== null && chatWebhooksString !== void 0 ? chatWebhooksString : "{}");
|
|
96
|
+
chatChannel = channel !== null && channel !== void 0 ? channel : "default";
|
|
97
|
+
chatWebhookUrl = (_b = chatWebhooks[chatChannel]) !== null && _b !== void 0 ? _b : chatWebhooks.default;
|
|
98
|
+
if (!chatWebhookUrl) {
|
|
99
|
+
msg = "No webhook url set in env for ".concat(chatChannel, ". Google Chat message not sent");
|
|
100
|
+
Sentry.captureException(new Error(msg));
|
|
101
|
+
logger_1.logger.error(msg);
|
|
102
|
+
return [2 /*return*/];
|
|
103
|
+
}
|
|
104
|
+
formattedMessageText = messageText;
|
|
105
|
+
if (env) {
|
|
106
|
+
formattedMessageText = "[".concat(env.toUpperCase(), "] ").concat(messageText);
|
|
107
|
+
}
|
|
108
|
+
_g.label = 1;
|
|
109
|
+
case 1:
|
|
110
|
+
_g.trys.push([1, 3, , 4]);
|
|
111
|
+
return [4 /*yield*/, axios_1.default.post(chatWebhookUrl, { text: formattedMessageText })];
|
|
112
|
+
case 2:
|
|
113
|
+
_g.sent();
|
|
114
|
+
return [3 /*break*/, 4];
|
|
115
|
+
case 3:
|
|
116
|
+
error_1 = _g.sent();
|
|
117
|
+
logger_1.logger.error("Error posting to Google Chat: ".concat((_c = error_1.text) !== null && _c !== void 0 ? _c : error_1.message));
|
|
118
|
+
Sentry.captureException(error_1);
|
|
119
|
+
if (shouldThrow) {
|
|
120
|
+
throw new errors_1.APIError({
|
|
121
|
+
status: 500,
|
|
122
|
+
title: "Error posting to Google Chat: ".concat((_d = error_1.text) !== null && _d !== void 0 ? _d : error_1.message),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return [3 /*break*/, 4];
|
|
126
|
+
case 4: return [2 /*return*/];
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|