@oneuptime/common 12.0.27 → 12.0.29
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/Models/AnalyticsModels/RumSessionChunk.ts +52 -0
- package/Models/DatabaseModels/CloudResource.ts +17 -1
- package/Models/DatabaseModels/DashboardDomain.ts +43 -0
- package/Models/DatabaseModels/MonitorTemplate.ts +15 -3
- package/Models/DatabaseModels/RumApplication.ts +35 -2
- package/Models/DatabaseModels/StatusPageDomain.ts +43 -0
- package/Server/API/DashboardDomainAPI.ts +74 -0
- package/Server/API/MicrosoftTeamsAPI.ts +81 -180
- package/Server/API/StatusPageDomainAPI.ts +74 -0
- package/Server/API/TelemetryAPI.ts +104 -15
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790200000000-AllowNullMonitorNameOnMonitorTemplate.ts +43 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790300000000-AddCertificateReissueRequestedAtToDomains.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
- package/Server/Middleware/ProjectAuthorization.ts +6 -1
- package/Server/Services/DashboardDomainService.ts +131 -0
- package/Server/Services/LogPipelineProcessorService.ts +88 -0
- package/Server/Services/MonitorTemplateService.ts +70 -11
- package/Server/Services/StatusPageDomainService.ts +163 -3
- package/Server/Services/StatusPagePrivateUserSessionService.ts +197 -56
- package/Server/Types/Domain.ts +17 -0
- package/Server/Utils/APIKey/AccessPermission.ts +24 -0
- package/Server/Utils/Greenlock/Greenlock.ts +156 -58
- package/Server/Utils/LogPipelineProcessorValidation.ts +112 -0
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +1094 -45
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +153 -17
- package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +12 -5
- package/Server/Utils/SessionReplay/SessionReplayIdentity.ts +102 -0
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +11 -2
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +23 -11
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +0 -170
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Authorization.ts +158 -0
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +23 -11
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +35 -13
- package/Tests/App/Dashboard/MonitorTemplateColumnAndFacet.test.tsx +505 -0
- package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +106 -0
- package/Tests/App/StatusPage/StatusPageLoginCodeUtil.test.ts +84 -0
- package/Tests/App/StatusPage/StatusPageRedirectSafety.test.ts +119 -0
- package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +81 -0
- package/Tests/Models/MonitorTemplateMonitorNameColumn.test.ts +258 -0
- package/Tests/Server/API/CustomDomainReissueSslAPI.test.ts +469 -0
- package/Tests/Server/API/MicrosoftTeamsBotMessagesEndpoint.test.ts +729 -0
- package/Tests/Server/API/MicrosoftTeamsBotTestEndpoint.test.ts +26 -0
- package/Tests/Server/API/MicrosoftTeamsLegacyWebhookRemoval.test.ts +402 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +232 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -0
- package/Tests/Server/Services/AddCertificateReissueRequestedAtToDomainsMigration.test.ts +287 -0
- package/Tests/Server/Services/CustomDomainCertificateReissue.test.ts +477 -0
- package/Tests/Server/Services/LogPipelineProcessorSaveValidation.test.ts +249 -0
- package/Tests/Server/Services/MonitorTemplateServiceBulkSync.test.ts +549 -0
- package/Tests/Server/Services/MonitorTemplateServiceNetworkDeviceSync.test.ts +16 -3
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +57 -0
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +151 -15
- package/Tests/Server/Services/StatusPagePrivateUserSessionService.test.ts +587 -0
- package/Tests/Server/Types/Database/Permissions/ApiKeyFileAccess.test.ts +286 -0
- package/Tests/Server/Types/Database/Permissions/MonitorTemplateColumnAccess.test.ts +328 -0
- package/Tests/Server/Types/Database/QueryHelperFindWithSameTextAndIsNull.test.ts +83 -0
- package/Tests/Server/Utils/AI/SRE/ConfidenceSignal.test.ts +377 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +16 -1
- package/Tests/Server/Utils/Greenlock/CertificateRenewalSchedule.test.ts +250 -0
- package/Tests/Server/Utils/LogPipelineProcessorValidation.test.ts +198 -0
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +48 -9
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsAuth.test.ts +726 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +74 -11
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsErrorHandling.test.ts +1107 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +20 -3
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +51 -11
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +1246 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsRequestContract.test.ts +961 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsResponseParsing.test.ts +653 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsActionAuthorization.test.ts +880 -0
- package/Tests/Types/API/HTTPResponse.test.ts +175 -0
- package/Tests/Types/API/Route.test.ts +36 -4
- package/Tests/Types/Database/DatabaseProperty.test.ts +171 -0
- package/Tests/Types/DateLocalShortDateTimeString.test.ts +518 -0
- package/Tests/Types/DateLocalTimeString.test.ts +259 -0
- package/Tests/Types/DateUserPrefers12HourFormat.test.ts +316 -0
- package/Tests/UI/Components/LogsHistogram.test.tsx +41 -2
- package/Tests/UI/Components/LogsViewerEmptyStateTimeRange.test.tsx +212 -0
- package/Tests/UI/Components/TelemetryChartClockFormat.test.tsx +359 -0
- package/Tests/UI/Components/TimeRangePickerClockFormat.test.tsx +422 -0
- package/Tests/UI/Components/TimeRangePickerDropdown.test.tsx +146 -8
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsMessagingEndpointGuidance.test.tsx +520 -0
- package/Tests/UI/Utils/Navigation.test.ts +82 -0
- package/Tests/Utils/Array.test.ts +100 -0
- package/Tests/Utils/CertificateReissue.test.ts +225 -0
- package/Tests/Utils/Grok/Grok.test.ts +492 -0
- package/Tests/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.test.ts +181 -13
- package/Types/API/Route.ts +20 -5
- package/Types/Date.ts +143 -13
- package/Types/Rum/SessionReplay.ts +76 -1
- package/UI/Components/Date/TimeRangePickerDropdown.tsx +9 -5
- package/UI/Components/LogsViewer/LogsViewer.tsx +12 -7
- package/UI/Components/LogsViewer/components/HistogramTooltip.tsx +18 -17
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +21 -28
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +2 -4
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +2 -4
- package/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.tsx +17 -16
- package/UI/Utils/Navigation.ts +42 -0
- package/Utils/Array.ts +37 -0
- package/Utils/CertificateReissue.ts +128 -0
- package/Utils/Grok/Grok.ts +461 -0
- package/Utils/Grok/GrokPatterns.ts +118 -0
- package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +58 -6
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +48 -0
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResource.js +19 -2
- package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardDomain.js +44 -0
- package/build/dist/Models/DatabaseModels/DashboardDomain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +17 -4
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +37 -3
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageDomain.js +44 -0
- package/build/dist/Models/DatabaseModels/StatusPageDomain.js.map +1 -1
- package/build/dist/Server/API/DashboardDomainAPI.js +43 -1
- package/build/dist/Server/API/DashboardDomainAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +74 -118
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageDomainAPI.js +43 -1
- package/build/dist/Server/API/StatusPageDomainAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +67 -14
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790200000000-AllowNullMonitorNameOnMonitorTemplate.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790200000000-AllowNullMonitorNameOnMonitorTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790300000000-AddCertificateReissueRequestedAtToDomains.js +28 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790300000000-AddCertificateReissueRequestedAtToDomains.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +6 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Services/DashboardDomainService.js +104 -0
- package/build/dist/Server/Services/DashboardDomainService.js.map +1 -1
- package/build/dist/Server/Services/LogPipelineProcessorService.js +65 -0
- package/build/dist/Server/Services/LogPipelineProcessorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +57 -11
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageDomainService.js +132 -3
- package/build/dist/Server/Services/StatusPageDomainService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js +112 -32
- package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js.map +1 -1
- package/build/dist/Server/Types/Domain.js +16 -0
- package/build/dist/Server/Types/Domain.js.map +1 -1
- package/build/dist/Server/Utils/APIKey/AccessPermission.js +24 -0
- package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
- package/build/dist/Server/Utils/Greenlock/Greenlock.js +110 -35
- package/build/dist/Server/Utils/Greenlock/Greenlock.js.map +1 -1
- package/build/dist/Server/Utils/LogPipelineProcessorValidation.js +77 -0
- package/build/dist/Server/Utils/LogPipelineProcessorValidation.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +777 -36
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +108 -17
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayIdentity.js +59 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayIdentity.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +9 -2
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +17 -6
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +0 -159
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Authorization.js +128 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Authorization.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +17 -6
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +25 -13
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/API/Route.js +16 -5
- package/build/dist/Types/API/Route.js.map +1 -1
- package/build/dist/Types/Date.js +115 -13
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +38 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +9 -5
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +12 -7
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/HistogramTooltip.js +15 -14
- package/build/dist/UI/Components/LogsViewer/components/HistogramTooltip.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +17 -22
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +2 -4
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +2 -4
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js +15 -14
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +30 -0
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/Utils/Array.js +25 -0
- package/build/dist/Utils/Array.js.map +1 -1
- package/build/dist/Utils/CertificateReissue.js +97 -0
- package/build/dist/Utils/CertificateReissue.js.map +1 -0
- package/build/dist/Utils/Grok/Grok.js +324 -0
- package/build/dist/Utils/Grok/Grok.js.map +1 -0
- package/build/dist/Utils/Grok/GrokPatterns.js +112 -0
- package/build/dist/Utils/Grok/GrokPatterns.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +63 -3
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -1
- package/package.json +1 -1
- package/UI/Utils/JsonWebToken.ts +0 -14
- package/build/dist/UI/Utils/JsonWebToken.js +0 -10
- package/build/dist/UI/Utils/JsonWebToken.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { generateKeyPairSync } from "crypto";
|
|
2
2
|
import jwt from "jsonwebtoken";
|
|
3
3
|
import GoogleSecOpsClient, {
|
|
4
|
+
FetchAlertsResult,
|
|
4
5
|
FetchLike,
|
|
5
6
|
FetchResponseLike,
|
|
6
7
|
} from "../../../../Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient";
|
|
@@ -25,10 +26,20 @@ const { privateKey } = generateKeyPairSync("rsa", {
|
|
|
25
26
|
publicKeyEncoding: { type: "spki", format: "pem" },
|
|
26
27
|
});
|
|
27
28
|
|
|
29
|
+
/*
|
|
30
|
+
* token_uri has to be a real Google host now. It arrives inside
|
|
31
|
+
* customer-supplied service-account JSON and is the address this client
|
|
32
|
+
* POSTs a signed assertion for their service account to, so an arbitrary
|
|
33
|
+
* host there is a credential-exfiltration primitive rather than a
|
|
34
|
+
* configuration choice — the client allowlists it at construction. The
|
|
35
|
+
* fetch is injected, so nothing here touches the network either way.
|
|
36
|
+
*/
|
|
37
|
+
const TOKEN_URI: string = "https://oauth2.googleapis.com/token";
|
|
38
|
+
|
|
28
39
|
const SERVICE_ACCOUNT_JSON: string = JSON.stringify({
|
|
29
40
|
client_email: "poller@example.iam.gserviceaccount.com",
|
|
30
41
|
private_key: privateKey,
|
|
31
|
-
token_uri:
|
|
42
|
+
token_uri: TOKEN_URI,
|
|
32
43
|
});
|
|
33
44
|
|
|
34
45
|
const INSTANCE: string =
|
|
@@ -157,10 +168,27 @@ describe("GoogleSecOpsClient.extractAlerts", () => {
|
|
|
157
168
|
).toEqual([{ id: "d" }]);
|
|
158
169
|
});
|
|
159
170
|
|
|
160
|
-
|
|
171
|
+
/*
|
|
172
|
+
* extractAlerts is the legacy top-level fallback, and it is reached only
|
|
173
|
+
* after parseAlertsBody has already recognized the body. So [] here means
|
|
174
|
+
* "this recognized shape carried nothing", and is safe.
|
|
175
|
+
*
|
|
176
|
+
* It is emphatically NOT the client's answer to an unrecognized body.
|
|
177
|
+
* That used to be exactly what it was, and it is the bug the rewrite
|
|
178
|
+
* exists for: a body the client could not read came back as zero alerts,
|
|
179
|
+
* the poller read zero alerts as a healthy quiet window, and the cursor
|
|
180
|
+
* advanced past alerts nobody had ever seen. The second half of this test
|
|
181
|
+
* pins where that decision actually lives now, so this file cannot be
|
|
182
|
+
* read as evidence that an unknown body is harmless.
|
|
183
|
+
*/
|
|
184
|
+
test("returns [] for a recognized shape that carried nothing, while the body gate refuses it outright", () => {
|
|
161
185
|
expect(GoogleSecOpsClient.extractAlerts({ nope: true })).toEqual([]);
|
|
162
186
|
expect(GoogleSecOpsClient.extractAlerts("junk")).toEqual([]);
|
|
163
187
|
expect(GoogleSecOpsClient.extractAlerts(null)).toEqual([]);
|
|
188
|
+
|
|
189
|
+
expect(() => {
|
|
190
|
+
return GoogleSecOpsClient.parseAlertsBody(JSON.stringify({ nope: true }));
|
|
191
|
+
}).toThrow(APIException);
|
|
164
192
|
});
|
|
165
193
|
});
|
|
166
194
|
|
|
@@ -187,17 +215,28 @@ describe("GoogleSecOpsClient.fetchDetectionAlerts", () => {
|
|
|
187
215
|
{ status: 200, body: JSON.stringify({ alerts: [{ id: "a-1" }] }) },
|
|
188
216
|
]);
|
|
189
217
|
|
|
190
|
-
const
|
|
218
|
+
const result: FetchAlertsResult = await client.fetchDetectionAlerts({
|
|
191
219
|
startTime: new Date("2026-08-21T09:00:00.000Z"),
|
|
192
220
|
endTime: new Date("2026-08-21T10:00:00.000Z"),
|
|
193
221
|
});
|
|
194
222
|
|
|
195
|
-
expect(alerts).toEqual([{ id: "a-1" }]);
|
|
223
|
+
expect(result.alerts).toEqual([{ id: "a-1" }]);
|
|
224
|
+
|
|
225
|
+
/*
|
|
226
|
+
* The counts and flags are the point of the return type: a bare array
|
|
227
|
+
* could not tell the poller "the window was quiet" from "the window was
|
|
228
|
+
* truncated" or "the stream ended early", and all three used to arrive
|
|
229
|
+
* identically as [].
|
|
230
|
+
*/
|
|
231
|
+
expect(result.truncatedByCount).toBe(false);
|
|
232
|
+
expect(result.truncatedByBytes).toBe(false);
|
|
233
|
+
expect(result.chunkCount).toBe(1);
|
|
234
|
+
|
|
196
235
|
expect(requests).toHaveLength(2);
|
|
197
236
|
|
|
198
237
|
// Token exchange: form-encoded JWT-bearer grant against token_uri.
|
|
199
238
|
const tokenRequest: RecordedRequest = requests[0]!;
|
|
200
|
-
expect(tokenRequest.url).toBe(
|
|
239
|
+
expect(tokenRequest.url).toBe(TOKEN_URI);
|
|
201
240
|
expect(tokenRequest.method).toBe("POST");
|
|
202
241
|
expect(tokenRequest.headers["Content-Type"]).toBe(
|
|
203
242
|
"application/x-www-form-urlencoded",
|
|
@@ -214,19 +253,43 @@ describe("GoogleSecOpsClient.fetchDetectionAlerts", () => {
|
|
|
214
253
|
params.get("assertion") || "",
|
|
215
254
|
) as JSONObject;
|
|
216
255
|
expect(assertion["iss"]).toBe("poller@example.iam.gserviceaccount.com");
|
|
217
|
-
expect(assertion["aud"]).toBe(
|
|
256
|
+
expect(assertion["aud"]).toBe(TOKEN_URI);
|
|
218
257
|
expect(assertion["scope"]).toBe(
|
|
219
258
|
"https://www.googleapis.com/auth/cloud-platform",
|
|
220
259
|
);
|
|
221
260
|
|
|
222
261
|
// Alerts call: regional base URL, instance path, window params, Bearer.
|
|
223
262
|
const alertsRequest: RecordedRequest = requests[1]!;
|
|
224
|
-
|
|
225
|
-
|
|
263
|
+
const alertsUrl: URL = new URL(alertsRequest.url);
|
|
264
|
+
|
|
265
|
+
/*
|
|
266
|
+
* Parsed, not substring-matched.
|
|
267
|
+
*
|
|
268
|
+
* This assertion used to be two toContain calls, and that is how the
|
|
269
|
+
* production outage got out: the client was also sending a `pageSize`
|
|
270
|
+
* the endpoint does not accept, Chronicle 400'd every poll with
|
|
271
|
+
* "Unknown name pageSize", and both toContain calls went on passing,
|
|
272
|
+
* because an extra parameter cannot make a substring stop appearing.
|
|
273
|
+
* The whole query is pinned here, so an added, renamed or dropped
|
|
274
|
+
* parameter fails rather than hides.
|
|
275
|
+
*/
|
|
276
|
+
expect(`${alertsUrl.origin}${alertsUrl.pathname}`).toBe(
|
|
277
|
+
`https://us-chronicle.googleapis.com/v1alpha/${INSTANCE}/legacy:legacyFetchAlertsView`,
|
|
278
|
+
);
|
|
279
|
+
|
|
280
|
+
expect([...alertsUrl.searchParams.keys()].sort()).toEqual([
|
|
281
|
+
"alertListOptions.maxReturnedAlerts",
|
|
282
|
+
"timeRange.endTime",
|
|
283
|
+
"timeRange.startTime",
|
|
284
|
+
]);
|
|
285
|
+
|
|
286
|
+
expect(alertsUrl.searchParams.get("timeRange.startTime")).toBe(
|
|
287
|
+
"2026-08-21T09:00:00.000Z",
|
|
226
288
|
);
|
|
227
|
-
expect(
|
|
228
|
-
|
|
289
|
+
expect(alertsUrl.searchParams.get("timeRange.endTime")).toBe(
|
|
290
|
+
"2026-08-21T10:00:00.000Z",
|
|
229
291
|
);
|
|
292
|
+
|
|
230
293
|
expect(alertsRequest.headers["Authorization"]).toBe("Bearer test-token");
|
|
231
294
|
});
|
|
232
295
|
|
|
@@ -248,7 +311,7 @@ describe("GoogleSecOpsClient.fetchDetectionAlerts", () => {
|
|
|
248
311
|
|
|
249
312
|
const tokenCalls: Array<RecordedRequest> = requests.filter(
|
|
250
313
|
(request: RecordedRequest): boolean => {
|
|
251
|
-
return request.url ===
|
|
314
|
+
return request.url === TOKEN_URI;
|
|
252
315
|
},
|
|
253
316
|
);
|
|
254
317
|
|