@terreno/api 0.0.16 → 0.0.18
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/.windsurfrules +107 -0
- package/AGENTS.md +313 -0
- package/README.md +3 -4
- package/biome.jsonc +1 -1
- package/dist/api.js +1 -1
- package/dist/api.query.test.js +1 -1
- package/dist/api.test.js +36 -1202
- package/dist/errors.js +1 -1
- package/dist/expressServer.d.ts +8 -2
- package/dist/expressServer.js +8 -1
- package/dist/githubAuth.d.ts +64 -0
- package/dist/githubAuth.js +293 -0
- package/dist/githubAuth.test.d.ts +1 -0
- package/dist/githubAuth.test.js +351 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/logger.js +1 -1
- package/dist/middleware.js +1 -1
- package/dist/notifiers/googleChatNotifier.js +1 -1
- package/dist/notifiers/googleChatNotifier.test.js +1 -1
- package/dist/notifiers/slackNotifier.js +1 -1
- package/dist/notifiers/slackNotifier.test.js +1 -1
- package/dist/notifiers/zoomNotifier.js +1 -1
- package/dist/notifiers/zoomNotifier.test.js +1 -1
- package/dist/permissions.js +1 -1
- package/dist/tests/bunSetup.js +2 -2
- package/package.json +4 -2
- package/src/api.query.test.ts +1 -1
- package/src/api.test.ts +30 -984
- package/src/api.ts +1 -1
- package/src/errors.ts +1 -1
- package/src/expressServer.ts +18 -2
- package/src/githubAuth.test.ts +223 -0
- package/src/githubAuth.ts +335 -0
- package/src/index.ts +1 -0
- package/src/logger.ts +1 -1
- package/src/middleware.ts +1 -1
- package/src/notifiers/googleChatNotifier.test.ts +1 -1
- package/src/notifiers/googleChatNotifier.ts +1 -1
- package/src/notifiers/slackNotifier.test.ts +1 -1
- package/src/notifiers/slackNotifier.ts +1 -1
- package/src/notifiers/zoomNotifier.test.ts +1 -1
- package/src/notifiers/zoomNotifier.ts +1 -1
- package/src/permissions.ts +1 -1
- package/src/tests/bunSetup.ts +2 -2
- /package/{CLAUDE.md → .cursorrules} +0 -0
|
@@ -0,0 +1,351 @@
|
|
|
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
|
+
var bun_test_1 = require("bun:test");
|
|
76
|
+
var mongoose_1 = __importStar(require("mongoose"));
|
|
77
|
+
var passport_local_mongoose_1 = __importDefault(require("passport-local-mongoose"));
|
|
78
|
+
var supertest_1 = __importDefault(require("supertest"));
|
|
79
|
+
var expressServer_1 = require("./expressServer");
|
|
80
|
+
var githubAuth_1 = require("./githubAuth");
|
|
81
|
+
var logger_1 = require("./logger");
|
|
82
|
+
var plugins_1 = require("./plugins");
|
|
83
|
+
// Create schema for GitHub-enabled user
|
|
84
|
+
var testUserSchema = new mongoose_1.Schema({
|
|
85
|
+
admin: { default: false, type: Boolean },
|
|
86
|
+
name: String,
|
|
87
|
+
username: String,
|
|
88
|
+
});
|
|
89
|
+
testUserSchema.plugin(passport_local_mongoose_1.default, {
|
|
90
|
+
attemptsField: "attempts",
|
|
91
|
+
interval: 1,
|
|
92
|
+
limitAttempts: true,
|
|
93
|
+
maxAttempts: 3,
|
|
94
|
+
maxInterval: 1,
|
|
95
|
+
usernameCaseInsensitive: true,
|
|
96
|
+
usernameField: "email",
|
|
97
|
+
});
|
|
98
|
+
testUserSchema.plugin(plugins_1.createdUpdatedPlugin);
|
|
99
|
+
testUserSchema.plugin(plugins_1.isDisabledPlugin);
|
|
100
|
+
testUserSchema.plugin(githubAuth_1.githubUserPlugin);
|
|
101
|
+
// Get or create model to avoid model redefinition errors
|
|
102
|
+
var GitHubTestUserModel = mongoose_1.default.models.GitHubTestUser || (0, mongoose_1.model)("GitHubTestUser", testUserSchema);
|
|
103
|
+
// Connect to database before tests
|
|
104
|
+
var connectDb = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
105
|
+
return __generator(this, function (_a) {
|
|
106
|
+
switch (_a.label) {
|
|
107
|
+
case 0:
|
|
108
|
+
if (!(mongoose_1.default.connection.readyState === 0)) return [3 /*break*/, 2];
|
|
109
|
+
return [4 /*yield*/, mongoose_1.default
|
|
110
|
+
.connect("mongodb://127.0.0.1/terreno?&connectTimeoutMS=360000")
|
|
111
|
+
.catch(logger_1.logger.catch)];
|
|
112
|
+
case 1:
|
|
113
|
+
_a.sent();
|
|
114
|
+
_a.label = 2;
|
|
115
|
+
case 2:
|
|
116
|
+
process.env.REFRESH_TOKEN_SECRET = "refresh_secret";
|
|
117
|
+
process.env.TOKEN_SECRET = "secret";
|
|
118
|
+
process.env.TOKEN_EXPIRES_IN = "30m";
|
|
119
|
+
process.env.TOKEN_ISSUER = "example.com";
|
|
120
|
+
process.env.SESSION_SECRET = "session";
|
|
121
|
+
return [2 /*return*/];
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}); };
|
|
125
|
+
(0, bun_test_1.describe)("githubUserPlugin", function () {
|
|
126
|
+
(0, bun_test_1.it)("adds GitHub fields to schema", function () {
|
|
127
|
+
var paths = testUserSchema.paths;
|
|
128
|
+
(0, bun_test_1.expect)(paths.githubId).toBeDefined();
|
|
129
|
+
(0, bun_test_1.expect)(paths.githubUsername).toBeDefined();
|
|
130
|
+
(0, bun_test_1.expect)(paths.githubProfileUrl).toBeDefined();
|
|
131
|
+
(0, bun_test_1.expect)(paths.githubAvatarUrl).toBeDefined();
|
|
132
|
+
});
|
|
133
|
+
(0, bun_test_1.it)("githubId is indexed and sparse", function () {
|
|
134
|
+
var githubIdPath = testUserSchema.path("githubId");
|
|
135
|
+
(0, bun_test_1.expect)(githubIdPath.options.index).toBe(true);
|
|
136
|
+
(0, bun_test_1.expect)(githubIdPath.options.sparse).toBe(true);
|
|
137
|
+
(0, bun_test_1.expect)(githubIdPath.options.unique).toBe(true);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
(0, bun_test_1.describe)("GitHub auth routes", function () {
|
|
141
|
+
var app;
|
|
142
|
+
var agent;
|
|
143
|
+
(0, bun_test_1.beforeEach)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
144
|
+
function addRoutes(router) {
|
|
145
|
+
router.get("/test", function (_req, res) { return res.json({ ok: true }); });
|
|
146
|
+
}
|
|
147
|
+
var testUser;
|
|
148
|
+
return __generator(this, function (_a) {
|
|
149
|
+
switch (_a.label) {
|
|
150
|
+
case 0:
|
|
151
|
+
(0, bun_test_1.setSystemTime)();
|
|
152
|
+
return [4 /*yield*/, connectDb()];
|
|
153
|
+
case 1:
|
|
154
|
+
_a.sent();
|
|
155
|
+
return [4 /*yield*/, GitHubTestUserModel.deleteMany({})];
|
|
156
|
+
case 2:
|
|
157
|
+
_a.sent();
|
|
158
|
+
return [4 /*yield*/, GitHubTestUserModel.create({
|
|
159
|
+
admin: false,
|
|
160
|
+
email: "test@example.com",
|
|
161
|
+
name: "Test User",
|
|
162
|
+
})];
|
|
163
|
+
case 3:
|
|
164
|
+
testUser = _a.sent();
|
|
165
|
+
return [4 /*yield*/, testUser.setPassword("password123")];
|
|
166
|
+
case 4:
|
|
167
|
+
_a.sent();
|
|
168
|
+
return [4 /*yield*/, testUser.save()];
|
|
169
|
+
case 5:
|
|
170
|
+
_a.sent();
|
|
171
|
+
app = (0, expressServer_1.setupServer)({
|
|
172
|
+
addRoutes: addRoutes,
|
|
173
|
+
githubAuth: {
|
|
174
|
+
allowAccountLinking: true,
|
|
175
|
+
callbackURL: "http://localhost:9000/auth/github/callback",
|
|
176
|
+
clientId: "test-client-id",
|
|
177
|
+
clientSecret: "test-client-secret",
|
|
178
|
+
},
|
|
179
|
+
skipListen: true,
|
|
180
|
+
userModel: GitHubTestUserModel,
|
|
181
|
+
});
|
|
182
|
+
agent = supertest_1.default.agent(app);
|
|
183
|
+
return [2 /*return*/];
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}); });
|
|
187
|
+
(0, bun_test_1.afterEach)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
188
|
+
return __generator(this, function (_a) {
|
|
189
|
+
(0, bun_test_1.setSystemTime)();
|
|
190
|
+
return [2 /*return*/];
|
|
191
|
+
});
|
|
192
|
+
}); });
|
|
193
|
+
(0, bun_test_1.it)("GET /auth/github redirects to GitHub OAuth", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
194
|
+
var res;
|
|
195
|
+
return __generator(this, function (_a) {
|
|
196
|
+
switch (_a.label) {
|
|
197
|
+
case 0: return [4 /*yield*/, agent.get("/auth/github").expect(302)];
|
|
198
|
+
case 1:
|
|
199
|
+
res = _a.sent();
|
|
200
|
+
(0, bun_test_1.expect)(res.headers.location).toContain("github.com");
|
|
201
|
+
(0, bun_test_1.expect)(res.headers.location).toContain("client_id=test-client-id");
|
|
202
|
+
return [2 /*return*/];
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}); });
|
|
206
|
+
(0, bun_test_1.it)("GET /auth/github/failure returns 401", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
207
|
+
var res;
|
|
208
|
+
return __generator(this, function (_a) {
|
|
209
|
+
switch (_a.label) {
|
|
210
|
+
case 0: return [4 /*yield*/, agent.get("/auth/github/failure").expect(401)];
|
|
211
|
+
case 1:
|
|
212
|
+
res = _a.sent();
|
|
213
|
+
(0, bun_test_1.expect)(res.body.message).toBe("GitHub authentication failed");
|
|
214
|
+
return [2 /*return*/];
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}); });
|
|
218
|
+
(0, bun_test_1.it)("DELETE /auth/github/unlink requires authentication", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
219
|
+
var res;
|
|
220
|
+
return __generator(this, function (_a) {
|
|
221
|
+
switch (_a.label) {
|
|
222
|
+
case 0: return [4 /*yield*/, agent.delete("/auth/github/unlink").expect(401)];
|
|
223
|
+
case 1:
|
|
224
|
+
res = _a.sent();
|
|
225
|
+
(0, bun_test_1.expect)(res.body).toBeDefined();
|
|
226
|
+
return [2 /*return*/];
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}); });
|
|
230
|
+
(0, bun_test_1.it)("DELETE /auth/github/unlink works when authenticated with password", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
231
|
+
var loginRes, user, res, updatedUser;
|
|
232
|
+
return __generator(this, function (_a) {
|
|
233
|
+
switch (_a.label) {
|
|
234
|
+
case 0: return [4 /*yield*/, agent
|
|
235
|
+
.post("/auth/login")
|
|
236
|
+
.send({ email: "test@example.com", password: "password123" })
|
|
237
|
+
.expect(200)];
|
|
238
|
+
case 1:
|
|
239
|
+
loginRes = _a.sent();
|
|
240
|
+
return [4 /*yield*/, GitHubTestUserModel.findOne({ email: "test@example.com" })];
|
|
241
|
+
case 2:
|
|
242
|
+
user = _a.sent();
|
|
243
|
+
if (!user) return [3 /*break*/, 4];
|
|
244
|
+
user.githubId = "99999";
|
|
245
|
+
user.githubUsername = "testghuser";
|
|
246
|
+
return [4 /*yield*/, user.save()];
|
|
247
|
+
case 3:
|
|
248
|
+
_a.sent();
|
|
249
|
+
_a.label = 4;
|
|
250
|
+
case 4: return [4 /*yield*/, agent
|
|
251
|
+
.delete("/auth/github/unlink")
|
|
252
|
+
.set("authorization", "Bearer ".concat(loginRes.body.data.token))
|
|
253
|
+
.expect(200)];
|
|
254
|
+
case 5:
|
|
255
|
+
res = _a.sent();
|
|
256
|
+
(0, bun_test_1.expect)(res.body.data.message).toBe("GitHub account unlinked successfully");
|
|
257
|
+
return [4 /*yield*/, GitHubTestUserModel.findOne({ email: "test@example.com" })];
|
|
258
|
+
case 6:
|
|
259
|
+
updatedUser = _a.sent();
|
|
260
|
+
(0, bun_test_1.expect)(updatedUser.githubId).toBeUndefined();
|
|
261
|
+
(0, bun_test_1.expect)(updatedUser.githubUsername).toBeUndefined();
|
|
262
|
+
return [2 /*return*/];
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
}); });
|
|
266
|
+
(0, bun_test_1.it)("user can have both password and GitHub auth", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
267
|
+
var user, res, updatedUser;
|
|
268
|
+
return __generator(this, function (_a) {
|
|
269
|
+
switch (_a.label) {
|
|
270
|
+
case 0: return [4 /*yield*/, GitHubTestUserModel.findOne({ email: "test@example.com" })];
|
|
271
|
+
case 1:
|
|
272
|
+
user = _a.sent();
|
|
273
|
+
(0, bun_test_1.expect)(user).toBeDefined();
|
|
274
|
+
if (!user) {
|
|
275
|
+
return [2 /*return*/];
|
|
276
|
+
}
|
|
277
|
+
// Link GitHub
|
|
278
|
+
user.githubId = "88888";
|
|
279
|
+
user.githubUsername = "linkeduser";
|
|
280
|
+
return [4 /*yield*/, user.save()];
|
|
281
|
+
case 2:
|
|
282
|
+
_a.sent();
|
|
283
|
+
return [4 /*yield*/, agent
|
|
284
|
+
.post("/auth/login")
|
|
285
|
+
.send({ email: "test@example.com", password: "password123" })
|
|
286
|
+
.expect(200)];
|
|
287
|
+
case 3:
|
|
288
|
+
res = _a.sent();
|
|
289
|
+
(0, bun_test_1.expect)(res.body.data.token).toBeDefined();
|
|
290
|
+
return [4 /*yield*/, GitHubTestUserModel.findOne({ email: "test@example.com" })];
|
|
291
|
+
case 4:
|
|
292
|
+
updatedUser = _a.sent();
|
|
293
|
+
(0, bun_test_1.expect)(updatedUser).toBeDefined();
|
|
294
|
+
(0, bun_test_1.expect)(updatedUser.githubId).toBe("88888");
|
|
295
|
+
(0, bun_test_1.expect)(updatedUser.githubUsername).toBe("linkeduser");
|
|
296
|
+
return [2 /*return*/];
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
}); });
|
|
300
|
+
});
|
|
301
|
+
(0, bun_test_1.describe)("GitHub auth disabled", function () {
|
|
302
|
+
var app;
|
|
303
|
+
var agent;
|
|
304
|
+
(0, bun_test_1.beforeEach)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
305
|
+
function addRoutes(router) {
|
|
306
|
+
router.get("/test", function (_req, res) { return res.json({ ok: true }); });
|
|
307
|
+
}
|
|
308
|
+
return __generator(this, function (_a) {
|
|
309
|
+
switch (_a.label) {
|
|
310
|
+
case 0:
|
|
311
|
+
(0, bun_test_1.setSystemTime)();
|
|
312
|
+
return [4 /*yield*/, connectDb()];
|
|
313
|
+
case 1:
|
|
314
|
+
_a.sent();
|
|
315
|
+
return [4 /*yield*/, GitHubTestUserModel.deleteMany({})];
|
|
316
|
+
case 2:
|
|
317
|
+
_a.sent();
|
|
318
|
+
// Setup server WITHOUT GitHub auth
|
|
319
|
+
app = (0, expressServer_1.setupServer)({
|
|
320
|
+
addRoutes: addRoutes,
|
|
321
|
+
skipListen: true,
|
|
322
|
+
userModel: GitHubTestUserModel,
|
|
323
|
+
});
|
|
324
|
+
agent = supertest_1.default.agent(app);
|
|
325
|
+
return [2 /*return*/];
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
}); });
|
|
329
|
+
(0, bun_test_1.afterEach)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
330
|
+
return __generator(this, function (_a) {
|
|
331
|
+
(0, bun_test_1.setSystemTime)();
|
|
332
|
+
return [2 /*return*/];
|
|
333
|
+
});
|
|
334
|
+
}); });
|
|
335
|
+
(0, bun_test_1.it)("GitHub routes are not available when githubAuth is not configured", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
336
|
+
return __generator(this, function (_a) {
|
|
337
|
+
switch (_a.label) {
|
|
338
|
+
case 0: return [4 /*yield*/, agent.get("/auth/github").expect(404)];
|
|
339
|
+
case 1:
|
|
340
|
+
_a.sent();
|
|
341
|
+
return [4 /*yield*/, agent.get("/auth/github/callback").expect(404)];
|
|
342
|
+
case 2:
|
|
343
|
+
_a.sent();
|
|
344
|
+
return [4 /*yield*/, agent.delete("/auth/github/unlink").expect(404)];
|
|
345
|
+
case 3:
|
|
346
|
+
_a.sent();
|
|
347
|
+
return [2 /*return*/];
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
}); });
|
|
351
|
+
});
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@ __exportStar(require("./api"), exports);
|
|
|
18
18
|
__exportStar(require("./auth"), exports);
|
|
19
19
|
__exportStar(require("./errors"), exports);
|
|
20
20
|
__exportStar(require("./expressServer"), exports);
|
|
21
|
+
__exportStar(require("./githubAuth"), exports);
|
|
21
22
|
__exportStar(require("./logger"), exports);
|
|
22
23
|
__exportStar(require("./middleware"), exports);
|
|
23
24
|
__exportStar(require("./notifiers"), exports);
|
package/dist/logger.js
CHANGED
|
@@ -87,7 +87,7 @@ exports.logger = exports.winstonLogger = void 0;
|
|
|
87
87
|
exports.setupLogging = setupLogging;
|
|
88
88
|
var node_fs_1 = __importDefault(require("node:fs"));
|
|
89
89
|
var node_util_1 = require("node:util");
|
|
90
|
-
var Sentry = __importStar(require("@sentry/
|
|
90
|
+
var Sentry = __importStar(require("@sentry/bun"));
|
|
91
91
|
var winston_1 = __importDefault(require("winston"));
|
|
92
92
|
function isPrimitive(val) {
|
|
93
93
|
return val === null || (typeof val !== "object" && typeof val !== "function");
|
package/dist/middleware.js
CHANGED
|
@@ -34,7 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.sentryAppVersionMiddleware = sentryAppVersionMiddleware;
|
|
37
|
-
var Sentry = __importStar(require("@sentry/
|
|
37
|
+
var Sentry = __importStar(require("@sentry/bun"));
|
|
38
38
|
/**
|
|
39
39
|
* Express middleware that captures the app version from the request header
|
|
40
40
|
* and adds it as a tag to the current Sentry scope.
|
|
@@ -73,7 +73,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
73
73
|
};
|
|
74
74
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
75
|
exports.sendToGoogleChat = sendToGoogleChat;
|
|
76
|
-
var Sentry = __importStar(require("@sentry/
|
|
76
|
+
var Sentry = __importStar(require("@sentry/bun"));
|
|
77
77
|
var axios_1 = __importDefault(require("axios"));
|
|
78
78
|
var errors_1 = require("../errors");
|
|
79
79
|
var logger_1 = require("../logger");
|
|
@@ -100,7 +100,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
100
100
|
};
|
|
101
101
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
102
102
|
var bun_test_1 = require("bun:test");
|
|
103
|
-
var Sentry = __importStar(require("@sentry/
|
|
103
|
+
var Sentry = __importStar(require("@sentry/bun"));
|
|
104
104
|
var axios_1 = __importDefault(require("axios"));
|
|
105
105
|
var googleChatNotifier_1 = require("./googleChatNotifier");
|
|
106
106
|
(0, bun_test_1.describe)("sendToGoogleChat", function () {
|
|
@@ -73,7 +73,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
73
73
|
};
|
|
74
74
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
75
|
exports.sendToSlack = sendToSlack;
|
|
76
|
-
var Sentry = __importStar(require("@sentry/
|
|
76
|
+
var Sentry = __importStar(require("@sentry/bun"));
|
|
77
77
|
var axios_1 = __importDefault(require("axios"));
|
|
78
78
|
var errors_1 = require("../errors");
|
|
79
79
|
var logger_1 = require("../logger");
|
|
@@ -100,7 +100,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
100
100
|
};
|
|
101
101
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
102
102
|
var bun_test_1 = require("bun:test");
|
|
103
|
-
var Sentry = __importStar(require("@sentry/
|
|
103
|
+
var Sentry = __importStar(require("@sentry/bun"));
|
|
104
104
|
var axios_1 = __importDefault(require("axios"));
|
|
105
105
|
var slackNotifier_1 = require("./slackNotifier");
|
|
106
106
|
(0, bun_test_1.describe)("sendToSlack", function () {
|
|
@@ -73,7 +73,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
73
73
|
};
|
|
74
74
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
75
|
exports.sendToZoom = sendToZoom;
|
|
76
|
-
var Sentry = __importStar(require("@sentry/
|
|
76
|
+
var Sentry = __importStar(require("@sentry/bun"));
|
|
77
77
|
var axios_1 = __importDefault(require("axios"));
|
|
78
78
|
var errors_1 = require("../errors");
|
|
79
79
|
var logger_1 = require("../logger");
|
|
@@ -100,7 +100,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
100
100
|
};
|
|
101
101
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
102
102
|
var bun_test_1 = require("bun:test");
|
|
103
|
-
var Sentry = __importStar(require("@sentry/
|
|
103
|
+
var Sentry = __importStar(require("@sentry/bun"));
|
|
104
104
|
var axios_1 = __importDefault(require("axios"));
|
|
105
105
|
var zoomNotifier_1 = require("./zoomNotifier");
|
|
106
106
|
(0, bun_test_1.describe)("sendToZoom", function () {
|
package/dist/permissions.js
CHANGED
|
@@ -87,7 +87,7 @@ exports.Permissions = exports.OwnerQueryFilter = void 0;
|
|
|
87
87
|
exports.checkPermissions = checkPermissions;
|
|
88
88
|
exports.permissionMiddleware = permissionMiddleware;
|
|
89
89
|
// Defaults closed
|
|
90
|
-
var Sentry = __importStar(require("@sentry/
|
|
90
|
+
var Sentry = __importStar(require("@sentry/bun"));
|
|
91
91
|
var mongoose_1 = __importDefault(require("mongoose"));
|
|
92
92
|
var api_1 = require("./api");
|
|
93
93
|
var errors_1 = require("./errors");
|
package/dist/tests/bunSetup.js
CHANGED
|
@@ -162,8 +162,8 @@ captureConsoleMethod("debug");
|
|
|
162
162
|
(0, bun_test_1.afterEach)(function () {
|
|
163
163
|
logs = [];
|
|
164
164
|
});
|
|
165
|
-
// Mock @sentry/
|
|
166
|
-
bun_test_1.mock.module("@sentry/
|
|
165
|
+
// Mock @sentry/bun module
|
|
166
|
+
bun_test_1.mock.module("@sentry/bun", function () {
|
|
167
167
|
var mockFn = function () { return (0, bun_test_1.mock)(function () { }); };
|
|
168
168
|
// Mock Scope
|
|
169
169
|
var mockScope = {
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"url": "https://github.com/FlourishHealth/terreno/issues"
|
|
5
5
|
},
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@sentry/
|
|
7
|
+
"@sentry/bun": "^10.25.0",
|
|
8
8
|
"@sentry/profiling-node": "^10.25.0",
|
|
9
9
|
"@types/qs": "^6.14.0",
|
|
10
10
|
"@wesleytodd/openapi": "^1.1.0",
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"on-finished": "^2.3.0",
|
|
24
24
|
"passport": "^0.7.0",
|
|
25
25
|
"passport-anonymous": "^1.0.1",
|
|
26
|
+
"passport-github2": "^0.1.12",
|
|
26
27
|
"passport-jwt": "^4.0.0",
|
|
27
28
|
"passport-local": "^1.0.0",
|
|
28
29
|
"passport-local-mongoose": "^9.0.1",
|
|
@@ -44,6 +45,7 @@
|
|
|
44
45
|
"@types/on-finished": "^2.3.4",
|
|
45
46
|
"@types/passport": "^1.0.17",
|
|
46
47
|
"@types/passport-anonymous": "^1.0.5",
|
|
48
|
+
"@types/passport-github2": "^1.2.9",
|
|
47
49
|
"@types/passport-jwt": "^4.0.1",
|
|
48
50
|
"@types/passport-local": "^1.0.38",
|
|
49
51
|
"@types/sinon": "^17.0.4",
|
|
@@ -85,5 +87,5 @@
|
|
|
85
87
|
"updateSnapshot": "bun test --update-snapshots"
|
|
86
88
|
},
|
|
87
89
|
"types": "dist/index.d.ts",
|
|
88
|
-
"version": "0.0.
|
|
90
|
+
"version": "0.0.18"
|
|
89
91
|
}
|
package/src/api.query.test.ts
CHANGED