@betterportal/config-manager 10.5.0 → 10.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/lib/.bsb/clients/service-betterportal-config-manager.d.ts +1 -1
  2. package/lib/.bsb/clients/service-betterportal-config-manager.js +1 -1
  3. package/lib/bp-contracts/org.betterportal.config-manager.json +2330 -1
  4. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.d.ts +1466 -0
  5. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.d.ts.map +1 -1
  6. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.js +35 -0
  7. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.js.map +1 -1
  8. package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts.map +1 -1
  9. package/lib/plugins/service-betterportal-config-manager/adminApi.js +15 -2
  10. package/lib/plugins/service-betterportal-config-manager/adminApi.js.map +1 -1
  11. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.d.ts +8 -0
  12. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.d.ts.map +1 -0
  13. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.js +10 -0
  14. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.js.map +1 -0
  15. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.d.ts +18 -0
  16. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.d.ts.map +1 -0
  17. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.js +15 -0
  18. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.js.map +1 -0
  19. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.d.ts +8 -0
  20. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.d.ts.map +1 -0
  21. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.js +10 -0
  22. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.js.map +1 -0
  23. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.d.ts +8 -0
  24. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.d.ts.map +1 -0
  25. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.js +10 -0
  26. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.js.map +1 -0
  27. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.d.ts +2 -0
  28. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.d.ts.map +1 -0
  29. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.js +2 -0
  30. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.js.map +1 -0
  31. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.d.ts +4 -0
  32. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.d.ts.map +1 -0
  33. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.js +321 -0
  34. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.js.map +1 -0
  35. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.d.ts +2 -0
  36. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.d.ts.map +1 -0
  37. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.js +2 -0
  38. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.js.map +1 -0
  39. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.d.ts +2 -0
  40. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.d.ts.map +1 -0
  41. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.js +2 -0
  42. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.js.map +1 -0
  43. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.d.ts +2 -0
  44. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.d.ts.map +1 -0
  45. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.js +2 -0
  46. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.js.map +1 -0
  47. package/lib/plugins/service-betterportal-config-manager/index.d.ts +3 -0
  48. package/lib/plugins/service-betterportal-config-manager/index.d.ts.map +1 -1
  49. package/lib/plugins/service-betterportal-config-manager/index.js +57 -11
  50. package/lib/plugins/service-betterportal-config-manager/index.js.map +1 -1
  51. package/lib/plugins/service-betterportal-config-manager/previewApi.d.ts +7 -0
  52. package/lib/plugins/service-betterportal-config-manager/previewApi.d.ts.map +1 -0
  53. package/lib/plugins/service-betterportal-config-manager/previewApi.js +112 -0
  54. package/lib/plugins/service-betterportal-config-manager/previewApi.js.map +1 -0
  55. package/lib/plugins/service-betterportal-config-manager/previewEnvironmentManagement.d.ts +474 -0
  56. package/lib/plugins/service-betterportal-config-manager/previewEnvironmentManagement.d.ts.map +1 -0
  57. package/lib/plugins/service-betterportal-config-manager/previewEnvironmentManagement.js +462 -0
  58. package/lib/plugins/service-betterportal-config-manager/previewEnvironmentManagement.js.map +1 -0
  59. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.d.ts +61 -0
  60. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.d.ts.map +1 -0
  61. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.js +738 -0
  62. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.js.map +1 -0
  63. package/lib/plugins/service-betterportal-config-manager/storage/core.d.ts +3 -1
  64. package/lib/plugins/service-betterportal-config-manager/storage/core.d.ts.map +1 -1
  65. package/lib/plugins/service-betterportal-config-manager/storage/core.js +12 -2
  66. package/lib/plugins/service-betterportal-config-manager/storage/core.js.map +1 -1
  67. package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts +4 -1
  68. package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts.map +1 -1
  69. package/lib/plugins/service-betterportal-config-manager/syncApi.js +6 -3
  70. package/lib/plugins/service-betterportal-config-manager/syncApi.js.map +1 -1
  71. package/lib/plugins/service-betterportal-config-manager/tenantManagement.d.ts.map +1 -1
  72. package/lib/plugins/service-betterportal-config-manager/tenantManagement.js +12 -1
  73. package/lib/plugins/service-betterportal-config-manager/tenantManagement.js.map +1 -1
  74. package/lib/schemas/service-betterportal-config-manager.json +1 -1
  75. package/lib/schemas/service-betterportal-config-manager.plugin.json +1 -1
  76. package/package.json +10 -10
@@ -4,7 +4,7 @@
4
4
  "pluginId": "org.betterportal.config-manager",
5
5
  "title": "BetterPortal Config Manager",
6
6
  "description": "Admin-facing BetterPortal service for discovering and managing service config surfaces.",
7
- "version": "10.5.0",
7
+ "version": "10.6.1",
8
8
  "category": "service",
9
9
  "deploymentModes": [
10
10
  "self-hosted"
@@ -1306,6 +1306,2305 @@
1306
1306
  }
1307
1307
  ]
1308
1308
  },
1309
+ {
1310
+ "viewId": "preview-environments.index",
1311
+ "title": "Preview Environments",
1312
+ "description": "Manage isolated, disposable application clones for development deployments.",
1313
+ "path": "/preview-environments",
1314
+ "pathVariants": [],
1315
+ "paramsSchema": {},
1316
+ "operations": [
1317
+ {
1318
+ "operationId": "admin.preview-environments.delete",
1319
+ "method": "DELETE",
1320
+ "title": "Delete preview resources",
1321
+ "description": "Delete a preview deployment or group.",
1322
+ "querySchema": {},
1323
+ "headersSchema": {},
1324
+ "bodySchema": {},
1325
+ "jsonResponseSchema": {
1326
+ "anyvaliVersion": "1.0",
1327
+ "schemaVersion": "1.1",
1328
+ "root": {
1329
+ "kind": "object",
1330
+ "properties": {
1331
+ "title": {
1332
+ "kind": "string",
1333
+ "minLength": 1
1334
+ },
1335
+ "previewPath": {
1336
+ "kind": "string",
1337
+ "minLength": 1
1338
+ },
1339
+ "deploymentApiBase": {
1340
+ "kind": "string",
1341
+ "minLength": 1
1342
+ },
1343
+ "configTicketUrl": {
1344
+ "kind": "string",
1345
+ "minLength": 1
1346
+ },
1347
+ "sourceTenants": {
1348
+ "kind": "array",
1349
+ "items": {
1350
+ "kind": "object",
1351
+ "properties": {
1352
+ "id": {
1353
+ "kind": "string",
1354
+ "minLength": 1
1355
+ },
1356
+ "title": {
1357
+ "kind": "string",
1358
+ "minLength": 1
1359
+ }
1360
+ },
1361
+ "required": [
1362
+ "id",
1363
+ "title"
1364
+ ],
1365
+ "unknownKeys": "strip"
1366
+ }
1367
+ },
1368
+ "sourceApps": {
1369
+ "kind": "array",
1370
+ "items": {
1371
+ "kind": "object",
1372
+ "properties": {
1373
+ "id": {
1374
+ "kind": "string",
1375
+ "minLength": 1
1376
+ },
1377
+ "tenantId": {
1378
+ "kind": "string",
1379
+ "minLength": 1
1380
+ },
1381
+ "title": {
1382
+ "kind": "string",
1383
+ "minLength": 1
1384
+ }
1385
+ },
1386
+ "required": [
1387
+ "id",
1388
+ "tenantId",
1389
+ "title"
1390
+ ],
1391
+ "unknownKeys": "strip"
1392
+ }
1393
+ },
1394
+ "groups": {
1395
+ "kind": "array",
1396
+ "items": {
1397
+ "kind": "object",
1398
+ "properties": {
1399
+ "id": {
1400
+ "kind": "string",
1401
+ "minLength": 1
1402
+ },
1403
+ "name": {
1404
+ "kind": "string",
1405
+ "minLength": 1
1406
+ },
1407
+ "sourceTenantId": {
1408
+ "kind": "string",
1409
+ "minLength": 1
1410
+ },
1411
+ "sourceAppId": {
1412
+ "kind": "string",
1413
+ "minLength": 1
1414
+ },
1415
+ "sourceLabel": {
1416
+ "kind": "string",
1417
+ "minLength": 1
1418
+ },
1419
+ "expiresInDays": {
1420
+ "kind": "optional",
1421
+ "inner": {
1422
+ "kind": "int",
1423
+ "min": 1
1424
+ }
1425
+ },
1426
+ "oidc": {
1427
+ "kind": "optional",
1428
+ "inner": {
1429
+ "kind": "object",
1430
+ "properties": {
1431
+ "issuer": {
1432
+ "kind": "string",
1433
+ "minLength": 1
1434
+ },
1435
+ "audience": {
1436
+ "kind": "string",
1437
+ "minLength": 1
1438
+ },
1439
+ "jwksUri": {
1440
+ "kind": "string",
1441
+ "minLength": 1
1442
+ },
1443
+ "subjectPrefix": {
1444
+ "kind": "optional",
1445
+ "inner": {
1446
+ "kind": "string"
1447
+ }
1448
+ },
1449
+ "requiredClaimsJson": {
1450
+ "kind": "string"
1451
+ }
1452
+ },
1453
+ "required": [
1454
+ "issuer",
1455
+ "audience",
1456
+ "jwksUri",
1457
+ "requiredClaimsJson"
1458
+ ],
1459
+ "unknownKeys": "strip"
1460
+ }
1461
+ },
1462
+ "services": {
1463
+ "kind": "array",
1464
+ "items": {
1465
+ "kind": "object",
1466
+ "properties": {
1467
+ "serviceId": {
1468
+ "kind": "string",
1469
+ "minLength": 1
1470
+ },
1471
+ "title": {
1472
+ "kind": "string",
1473
+ "minLength": 1
1474
+ },
1475
+ "fields": {
1476
+ "kind": "array",
1477
+ "items": {
1478
+ "kind": "object",
1479
+ "properties": {
1480
+ "key": {
1481
+ "kind": "string",
1482
+ "minLength": 1
1483
+ },
1484
+ "title": {
1485
+ "kind": "string",
1486
+ "minLength": 1
1487
+ },
1488
+ "description": {
1489
+ "kind": "string"
1490
+ },
1491
+ "scope": {
1492
+ "kind": "enum",
1493
+ "values": [
1494
+ "tenant",
1495
+ "app"
1496
+ ]
1497
+ },
1498
+ "secret": {
1499
+ "kind": "bool"
1500
+ },
1501
+ "required": {
1502
+ "kind": "bool"
1503
+ },
1504
+ "defaultValue": {
1505
+ "kind": "optional",
1506
+ "inner": {
1507
+ "kind": "ref",
1508
+ "ref": "#/definitions/BetterPortalJsonValue"
1509
+ }
1510
+ },
1511
+ "control": {
1512
+ "kind": "optional",
1513
+ "inner": {
1514
+ "kind": "string"
1515
+ }
1516
+ },
1517
+ "options": {
1518
+ "kind": "array",
1519
+ "items": {
1520
+ "kind": "object",
1521
+ "properties": {
1522
+ "value": {
1523
+ "kind": "string"
1524
+ },
1525
+ "label": {
1526
+ "kind": "string"
1527
+ }
1528
+ },
1529
+ "required": [
1530
+ "value",
1531
+ "label"
1532
+ ],
1533
+ "unknownKeys": "strip"
1534
+ },
1535
+ "default": []
1536
+ }
1537
+ },
1538
+ "required": [
1539
+ "key",
1540
+ "title",
1541
+ "description",
1542
+ "scope",
1543
+ "secret",
1544
+ "required",
1545
+ "options"
1546
+ ],
1547
+ "unknownKeys": "strip"
1548
+ },
1549
+ "default": []
1550
+ },
1551
+ "source": {
1552
+ "kind": "optional",
1553
+ "inner": {
1554
+ "kind": "object",
1555
+ "properties": {
1556
+ "instanceId": {
1557
+ "kind": "string",
1558
+ "minLength": 1
1559
+ },
1560
+ "hostname": {
1561
+ "kind": "string",
1562
+ "minLength": 1
1563
+ }
1564
+ },
1565
+ "required": [
1566
+ "instanceId",
1567
+ "hostname"
1568
+ ],
1569
+ "unknownKeys": "strip"
1570
+ }
1571
+ },
1572
+ "encryptedTenantConfig": {
1573
+ "kind": "string"
1574
+ },
1575
+ "encryptedAppConfig": {
1576
+ "kind": "string"
1577
+ }
1578
+ },
1579
+ "required": [
1580
+ "serviceId",
1581
+ "title",
1582
+ "fields",
1583
+ "encryptedTenantConfig",
1584
+ "encryptedAppConfig"
1585
+ ],
1586
+ "unknownKeys": "strip"
1587
+ }
1588
+ },
1589
+ "deployments": {
1590
+ "kind": "array",
1591
+ "items": {
1592
+ "kind": "object",
1593
+ "properties": {
1594
+ "id": {
1595
+ "kind": "string",
1596
+ "minLength": 1
1597
+ },
1598
+ "groupId": {
1599
+ "kind": "string",
1600
+ "minLength": 1
1601
+ },
1602
+ "key": {
1603
+ "kind": "string",
1604
+ "minLength": 1
1605
+ },
1606
+ "name": {
1607
+ "kind": "string",
1608
+ "minLength": 1
1609
+ },
1610
+ "hostname": {
1611
+ "kind": "string",
1612
+ "minLength": 1
1613
+ },
1614
+ "expiresInDays": {
1615
+ "kind": "optional",
1616
+ "inner": {
1617
+ "kind": "int",
1618
+ "min": 1
1619
+ }
1620
+ },
1621
+ "expiresAt": {
1622
+ "kind": "optional",
1623
+ "inner": {
1624
+ "kind": "string"
1625
+ }
1626
+ },
1627
+ "createdAt": {
1628
+ "kind": "string",
1629
+ "minLength": 1
1630
+ },
1631
+ "updatedAt": {
1632
+ "kind": "string",
1633
+ "minLength": 1
1634
+ },
1635
+ "ready": {
1636
+ "kind": "bool"
1637
+ },
1638
+ "services": {
1639
+ "kind": "array",
1640
+ "items": {
1641
+ "kind": "object",
1642
+ "properties": {
1643
+ "serviceId": {
1644
+ "kind": "string",
1645
+ "minLength": 1
1646
+ },
1647
+ "instanceId": {
1648
+ "kind": "string",
1649
+ "minLength": 1
1650
+ },
1651
+ "url": {
1652
+ "kind": "string",
1653
+ "minLength": 1
1654
+ },
1655
+ "lastSyncAt": {
1656
+ "kind": "optional",
1657
+ "inner": {
1658
+ "kind": "string"
1659
+ }
1660
+ },
1661
+ "ready": {
1662
+ "kind": "bool"
1663
+ }
1664
+ },
1665
+ "required": [
1666
+ "serviceId",
1667
+ "instanceId",
1668
+ "url",
1669
+ "ready"
1670
+ ],
1671
+ "unknownKeys": "strip"
1672
+ }
1673
+ }
1674
+ },
1675
+ "required": [
1676
+ "id",
1677
+ "groupId",
1678
+ "key",
1679
+ "name",
1680
+ "hostname",
1681
+ "createdAt",
1682
+ "updatedAt",
1683
+ "ready",
1684
+ "services"
1685
+ ],
1686
+ "unknownKeys": "strip"
1687
+ }
1688
+ },
1689
+ "createdAt": {
1690
+ "kind": "string",
1691
+ "minLength": 1
1692
+ },
1693
+ "updatedAt": {
1694
+ "kind": "string",
1695
+ "minLength": 1
1696
+ }
1697
+ },
1698
+ "required": [
1699
+ "id",
1700
+ "name",
1701
+ "sourceTenantId",
1702
+ "sourceAppId",
1703
+ "sourceLabel",
1704
+ "services",
1705
+ "deployments",
1706
+ "createdAt",
1707
+ "updatedAt"
1708
+ ],
1709
+ "unknownKeys": "strip"
1710
+ }
1711
+ },
1712
+ "notice": {
1713
+ "kind": "optional",
1714
+ "inner": {
1715
+ "kind": "string"
1716
+ }
1717
+ },
1718
+ "error": {
1719
+ "kind": "optional",
1720
+ "inner": {
1721
+ "kind": "string"
1722
+ }
1723
+ },
1724
+ "issuedApiKey": {
1725
+ "kind": "optional",
1726
+ "inner": {
1727
+ "kind": "string"
1728
+ }
1729
+ },
1730
+ "issuedCredentials": {
1731
+ "kind": "array",
1732
+ "items": {
1733
+ "kind": "object",
1734
+ "properties": {
1735
+ "serviceId": {
1736
+ "kind": "string",
1737
+ "minLength": 1
1738
+ },
1739
+ "instanceId": {
1740
+ "kind": "string",
1741
+ "minLength": 1
1742
+ },
1743
+ "url": {
1744
+ "kind": "string",
1745
+ "minLength": 1
1746
+ },
1747
+ "controlPlaneUrl": {
1748
+ "kind": "string",
1749
+ "minLength": 1
1750
+ },
1751
+ "apiKey": {
1752
+ "kind": "string",
1753
+ "minLength": 1
1754
+ }
1755
+ },
1756
+ "required": [
1757
+ "serviceId",
1758
+ "instanceId",
1759
+ "url",
1760
+ "controlPlaneUrl",
1761
+ "apiKey"
1762
+ ],
1763
+ "unknownKeys": "strip"
1764
+ },
1765
+ "default": []
1766
+ }
1767
+ },
1768
+ "required": [
1769
+ "title",
1770
+ "previewPath",
1771
+ "deploymentApiBase",
1772
+ "configTicketUrl",
1773
+ "sourceTenants",
1774
+ "sourceApps",
1775
+ "groups",
1776
+ "issuedCredentials"
1777
+ ],
1778
+ "unknownKeys": "strip"
1779
+ },
1780
+ "definitions": {
1781
+ "BetterPortalJsonValue": {
1782
+ "kind": "union",
1783
+ "variants": [
1784
+ {
1785
+ "kind": "null"
1786
+ },
1787
+ {
1788
+ "kind": "bool"
1789
+ },
1790
+ {
1791
+ "kind": "string"
1792
+ },
1793
+ {
1794
+ "kind": "number"
1795
+ },
1796
+ {
1797
+ "kind": "array",
1798
+ "items": {
1799
+ "kind": "ref",
1800
+ "ref": "#/definitions/BetterPortalJsonValue"
1801
+ }
1802
+ },
1803
+ {
1804
+ "kind": "record",
1805
+ "valueSchema": {
1806
+ "kind": "ref",
1807
+ "ref": "#/definitions/BetterPortalJsonValue"
1808
+ }
1809
+ }
1810
+ ]
1811
+ }
1812
+ },
1813
+ "extensions": {}
1814
+ },
1815
+ "metadataResponseSchema": {},
1816
+ "renderable": true,
1817
+ "html": {
1818
+ "renderers": {
1819
+ "bootstrap5": {
1820
+ "defaultRenderer": "default",
1821
+ "renderModes": [
1822
+ "page"
1823
+ ],
1824
+ "slots": [
1825
+ "main"
1826
+ ],
1827
+ "renderers": [
1828
+ {
1829
+ "id": "default",
1830
+ "title": "Default Content",
1831
+ "slotId": "main",
1832
+ "renderModes": [
1833
+ "page",
1834
+ "fragment"
1835
+ ]
1836
+ }
1837
+ ]
1838
+ }
1839
+ }
1840
+ },
1841
+ "auth": {
1842
+ "required": true,
1843
+ "callers": [
1844
+ "user"
1845
+ ],
1846
+ "permissions": [
1847
+ {
1848
+ "serviceId": "org.betterportal.config-manager",
1849
+ "viewId": "preview-environments.index",
1850
+ "permissions": [
1851
+ "delete"
1852
+ ]
1853
+ }
1854
+ ]
1855
+ },
1856
+ "sitemap": {
1857
+ "kind": "default"
1858
+ },
1859
+ "robots": [],
1860
+ "dependencies": [],
1861
+ "apiContracts": [],
1862
+ "demoScenarios": [
1863
+ {
1864
+ "id": "default",
1865
+ "title": "Default",
1866
+ "response": {
1867
+ "title": "Preview Environments",
1868
+ "previewPath": "/preview-environments",
1869
+ "deploymentApiBase": "/api/preview-groups",
1870
+ "configTicketUrl": "/.well-known/bp/admin/config-ticket",
1871
+ "sourceTenants": [],
1872
+ "sourceApps": [],
1873
+ "groups": [],
1874
+ "issuedCredentials": []
1875
+ }
1876
+ }
1877
+ ],
1878
+ "cacheHints": {
1879
+ "ttlSeconds": 0,
1880
+ "varyBy": [
1881
+ "accept",
1882
+ "origin"
1883
+ ]
1884
+ }
1885
+ },
1886
+ {
1887
+ "operationId": "admin.preview-environments.view",
1888
+ "method": "GET",
1889
+ "title": "View preview environments",
1890
+ "description": "List preview groups and their disposable deployments.",
1891
+ "querySchema": {},
1892
+ "headersSchema": {},
1893
+ "bodySchema": {},
1894
+ "jsonResponseSchema": {
1895
+ "anyvaliVersion": "1.0",
1896
+ "schemaVersion": "1.1",
1897
+ "root": {
1898
+ "kind": "object",
1899
+ "properties": {
1900
+ "title": {
1901
+ "kind": "string",
1902
+ "minLength": 1
1903
+ },
1904
+ "previewPath": {
1905
+ "kind": "string",
1906
+ "minLength": 1
1907
+ },
1908
+ "deploymentApiBase": {
1909
+ "kind": "string",
1910
+ "minLength": 1
1911
+ },
1912
+ "configTicketUrl": {
1913
+ "kind": "string",
1914
+ "minLength": 1
1915
+ },
1916
+ "sourceTenants": {
1917
+ "kind": "array",
1918
+ "items": {
1919
+ "kind": "object",
1920
+ "properties": {
1921
+ "id": {
1922
+ "kind": "string",
1923
+ "minLength": 1
1924
+ },
1925
+ "title": {
1926
+ "kind": "string",
1927
+ "minLength": 1
1928
+ }
1929
+ },
1930
+ "required": [
1931
+ "id",
1932
+ "title"
1933
+ ],
1934
+ "unknownKeys": "strip"
1935
+ }
1936
+ },
1937
+ "sourceApps": {
1938
+ "kind": "array",
1939
+ "items": {
1940
+ "kind": "object",
1941
+ "properties": {
1942
+ "id": {
1943
+ "kind": "string",
1944
+ "minLength": 1
1945
+ },
1946
+ "tenantId": {
1947
+ "kind": "string",
1948
+ "minLength": 1
1949
+ },
1950
+ "title": {
1951
+ "kind": "string",
1952
+ "minLength": 1
1953
+ }
1954
+ },
1955
+ "required": [
1956
+ "id",
1957
+ "tenantId",
1958
+ "title"
1959
+ ],
1960
+ "unknownKeys": "strip"
1961
+ }
1962
+ },
1963
+ "groups": {
1964
+ "kind": "array",
1965
+ "items": {
1966
+ "kind": "object",
1967
+ "properties": {
1968
+ "id": {
1969
+ "kind": "string",
1970
+ "minLength": 1
1971
+ },
1972
+ "name": {
1973
+ "kind": "string",
1974
+ "minLength": 1
1975
+ },
1976
+ "sourceTenantId": {
1977
+ "kind": "string",
1978
+ "minLength": 1
1979
+ },
1980
+ "sourceAppId": {
1981
+ "kind": "string",
1982
+ "minLength": 1
1983
+ },
1984
+ "sourceLabel": {
1985
+ "kind": "string",
1986
+ "minLength": 1
1987
+ },
1988
+ "expiresInDays": {
1989
+ "kind": "optional",
1990
+ "inner": {
1991
+ "kind": "int",
1992
+ "min": 1
1993
+ }
1994
+ },
1995
+ "oidc": {
1996
+ "kind": "optional",
1997
+ "inner": {
1998
+ "kind": "object",
1999
+ "properties": {
2000
+ "issuer": {
2001
+ "kind": "string",
2002
+ "minLength": 1
2003
+ },
2004
+ "audience": {
2005
+ "kind": "string",
2006
+ "minLength": 1
2007
+ },
2008
+ "jwksUri": {
2009
+ "kind": "string",
2010
+ "minLength": 1
2011
+ },
2012
+ "subjectPrefix": {
2013
+ "kind": "optional",
2014
+ "inner": {
2015
+ "kind": "string"
2016
+ }
2017
+ },
2018
+ "requiredClaimsJson": {
2019
+ "kind": "string"
2020
+ }
2021
+ },
2022
+ "required": [
2023
+ "issuer",
2024
+ "audience",
2025
+ "jwksUri",
2026
+ "requiredClaimsJson"
2027
+ ],
2028
+ "unknownKeys": "strip"
2029
+ }
2030
+ },
2031
+ "services": {
2032
+ "kind": "array",
2033
+ "items": {
2034
+ "kind": "object",
2035
+ "properties": {
2036
+ "serviceId": {
2037
+ "kind": "string",
2038
+ "minLength": 1
2039
+ },
2040
+ "title": {
2041
+ "kind": "string",
2042
+ "minLength": 1
2043
+ },
2044
+ "fields": {
2045
+ "kind": "array",
2046
+ "items": {
2047
+ "kind": "object",
2048
+ "properties": {
2049
+ "key": {
2050
+ "kind": "string",
2051
+ "minLength": 1
2052
+ },
2053
+ "title": {
2054
+ "kind": "string",
2055
+ "minLength": 1
2056
+ },
2057
+ "description": {
2058
+ "kind": "string"
2059
+ },
2060
+ "scope": {
2061
+ "kind": "enum",
2062
+ "values": [
2063
+ "tenant",
2064
+ "app"
2065
+ ]
2066
+ },
2067
+ "secret": {
2068
+ "kind": "bool"
2069
+ },
2070
+ "required": {
2071
+ "kind": "bool"
2072
+ },
2073
+ "defaultValue": {
2074
+ "kind": "optional",
2075
+ "inner": {
2076
+ "kind": "ref",
2077
+ "ref": "#/definitions/BetterPortalJsonValue"
2078
+ }
2079
+ },
2080
+ "control": {
2081
+ "kind": "optional",
2082
+ "inner": {
2083
+ "kind": "string"
2084
+ }
2085
+ },
2086
+ "options": {
2087
+ "kind": "array",
2088
+ "items": {
2089
+ "kind": "object",
2090
+ "properties": {
2091
+ "value": {
2092
+ "kind": "string"
2093
+ },
2094
+ "label": {
2095
+ "kind": "string"
2096
+ }
2097
+ },
2098
+ "required": [
2099
+ "value",
2100
+ "label"
2101
+ ],
2102
+ "unknownKeys": "strip"
2103
+ },
2104
+ "default": []
2105
+ }
2106
+ },
2107
+ "required": [
2108
+ "key",
2109
+ "title",
2110
+ "description",
2111
+ "scope",
2112
+ "secret",
2113
+ "required",
2114
+ "options"
2115
+ ],
2116
+ "unknownKeys": "strip"
2117
+ },
2118
+ "default": []
2119
+ },
2120
+ "source": {
2121
+ "kind": "optional",
2122
+ "inner": {
2123
+ "kind": "object",
2124
+ "properties": {
2125
+ "instanceId": {
2126
+ "kind": "string",
2127
+ "minLength": 1
2128
+ },
2129
+ "hostname": {
2130
+ "kind": "string",
2131
+ "minLength": 1
2132
+ }
2133
+ },
2134
+ "required": [
2135
+ "instanceId",
2136
+ "hostname"
2137
+ ],
2138
+ "unknownKeys": "strip"
2139
+ }
2140
+ },
2141
+ "encryptedTenantConfig": {
2142
+ "kind": "string"
2143
+ },
2144
+ "encryptedAppConfig": {
2145
+ "kind": "string"
2146
+ }
2147
+ },
2148
+ "required": [
2149
+ "serviceId",
2150
+ "title",
2151
+ "fields",
2152
+ "encryptedTenantConfig",
2153
+ "encryptedAppConfig"
2154
+ ],
2155
+ "unknownKeys": "strip"
2156
+ }
2157
+ },
2158
+ "deployments": {
2159
+ "kind": "array",
2160
+ "items": {
2161
+ "kind": "object",
2162
+ "properties": {
2163
+ "id": {
2164
+ "kind": "string",
2165
+ "minLength": 1
2166
+ },
2167
+ "groupId": {
2168
+ "kind": "string",
2169
+ "minLength": 1
2170
+ },
2171
+ "key": {
2172
+ "kind": "string",
2173
+ "minLength": 1
2174
+ },
2175
+ "name": {
2176
+ "kind": "string",
2177
+ "minLength": 1
2178
+ },
2179
+ "hostname": {
2180
+ "kind": "string",
2181
+ "minLength": 1
2182
+ },
2183
+ "expiresInDays": {
2184
+ "kind": "optional",
2185
+ "inner": {
2186
+ "kind": "int",
2187
+ "min": 1
2188
+ }
2189
+ },
2190
+ "expiresAt": {
2191
+ "kind": "optional",
2192
+ "inner": {
2193
+ "kind": "string"
2194
+ }
2195
+ },
2196
+ "createdAt": {
2197
+ "kind": "string",
2198
+ "minLength": 1
2199
+ },
2200
+ "updatedAt": {
2201
+ "kind": "string",
2202
+ "minLength": 1
2203
+ },
2204
+ "ready": {
2205
+ "kind": "bool"
2206
+ },
2207
+ "services": {
2208
+ "kind": "array",
2209
+ "items": {
2210
+ "kind": "object",
2211
+ "properties": {
2212
+ "serviceId": {
2213
+ "kind": "string",
2214
+ "minLength": 1
2215
+ },
2216
+ "instanceId": {
2217
+ "kind": "string",
2218
+ "minLength": 1
2219
+ },
2220
+ "url": {
2221
+ "kind": "string",
2222
+ "minLength": 1
2223
+ },
2224
+ "lastSyncAt": {
2225
+ "kind": "optional",
2226
+ "inner": {
2227
+ "kind": "string"
2228
+ }
2229
+ },
2230
+ "ready": {
2231
+ "kind": "bool"
2232
+ }
2233
+ },
2234
+ "required": [
2235
+ "serviceId",
2236
+ "instanceId",
2237
+ "url",
2238
+ "ready"
2239
+ ],
2240
+ "unknownKeys": "strip"
2241
+ }
2242
+ }
2243
+ },
2244
+ "required": [
2245
+ "id",
2246
+ "groupId",
2247
+ "key",
2248
+ "name",
2249
+ "hostname",
2250
+ "createdAt",
2251
+ "updatedAt",
2252
+ "ready",
2253
+ "services"
2254
+ ],
2255
+ "unknownKeys": "strip"
2256
+ }
2257
+ },
2258
+ "createdAt": {
2259
+ "kind": "string",
2260
+ "minLength": 1
2261
+ },
2262
+ "updatedAt": {
2263
+ "kind": "string",
2264
+ "minLength": 1
2265
+ }
2266
+ },
2267
+ "required": [
2268
+ "id",
2269
+ "name",
2270
+ "sourceTenantId",
2271
+ "sourceAppId",
2272
+ "sourceLabel",
2273
+ "services",
2274
+ "deployments",
2275
+ "createdAt",
2276
+ "updatedAt"
2277
+ ],
2278
+ "unknownKeys": "strip"
2279
+ }
2280
+ },
2281
+ "notice": {
2282
+ "kind": "optional",
2283
+ "inner": {
2284
+ "kind": "string"
2285
+ }
2286
+ },
2287
+ "error": {
2288
+ "kind": "optional",
2289
+ "inner": {
2290
+ "kind": "string"
2291
+ }
2292
+ },
2293
+ "issuedApiKey": {
2294
+ "kind": "optional",
2295
+ "inner": {
2296
+ "kind": "string"
2297
+ }
2298
+ },
2299
+ "issuedCredentials": {
2300
+ "kind": "array",
2301
+ "items": {
2302
+ "kind": "object",
2303
+ "properties": {
2304
+ "serviceId": {
2305
+ "kind": "string",
2306
+ "minLength": 1
2307
+ },
2308
+ "instanceId": {
2309
+ "kind": "string",
2310
+ "minLength": 1
2311
+ },
2312
+ "url": {
2313
+ "kind": "string",
2314
+ "minLength": 1
2315
+ },
2316
+ "controlPlaneUrl": {
2317
+ "kind": "string",
2318
+ "minLength": 1
2319
+ },
2320
+ "apiKey": {
2321
+ "kind": "string",
2322
+ "minLength": 1
2323
+ }
2324
+ },
2325
+ "required": [
2326
+ "serviceId",
2327
+ "instanceId",
2328
+ "url",
2329
+ "controlPlaneUrl",
2330
+ "apiKey"
2331
+ ],
2332
+ "unknownKeys": "strip"
2333
+ },
2334
+ "default": []
2335
+ }
2336
+ },
2337
+ "required": [
2338
+ "title",
2339
+ "previewPath",
2340
+ "deploymentApiBase",
2341
+ "configTicketUrl",
2342
+ "sourceTenants",
2343
+ "sourceApps",
2344
+ "groups",
2345
+ "issuedCredentials"
2346
+ ],
2347
+ "unknownKeys": "strip"
2348
+ },
2349
+ "definitions": {
2350
+ "BetterPortalJsonValue": {
2351
+ "kind": "union",
2352
+ "variants": [
2353
+ {
2354
+ "kind": "null"
2355
+ },
2356
+ {
2357
+ "kind": "bool"
2358
+ },
2359
+ {
2360
+ "kind": "string"
2361
+ },
2362
+ {
2363
+ "kind": "number"
2364
+ },
2365
+ {
2366
+ "kind": "array",
2367
+ "items": {
2368
+ "kind": "ref",
2369
+ "ref": "#/definitions/BetterPortalJsonValue"
2370
+ }
2371
+ },
2372
+ {
2373
+ "kind": "record",
2374
+ "valueSchema": {
2375
+ "kind": "ref",
2376
+ "ref": "#/definitions/BetterPortalJsonValue"
2377
+ }
2378
+ }
2379
+ ]
2380
+ }
2381
+ },
2382
+ "extensions": {}
2383
+ },
2384
+ "metadataResponseSchema": {},
2385
+ "renderable": true,
2386
+ "html": {
2387
+ "renderers": {
2388
+ "bootstrap5": {
2389
+ "defaultRenderer": "default",
2390
+ "renderModes": [
2391
+ "page"
2392
+ ],
2393
+ "slots": [
2394
+ "main"
2395
+ ],
2396
+ "renderers": [
2397
+ {
2398
+ "id": "default",
2399
+ "title": "Default Content",
2400
+ "slotId": "main",
2401
+ "renderModes": [
2402
+ "page",
2403
+ "fragment"
2404
+ ]
2405
+ }
2406
+ ]
2407
+ }
2408
+ }
2409
+ },
2410
+ "auth": {
2411
+ "required": true,
2412
+ "callers": [
2413
+ "user"
2414
+ ],
2415
+ "permissions": [
2416
+ {
2417
+ "serviceId": "org.betterportal.config-manager",
2418
+ "viewId": "preview-environments.index",
2419
+ "permissions": [
2420
+ "read"
2421
+ ]
2422
+ }
2423
+ ]
2424
+ },
2425
+ "sitemap": {
2426
+ "kind": "default"
2427
+ },
2428
+ "robots": [],
2429
+ "dependencies": [
2430
+ {
2431
+ "operationId": "admin.preview-environments.create",
2432
+ "method": "POST"
2433
+ },
2434
+ {
2435
+ "operationId": "admin.preview-environments.update",
2436
+ "method": "PUT"
2437
+ },
2438
+ {
2439
+ "operationId": "admin.preview-environments.delete",
2440
+ "method": "DELETE"
2441
+ }
2442
+ ],
2443
+ "apiContracts": [],
2444
+ "demoScenarios": [
2445
+ {
2446
+ "id": "default",
2447
+ "title": "Default",
2448
+ "response": {
2449
+ "title": "Preview Environments",
2450
+ "previewPath": "/preview-environments",
2451
+ "deploymentApiBase": "/api/preview-groups",
2452
+ "configTicketUrl": "/.well-known/bp/admin/config-ticket",
2453
+ "sourceTenants": [],
2454
+ "sourceApps": [],
2455
+ "groups": [],
2456
+ "issuedCredentials": []
2457
+ }
2458
+ }
2459
+ ],
2460
+ "cacheHints": {
2461
+ "ttlSeconds": 0,
2462
+ "varyBy": [
2463
+ "accept",
2464
+ "origin"
2465
+ ]
2466
+ }
2467
+ },
2468
+ {
2469
+ "operationId": "admin.preview-environments.create",
2470
+ "method": "POST",
2471
+ "title": "Create preview resources",
2472
+ "description": "Create preview groups, rotate group credentials, or create a preview deployment.",
2473
+ "querySchema": {},
2474
+ "headersSchema": {},
2475
+ "bodySchema": {},
2476
+ "jsonResponseSchema": {
2477
+ "anyvaliVersion": "1.0",
2478
+ "schemaVersion": "1.1",
2479
+ "root": {
2480
+ "kind": "object",
2481
+ "properties": {
2482
+ "title": {
2483
+ "kind": "string",
2484
+ "minLength": 1
2485
+ },
2486
+ "previewPath": {
2487
+ "kind": "string",
2488
+ "minLength": 1
2489
+ },
2490
+ "deploymentApiBase": {
2491
+ "kind": "string",
2492
+ "minLength": 1
2493
+ },
2494
+ "configTicketUrl": {
2495
+ "kind": "string",
2496
+ "minLength": 1
2497
+ },
2498
+ "sourceTenants": {
2499
+ "kind": "array",
2500
+ "items": {
2501
+ "kind": "object",
2502
+ "properties": {
2503
+ "id": {
2504
+ "kind": "string",
2505
+ "minLength": 1
2506
+ },
2507
+ "title": {
2508
+ "kind": "string",
2509
+ "minLength": 1
2510
+ }
2511
+ },
2512
+ "required": [
2513
+ "id",
2514
+ "title"
2515
+ ],
2516
+ "unknownKeys": "strip"
2517
+ }
2518
+ },
2519
+ "sourceApps": {
2520
+ "kind": "array",
2521
+ "items": {
2522
+ "kind": "object",
2523
+ "properties": {
2524
+ "id": {
2525
+ "kind": "string",
2526
+ "minLength": 1
2527
+ },
2528
+ "tenantId": {
2529
+ "kind": "string",
2530
+ "minLength": 1
2531
+ },
2532
+ "title": {
2533
+ "kind": "string",
2534
+ "minLength": 1
2535
+ }
2536
+ },
2537
+ "required": [
2538
+ "id",
2539
+ "tenantId",
2540
+ "title"
2541
+ ],
2542
+ "unknownKeys": "strip"
2543
+ }
2544
+ },
2545
+ "groups": {
2546
+ "kind": "array",
2547
+ "items": {
2548
+ "kind": "object",
2549
+ "properties": {
2550
+ "id": {
2551
+ "kind": "string",
2552
+ "minLength": 1
2553
+ },
2554
+ "name": {
2555
+ "kind": "string",
2556
+ "minLength": 1
2557
+ },
2558
+ "sourceTenantId": {
2559
+ "kind": "string",
2560
+ "minLength": 1
2561
+ },
2562
+ "sourceAppId": {
2563
+ "kind": "string",
2564
+ "minLength": 1
2565
+ },
2566
+ "sourceLabel": {
2567
+ "kind": "string",
2568
+ "minLength": 1
2569
+ },
2570
+ "expiresInDays": {
2571
+ "kind": "optional",
2572
+ "inner": {
2573
+ "kind": "int",
2574
+ "min": 1
2575
+ }
2576
+ },
2577
+ "oidc": {
2578
+ "kind": "optional",
2579
+ "inner": {
2580
+ "kind": "object",
2581
+ "properties": {
2582
+ "issuer": {
2583
+ "kind": "string",
2584
+ "minLength": 1
2585
+ },
2586
+ "audience": {
2587
+ "kind": "string",
2588
+ "minLength": 1
2589
+ },
2590
+ "jwksUri": {
2591
+ "kind": "string",
2592
+ "minLength": 1
2593
+ },
2594
+ "subjectPrefix": {
2595
+ "kind": "optional",
2596
+ "inner": {
2597
+ "kind": "string"
2598
+ }
2599
+ },
2600
+ "requiredClaimsJson": {
2601
+ "kind": "string"
2602
+ }
2603
+ },
2604
+ "required": [
2605
+ "issuer",
2606
+ "audience",
2607
+ "jwksUri",
2608
+ "requiredClaimsJson"
2609
+ ],
2610
+ "unknownKeys": "strip"
2611
+ }
2612
+ },
2613
+ "services": {
2614
+ "kind": "array",
2615
+ "items": {
2616
+ "kind": "object",
2617
+ "properties": {
2618
+ "serviceId": {
2619
+ "kind": "string",
2620
+ "minLength": 1
2621
+ },
2622
+ "title": {
2623
+ "kind": "string",
2624
+ "minLength": 1
2625
+ },
2626
+ "fields": {
2627
+ "kind": "array",
2628
+ "items": {
2629
+ "kind": "object",
2630
+ "properties": {
2631
+ "key": {
2632
+ "kind": "string",
2633
+ "minLength": 1
2634
+ },
2635
+ "title": {
2636
+ "kind": "string",
2637
+ "minLength": 1
2638
+ },
2639
+ "description": {
2640
+ "kind": "string"
2641
+ },
2642
+ "scope": {
2643
+ "kind": "enum",
2644
+ "values": [
2645
+ "tenant",
2646
+ "app"
2647
+ ]
2648
+ },
2649
+ "secret": {
2650
+ "kind": "bool"
2651
+ },
2652
+ "required": {
2653
+ "kind": "bool"
2654
+ },
2655
+ "defaultValue": {
2656
+ "kind": "optional",
2657
+ "inner": {
2658
+ "kind": "ref",
2659
+ "ref": "#/definitions/BetterPortalJsonValue"
2660
+ }
2661
+ },
2662
+ "control": {
2663
+ "kind": "optional",
2664
+ "inner": {
2665
+ "kind": "string"
2666
+ }
2667
+ },
2668
+ "options": {
2669
+ "kind": "array",
2670
+ "items": {
2671
+ "kind": "object",
2672
+ "properties": {
2673
+ "value": {
2674
+ "kind": "string"
2675
+ },
2676
+ "label": {
2677
+ "kind": "string"
2678
+ }
2679
+ },
2680
+ "required": [
2681
+ "value",
2682
+ "label"
2683
+ ],
2684
+ "unknownKeys": "strip"
2685
+ },
2686
+ "default": []
2687
+ }
2688
+ },
2689
+ "required": [
2690
+ "key",
2691
+ "title",
2692
+ "description",
2693
+ "scope",
2694
+ "secret",
2695
+ "required",
2696
+ "options"
2697
+ ],
2698
+ "unknownKeys": "strip"
2699
+ },
2700
+ "default": []
2701
+ },
2702
+ "source": {
2703
+ "kind": "optional",
2704
+ "inner": {
2705
+ "kind": "object",
2706
+ "properties": {
2707
+ "instanceId": {
2708
+ "kind": "string",
2709
+ "minLength": 1
2710
+ },
2711
+ "hostname": {
2712
+ "kind": "string",
2713
+ "minLength": 1
2714
+ }
2715
+ },
2716
+ "required": [
2717
+ "instanceId",
2718
+ "hostname"
2719
+ ],
2720
+ "unknownKeys": "strip"
2721
+ }
2722
+ },
2723
+ "encryptedTenantConfig": {
2724
+ "kind": "string"
2725
+ },
2726
+ "encryptedAppConfig": {
2727
+ "kind": "string"
2728
+ }
2729
+ },
2730
+ "required": [
2731
+ "serviceId",
2732
+ "title",
2733
+ "fields",
2734
+ "encryptedTenantConfig",
2735
+ "encryptedAppConfig"
2736
+ ],
2737
+ "unknownKeys": "strip"
2738
+ }
2739
+ },
2740
+ "deployments": {
2741
+ "kind": "array",
2742
+ "items": {
2743
+ "kind": "object",
2744
+ "properties": {
2745
+ "id": {
2746
+ "kind": "string",
2747
+ "minLength": 1
2748
+ },
2749
+ "groupId": {
2750
+ "kind": "string",
2751
+ "minLength": 1
2752
+ },
2753
+ "key": {
2754
+ "kind": "string",
2755
+ "minLength": 1
2756
+ },
2757
+ "name": {
2758
+ "kind": "string",
2759
+ "minLength": 1
2760
+ },
2761
+ "hostname": {
2762
+ "kind": "string",
2763
+ "minLength": 1
2764
+ },
2765
+ "expiresInDays": {
2766
+ "kind": "optional",
2767
+ "inner": {
2768
+ "kind": "int",
2769
+ "min": 1
2770
+ }
2771
+ },
2772
+ "expiresAt": {
2773
+ "kind": "optional",
2774
+ "inner": {
2775
+ "kind": "string"
2776
+ }
2777
+ },
2778
+ "createdAt": {
2779
+ "kind": "string",
2780
+ "minLength": 1
2781
+ },
2782
+ "updatedAt": {
2783
+ "kind": "string",
2784
+ "minLength": 1
2785
+ },
2786
+ "ready": {
2787
+ "kind": "bool"
2788
+ },
2789
+ "services": {
2790
+ "kind": "array",
2791
+ "items": {
2792
+ "kind": "object",
2793
+ "properties": {
2794
+ "serviceId": {
2795
+ "kind": "string",
2796
+ "minLength": 1
2797
+ },
2798
+ "instanceId": {
2799
+ "kind": "string",
2800
+ "minLength": 1
2801
+ },
2802
+ "url": {
2803
+ "kind": "string",
2804
+ "minLength": 1
2805
+ },
2806
+ "lastSyncAt": {
2807
+ "kind": "optional",
2808
+ "inner": {
2809
+ "kind": "string"
2810
+ }
2811
+ },
2812
+ "ready": {
2813
+ "kind": "bool"
2814
+ }
2815
+ },
2816
+ "required": [
2817
+ "serviceId",
2818
+ "instanceId",
2819
+ "url",
2820
+ "ready"
2821
+ ],
2822
+ "unknownKeys": "strip"
2823
+ }
2824
+ }
2825
+ },
2826
+ "required": [
2827
+ "id",
2828
+ "groupId",
2829
+ "key",
2830
+ "name",
2831
+ "hostname",
2832
+ "createdAt",
2833
+ "updatedAt",
2834
+ "ready",
2835
+ "services"
2836
+ ],
2837
+ "unknownKeys": "strip"
2838
+ }
2839
+ },
2840
+ "createdAt": {
2841
+ "kind": "string",
2842
+ "minLength": 1
2843
+ },
2844
+ "updatedAt": {
2845
+ "kind": "string",
2846
+ "minLength": 1
2847
+ }
2848
+ },
2849
+ "required": [
2850
+ "id",
2851
+ "name",
2852
+ "sourceTenantId",
2853
+ "sourceAppId",
2854
+ "sourceLabel",
2855
+ "services",
2856
+ "deployments",
2857
+ "createdAt",
2858
+ "updatedAt"
2859
+ ],
2860
+ "unknownKeys": "strip"
2861
+ }
2862
+ },
2863
+ "notice": {
2864
+ "kind": "optional",
2865
+ "inner": {
2866
+ "kind": "string"
2867
+ }
2868
+ },
2869
+ "error": {
2870
+ "kind": "optional",
2871
+ "inner": {
2872
+ "kind": "string"
2873
+ }
2874
+ },
2875
+ "issuedApiKey": {
2876
+ "kind": "optional",
2877
+ "inner": {
2878
+ "kind": "string"
2879
+ }
2880
+ },
2881
+ "issuedCredentials": {
2882
+ "kind": "array",
2883
+ "items": {
2884
+ "kind": "object",
2885
+ "properties": {
2886
+ "serviceId": {
2887
+ "kind": "string",
2888
+ "minLength": 1
2889
+ },
2890
+ "instanceId": {
2891
+ "kind": "string",
2892
+ "minLength": 1
2893
+ },
2894
+ "url": {
2895
+ "kind": "string",
2896
+ "minLength": 1
2897
+ },
2898
+ "controlPlaneUrl": {
2899
+ "kind": "string",
2900
+ "minLength": 1
2901
+ },
2902
+ "apiKey": {
2903
+ "kind": "string",
2904
+ "minLength": 1
2905
+ }
2906
+ },
2907
+ "required": [
2908
+ "serviceId",
2909
+ "instanceId",
2910
+ "url",
2911
+ "controlPlaneUrl",
2912
+ "apiKey"
2913
+ ],
2914
+ "unknownKeys": "strip"
2915
+ },
2916
+ "default": []
2917
+ }
2918
+ },
2919
+ "required": [
2920
+ "title",
2921
+ "previewPath",
2922
+ "deploymentApiBase",
2923
+ "configTicketUrl",
2924
+ "sourceTenants",
2925
+ "sourceApps",
2926
+ "groups",
2927
+ "issuedCredentials"
2928
+ ],
2929
+ "unknownKeys": "strip"
2930
+ },
2931
+ "definitions": {
2932
+ "BetterPortalJsonValue": {
2933
+ "kind": "union",
2934
+ "variants": [
2935
+ {
2936
+ "kind": "null"
2937
+ },
2938
+ {
2939
+ "kind": "bool"
2940
+ },
2941
+ {
2942
+ "kind": "string"
2943
+ },
2944
+ {
2945
+ "kind": "number"
2946
+ },
2947
+ {
2948
+ "kind": "array",
2949
+ "items": {
2950
+ "kind": "ref",
2951
+ "ref": "#/definitions/BetterPortalJsonValue"
2952
+ }
2953
+ },
2954
+ {
2955
+ "kind": "record",
2956
+ "valueSchema": {
2957
+ "kind": "ref",
2958
+ "ref": "#/definitions/BetterPortalJsonValue"
2959
+ }
2960
+ }
2961
+ ]
2962
+ }
2963
+ },
2964
+ "extensions": {}
2965
+ },
2966
+ "metadataResponseSchema": {},
2967
+ "renderable": true,
2968
+ "html": {
2969
+ "renderers": {
2970
+ "bootstrap5": {
2971
+ "defaultRenderer": "default",
2972
+ "renderModes": [
2973
+ "page"
2974
+ ],
2975
+ "slots": [
2976
+ "main"
2977
+ ],
2978
+ "renderers": [
2979
+ {
2980
+ "id": "default",
2981
+ "title": "Default Content",
2982
+ "slotId": "main",
2983
+ "renderModes": [
2984
+ "page",
2985
+ "fragment"
2986
+ ]
2987
+ }
2988
+ ]
2989
+ }
2990
+ }
2991
+ },
2992
+ "auth": {
2993
+ "required": true,
2994
+ "callers": [
2995
+ "user"
2996
+ ],
2997
+ "permissions": [
2998
+ {
2999
+ "serviceId": "org.betterportal.config-manager",
3000
+ "viewId": "preview-environments.index",
3001
+ "permissions": [
3002
+ "create"
3003
+ ]
3004
+ }
3005
+ ]
3006
+ },
3007
+ "sitemap": {
3008
+ "kind": "default"
3009
+ },
3010
+ "robots": [],
3011
+ "dependencies": [],
3012
+ "apiContracts": [],
3013
+ "demoScenarios": [
3014
+ {
3015
+ "id": "default",
3016
+ "title": "Default",
3017
+ "response": {
3018
+ "title": "Preview Environments",
3019
+ "previewPath": "/preview-environments",
3020
+ "deploymentApiBase": "/api/preview-groups",
3021
+ "configTicketUrl": "/.well-known/bp/admin/config-ticket",
3022
+ "sourceTenants": [],
3023
+ "sourceApps": [],
3024
+ "groups": [],
3025
+ "issuedCredentials": []
3026
+ }
3027
+ }
3028
+ ],
3029
+ "cacheHints": {
3030
+ "ttlSeconds": 0,
3031
+ "varyBy": [
3032
+ "accept",
3033
+ "origin"
3034
+ ]
3035
+ }
3036
+ },
3037
+ {
3038
+ "operationId": "admin.preview-environments.update",
3039
+ "method": "PUT",
3040
+ "title": "Update preview resources",
3041
+ "description": "Update a preview group or deployment expiry.",
3042
+ "querySchema": {},
3043
+ "headersSchema": {},
3044
+ "bodySchema": {},
3045
+ "jsonResponseSchema": {
3046
+ "anyvaliVersion": "1.0",
3047
+ "schemaVersion": "1.1",
3048
+ "root": {
3049
+ "kind": "object",
3050
+ "properties": {
3051
+ "title": {
3052
+ "kind": "string",
3053
+ "minLength": 1
3054
+ },
3055
+ "previewPath": {
3056
+ "kind": "string",
3057
+ "minLength": 1
3058
+ },
3059
+ "deploymentApiBase": {
3060
+ "kind": "string",
3061
+ "minLength": 1
3062
+ },
3063
+ "configTicketUrl": {
3064
+ "kind": "string",
3065
+ "minLength": 1
3066
+ },
3067
+ "sourceTenants": {
3068
+ "kind": "array",
3069
+ "items": {
3070
+ "kind": "object",
3071
+ "properties": {
3072
+ "id": {
3073
+ "kind": "string",
3074
+ "minLength": 1
3075
+ },
3076
+ "title": {
3077
+ "kind": "string",
3078
+ "minLength": 1
3079
+ }
3080
+ },
3081
+ "required": [
3082
+ "id",
3083
+ "title"
3084
+ ],
3085
+ "unknownKeys": "strip"
3086
+ }
3087
+ },
3088
+ "sourceApps": {
3089
+ "kind": "array",
3090
+ "items": {
3091
+ "kind": "object",
3092
+ "properties": {
3093
+ "id": {
3094
+ "kind": "string",
3095
+ "minLength": 1
3096
+ },
3097
+ "tenantId": {
3098
+ "kind": "string",
3099
+ "minLength": 1
3100
+ },
3101
+ "title": {
3102
+ "kind": "string",
3103
+ "minLength": 1
3104
+ }
3105
+ },
3106
+ "required": [
3107
+ "id",
3108
+ "tenantId",
3109
+ "title"
3110
+ ],
3111
+ "unknownKeys": "strip"
3112
+ }
3113
+ },
3114
+ "groups": {
3115
+ "kind": "array",
3116
+ "items": {
3117
+ "kind": "object",
3118
+ "properties": {
3119
+ "id": {
3120
+ "kind": "string",
3121
+ "minLength": 1
3122
+ },
3123
+ "name": {
3124
+ "kind": "string",
3125
+ "minLength": 1
3126
+ },
3127
+ "sourceTenantId": {
3128
+ "kind": "string",
3129
+ "minLength": 1
3130
+ },
3131
+ "sourceAppId": {
3132
+ "kind": "string",
3133
+ "minLength": 1
3134
+ },
3135
+ "sourceLabel": {
3136
+ "kind": "string",
3137
+ "minLength": 1
3138
+ },
3139
+ "expiresInDays": {
3140
+ "kind": "optional",
3141
+ "inner": {
3142
+ "kind": "int",
3143
+ "min": 1
3144
+ }
3145
+ },
3146
+ "oidc": {
3147
+ "kind": "optional",
3148
+ "inner": {
3149
+ "kind": "object",
3150
+ "properties": {
3151
+ "issuer": {
3152
+ "kind": "string",
3153
+ "minLength": 1
3154
+ },
3155
+ "audience": {
3156
+ "kind": "string",
3157
+ "minLength": 1
3158
+ },
3159
+ "jwksUri": {
3160
+ "kind": "string",
3161
+ "minLength": 1
3162
+ },
3163
+ "subjectPrefix": {
3164
+ "kind": "optional",
3165
+ "inner": {
3166
+ "kind": "string"
3167
+ }
3168
+ },
3169
+ "requiredClaimsJson": {
3170
+ "kind": "string"
3171
+ }
3172
+ },
3173
+ "required": [
3174
+ "issuer",
3175
+ "audience",
3176
+ "jwksUri",
3177
+ "requiredClaimsJson"
3178
+ ],
3179
+ "unknownKeys": "strip"
3180
+ }
3181
+ },
3182
+ "services": {
3183
+ "kind": "array",
3184
+ "items": {
3185
+ "kind": "object",
3186
+ "properties": {
3187
+ "serviceId": {
3188
+ "kind": "string",
3189
+ "minLength": 1
3190
+ },
3191
+ "title": {
3192
+ "kind": "string",
3193
+ "minLength": 1
3194
+ },
3195
+ "fields": {
3196
+ "kind": "array",
3197
+ "items": {
3198
+ "kind": "object",
3199
+ "properties": {
3200
+ "key": {
3201
+ "kind": "string",
3202
+ "minLength": 1
3203
+ },
3204
+ "title": {
3205
+ "kind": "string",
3206
+ "minLength": 1
3207
+ },
3208
+ "description": {
3209
+ "kind": "string"
3210
+ },
3211
+ "scope": {
3212
+ "kind": "enum",
3213
+ "values": [
3214
+ "tenant",
3215
+ "app"
3216
+ ]
3217
+ },
3218
+ "secret": {
3219
+ "kind": "bool"
3220
+ },
3221
+ "required": {
3222
+ "kind": "bool"
3223
+ },
3224
+ "defaultValue": {
3225
+ "kind": "optional",
3226
+ "inner": {
3227
+ "kind": "ref",
3228
+ "ref": "#/definitions/BetterPortalJsonValue"
3229
+ }
3230
+ },
3231
+ "control": {
3232
+ "kind": "optional",
3233
+ "inner": {
3234
+ "kind": "string"
3235
+ }
3236
+ },
3237
+ "options": {
3238
+ "kind": "array",
3239
+ "items": {
3240
+ "kind": "object",
3241
+ "properties": {
3242
+ "value": {
3243
+ "kind": "string"
3244
+ },
3245
+ "label": {
3246
+ "kind": "string"
3247
+ }
3248
+ },
3249
+ "required": [
3250
+ "value",
3251
+ "label"
3252
+ ],
3253
+ "unknownKeys": "strip"
3254
+ },
3255
+ "default": []
3256
+ }
3257
+ },
3258
+ "required": [
3259
+ "key",
3260
+ "title",
3261
+ "description",
3262
+ "scope",
3263
+ "secret",
3264
+ "required",
3265
+ "options"
3266
+ ],
3267
+ "unknownKeys": "strip"
3268
+ },
3269
+ "default": []
3270
+ },
3271
+ "source": {
3272
+ "kind": "optional",
3273
+ "inner": {
3274
+ "kind": "object",
3275
+ "properties": {
3276
+ "instanceId": {
3277
+ "kind": "string",
3278
+ "minLength": 1
3279
+ },
3280
+ "hostname": {
3281
+ "kind": "string",
3282
+ "minLength": 1
3283
+ }
3284
+ },
3285
+ "required": [
3286
+ "instanceId",
3287
+ "hostname"
3288
+ ],
3289
+ "unknownKeys": "strip"
3290
+ }
3291
+ },
3292
+ "encryptedTenantConfig": {
3293
+ "kind": "string"
3294
+ },
3295
+ "encryptedAppConfig": {
3296
+ "kind": "string"
3297
+ }
3298
+ },
3299
+ "required": [
3300
+ "serviceId",
3301
+ "title",
3302
+ "fields",
3303
+ "encryptedTenantConfig",
3304
+ "encryptedAppConfig"
3305
+ ],
3306
+ "unknownKeys": "strip"
3307
+ }
3308
+ },
3309
+ "deployments": {
3310
+ "kind": "array",
3311
+ "items": {
3312
+ "kind": "object",
3313
+ "properties": {
3314
+ "id": {
3315
+ "kind": "string",
3316
+ "minLength": 1
3317
+ },
3318
+ "groupId": {
3319
+ "kind": "string",
3320
+ "minLength": 1
3321
+ },
3322
+ "key": {
3323
+ "kind": "string",
3324
+ "minLength": 1
3325
+ },
3326
+ "name": {
3327
+ "kind": "string",
3328
+ "minLength": 1
3329
+ },
3330
+ "hostname": {
3331
+ "kind": "string",
3332
+ "minLength": 1
3333
+ },
3334
+ "expiresInDays": {
3335
+ "kind": "optional",
3336
+ "inner": {
3337
+ "kind": "int",
3338
+ "min": 1
3339
+ }
3340
+ },
3341
+ "expiresAt": {
3342
+ "kind": "optional",
3343
+ "inner": {
3344
+ "kind": "string"
3345
+ }
3346
+ },
3347
+ "createdAt": {
3348
+ "kind": "string",
3349
+ "minLength": 1
3350
+ },
3351
+ "updatedAt": {
3352
+ "kind": "string",
3353
+ "minLength": 1
3354
+ },
3355
+ "ready": {
3356
+ "kind": "bool"
3357
+ },
3358
+ "services": {
3359
+ "kind": "array",
3360
+ "items": {
3361
+ "kind": "object",
3362
+ "properties": {
3363
+ "serviceId": {
3364
+ "kind": "string",
3365
+ "minLength": 1
3366
+ },
3367
+ "instanceId": {
3368
+ "kind": "string",
3369
+ "minLength": 1
3370
+ },
3371
+ "url": {
3372
+ "kind": "string",
3373
+ "minLength": 1
3374
+ },
3375
+ "lastSyncAt": {
3376
+ "kind": "optional",
3377
+ "inner": {
3378
+ "kind": "string"
3379
+ }
3380
+ },
3381
+ "ready": {
3382
+ "kind": "bool"
3383
+ }
3384
+ },
3385
+ "required": [
3386
+ "serviceId",
3387
+ "instanceId",
3388
+ "url",
3389
+ "ready"
3390
+ ],
3391
+ "unknownKeys": "strip"
3392
+ }
3393
+ }
3394
+ },
3395
+ "required": [
3396
+ "id",
3397
+ "groupId",
3398
+ "key",
3399
+ "name",
3400
+ "hostname",
3401
+ "createdAt",
3402
+ "updatedAt",
3403
+ "ready",
3404
+ "services"
3405
+ ],
3406
+ "unknownKeys": "strip"
3407
+ }
3408
+ },
3409
+ "createdAt": {
3410
+ "kind": "string",
3411
+ "minLength": 1
3412
+ },
3413
+ "updatedAt": {
3414
+ "kind": "string",
3415
+ "minLength": 1
3416
+ }
3417
+ },
3418
+ "required": [
3419
+ "id",
3420
+ "name",
3421
+ "sourceTenantId",
3422
+ "sourceAppId",
3423
+ "sourceLabel",
3424
+ "services",
3425
+ "deployments",
3426
+ "createdAt",
3427
+ "updatedAt"
3428
+ ],
3429
+ "unknownKeys": "strip"
3430
+ }
3431
+ },
3432
+ "notice": {
3433
+ "kind": "optional",
3434
+ "inner": {
3435
+ "kind": "string"
3436
+ }
3437
+ },
3438
+ "error": {
3439
+ "kind": "optional",
3440
+ "inner": {
3441
+ "kind": "string"
3442
+ }
3443
+ },
3444
+ "issuedApiKey": {
3445
+ "kind": "optional",
3446
+ "inner": {
3447
+ "kind": "string"
3448
+ }
3449
+ },
3450
+ "issuedCredentials": {
3451
+ "kind": "array",
3452
+ "items": {
3453
+ "kind": "object",
3454
+ "properties": {
3455
+ "serviceId": {
3456
+ "kind": "string",
3457
+ "minLength": 1
3458
+ },
3459
+ "instanceId": {
3460
+ "kind": "string",
3461
+ "minLength": 1
3462
+ },
3463
+ "url": {
3464
+ "kind": "string",
3465
+ "minLength": 1
3466
+ },
3467
+ "controlPlaneUrl": {
3468
+ "kind": "string",
3469
+ "minLength": 1
3470
+ },
3471
+ "apiKey": {
3472
+ "kind": "string",
3473
+ "minLength": 1
3474
+ }
3475
+ },
3476
+ "required": [
3477
+ "serviceId",
3478
+ "instanceId",
3479
+ "url",
3480
+ "controlPlaneUrl",
3481
+ "apiKey"
3482
+ ],
3483
+ "unknownKeys": "strip"
3484
+ },
3485
+ "default": []
3486
+ }
3487
+ },
3488
+ "required": [
3489
+ "title",
3490
+ "previewPath",
3491
+ "deploymentApiBase",
3492
+ "configTicketUrl",
3493
+ "sourceTenants",
3494
+ "sourceApps",
3495
+ "groups",
3496
+ "issuedCredentials"
3497
+ ],
3498
+ "unknownKeys": "strip"
3499
+ },
3500
+ "definitions": {
3501
+ "BetterPortalJsonValue": {
3502
+ "kind": "union",
3503
+ "variants": [
3504
+ {
3505
+ "kind": "null"
3506
+ },
3507
+ {
3508
+ "kind": "bool"
3509
+ },
3510
+ {
3511
+ "kind": "string"
3512
+ },
3513
+ {
3514
+ "kind": "number"
3515
+ },
3516
+ {
3517
+ "kind": "array",
3518
+ "items": {
3519
+ "kind": "ref",
3520
+ "ref": "#/definitions/BetterPortalJsonValue"
3521
+ }
3522
+ },
3523
+ {
3524
+ "kind": "record",
3525
+ "valueSchema": {
3526
+ "kind": "ref",
3527
+ "ref": "#/definitions/BetterPortalJsonValue"
3528
+ }
3529
+ }
3530
+ ]
3531
+ }
3532
+ },
3533
+ "extensions": {}
3534
+ },
3535
+ "metadataResponseSchema": {},
3536
+ "renderable": true,
3537
+ "html": {
3538
+ "renderers": {
3539
+ "bootstrap5": {
3540
+ "defaultRenderer": "default",
3541
+ "renderModes": [
3542
+ "page"
3543
+ ],
3544
+ "slots": [
3545
+ "main"
3546
+ ],
3547
+ "renderers": [
3548
+ {
3549
+ "id": "default",
3550
+ "title": "Default Content",
3551
+ "slotId": "main",
3552
+ "renderModes": [
3553
+ "page",
3554
+ "fragment"
3555
+ ]
3556
+ }
3557
+ ]
3558
+ }
3559
+ }
3560
+ },
3561
+ "auth": {
3562
+ "required": true,
3563
+ "callers": [
3564
+ "user"
3565
+ ],
3566
+ "permissions": [
3567
+ {
3568
+ "serviceId": "org.betterportal.config-manager",
3569
+ "viewId": "preview-environments.index",
3570
+ "permissions": [
3571
+ "update"
3572
+ ]
3573
+ }
3574
+ ]
3575
+ },
3576
+ "sitemap": {
3577
+ "kind": "default"
3578
+ },
3579
+ "robots": [],
3580
+ "dependencies": [],
3581
+ "apiContracts": [],
3582
+ "demoScenarios": [
3583
+ {
3584
+ "id": "default",
3585
+ "title": "Default",
3586
+ "response": {
3587
+ "title": "Preview Environments",
3588
+ "previewPath": "/preview-environments",
3589
+ "deploymentApiBase": "/api/preview-groups",
3590
+ "configTicketUrl": "/.well-known/bp/admin/config-ticket",
3591
+ "sourceTenants": [],
3592
+ "sourceApps": [],
3593
+ "groups": [],
3594
+ "issuedCredentials": []
3595
+ }
3596
+ }
3597
+ ],
3598
+ "cacheHints": {
3599
+ "ttlSeconds": 0,
3600
+ "varyBy": [
3601
+ "accept",
3602
+ "origin"
3603
+ ]
3604
+ }
3605
+ }
3606
+ ]
3607
+ },
1309
3608
  {
1310
3609
  "viewId": "routes.index",
1311
3610
  "title": "Route Designer",
@@ -4735,6 +7034,36 @@
4735
7034
  "fragments": [],
4736
7035
  "components": []
4737
7036
  },
7037
+ {
7038
+ "viewId": "preview-environments.index",
7039
+ "path": "/preview-environments",
7040
+ "pathVariants": [],
7041
+ "operations": [
7042
+ {
7043
+ "operationId": "admin.preview-environments.delete",
7044
+ "method": "DELETE"
7045
+ },
7046
+ {
7047
+ "operationId": "admin.preview-environments.view",
7048
+ "method": "GET"
7049
+ },
7050
+ {
7051
+ "operationId": "admin.preview-environments.create",
7052
+ "method": "POST"
7053
+ },
7054
+ {
7055
+ "operationId": "admin.preview-environments.update",
7056
+ "method": "PUT"
7057
+ }
7058
+ ],
7059
+ "paramNames": [],
7060
+ "renderers": [
7061
+ "bootstrap5"
7062
+ ],
7063
+ "hasFragments": false,
7064
+ "fragments": [],
7065
+ "components": []
7066
+ },
4738
7067
  {
4739
7068
  "viewId": "routes.index",
4740
7069
  "path": "/routes",