@activecollab/components 2.0.349 → 2.0.350

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.
@@ -1,4 +1,5 @@
1
- import React, { useMemo, useState } from "react";
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import React, { useCallback, useMemo, useState } from "react";
2
3
  import styled from "styled-components";
3
4
  import { Button } from "../../components/Button";
4
5
  import { Chip } from "../../components/Chip";
@@ -58,6 +59,46 @@ export const WEBHOOK_CONNECTIONS = [{
58
59
  name: "Acme Community",
59
60
  service: "gitlab"
60
61
  }];
62
+
63
+ /**
64
+ * Repositories that belong to the connections above. A webhook delivery is
65
+ * always scoped to one repository, and a repository belongs to exactly one
66
+ * connection — so the Repository filter can be narrowed to the connection(s)
67
+ * currently selected in the Connection filter.
68
+ */
69
+ export const WEBHOOK_REPOSITORIES = [{
70
+ id: "ac-feather",
71
+ path: "activecollab/feather",
72
+ connectionId: "gh-activecollab"
73
+ }, {
74
+ id: "ac-backend",
75
+ path: "activecollab/backend",
76
+ connectionId: "gh-activecollab"
77
+ }, {
78
+ id: "ab-animus",
79
+ path: "abstergo/animus",
80
+ connectionId: "gh-abstergo"
81
+ }, {
82
+ id: "bi-tool-time",
83
+ path: "binford/tool-time",
84
+ connectionId: "gh-binford"
85
+ }, {
86
+ id: "pl-gateway",
87
+ path: "platform/api-gateway",
88
+ connectionId: "gl-platform"
89
+ }, {
90
+ id: "co-handbook",
91
+ path: "content/handbook",
92
+ connectionId: "gl-content"
93
+ }, {
94
+ id: "co-marketing",
95
+ path: "content/marketing-site",
96
+ connectionId: "gl-content"
97
+ }, {
98
+ id: "acme-ce",
99
+ path: "acme/community-edition",
100
+ connectionId: "gl-acme-ce"
101
+ }];
61
102
  const EVENT_KIND_LABELS = {
62
103
  issue: "Issue",
63
104
  push: "Push",
@@ -207,6 +248,7 @@ const PAYLOAD_PUSH = JSON.stringify({
207
248
  const WEBHOOK_LOGS = [{
208
249
  id: "log-7",
209
250
  connectionId: "gh-activecollab",
251
+ repositoryId: "ac-feather",
210
252
  eventKind: "issue",
211
253
  status: "processed",
212
254
  deliveryIdentifier: "d3b07384-d9a0-4c9b-8f1e-2a6f1b9c4e21",
@@ -217,6 +259,7 @@ const WEBHOOK_LOGS = [{
217
259
  }, {
218
260
  id: "log-6",
219
261
  connectionId: "gl-content",
262
+ repositoryId: "co-handbook",
220
263
  eventKind: "merge_request",
221
264
  status: "skipped",
222
265
  deliveryIdentifier: "b1946ac9-2f3a-4c0d-9b7e-1d2c3e4f5a6b",
@@ -227,6 +270,7 @@ const WEBHOOK_LOGS = [{
227
270
  }, {
228
271
  id: "log-5",
229
272
  connectionId: "gh-activecollab",
273
+ repositoryId: "ac-backend",
230
274
  eventKind: "issue",
231
275
  status: "failed",
232
276
  deliveryIdentifier: "9c1185a5-c5e9-4e3f-8a1b-7d6e5f4c3b2a",
@@ -237,6 +281,7 @@ const WEBHOOK_LOGS = [{
237
281
  }, {
238
282
  id: "log-4",
239
283
  connectionId: "gl-content",
284
+ repositoryId: "co-handbook",
240
285
  eventKind: "push",
241
286
  status: "processed",
242
287
  deliveryIdentifier: "f7c3bc1d-8c5a-4b2e-9f0a-1b2c3d4e5f60",
@@ -247,6 +292,7 @@ const WEBHOOK_LOGS = [{
247
292
  }, {
248
293
  id: "log-3",
249
294
  connectionId: "gh-activecollab",
295
+ repositoryId: "ac-feather",
250
296
  eventKind: "ping",
251
297
  status: "unhandled",
252
298
  deliveryIdentifier: "1574bddb-75c3-4b1e-8a9c-0d1e2f3a4b5c",
@@ -260,6 +306,7 @@ const WEBHOOK_LOGS = [{
260
306
  }, {
261
307
  id: "log-2",
262
308
  connectionId: "gl-content",
309
+ repositoryId: "co-marketing",
263
310
  eventKind: "issue",
264
311
  status: "received",
265
312
  deliveryIdentifier: "0716d970-2b9e-4a1d-9c3f-5e6a7b8c9d01",
@@ -269,6 +316,7 @@ const WEBHOOK_LOGS = [{
269
316
  }, {
270
317
  id: "log-1",
271
318
  connectionId: "gh-activecollab",
319
+ repositoryId: "ac-feather",
272
320
  eventKind: "issue",
273
321
  status: "processed",
274
322
  deliveryIdentifier: "fa3ebd6742c360b2d9652b7f78d9bd7d",
@@ -279,6 +327,7 @@ const WEBHOOK_LOGS = [{
279
327
  }, {
280
328
  id: "log-1-replay",
281
329
  connectionId: "gh-activecollab",
330
+ repositoryId: "ac-feather",
282
331
  eventKind: "issue",
283
332
  status: "duplicate",
284
333
  deliveryIdentifier: "fa3ebd6742c360b2d9652b7f78d9bd7d",
@@ -428,19 +477,19 @@ export const WebhookLogsDialog = _ref5 => {
428
477
  let open = _ref5.open,
429
478
  onClose = _ref5.onClose,
430
479
  initialConnectionId = _ref5.initialConnectionId,
431
- connectionIds = _ref5.connectionIds;
480
+ connectionIds = _ref5.connectionIds,
481
+ repositoryIds = _ref5.repositoryIds;
432
482
  const _useState3 = useState(() => {
483
+ const initial = {};
433
484
  if (connectionIds && connectionIds.length > 0) {
434
- return {
435
- connection: connectionIds
436
- };
485
+ initial.connection = connectionIds;
486
+ } else if (initialConnectionId) {
487
+ initial.connection = [initialConnectionId];
437
488
  }
438
- if (initialConnectionId) {
439
- return {
440
- connection: [initialConnectionId]
441
- };
489
+ if (repositoryIds && repositoryIds.length > 0) {
490
+ initial.repository = repositoryIds;
442
491
  }
443
- return {};
492
+ return initial;
444
493
  }),
445
494
  filters = _useState3[0],
446
495
  setFilters = _useState3[1];
@@ -451,37 +500,62 @@ export const WebhookLogsDialog = _ref5 => {
451
500
  });
452
501
  return map;
453
502
  }, []);
454
- const filterData = useMemo(() => [{
455
- id: "connection",
456
- title: "Connection",
457
- submenu: WEBHOOK_CONNECTIONS.map(connection => ({
458
- id: connection.id,
459
- name: connection.name
460
- }))
461
- }, {
462
- id: "event_type",
463
- title: "Event Type",
464
- submenu: Array.from(new Set(WEBHOOK_LOGS.map(log => log.eventKind))).map(eventKind => ({
465
- id: eventKind,
466
- name: EVENT_KIND_LABELS[eventKind]
467
- }))
468
- }, {
469
- id: "status",
470
- title: "Processing Status",
471
- submenu: Object.keys(STATUS_LABELS).map(status => ({
472
- id: status,
473
- name: STATUS_LABELS[status]
474
- }))
475
- }], []);
503
+ const filterData = useMemo(() => {
504
+ var _filters$connection;
505
+ // The Repository options narrow to the connection(s) currently selected in
506
+ // the Connection filter; with no connection selected, every repository is
507
+ // offered. Displayed as "path (connection name)" (matching the project
508
+ // "..." menu Repositories list) and sorted by repository path.
509
+ const selectedConnections = (_filters$connection = filters.connection) != null ? _filters$connection : [];
510
+ const repositorySubmenu = WEBHOOK_REPOSITORIES.filter(repository => selectedConnections.length === 0 || selectedConnections.includes(repository.connectionId)).slice().sort((a, b) => a.path.localeCompare(b.path)).map(repository => {
511
+ var _connectionsById$repo, _connectionsById$repo2;
512
+ return {
513
+ id: repository.id,
514
+ name: repository.path + " (" + ((_connectionsById$repo = (_connectionsById$repo2 = connectionsById[repository.connectionId]) == null ? void 0 : _connectionsById$repo2.name) != null ? _connectionsById$repo : "Unknown") + ")"
515
+ };
516
+ });
517
+ return [{
518
+ id: "connection",
519
+ title: "Connection",
520
+ submenu: WEBHOOK_CONNECTIONS.map(connection => ({
521
+ id: connection.id,
522
+ name: connection.name
523
+ }))
524
+ }, {
525
+ id: "repository",
526
+ title: "Repository",
527
+ searchPlaceholder: "Search repositories",
528
+ disableInternalSort: true,
529
+ submenu: repositorySubmenu
530
+ }, {
531
+ id: "event_type",
532
+ title: "Event Type",
533
+ submenu: Array.from(new Set(WEBHOOK_LOGS.map(log => log.eventKind))).map(eventKind => ({
534
+ id: eventKind,
535
+ name: EVENT_KIND_LABELS[eventKind]
536
+ }))
537
+ }, {
538
+ id: "status",
539
+ title: "Processing Status",
540
+ submenu: Object.keys(STATUS_LABELS).map(status => ({
541
+ id: status,
542
+ name: STATUS_LABELS[status]
543
+ }))
544
+ }];
545
+ }, [filters.connection, connectionsById]);
476
546
  const visibleLogs = useMemo(() => {
477
- var _filters$connection, _filters$event_type, _filters$status;
478
- const byConnection = (_filters$connection = filters.connection) != null ? _filters$connection : [];
547
+ var _filters$connection2, _filters$repository, _filters$event_type, _filters$status;
548
+ const byConnection = (_filters$connection2 = filters.connection) != null ? _filters$connection2 : [];
549
+ const byRepository = (_filters$repository = filters.repository) != null ? _filters$repository : [];
479
550
  const byEvent = (_filters$event_type = filters.event_type) != null ? _filters$event_type : [];
480
551
  const byStatus = (_filters$status = filters.status) != null ? _filters$status : [];
481
552
  return WEBHOOK_LOGS.filter(log => {
482
553
  if (byConnection.length && !byConnection.includes(log.connectionId)) {
483
554
  return false;
484
555
  }
556
+ if (byRepository.length && !byRepository.includes(log.repositoryId)) {
557
+ return false;
558
+ }
485
559
  if (byEvent.length && !byEvent.includes(log.eventKind)) {
486
560
  return false;
487
561
  }
@@ -491,6 +565,30 @@ export const WebhookLogsDialog = _ref5 => {
491
565
  return true;
492
566
  }).sort((a, b) => b.receivedAt - a.receivedAt);
493
567
  }, [filters]);
568
+
569
+ // When the Connection filter narrows, drop any selected repositories that no
570
+ // longer belong to a selected connection — otherwise a stale repository
571
+ // selection would silently filter every log out.
572
+ const handleFiltersChange = useCallback(next => {
573
+ var _next$connection, _next$repository;
574
+ const selectedConnections = (_next$connection = next.connection) != null ? _next$connection : [];
575
+ const selectedRepositories = (_next$repository = next.repository) != null ? _next$repository : [];
576
+ if (selectedConnections.length && selectedRepositories.length) {
577
+ const allowedRepositoryIds = new Set(WEBHOOK_REPOSITORIES.filter(repository => selectedConnections.includes(repository.connectionId)).map(repository => repository.id));
578
+ const prunedRepositories = selectedRepositories.filter(id => allowedRepositoryIds.has(id));
579
+ if (prunedRepositories.length !== selectedRepositories.length) {
580
+ const updated = _extends({}, next);
581
+ if (prunedRepositories.length) {
582
+ updated.repository = prunedRepositories;
583
+ } else {
584
+ delete updated.repository;
585
+ }
586
+ setFilters(updated);
587
+ return;
588
+ }
589
+ }
590
+ setFilters(next);
591
+ }, []);
494
592
  return /*#__PURE__*/React.createElement(WebhookLogsDialogStyled, {
495
593
  open: open,
496
594
  onClose: onClose,
@@ -506,7 +604,7 @@ export const WebhookLogsDialog = _ref5 => {
506
604
  clearAllText: "Clear All",
507
605
  noResultText: "No results",
508
606
  emptyFilterText: "No filters to show",
509
- onChange: setFilters
607
+ onChange: handleFiltersChange
510
608
  }), /*#__PURE__*/React.createElement(IconButton, {
511
609
  variant: "text gray",
512
610
  onClick: onClose
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookLogsDialog.js","names":["React","useMemo","useState","styled","Button","Chip","Dialog","Filter","IconButton","CancelCrossIcon","CollapseExpandSingleIcon","GitHubIcon","GitIcon","GitLabIcon","Body2","Caption1","Caption2","Header3","WEBHOOK_CONNECTIONS","id","name","service","EVENT_KIND_LABELS","issue","push","merge_request","repository","ping","STATUS_LABELS","received","unhandled","skipped","processed","failed","duplicate","STATUS_COLORS","bg","fg","connectionIcon","StatusChip","_ref","status","_STATUS_COLORS$status","createElement","label","backgroundColor","color","typographyProps","variant","weight","style","borderRadius","PAYLOAD_ISSUE_OPENED","JSON","stringify","action","number","title","state","html_url","labels","user","login","full_name","private","sender","PAYLOAD_MERGE_REQUEST","object_kind","event_type","username","project","path_with_namespace","object_attributes","iid","source_branch","target_branch","PAYLOAD_PUSH","ref","before","after","commits","message","author","email","WEBHOOK_LOGS","connectionId","eventKind","deliveryIdentifier","outcomes","payload","receivedOn","receivedAt","zen","hook_id","escapeHtml","value","replace","highlightJson","json","match","cls","test","PAYLOAD_COLLAPSED_LINES","PayloadPre","pre","withConfig","displayName","componentId","_ref2","$collapsed","PayloadWrap","div","PayloadBlock","_ref3","_useState","collapsed","setCollapsed","lineCount","split","length","html","canToggle","className","size","onClick","dangerouslySetInnerHTML","__html","LogRowWrap","LogRow","_ref4","_connection$name","log","connection","_useState2","open","setOpen","ConnIcon","type","map","outcome","index","key","WebhookLogsDialogStyled","DialogTitleBar","LogListHeader","EmptyLogs","WebhookLogsDialog","_ref5","onClose","initialConnectionId","connectionIds","_useState3","filters","setFilters","connectionsById","forEach","filterData","submenu","Array","from","Set","Object","keys","visibleLogs","_filters$connection","_filters$event_type","_filters$status","byConnection","byEvent","byStatus","filter","includes","sort","a","b","enableBackgroundClick","Title","disableDefaultHeading","data","selected","clearAllText","noResultText","emptyFilterText","onChange","ContentDivider","Content","Fragment"],"sources":["../../../../src/presentation/shared/WebhookLogsDialog.tsx"],"sourcesContent":["import React, { ElementType, ReactElement, useMemo, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Chip } from \"../../components/Chip\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Filter, SelectedType } from \"../../components/Filter\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n CancelCrossIcon,\n CollapseExpandSingleIcon,\n GitHubIcon,\n GitIcon,\n GitLabIcon,\n} from \"../../components/Icons\";\nimport {\n Body2,\n Caption1,\n Caption2,\n Header3,\n} from \"../../components/Typography\";\n\n/**\n * \"Webhook Logs\" — the VCS webhook delivery log, shown as a wide dialog with a\n * filterable, expandable list. Extracted into `shared/` so it can be opened\n * from more than one surface (the Apps & Integrations Repositories page and the\n * project \"...\" menu on the Project Repos story).\n *\n * Mirrors the app's webhook log model:\n * `vcs_webhook_logs` → connection_id, event_type, processing_status\n * (received / unhandled / skipped / processed /\n * failed / duplicate), delivery_identifier, payload,\n * created_on\n * `vcs_webhook_outcomes` → one row per outcome, each with a localized summary\n *\n * The status is derived from the outcomes server-side; here we render the\n * stored value and map it to a palette colour. The connection glyph is the\n * provider icon (GitHub / GitLab, Git for anything else).\n */\n\ntype WebhookStatus =\n | \"received\"\n | \"unhandled\"\n | \"skipped\"\n | \"processed\"\n | \"failed\"\n | \"duplicate\";\n\nexport interface WebhookConnection {\n id: string;\n name: string;\n service: \"github\" | \"gitlab\";\n}\n\n/**\n * Normalized event kind. The processor layer maps each provider's raw event\n * header (GitHub `issues`, GitLab `Issue Hook`, …) onto one provider-agnostic\n * kind, so the same logical event reads — and filters — identically across\n * connections instead of appearing once per provider.\n */\ntype WebhookEventKind =\n | \"issue\"\n | \"push\"\n | \"merge_request\"\n | \"repository\"\n | \"ping\";\n\nexport interface WebhookLog {\n id: string;\n connectionId: string;\n eventKind: WebhookEventKind;\n status: WebhookStatus;\n /** X-GitHub-Delivery GUID / X-Gitlab-Event-UUID. */\n deliveryIdentifier: string;\n /** Localized outcome summaries; empty when we never reached that stage. */\n outcomes: string[];\n /** Pretty-printed JSON payload; absent when no JSON body was logged. */\n payload?: string;\n /** Display timestamp. */\n receivedOn: string;\n /** Sort key — newest logs render at the top. */\n receivedAt: number;\n}\n\nexport const WEBHOOK_CONNECTIONS: WebhookConnection[] = [\n { id: \"gh-activecollab\", name: \"ActiveCollab\", service: \"github\" },\n { id: \"gh-abstergo\", name: \"Abstergo Ltd.\", service: \"github\" },\n { id: \"gh-binford\", name: \"Binford & Co.\", service: \"github\" },\n { id: \"gl-platform\", name: \"Platform\", service: \"gitlab\" },\n { id: \"gl-content\", name: \"Content\", service: \"gitlab\" },\n { id: \"gl-acme-ce\", name: \"Acme Community\", service: \"gitlab\" },\n];\n\nconst EVENT_KIND_LABELS: Record<WebhookEventKind, string> = {\n issue: \"Issue\",\n push: \"Push\",\n merge_request: \"Merge request\",\n repository: \"Repository\",\n ping: \"Ping\",\n};\n\nconst STATUS_LABELS: Record<WebhookStatus, string> = {\n received: \"Received\",\n unhandled: \"Unhandled\",\n skipped: \"Skipped\",\n processed: \"Processed\",\n failed: \"Failed\",\n duplicate: \"Duplicate\",\n};\n\n/**\n * Status → palette colour, chosen so the colour matches the meaning:\n * processed → green (success), failed → coral (error),\n * skipped → orange (warning), received → sky-blue (in progress),\n * unhandled → silver (neutral / no handler matched),\n * duplicate → purple (replayed delivery, dropped before processing).\n */\nconst STATUS_COLORS: Record<WebhookStatus, { bg: string; fg: string }> = {\n processed: {\n bg: \"var(--color-green-pale)\",\n fg: \"var(--color-green-pale-darker)\",\n },\n failed: { bg: \"var(--color-coral)\", fg: \"var(--color-coral-darker)\" },\n skipped: { bg: \"var(--color-orange)\", fg: \"var(--color-orange-darker)\" },\n received: {\n bg: \"var(--color-blue-sky)\",\n fg: \"var(--color-blue-sky-darker)\",\n },\n unhandled: {\n bg: \"var(--color-gray-silver)\",\n fg: \"var(--color-gray-silver-darker)\",\n },\n duplicate: {\n bg: \"var(--color-purple)\",\n fg: \"var(--color-purple-darker)\",\n },\n};\n\n/** Provider glyph for a connection: GitHub / GitLab, Git for anything else. */\nconst connectionIcon = (\n service?: WebhookConnection[\"service\"]\n): ElementType => {\n if (service === \"github\") {\n return GitHubIcon;\n }\n if (service === \"gitlab\") {\n return GitLabIcon;\n }\n return GitIcon;\n};\n\nconst StatusChip = ({ status }: { status: WebhookStatus }): ReactElement => {\n const { bg, fg } = STATUS_COLORS[status];\n\n return (\n <Chip\n label={STATUS_LABELS[status]}\n backgroundColor={bg}\n color={fg}\n typographyProps={{ variant: \"Caption 1\", weight: \"medium\" }}\n style={{ borderRadius: 6 }}\n />\n );\n};\n\n/* --- Mock log data (newest first is enforced by sorting on receivedAt) --- */\n\nconst PAYLOAD_ISSUE_OPENED = JSON.stringify(\n {\n action: \"opened\",\n issue: {\n id: 2002934201,\n number: 42,\n title: \"Webhook delivery retries are not logged\",\n state: \"open\",\n html_url: \"https://github.com/activecollab/feather/issues/42\",\n labels: [{ name: \"bug\" }, { name: \"vcs\" }],\n user: { login: \"octocat\", id: 583231 },\n },\n repository: {\n id: 776611234,\n full_name: \"activecollab/feather\",\n private: true,\n },\n sender: { login: \"octocat\", id: 583231 },\n },\n null,\n 2\n);\n\nconst PAYLOAD_MERGE_REQUEST = JSON.stringify(\n {\n object_kind: \"merge_request\",\n event_type: \"merge_request\",\n user: { id: 41, name: \"Jane Doe\", username: \"jdoe\" },\n project: { id: 1801, path_with_namespace: \"content/handbook\" },\n object_attributes: {\n iid: 318,\n title: \"Add changelog for 8.2\",\n state: \"merged\",\n action: \"merge\",\n source_branch: \"changelog-8-2\",\n target_branch: \"main\",\n },\n },\n null,\n 2\n);\n\nconst PAYLOAD_PUSH = JSON.stringify(\n {\n ref: \"refs/heads/main\",\n before: \"9b2c1f0e\",\n after: \"f4a7d3c1\",\n commits: [\n {\n id: \"f4a7d3c1\",\n message: \"Fix typo in webhook log repository\",\n author: { name: \"Marko\", email: \"marko@example.com\" },\n },\n ],\n repository: { full_name: \"activecollab/feather\" },\n },\n null,\n 2\n);\n\nconst WEBHOOK_LOGS: WebhookLog[] = [\n {\n id: \"log-7\",\n connectionId: \"gh-activecollab\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"d3b07384-d9a0-4c9b-8f1e-2a6f1b9c4e21\",\n outcomes: [\"Created task #1842 from issue #42\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 29, 2026 · 14:32\",\n receivedAt: 1751207520,\n },\n {\n id: \"log-6\",\n connectionId: \"gl-content\",\n eventKind: \"merge_request\",\n status: \"skipped\",\n deliveryIdentifier: \"b1946ac9-2f3a-4c0d-9b7e-1d2c3e4f5a6b\",\n outcomes: [\"Skipped: merge request has no linked issue\"],\n payload: PAYLOAD_MERGE_REQUEST,\n receivedOn: \"Jun 29, 2026 · 11:08\",\n receivedAt: 1751195280,\n },\n {\n id: \"log-5\",\n connectionId: \"gh-activecollab\",\n eventKind: \"issue\",\n status: \"failed\",\n deliveryIdentifier: \"9c1185a5-c5e9-4e3f-8a1b-7d6e5f4c3b2a\",\n outcomes: [\"Failed at task creation: project not found\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 28, 2026 · 18:54\",\n receivedAt: 1751136840,\n },\n {\n id: \"log-4\",\n connectionId: \"gl-content\",\n eventKind: \"push\",\n status: \"processed\",\n deliveryIdentifier: \"f7c3bc1d-8c5a-4b2e-9f0a-1b2c3d4e5f60\",\n outcomes: [\n \"Created task #1839 from issue #311\",\n \"Created task #1840 from issue #312\",\n ],\n payload: PAYLOAD_PUSH,\n receivedOn: \"Jun 28, 2026 · 09:21\",\n receivedAt: 1751102460,\n },\n {\n id: \"log-3\",\n connectionId: \"gh-activecollab\",\n eventKind: \"ping\",\n status: \"unhandled\",\n deliveryIdentifier: \"1574bddb-75c3-4b1e-8a9c-0d1e2f3a4b5c\",\n outcomes: [],\n payload: JSON.stringify(\n { zen: \"Keep it logically awesome.\", hook_id: 552012 },\n null,\n 2\n ),\n receivedOn: \"Jun 27, 2026 · 16:05\",\n receivedAt: 1751040300,\n },\n {\n id: \"log-2\",\n connectionId: \"gl-content\",\n eventKind: \"issue\",\n status: \"received\",\n deliveryIdentifier: \"0716d970-2b9e-4a1d-9c3f-5e6a7b8c9d01\",\n outcomes: [],\n receivedOn: \"Jun 27, 2026 · 08:47\",\n receivedAt: 1751013420,\n },\n {\n id: \"log-1\",\n connectionId: \"gh-activecollab\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [\"Created task #1804 from issue #29\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:12\",\n receivedAt: 1750943520,\n },\n {\n id: \"log-1-replay\",\n connectionId: \"gh-activecollab\",\n eventKind: \"issue\",\n status: \"duplicate\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:18\",\n receivedAt: 1750943880,\n },\n];\n\n/* --- Lightweight, Prism-style JSON syntax highlighter -------------------- */\n/* design-system has no `prismjs` dependency (it's an app dependency), so for */\n/* this throwaway mock we tokenize JSON ourselves and colour the tokens with */\n/* the same token classes Prism uses, styled via PayloadPre below. */\n\nconst escapeHtml = (value: string): string =>\n value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\nconst highlightJson = (json: string): string =>\n escapeHtml(json).replace(\n /(\"(?:\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(?:true|false)\\b|\\bnull\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g,\n (match) => {\n let cls = \"tok-number\";\n\n if (/^\"/.test(match)) {\n cls = /:$/.test(match) ? \"tok-key\" : \"tok-string\";\n } else if (/true|false/.test(match)) {\n cls = \"tok-boolean\";\n } else if (/null/.test(match)) {\n cls = \"tok-null\";\n }\n\n return `<span class=\"${cls}\">${match}</span>`;\n }\n );\n\nconst PAYLOAD_COLLAPSED_LINES = 6;\n\nconst PayloadPre = styled.pre<{ $collapsed: boolean }>`\n margin: 0;\n padding: 12px 14px;\n border: 1px solid var(--color-theme-400);\n border-radius: 6px;\n background-color: var(--color-theme-200);\n color: var(--color-theme-800);\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n font-size: 12px;\n line-height: 18px;\n overflow-x: auto;\n white-space: pre;\n position: relative;\n\n ${({ $collapsed }) =>\n $collapsed\n ? `max-height: ${PAYLOAD_COLLAPSED_LINES * 18 + 24}px;\n overflow-y: hidden;`\n : \"\"}\n\n .tok-key {\n color: var(--color-coral-lighter);\n }\n .tok-string {\n color: var(--color-green-pale-lighter);\n }\n .tok-number {\n color: var(--color-orange-lighter);\n }\n .tok-boolean {\n color: var(--color-blue-sky-lighter);\n }\n .tok-null {\n color: var(--color-purple-lighter);\n }\n`;\n\nconst PayloadWrap = styled.div`\n .payload-toggle {\n display: flex;\n justify-content: flex-end;\n min-height: 24px;\n margin-bottom: 4px;\n }\n`;\n\nconst PayloadBlock = ({ payload }: { payload: string }): ReactElement => {\n const [collapsed, setCollapsed] = useState(true);\n\n const lineCount = useMemo(() => payload.split(\"\\n\").length, [payload]);\n const html = useMemo(() => highlightJson(payload), [payload]);\n const canToggle = lineCount > PAYLOAD_COLLAPSED_LINES;\n\n return (\n <PayloadWrap>\n {canToggle ? (\n <div className=\"payload-toggle\">\n <Button\n variant=\"text colored\"\n size=\"small\"\n onClick={() => setCollapsed((value) => !value)}\n >\n {collapsed ? \"Show More\" : \"Show Less\"}\n </Button>\n </div>\n ) : null}\n <PayloadPre\n $collapsed={collapsed && canToggle}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </PayloadWrap>\n );\n};\n\n/* --- A single, expandable log row ---------------------------------------- */\n\nconst LogRowWrap = styled.div`\n border-top: 1px solid var(--color-theme-300);\n\n .lr-summary {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n min-height: 56px;\n padding: 8px 8px 8px 12px;\n background: none;\n border: 0;\n text-align: left;\n cursor: pointer;\n font-family: inherit;\n\n &:hover {\n background-color: var(--color-theme-200);\n }\n }\n\n /* Default icon points up; collapsed → point right, expanded → point down. */\n .lr-expand {\n flex-shrink: 0;\n color: var(--color-theme-600);\n transform: rotate(90deg);\n transition: transform 150ms ease;\n }\n\n .lr-expand.open {\n transform: rotate(180deg);\n }\n\n .lr-conn {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 180px;\n min-width: 0;\n flex-shrink: 0;\n }\n\n .lr-conn svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n }\n\n .lr-conn .lr-conn-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .lr-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n\n .lr-status {\n flex-shrink: 0;\n }\n\n .lr-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n\n .lr-detail {\n padding: 4px 16px 20px 44px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .lr-field-label {\n display: block;\n margin-bottom: 4px;\n }\n\n .lr-id {\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n word-break: break-all;\n }\n\n .lr-outcome-list {\n margin: 0;\n padding-left: 18px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n`;\n\ninterface LogRowProps {\n log: WebhookLog;\n connection?: WebhookConnection;\n}\n\nconst LogRow = ({ log, connection }: LogRowProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const ConnIcon = connectionIcon(connection?.service);\n\n return (\n <LogRowWrap>\n <button\n type=\"button\"\n className=\"lr-summary\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n <CollapseExpandSingleIcon\n className={open ? \"lr-expand open\" : \"lr-expand\"}\n />\n <span className=\"lr-conn\">\n <ConnIcon />\n <Body2 className=\"lr-conn-name\" weight=\"bold\">\n {connection?.name ?? \"Unknown\"}\n </Body2>\n </span>\n <Body2 className=\"lr-event\" color=\"tertiary\">\n {EVENT_KIND_LABELS[log.eventKind]}\n </Body2>\n <span className=\"lr-status\">\n <StatusChip status={log.status} />\n </span>\n <Caption1 className=\"lr-outcomes\" color=\"tertiary\">\n {log.outcomes.length > 0\n ? `${log.outcomes.length} ${\n log.outcomes.length === 1 ? \"outcome\" : \"outcomes\"\n }`\n : \"\"}\n </Caption1>\n </button>\n\n {open ? (\n <div className=\"lr-detail\">\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Webhook identifier\n </Caption1>\n <Body2 className=\"lr-id\" color=\"tertiary\">\n {log.deliveryIdentifier}\n </Body2>\n </div>\n\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Outcomes\n </Caption1>\n {log.outcomes.length > 0 ? (\n <ul className=\"lr-outcome-list\">\n {log.outcomes.map((outcome, index) => (\n <li key={index}>\n <Body2 color=\"tertiary\">{outcome}</Body2>\n </li>\n ))}\n </ul>\n ) : (\n <Body2 color=\"tertiary\">\n No outcomes were recorded for this webhook.\n </Body2>\n )}\n </div>\n\n {log.payload ? (\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Payload\n </Caption1>\n <PayloadBlock payload={log.payload} />\n </div>\n ) : null}\n </div>\n ) : null}\n </LogRowWrap>\n );\n};\n\n/* --- The dialog ---------------------------------------------------------- */\n\n/** Wider than the default 540px dialog so the log columns have room. */\nconst WebhookLogsDialogStyled = styled(Dialog)`\n && {\n width: calc(100vw - 64px);\n max-width: 760px;\n }\n`;\n\nconst DialogTitleBar = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n\n .title-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n`;\n\nconst LogListHeader = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 0 8px 8px 44px;\n\n .lh-conn {\n width: 180px;\n flex-shrink: 0;\n }\n .lh-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n .lh-status {\n width: 96px;\n flex-shrink: 0;\n }\n .lh-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n`;\n\nconst EmptyLogs = styled.div`\n padding: 40px 0;\n text-align: center;\n`;\n\nexport interface WebhookLogsDialogProps {\n open: boolean;\n onClose: () => void;\n /** Pre-filter to a single connection (used when opened from its row menu). */\n initialConnectionId?: string;\n /**\n * Pre-filter to a set of connections (e.g. the connections a project's\n * repositories belong to). Takes precedence over `initialConnectionId`.\n */\n connectionIds?: string[];\n}\n\nexport const WebhookLogsDialog = ({\n open,\n onClose,\n initialConnectionId,\n connectionIds,\n}: WebhookLogsDialogProps): ReactElement => {\n const [filters, setFilters] = useState<SelectedType>((): SelectedType => {\n if (connectionIds && connectionIds.length > 0) {\n return { connection: connectionIds };\n }\n if (initialConnectionId) {\n return { connection: [initialConnectionId] };\n }\n return {};\n });\n\n const connectionsById = useMemo(() => {\n const map: Record<string, WebhookConnection> = {};\n WEBHOOK_CONNECTIONS.forEach((connection) => {\n map[connection.id] = connection;\n });\n return map;\n }, []);\n\n const filterData = useMemo(\n () => [\n {\n id: \"connection\",\n title: \"Connection\",\n submenu: WEBHOOK_CONNECTIONS.map((connection) => ({\n id: connection.id,\n name: connection.name,\n })),\n },\n {\n id: \"event_type\",\n title: \"Event Type\",\n submenu: Array.from(\n new Set(WEBHOOK_LOGS.map((log) => log.eventKind))\n ).map((eventKind) => ({\n id: eventKind,\n name: EVENT_KIND_LABELS[eventKind],\n })),\n },\n {\n id: \"status\",\n title: \"Processing Status\",\n submenu: (Object.keys(STATUS_LABELS) as WebhookStatus[]).map(\n (status) => ({ id: status, name: STATUS_LABELS[status] })\n ),\n },\n ],\n []\n );\n\n const visibleLogs = useMemo(() => {\n const byConnection = filters.connection ?? [];\n const byEvent = filters.event_type ?? [];\n const byStatus = filters.status ?? [];\n\n return WEBHOOK_LOGS.filter((log) => {\n if (byConnection.length && !byConnection.includes(log.connectionId)) {\n return false;\n }\n if (byEvent.length && !byEvent.includes(log.eventKind)) {\n return false;\n }\n if (byStatus.length && !byStatus.includes(log.status)) {\n return false;\n }\n return true;\n }).sort((a, b) => b.receivedAt - a.receivedAt);\n }, [filters]);\n\n return (\n <WebhookLogsDialogStyled\n open={open}\n onClose={onClose}\n enableBackgroundClick\n >\n <Dialog.Title disableDefaultHeading>\n <DialogTitleBar>\n <Header3>Webhook Logs</Header3>\n <div className=\"title-actions\">\n <Filter\n data={filterData}\n selected={filters}\n label=\"Filter\"\n clearAllText=\"Clear All\"\n noResultText=\"No results\"\n emptyFilterText=\"No filters to show\"\n onChange={setFilters}\n />\n <IconButton variant=\"text gray\" onClick={onClose}>\n <CancelCrossIcon />\n </IconButton>\n </div>\n </DialogTitleBar>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n {visibleLogs.length > 0 ? (\n <>\n <LogListHeader>\n <Caption2 className=\"lh-conn\" color=\"secondary\" weight=\"bold\">\n CONNECTION\n </Caption2>\n <Caption2 className=\"lh-event\" color=\"secondary\" weight=\"bold\">\n EVENT TYPE\n </Caption2>\n <Caption2 className=\"lh-status\" color=\"secondary\" weight=\"bold\">\n STATUS\n </Caption2>\n <Caption2 className=\"lh-outcomes\" color=\"secondary\" weight=\"bold\">\n OUTCOMES\n </Caption2>\n </LogListHeader>\n {visibleLogs.map((log) => (\n <LogRow\n key={log.id}\n log={log}\n connection={connectionsById[log.connectionId]}\n />\n ))}\n </>\n ) : (\n <EmptyLogs>\n <Body2 color=\"tertiary\">\n No webhook logs match the selected filters.\n </Body2>\n </EmptyLogs>\n )}\n </Dialog.Content>\n </WebhookLogsDialogStyled>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"WebhookLogsDialog.js","names":["React","useCallback","useMemo","useState","styled","Button","Chip","Dialog","Filter","IconButton","CancelCrossIcon","CollapseExpandSingleIcon","GitHubIcon","GitIcon","GitLabIcon","Body2","Caption1","Caption2","Header3","WEBHOOK_CONNECTIONS","id","name","service","WEBHOOK_REPOSITORIES","path","connectionId","EVENT_KIND_LABELS","issue","push","merge_request","repository","ping","STATUS_LABELS","received","unhandled","skipped","processed","failed","duplicate","STATUS_COLORS","bg","fg","connectionIcon","StatusChip","_ref","status","_STATUS_COLORS$status","createElement","label","backgroundColor","color","typographyProps","variant","weight","style","borderRadius","PAYLOAD_ISSUE_OPENED","JSON","stringify","action","number","title","state","html_url","labels","user","login","full_name","private","sender","PAYLOAD_MERGE_REQUEST","object_kind","event_type","username","project","path_with_namespace","object_attributes","iid","source_branch","target_branch","PAYLOAD_PUSH","ref","before","after","commits","message","author","email","WEBHOOK_LOGS","repositoryId","eventKind","deliveryIdentifier","outcomes","payload","receivedOn","receivedAt","zen","hook_id","escapeHtml","value","replace","highlightJson","json","match","cls","test","PAYLOAD_COLLAPSED_LINES","PayloadPre","pre","withConfig","displayName","componentId","_ref2","$collapsed","PayloadWrap","div","PayloadBlock","_ref3","_useState","collapsed","setCollapsed","lineCount","split","length","html","canToggle","className","size","onClick","dangerouslySetInnerHTML","__html","LogRowWrap","LogRow","_ref4","_connection$name","log","connection","_useState2","open","setOpen","ConnIcon","type","map","outcome","index","key","WebhookLogsDialogStyled","DialogTitleBar","LogListHeader","EmptyLogs","WebhookLogsDialog","_ref5","onClose","initialConnectionId","connectionIds","repositoryIds","_useState3","initial","filters","setFilters","connectionsById","forEach","filterData","_filters$connection","selectedConnections","repositorySubmenu","filter","includes","slice","sort","a","b","localeCompare","_connectionsById$repo","_connectionsById$repo2","submenu","searchPlaceholder","disableInternalSort","Array","from","Set","Object","keys","visibleLogs","_filters$connection2","_filters$repository","_filters$event_type","_filters$status","byConnection","byRepository","byEvent","byStatus","handleFiltersChange","next","_next$connection","_next$repository","selectedRepositories","allowedRepositoryIds","prunedRepositories","has","updated","_extends","enableBackgroundClick","Title","disableDefaultHeading","data","selected","clearAllText","noResultText","emptyFilterText","onChange","ContentDivider","Content","Fragment"],"sources":["../../../../src/presentation/shared/WebhookLogsDialog.tsx"],"sourcesContent":["import React, {\n ElementType,\n ReactElement,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Chip } from \"../../components/Chip\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Filter, SelectedType } from \"../../components/Filter\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n CancelCrossIcon,\n CollapseExpandSingleIcon,\n GitHubIcon,\n GitIcon,\n GitLabIcon,\n} from \"../../components/Icons\";\nimport {\n Body2,\n Caption1,\n Caption2,\n Header3,\n} from \"../../components/Typography\";\n\n/**\n * \"Webhook Logs\" — the VCS webhook delivery log, shown as a wide dialog with a\n * filterable, expandable list. Extracted into `shared/` so it can be opened\n * from more than one surface (the Apps & Integrations Repositories page and the\n * project \"...\" menu on the Project Repos story).\n *\n * Mirrors the app's webhook log model:\n * `vcs_webhook_logs` → connection_id, event_type, processing_status\n * (received / unhandled / skipped / processed /\n * failed / duplicate), delivery_identifier, payload,\n * created_on\n * `vcs_webhook_outcomes` → one row per outcome, each with a localized summary\n *\n * The status is derived from the outcomes server-side; here we render the\n * stored value and map it to a palette colour. The connection glyph is the\n * provider icon (GitHub / GitLab, Git for anything else).\n */\n\ntype WebhookStatus =\n | \"received\"\n | \"unhandled\"\n | \"skipped\"\n | \"processed\"\n | \"failed\"\n | \"duplicate\";\n\nexport interface WebhookConnection {\n id: string;\n name: string;\n service: \"github\" | \"gitlab\";\n}\n\nexport interface WebhookRepository {\n id: string;\n /** Full repository path, e.g. activecollab/feather. */\n path: string;\n connectionId: string;\n}\n\n/**\n * Normalized event kind. The processor layer maps each provider's raw event\n * header (GitHub `issues`, GitLab `Issue Hook`, …) onto one provider-agnostic\n * kind, so the same logical event reads — and filters — identically across\n * connections instead of appearing once per provider.\n */\ntype WebhookEventKind =\n | \"issue\"\n | \"push\"\n | \"merge_request\"\n | \"repository\"\n | \"ping\";\n\nexport interface WebhookLog {\n id: string;\n connectionId: string;\n /** Repository the delivery belongs to (always within `connectionId`). */\n repositoryId: string;\n eventKind: WebhookEventKind;\n status: WebhookStatus;\n /** X-GitHub-Delivery GUID / X-Gitlab-Event-UUID. */\n deliveryIdentifier: string;\n /** Localized outcome summaries; empty when we never reached that stage. */\n outcomes: string[];\n /** Pretty-printed JSON payload; absent when no JSON body was logged. */\n payload?: string;\n /** Display timestamp. */\n receivedOn: string;\n /** Sort key — newest logs render at the top. */\n receivedAt: number;\n}\n\nexport const WEBHOOK_CONNECTIONS: WebhookConnection[] = [\n { id: \"gh-activecollab\", name: \"ActiveCollab\", service: \"github\" },\n { id: \"gh-abstergo\", name: \"Abstergo Ltd.\", service: \"github\" },\n { id: \"gh-binford\", name: \"Binford & Co.\", service: \"github\" },\n { id: \"gl-platform\", name: \"Platform\", service: \"gitlab\" },\n { id: \"gl-content\", name: \"Content\", service: \"gitlab\" },\n { id: \"gl-acme-ce\", name: \"Acme Community\", service: \"gitlab\" },\n];\n\n/**\n * Repositories that belong to the connections above. A webhook delivery is\n * always scoped to one repository, and a repository belongs to exactly one\n * connection — so the Repository filter can be narrowed to the connection(s)\n * currently selected in the Connection filter.\n */\nexport const WEBHOOK_REPOSITORIES: WebhookRepository[] = [\n {\n id: \"ac-feather\",\n path: \"activecollab/feather\",\n connectionId: \"gh-activecollab\",\n },\n {\n id: \"ac-backend\",\n path: \"activecollab/backend\",\n connectionId: \"gh-activecollab\",\n },\n { id: \"ab-animus\", path: \"abstergo/animus\", connectionId: \"gh-abstergo\" },\n { id: \"bi-tool-time\", path: \"binford/tool-time\", connectionId: \"gh-binford\" },\n {\n id: \"pl-gateway\",\n path: \"platform/api-gateway\",\n connectionId: \"gl-platform\",\n },\n { id: \"co-handbook\", path: \"content/handbook\", connectionId: \"gl-content\" },\n {\n id: \"co-marketing\",\n path: \"content/marketing-site\",\n connectionId: \"gl-content\",\n },\n { id: \"acme-ce\", path: \"acme/community-edition\", connectionId: \"gl-acme-ce\" },\n];\n\nconst EVENT_KIND_LABELS: Record<WebhookEventKind, string> = {\n issue: \"Issue\",\n push: \"Push\",\n merge_request: \"Merge request\",\n repository: \"Repository\",\n ping: \"Ping\",\n};\n\nconst STATUS_LABELS: Record<WebhookStatus, string> = {\n received: \"Received\",\n unhandled: \"Unhandled\",\n skipped: \"Skipped\",\n processed: \"Processed\",\n failed: \"Failed\",\n duplicate: \"Duplicate\",\n};\n\n/**\n * Status → palette colour, chosen so the colour matches the meaning:\n * processed → green (success), failed → coral (error),\n * skipped → orange (warning), received → sky-blue (in progress),\n * unhandled → silver (neutral / no handler matched),\n * duplicate → purple (replayed delivery, dropped before processing).\n */\nconst STATUS_COLORS: Record<WebhookStatus, { bg: string; fg: string }> = {\n processed: {\n bg: \"var(--color-green-pale)\",\n fg: \"var(--color-green-pale-darker)\",\n },\n failed: { bg: \"var(--color-coral)\", fg: \"var(--color-coral-darker)\" },\n skipped: { bg: \"var(--color-orange)\", fg: \"var(--color-orange-darker)\" },\n received: {\n bg: \"var(--color-blue-sky)\",\n fg: \"var(--color-blue-sky-darker)\",\n },\n unhandled: {\n bg: \"var(--color-gray-silver)\",\n fg: \"var(--color-gray-silver-darker)\",\n },\n duplicate: {\n bg: \"var(--color-purple)\",\n fg: \"var(--color-purple-darker)\",\n },\n};\n\n/** Provider glyph for a connection: GitHub / GitLab, Git for anything else. */\nconst connectionIcon = (\n service?: WebhookConnection[\"service\"]\n): ElementType => {\n if (service === \"github\") {\n return GitHubIcon;\n }\n if (service === \"gitlab\") {\n return GitLabIcon;\n }\n return GitIcon;\n};\n\nconst StatusChip = ({ status }: { status: WebhookStatus }): ReactElement => {\n const { bg, fg } = STATUS_COLORS[status];\n\n return (\n <Chip\n label={STATUS_LABELS[status]}\n backgroundColor={bg}\n color={fg}\n typographyProps={{ variant: \"Caption 1\", weight: \"medium\" }}\n style={{ borderRadius: 6 }}\n />\n );\n};\n\n/* --- Mock log data (newest first is enforced by sorting on receivedAt) --- */\n\nconst PAYLOAD_ISSUE_OPENED = JSON.stringify(\n {\n action: \"opened\",\n issue: {\n id: 2002934201,\n number: 42,\n title: \"Webhook delivery retries are not logged\",\n state: \"open\",\n html_url: \"https://github.com/activecollab/feather/issues/42\",\n labels: [{ name: \"bug\" }, { name: \"vcs\" }],\n user: { login: \"octocat\", id: 583231 },\n },\n repository: {\n id: 776611234,\n full_name: \"activecollab/feather\",\n private: true,\n },\n sender: { login: \"octocat\", id: 583231 },\n },\n null,\n 2\n);\n\nconst PAYLOAD_MERGE_REQUEST = JSON.stringify(\n {\n object_kind: \"merge_request\",\n event_type: \"merge_request\",\n user: { id: 41, name: \"Jane Doe\", username: \"jdoe\" },\n project: { id: 1801, path_with_namespace: \"content/handbook\" },\n object_attributes: {\n iid: 318,\n title: \"Add changelog for 8.2\",\n state: \"merged\",\n action: \"merge\",\n source_branch: \"changelog-8-2\",\n target_branch: \"main\",\n },\n },\n null,\n 2\n);\n\nconst PAYLOAD_PUSH = JSON.stringify(\n {\n ref: \"refs/heads/main\",\n before: \"9b2c1f0e\",\n after: \"f4a7d3c1\",\n commits: [\n {\n id: \"f4a7d3c1\",\n message: \"Fix typo in webhook log repository\",\n author: { name: \"Marko\", email: \"marko@example.com\" },\n },\n ],\n repository: { full_name: \"activecollab/feather\" },\n },\n null,\n 2\n);\n\nconst WEBHOOK_LOGS: WebhookLog[] = [\n {\n id: \"log-7\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"d3b07384-d9a0-4c9b-8f1e-2a6f1b9c4e21\",\n outcomes: [\"Created task #1842 from issue #42\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 29, 2026 · 14:32\",\n receivedAt: 1751207520,\n },\n {\n id: \"log-6\",\n connectionId: \"gl-content\",\n repositoryId: \"co-handbook\",\n eventKind: \"merge_request\",\n status: \"skipped\",\n deliveryIdentifier: \"b1946ac9-2f3a-4c0d-9b7e-1d2c3e4f5a6b\",\n outcomes: [\"Skipped: merge request has no linked issue\"],\n payload: PAYLOAD_MERGE_REQUEST,\n receivedOn: \"Jun 29, 2026 · 11:08\",\n receivedAt: 1751195280,\n },\n {\n id: \"log-5\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-backend\",\n eventKind: \"issue\",\n status: \"failed\",\n deliveryIdentifier: \"9c1185a5-c5e9-4e3f-8a1b-7d6e5f4c3b2a\",\n outcomes: [\"Failed at task creation: project not found\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 28, 2026 · 18:54\",\n receivedAt: 1751136840,\n },\n {\n id: \"log-4\",\n connectionId: \"gl-content\",\n repositoryId: \"co-handbook\",\n eventKind: \"push\",\n status: \"processed\",\n deliveryIdentifier: \"f7c3bc1d-8c5a-4b2e-9f0a-1b2c3d4e5f60\",\n outcomes: [\n \"Created task #1839 from issue #311\",\n \"Created task #1840 from issue #312\",\n ],\n payload: PAYLOAD_PUSH,\n receivedOn: \"Jun 28, 2026 · 09:21\",\n receivedAt: 1751102460,\n },\n {\n id: \"log-3\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"ping\",\n status: \"unhandled\",\n deliveryIdentifier: \"1574bddb-75c3-4b1e-8a9c-0d1e2f3a4b5c\",\n outcomes: [],\n payload: JSON.stringify(\n { zen: \"Keep it logically awesome.\", hook_id: 552012 },\n null,\n 2\n ),\n receivedOn: \"Jun 27, 2026 · 16:05\",\n receivedAt: 1751040300,\n },\n {\n id: \"log-2\",\n connectionId: \"gl-content\",\n repositoryId: \"co-marketing\",\n eventKind: \"issue\",\n status: \"received\",\n deliveryIdentifier: \"0716d970-2b9e-4a1d-9c3f-5e6a7b8c9d01\",\n outcomes: [],\n receivedOn: \"Jun 27, 2026 · 08:47\",\n receivedAt: 1751013420,\n },\n {\n id: \"log-1\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [\"Created task #1804 from issue #29\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:12\",\n receivedAt: 1750943520,\n },\n {\n id: \"log-1-replay\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"duplicate\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:18\",\n receivedAt: 1750943880,\n },\n];\n\n/* --- Lightweight, Prism-style JSON syntax highlighter -------------------- */\n/* design-system has no `prismjs` dependency (it's an app dependency), so for */\n/* this throwaway mock we tokenize JSON ourselves and colour the tokens with */\n/* the same token classes Prism uses, styled via PayloadPre below. */\n\nconst escapeHtml = (value: string): string =>\n value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\nconst highlightJson = (json: string): string =>\n escapeHtml(json).replace(\n /(\"(?:\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(?:true|false)\\b|\\bnull\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g,\n (match) => {\n let cls = \"tok-number\";\n\n if (/^\"/.test(match)) {\n cls = /:$/.test(match) ? \"tok-key\" : \"tok-string\";\n } else if (/true|false/.test(match)) {\n cls = \"tok-boolean\";\n } else if (/null/.test(match)) {\n cls = \"tok-null\";\n }\n\n return `<span class=\"${cls}\">${match}</span>`;\n }\n );\n\nconst PAYLOAD_COLLAPSED_LINES = 6;\n\nconst PayloadPre = styled.pre<{ $collapsed: boolean }>`\n margin: 0;\n padding: 12px 14px;\n border: 1px solid var(--color-theme-400);\n border-radius: 6px;\n background-color: var(--color-theme-200);\n color: var(--color-theme-800);\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n font-size: 12px;\n line-height: 18px;\n overflow-x: auto;\n white-space: pre;\n position: relative;\n\n ${({ $collapsed }) =>\n $collapsed\n ? `max-height: ${PAYLOAD_COLLAPSED_LINES * 18 + 24}px;\n overflow-y: hidden;`\n : \"\"}\n\n .tok-key {\n color: var(--color-coral-lighter);\n }\n .tok-string {\n color: var(--color-green-pale-lighter);\n }\n .tok-number {\n color: var(--color-orange-lighter);\n }\n .tok-boolean {\n color: var(--color-blue-sky-lighter);\n }\n .tok-null {\n color: var(--color-purple-lighter);\n }\n`;\n\nconst PayloadWrap = styled.div`\n .payload-toggle {\n display: flex;\n justify-content: flex-end;\n min-height: 24px;\n margin-bottom: 4px;\n }\n`;\n\nconst PayloadBlock = ({ payload }: { payload: string }): ReactElement => {\n const [collapsed, setCollapsed] = useState(true);\n\n const lineCount = useMemo(() => payload.split(\"\\n\").length, [payload]);\n const html = useMemo(() => highlightJson(payload), [payload]);\n const canToggle = lineCount > PAYLOAD_COLLAPSED_LINES;\n\n return (\n <PayloadWrap>\n {canToggle ? (\n <div className=\"payload-toggle\">\n <Button\n variant=\"text colored\"\n size=\"small\"\n onClick={() => setCollapsed((value) => !value)}\n >\n {collapsed ? \"Show More\" : \"Show Less\"}\n </Button>\n </div>\n ) : null}\n <PayloadPre\n $collapsed={collapsed && canToggle}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </PayloadWrap>\n );\n};\n\n/* --- A single, expandable log row ---------------------------------------- */\n\nconst LogRowWrap = styled.div`\n border-top: 1px solid var(--color-theme-300);\n\n .lr-summary {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n min-height: 56px;\n padding: 8px 8px 8px 12px;\n background: none;\n border: 0;\n text-align: left;\n cursor: pointer;\n font-family: inherit;\n\n &:hover {\n background-color: var(--color-theme-200);\n }\n }\n\n /* Default icon points up; collapsed → point right, expanded → point down. */\n .lr-expand {\n flex-shrink: 0;\n color: var(--color-theme-600);\n transform: rotate(90deg);\n transition: transform 150ms ease;\n }\n\n .lr-expand.open {\n transform: rotate(180deg);\n }\n\n .lr-conn {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 180px;\n min-width: 0;\n flex-shrink: 0;\n }\n\n .lr-conn svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n }\n\n .lr-conn .lr-conn-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .lr-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n\n .lr-status {\n flex-shrink: 0;\n }\n\n .lr-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n\n .lr-detail {\n padding: 4px 16px 20px 44px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .lr-field-label {\n display: block;\n margin-bottom: 4px;\n }\n\n .lr-id {\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n word-break: break-all;\n }\n\n .lr-outcome-list {\n margin: 0;\n padding-left: 18px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n`;\n\ninterface LogRowProps {\n log: WebhookLog;\n connection?: WebhookConnection;\n}\n\nconst LogRow = ({ log, connection }: LogRowProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const ConnIcon = connectionIcon(connection?.service);\n\n return (\n <LogRowWrap>\n <button\n type=\"button\"\n className=\"lr-summary\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n <CollapseExpandSingleIcon\n className={open ? \"lr-expand open\" : \"lr-expand\"}\n />\n <span className=\"lr-conn\">\n <ConnIcon />\n <Body2 className=\"lr-conn-name\" weight=\"bold\">\n {connection?.name ?? \"Unknown\"}\n </Body2>\n </span>\n <Body2 className=\"lr-event\" color=\"tertiary\">\n {EVENT_KIND_LABELS[log.eventKind]}\n </Body2>\n <span className=\"lr-status\">\n <StatusChip status={log.status} />\n </span>\n <Caption1 className=\"lr-outcomes\" color=\"tertiary\">\n {log.outcomes.length > 0\n ? `${log.outcomes.length} ${\n log.outcomes.length === 1 ? \"outcome\" : \"outcomes\"\n }`\n : \"\"}\n </Caption1>\n </button>\n\n {open ? (\n <div className=\"lr-detail\">\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Webhook identifier\n </Caption1>\n <Body2 className=\"lr-id\" color=\"tertiary\">\n {log.deliveryIdentifier}\n </Body2>\n </div>\n\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Outcomes\n </Caption1>\n {log.outcomes.length > 0 ? (\n <ul className=\"lr-outcome-list\">\n {log.outcomes.map((outcome, index) => (\n <li key={index}>\n <Body2 color=\"tertiary\">{outcome}</Body2>\n </li>\n ))}\n </ul>\n ) : (\n <Body2 color=\"tertiary\">\n No outcomes were recorded for this webhook.\n </Body2>\n )}\n </div>\n\n {log.payload ? (\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Payload\n </Caption1>\n <PayloadBlock payload={log.payload} />\n </div>\n ) : null}\n </div>\n ) : null}\n </LogRowWrap>\n );\n};\n\n/* --- The dialog ---------------------------------------------------------- */\n\n/** Wider than the default 540px dialog so the log columns have room. */\nconst WebhookLogsDialogStyled = styled(Dialog)`\n && {\n width: calc(100vw - 64px);\n max-width: 760px;\n }\n`;\n\nconst DialogTitleBar = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n\n .title-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n`;\n\nconst LogListHeader = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 0 8px 8px 44px;\n\n .lh-conn {\n width: 180px;\n flex-shrink: 0;\n }\n .lh-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n .lh-status {\n width: 96px;\n flex-shrink: 0;\n }\n .lh-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n`;\n\nconst EmptyLogs = styled.div`\n padding: 40px 0;\n text-align: center;\n`;\n\nexport interface WebhookLogsDialogProps {\n open: boolean;\n onClose: () => void;\n /** Pre-filter to a single connection (used when opened from its row menu). */\n initialConnectionId?: string;\n /**\n * Pre-filter to a set of connections (e.g. the connections a project's\n * repositories belong to). Takes precedence over `initialConnectionId`.\n */\n connectionIds?: string[];\n /**\n * Pre-filter to a set of repositories (e.g. the repositories connected to a\n * project, when opened from the project \"...\" menu). Seeds the Repository\n * filter; IDs should exist in `WEBHOOK_REPOSITORIES` so their chips render.\n */\n repositoryIds?: string[];\n}\n\nexport const WebhookLogsDialog = ({\n open,\n onClose,\n initialConnectionId,\n connectionIds,\n repositoryIds,\n}: WebhookLogsDialogProps): ReactElement => {\n const [filters, setFilters] = useState<SelectedType>((): SelectedType => {\n const initial: SelectedType = {};\n if (connectionIds && connectionIds.length > 0) {\n initial.connection = connectionIds;\n } else if (initialConnectionId) {\n initial.connection = [initialConnectionId];\n }\n if (repositoryIds && repositoryIds.length > 0) {\n initial.repository = repositoryIds;\n }\n return initial;\n });\n\n const connectionsById = useMemo(() => {\n const map: Record<string, WebhookConnection> = {};\n WEBHOOK_CONNECTIONS.forEach((connection) => {\n map[connection.id] = connection;\n });\n return map;\n }, []);\n\n const filterData = useMemo(() => {\n // The Repository options narrow to the connection(s) currently selected in\n // the Connection filter; with no connection selected, every repository is\n // offered. Displayed as \"path (connection name)\" (matching the project\n // \"...\" menu Repositories list) and sorted by repository path.\n const selectedConnections = filters.connection ?? [];\n const repositorySubmenu = WEBHOOK_REPOSITORIES.filter(\n (repository) =>\n selectedConnections.length === 0 ||\n selectedConnections.includes(repository.connectionId)\n )\n .slice()\n .sort((a, b) => a.path.localeCompare(b.path))\n .map((repository) => ({\n id: repository.id,\n name: `${repository.path} (${\n connectionsById[repository.connectionId]?.name ?? \"Unknown\"\n })`,\n }));\n\n return [\n {\n id: \"connection\",\n title: \"Connection\",\n submenu: WEBHOOK_CONNECTIONS.map((connection) => ({\n id: connection.id,\n name: connection.name,\n })),\n },\n {\n id: \"repository\",\n title: \"Repository\",\n searchPlaceholder: \"Search repositories\",\n disableInternalSort: true,\n submenu: repositorySubmenu,\n },\n {\n id: \"event_type\",\n title: \"Event Type\",\n submenu: Array.from(\n new Set(WEBHOOK_LOGS.map((log) => log.eventKind))\n ).map((eventKind) => ({\n id: eventKind,\n name: EVENT_KIND_LABELS[eventKind],\n })),\n },\n {\n id: \"status\",\n title: \"Processing Status\",\n submenu: (Object.keys(STATUS_LABELS) as WebhookStatus[]).map(\n (status) => ({ id: status, name: STATUS_LABELS[status] })\n ),\n },\n ];\n }, [filters.connection, connectionsById]);\n\n const visibleLogs = useMemo(() => {\n const byConnection = filters.connection ?? [];\n const byRepository = filters.repository ?? [];\n const byEvent = filters.event_type ?? [];\n const byStatus = filters.status ?? [];\n\n return WEBHOOK_LOGS.filter((log) => {\n if (byConnection.length && !byConnection.includes(log.connectionId)) {\n return false;\n }\n if (byRepository.length && !byRepository.includes(log.repositoryId)) {\n return false;\n }\n if (byEvent.length && !byEvent.includes(log.eventKind)) {\n return false;\n }\n if (byStatus.length && !byStatus.includes(log.status)) {\n return false;\n }\n return true;\n }).sort((a, b) => b.receivedAt - a.receivedAt);\n }, [filters]);\n\n // When the Connection filter narrows, drop any selected repositories that no\n // longer belong to a selected connection — otherwise a stale repository\n // selection would silently filter every log out.\n const handleFiltersChange = useCallback((next: SelectedType) => {\n const selectedConnections = next.connection ?? [];\n const selectedRepositories = next.repository ?? [];\n\n if (selectedConnections.length && selectedRepositories.length) {\n const allowedRepositoryIds = new Set(\n WEBHOOK_REPOSITORIES.filter((repository) =>\n selectedConnections.includes(repository.connectionId)\n ).map((repository) => repository.id)\n );\n const prunedRepositories = selectedRepositories.filter((id) =>\n allowedRepositoryIds.has(id)\n );\n\n if (prunedRepositories.length !== selectedRepositories.length) {\n const updated = { ...next };\n if (prunedRepositories.length) {\n updated.repository = prunedRepositories;\n } else {\n delete updated.repository;\n }\n setFilters(updated);\n return;\n }\n }\n\n setFilters(next);\n }, []);\n\n return (\n <WebhookLogsDialogStyled\n open={open}\n onClose={onClose}\n enableBackgroundClick\n >\n <Dialog.Title disableDefaultHeading>\n <DialogTitleBar>\n <Header3>Webhook Logs</Header3>\n <div className=\"title-actions\">\n <Filter\n data={filterData}\n selected={filters}\n label=\"Filter\"\n clearAllText=\"Clear All\"\n noResultText=\"No results\"\n emptyFilterText=\"No filters to show\"\n onChange={handleFiltersChange}\n />\n <IconButton variant=\"text gray\" onClick={onClose}>\n <CancelCrossIcon />\n </IconButton>\n </div>\n </DialogTitleBar>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n {visibleLogs.length > 0 ? (\n <>\n <LogListHeader>\n <Caption2 className=\"lh-conn\" color=\"secondary\" weight=\"bold\">\n CONNECTION\n </Caption2>\n <Caption2 className=\"lh-event\" color=\"secondary\" weight=\"bold\">\n EVENT TYPE\n </Caption2>\n <Caption2 className=\"lh-status\" color=\"secondary\" weight=\"bold\">\n STATUS\n </Caption2>\n <Caption2 className=\"lh-outcomes\" color=\"secondary\" weight=\"bold\">\n OUTCOMES\n </Caption2>\n </LogListHeader>\n {visibleLogs.map((log) => (\n <LogRow\n key={log.id}\n log={log}\n connection={connectionsById[log.connectionId]}\n />\n ))}\n </>\n ) : (\n <EmptyLogs>\n <Body2 color=\"tertiary\">\n No webhook logs match the selected filters.\n </Body2>\n </EmptyLogs>\n )}\n </Dialog.Content>\n </WebhookLogsDialogStyled>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -14,6 +14,11 @@ export interface ProjectOptionsMenuProps {
14
14
  sourceModuleLoaded?: boolean;
15
15
  /** Repositories already connected to the project when the menu first mounts. */
16
16
  initialConnectedRepositories?: Repository[];
17
+ /**
18
+ * Whether the current user can manage the project's repositories. Gates the
19
+ * Webhook Logs entry (a manage-only action) — see note 09, Permissions.
20
+ */
21
+ canManageProjectRepositories?: boolean;
17
22
  }
18
23
  export interface ProjectPageHeaderProps {
19
24
  title?: string;
@@ -22,10 +27,12 @@ export interface ProjectPageHeaderProps {
22
27
  sourceModuleLoaded?: boolean;
23
28
  /** Repositories already connected to the project (seeds the count + submenu). */
24
29
  initialConnectedRepositories?: Repository[];
30
+ /** Whether the current user can manage the project's repositories. */
31
+ canManageProjectRepositories?: boolean;
25
32
  }
26
33
  /** The project page header: back arrow, title, progress, info, people, options. */
27
34
  export declare const ProjectPageHeader: {
28
- ({ title, sourceModuleLoaded, initialConnectedRepositories, }: ProjectPageHeaderProps): ReactElement;
35
+ ({ title, sourceModuleLoaded, initialConnectedRepositories, canManageProjectRepositories, }: ProjectPageHeaderProps): ReactElement;
29
36
  displayName: string;
30
37
  };
31
38
  export interface TabHeaderProps {
@@ -1 +1 @@
1
- {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/headers.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,YAAY,EACZ,SAAS,EAGV,MAAM,OAAO,CAAC;AAIf,OAAO,EAIL,UAAU,EACX,MAAM,2BAA2B,CAAC;AAyInC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,+EAA+E;AAC/E,eAAO,MAAM,UAAU;2BAGpB,eAAe,GAAG,YAAY;;CAShC,CAAC;AA4IF,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gFAAgF;IAChF,4BAA4B,CAAC,EAAE,UAAU,EAAE,CAAC;CAC7C;AAudD,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;iEAC6D;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iFAAiF;IACjF,4BAA4B,CAAC,EAAE,UAAU,EAAE,CAAC;CAC7C;AAED,mFAAmF;AACnF,eAAO,MAAM,iBAAiB;mEAI3B,sBAAsB,GAAG,YAAY;;CAiCvC,CAAC;AAsCF,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;CAC7C;AAED,wEAAwE;AACxE,eAAO,MAAM,SAAS;sBAEnB,cAAc,GAAG,YAAY;;CA8C/B,CAAC"}
1
+ {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/headers.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,YAAY,EACZ,SAAS,EAGV,MAAM,OAAO,CAAC;AAIf,OAAO,EAGL,UAAU,EACX,MAAM,2BAA2B,CAAC;AA+InC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,+EAA+E;AAC/E,eAAO,MAAM,UAAU;2BAGpB,eAAe,GAAG,YAAY;;CAShC,CAAC;AAyJF,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gFAAgF;IAChF,4BAA4B,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5C;;;OAGG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AA2eD,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;iEAC6D;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iFAAiF;IACjF,4BAA4B,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5C,sEAAsE;IACtE,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,mFAAmF;AACnF,eAAO,MAAM,iBAAiB;iGAK3B,sBAAsB,GAAG,YAAY;;CAkCvC,CAAC;AAsCF,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;CAC7C;AAED,wEAAwE;AACxE,eAAO,MAAM,SAAS;sBAEnB,cAAc,GAAG,YAAY;;CA8C/B,CAAC"}