@techdocs/cli 0.0.0-nightly-20250708024259 → 0.0.0-nightly-20250710024421

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.
@@ -106,31 +106,6 @@
106
106
  },
107
107
  "path": "../cli/package.json"
108
108
  },
109
- {
110
- "path": "../../plugins/permission-common/config.d.ts",
111
- "value": {
112
- "type": "object",
113
- "properties": {
114
- "permission": {
115
- "description": "Configuration options for Backstage permissions and authorization",
116
- "type": "object",
117
- "properties": {
118
- "enabled": {
119
- "description": "Whether authorization is enabled in Backstage. Defaults to false, which means authorization\nrequests will be automatically allowed without invoking the authorization policy.",
120
- "visibility": "frontend",
121
- "type": "boolean"
122
- },
123
- "EXPERIMENTAL_enableBatchedRequests": {
124
- "visibility": "frontend",
125
- "type": "boolean"
126
- }
127
- }
128
- }
129
- },
130
- "$schema": "http://json-schema.org/draft-07/schema#"
131
- },
132
- "packageName": "@backstage/plugin-permission-common"
133
- },
134
109
  {
135
110
  "path": "../core-app-api/config.d.ts",
136
111
  "value": {
@@ -954,6 +929,31 @@
954
929
  },
955
930
  "packageName": "@backstage/integration"
956
931
  },
932
+ {
933
+ "path": "../../plugins/permission-common/config.d.ts",
934
+ "value": {
935
+ "type": "object",
936
+ "properties": {
937
+ "permission": {
938
+ "description": "Configuration options for Backstage permissions and authorization",
939
+ "type": "object",
940
+ "properties": {
941
+ "enabled": {
942
+ "description": "Whether authorization is enabled in Backstage. Defaults to false, which means authorization\nrequests will be automatically allowed without invoking the authorization policy.",
943
+ "visibility": "frontend",
944
+ "type": "boolean"
945
+ },
946
+ "EXPERIMENTAL_enableBatchedRequests": {
947
+ "visibility": "frontend",
948
+ "type": "boolean"
949
+ }
950
+ }
951
+ }
952
+ },
953
+ "$schema": "http://json-schema.org/draft-07/schema#"
954
+ },
955
+ "packageName": "@backstage/plugin-permission-common"
956
+ },
957
957
  {
958
958
  "path": "../frontend-app-api/config.d.ts",
959
959
  "value": {
@@ -1161,6 +1161,73 @@
1161
1161
  },
1162
1162
  "packageName": "@backstage/plugin-catalog"
1163
1163
  },
1164
+ {
1165
+ "path": "../../node_modules/@backstage-community/plugin-stackstorm/config.d.ts",
1166
+ "value": {
1167
+ "type": "object",
1168
+ "properties": {
1169
+ "stackstorm": {
1170
+ "type": "object",
1171
+ "properties": {
1172
+ "webUrl": {
1173
+ "description": "StackStorm Web UI url\nUsed in links to StackStorm web UI",
1174
+ "visibility": "frontend",
1175
+ "type": "string"
1176
+ }
1177
+ },
1178
+ "required": [
1179
+ "webUrl"
1180
+ ]
1181
+ }
1182
+ },
1183
+ "$schema": "http://json-schema.org/draft-07/schema#"
1184
+ },
1185
+ "packageName": "@backstage-community/plugin-stackstorm"
1186
+ },
1187
+ {
1188
+ "path": "../../node_modules/@oriflame/backstage-plugin-score-card/config.d.ts",
1189
+ "value": {
1190
+ "type": "object",
1191
+ "properties": {
1192
+ "scorecards": {
1193
+ "description": "Extra configuration for score card plugin",
1194
+ "type": "object",
1195
+ "properties": {
1196
+ "jsonDataUrl": {
1197
+ "description": "The public absolute root URL with json file defining the score card entries.",
1198
+ "visibility": "frontend",
1199
+ "type": "string"
1200
+ },
1201
+ "display": {
1202
+ "type": "object",
1203
+ "properties": {
1204
+ "reviewer": {
1205
+ "description": "Whether to display the reviewer column in the score card table.",
1206
+ "visibility": "frontend",
1207
+ "type": "string"
1208
+ },
1209
+ "reviewDate": {
1210
+ "description": "Whether to display the review date column in the score card table.",
1211
+ "visibility": "frontend",
1212
+ "type": "string"
1213
+ }
1214
+ }
1215
+ },
1216
+ "wikiLinkTemplate": {
1217
+ "description": "The template for the link to the wiki, e.g. \"https://TBD/XXX/_wiki/wikis/XXX.wiki/{id}\"",
1218
+ "visibility": "frontend",
1219
+ "type": "string"
1220
+ }
1221
+ }
1222
+ }
1223
+ },
1224
+ "required": [
1225
+ "scorecards"
1226
+ ],
1227
+ "$schema": "http://json-schema.org/draft-07/schema#"
1228
+ },
1229
+ "packageName": "@oriflame/backstage-plugin-score-card"
1230
+ },
1164
1231
  {
1165
1232
  "path": "../backend-plugin-api/config.d.ts",
1166
1233
  "value": {
@@ -1362,180 +1429,161 @@
1362
1429
  "packageName": "@backstage/plugin-auth-backend-module-guest-provider"
1363
1430
  },
1364
1431
  {
1365
- "path": "../../node_modules/@backstage-community/plugin-stackstorm/config.d.ts",
1366
- "value": {
1367
- "type": "object",
1368
- "properties": {
1369
- "stackstorm": {
1370
- "type": "object",
1371
- "properties": {
1372
- "webUrl": {
1373
- "description": "StackStorm Web UI url\nUsed in links to StackStorm web UI",
1374
- "visibility": "frontend",
1375
- "type": "string"
1376
- }
1377
- },
1378
- "required": [
1379
- "webUrl"
1380
- ]
1381
- }
1382
- },
1383
- "$schema": "http://json-schema.org/draft-07/schema#"
1384
- },
1385
- "packageName": "@backstage-community/plugin-stackstorm"
1386
- },
1387
- {
1388
- "path": "../../node_modules/@oriflame/backstage-plugin-score-card/config.d.ts",
1432
+ "path": "../../node_modules/@backstage-community/plugin-puppetdb/node_modules/@backstage/core-components/config.d.ts",
1389
1433
  "value": {
1390
1434
  "type": "object",
1391
1435
  "properties": {
1392
- "scorecards": {
1393
- "description": "Extra configuration for score card plugin",
1436
+ "auth": {
1394
1437
  "type": "object",
1395
1438
  "properties": {
1396
- "jsonDataUrl": {
1397
- "description": "The public absolute root URL with json file defining the score card entries.",
1398
- "visibility": "frontend",
1399
- "type": "string"
1400
- },
1401
- "display": {
1439
+ "autologout": {
1440
+ "description": "Autologout feature configuration",
1402
1441
  "type": "object",
1403
1442
  "properties": {
1404
- "reviewer": {
1405
- "description": "Whether to display the reviewer column in the score card table.",
1443
+ "enabled": {
1444
+ "description": "Enable or disable the autologout feature",
1406
1445
  "visibility": "frontend",
1407
- "type": "string"
1446
+ "type": "boolean"
1408
1447
  },
1409
- "reviewDate": {
1410
- "description": "Whether to display the review date column in the score card table.",
1448
+ "idleTimeoutMinutes": {
1449
+ "description": "Number of minutes after which the inactive user is logged out automatically.\nDefault is 60 minutes (1 hour)",
1411
1450
  "visibility": "frontend",
1412
- "type": "string"
1451
+ "type": "number"
1452
+ },
1453
+ "promptBeforeIdleSeconds": {
1454
+ "description": "Number of seconds before the idle timeout where the user will be asked if it's still active.\nA dialog will be shown.\nDefault is 10 seconds.\nSet to 0 seconds to disable the prompt.",
1455
+ "visibility": "frontend",
1456
+ "type": "number"
1457
+ },
1458
+ "useWorkerTimers": {
1459
+ "description": "Enable/disable the usage of worker thread timers instead of main thread timers.\nDefault is true.\nIf you experience some browser incompatibility, you may try to set this to false.",
1460
+ "visibility": "frontend",
1461
+ "type": "boolean"
1462
+ },
1463
+ "logoutIfDisconnected": {
1464
+ "description": "Enable/disable the automatic logout also on users that are logged in but with no Backstage tabs open.\nDefault is true.",
1465
+ "visibility": "frontend",
1466
+ "type": "boolean"
1413
1467
  }
1414
1468
  }
1415
- },
1416
- "wikiLinkTemplate": {
1417
- "description": "The template for the link to the wiki, e.g. \"https://TBD/XXX/_wiki/wikis/XXX.wiki/{id}\"",
1418
- "visibility": "frontend",
1419
- "type": "string"
1420
1469
  }
1421
1470
  }
1422
1471
  }
1423
1472
  },
1424
- "required": [
1425
- "scorecards"
1426
- ],
1427
1473
  "$schema": "http://json-schema.org/draft-07/schema#"
1428
1474
  },
1429
- "packageName": "@oriflame/backstage-plugin-score-card"
1475
+ "packageName": "@backstage/core-components"
1430
1476
  },
1431
1477
  {
1432
- "path": "../backend-app-api/config.d.ts",
1478
+ "path": "../../node_modules/@backstage-community/plugin-puppetdb/node_modules/@backstage/core-app-api/config.d.ts",
1433
1479
  "value": {
1434
1480
  "type": "object",
1435
1481
  "properties": {
1436
- "backend": {
1482
+ "app": {
1483
+ "description": "Generic frontend configuration.",
1437
1484
  "type": "object",
1438
1485
  "properties": {
1439
- "packages": {
1440
- "description": "Used by the feature discovery service",
1441
- "anyOf": [
1442
- {
1443
- "type": "object",
1444
- "properties": {
1445
- "include": {
1446
- "type": "array",
1447
- "items": {
1448
- "type": "string"
1449
- }
1450
- },
1451
- "exclude": {
1452
- "type": "array",
1453
- "items": {
1454
- "type": "string"
1455
- }
1456
- }
1457
- }
1458
- },
1459
- {
1460
- "const": "all",
1461
- "type": "string"
1462
- }
1463
- ]
1486
+ "baseUrl": {
1487
+ "description": "The public absolute root URL that the frontend.",
1488
+ "visibility": "frontend",
1489
+ "type": "string"
1464
1490
  },
1465
- "startup": {
1491
+ "title": {
1492
+ "description": "The title of the app, as shown in the Backstage web interface.",
1493
+ "visibility": "frontend",
1494
+ "type": "string"
1495
+ },
1496
+ "support": {
1497
+ "description": "Information about support of this Backstage instance and how to contact the integrator team.",
1466
1498
  "type": "object",
1467
1499
  "properties": {
1468
- "default": {
1469
- "type": "object",
1470
- "properties": {
1471
- "onPluginBootFailure": {
1472
- "description": "The default value for `onPluginBootFailure` if not specified for a particular plugin.\nThis defaults to 'abort', which means `onPluginBootFailure: continue` must be specified\nfor backend startup to continue on plugin boot failure. This can also be set to\n'continue', which flips the logic for individual plugins so that they must be set to\n`onPluginBootFailure: abort` to be required.",
1473
- "enum": [
1474
- "abort",
1475
- "continue"
1476
- ],
1477
- "type": "string"
1478
- },
1479
- "onPluginModuleBootFailure": {
1480
- "description": "The default value for `onPluginModuleBootFailure` if not specified for a particular plugin module.\nThis defaults to 'abort', which means `onPluginModuleBootFailure: continue` must be specified\nfor backend startup to continue on plugin module boot failure. This can also be set to\n'continue', which flips the logic for individual plugin modules so that they must be set to\n`onPluginModuleBootFailure: abort` to be required.",
1481
- "enum": [
1482
- "abort",
1483
- "continue"
1484
- ],
1485
- "type": "string"
1486
- }
1487
- }
1500
+ "url": {
1501
+ "description": "The primary support url.",
1502
+ "visibility": "frontend",
1503
+ "type": "string"
1488
1504
  },
1489
- "plugins": {
1490
- "type": "object",
1491
- "additionalProperties": {
1505
+ "items": {
1506
+ "description": "A list of categorized support item groupings.",
1507
+ "type": "array",
1508
+ "items": {
1492
1509
  "type": "object",
1493
1510
  "properties": {
1494
- "onPluginBootFailure": {
1495
- "description": "Used to control backend startup behavior when this plugin fails to boot up. Setting\nthis to `continue` allows the backend to continue starting up, even if this plugin\nfails. This can enable leaving a crashing plugin installed, but still permit backend\nstartup, which may help troubleshoot data-dependent issues. Plugin failures for plugins\nset to `abort` are fatal (this is the default unless overridden by the `default`\nsetting).",
1496
- "enum": [
1497
- "abort",
1498
- "continue"
1499
- ],
1511
+ "title": {
1512
+ "description": "The title of the support item grouping.",
1513
+ "visibility": "frontend",
1500
1514
  "type": "string"
1501
1515
  },
1502
- "modules": {
1503
- "type": "object",
1504
- "additionalProperties": {
1516
+ "icon": {
1517
+ "description": "An optional icon for the support item grouping.",
1518
+ "visibility": "frontend",
1519
+ "type": "string"
1520
+ },
1521
+ "links": {
1522
+ "description": "A list of support links for the Backstage instance inside this grouping.",
1523
+ "type": "array",
1524
+ "items": {
1505
1525
  "type": "object",
1506
1526
  "properties": {
1507
- "onPluginModuleBootFailure": {
1508
- "description": "Used to control backend startup behavior when this plugin module fails to boot up. Setting\nthis to `continue` allows the backend to continue starting up, even if this plugin\nmodule fails. This can enable leaving a crashing plugin installed, but still permit backend\nstartup, which may help troubleshoot data-dependent issues. Plugin module failures for plugin modules\nset to `abort` are fatal (this is the default unless overridden by the `default`\nsetting).",
1509
- "enum": [
1510
- "abort",
1511
- "continue"
1512
- ],
1527
+ "url": {
1528
+ "visibility": "frontend",
1529
+ "type": "string"
1530
+ },
1531
+ "title": {
1532
+ "visibility": "frontend",
1513
1533
  "type": "string"
1514
1534
  }
1515
- }
1535
+ },
1536
+ "required": [
1537
+ "url"
1538
+ ]
1516
1539
  }
1517
1540
  }
1518
- }
1541
+ },
1542
+ "required": [
1543
+ "links",
1544
+ "title"
1545
+ ]
1546
+ }
1547
+ }
1548
+ },
1549
+ "required": [
1550
+ "items",
1551
+ "url"
1552
+ ]
1553
+ },
1554
+ "routes": {
1555
+ "type": "object",
1556
+ "properties": {
1557
+ "bindings": {
1558
+ "description": "Maps external route references to regular route references. Both the\nkey and the value is expected to be on the form `<pluginId>.<routeId>`.\nIf the value is `false`, the route will be disabled even if it has a\ndefault mapping.",
1559
+ "deepVisibility": "frontend",
1560
+ "type": "object",
1561
+ "additionalProperties": {
1562
+ "anyOf": [
1563
+ {
1564
+ "const": false,
1565
+ "type": "boolean"
1566
+ },
1567
+ {
1568
+ "type": "string"
1569
+ }
1570
+ ]
1519
1571
  }
1520
1572
  }
1521
1573
  }
1522
1574
  }
1523
- }
1524
- }
1525
- },
1526
- "$schema": "http://json-schema.org/draft-07/schema#"
1527
- },
1528
- "packageName": "@backstage/backend-app-api"
1529
- },
1530
- {
1531
- "path": "../backend-defaults/config.d.ts",
1532
- "value": {
1533
- "type": "object",
1534
- "properties": {
1535
- "app": {
1575
+ },
1576
+ "required": [
1577
+ "baseUrl"
1578
+ ]
1579
+ },
1580
+ "backend": {
1581
+ "description": "Generic backend configuration.",
1536
1582
  "type": "object",
1537
1583
  "properties": {
1538
1584
  "baseUrl": {
1585
+ "description": "The public absolute root URL that the backend is reachable at, from the browser's perspective.",
1586
+ "visibility": "frontend",
1539
1587
  "type": "string"
1540
1588
  }
1541
1589
  },
@@ -1543,2257 +1591,2234 @@
1543
1591
  "baseUrl"
1544
1592
  ]
1545
1593
  },
1546
- "backend": {
1594
+ "organization": {
1595
+ "description": "Configuration that provides information about the organization that the app is for.",
1547
1596
  "type": "object",
1548
1597
  "properties": {
1549
- "baseUrl": {
1550
- "description": "The full base URL of the backend, as seen from the browser's point of\nview as it makes calls to the backend.",
1598
+ "name": {
1599
+ "description": "The name of the organization that the app belongs to.",
1600
+ "visibility": "frontend",
1551
1601
  "type": "string"
1552
- },
1553
- "lifecycle": {
1554
- "type": "object",
1555
- "properties": {
1556
- "startupRequestPauseTimeout": {
1557
- "description": "The maximum time that paused requests will wait for the service to start, before returning an error.\nDefaults to 5 seconds\nSupported formats:\n- A string in the format of '1d', '2 seconds' etc. as supported by the `ms`\n library.\n- A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'.\n- An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`."
1558
- },
1559
- "serverShutdownDelay": {
1560
- "description": "The minimum time that the HTTP server will delay the shutdown of the backend. During this delay health checks will be set to failing, allowing traffic to drain.\nDefaults to 0 seconds.\nSupported formats:\n- A string in the format of '1d', '2 seconds' etc. as supported by the `ms`\n library.\n- A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'.\n- An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`."
1561
- }
1562
- }
1563
- },
1564
- "trustProxy": {
1565
- "description": "Corresponds to the Express `trust proxy` setting.",
1566
- "anyOf": [
1567
- {
1568
- "type": "array",
1569
- "items": {
1602
+ }
1603
+ }
1604
+ },
1605
+ "homepage": {
1606
+ "description": "This config was used by the HomepageTimer but has been replaced by the HeaderWorldClock in the home plugin",
1607
+ "deprecated": "in favor of the HeaderWorldClock which is found in the home plugin",
1608
+ "type": "object",
1609
+ "properties": {
1610
+ "clocks": {
1611
+ "type": "array",
1612
+ "items": {
1613
+ "type": "object",
1614
+ "properties": {
1615
+ "label": {
1616
+ "visibility": "frontend",
1617
+ "type": "string"
1618
+ },
1619
+ "timezone": {
1620
+ "visibility": "frontend",
1570
1621
  "type": "string"
1571
1622
  }
1572
1623
  },
1573
- {
1574
- "type": [
1575
- "string",
1576
- "number",
1577
- "boolean"
1578
- ]
1579
- }
1580
- ]
1581
- },
1582
- "listen": {
1583
- "description": "Address that the backend should listen to.",
1584
- "anyOf": [
1585
- {
1586
- "type": "object",
1587
- "properties": {
1588
- "host": {
1589
- "description": "Address of the interface that the backend should bind to.",
1590
- "type": "string"
1591
- },
1592
- "port": {
1593
- "description": "Port that the backend should listen to.",
1594
- "type": [
1595
- "string",
1596
- "number"
1597
- ]
1598
- }
1599
- }
1600
- },
1601
- {
1602
- "type": "string"
1603
- }
1604
- ]
1605
- },
1606
- "https": {
1607
- "description": "HTTPS configuration for the backend. If omitted the backend will serve HTTP.\n\nSetting this to `true` will cause self-signed certificates to be generated, which\ncan be useful for local development or other non-production scenarios.",
1608
- "anyOf": [
1609
- {
1610
- "type": "object",
1611
- "properties": {
1612
- "certificate": {
1613
- "description": "Certificate configuration",
1614
- "type": "object",
1615
- "properties": {
1616
- "cert": {
1617
- "description": "PEM encoded certificate. Use $file to load in a file",
1618
- "type": "string"
1619
- },
1620
- "key": {
1621
- "description": "PEM encoded certificate key. Use $file to load in a file.",
1622
- "visibility": "secret",
1623
- "type": "string"
1624
+ "required": [
1625
+ "label",
1626
+ "timezone"
1627
+ ]
1628
+ }
1629
+ }
1630
+ }
1631
+ },
1632
+ "auth": {
1633
+ "description": "Configuration that provides information on available configured authentication providers.",
1634
+ "type": "object",
1635
+ "properties": {
1636
+ "environment": {
1637
+ "description": "The 'environment' attribute added as an optional parameter to have configurable environment value for `auth.providers`.\ndefault value: 'development'\noptional values: 'development' | 'production'",
1638
+ "visibility": "frontend",
1639
+ "type": "string"
1640
+ }
1641
+ }
1642
+ },
1643
+ "enableExperimentalRedirectFlow": {
1644
+ "description": "Enable redirect authentication flow type, instead of a popup for authentication.",
1645
+ "visibility": "frontend",
1646
+ "type": "boolean"
1647
+ },
1648
+ "discovery": {
1649
+ "description": "Discovery options.",
1650
+ "visibility": "frontend",
1651
+ "type": "object",
1652
+ "properties": {
1653
+ "endpoints": {
1654
+ "description": "Endpoints\n\nA list of target baseUrls and the associated plugins.",
1655
+ "visibility": "frontend",
1656
+ "type": "array",
1657
+ "items": {
1658
+ "type": "object",
1659
+ "properties": {
1660
+ "target": {
1661
+ "description": "The target baseUrl to use for the plugin\n\nCan be either a string or an object with internal and external keys. (Internal is used for the backend, external for the frontend)\nTargets with `{{pluginId}}` or `{{ pluginId }} in the url will be replaced with the pluginId.",
1662
+ "visibility": "frontend",
1663
+ "anyOf": [
1664
+ {
1665
+ "type": "object",
1666
+ "properties": {
1667
+ "external": {
1668
+ "visibility": "frontend",
1669
+ "type": "string"
1670
+ }
1624
1671
  }
1625
1672
  },
1626
- "required": [
1627
- "cert",
1628
- "key"
1629
- ]
1673
+ {
1674
+ "type": "string"
1675
+ }
1676
+ ]
1677
+ },
1678
+ "plugins": {
1679
+ "description": "Array of plugins which use the target baseUrl.",
1680
+ "visibility": "frontend",
1681
+ "type": "array",
1682
+ "items": {
1683
+ "type": "string"
1630
1684
  }
1631
1685
  }
1632
1686
  },
1633
- {
1634
- "const": true,
1635
- "type": "boolean"
1636
- }
1637
- ]
1638
- },
1639
- "auditor": {
1640
- "description": "Options used by the default auditor service.",
1687
+ "required": [
1688
+ "plugins",
1689
+ "target"
1690
+ ]
1691
+ }
1692
+ }
1693
+ }
1694
+ }
1695
+ },
1696
+ "required": [
1697
+ "app",
1698
+ "backend"
1699
+ ],
1700
+ "$schema": "http://json-schema.org/draft-07/schema#"
1701
+ },
1702
+ "packageName": "@backstage/core-app-api"
1703
+ },
1704
+ {
1705
+ "path": "../../node_modules/@backstage-community/plugin-stackstorm/node_modules/@backstage/core-components/config.d.ts",
1706
+ "value": {
1707
+ "type": "object",
1708
+ "properties": {
1709
+ "auth": {
1710
+ "type": "object",
1711
+ "properties": {
1712
+ "autologout": {
1713
+ "description": "Autologout feature configuration",
1641
1714
  "type": "object",
1642
1715
  "properties": {
1643
- "severityLogLevelMappings": {
1644
- "description": "Defines how audit event severity levels are mapped to log levels.\nThis allows you to control the verbosity of audit logs based on the\nseverity of the event. For example, you might want to log 'low' severity\nevents as 'debug' messages, while logging 'critical' events as 'error'\nmessages. Each severity level ('low', 'medium', 'high', 'critical')\ncan be mapped to one of the standard log levels ('debug', 'info', 'warn', 'error').\n\nBy default, audit events are mapped to log levels as follows:\n- `low`: `debug`\n- `medium`: `info`\n- `high`: `info`\n- `critical`: `info`",
1645
- "type": "object",
1646
- "properties": {
1647
- "low": {
1648
- "enum": [
1649
- "debug",
1650
- "error",
1651
- "info",
1652
- "warn"
1653
- ],
1654
- "type": "string"
1655
- },
1656
- "medium": {
1657
- "enum": [
1658
- "debug",
1659
- "error",
1660
- "info",
1661
- "warn"
1662
- ],
1663
- "type": "string"
1664
- },
1665
- "high": {
1666
- "enum": [
1667
- "debug",
1668
- "error",
1669
- "info",
1670
- "warn"
1671
- ],
1672
- "type": "string"
1673
- },
1674
- "critical": {
1675
- "enum": [
1676
- "debug",
1677
- "error",
1678
- "info",
1679
- "warn"
1680
- ],
1681
- "type": "string"
1682
- }
1683
- }
1716
+ "enabled": {
1717
+ "description": "Enable or disable the autologout feature",
1718
+ "visibility": "frontend",
1719
+ "type": "boolean"
1720
+ },
1721
+ "idleTimeoutMinutes": {
1722
+ "description": "Number of minutes after which the inactive user is logged out automatically.\nDefault is 60 minutes (1 hour)",
1723
+ "visibility": "frontend",
1724
+ "type": "number"
1725
+ },
1726
+ "promptBeforeIdleSeconds": {
1727
+ "description": "Number of seconds before the idle timeout where the user will be asked if it's still active.\nA dialog will be shown.\nDefault is 10 seconds.\nSet to 0 seconds to disable the prompt.",
1728
+ "visibility": "frontend",
1729
+ "type": "number"
1730
+ },
1731
+ "useWorkerTimers": {
1732
+ "description": "Enable/disable the usage of worker thread timers instead of main thread timers.\nDefault is true.\nIf you experience some browser incompatibility, you may try to set this to false.",
1733
+ "visibility": "frontend",
1734
+ "type": "boolean"
1735
+ },
1736
+ "logoutIfDisconnected": {
1737
+ "description": "Enable/disable the automatic logout also on users that are logged in but with no Backstage tabs open.\nDefault is true.",
1738
+ "visibility": "frontend",
1739
+ "type": "boolean"
1684
1740
  }
1685
1741
  }
1686
- },
1687
- "actions": {
1688
- "description": "Options used by the default actions service.",
1742
+ }
1743
+ }
1744
+ }
1745
+ },
1746
+ "$schema": "http://json-schema.org/draft-07/schema#"
1747
+ },
1748
+ "packageName": "@backstage/core-components"
1749
+ },
1750
+ {
1751
+ "path": "../../node_modules/@oriflame/backstage-plugin-score-card/node_modules/@backstage/core-components/config.d.ts",
1752
+ "value": {
1753
+ "type": "object",
1754
+ "properties": {
1755
+ "auth": {
1756
+ "type": "object",
1757
+ "properties": {
1758
+ "autologout": {
1759
+ "description": "Autologout feature configuration",
1689
1760
  "type": "object",
1690
1761
  "properties": {
1691
- "pluginSources": {
1692
- "description": "List of plugin sources to load actions from.",
1693
- "type": "array",
1694
- "items": {
1695
- "type": "string"
1696
- }
1762
+ "enabled": {
1763
+ "description": "Enable or disable the autologout feature",
1764
+ "visibility": "frontend",
1765
+ "type": "boolean"
1766
+ },
1767
+ "idleTimeoutMinutes": {
1768
+ "description": "Number of minutes after which the inactive user is logged out automatically.\nDefault is 60 minutes (1 hour)",
1769
+ "visibility": "frontend",
1770
+ "type": "number"
1771
+ },
1772
+ "promptBeforeIdleSeconds": {
1773
+ "description": "Number of seconds before the idle timeout where the user will be asked if it's still active.\nA dialog will be shown.\nDefault is 10 seconds.\nSet to 0 seconds to disable the prompt.",
1774
+ "visibility": "frontend",
1775
+ "type": "number"
1776
+ },
1777
+ "useWorkerTimers": {
1778
+ "description": "Enable/disable the usage of worker thread timers instead of main thread timers.\nDefault is true.\nIf you experience some browser incompatibility, you may try to set this to false.",
1779
+ "visibility": "frontend",
1780
+ "type": "boolean"
1781
+ },
1782
+ "logoutIfDisconnected": {
1783
+ "description": "Enable/disable the automatic logout also on users that are logged in but with no Backstage tabs open.\nDefault is true.",
1784
+ "visibility": "frontend",
1785
+ "type": "boolean"
1697
1786
  }
1698
1787
  }
1699
- },
1700
- "auth": {
1701
- "description": "Options used by the default auth, httpAuth and userInfo services.",
1702
- "type": "object",
1703
- "properties": {
1704
- "keys": {
1705
- "description": "Keys shared by all backends for signing and validating backend tokens.",
1706
- "deprecated": "this will be removed when the backwards compatibility is no longer needed with backend-common",
1707
- "type": "array",
1708
- "items": {
1788
+ }
1789
+ }
1790
+ }
1791
+ },
1792
+ "$schema": "http://json-schema.org/draft-07/schema#"
1793
+ },
1794
+ "packageName": "@backstage/core-components"
1795
+ },
1796
+ {
1797
+ "path": "../../node_modules/@oriflame/backstage-plugin-score-card/node_modules/@backstage/integration/config.d.ts",
1798
+ "value": {
1799
+ "type": "object",
1800
+ "properties": {
1801
+ "integrations": {
1802
+ "description": "Configuration for integrations towards various external repository provider systems",
1803
+ "visibility": "frontend",
1804
+ "type": "object",
1805
+ "properties": {
1806
+ "azure": {
1807
+ "description": "Integration configuration for Azure",
1808
+ "type": "array",
1809
+ "items": {
1810
+ "type": "object",
1811
+ "properties": {
1812
+ "host": {
1813
+ "description": "The hostname of the given Azure instance",
1814
+ "visibility": "frontend",
1815
+ "type": "string"
1816
+ },
1817
+ "token": {
1818
+ "description": "Token used to authenticate requests.",
1819
+ "visibility": "secret",
1820
+ "deprecated": "Use `credentials` instead.",
1821
+ "type": "string"
1822
+ },
1823
+ "credential": {
1824
+ "description": "The credential to use for requests.\n\nIf no credential is specified anonymous access is used.",
1825
+ "deepVisibility": "secret",
1826
+ "deprecated": "Use `credentials` instead.",
1709
1827
  "type": "object",
1710
1828
  "properties": {
1711
- "secret": {
1712
- "description": "Secret for generating tokens. Should be a base64 string, recommended\nlength is 24 bytes.",
1713
- "visibility": "secret",
1829
+ "clientId": {
1714
1830
  "type": "string"
1715
- }
1716
- },
1717
- "required": [
1718
- "secret"
1719
- ]
1720
- }
1721
- },
1722
- "dangerouslyDisableDefaultAuthPolicy": {
1723
- "description": "This disables the otherwise default auth policy, which requires all\nrequests to be authenticated with either user or service credentials.\n\nDisabling this check means that the backend will no longer block\nunauthenticated requests, but instead allow them to pass through to\nplugins.\n\nIf permissions are enabled, unauthenticated requests will be treated\nexactly as such, leaving it to the permission policy to determine what\npermissions should be allowed for an unauthenticated identity. Note\nthat this will also apply to service-to-service calls between plugins\nunless you configure credentials for service calls.",
1724
- "type": "boolean"
1725
- },
1726
- "pluginKeyStore": {
1727
- "description": "Controls how to store keys for plugin-to-plugin auth",
1728
- "anyOf": [
1729
- {
1730
- "type": "object",
1731
- "properties": {
1732
- "type": {
1733
- "type": "string",
1734
- "const": "database"
1735
- }
1736
1831
  },
1737
- "required": [
1738
- "type"
1739
- ]
1740
- },
1741
- {
1832
+ "clientSecret": {
1833
+ "type": "string"
1834
+ },
1835
+ "tenantId": {
1836
+ "type": "string"
1837
+ },
1838
+ "personalAccessToken": {
1839
+ "type": "string"
1840
+ }
1841
+ }
1842
+ },
1843
+ "credentials": {
1844
+ "description": "The credentials to use for requests. If multiple credentials are specified the first one that matches the organization is used.\nIf no organization matches the first credential without an organization is used.\n\nIf no credentials are specified at all, either a default credential (for Azure DevOps) or anonymous access (for Azure DevOps Server) is used.",
1845
+ "deepVisibility": "secret",
1846
+ "type": "array",
1847
+ "items": {
1742
1848
  "type": "object",
1743
1849
  "properties": {
1744
- "type": {
1745
- "type": "string",
1746
- "const": "static"
1850
+ "organizations": {
1851
+ "type": "array",
1852
+ "items": {
1853
+ "type": "string"
1854
+ }
1747
1855
  },
1748
- "static": {
1749
- "type": "object",
1750
- "properties": {
1751
- "keys": {
1752
- "description": "Must be declared at least once and the first one will be used for signing.",
1753
- "type": "array",
1754
- "items": {
1755
- "type": "object",
1756
- "properties": {
1757
- "publicKeyFile": {
1758
- "description": "Path to the public key file in the SPKI format. Should be an absolute path.",
1759
- "type": "string"
1760
- },
1761
- "privateKeyFile": {
1762
- "description": "Path to the matching private key file in the PKCS#8 format. Should be an absolute path.\n\nThe first array entry must specify a private key file, the rest must not.",
1763
- "type": "string"
1764
- },
1765
- "keyId": {
1766
- "description": "ID to uniquely identify this key within the JWK set.",
1767
- "type": "string"
1768
- },
1769
- "algorithm": {
1770
- "description": "JWS \"alg\" (Algorithm) Header Parameter value. Defaults to ES256.\nMust match the algorithm used to generate the keys in the provided files",
1771
- "type": "string"
1772
- }
1773
- },
1774
- "required": [
1775
- "keyId",
1776
- "publicKeyFile"
1777
- ]
1778
- }
1779
- }
1780
- },
1781
- "required": [
1782
- "keys"
1783
- ]
1784
- }
1785
- },
1786
- "required": [
1787
- "static",
1788
- "type"
1789
- ]
1790
- }
1791
- ]
1792
- },
1793
- "externalAccess": {
1794
- "description": "Configures methods of external access, ie ways for callers outside of\nthe Backstage ecosystem to get authorized for access to APIs that do\nnot permit unauthorized access.",
1795
- "type": "array",
1796
- "items": {
1797
- "anyOf": [
1798
- {
1799
- "type": "object",
1800
- "properties": {
1801
- "type": {
1802
- "description": "This is the legacy service-to-service access method, where a set\nof static keys were shared among plugins and used for symmetric\nsigning and verification. These correspond to the old\n`backend.auth.keys` set and retain their behavior for backwards\ncompatibility. Please migrate to other access methods when\npossible.\n\nCallers generate JWT tokens with the following payload:\n\n```json\n{\n \"sub\": \"backstage-plugin\",\n \"exp\": <epoch seconds one hour in the future>\n}\n```\n\nAnd sign them with HS256, using the base64 decoded secret. The\ntokens are then passed along with requests in the Authorization\nheader:\n\n```\nAuthorization: Bearer eyJhbGciOiJIUzI...\n```",
1803
- "type": "string",
1804
- "const": "legacy"
1805
- },
1806
- "options": {
1807
- "type": "object",
1808
- "properties": {
1809
- "secret": {
1810
- "description": "Any set of base64 encoded random bytes to be used as both the\nsigning and verification key. Should be sufficiently long so as\nnot to be easy to guess by brute force.\n\nCan be generated eg using\n\n```sh\nnode -p 'require(\"crypto\").randomBytes(24).toString(\"base64\")'\n```",
1811
- "visibility": "secret",
1812
- "type": "string"
1813
- },
1814
- "subject": {
1815
- "description": "Sets the subject of the principal, when matching this token.\nUseful for debugging and tracking purposes.",
1816
- "type": "string"
1817
- }
1818
- },
1819
- "required": [
1820
- "secret",
1821
- "subject"
1822
- ]
1823
- },
1824
- "accessRestrictions": {
1825
- "description": "Restricts what types of access that are permitted for this access\nmethod. If no access restrictions are given, it'll have unlimited\naccess. This access restriction applies for the framework level;\nindividual plugins may have their own access control mechanisms\non top of this.",
1826
- "type": "array",
1827
- "items": {
1828
- "type": "object",
1829
- "properties": {
1830
- "plugin": {
1831
- "description": "Permit access to make requests to this plugin.\n\nCan be further refined by setting additional fields below.",
1832
- "type": "string"
1833
- },
1834
- "permission": {
1835
- "description": "If given, this method is limited to only performing actions\nwith these named permissions in this plugin.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
1836
- "anyOf": [
1837
- {
1838
- "type": "array",
1839
- "items": {
1840
- "type": "string"
1841
- }
1842
- },
1843
- {
1844
- "type": "string"
1845
- }
1846
- ]
1847
- },
1848
- "permissionAttribute": {
1849
- "description": "If given, this method is limited to only performing actions\nwhose permissions have these attributes.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
1850
- "type": "object",
1851
- "properties": {
1852
- "action": {
1853
- "description": "One of more of 'create', 'read', 'update', or 'delete'.",
1854
- "anyOf": [
1855
- {
1856
- "type": "array",
1857
- "items": {
1858
- "type": "string"
1859
- }
1860
- },
1861
- {
1862
- "type": "string"
1863
- }
1864
- ]
1865
- }
1866
- }
1867
- }
1868
- },
1869
- "required": [
1870
- "plugin"
1871
- ]
1872
- }
1873
- }
1874
- },
1875
- "required": [
1876
- "options",
1877
- "type"
1878
- ]
1879
- },
1880
- {
1881
- "type": "object",
1882
- "properties": {
1883
- "type": {
1884
- "description": "This access method consists of random static tokens that can be\nhanded out to callers.\n\nThe tokens are then passed along verbatim with requests in the\nAuthorization header:\n\n```\nAuthorization: Bearer eZv5o+fW3KnR3kVabMW4ZcDNLPl8nmMW\n```",
1885
- "type": "string",
1886
- "const": "static"
1887
- },
1888
- "options": {
1889
- "type": "object",
1890
- "properties": {
1891
- "token": {
1892
- "description": "A raw token that can be any string, but for security reasons\nshould be sufficiently long so as not to be easy to guess by\nbrute force.\n\nCan be generated eg using\n\n```sh\nnode -p 'require(\"crypto\").randomBytes(24).toString(\"base64\")'\n```\n\nSince the tokens can be any string, you are free to add\nadditional identifying data to them if you like. For example,\nadding a `freben-local-dev-` prefix for debugging purposes to a\ntoken that you know will be handed out for use as a personal\naccess token during development.",
1893
- "visibility": "secret",
1894
- "type": "string"
1895
- },
1896
- "subject": {
1897
- "description": "Sets the subject of the principal, when matching this token.\nUseful for debugging and tracking purposes.",
1898
- "type": "string"
1899
- }
1900
- },
1901
- "required": [
1902
- "subject",
1903
- "token"
1904
- ]
1905
- },
1906
- "accessRestrictions": {
1907
- "description": "Restricts what types of access that are permitted for this access\nmethod. If no access restrictions are given, it'll have unlimited\naccess. This access restriction applies for the framework level;\nindividual plugins may have their own access control mechanisms\non top of this.",
1908
- "type": "array",
1909
- "items": {
1910
- "type": "object",
1911
- "properties": {
1912
- "plugin": {
1913
- "description": "Permit access to make requests to this plugin.\n\nCan be further refined by setting additional fields below.",
1914
- "type": "string"
1915
- },
1916
- "permission": {
1917
- "description": "If given, this method is limited to only performing actions\nwith these named permissions in this plugin.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
1918
- "anyOf": [
1919
- {
1920
- "type": "array",
1921
- "items": {
1922
- "type": "string"
1923
- }
1924
- },
1925
- {
1926
- "type": "string"
1927
- }
1928
- ]
1929
- },
1930
- "permissionAttribute": {
1931
- "description": "If given, this method is limited to only performing actions\nwhose permissions have these attributes.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
1932
- "type": "object",
1933
- "properties": {
1934
- "action": {
1935
- "description": "One of more of 'create', 'read', 'update', or 'delete'.",
1936
- "anyOf": [
1937
- {
1938
- "type": "array",
1939
- "items": {
1940
- "type": "string"
1941
- }
1942
- },
1943
- {
1944
- "type": "string"
1945
- }
1946
- ]
1947
- }
1948
- }
1949
- }
1950
- },
1951
- "required": [
1952
- "plugin"
1953
- ]
1954
- }
1955
- }
1956
- },
1957
- "required": [
1958
- "options",
1959
- "type"
1960
- ]
1961
- },
1962
- {
1963
- "type": "object",
1964
- "properties": {
1965
- "type": {
1966
- "description": "This access method consists of a JWKS endpoint that can be used to\nverify JWT tokens.\n\nCallers generate JWT tokens via 3rd party tooling\nand pass them in the Authorization header:\n\n```\nAuthorization: Bearer eZv5o+fW3KnR3kVabMW4ZcDNLPl8nmMW\n```",
1967
- "type": "string",
1968
- "const": "jwks"
1969
- },
1970
- "options": {
1971
- "type": "object",
1972
- "properties": {
1973
- "url": {
1974
- "description": "The full URL of the JWKS endpoint.",
1975
- "type": "string"
1976
- },
1977
- "algorithm": {
1978
- "description": "Sets the algorithm(s) that should be used to verify the JWT tokens.\nThe passed JWTs must have been signed using one of the listed algorithms.",
1979
- "anyOf": [
1980
- {
1981
- "type": "array",
1982
- "items": {
1983
- "type": "string"
1984
- }
1985
- },
1986
- {
1987
- "type": "string"
1988
- }
1989
- ]
1990
- },
1991
- "issuer": {
1992
- "description": "Sets the issuer(s) that should be used to verify the JWT tokens.\nPassed JWTs must have an `iss` claim which matches one of the specified issuers.",
1993
- "anyOf": [
1994
- {
1995
- "type": "array",
1996
- "items": {
1997
- "type": "string"
1998
- }
1999
- },
2000
- {
2001
- "type": "string"
2002
- }
2003
- ]
2004
- },
2005
- "audience": {
2006
- "description": "Sets the audience(s) that should be used to verify the JWT tokens.\nThe passed JWTs must have an \"aud\" claim that matches one of the audiences specified,\nor have no audience specified.",
2007
- "anyOf": [
2008
- {
2009
- "type": "array",
2010
- "items": {
2011
- "type": "string"
2012
- }
2013
- },
2014
- {
2015
- "type": "string"
2016
- }
2017
- ]
2018
- },
2019
- "subjectPrefix": {
2020
- "description": "Sets an optional subject prefix. Passes the subject to called plugins.\nUseful for debugging and tracking purposes.",
2021
- "type": "string"
2022
- }
2023
- },
2024
- "required": [
2025
- "url"
2026
- ]
2027
- },
2028
- "accessRestrictions": {
2029
- "description": "Restricts what types of access that are permitted for this access\nmethod. If no access restrictions are given, it'll have unlimited\naccess. This access restriction applies for the framework level;\nindividual plugins may have their own access control mechanisms\non top of this.",
2030
- "type": "array",
2031
- "items": {
2032
- "type": "object",
2033
- "properties": {
2034
- "plugin": {
2035
- "description": "Permit access to make requests to this plugin.\n\nCan be further refined by setting additional fields below.",
2036
- "type": "string"
2037
- },
2038
- "permission": {
2039
- "description": "If given, this method is limited to only performing actions\nwith these named permissions in this plugin.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
2040
- "anyOf": [
2041
- {
2042
- "type": "array",
2043
- "items": {
2044
- "type": "string"
2045
- }
2046
- },
2047
- {
2048
- "type": "string"
2049
- }
2050
- ]
2051
- },
2052
- "permissionAttribute": {
2053
- "description": "If given, this method is limited to only performing actions\nwhose permissions have these attributes.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
2054
- "type": "object",
2055
- "properties": {
2056
- "action": {
2057
- "description": "One of more of 'create', 'read', 'update', or 'delete'.",
2058
- "anyOf": [
2059
- {
2060
- "type": "array",
2061
- "items": {
2062
- "type": "string"
2063
- }
2064
- },
2065
- {
2066
- "type": "string"
2067
- }
2068
- ]
2069
- }
2070
- }
2071
- }
2072
- },
2073
- "required": [
2074
- "plugin"
2075
- ]
2076
- }
2077
- }
2078
- },
2079
- "required": [
2080
- "options",
2081
- "type"
2082
- ]
2083
- }
2084
- ]
2085
- }
2086
- }
2087
- }
2088
- },
2089
- "database": {
2090
- "description": "Database connection configuration, select base database type using the `client` field",
2091
- "type": "object",
2092
- "properties": {
2093
- "client": {
2094
- "description": "Default database client to use",
2095
- "enum": [
2096
- "better-sqlite3",
2097
- "pg",
2098
- "sqlite3"
2099
- ],
2100
- "type": "string"
2101
- },
2102
- "connection": {
2103
- "description": "Base database connection string, or object with individual connection properties",
2104
- "visibility": "secret",
2105
- "anyOf": [
2106
- {
2107
- "type": "object",
2108
- "properties": {
2109
- "type": {
2110
- "description": "The specific config for cloudsql connections",
2111
- "type": "string",
2112
- "const": "cloudsql"
1856
+ "clientId": {
1857
+ "type": "string"
2113
1858
  },
2114
- "instance": {
2115
- "description": "The instance connection name for the cloudsql instance, e.g. `project:region:instance`",
1859
+ "clientSecret": {
2116
1860
  "type": "string"
2117
1861
  },
2118
- "ipAddressType": {
2119
- "description": "The ip address type to use for the connection. Defaults to 'PUBLIC'",
2120
- "enum": [
2121
- "PRIVATE",
2122
- "PSC",
2123
- "PUBLIC"
2124
- ],
1862
+ "tenantId": {
2125
1863
  "type": "string"
2126
- }
2127
- },
2128
- "required": [
2129
- "instance",
2130
- "type"
2131
- ]
2132
- },
2133
- {
2134
- "type": "object",
2135
- "additionalProperties": {},
2136
- "properties": {
2137
- "password": {
2138
- "description": "Password that belongs to the client User",
2139
- "visibility": "secret",
1864
+ },
1865
+ "personalAccessToken": {
1866
+ "type": "string"
1867
+ },
1868
+ "managedIdentityClientId": {
2140
1869
  "type": "string"
2141
1870
  }
2142
1871
  }
2143
- },
2144
- {
2145
- "type": "string"
2146
1872
  }
2147
- ]
2148
- },
2149
- "prefix": {
2150
- "description": "Database name prefix override",
2151
- "type": "string"
2152
- },
2153
- "ensureExists": {
2154
- "description": "Whether to ensure the given database exists by creating it if it does not.\nDefaults to true if unspecified.",
2155
- "type": "boolean"
2156
- },
2157
- "ensureSchemaExists": {
2158
- "description": "Whether to ensure the given database schema exists by creating it if it does not.\nDefaults to false if unspecified.\n\nNOTE: Currently only supported by the `pg` client when pluginDivisionMode: schema",
2159
- "type": "boolean"
2160
- },
2161
- "pluginDivisionMode": {
2162
- "description": "How plugins databases are managed/divided in the provided database instance.\n\n`database` -> Plugins are each given their own database to manage their schemas/tables.\n\n`schema` -> Plugins will be given their own schema (in the specified/default database)\n to manage their tables.\n\nNOTE: Currently only supported by the `pg` client.",
2163
- "default": "database",
2164
- "enum": [
2165
- "database",
2166
- "schema"
2167
- ],
2168
- "type": "string"
2169
- },
2170
- "role": {
2171
- "description": "Configures the ownership of newly created schemas in pg databases.",
2172
- "type": "string"
1873
+ },
1874
+ "commitSigningKey": {
1875
+ "description": "PGP signing key for signing commits.",
1876
+ "visibility": "secret",
1877
+ "type": "string"
1878
+ }
2173
1879
  },
2174
- "knexConfig": {
2175
- "description": "Arbitrary config object to pass to knex when initializing\n(https://knexjs.org/#Installation-client). Most notable is the debug\nand asyncStackTraces booleans",
2176
- "type": "object",
2177
- "properties": {},
2178
- "additionalProperties": true
1880
+ "required": [
1881
+ "host"
1882
+ ]
1883
+ }
1884
+ },
1885
+ "bitbucket": {
1886
+ "description": "Integration configuration for Bitbucket",
1887
+ "deprecated": "replaced by bitbucketCloud and bitbucketServer",
1888
+ "type": "array",
1889
+ "items": {
1890
+ "type": "object",
1891
+ "properties": {
1892
+ "host": {
1893
+ "description": "The hostname of the given Bitbucket instance",
1894
+ "visibility": "frontend",
1895
+ "type": "string"
1896
+ },
1897
+ "token": {
1898
+ "description": "Token used to authenticate requests.",
1899
+ "visibility": "secret",
1900
+ "type": "string"
1901
+ },
1902
+ "apiBaseUrl": {
1903
+ "description": "The base url for the Bitbucket API, for example https://api.bitbucket.org/2.0",
1904
+ "visibility": "frontend",
1905
+ "type": "string"
1906
+ },
1907
+ "username": {
1908
+ "description": "The username to use for authenticated requests.",
1909
+ "visibility": "secret",
1910
+ "type": "string"
1911
+ },
1912
+ "appPassword": {
1913
+ "description": "Bitbucket app password used to authenticate requests.",
1914
+ "visibility": "secret",
1915
+ "type": "string"
1916
+ },
1917
+ "commitSigningKey": {
1918
+ "description": "PGP signing key for signing commits.",
1919
+ "visibility": "secret",
1920
+ "type": "string"
1921
+ }
2179
1922
  },
2180
- "skipMigrations": {
2181
- "description": "Skip running database migrations.",
2182
- "type": "boolean"
1923
+ "required": [
1924
+ "host"
1925
+ ]
1926
+ }
1927
+ },
1928
+ "bitbucketCloud": {
1929
+ "description": "Integration configuration for Bitbucket Cloud",
1930
+ "type": "array",
1931
+ "items": {
1932
+ "type": "object",
1933
+ "properties": {
1934
+ "username": {
1935
+ "description": "The username to use for authenticated requests.",
1936
+ "visibility": "secret",
1937
+ "type": "string"
1938
+ },
1939
+ "appPassword": {
1940
+ "description": "Bitbucket Cloud app password used to authenticate requests.",
1941
+ "visibility": "secret",
1942
+ "type": "string"
1943
+ },
1944
+ "commitSigningKey": {
1945
+ "description": "PGP signing key for signing commits.",
1946
+ "visibility": "secret",
1947
+ "type": "string"
1948
+ }
2183
1949
  },
2184
- "plugin": {
2185
- "description": "Plugin specific database configuration and client override",
2186
- "type": "object",
2187
- "additionalProperties": {
2188
- "type": "object",
2189
- "properties": {
2190
- "client": {
2191
- "description": "Database client override",
2192
- "enum": [
2193
- "better-sqlite3",
2194
- "pg",
2195
- "sqlite3"
2196
- ],
2197
- "type": "string"
2198
- },
2199
- "connection": {
2200
- "description": "Database connection string or Knex object override",
2201
- "visibility": "secret",
2202
- "anyOf": [
2203
- {
2204
- "type": "object",
2205
- "properties": {
2206
- "type": {
2207
- "description": "The specific config for cloudsql connections",
2208
- "type": "string",
2209
- "const": "cloudsql"
2210
- },
2211
- "instance": {
2212
- "description": "The instance connection name for the cloudsql instance, e.g. `project:region:instance`",
2213
- "type": "string"
2214
- }
2215
- },
2216
- "required": [
2217
- "instance",
2218
- "type"
2219
- ]
2220
- },
2221
- {
2222
- "type": "object",
2223
- "additionalProperties": {},
2224
- "properties": {
2225
- "password": {
2226
- "description": "Password that belongs to the client User",
2227
- "visibility": "secret",
2228
- "type": "string"
2229
- }
2230
- }
2231
- },
2232
- {
2233
- "type": "string"
2234
- }
2235
- ]
2236
- },
2237
- "ensureExists": {
2238
- "description": "Whether to ensure the given database exists by creating it if it does not.\nDefaults to base config if unspecified.",
2239
- "type": "boolean"
2240
- },
2241
- "ensureSchemaExists": {
2242
- "description": "Whether to ensure the given database schema exists by creating it if it does not.\nDefaults to false if unspecified.\n\nNOTE: Currently only supported by the `pg` client when pluginDivisionMode: schema",
2243
- "type": "boolean"
2244
- },
2245
- "knexConfig": {
2246
- "description": "Arbitrary config object to pass to knex when initializing\n(https://knexjs.org/#Installation-client). Most notable is the\ndebug and asyncStackTraces booleans.\n\nThis is merged recursively into the base knexConfig",
2247
- "type": "object",
2248
- "properties": {},
2249
- "additionalProperties": true
2250
- },
2251
- "role": {
2252
- "description": "Configures the ownership of newly created schemas in pg databases.",
2253
- "type": "string"
2254
- },
2255
- "skipMigrations": {
2256
- "description": "Skip running database migrations.",
2257
- "type": "boolean"
2258
- }
2259
- }
1950
+ "required": [
1951
+ "appPassword",
1952
+ "username"
1953
+ ]
1954
+ }
1955
+ },
1956
+ "bitbucketServer": {
1957
+ "description": "Integration configuration for Bitbucket Server",
1958
+ "type": "array",
1959
+ "items": {
1960
+ "type": "object",
1961
+ "properties": {
1962
+ "host": {
1963
+ "description": "The hostname of the given Bitbucket Server instance",
1964
+ "visibility": "frontend",
1965
+ "type": "string"
1966
+ },
1967
+ "token": {
1968
+ "description": "Token used to authenticate requests.",
1969
+ "visibility": "secret",
1970
+ "type": "string"
1971
+ },
1972
+ "username": {
1973
+ "description": "Username used to authenticate requests with Basic Auth.",
1974
+ "visibility": "secret",
1975
+ "type": "string"
1976
+ },
1977
+ "password": {
1978
+ "description": "Password (or token as password) used to authenticate requests with Basic Auth.",
1979
+ "visibility": "secret",
1980
+ "type": "string"
1981
+ },
1982
+ "apiBaseUrl": {
1983
+ "description": "The base url for the Bitbucket Server API, for example https://<host>/rest/api/1.0",
1984
+ "visibility": "frontend",
1985
+ "type": "string"
1986
+ },
1987
+ "commitSigningKey": {
1988
+ "description": "PGP signing key for signing commits.",
1989
+ "visibility": "secret",
1990
+ "type": "string"
2260
1991
  }
2261
- }
2262
- },
2263
- "required": [
2264
- "client",
2265
- "connection"
2266
- ]
1992
+ },
1993
+ "required": [
1994
+ "host"
1995
+ ]
1996
+ }
2267
1997
  },
2268
- "cache": {
2269
- "description": "Cache connection configuration, select cache type using the `store` field",
2270
- "anyOf": [
2271
- {
2272
- "type": "object",
2273
- "properties": {
2274
- "store": {
2275
- "type": "string",
2276
- "const": "memory"
2277
- },
2278
- "defaultTtl": {
2279
- "description": "An optional default TTL (in milliseconds, if given as a number)."
2280
- }
1998
+ "gerrit": {
1999
+ "description": "Integration configuration for Gerrit",
2000
+ "type": "array",
2001
+ "items": {
2002
+ "type": "object",
2003
+ "properties": {
2004
+ "host": {
2005
+ "description": "The hostname of the given Gerrit instance",
2006
+ "visibility": "frontend",
2007
+ "type": "string"
2281
2008
  },
2282
- "required": [
2283
- "store"
2284
- ]
2285
- },
2286
- {
2287
- "type": "object",
2288
- "properties": {
2289
- "store": {
2290
- "type": "string",
2291
- "const": "redis"
2292
- },
2293
- "connection": {
2294
- "description": "A redis connection string in the form `redis://user:pass@host:port`.",
2295
- "visibility": "secret",
2296
- "type": "string"
2297
- },
2298
- "defaultTtl": {
2299
- "description": "An optional default TTL (in milliseconds, if given as a number)."
2300
- },
2301
- "redis": {
2302
- "type": "object",
2303
- "properties": {
2304
- "client": {
2305
- "description": "An optional Redis client configuration. These options are passed to the `@keyv/redis` client.",
2306
- "type": "object",
2307
- "properties": {
2308
- "namespace": {
2309
- "description": "Namespace for the current instance.",
2310
- "type": "string"
2311
- },
2312
- "keyPrefixSeparator": {
2313
- "description": "Separator to use between namespace and key.",
2314
- "type": "string"
2315
- },
2316
- "clearBatchSize": {
2317
- "description": "Number of keys to delete in a single batch.",
2318
- "type": "number"
2319
- },
2320
- "useUnlink": {
2321
- "description": "Enable Unlink instead of using Del for clearing keys. This is more performant but may not be supported by all Redis versions.",
2322
- "type": "boolean"
2323
- },
2324
- "noNamespaceAffectsAll": {
2325
- "description": "Whether to allow clearing all keys when no namespace is set.\nIf set to true and no namespace is set, iterate() will return all keys.\nDefaults to `false`.",
2326
- "type": "boolean"
2327
- }
2328
- }
2329
- },
2330
- "cluster": {
2331
- "description": "An optional Redis cluster configuration.",
2332
- "type": "object",
2333
- "properties": {
2334
- "rootNodes": {
2335
- "description": "Cluster configuration options to be passed to the `@keyv/redis` client (and node-redis under the hood)\nhttps://github.com/redis/node-redis/blob/master/docs/clustering.md",
2336
- "visibility": "secret",
2337
- "type": "array",
2338
- "items": {
2339
- "type": "object",
2340
- "properties": {},
2341
- "additionalProperties": true
2342
- }
2343
- },
2344
- "defaults": {
2345
- "description": "Cluster node default configuration options to be passed to the `@keyv/redis` client (and node-redis under the hood)\nhttps://github.com/redis/node-redis/blob/master/docs/clustering.md",
2346
- "visibility": "secret",
2347
- "type": "object",
2348
- "properties": {},
2349
- "additionalProperties": true
2350
- },
2351
- "minimizeConnections": {
2352
- "description": "When `true`, `.connect()` will only discover the cluster topology, without actually connecting to all the nodes.\nUseful for short-term or PubSub-only connections.",
2353
- "type": "boolean"
2354
- },
2355
- "useReplicas": {
2356
- "description": "When `true`, distribute load by executing readonly commands (such as `GET`, `GEOSEARCH`, etc.) across all cluster nodes. When `false`, only use master nodes.",
2357
- "type": "boolean"
2358
- },
2359
- "maxCommandRedirections": {
2360
- "description": "The maximum number of times a command will be redirected due to `MOVED` or `ASK` errors.",
2361
- "type": "number"
2362
- }
2363
- },
2364
- "required": [
2365
- "rootNodes"
2366
- ]
2367
- }
2368
- }
2369
- }
2009
+ "baseUrl": {
2010
+ "description": "The base url for the Gerrit instance.",
2011
+ "visibility": "frontend",
2012
+ "type": "string"
2370
2013
  },
2371
- "required": [
2372
- "connection",
2373
- "store"
2374
- ]
2014
+ "gitilesBaseUrl": {
2015
+ "description": "The gitiles base url.",
2016
+ "visibility": "frontend",
2017
+ "type": "string"
2018
+ },
2019
+ "cloneUrl": {
2020
+ "description": "The base url for cloning repos.",
2021
+ "visibility": "frontend",
2022
+ "type": "string"
2023
+ },
2024
+ "disableEditUrl": {
2025
+ "description": "Disable the edit url feature.",
2026
+ "visibility": "frontend",
2027
+ "type": "boolean"
2028
+ },
2029
+ "username": {
2030
+ "description": "The username to use for authenticated requests.",
2031
+ "visibility": "secret",
2032
+ "type": "string"
2033
+ },
2034
+ "password": {
2035
+ "description": "Gerrit password used to authenticate requests. This can be either a password\nor a generated access token.",
2036
+ "visibility": "secret",
2037
+ "type": "string"
2038
+ },
2039
+ "commitSigningKey": {
2040
+ "description": "PGP signing key for signing commits.",
2041
+ "visibility": "secret",
2042
+ "type": "string"
2043
+ }
2375
2044
  },
2376
- {
2377
- "type": "object",
2378
- "properties": {
2379
- "store": {
2380
- "type": "string",
2381
- "const": "valkey"
2382
- },
2383
- "connection": {
2384
- "description": "A valkey connection string in the form `redis://user:pass@host:port`.",
2385
- "visibility": "secret",
2386
- "type": "string"
2387
- },
2388
- "defaultTtl": {
2389
- "description": "An optional default TTL (in milliseconds, if given as a number)."
2390
- },
2391
- "valkey": {
2392
- "type": "object",
2393
- "properties": {
2394
- "client": {
2395
- "description": "An optional Valkey client configuration. These options are passed to the `@keyv/valkey` client.",
2396
- "type": "object",
2397
- "properties": {
2398
- "namespace": {
2399
- "description": "Namespace for the current instance.",
2400
- "type": "string"
2401
- },
2402
- "keyPrefixSeparator": {
2403
- "description": "Separator to use between namespace and key.",
2404
- "type": "string"
2405
- },
2406
- "clearBatchSize": {
2407
- "description": "Number of keys to delete in a single batch.",
2408
- "type": "number"
2409
- },
2410
- "useUnlink": {
2411
- "description": "Enable Unlink instead of using Del for clearing keys. This is more performant but may not be supported by all Redis versions.",
2412
- "type": "boolean"
2413
- },
2414
- "noNamespaceAffectsAll": {
2415
- "description": "Whether to allow clearing all keys when no namespace is set.\nIf set to true and no namespace is set, iterate() will return all keys.\nDefaults to `false`.",
2416
- "type": "boolean"
2417
- }
2418
- }
2419
- },
2420
- "cluster": {
2421
- "description": "An optional Valkey cluster (redis cluster under the hood) configuration.",
2422
- "type": "object",
2423
- "properties": {
2424
- "rootNodes": {
2425
- "description": "Cluster configuration options to be passed to the `@keyv/valkey` client (and node-redis under the hood)\nhttps://github.com/redis/node-redis/blob/master/docs/clustering.md",
2426
- "visibility": "secret",
2427
- "type": "array",
2428
- "items": {
2429
- "type": "object",
2430
- "properties": {},
2431
- "additionalProperties": true
2432
- }
2433
- },
2434
- "defaults": {
2435
- "description": "Cluster node default configuration options to be passed to the `@keyv/redis` client (and node-redis under the hood)\nhttps://github.com/redis/node-redis/blob/master/docs/clustering.md",
2436
- "visibility": "secret",
2437
- "type": "object",
2438
- "properties": {},
2439
- "additionalProperties": true
2440
- },
2441
- "minimizeConnections": {
2442
- "description": "When `true`, `.connect()` will only discover the cluster topology, without actually connecting to all the nodes.\nUseful for short-term or PubSub-only connections.",
2443
- "type": "boolean"
2444
- },
2445
- "useReplicas": {
2446
- "description": "When `true`, distribute load by executing readonly commands (such as `GET`, `GEOSEARCH`, etc.) across all cluster nodes. When `false`, only use master nodes.",
2447
- "type": "boolean"
2448
- },
2449
- "maxCommandRedirections": {
2450
- "description": "The maximum number of times a command will be redirected due to `MOVED` or `ASK` errors.",
2451
- "type": "number"
2452
- }
2453
- },
2454
- "required": [
2455
- "rootNodes"
2045
+ "required": [
2046
+ "gitilesBaseUrl",
2047
+ "host"
2048
+ ]
2049
+ }
2050
+ },
2051
+ "github": {
2052
+ "description": "Integration configuration for GitHub",
2053
+ "type": "array",
2054
+ "items": {
2055
+ "type": "object",
2056
+ "properties": {
2057
+ "host": {
2058
+ "description": "The hostname of the given GitHub instance",
2059
+ "visibility": "frontend",
2060
+ "type": "string"
2061
+ },
2062
+ "token": {
2063
+ "description": "Token used to authenticate requests.",
2064
+ "visibility": "secret",
2065
+ "type": "string"
2066
+ },
2067
+ "apiBaseUrl": {
2068
+ "description": "The base url for the GitHub API, for example https://api.github.com",
2069
+ "visibility": "frontend",
2070
+ "type": "string"
2071
+ },
2072
+ "rawBaseUrl": {
2073
+ "description": "The base url for GitHub raw resources, for example https://raw.githubusercontent.com",
2074
+ "visibility": "frontend",
2075
+ "type": "string"
2076
+ },
2077
+ "apps": {
2078
+ "description": "GitHub Apps configuration",
2079
+ "type": "array",
2080
+ "items": {
2081
+ "type": "object",
2082
+ "properties": {
2083
+ "appId": {
2084
+ "description": "The numeric GitHub App ID, string for environment variables",
2085
+ "type": [
2086
+ "string",
2087
+ "number"
2456
2088
  ]
2089
+ },
2090
+ "privateKey": {
2091
+ "description": "The private key to use for auth against the app",
2092
+ "visibility": "secret",
2093
+ "type": "string"
2094
+ },
2095
+ "webhookSecret": {
2096
+ "description": "The secret used for webhooks",
2097
+ "visibility": "secret",
2098
+ "type": "string"
2099
+ },
2100
+ "clientId": {
2101
+ "description": "The client ID to use",
2102
+ "type": "string"
2103
+ },
2104
+ "clientSecret": {
2105
+ "description": "The client secret to use",
2106
+ "visibility": "secret",
2107
+ "type": "string"
2108
+ },
2109
+ "allowedInstallationOwners": {
2110
+ "description": "List of installation owners allowed to be used by this GitHub app. The GitHub UI does not provide a way to list the installations.\nHowever you can list the installations with the GitHub API. You can find the list of installations here:\nhttps://api.github.com/app/installations\nThe relevant documentation for this is here.\nhttps://docs.github.com/en/rest/reference/apps#list-installations-for-the-authenticated-app--code-samples",
2111
+ "type": "array",
2112
+ "items": {
2113
+ "type": "string"
2114
+ }
2457
2115
  }
2458
- }
2116
+ },
2117
+ "required": [
2118
+ "appId",
2119
+ "clientId",
2120
+ "clientSecret",
2121
+ "privateKey"
2122
+ ]
2459
2123
  }
2460
- },
2461
- "required": [
2462
- "connection",
2463
- "store"
2464
- ]
2124
+ }
2465
2125
  },
2466
- {
2467
- "type": "object",
2468
- "properties": {
2469
- "store": {
2470
- "type": "string",
2471
- "const": "memcache"
2472
- },
2473
- "connection": {
2474
- "description": "A memcache connection string in the form `user:pass@host:port`.",
2475
- "visibility": "secret",
2476
- "type": "string"
2477
- },
2478
- "defaultTtl": {
2479
- "description": "An optional default TTL (in milliseconds)."
2480
- }
2126
+ "required": [
2127
+ "host"
2128
+ ]
2129
+ }
2130
+ },
2131
+ "gitlab": {
2132
+ "description": "Integration configuration for GitLab",
2133
+ "type": "array",
2134
+ "items": {
2135
+ "type": "object",
2136
+ "properties": {
2137
+ "host": {
2138
+ "description": "The host of the target that this matches on, e.g. \"gitlab.com\".",
2139
+ "visibility": "frontend",
2140
+ "type": "string"
2481
2141
  },
2482
- "required": [
2483
- "connection",
2484
- "store"
2485
- ]
2486
- }
2487
- ]
2142
+ "apiBaseUrl": {
2143
+ "description": "The base URL of the API of this provider, e.g.\n\"https://gitlab.com/api/v4\", with no trailing slash.\n\nMay be omitted specifically for public GitLab; then it will be deduced.",
2144
+ "visibility": "frontend",
2145
+ "type": "string"
2146
+ },
2147
+ "token": {
2148
+ "description": "The authorization token to use for requests to this provider.\n\nIf no token is specified, anonymous access is used.",
2149
+ "visibility": "secret",
2150
+ "type": "string"
2151
+ },
2152
+ "baseUrl": {
2153
+ "description": "The baseUrl of this provider, e.g. \"https://gitlab.com\", which is\npassed into the GitLab client.\n\nIf no baseUrl is provided, it will default to https://${host}.",
2154
+ "visibility": "frontend",
2155
+ "type": "string"
2156
+ },
2157
+ "commitSigningKey": {
2158
+ "description": "PGP signing key for signing commits.",
2159
+ "visibility": "secret",
2160
+ "type": "string"
2161
+ }
2162
+ },
2163
+ "required": [
2164
+ "host"
2165
+ ]
2166
+ }
2488
2167
  },
2489
- "cors": {
2168
+ "googleGcs": {
2169
+ "description": "Integration configuration for Google Cloud Storage",
2490
2170
  "type": "object",
2491
2171
  "properties": {
2492
- "origin": {
2493
- "anyOf": [
2494
- {
2495
- "type": "array",
2496
- "items": {
2497
- "type": "string"
2498
- }
2499
- },
2500
- {
2501
- "type": "string"
2502
- }
2503
- ]
2504
- },
2505
- "methods": {
2506
- "anyOf": [
2507
- {
2508
- "type": "array",
2509
- "items": {
2510
- "type": "string"
2511
- }
2512
- },
2513
- {
2514
- "type": "string"
2515
- }
2516
- ]
2517
- },
2518
- "allowedHeaders": {
2519
- "anyOf": [
2520
- {
2521
- "type": "array",
2522
- "items": {
2523
- "type": "string"
2524
- }
2525
- },
2526
- {
2527
- "type": "string"
2528
- }
2529
- ]
2530
- },
2531
- "exposedHeaders": {
2532
- "anyOf": [
2533
- {
2534
- "type": "array",
2535
- "items": {
2536
- "type": "string"
2537
- }
2538
- },
2539
- {
2540
- "type": "string"
2541
- }
2542
- ]
2543
- },
2544
- "credentials": {
2545
- "type": "boolean"
2546
- },
2547
- "maxAge": {
2548
- "type": "number"
2549
- },
2550
- "preflightContinue": {
2551
- "type": "boolean"
2172
+ "clientEmail": {
2173
+ "description": "Service account email used to authenticate requests.",
2174
+ "type": "string"
2552
2175
  },
2553
- "optionsSuccessStatus": {
2554
- "type": "number"
2176
+ "privateKey": {
2177
+ "description": "Service account private key used to authenticate requests.",
2178
+ "visibility": "secret",
2179
+ "type": "string"
2555
2180
  }
2556
2181
  }
2557
2182
  },
2558
- "csp": {
2559
- "description": "Content Security Policy options.\n\nThe keys are the plain policy ID, e.g. \"upgrade-insecure-requests\". The\nvalues are on the format that the helmet library expects them, as an\narray of strings. There is also the special value false, which means to\nremove the default value that Backstage puts in place for that policy.",
2560
- "type": "object",
2561
- "additionalProperties": {
2562
- "anyOf": [
2563
- {
2564
- "type": "array",
2565
- "items": {
2566
- "type": "string"
2567
- }
2183
+ "awsS3": {
2184
+ "description": "Integration configuration for AWS S3 Service",
2185
+ "type": "array",
2186
+ "items": {
2187
+ "type": "object",
2188
+ "properties": {
2189
+ "endpoint": {
2190
+ "description": "AWS Endpoint.\nThe endpoint URI to send requests to. The default endpoint is built from the configured region.",
2191
+ "visibility": "frontend",
2192
+ "type": "string"
2193
+ },
2194
+ "s3ForcePathStyle": {
2195
+ "description": "Whether to use path style URLs when communicating with S3.\nDefaults to false.\nThis allows providers like LocalStack, Minio and Wasabi (and possibly others) to be used.",
2196
+ "visibility": "frontend",
2197
+ "type": "boolean"
2198
+ },
2199
+ "accessKeyId": {
2200
+ "description": "Account access key used to authenticate requests.",
2201
+ "type": "string"
2202
+ },
2203
+ "secretAccessKey": {
2204
+ "description": "Account secret key used to authenticate requests.",
2205
+ "visibility": "secret",
2206
+ "type": "string"
2207
+ },
2208
+ "roleArn": {
2209
+ "description": "ARN of the role to be assumed",
2210
+ "type": "string"
2211
+ },
2212
+ "externalId": {
2213
+ "description": "External ID to use when assuming role",
2214
+ "type": "string"
2215
+ }
2216
+ }
2217
+ }
2218
+ },
2219
+ "gitea": {
2220
+ "description": "Integration configuration for Gitea",
2221
+ "type": "array",
2222
+ "items": {
2223
+ "type": "object",
2224
+ "properties": {
2225
+ "host": {
2226
+ "description": "The hostname of the given Gitea instance",
2227
+ "visibility": "frontend",
2228
+ "type": "string"
2568
2229
  },
2569
- {
2570
- "const": false,
2571
- "type": "boolean"
2230
+ "baseUrl": {
2231
+ "description": "The base url for the Gitea instance.",
2232
+ "visibility": "frontend",
2233
+ "type": "string"
2234
+ },
2235
+ "username": {
2236
+ "description": "The username to use for authenticated requests.",
2237
+ "visibility": "secret",
2238
+ "type": "string"
2239
+ },
2240
+ "password": {
2241
+ "description": "Gitea password used to authenticate requests. This can be either a password\nor a generated access token.",
2242
+ "visibility": "secret",
2243
+ "type": "string"
2244
+ },
2245
+ "commitSigningKey": {
2246
+ "description": "PGP signing key for signing commits.",
2247
+ "visibility": "secret",
2248
+ "type": "string"
2572
2249
  }
2250
+ },
2251
+ "required": [
2252
+ "host"
2573
2253
  ]
2574
2254
  }
2575
2255
  },
2576
- "health": {
2577
- "description": "Options for the health check service and endpoint.",
2578
- "type": "object",
2579
- "properties": {
2580
- "headers": {
2581
- "description": "Additional headers to always include in the health check response.\n\nIt can be a good idea to set a header that uniquely identifies your service\nin a multi-service environment. This ensures that the health check that is\nconfigured for your service is actually hitting your service and not another.\n\nFor example, if using Envoy you can use the `service_name_matcher` configuration\nand set the `x-envoy-upstream-healthchecked-cluster` header to a matching value.",
2582
- "type": "object",
2583
- "additionalProperties": {
2256
+ "harness": {
2257
+ "description": "Integration configuration for Harness Code",
2258
+ "type": "array",
2259
+ "items": {
2260
+ "type": "object",
2261
+ "properties": {
2262
+ "host": {
2263
+ "description": "The hostname of the given Harness Code instance",
2264
+ "visibility": "frontend",
2265
+ "type": "string"
2266
+ },
2267
+ "apiKey": {
2268
+ "description": "The apikey to use for authenticated requests.",
2269
+ "visibility": "secret",
2270
+ "type": "string"
2271
+ },
2272
+ "token": {
2273
+ "description": "Harness Code token used to authenticate requests. This can be either a generated access token.",
2274
+ "visibility": "secret",
2584
2275
  "type": "string"
2585
2276
  }
2586
- }
2277
+ },
2278
+ "required": [
2279
+ "host"
2280
+ ]
2587
2281
  }
2588
- },
2589
- "rateLimit": {
2590
- "description": "Rate limiting options. Defining this as `true` will enable rate limiting with default values.",
2282
+ }
2283
+ }
2284
+ }
2285
+ },
2286
+ "$schema": "http://json-schema.org/draft-07/schema#"
2287
+ },
2288
+ "packageName": "@backstage/integration"
2289
+ },
2290
+ {
2291
+ "path": "../backend-app-api/config.d.ts",
2292
+ "value": {
2293
+ "type": "object",
2294
+ "properties": {
2295
+ "backend": {
2296
+ "type": "object",
2297
+ "properties": {
2298
+ "packages": {
2299
+ "description": "Used by the feature discovery service",
2591
2300
  "anyOf": [
2592
2301
  {
2593
2302
  "type": "object",
2594
2303
  "properties": {
2595
- "store": {
2596
- "anyOf": [
2597
- {
2598
- "type": "object",
2599
- "properties": {
2600
- "type": {
2601
- "type": "string",
2602
- "const": "redis"
2603
- },
2604
- "connection": {
2605
- "type": "string"
2606
- }
2607
- },
2608
- "required": [
2609
- "connection",
2610
- "type"
2611
- ]
2612
- },
2613
- {
2614
- "type": "object",
2615
- "properties": {
2616
- "type": {
2617
- "type": "string",
2618
- "const": "memory"
2619
- }
2620
- },
2621
- "required": [
2622
- "type"
2623
- ]
2624
- }
2625
- ]
2626
- },
2627
- "global": {
2628
- "description": "Enable/disable global rate limiting. If this is disabled, plugin specific rate limiting must be\nused.",
2629
- "type": "boolean"
2630
- },
2631
- "window": {
2632
- "description": "Time frame in milliseconds or as human duration for which requests are checked/remembered.\nDefaults to one minute."
2633
- },
2634
- "incomingRequestLimit": {
2635
- "description": "The maximum number of connections to allow during the `window` before rate limiting the client.\nDefaults to 5.",
2636
- "type": "number"
2637
- },
2638
- "passOnStoreError": {
2639
- "description": "Whether to pass requests in case of store failure.\nDefaults to false.",
2640
- "type": "boolean"
2641
- },
2642
- "ipAllowList": {
2643
- "description": "List of allowed IP addresses that are not rate limited.\nDefaults to [127.0.0.1, 0:0:0:0:0:0:0:1, ::1].",
2304
+ "include": {
2644
2305
  "type": "array",
2645
2306
  "items": {
2646
2307
  "type": "string"
2647
2308
  }
2648
2309
  },
2649
- "skipSuccessfulRequests": {
2650
- "description": "Skip rate limiting for requests that have been successful.\nDefaults to false.",
2651
- "type": "boolean"
2652
- },
2653
- "skipFailedRequests": {
2654
- "description": "Skip rate limiting for requests that have failed.\nDefaults to false.",
2655
- "type": "boolean"
2656
- },
2657
- "plugin": {
2658
- "description": "Plugin specific rate limiting configuration",
2659
- "type": "object",
2660
- "additionalProperties": {
2661
- "type": "object",
2662
- "properties": {
2663
- "window": {
2664
- "description": "Time frame in milliseconds or as human duration for which requests are checked/remembered.\nDefaults to one minute."
2665
- },
2666
- "incomingRequestLimit": {
2667
- "description": "The maximum number of connections to allow during the `window` before rate limiting the client.\nDefaults to 5.",
2668
- "type": "number"
2669
- },
2670
- "passOnStoreError": {
2671
- "description": "Whether to pass requests in case of store failure.\nDefaults to false.",
2672
- "type": "boolean"
2673
- },
2674
- "ipAllowList": {
2675
- "description": "List of allowed IP addresses that are not rate limited.\nDefaults to [127.0.0.1, 0:0:0:0:0:0:0:1, ::1].",
2676
- "type": "array",
2677
- "items": {
2678
- "type": "string"
2679
- }
2680
- },
2681
- "skipSuccessfulRequests": {
2682
- "description": "Skip rate limiting for requests that have been successful.\nDefaults to false.",
2683
- "type": "boolean"
2684
- },
2685
- "skipFailedRequests": {
2686
- "description": "Skip rate limiting for requests that have failed.\nDefaults to false.",
2687
- "type": "boolean"
2688
- }
2689
- }
2310
+ "exclude": {
2311
+ "type": "array",
2312
+ "items": {
2313
+ "type": "string"
2690
2314
  }
2691
2315
  }
2692
2316
  }
2693
2317
  },
2694
2318
  {
2695
- "const": true,
2696
- "type": "boolean"
2319
+ "const": "all",
2320
+ "type": "string"
2697
2321
  }
2698
2322
  ]
2699
2323
  },
2700
- "reading": {
2701
- "description": "Configuration related to URL reading, used for example for reading catalog info\nfiles, scaffolder templates, and techdocs content.",
2324
+ "startup": {
2702
2325
  "type": "object",
2703
2326
  "properties": {
2704
- "allow": {
2705
- "description": "A list of targets to allow outgoing requests to. Users will be able to make\nrequests on behalf of the backend to the targets that are allowed by this list.",
2706
- "type": "array",
2707
- "items": {
2708
- "type": "object",
2709
- "properties": {
2710
- "host": {
2711
- "description": "A host to allow outgoing requests to, being either a full host or\na subdomain wildcard pattern with a leading `*`. For example `example.com`\nand `*.example.com` are valid values, `prod.*.example.com` is not.\nThe host may also contain a port, for example `example.com:8080`.",
2712
- "type": "string"
2713
- },
2714
- "paths": {
2715
- "description": "An optional list of paths. In case they are present only targets matching\nany of them will are allowed. You can use trailing slashes to make sure only\nsubdirectories are allowed, for example `/mydir/` will allow targets with\npaths like `/mydir/a` but will block paths like `/mydir2`.",
2716
- "type": "array",
2717
- "items": {
2718
- "type": "string"
2719
- }
2720
- }
2327
+ "default": {
2328
+ "type": "object",
2329
+ "properties": {
2330
+ "onPluginBootFailure": {
2331
+ "description": "The default value for `onPluginBootFailure` if not specified for a particular plugin.\nThis defaults to 'abort', which means `onPluginBootFailure: continue` must be specified\nfor backend startup to continue on plugin boot failure. This can also be set to\n'continue', which flips the logic for individual plugins so that they must be set to\n`onPluginBootFailure: abort` to be required.",
2332
+ "enum": [
2333
+ "abort",
2334
+ "continue"
2335
+ ],
2336
+ "type": "string"
2721
2337
  },
2722
- "required": [
2723
- "host"
2724
- ]
2338
+ "onPluginModuleBootFailure": {
2339
+ "description": "The default value for `onPluginModuleBootFailure` if not specified for a particular plugin module.\nThis defaults to 'abort', which means `onPluginModuleBootFailure: continue` must be specified\nfor backend startup to continue on plugin module boot failure. This can also be set to\n'continue', which flips the logic for individual plugin modules so that they must be set to\n`onPluginModuleBootFailure: abort` to be required.",
2340
+ "enum": [
2341
+ "abort",
2342
+ "continue"
2343
+ ],
2344
+ "type": "string"
2345
+ }
2725
2346
  }
2726
- }
2727
- }
2728
- }
2729
- },
2730
- "required": [
2731
- "baseUrl",
2732
- "database"
2733
- ]
2734
- },
2735
- "discovery": {
2736
- "description": "Options used by the default discovery service.",
2737
- "type": "object",
2738
- "properties": {
2739
- "endpoints": {
2740
- "description": "A list of target base URLs and their associated plugins.",
2741
- "type": "array",
2742
- "items": {
2743
- "type": "object",
2744
- "properties": {
2745
- "target": {
2746
- "description": "The target base URL to use for the given set of plugins. Note that this\nneeds to be a full URL including the protocol and path parts that fully\naddress the root of a plugin's API endpoints.",
2747
- "anyOf": [
2748
- {
2347
+ },
2348
+ "plugins": {
2349
+ "type": "object",
2350
+ "additionalProperties": {
2351
+ "type": "object",
2352
+ "properties": {
2353
+ "onPluginBootFailure": {
2354
+ "description": "Used to control backend startup behavior when this plugin fails to boot up. Setting\nthis to `continue` allows the backend to continue starting up, even if this plugin\nfails. This can enable leaving a crashing plugin installed, but still permit backend\nstartup, which may help troubleshoot data-dependent issues. Plugin failures for plugins\nset to `abort` are fatal (this is the default unless overridden by the `default`\nsetting).",
2355
+ "enum": [
2356
+ "abort",
2357
+ "continue"
2358
+ ],
2359
+ "type": "string"
2360
+ },
2361
+ "modules": {
2749
2362
  "type": "object",
2750
- "properties": {
2751
- "internal": {
2752
- "type": "string"
2753
- },
2754
- "external": {
2755
- "type": "string"
2363
+ "additionalProperties": {
2364
+ "type": "object",
2365
+ "properties": {
2366
+ "onPluginModuleBootFailure": {
2367
+ "description": "Used to control backend startup behavior when this plugin module fails to boot up. Setting\nthis to `continue` allows the backend to continue starting up, even if this plugin\nmodule fails. This can enable leaving a crashing plugin installed, but still permit backend\nstartup, which may help troubleshoot data-dependent issues. Plugin module failures for plugin modules\nset to `abort` are fatal (this is the default unless overridden by the `default`\nsetting).",
2368
+ "enum": [
2369
+ "abort",
2370
+ "continue"
2371
+ ],
2372
+ "type": "string"
2373
+ }
2756
2374
  }
2757
2375
  }
2758
- },
2759
- {
2760
- "type": "string"
2761
2376
  }
2762
- ]
2763
- },
2764
- "plugins": {
2765
- "description": "Array of plugins which use that target base URL.\n\nThe special value `*` can be used to match all plugins.",
2766
- "type": "array",
2767
- "items": {
2768
- "type": "string"
2769
2377
  }
2770
2378
  }
2771
- },
2772
- "required": [
2773
- "plugins",
2774
- "target"
2775
- ]
2379
+ }
2776
2380
  }
2777
2381
  }
2778
- },
2779
- "required": [
2780
- "endpoints"
2781
- ]
2382
+ }
2782
2383
  }
2783
2384
  },
2784
- "required": [
2785
- "app"
2786
- ],
2787
2385
  "$schema": "http://json-schema.org/draft-07/schema#"
2788
2386
  },
2789
- "packageName": "@backstage/backend-defaults"
2387
+ "packageName": "@backstage/backend-app-api"
2790
2388
  },
2791
2389
  {
2792
- "path": "../../plugins/events-node/config.d.ts",
2390
+ "path": "../backend-defaults/config.d.ts",
2793
2391
  "value": {
2794
2392
  "type": "object",
2795
2393
  "properties": {
2796
- "events": {
2394
+ "app": {
2797
2395
  "type": "object",
2798
2396
  "properties": {
2799
- "useEventBus": {
2800
- "description": "Whether to use the event bus API in the events plugin backend to\ndistribute events across multiple instances when publishing and\nsubscribing to events.\n\nThe default is 'auto', which means means that the event bus API will be\nused if it's available, but will be disabled if the events backend\nreturns a 404.\n\nIf set to 'never', the events service will only ever publish events\nlocally to the same instance, while if set to 'always', the event bus API\nwill never be disabled, even if the events backend returns a 404.",
2801
- "enum": [
2802
- "always",
2803
- "auto",
2804
- "never"
2805
- ],
2397
+ "baseUrl": {
2806
2398
  "type": "string"
2807
2399
  }
2808
- }
2809
- }
2810
- },
2811
- "$schema": "http://json-schema.org/draft-07/schema#"
2812
- },
2813
- "packageName": "@backstage/plugin-events-node"
2814
- },
2815
- {
2816
- "path": "../../plugins/auth-backend-module-google-provider/config.d.ts",
2817
- "value": {
2818
- "type": "object",
2819
- "properties": {
2820
- "auth": {
2821
- "description": "Configuration options for the auth plugin",
2400
+ },
2401
+ "required": [
2402
+ "baseUrl"
2403
+ ]
2404
+ },
2405
+ "backend": {
2822
2406
  "type": "object",
2823
2407
  "properties": {
2824
- "providers": {
2408
+ "baseUrl": {
2409
+ "description": "The full base URL of the backend, as seen from the browser's point of\nview as it makes calls to the backend.",
2410
+ "type": "string"
2411
+ },
2412
+ "lifecycle": {
2825
2413
  "type": "object",
2826
2414
  "properties": {
2827
- "google": {
2828
- "visibility": "frontend",
2415
+ "startupRequestPauseTimeout": {
2416
+ "description": "The maximum time that paused requests will wait for the service to start, before returning an error.\nDefaults to 5 seconds\nSupported formats:\n- A string in the format of '1d', '2 seconds' etc. as supported by the `ms`\n library.\n- A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'.\n- An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`."
2417
+ },
2418
+ "serverShutdownDelay": {
2419
+ "description": "The minimum time that the HTTP server will delay the shutdown of the backend. During this delay health checks will be set to failing, allowing traffic to drain.\nDefaults to 0 seconds.\nSupported formats:\n- A string in the format of '1d', '2 seconds' etc. as supported by the `ms`\n library.\n- A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'.\n- An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`."
2420
+ }
2421
+ }
2422
+ },
2423
+ "trustProxy": {
2424
+ "description": "Corresponds to the Express `trust proxy` setting.",
2425
+ "anyOf": [
2426
+ {
2427
+ "type": "array",
2428
+ "items": {
2429
+ "type": "string"
2430
+ }
2431
+ },
2432
+ {
2433
+ "type": [
2434
+ "string",
2435
+ "number",
2436
+ "boolean"
2437
+ ]
2438
+ }
2439
+ ]
2440
+ },
2441
+ "listen": {
2442
+ "description": "Address that the backend should listen to.",
2443
+ "anyOf": [
2444
+ {
2829
2445
  "type": "object",
2830
- "additionalProperties": {
2831
- "type": "object",
2832
- "properties": {
2833
- "clientId": {
2834
- "type": "string"
2835
- },
2836
- "clientSecret": {
2837
- "visibility": "secret",
2838
- "type": "string"
2839
- },
2840
- "callbackUrl": {
2841
- "type": "string"
2842
- },
2843
- "additionalScopes": {
2844
- "anyOf": [
2845
- {
2846
- "type": "array",
2847
- "items": {
2848
- "type": "string"
2849
- }
2850
- },
2851
- {
2852
- "type": "string"
2853
- }
2854
- ]
2855
- },
2856
- "signIn": {
2857
- "type": "object",
2858
- "properties": {
2859
- "resolvers": {
2860
- "type": "array",
2861
- "items": {
2862
- "anyOf": [
2863
- {
2864
- "type": "object",
2865
- "properties": {
2866
- "resolver": {
2867
- "type": "string",
2868
- "const": "emailMatchingUserEntityAnnotation"
2869
- },
2870
- "dangerouslyAllowSignInWithoutUserInCatalog": {
2871
- "type": "boolean"
2872
- }
2873
- },
2874
- "required": [
2875
- "resolver"
2876
- ]
2877
- },
2878
- {
2879
- "type": "object",
2880
- "properties": {
2881
- "resolver": {
2882
- "type": "string",
2883
- "const": "emailLocalPartMatchingUserEntityName"
2884
- },
2885
- "allowedDomains": {
2886
- "type": "array",
2887
- "items": {
2888
- "type": "string"
2889
- }
2890
- },
2891
- "dangerouslyAllowSignInWithoutUserInCatalog": {
2892
- "type": "boolean"
2893
- }
2894
- },
2895
- "required": [
2896
- "resolver"
2897
- ]
2898
- },
2899
- {
2900
- "type": "object",
2901
- "properties": {
2902
- "resolver": {
2903
- "type": "string",
2904
- "const": "emailMatchingUserEntityProfileEmail"
2905
- },
2906
- "dangerouslyAllowSignInWithoutUserInCatalog": {
2907
- "type": "boolean"
2908
- }
2909
- },
2910
- "required": [
2911
- "resolver"
2912
- ]
2913
- }
2914
- ]
2915
- }
2916
- }
2446
+ "properties": {
2447
+ "host": {
2448
+ "description": "Address of the interface that the backend should bind to.",
2449
+ "type": "string"
2450
+ },
2451
+ "port": {
2452
+ "description": "Port that the backend should listen to.",
2453
+ "type": [
2454
+ "string",
2455
+ "number"
2456
+ ]
2457
+ }
2458
+ }
2459
+ },
2460
+ {
2461
+ "type": "string"
2462
+ }
2463
+ ]
2464
+ },
2465
+ "https": {
2466
+ "description": "HTTPS configuration for the backend. If omitted the backend will serve HTTP.\n\nSetting this to `true` will cause self-signed certificates to be generated, which\ncan be useful for local development or other non-production scenarios.",
2467
+ "anyOf": [
2468
+ {
2469
+ "type": "object",
2470
+ "properties": {
2471
+ "certificate": {
2472
+ "description": "Certificate configuration",
2473
+ "type": "object",
2474
+ "properties": {
2475
+ "cert": {
2476
+ "description": "PEM encoded certificate. Use $file to load in a file",
2477
+ "type": "string"
2917
2478
  },
2918
- "required": [
2919
- "resolvers"
2920
- ]
2479
+ "key": {
2480
+ "description": "PEM encoded certificate key. Use $file to load in a file.",
2481
+ "visibility": "secret",
2482
+ "type": "string"
2483
+ }
2921
2484
  },
2922
- "sessionDuration": {}
2485
+ "required": [
2486
+ "cert",
2487
+ "key"
2488
+ ]
2489
+ }
2490
+ }
2491
+ },
2492
+ {
2493
+ "const": true,
2494
+ "type": "boolean"
2495
+ }
2496
+ ]
2497
+ },
2498
+ "auditor": {
2499
+ "description": "Options used by the default auditor service.",
2500
+ "type": "object",
2501
+ "properties": {
2502
+ "severityLogLevelMappings": {
2503
+ "description": "Defines how audit event severity levels are mapped to log levels.\nThis allows you to control the verbosity of audit logs based on the\nseverity of the event. For example, you might want to log 'low' severity\nevents as 'debug' messages, while logging 'critical' events as 'error'\nmessages. Each severity level ('low', 'medium', 'high', 'critical')\ncan be mapped to one of the standard log levels ('debug', 'info', 'warn', 'error').\n\nBy default, audit events are mapped to log levels as follows:\n- `low`: `debug`\n- `medium`: `info`\n- `high`: `info`\n- `critical`: `info`",
2504
+ "type": "object",
2505
+ "properties": {
2506
+ "low": {
2507
+ "enum": [
2508
+ "debug",
2509
+ "error",
2510
+ "info",
2511
+ "warn"
2512
+ ],
2513
+ "type": "string"
2923
2514
  },
2924
- "required": [
2925
- "clientId",
2926
- "clientSecret"
2927
- ]
2515
+ "medium": {
2516
+ "enum": [
2517
+ "debug",
2518
+ "error",
2519
+ "info",
2520
+ "warn"
2521
+ ],
2522
+ "type": "string"
2523
+ },
2524
+ "high": {
2525
+ "enum": [
2526
+ "debug",
2527
+ "error",
2528
+ "info",
2529
+ "warn"
2530
+ ],
2531
+ "type": "string"
2532
+ },
2533
+ "critical": {
2534
+ "enum": [
2535
+ "debug",
2536
+ "error",
2537
+ "info",
2538
+ "warn"
2539
+ ],
2540
+ "type": "string"
2541
+ }
2928
2542
  }
2929
2543
  }
2930
2544
  }
2931
- }
2932
- }
2933
- }
2934
- },
2935
- "$schema": "http://json-schema.org/draft-07/schema#"
2936
- },
2937
- "packageName": "@backstage/plugin-auth-backend-module-google-provider"
2938
- },
2939
- {
2940
- "path": "../../node_modules/@backstage-community/plugin-puppetdb/node_modules/@backstage/core-components/config.d.ts",
2941
- "value": {
2942
- "type": "object",
2943
- "properties": {
2944
- "auth": {
2945
- "type": "object",
2946
- "properties": {
2947
- "autologout": {
2948
- "description": "Autologout feature configuration",
2545
+ },
2546
+ "actions": {
2547
+ "description": "Options used by the default actions service.",
2949
2548
  "type": "object",
2950
2549
  "properties": {
2951
- "enabled": {
2952
- "description": "Enable or disable the autologout feature",
2953
- "visibility": "frontend",
2954
- "type": "boolean"
2955
- },
2956
- "idleTimeoutMinutes": {
2957
- "description": "Number of minutes after which the inactive user is logged out automatically.\nDefault is 60 minutes (1 hour)",
2958
- "visibility": "frontend",
2959
- "type": "number"
2960
- },
2961
- "promptBeforeIdleSeconds": {
2962
- "description": "Number of seconds before the idle timeout where the user will be asked if it's still active.\nA dialog will be shown.\nDefault is 10 seconds.\nSet to 0 seconds to disable the prompt.",
2963
- "visibility": "frontend",
2964
- "type": "number"
2965
- },
2966
- "useWorkerTimers": {
2967
- "description": "Enable/disable the usage of worker thread timers instead of main thread timers.\nDefault is true.\nIf you experience some browser incompatibility, you may try to set this to false.",
2968
- "visibility": "frontend",
2969
- "type": "boolean"
2970
- },
2971
- "logoutIfDisconnected": {
2972
- "description": "Enable/disable the automatic logout also on users that are logged in but with no Backstage tabs open.\nDefault is true.",
2973
- "visibility": "frontend",
2974
- "type": "boolean"
2550
+ "pluginSources": {
2551
+ "description": "List of plugin sources to load actions from.",
2552
+ "type": "array",
2553
+ "items": {
2554
+ "type": "string"
2555
+ }
2975
2556
  }
2976
2557
  }
2977
- }
2978
- }
2979
- }
2980
- },
2981
- "$schema": "http://json-schema.org/draft-07/schema#"
2982
- },
2983
- "packageName": "@backstage/core-components"
2984
- },
2985
- {
2986
- "path": "../../node_modules/@backstage-community/plugin-puppetdb/node_modules/@backstage/core-app-api/config.d.ts",
2987
- "value": {
2988
- "type": "object",
2989
- "properties": {
2990
- "app": {
2991
- "description": "Generic frontend configuration.",
2992
- "type": "object",
2993
- "properties": {
2994
- "baseUrl": {
2995
- "description": "The public absolute root URL that the frontend.",
2996
- "visibility": "frontend",
2997
- "type": "string"
2998
- },
2999
- "title": {
3000
- "description": "The title of the app, as shown in the Backstage web interface.",
3001
- "visibility": "frontend",
3002
- "type": "string"
3003
2558
  },
3004
- "support": {
3005
- "description": "Information about support of this Backstage instance and how to contact the integrator team.",
2559
+ "auth": {
2560
+ "description": "Options used by the default auth, httpAuth and userInfo services.",
3006
2561
  "type": "object",
3007
2562
  "properties": {
3008
- "url": {
3009
- "description": "The primary support url.",
3010
- "visibility": "frontend",
3011
- "type": "string"
3012
- },
3013
- "items": {
3014
- "description": "A list of categorized support item groupings.",
2563
+ "keys": {
2564
+ "description": "Keys shared by all backends for signing and validating backend tokens.",
2565
+ "deprecated": "this will be removed when the backwards compatibility is no longer needed with backend-common",
3015
2566
  "type": "array",
3016
2567
  "items": {
3017
2568
  "type": "object",
3018
2569
  "properties": {
3019
- "title": {
3020
- "description": "The title of the support item grouping.",
3021
- "visibility": "frontend",
3022
- "type": "string"
3023
- },
3024
- "icon": {
3025
- "description": "An optional icon for the support item grouping.",
3026
- "visibility": "frontend",
2570
+ "secret": {
2571
+ "description": "Secret for generating tokens. Should be a base64 string, recommended\nlength is 24 bytes.",
2572
+ "visibility": "secret",
3027
2573
  "type": "string"
2574
+ }
2575
+ },
2576
+ "required": [
2577
+ "secret"
2578
+ ]
2579
+ }
2580
+ },
2581
+ "dangerouslyDisableDefaultAuthPolicy": {
2582
+ "description": "This disables the otherwise default auth policy, which requires all\nrequests to be authenticated with either user or service credentials.\n\nDisabling this check means that the backend will no longer block\nunauthenticated requests, but instead allow them to pass through to\nplugins.\n\nIf permissions are enabled, unauthenticated requests will be treated\nexactly as such, leaving it to the permission policy to determine what\npermissions should be allowed for an unauthenticated identity. Note\nthat this will also apply to service-to-service calls between plugins\nunless you configure credentials for service calls.",
2583
+ "type": "boolean"
2584
+ },
2585
+ "pluginKeyStore": {
2586
+ "description": "Controls how to store keys for plugin-to-plugin auth",
2587
+ "anyOf": [
2588
+ {
2589
+ "type": "object",
2590
+ "properties": {
2591
+ "type": {
2592
+ "type": "string",
2593
+ "const": "database"
2594
+ }
3028
2595
  },
3029
- "links": {
3030
- "description": "A list of support links for the Backstage instance inside this grouping.",
3031
- "type": "array",
3032
- "items": {
2596
+ "required": [
2597
+ "type"
2598
+ ]
2599
+ },
2600
+ {
2601
+ "type": "object",
2602
+ "properties": {
2603
+ "type": {
2604
+ "type": "string",
2605
+ "const": "static"
2606
+ },
2607
+ "static": {
3033
2608
  "type": "object",
3034
2609
  "properties": {
3035
- "url": {
3036
- "visibility": "frontend",
3037
- "type": "string"
3038
- },
3039
- "title": {
3040
- "visibility": "frontend",
3041
- "type": "string"
2610
+ "keys": {
2611
+ "description": "Must be declared at least once and the first one will be used for signing.",
2612
+ "type": "array",
2613
+ "items": {
2614
+ "type": "object",
2615
+ "properties": {
2616
+ "publicKeyFile": {
2617
+ "description": "Path to the public key file in the SPKI format. Should be an absolute path.",
2618
+ "type": "string"
2619
+ },
2620
+ "privateKeyFile": {
2621
+ "description": "Path to the matching private key file in the PKCS#8 format. Should be an absolute path.\n\nThe first array entry must specify a private key file, the rest must not.",
2622
+ "type": "string"
2623
+ },
2624
+ "keyId": {
2625
+ "description": "ID to uniquely identify this key within the JWK set.",
2626
+ "type": "string"
2627
+ },
2628
+ "algorithm": {
2629
+ "description": "JWS \"alg\" (Algorithm) Header Parameter value. Defaults to ES256.\nMust match the algorithm used to generate the keys in the provided files",
2630
+ "type": "string"
2631
+ }
2632
+ },
2633
+ "required": [
2634
+ "keyId",
2635
+ "publicKeyFile"
2636
+ ]
2637
+ }
3042
2638
  }
3043
2639
  },
3044
2640
  "required": [
3045
- "url"
2641
+ "keys"
3046
2642
  ]
3047
2643
  }
3048
- }
3049
- },
3050
- "required": [
3051
- "links",
3052
- "title"
3053
- ]
3054
- }
3055
- }
3056
- },
3057
- "required": [
3058
- "items",
3059
- "url"
3060
- ]
3061
- },
3062
- "routes": {
3063
- "type": "object",
3064
- "properties": {
3065
- "bindings": {
3066
- "description": "Maps external route references to regular route references. Both the\nkey and the value is expected to be on the form `<pluginId>.<routeId>`.\nIf the value is `false`, the route will be disabled even if it has a\ndefault mapping.",
3067
- "deepVisibility": "frontend",
3068
- "type": "object",
3069
- "additionalProperties": {
2644
+ },
2645
+ "required": [
2646
+ "static",
2647
+ "type"
2648
+ ]
2649
+ }
2650
+ ]
2651
+ },
2652
+ "externalAccess": {
2653
+ "description": "Configures methods of external access, ie ways for callers outside of\nthe Backstage ecosystem to get authorized for access to APIs that do\nnot permit unauthorized access.",
2654
+ "type": "array",
2655
+ "items": {
3070
2656
  "anyOf": [
3071
2657
  {
3072
- "const": false,
3073
- "type": "boolean"
2658
+ "type": "object",
2659
+ "properties": {
2660
+ "type": {
2661
+ "description": "This is the legacy service-to-service access method, where a set\nof static keys were shared among plugins and used for symmetric\nsigning and verification. These correspond to the old\n`backend.auth.keys` set and retain their behavior for backwards\ncompatibility. Please migrate to other access methods when\npossible.\n\nCallers generate JWT tokens with the following payload:\n\n```json\n{\n \"sub\": \"backstage-plugin\",\n \"exp\": <epoch seconds one hour in the future>\n}\n```\n\nAnd sign them with HS256, using the base64 decoded secret. The\ntokens are then passed along with requests in the Authorization\nheader:\n\n```\nAuthorization: Bearer eyJhbGciOiJIUzI...\n```",
2662
+ "type": "string",
2663
+ "const": "legacy"
2664
+ },
2665
+ "options": {
2666
+ "type": "object",
2667
+ "properties": {
2668
+ "secret": {
2669
+ "description": "Any set of base64 encoded random bytes to be used as both the\nsigning and verification key. Should be sufficiently long so as\nnot to be easy to guess by brute force.\n\nCan be generated eg using\n\n```sh\nnode -p 'require(\"crypto\").randomBytes(24).toString(\"base64\")'\n```",
2670
+ "visibility": "secret",
2671
+ "type": "string"
2672
+ },
2673
+ "subject": {
2674
+ "description": "Sets the subject of the principal, when matching this token.\nUseful for debugging and tracking purposes.",
2675
+ "type": "string"
2676
+ }
2677
+ },
2678
+ "required": [
2679
+ "secret",
2680
+ "subject"
2681
+ ]
2682
+ },
2683
+ "accessRestrictions": {
2684
+ "description": "Restricts what types of access that are permitted for this access\nmethod. If no access restrictions are given, it'll have unlimited\naccess. This access restriction applies for the framework level;\nindividual plugins may have their own access control mechanisms\non top of this.",
2685
+ "type": "array",
2686
+ "items": {
2687
+ "type": "object",
2688
+ "properties": {
2689
+ "plugin": {
2690
+ "description": "Permit access to make requests to this plugin.\n\nCan be further refined by setting additional fields below.",
2691
+ "type": "string"
2692
+ },
2693
+ "permission": {
2694
+ "description": "If given, this method is limited to only performing actions\nwith these named permissions in this plugin.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
2695
+ "anyOf": [
2696
+ {
2697
+ "type": "array",
2698
+ "items": {
2699
+ "type": "string"
2700
+ }
2701
+ },
2702
+ {
2703
+ "type": "string"
2704
+ }
2705
+ ]
2706
+ },
2707
+ "permissionAttribute": {
2708
+ "description": "If given, this method is limited to only performing actions\nwhose permissions have these attributes.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
2709
+ "type": "object",
2710
+ "properties": {
2711
+ "action": {
2712
+ "description": "One of more of 'create', 'read', 'update', or 'delete'.",
2713
+ "anyOf": [
2714
+ {
2715
+ "type": "array",
2716
+ "items": {
2717
+ "type": "string"
2718
+ }
2719
+ },
2720
+ {
2721
+ "type": "string"
2722
+ }
2723
+ ]
2724
+ }
2725
+ }
2726
+ }
2727
+ },
2728
+ "required": [
2729
+ "plugin"
2730
+ ]
2731
+ }
2732
+ }
2733
+ },
2734
+ "required": [
2735
+ "options",
2736
+ "type"
2737
+ ]
3074
2738
  },
3075
- {
3076
- "type": "string"
3077
- }
3078
- ]
3079
- }
3080
- }
3081
- }
3082
- }
3083
- },
3084
- "required": [
3085
- "baseUrl"
3086
- ]
3087
- },
3088
- "backend": {
3089
- "description": "Generic backend configuration.",
3090
- "type": "object",
3091
- "properties": {
3092
- "baseUrl": {
3093
- "description": "The public absolute root URL that the backend is reachable at, from the browser's perspective.",
3094
- "visibility": "frontend",
3095
- "type": "string"
3096
- }
3097
- },
3098
- "required": [
3099
- "baseUrl"
3100
- ]
3101
- },
3102
- "organization": {
3103
- "description": "Configuration that provides information about the organization that the app is for.",
3104
- "type": "object",
3105
- "properties": {
3106
- "name": {
3107
- "description": "The name of the organization that the app belongs to.",
3108
- "visibility": "frontend",
3109
- "type": "string"
3110
- }
3111
- }
3112
- },
3113
- "homepage": {
3114
- "description": "This config was used by the HomepageTimer but has been replaced by the HeaderWorldClock in the home plugin",
3115
- "deprecated": "in favor of the HeaderWorldClock which is found in the home plugin",
3116
- "type": "object",
3117
- "properties": {
3118
- "clocks": {
3119
- "type": "array",
3120
- "items": {
3121
- "type": "object",
3122
- "properties": {
3123
- "label": {
3124
- "visibility": "frontend",
3125
- "type": "string"
3126
- },
3127
- "timezone": {
3128
- "visibility": "frontend",
3129
- "type": "string"
3130
- }
3131
- },
3132
- "required": [
3133
- "label",
3134
- "timezone"
3135
- ]
3136
- }
3137
- }
3138
- }
3139
- },
3140
- "auth": {
3141
- "description": "Configuration that provides information on available configured authentication providers.",
3142
- "type": "object",
3143
- "properties": {
3144
- "environment": {
3145
- "description": "The 'environment' attribute added as an optional parameter to have configurable environment value for `auth.providers`.\ndefault value: 'development'\noptional values: 'development' | 'production'",
3146
- "visibility": "frontend",
3147
- "type": "string"
3148
- }
3149
- }
3150
- },
3151
- "enableExperimentalRedirectFlow": {
3152
- "description": "Enable redirect authentication flow type, instead of a popup for authentication.",
3153
- "visibility": "frontend",
3154
- "type": "boolean"
3155
- },
3156
- "discovery": {
3157
- "description": "Discovery options.",
3158
- "visibility": "frontend",
3159
- "type": "object",
3160
- "properties": {
3161
- "endpoints": {
3162
- "description": "Endpoints\n\nA list of target baseUrls and the associated plugins.",
3163
- "visibility": "frontend",
3164
- "type": "array",
3165
- "items": {
3166
- "type": "object",
3167
- "properties": {
3168
- "target": {
3169
- "description": "The target baseUrl to use for the plugin\n\nCan be either a string or an object with internal and external keys. (Internal is used for the backend, external for the frontend)\nTargets with `{{pluginId}}` or `{{ pluginId }} in the url will be replaced with the pluginId.",
3170
- "visibility": "frontend",
3171
- "anyOf": [
3172
2739
  {
3173
2740
  "type": "object",
3174
2741
  "properties": {
3175
- "external": {
3176
- "visibility": "frontend",
3177
- "type": "string"
2742
+ "type": {
2743
+ "description": "This access method consists of random static tokens that can be\nhanded out to callers.\n\nThe tokens are then passed along verbatim with requests in the\nAuthorization header:\n\n```\nAuthorization: Bearer eZv5o+fW3KnR3kVabMW4ZcDNLPl8nmMW\n```",
2744
+ "type": "string",
2745
+ "const": "static"
2746
+ },
2747
+ "options": {
2748
+ "type": "object",
2749
+ "properties": {
2750
+ "token": {
2751
+ "description": "A raw token that can be any string, but for security reasons\nshould be sufficiently long so as not to be easy to guess by\nbrute force.\n\nCan be generated eg using\n\n```sh\nnode -p 'require(\"crypto\").randomBytes(24).toString(\"base64\")'\n```\n\nSince the tokens can be any string, you are free to add\nadditional identifying data to them if you like. For example,\nadding a `freben-local-dev-` prefix for debugging purposes to a\ntoken that you know will be handed out for use as a personal\naccess token during development.",
2752
+ "visibility": "secret",
2753
+ "type": "string"
2754
+ },
2755
+ "subject": {
2756
+ "description": "Sets the subject of the principal, when matching this token.\nUseful for debugging and tracking purposes.",
2757
+ "type": "string"
2758
+ }
2759
+ },
2760
+ "required": [
2761
+ "subject",
2762
+ "token"
2763
+ ]
2764
+ },
2765
+ "accessRestrictions": {
2766
+ "description": "Restricts what types of access that are permitted for this access\nmethod. If no access restrictions are given, it'll have unlimited\naccess. This access restriction applies for the framework level;\nindividual plugins may have their own access control mechanisms\non top of this.",
2767
+ "type": "array",
2768
+ "items": {
2769
+ "type": "object",
2770
+ "properties": {
2771
+ "plugin": {
2772
+ "description": "Permit access to make requests to this plugin.\n\nCan be further refined by setting additional fields below.",
2773
+ "type": "string"
2774
+ },
2775
+ "permission": {
2776
+ "description": "If given, this method is limited to only performing actions\nwith these named permissions in this plugin.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
2777
+ "anyOf": [
2778
+ {
2779
+ "type": "array",
2780
+ "items": {
2781
+ "type": "string"
2782
+ }
2783
+ },
2784
+ {
2785
+ "type": "string"
2786
+ }
2787
+ ]
2788
+ },
2789
+ "permissionAttribute": {
2790
+ "description": "If given, this method is limited to only performing actions\nwhose permissions have these attributes.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
2791
+ "type": "object",
2792
+ "properties": {
2793
+ "action": {
2794
+ "description": "One of more of 'create', 'read', 'update', or 'delete'.",
2795
+ "anyOf": [
2796
+ {
2797
+ "type": "array",
2798
+ "items": {
2799
+ "type": "string"
2800
+ }
2801
+ },
2802
+ {
2803
+ "type": "string"
2804
+ }
2805
+ ]
2806
+ }
2807
+ }
2808
+ }
2809
+ },
2810
+ "required": [
2811
+ "plugin"
2812
+ ]
2813
+ }
3178
2814
  }
3179
- }
2815
+ },
2816
+ "required": [
2817
+ "options",
2818
+ "type"
2819
+ ]
3180
2820
  },
3181
2821
  {
3182
- "type": "string"
3183
- }
3184
- ]
3185
- },
3186
- "plugins": {
3187
- "description": "Array of plugins which use the target baseUrl.",
3188
- "visibility": "frontend",
3189
- "type": "array",
3190
- "items": {
3191
- "type": "string"
3192
- }
3193
- }
3194
- },
3195
- "required": [
3196
- "plugins",
3197
- "target"
3198
- ]
3199
- }
3200
- }
3201
- }
3202
- }
3203
- },
3204
- "required": [
3205
- "app",
3206
- "backend"
3207
- ],
3208
- "$schema": "http://json-schema.org/draft-07/schema#"
3209
- },
3210
- "packageName": "@backstage/core-app-api"
3211
- },
3212
- {
3213
- "path": "../../node_modules/@backstage-community/plugin-stackstorm/node_modules/@backstage/core-components/config.d.ts",
3214
- "value": {
3215
- "type": "object",
3216
- "properties": {
3217
- "auth": {
3218
- "type": "object",
3219
- "properties": {
3220
- "autologout": {
3221
- "description": "Autologout feature configuration",
3222
- "type": "object",
3223
- "properties": {
3224
- "enabled": {
3225
- "description": "Enable or disable the autologout feature",
3226
- "visibility": "frontend",
3227
- "type": "boolean"
3228
- },
3229
- "idleTimeoutMinutes": {
3230
- "description": "Number of minutes after which the inactive user is logged out automatically.\nDefault is 60 minutes (1 hour)",
3231
- "visibility": "frontend",
3232
- "type": "number"
3233
- },
3234
- "promptBeforeIdleSeconds": {
3235
- "description": "Number of seconds before the idle timeout where the user will be asked if it's still active.\nA dialog will be shown.\nDefault is 10 seconds.\nSet to 0 seconds to disable the prompt.",
3236
- "visibility": "frontend",
3237
- "type": "number"
3238
- },
3239
- "useWorkerTimers": {
3240
- "description": "Enable/disable the usage of worker thread timers instead of main thread timers.\nDefault is true.\nIf you experience some browser incompatibility, you may try to set this to false.",
3241
- "visibility": "frontend",
3242
- "type": "boolean"
3243
- },
3244
- "logoutIfDisconnected": {
3245
- "description": "Enable/disable the automatic logout also on users that are logged in but with no Backstage tabs open.\nDefault is true.",
3246
- "visibility": "frontend",
3247
- "type": "boolean"
3248
- }
3249
- }
3250
- }
3251
- }
3252
- }
3253
- },
3254
- "$schema": "http://json-schema.org/draft-07/schema#"
3255
- },
3256
- "packageName": "@backstage/core-components"
3257
- },
3258
- {
3259
- "path": "../../node_modules/@oriflame/backstage-plugin-score-card/node_modules/@backstage/core-components/config.d.ts",
3260
- "value": {
3261
- "type": "object",
3262
- "properties": {
3263
- "auth": {
3264
- "type": "object",
3265
- "properties": {
3266
- "autologout": {
3267
- "description": "Autologout feature configuration",
3268
- "type": "object",
3269
- "properties": {
3270
- "enabled": {
3271
- "description": "Enable or disable the autologout feature",
3272
- "visibility": "frontend",
3273
- "type": "boolean"
3274
- },
3275
- "idleTimeoutMinutes": {
3276
- "description": "Number of minutes after which the inactive user is logged out automatically.\nDefault is 60 minutes (1 hour)",
3277
- "visibility": "frontend",
3278
- "type": "number"
3279
- },
3280
- "promptBeforeIdleSeconds": {
3281
- "description": "Number of seconds before the idle timeout where the user will be asked if it's still active.\nA dialog will be shown.\nDefault is 10 seconds.\nSet to 0 seconds to disable the prompt.",
3282
- "visibility": "frontend",
3283
- "type": "number"
3284
- },
3285
- "useWorkerTimers": {
3286
- "description": "Enable/disable the usage of worker thread timers instead of main thread timers.\nDefault is true.\nIf you experience some browser incompatibility, you may try to set this to false.",
3287
- "visibility": "frontend",
3288
- "type": "boolean"
3289
- },
3290
- "logoutIfDisconnected": {
3291
- "description": "Enable/disable the automatic logout also on users that are logged in but with no Backstage tabs open.\nDefault is true.",
3292
- "visibility": "frontend",
3293
- "type": "boolean"
3294
- }
3295
- }
3296
- }
3297
- }
3298
- }
3299
- },
3300
- "$schema": "http://json-schema.org/draft-07/schema#"
3301
- },
3302
- "packageName": "@backstage/core-components"
3303
- },
3304
- {
3305
- "path": "../../node_modules/@oriflame/backstage-plugin-score-card/node_modules/@backstage/integration/config.d.ts",
3306
- "value": {
3307
- "type": "object",
3308
- "properties": {
3309
- "integrations": {
3310
- "description": "Configuration for integrations towards various external repository provider systems",
3311
- "visibility": "frontend",
3312
- "type": "object",
3313
- "properties": {
3314
- "azure": {
3315
- "description": "Integration configuration for Azure",
3316
- "type": "array",
3317
- "items": {
3318
- "type": "object",
3319
- "properties": {
3320
- "host": {
3321
- "description": "The hostname of the given Azure instance",
3322
- "visibility": "frontend",
3323
- "type": "string"
3324
- },
3325
- "token": {
3326
- "description": "Token used to authenticate requests.",
3327
- "visibility": "secret",
3328
- "deprecated": "Use `credentials` instead.",
3329
- "type": "string"
3330
- },
3331
- "credential": {
3332
- "description": "The credential to use for requests.\n\nIf no credential is specified anonymous access is used.",
3333
- "deepVisibility": "secret",
3334
- "deprecated": "Use `credentials` instead.",
3335
- "type": "object",
3336
- "properties": {
3337
- "clientId": {
3338
- "type": "string"
3339
- },
3340
- "clientSecret": {
3341
- "type": "string"
3342
- },
3343
- "tenantId": {
3344
- "type": "string"
3345
- },
3346
- "personalAccessToken": {
3347
- "type": "string"
2822
+ "type": "object",
2823
+ "properties": {
2824
+ "type": {
2825
+ "description": "This access method consists of a JWKS endpoint that can be used to\nverify JWT tokens.\n\nCallers generate JWT tokens via 3rd party tooling\nand pass them in the Authorization header:\n\n```\nAuthorization: Bearer eZv5o+fW3KnR3kVabMW4ZcDNLPl8nmMW\n```",
2826
+ "type": "string",
2827
+ "const": "jwks"
2828
+ },
2829
+ "options": {
2830
+ "type": "object",
2831
+ "properties": {
2832
+ "url": {
2833
+ "description": "The full URL of the JWKS endpoint.",
2834
+ "type": "string"
2835
+ },
2836
+ "algorithm": {
2837
+ "description": "Sets the algorithm(s) that should be used to verify the JWT tokens.\nThe passed JWTs must have been signed using one of the listed algorithms.",
2838
+ "anyOf": [
2839
+ {
2840
+ "type": "array",
2841
+ "items": {
2842
+ "type": "string"
2843
+ }
2844
+ },
2845
+ {
2846
+ "type": "string"
2847
+ }
2848
+ ]
2849
+ },
2850
+ "issuer": {
2851
+ "description": "Sets the issuer(s) that should be used to verify the JWT tokens.\nPassed JWTs must have an `iss` claim which matches one of the specified issuers.",
2852
+ "anyOf": [
2853
+ {
2854
+ "type": "array",
2855
+ "items": {
2856
+ "type": "string"
2857
+ }
2858
+ },
2859
+ {
2860
+ "type": "string"
2861
+ }
2862
+ ]
2863
+ },
2864
+ "audience": {
2865
+ "description": "Sets the audience(s) that should be used to verify the JWT tokens.\nThe passed JWTs must have an \"aud\" claim that matches one of the audiences specified,\nor have no audience specified.",
2866
+ "anyOf": [
2867
+ {
2868
+ "type": "array",
2869
+ "items": {
2870
+ "type": "string"
2871
+ }
2872
+ },
2873
+ {
2874
+ "type": "string"
2875
+ }
2876
+ ]
2877
+ },
2878
+ "subjectPrefix": {
2879
+ "description": "Sets an optional subject prefix. Passes the subject to called plugins.\nUseful for debugging and tracking purposes.",
2880
+ "type": "string"
2881
+ }
2882
+ },
2883
+ "required": [
2884
+ "url"
2885
+ ]
2886
+ },
2887
+ "accessRestrictions": {
2888
+ "description": "Restricts what types of access that are permitted for this access\nmethod. If no access restrictions are given, it'll have unlimited\naccess. This access restriction applies for the framework level;\nindividual plugins may have their own access control mechanisms\non top of this.",
2889
+ "type": "array",
2890
+ "items": {
2891
+ "type": "object",
2892
+ "properties": {
2893
+ "plugin": {
2894
+ "description": "Permit access to make requests to this plugin.\n\nCan be further refined by setting additional fields below.",
2895
+ "type": "string"
2896
+ },
2897
+ "permission": {
2898
+ "description": "If given, this method is limited to only performing actions\nwith these named permissions in this plugin.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
2899
+ "anyOf": [
2900
+ {
2901
+ "type": "array",
2902
+ "items": {
2903
+ "type": "string"
2904
+ }
2905
+ },
2906
+ {
2907
+ "type": "string"
2908
+ }
2909
+ ]
2910
+ },
2911
+ "permissionAttribute": {
2912
+ "description": "If given, this method is limited to only performing actions\nwhose permissions have these attributes.\n\nNote that this only applies where permissions checks are\nenabled in the first place. Endpoints that are not protected by\nthe permissions system at all, are not affected by this\nsetting.",
2913
+ "type": "object",
2914
+ "properties": {
2915
+ "action": {
2916
+ "description": "One of more of 'create', 'read', 'update', or 'delete'.",
2917
+ "anyOf": [
2918
+ {
2919
+ "type": "array",
2920
+ "items": {
2921
+ "type": "string"
2922
+ }
2923
+ },
2924
+ {
2925
+ "type": "string"
2926
+ }
2927
+ ]
2928
+ }
2929
+ }
2930
+ }
2931
+ },
2932
+ "required": [
2933
+ "plugin"
2934
+ ]
2935
+ }
2936
+ }
2937
+ },
2938
+ "required": [
2939
+ "options",
2940
+ "type"
2941
+ ]
3348
2942
  }
3349
- }
3350
- },
3351
- "credentials": {
3352
- "description": "The credentials to use for requests. If multiple credentials are specified the first one that matches the organization is used.\nIf no organization matches the first credential without an organization is used.\n\nIf no credentials are specified at all, either a default credential (for Azure DevOps) or anonymous access (for Azure DevOps Server) is used.",
3353
- "deepVisibility": "secret",
3354
- "type": "array",
3355
- "items": {
2943
+ ]
2944
+ }
2945
+ }
2946
+ }
2947
+ },
2948
+ "database": {
2949
+ "description": "Database connection configuration, select base database type using the `client` field",
2950
+ "type": "object",
2951
+ "properties": {
2952
+ "client": {
2953
+ "description": "Default database client to use",
2954
+ "enum": [
2955
+ "better-sqlite3",
2956
+ "pg",
2957
+ "sqlite3"
2958
+ ],
2959
+ "type": "string"
2960
+ },
2961
+ "connection": {
2962
+ "description": "Base database connection string, or object with individual connection properties",
2963
+ "visibility": "secret",
2964
+ "anyOf": [
2965
+ {
3356
2966
  "type": "object",
3357
2967
  "properties": {
3358
- "organizations": {
3359
- "type": "array",
3360
- "items": {
3361
- "type": "string"
3362
- }
3363
- },
3364
- "clientId": {
3365
- "type": "string"
3366
- },
3367
- "clientSecret": {
3368
- "type": "string"
2968
+ "type": {
2969
+ "description": "The specific config for cloudsql connections",
2970
+ "type": "string",
2971
+ "const": "cloudsql"
3369
2972
  },
3370
- "tenantId": {
2973
+ "instance": {
2974
+ "description": "The instance connection name for the cloudsql instance, e.g. `project:region:instance`",
3371
2975
  "type": "string"
3372
2976
  },
3373
- "personalAccessToken": {
2977
+ "ipAddressType": {
2978
+ "description": "The ip address type to use for the connection. Defaults to 'PUBLIC'",
2979
+ "enum": [
2980
+ "PRIVATE",
2981
+ "PSC",
2982
+ "PUBLIC"
2983
+ ],
3374
2984
  "type": "string"
3375
- },
3376
- "managedIdentityClientId": {
2985
+ }
2986
+ },
2987
+ "required": [
2988
+ "instance",
2989
+ "type"
2990
+ ]
2991
+ },
2992
+ {
2993
+ "type": "object",
2994
+ "additionalProperties": {},
2995
+ "properties": {
2996
+ "password": {
2997
+ "description": "Password that belongs to the client User",
2998
+ "visibility": "secret",
3377
2999
  "type": "string"
3378
3000
  }
3379
3001
  }
3002
+ },
3003
+ {
3004
+ "type": "string"
3380
3005
  }
3381
- },
3382
- "commitSigningKey": {
3383
- "description": "PGP signing key for signing commits.",
3384
- "visibility": "secret",
3385
- "type": "string"
3386
- }
3006
+ ]
3387
3007
  },
3388
- "required": [
3389
- "host"
3390
- ]
3391
- }
3392
- },
3393
- "bitbucket": {
3394
- "description": "Integration configuration for Bitbucket",
3395
- "deprecated": "replaced by bitbucketCloud and bitbucketServer",
3396
- "type": "array",
3397
- "items": {
3398
- "type": "object",
3399
- "properties": {
3400
- "host": {
3401
- "description": "The hostname of the given Bitbucket instance",
3402
- "visibility": "frontend",
3403
- "type": "string"
3404
- },
3405
- "token": {
3406
- "description": "Token used to authenticate requests.",
3407
- "visibility": "secret",
3408
- "type": "string"
3409
- },
3410
- "apiBaseUrl": {
3411
- "description": "The base url for the Bitbucket API, for example https://api.bitbucket.org/2.0",
3412
- "visibility": "frontend",
3413
- "type": "string"
3414
- },
3415
- "username": {
3416
- "description": "The username to use for authenticated requests.",
3417
- "visibility": "secret",
3418
- "type": "string"
3419
- },
3420
- "appPassword": {
3421
- "description": "Bitbucket app password used to authenticate requests.",
3422
- "visibility": "secret",
3423
- "type": "string"
3424
- },
3425
- "commitSigningKey": {
3426
- "description": "PGP signing key for signing commits.",
3427
- "visibility": "secret",
3428
- "type": "string"
3429
- }
3008
+ "prefix": {
3009
+ "description": "Database name prefix override",
3010
+ "type": "string"
3430
3011
  },
3431
- "required": [
3432
- "host"
3433
- ]
3434
- }
3435
- },
3436
- "bitbucketCloud": {
3437
- "description": "Integration configuration for Bitbucket Cloud",
3438
- "type": "array",
3439
- "items": {
3440
- "type": "object",
3441
- "properties": {
3442
- "username": {
3443
- "description": "The username to use for authenticated requests.",
3444
- "visibility": "secret",
3445
- "type": "string"
3446
- },
3447
- "appPassword": {
3448
- "description": "Bitbucket Cloud app password used to authenticate requests.",
3449
- "visibility": "secret",
3450
- "type": "string"
3451
- },
3452
- "commitSigningKey": {
3453
- "description": "PGP signing key for signing commits.",
3454
- "visibility": "secret",
3455
- "type": "string"
3456
- }
3012
+ "ensureExists": {
3013
+ "description": "Whether to ensure the given database exists by creating it if it does not.\nDefaults to true if unspecified.",
3014
+ "type": "boolean"
3457
3015
  },
3458
- "required": [
3459
- "appPassword",
3460
- "username"
3461
- ]
3462
- }
3463
- },
3464
- "bitbucketServer": {
3465
- "description": "Integration configuration for Bitbucket Server",
3466
- "type": "array",
3467
- "items": {
3468
- "type": "object",
3469
- "properties": {
3470
- "host": {
3471
- "description": "The hostname of the given Bitbucket Server instance",
3472
- "visibility": "frontend",
3473
- "type": "string"
3474
- },
3475
- "token": {
3476
- "description": "Token used to authenticate requests.",
3477
- "visibility": "secret",
3478
- "type": "string"
3479
- },
3480
- "username": {
3481
- "description": "Username used to authenticate requests with Basic Auth.",
3482
- "visibility": "secret",
3483
- "type": "string"
3484
- },
3485
- "password": {
3486
- "description": "Password (or token as password) used to authenticate requests with Basic Auth.",
3487
- "visibility": "secret",
3488
- "type": "string"
3489
- },
3490
- "apiBaseUrl": {
3491
- "description": "The base url for the Bitbucket Server API, for example https://<host>/rest/api/1.0",
3492
- "visibility": "frontend",
3493
- "type": "string"
3494
- },
3495
- "commitSigningKey": {
3496
- "description": "PGP signing key for signing commits.",
3497
- "visibility": "secret",
3498
- "type": "string"
3499
- }
3016
+ "ensureSchemaExists": {
3017
+ "description": "Whether to ensure the given database schema exists by creating it if it does not.\nDefaults to false if unspecified.\n\nNOTE: Currently only supported by the `pg` client when pluginDivisionMode: schema",
3018
+ "type": "boolean"
3019
+ },
3020
+ "pluginDivisionMode": {
3021
+ "description": "How plugins databases are managed/divided in the provided database instance.\n\n`database` -> Plugins are each given their own database to manage their schemas/tables.\n\n`schema` -> Plugins will be given their own schema (in the specified/default database)\n to manage their tables.\n\nNOTE: Currently only supported by the `pg` client.",
3022
+ "default": "database",
3023
+ "enum": [
3024
+ "database",
3025
+ "schema"
3026
+ ],
3027
+ "type": "string"
3028
+ },
3029
+ "role": {
3030
+ "description": "Configures the ownership of newly created schemas in pg databases.",
3031
+ "type": "string"
3032
+ },
3033
+ "knexConfig": {
3034
+ "description": "Arbitrary config object to pass to knex when initializing\n(https://knexjs.org/#Installation-client). Most notable is the debug\nand asyncStackTraces booleans",
3035
+ "type": "object",
3036
+ "properties": {},
3037
+ "additionalProperties": true
3500
3038
  },
3501
- "required": [
3502
- "host"
3503
- ]
3504
- }
3505
- },
3506
- "gerrit": {
3507
- "description": "Integration configuration for Gerrit",
3508
- "type": "array",
3509
- "items": {
3510
- "type": "object",
3511
- "properties": {
3512
- "host": {
3513
- "description": "The hostname of the given Gerrit instance",
3514
- "visibility": "frontend",
3515
- "type": "string"
3516
- },
3517
- "baseUrl": {
3518
- "description": "The base url for the Gerrit instance.",
3519
- "visibility": "frontend",
3520
- "type": "string"
3521
- },
3522
- "gitilesBaseUrl": {
3523
- "description": "The gitiles base url.",
3524
- "visibility": "frontend",
3525
- "type": "string"
3526
- },
3527
- "cloneUrl": {
3528
- "description": "The base url for cloning repos.",
3529
- "visibility": "frontend",
3530
- "type": "string"
3531
- },
3532
- "disableEditUrl": {
3533
- "description": "Disable the edit url feature.",
3534
- "visibility": "frontend",
3535
- "type": "boolean"
3536
- },
3537
- "username": {
3538
- "description": "The username to use for authenticated requests.",
3539
- "visibility": "secret",
3540
- "type": "string"
3541
- },
3542
- "password": {
3543
- "description": "Gerrit password used to authenticate requests. This can be either a password\nor a generated access token.",
3544
- "visibility": "secret",
3545
- "type": "string"
3546
- },
3547
- "commitSigningKey": {
3548
- "description": "PGP signing key for signing commits.",
3549
- "visibility": "secret",
3550
- "type": "string"
3551
- }
3039
+ "skipMigrations": {
3040
+ "description": "Skip running database migrations.",
3041
+ "type": "boolean"
3552
3042
  },
3553
- "required": [
3554
- "gitilesBaseUrl",
3555
- "host"
3556
- ]
3557
- }
3043
+ "plugin": {
3044
+ "description": "Plugin specific database configuration and client override",
3045
+ "type": "object",
3046
+ "additionalProperties": {
3047
+ "type": "object",
3048
+ "properties": {
3049
+ "client": {
3050
+ "description": "Database client override",
3051
+ "enum": [
3052
+ "better-sqlite3",
3053
+ "pg",
3054
+ "sqlite3"
3055
+ ],
3056
+ "type": "string"
3057
+ },
3058
+ "connection": {
3059
+ "description": "Database connection string or Knex object override",
3060
+ "visibility": "secret",
3061
+ "anyOf": [
3062
+ {
3063
+ "type": "object",
3064
+ "properties": {
3065
+ "type": {
3066
+ "description": "The specific config for cloudsql connections",
3067
+ "type": "string",
3068
+ "const": "cloudsql"
3069
+ },
3070
+ "instance": {
3071
+ "description": "The instance connection name for the cloudsql instance, e.g. `project:region:instance`",
3072
+ "type": "string"
3073
+ }
3074
+ },
3075
+ "required": [
3076
+ "instance",
3077
+ "type"
3078
+ ]
3079
+ },
3080
+ {
3081
+ "type": "object",
3082
+ "additionalProperties": {},
3083
+ "properties": {
3084
+ "password": {
3085
+ "description": "Password that belongs to the client User",
3086
+ "visibility": "secret",
3087
+ "type": "string"
3088
+ }
3089
+ }
3090
+ },
3091
+ {
3092
+ "type": "string"
3093
+ }
3094
+ ]
3095
+ },
3096
+ "ensureExists": {
3097
+ "description": "Whether to ensure the given database exists by creating it if it does not.\nDefaults to base config if unspecified.",
3098
+ "type": "boolean"
3099
+ },
3100
+ "ensureSchemaExists": {
3101
+ "description": "Whether to ensure the given database schema exists by creating it if it does not.\nDefaults to false if unspecified.\n\nNOTE: Currently only supported by the `pg` client when pluginDivisionMode: schema",
3102
+ "type": "boolean"
3103
+ },
3104
+ "knexConfig": {
3105
+ "description": "Arbitrary config object to pass to knex when initializing\n(https://knexjs.org/#Installation-client). Most notable is the\ndebug and asyncStackTraces booleans.\n\nThis is merged recursively into the base knexConfig",
3106
+ "type": "object",
3107
+ "properties": {},
3108
+ "additionalProperties": true
3109
+ },
3110
+ "role": {
3111
+ "description": "Configures the ownership of newly created schemas in pg databases.",
3112
+ "type": "string"
3113
+ },
3114
+ "skipMigrations": {
3115
+ "description": "Skip running database migrations.",
3116
+ "type": "boolean"
3117
+ }
3118
+ }
3119
+ }
3120
+ }
3121
+ },
3122
+ "required": [
3123
+ "client",
3124
+ "connection"
3125
+ ]
3558
3126
  },
3559
- "github": {
3560
- "description": "Integration configuration for GitHub",
3561
- "type": "array",
3562
- "items": {
3563
- "type": "object",
3564
- "properties": {
3565
- "host": {
3566
- "description": "The hostname of the given GitHub instance",
3567
- "visibility": "frontend",
3568
- "type": "string"
3569
- },
3570
- "token": {
3571
- "description": "Token used to authenticate requests.",
3572
- "visibility": "secret",
3573
- "type": "string"
3574
- },
3575
- "apiBaseUrl": {
3576
- "description": "The base url for the GitHub API, for example https://api.github.com",
3577
- "visibility": "frontend",
3578
- "type": "string"
3127
+ "cache": {
3128
+ "description": "Cache connection configuration, select cache type using the `store` field",
3129
+ "anyOf": [
3130
+ {
3131
+ "type": "object",
3132
+ "properties": {
3133
+ "store": {
3134
+ "type": "string",
3135
+ "const": "memory"
3136
+ },
3137
+ "defaultTtl": {
3138
+ "description": "An optional default TTL (in milliseconds, if given as a number)."
3139
+ }
3579
3140
  },
3580
- "rawBaseUrl": {
3581
- "description": "The base url for GitHub raw resources, for example https://raw.githubusercontent.com",
3582
- "visibility": "frontend",
3583
- "type": "string"
3141
+ "required": [
3142
+ "store"
3143
+ ]
3144
+ },
3145
+ {
3146
+ "type": "object",
3147
+ "properties": {
3148
+ "store": {
3149
+ "type": "string",
3150
+ "const": "redis"
3151
+ },
3152
+ "connection": {
3153
+ "description": "A redis connection string in the form `redis://user:pass@host:port`.",
3154
+ "visibility": "secret",
3155
+ "type": "string"
3156
+ },
3157
+ "defaultTtl": {
3158
+ "description": "An optional default TTL (in milliseconds, if given as a number)."
3159
+ },
3160
+ "redis": {
3161
+ "type": "object",
3162
+ "properties": {
3163
+ "client": {
3164
+ "description": "An optional Redis client configuration. These options are passed to the `@keyv/redis` client.",
3165
+ "type": "object",
3166
+ "properties": {
3167
+ "namespace": {
3168
+ "description": "Namespace for the current instance.",
3169
+ "type": "string"
3170
+ },
3171
+ "keyPrefixSeparator": {
3172
+ "description": "Separator to use between namespace and key.",
3173
+ "type": "string"
3174
+ },
3175
+ "clearBatchSize": {
3176
+ "description": "Number of keys to delete in a single batch.",
3177
+ "type": "number"
3178
+ },
3179
+ "useUnlink": {
3180
+ "description": "Enable Unlink instead of using Del for clearing keys. This is more performant but may not be supported by all Redis versions.",
3181
+ "type": "boolean"
3182
+ },
3183
+ "noNamespaceAffectsAll": {
3184
+ "description": "Whether to allow clearing all keys when no namespace is set.\nIf set to true and no namespace is set, iterate() will return all keys.\nDefaults to `false`.",
3185
+ "type": "boolean"
3186
+ }
3187
+ }
3188
+ },
3189
+ "cluster": {
3190
+ "description": "An optional Redis cluster configuration.",
3191
+ "type": "object",
3192
+ "properties": {
3193
+ "rootNodes": {
3194
+ "description": "Cluster configuration options to be passed to the `@keyv/redis` client (and node-redis under the hood)\nhttps://github.com/redis/node-redis/blob/master/docs/clustering.md",
3195
+ "visibility": "secret",
3196
+ "type": "array",
3197
+ "items": {
3198
+ "type": "object",
3199
+ "properties": {},
3200
+ "additionalProperties": true
3201
+ }
3202
+ },
3203
+ "defaults": {
3204
+ "description": "Cluster node default configuration options to be passed to the `@keyv/redis` client (and node-redis under the hood)\nhttps://github.com/redis/node-redis/blob/master/docs/clustering.md",
3205
+ "visibility": "secret",
3206
+ "type": "object",
3207
+ "properties": {},
3208
+ "additionalProperties": true
3209
+ },
3210
+ "minimizeConnections": {
3211
+ "description": "When `true`, `.connect()` will only discover the cluster topology, without actually connecting to all the nodes.\nUseful for short-term or PubSub-only connections.",
3212
+ "type": "boolean"
3213
+ },
3214
+ "useReplicas": {
3215
+ "description": "When `true`, distribute load by executing readonly commands (such as `GET`, `GEOSEARCH`, etc.) across all cluster nodes. When `false`, only use master nodes.",
3216
+ "type": "boolean"
3217
+ },
3218
+ "maxCommandRedirections": {
3219
+ "description": "The maximum number of times a command will be redirected due to `MOVED` or `ASK` errors.",
3220
+ "type": "number"
3221
+ }
3222
+ },
3223
+ "required": [
3224
+ "rootNodes"
3225
+ ]
3226
+ }
3227
+ }
3228
+ }
3584
3229
  },
3585
- "apps": {
3586
- "description": "GitHub Apps configuration",
3587
- "type": "array",
3588
- "items": {
3230
+ "required": [
3231
+ "connection",
3232
+ "store"
3233
+ ]
3234
+ },
3235
+ {
3236
+ "type": "object",
3237
+ "properties": {
3238
+ "store": {
3239
+ "type": "string",
3240
+ "const": "valkey"
3241
+ },
3242
+ "connection": {
3243
+ "description": "A valkey connection string in the form `redis://user:pass@host:port`.",
3244
+ "visibility": "secret",
3245
+ "type": "string"
3246
+ },
3247
+ "defaultTtl": {
3248
+ "description": "An optional default TTL (in milliseconds, if given as a number)."
3249
+ },
3250
+ "valkey": {
3589
3251
  "type": "object",
3590
3252
  "properties": {
3591
- "appId": {
3592
- "description": "The numeric GitHub App ID, string for environment variables",
3593
- "type": [
3594
- "string",
3595
- "number"
3596
- ]
3597
- },
3598
- "privateKey": {
3599
- "description": "The private key to use for auth against the app",
3600
- "visibility": "secret",
3601
- "type": "string"
3602
- },
3603
- "webhookSecret": {
3604
- "description": "The secret used for webhooks",
3605
- "visibility": "secret",
3606
- "type": "string"
3607
- },
3608
- "clientId": {
3609
- "description": "The client ID to use",
3610
- "type": "string"
3611
- },
3612
- "clientSecret": {
3613
- "description": "The client secret to use",
3614
- "visibility": "secret",
3615
- "type": "string"
3616
- },
3617
- "allowedInstallationOwners": {
3618
- "description": "List of installation owners allowed to be used by this GitHub app. The GitHub UI does not provide a way to list the installations.\nHowever you can list the installations with the GitHub API. You can find the list of installations here:\nhttps://api.github.com/app/installations\nThe relevant documentation for this is here.\nhttps://docs.github.com/en/rest/reference/apps#list-installations-for-the-authenticated-app--code-samples",
3619
- "type": "array",
3620
- "items": {
3621
- "type": "string"
3253
+ "client": {
3254
+ "description": "An optional Valkey client configuration. These options are passed to the `@keyv/valkey` client.",
3255
+ "type": "object",
3256
+ "properties": {
3257
+ "namespace": {
3258
+ "description": "Namespace for the current instance.",
3259
+ "type": "string"
3260
+ },
3261
+ "keyPrefixSeparator": {
3262
+ "description": "Separator to use between namespace and key.",
3263
+ "type": "string"
3264
+ },
3265
+ "clearBatchSize": {
3266
+ "description": "Number of keys to delete in a single batch.",
3267
+ "type": "number"
3268
+ },
3269
+ "useUnlink": {
3270
+ "description": "Enable Unlink instead of using Del for clearing keys. This is more performant but may not be supported by all Redis versions.",
3271
+ "type": "boolean"
3272
+ },
3273
+ "noNamespaceAffectsAll": {
3274
+ "description": "Whether to allow clearing all keys when no namespace is set.\nIf set to true and no namespace is set, iterate() will return all keys.\nDefaults to `false`.",
3275
+ "type": "boolean"
3276
+ }
3622
3277
  }
3278
+ },
3279
+ "cluster": {
3280
+ "description": "An optional Valkey cluster (redis cluster under the hood) configuration.",
3281
+ "type": "object",
3282
+ "properties": {
3283
+ "rootNodes": {
3284
+ "description": "Cluster configuration options to be passed to the `@keyv/valkey` client (and node-redis under the hood)\nhttps://github.com/redis/node-redis/blob/master/docs/clustering.md",
3285
+ "visibility": "secret",
3286
+ "type": "array",
3287
+ "items": {
3288
+ "type": "object",
3289
+ "properties": {},
3290
+ "additionalProperties": true
3291
+ }
3292
+ },
3293
+ "defaults": {
3294
+ "description": "Cluster node default configuration options to be passed to the `@keyv/redis` client (and node-redis under the hood)\nhttps://github.com/redis/node-redis/blob/master/docs/clustering.md",
3295
+ "visibility": "secret",
3296
+ "type": "object",
3297
+ "properties": {},
3298
+ "additionalProperties": true
3299
+ },
3300
+ "minimizeConnections": {
3301
+ "description": "When `true`, `.connect()` will only discover the cluster topology, without actually connecting to all the nodes.\nUseful for short-term or PubSub-only connections.",
3302
+ "type": "boolean"
3303
+ },
3304
+ "useReplicas": {
3305
+ "description": "When `true`, distribute load by executing readonly commands (such as `GET`, `GEOSEARCH`, etc.) across all cluster nodes. When `false`, only use master nodes.",
3306
+ "type": "boolean"
3307
+ },
3308
+ "maxCommandRedirections": {
3309
+ "description": "The maximum number of times a command will be redirected due to `MOVED` or `ASK` errors.",
3310
+ "type": "number"
3311
+ }
3312
+ },
3313
+ "required": [
3314
+ "rootNodes"
3315
+ ]
3623
3316
  }
3624
- },
3625
- "required": [
3626
- "appId",
3627
- "clientId",
3628
- "clientSecret",
3629
- "privateKey"
3630
- ]
3317
+ }
3631
3318
  }
3632
- }
3633
- },
3634
- "required": [
3635
- "host"
3636
- ]
3637
- }
3638
- },
3639
- "gitlab": {
3640
- "description": "Integration configuration for GitLab",
3641
- "type": "array",
3642
- "items": {
3643
- "type": "object",
3644
- "properties": {
3645
- "host": {
3646
- "description": "The host of the target that this matches on, e.g. \"gitlab.com\".",
3647
- "visibility": "frontend",
3648
- "type": "string"
3649
- },
3650
- "apiBaseUrl": {
3651
- "description": "The base URL of the API of this provider, e.g.\n\"https://gitlab.com/api/v4\", with no trailing slash.\n\nMay be omitted specifically for public GitLab; then it will be deduced.",
3652
- "visibility": "frontend",
3653
- "type": "string"
3654
- },
3655
- "token": {
3656
- "description": "The authorization token to use for requests to this provider.\n\nIf no token is specified, anonymous access is used.",
3657
- "visibility": "secret",
3658
- "type": "string"
3659
3319
  },
3660
- "baseUrl": {
3661
- "description": "The baseUrl of this provider, e.g. \"https://gitlab.com\", which is\npassed into the GitLab client.\n\nIf no baseUrl is provided, it will default to https://${host}.",
3662
- "visibility": "frontend",
3663
- "type": "string"
3320
+ "required": [
3321
+ "connection",
3322
+ "store"
3323
+ ]
3324
+ },
3325
+ {
3326
+ "type": "object",
3327
+ "properties": {
3328
+ "store": {
3329
+ "type": "string",
3330
+ "const": "memcache"
3331
+ },
3332
+ "connection": {
3333
+ "description": "A memcache connection string in the form `user:pass@host:port`.",
3334
+ "visibility": "secret",
3335
+ "type": "string"
3336
+ },
3337
+ "defaultTtl": {
3338
+ "description": "An optional default TTL (in milliseconds)."
3339
+ }
3664
3340
  },
3665
- "commitSigningKey": {
3666
- "description": "PGP signing key for signing commits.",
3667
- "visibility": "secret",
3668
- "type": "string"
3669
- }
3341
+ "required": [
3342
+ "connection",
3343
+ "store"
3344
+ ]
3345
+ }
3346
+ ]
3347
+ },
3348
+ "cors": {
3349
+ "type": "object",
3350
+ "properties": {
3351
+ "origin": {
3352
+ "anyOf": [
3353
+ {
3354
+ "type": "array",
3355
+ "items": {
3356
+ "type": "string"
3357
+ }
3358
+ },
3359
+ {
3360
+ "type": "string"
3361
+ }
3362
+ ]
3363
+ },
3364
+ "methods": {
3365
+ "anyOf": [
3366
+ {
3367
+ "type": "array",
3368
+ "items": {
3369
+ "type": "string"
3370
+ }
3371
+ },
3372
+ {
3373
+ "type": "string"
3374
+ }
3375
+ ]
3376
+ },
3377
+ "allowedHeaders": {
3378
+ "anyOf": [
3379
+ {
3380
+ "type": "array",
3381
+ "items": {
3382
+ "type": "string"
3383
+ }
3384
+ },
3385
+ {
3386
+ "type": "string"
3387
+ }
3388
+ ]
3389
+ },
3390
+ "exposedHeaders": {
3391
+ "anyOf": [
3392
+ {
3393
+ "type": "array",
3394
+ "items": {
3395
+ "type": "string"
3396
+ }
3397
+ },
3398
+ {
3399
+ "type": "string"
3400
+ }
3401
+ ]
3670
3402
  },
3671
- "required": [
3672
- "host"
3673
- ]
3674
- }
3675
- },
3676
- "googleGcs": {
3677
- "description": "Integration configuration for Google Cloud Storage",
3678
- "type": "object",
3679
- "properties": {
3680
- "clientEmail": {
3681
- "description": "Service account email used to authenticate requests.",
3682
- "type": "string"
3403
+ "credentials": {
3404
+ "type": "boolean"
3683
3405
  },
3684
- "privateKey": {
3685
- "description": "Service account private key used to authenticate requests.",
3686
- "visibility": "secret",
3687
- "type": "string"
3406
+ "maxAge": {
3407
+ "type": "number"
3408
+ },
3409
+ "preflightContinue": {
3410
+ "type": "boolean"
3411
+ },
3412
+ "optionsSuccessStatus": {
3413
+ "type": "number"
3688
3414
  }
3689
3415
  }
3690
3416
  },
3691
- "awsS3": {
3692
- "description": "Integration configuration for AWS S3 Service",
3693
- "type": "array",
3694
- "items": {
3695
- "type": "object",
3696
- "properties": {
3697
- "endpoint": {
3698
- "description": "AWS Endpoint.\nThe endpoint URI to send requests to. The default endpoint is built from the configured region.",
3699
- "visibility": "frontend",
3700
- "type": "string"
3417
+ "csp": {
3418
+ "description": "Content Security Policy options.\n\nThe keys are the plain policy ID, e.g. \"upgrade-insecure-requests\". The\nvalues are on the format that the helmet library expects them, as an\narray of strings. There is also the special value false, which means to\nremove the default value that Backstage puts in place for that policy.",
3419
+ "type": "object",
3420
+ "additionalProperties": {
3421
+ "anyOf": [
3422
+ {
3423
+ "type": "array",
3424
+ "items": {
3425
+ "type": "string"
3426
+ }
3701
3427
  },
3702
- "s3ForcePathStyle": {
3703
- "description": "Whether to use path style URLs when communicating with S3.\nDefaults to false.\nThis allows providers like LocalStack, Minio and Wasabi (and possibly others) to be used.",
3704
- "visibility": "frontend",
3428
+ {
3429
+ "const": false,
3705
3430
  "type": "boolean"
3706
- },
3707
- "accessKeyId": {
3708
- "description": "Account access key used to authenticate requests.",
3709
- "type": "string"
3710
- },
3711
- "secretAccessKey": {
3712
- "description": "Account secret key used to authenticate requests.",
3713
- "visibility": "secret",
3714
- "type": "string"
3715
- },
3716
- "roleArn": {
3717
- "description": "ARN of the role to be assumed",
3718
- "type": "string"
3719
- },
3720
- "externalId": {
3721
- "description": "External ID to use when assuming role",
3431
+ }
3432
+ ]
3433
+ }
3434
+ },
3435
+ "health": {
3436
+ "description": "Options for the health check service and endpoint.",
3437
+ "type": "object",
3438
+ "properties": {
3439
+ "headers": {
3440
+ "description": "Additional headers to always include in the health check response.\n\nIt can be a good idea to set a header that uniquely identifies your service\nin a multi-service environment. This ensures that the health check that is\nconfigured for your service is actually hitting your service and not another.\n\nFor example, if using Envoy you can use the `service_name_matcher` configuration\nand set the `x-envoy-upstream-healthchecked-cluster` header to a matching value.",
3441
+ "type": "object",
3442
+ "additionalProperties": {
3722
3443
  "type": "string"
3723
3444
  }
3724
3445
  }
3725
3446
  }
3726
3447
  },
3727
- "gitea": {
3728
- "description": "Integration configuration for Gitea",
3729
- "type": "array",
3730
- "items": {
3731
- "type": "object",
3732
- "properties": {
3733
- "host": {
3734
- "description": "The hostname of the given Gitea instance",
3735
- "visibility": "frontend",
3736
- "type": "string"
3737
- },
3738
- "baseUrl": {
3739
- "description": "The base url for the Gitea instance.",
3740
- "visibility": "frontend",
3741
- "type": "string"
3742
- },
3743
- "username": {
3744
- "description": "The username to use for authenticated requests.",
3745
- "visibility": "secret",
3746
- "type": "string"
3747
- },
3748
- "password": {
3749
- "description": "Gitea password used to authenticate requests. This can be either a password\nor a generated access token.",
3750
- "visibility": "secret",
3751
- "type": "string"
3752
- },
3753
- "commitSigningKey": {
3754
- "description": "PGP signing key for signing commits.",
3755
- "visibility": "secret",
3756
- "type": "string"
3448
+ "rateLimit": {
3449
+ "description": "Rate limiting options. Defining this as `true` will enable rate limiting with default values.",
3450
+ "anyOf": [
3451
+ {
3452
+ "type": "object",
3453
+ "properties": {
3454
+ "store": {
3455
+ "anyOf": [
3456
+ {
3457
+ "type": "object",
3458
+ "properties": {
3459
+ "type": {
3460
+ "type": "string",
3461
+ "const": "redis"
3462
+ },
3463
+ "connection": {
3464
+ "type": "string"
3465
+ }
3466
+ },
3467
+ "required": [
3468
+ "connection",
3469
+ "type"
3470
+ ]
3471
+ },
3472
+ {
3473
+ "type": "object",
3474
+ "properties": {
3475
+ "type": {
3476
+ "type": "string",
3477
+ "const": "memory"
3478
+ }
3479
+ },
3480
+ "required": [
3481
+ "type"
3482
+ ]
3483
+ }
3484
+ ]
3485
+ },
3486
+ "global": {
3487
+ "description": "Enable/disable global rate limiting. If this is disabled, plugin specific rate limiting must be\nused.",
3488
+ "type": "boolean"
3489
+ },
3490
+ "window": {
3491
+ "description": "Time frame in milliseconds or as human duration for which requests are checked/remembered.\nDefaults to one minute."
3492
+ },
3493
+ "incomingRequestLimit": {
3494
+ "description": "The maximum number of connections to allow during the `window` before rate limiting the client.\nDefaults to 5.",
3495
+ "type": "number"
3496
+ },
3497
+ "passOnStoreError": {
3498
+ "description": "Whether to pass requests in case of store failure.\nDefaults to false.",
3499
+ "type": "boolean"
3500
+ },
3501
+ "ipAllowList": {
3502
+ "description": "List of allowed IP addresses that are not rate limited.\nDefaults to [127.0.0.1, 0:0:0:0:0:0:0:1, ::1].",
3503
+ "type": "array",
3504
+ "items": {
3505
+ "type": "string"
3506
+ }
3507
+ },
3508
+ "skipSuccessfulRequests": {
3509
+ "description": "Skip rate limiting for requests that have been successful.\nDefaults to false.",
3510
+ "type": "boolean"
3511
+ },
3512
+ "skipFailedRequests": {
3513
+ "description": "Skip rate limiting for requests that have failed.\nDefaults to false.",
3514
+ "type": "boolean"
3515
+ },
3516
+ "plugin": {
3517
+ "description": "Plugin specific rate limiting configuration",
3518
+ "type": "object",
3519
+ "additionalProperties": {
3520
+ "type": "object",
3521
+ "properties": {
3522
+ "window": {
3523
+ "description": "Time frame in milliseconds or as human duration for which requests are checked/remembered.\nDefaults to one minute."
3524
+ },
3525
+ "incomingRequestLimit": {
3526
+ "description": "The maximum number of connections to allow during the `window` before rate limiting the client.\nDefaults to 5.",
3527
+ "type": "number"
3528
+ },
3529
+ "passOnStoreError": {
3530
+ "description": "Whether to pass requests in case of store failure.\nDefaults to false.",
3531
+ "type": "boolean"
3532
+ },
3533
+ "ipAllowList": {
3534
+ "description": "List of allowed IP addresses that are not rate limited.\nDefaults to [127.0.0.1, 0:0:0:0:0:0:0:1, ::1].",
3535
+ "type": "array",
3536
+ "items": {
3537
+ "type": "string"
3538
+ }
3539
+ },
3540
+ "skipSuccessfulRequests": {
3541
+ "description": "Skip rate limiting for requests that have been successful.\nDefaults to false.",
3542
+ "type": "boolean"
3543
+ },
3544
+ "skipFailedRequests": {
3545
+ "description": "Skip rate limiting for requests that have failed.\nDefaults to false.",
3546
+ "type": "boolean"
3547
+ }
3548
+ }
3549
+ }
3550
+ }
3757
3551
  }
3758
3552
  },
3759
- "required": [
3760
- "host"
3761
- ]
3762
- }
3553
+ {
3554
+ "const": true,
3555
+ "type": "boolean"
3556
+ }
3557
+ ]
3763
3558
  },
3764
- "harness": {
3765
- "description": "Integration configuration for Harness Code",
3559
+ "reading": {
3560
+ "description": "Configuration related to URL reading, used for example for reading catalog info\nfiles, scaffolder templates, and techdocs content.",
3561
+ "type": "object",
3562
+ "properties": {
3563
+ "allow": {
3564
+ "description": "A list of targets to allow outgoing requests to. Users will be able to make\nrequests on behalf of the backend to the targets that are allowed by this list.",
3565
+ "type": "array",
3566
+ "items": {
3567
+ "type": "object",
3568
+ "properties": {
3569
+ "host": {
3570
+ "description": "A host to allow outgoing requests to, being either a full host or\na subdomain wildcard pattern with a leading `*`. For example `example.com`\nand `*.example.com` are valid values, `prod.*.example.com` is not.\nThe host may also contain a port, for example `example.com:8080`.",
3571
+ "type": "string"
3572
+ },
3573
+ "paths": {
3574
+ "description": "An optional list of paths. In case they are present only targets matching\nany of them will are allowed. You can use trailing slashes to make sure only\nsubdirectories are allowed, for example `/mydir/` will allow targets with\npaths like `/mydir/a` but will block paths like `/mydir2`.",
3575
+ "type": "array",
3576
+ "items": {
3577
+ "type": "string"
3578
+ }
3579
+ }
3580
+ },
3581
+ "required": [
3582
+ "host"
3583
+ ]
3584
+ }
3585
+ }
3586
+ }
3587
+ }
3588
+ },
3589
+ "required": [
3590
+ "baseUrl",
3591
+ "database"
3592
+ ]
3593
+ },
3594
+ "discovery": {
3595
+ "description": "Options used by the default discovery service.",
3596
+ "type": "object",
3597
+ "properties": {
3598
+ "endpoints": {
3599
+ "description": "A list of target base URLs and their associated plugins.",
3766
3600
  "type": "array",
3767
3601
  "items": {
3768
3602
  "type": "object",
3769
3603
  "properties": {
3770
- "host": {
3771
- "description": "The hostname of the given Harness Code instance",
3772
- "visibility": "frontend",
3773
- "type": "string"
3774
- },
3775
- "apiKey": {
3776
- "description": "The apikey to use for authenticated requests.",
3777
- "visibility": "secret",
3778
- "type": "string"
3604
+ "target": {
3605
+ "description": "The target base URL to use for the given set of plugins. Note that this\nneeds to be a full URL including the protocol and path parts that fully\naddress the root of a plugin's API endpoints.",
3606
+ "anyOf": [
3607
+ {
3608
+ "type": "object",
3609
+ "properties": {
3610
+ "internal": {
3611
+ "type": "string"
3612
+ },
3613
+ "external": {
3614
+ "type": "string"
3615
+ }
3616
+ }
3617
+ },
3618
+ {
3619
+ "type": "string"
3620
+ }
3621
+ ]
3779
3622
  },
3780
- "token": {
3781
- "description": "Harness Code token used to authenticate requests. This can be either a generated access token.",
3782
- "visibility": "secret",
3783
- "type": "string"
3623
+ "plugins": {
3624
+ "description": "Array of plugins which use that target base URL.\n\nThe special value `*` can be used to match all plugins.",
3625
+ "type": "array",
3626
+ "items": {
3627
+ "type": "string"
3628
+ }
3784
3629
  }
3785
3630
  },
3786
3631
  "required": [
3787
- "host"
3632
+ "plugins",
3633
+ "target"
3788
3634
  ]
3789
3635
  }
3790
3636
  }
3637
+ },
3638
+ "required": [
3639
+ "endpoints"
3640
+ ]
3641
+ }
3642
+ },
3643
+ "required": [
3644
+ "app"
3645
+ ],
3646
+ "$schema": "http://json-schema.org/draft-07/schema#"
3647
+ },
3648
+ "packageName": "@backstage/backend-defaults"
3649
+ },
3650
+ {
3651
+ "path": "../../plugins/events-node/config.d.ts",
3652
+ "value": {
3653
+ "type": "object",
3654
+ "properties": {
3655
+ "events": {
3656
+ "type": "object",
3657
+ "properties": {
3658
+ "useEventBus": {
3659
+ "description": "Whether to use the event bus API in the events plugin backend to\ndistribute events across multiple instances when publishing and\nsubscribing to events.\n\nThe default is 'auto', which means means that the event bus API will be\nused if it's available, but will be disabled if the events backend\nreturns a 404.\n\nIf set to 'never', the events service will only ever publish events\nlocally to the same instance, while if set to 'always', the event bus API\nwill never be disabled, even if the events backend returns a 404.",
3660
+ "enum": [
3661
+ "always",
3662
+ "auto",
3663
+ "never"
3664
+ ],
3665
+ "type": "string"
3666
+ }
3791
3667
  }
3792
3668
  }
3793
3669
  },
3794
3670
  "$schema": "http://json-schema.org/draft-07/schema#"
3795
3671
  },
3796
- "packageName": "@backstage/integration"
3672
+ "packageName": "@backstage/plugin-events-node"
3673
+ },
3674
+ {
3675
+ "path": "../../plugins/auth-backend-module-google-provider/config.d.ts",
3676
+ "value": {
3677
+ "type": "object",
3678
+ "properties": {
3679
+ "auth": {
3680
+ "description": "Configuration options for the auth plugin",
3681
+ "type": "object",
3682
+ "properties": {
3683
+ "providers": {
3684
+ "type": "object",
3685
+ "properties": {
3686
+ "google": {
3687
+ "visibility": "frontend",
3688
+ "type": "object",
3689
+ "additionalProperties": {
3690
+ "type": "object",
3691
+ "properties": {
3692
+ "clientId": {
3693
+ "type": "string"
3694
+ },
3695
+ "clientSecret": {
3696
+ "visibility": "secret",
3697
+ "type": "string"
3698
+ },
3699
+ "callbackUrl": {
3700
+ "type": "string"
3701
+ },
3702
+ "additionalScopes": {
3703
+ "anyOf": [
3704
+ {
3705
+ "type": "array",
3706
+ "items": {
3707
+ "type": "string"
3708
+ }
3709
+ },
3710
+ {
3711
+ "type": "string"
3712
+ }
3713
+ ]
3714
+ },
3715
+ "signIn": {
3716
+ "type": "object",
3717
+ "properties": {
3718
+ "resolvers": {
3719
+ "type": "array",
3720
+ "items": {
3721
+ "anyOf": [
3722
+ {
3723
+ "type": "object",
3724
+ "properties": {
3725
+ "resolver": {
3726
+ "type": "string",
3727
+ "const": "emailMatchingUserEntityAnnotation"
3728
+ },
3729
+ "dangerouslyAllowSignInWithoutUserInCatalog": {
3730
+ "type": "boolean"
3731
+ }
3732
+ },
3733
+ "required": [
3734
+ "resolver"
3735
+ ]
3736
+ },
3737
+ {
3738
+ "type": "object",
3739
+ "properties": {
3740
+ "resolver": {
3741
+ "type": "string",
3742
+ "const": "emailLocalPartMatchingUserEntityName"
3743
+ },
3744
+ "allowedDomains": {
3745
+ "type": "array",
3746
+ "items": {
3747
+ "type": "string"
3748
+ }
3749
+ },
3750
+ "dangerouslyAllowSignInWithoutUserInCatalog": {
3751
+ "type": "boolean"
3752
+ }
3753
+ },
3754
+ "required": [
3755
+ "resolver"
3756
+ ]
3757
+ },
3758
+ {
3759
+ "type": "object",
3760
+ "properties": {
3761
+ "resolver": {
3762
+ "type": "string",
3763
+ "const": "emailMatchingUserEntityProfileEmail"
3764
+ },
3765
+ "dangerouslyAllowSignInWithoutUserInCatalog": {
3766
+ "type": "boolean"
3767
+ }
3768
+ },
3769
+ "required": [
3770
+ "resolver"
3771
+ ]
3772
+ }
3773
+ ]
3774
+ }
3775
+ }
3776
+ },
3777
+ "required": [
3778
+ "resolvers"
3779
+ ]
3780
+ },
3781
+ "sessionDuration": {}
3782
+ },
3783
+ "required": [
3784
+ "clientId",
3785
+ "clientSecret"
3786
+ ]
3787
+ }
3788
+ }
3789
+ }
3790
+ }
3791
+ }
3792
+ }
3793
+ },
3794
+ "$schema": "http://json-schema.org/draft-07/schema#"
3795
+ },
3796
+ "packageName": "@backstage/plugin-auth-backend-module-google-provider"
3797
+ },
3798
+ {
3799
+ "path": "../../node_modules/@backstage-community/plugin-puppetdb/node_modules/@backstage/plugin-permission-common/config.d.ts",
3800
+ "value": {
3801
+ "type": "object",
3802
+ "properties": {
3803
+ "permission": {
3804
+ "description": "Configuration options for Backstage permissions and authorization",
3805
+ "type": "object",
3806
+ "properties": {
3807
+ "enabled": {
3808
+ "description": "Whether authorization is enabled in Backstage. Defaults to false, which means authorization\nrequests will be automatically allowed without invoking the authorization policy.",
3809
+ "visibility": "frontend",
3810
+ "type": "boolean"
3811
+ },
3812
+ "EXPERIMENTAL_enableBatchedRequests": {
3813
+ "visibility": "frontend",
3814
+ "type": "boolean"
3815
+ }
3816
+ }
3817
+ }
3818
+ },
3819
+ "$schema": "http://json-schema.org/draft-07/schema#"
3820
+ },
3821
+ "packageName": "@backstage/plugin-permission-common"
3797
3822
  },
3798
3823
  {
3799
3824
  "path": "../integration-aws-node/config.d.ts",
@@ -3905,31 +3930,6 @@
3905
3930
  },
3906
3931
  "packageName": "@backstage/integration-aws-node"
3907
3932
  },
3908
- {
3909
- "path": "../../node_modules/@backstage-community/plugin-puppetdb/node_modules/@backstage/plugin-permission-common/config.d.ts",
3910
- "value": {
3911
- "type": "object",
3912
- "properties": {
3913
- "permission": {
3914
- "description": "Configuration options for Backstage permissions and authorization",
3915
- "type": "object",
3916
- "properties": {
3917
- "enabled": {
3918
- "description": "Whether authorization is enabled in Backstage. Defaults to false, which means authorization\nrequests will be automatically allowed without invoking the authorization policy.",
3919
- "visibility": "frontend",
3920
- "type": "boolean"
3921
- },
3922
- "EXPERIMENTAL_enableBatchedRequests": {
3923
- "visibility": "frontend",
3924
- "type": "boolean"
3925
- }
3926
- }
3927
- }
3928
- },
3929
- "$schema": "http://json-schema.org/draft-07/schema#"
3930
- },
3931
- "packageName": "@backstage/plugin-permission-common"
3932
- },
3933
3933
  {
3934
3934
  "path": "../../node_modules/@backstage-community/plugin-puppetdb/node_modules/@backstage/frontend-app-api/config.d.ts",
3935
3935
  "value": {