@rathnasgala2/schemas 2.22.0 → 3.1.0

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 (118) hide show
  1. package/README.md +39 -42
  2. package/THIRD_PARTY_LICENSES.json +3 -3
  3. package/diagnostics/diagnostic-map.json +2701 -1449
  4. package/docs/catalogs/app-components.json +435 -1
  5. package/docs/catalogs/app-routes.json +152 -2
  6. package/docs/catalogs/schema-inventory.json +17 -7
  7. package/examples/valid/artifact-manifest/rules.json +2 -2
  8. package/examples/valid/build-input/rules.json +391 -1
  9. package/examples/valid/build-provenance/rules.json +2 -2
  10. package/examples/valid/interactions-config/canonical.json +18 -0
  11. package/examples/valid/interactions-config/rules.json +529 -0
  12. package/examples/valid/publication/rules.json +48 -0
  13. package/examples/valid/theme-contract/canonical.json +355 -19
  14. package/examples/valid/theme-contract/default-3.0.json +660 -0
  15. package/examples/valid/theme-contract/rules.json +3456 -552
  16. package/fixtures/boundary/artifact-manifest/rules.json +2 -2
  17. package/fixtures/boundary/build-input/rules.json +463 -9
  18. package/fixtures/boundary/build-provenance/rules.json +2 -2
  19. package/fixtures/boundary/interactions-config/root.json +18 -0
  20. package/fixtures/boundary/interactions-config/rules.json +725 -0
  21. package/fixtures/boundary/publication/rules.json +53 -0
  22. package/fixtures/boundary/theme-contract/root.json +355 -19
  23. package/fixtures/boundary/theme-contract/rules.json +4158 -1226
  24. package/fixtures/invalid/artifact-manifest/SCHEMA_CONSTANT_INVALID/cases.json +0 -11
  25. package/fixtures/invalid/artifact-manifest/SCHEMA_TYPE_INVALID/cases.json +11 -0
  26. package/fixtures/invalid/build-input/GRAPHEME_LENGTH_INVALID/cases.json +22 -0
  27. package/fixtures/invalid/build-input/HTTPS_URL_INVALID/cases.json +29 -0
  28. package/fixtures/invalid/build-input/REQUEST_FIELD_UNKNOWN/cases.json +168 -0
  29. package/fixtures/invalid/build-input/SCHEMA_ARRAY_TOO_LONG/cases.json +15 -0
  30. package/fixtures/invalid/build-input/SCHEMA_CONSTANT_INVALID/cases.json +20 -0
  31. package/fixtures/invalid/build-input/SCHEMA_ENUM_INVALID/cases.json +22 -0
  32. package/fixtures/invalid/build-input/SCHEMA_NEGATED_RULE_MATCHED/cases.json +9 -0
  33. package/fixtures/invalid/build-input/SCHEMA_NUMBER_TOO_LARGE/cases.json +22 -0
  34. package/fixtures/invalid/build-input/SCHEMA_NUMBER_TOO_SMALL/cases.json +22 -0
  35. package/fixtures/invalid/build-input/SCHEMA_OBJECT_TOO_LARGE/cases.json +0 -15
  36. package/fixtures/invalid/build-input/SCHEMA_PATTERN_INVALID/cases.json +9 -0
  37. package/fixtures/invalid/build-input/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +429 -0
  38. package/fixtures/invalid/build-input/SCHEMA_TYPE_INVALID/cases.json +212 -0
  39. package/fixtures/invalid/build-input/SCHEMA_VERSION_UNSUPPORTED/cases.json +22 -0
  40. package/fixtures/invalid/build-provenance/SCHEMA_CONSTANT_INVALID/cases.json +0 -11
  41. package/fixtures/invalid/build-provenance/SCHEMA_TYPE_INVALID/cases.json +11 -0
  42. package/fixtures/invalid/interactions-config/BCP47_INVALID/cases.json +58 -0
  43. package/fixtures/invalid/interactions-config/CANONICAL_ROUTE_INVALID/cases.json +38 -0
  44. package/fixtures/invalid/interactions-config/DIGEST_INVALID/cases.json +20 -0
  45. package/fixtures/invalid/interactions-config/EXTENSION_KEY_INVALID/cases.json +20 -0
  46. package/fixtures/invalid/interactions-config/GIT_OBJECT_ID_INVALID/cases.json +20 -0
  47. package/fixtures/invalid/interactions-config/GRAPHEME_LENGTH_INVALID/cases.json +13 -0
  48. package/fixtures/invalid/interactions-config/HTTPS_URL_INVALID/cases.json +29 -0
  49. package/fixtures/invalid/interactions-config/ISO_COUNTRY_INVALID/cases.json +20 -0
  50. package/fixtures/invalid/interactions-config/PACKAGE_EXACT_INVALID/cases.json +38 -0
  51. package/fixtures/invalid/interactions-config/PACKAGE_RANGE_INVALID/cases.json +38 -0
  52. package/fixtures/invalid/interactions-config/PASSIVE_VISUAL_TOKEN_INVALID/cases.json +11 -0
  53. package/fixtures/invalid/interactions-config/PLAIN_LABEL_INVALID/cases.json +31 -0
  54. package/fixtures/invalid/interactions-config/PLAIN_TEXT_INVALID/cases.json +20 -0
  55. package/fixtures/invalid/interactions-config/REPOSITORY_GLOB_INVALID/cases.json +49 -0
  56. package/fixtures/invalid/interactions-config/REPOSITORY_PATH_INVALID/cases.json +62 -0
  57. package/fixtures/invalid/interactions-config/REQUEST_FIELD_UNKNOWN/cases.json +108 -0
  58. package/fixtures/invalid/interactions-config/RFC3339_INVALID/cases.json +29 -0
  59. package/fixtures/invalid/interactions-config/SCHEMA_ARRAY_TOO_LONG/cases.json +17 -0
  60. package/fixtures/invalid/interactions-config/SCHEMA_CONSTANT_INVALID/cases.json +22 -0
  61. package/fixtures/invalid/interactions-config/SCHEMA_ENUM_INVALID/cases.json +13 -0
  62. package/fixtures/invalid/interactions-config/SCHEMA_NEGATED_RULE_MATCHED/cases.json +11 -0
  63. package/fixtures/invalid/interactions-config/SCHEMA_NUMBER_TOO_LARGE/cases.json +24 -0
  64. package/fixtures/invalid/interactions-config/SCHEMA_NUMBER_TOO_SMALL/cases.json +24 -0
  65. package/fixtures/invalid/interactions-config/SCHEMA_PATTERN_INVALID/cases.json +11 -0
  66. package/fixtures/invalid/interactions-config/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +305 -0
  67. package/fixtures/invalid/interactions-config/SCHEMA_TYPE_INVALID/cases.json +175 -0
  68. package/fixtures/invalid/interactions-config/SCHEMA_VERSION_UNSUPPORTED/cases.json +20 -0
  69. package/fixtures/invalid/interactions-config/SEMVER_INVALID/cases.json +20 -0
  70. package/fixtures/invalid/interactions-config/SEMVER_RANGE_INVALID/cases.json +38 -0
  71. package/fixtures/invalid/interactions-config/SLUG_INVALID/cases.json +38 -0
  72. package/fixtures/invalid/interactions-config/STABLE_ID_INVALID/cases.json +20 -0
  73. package/fixtures/invalid/interactions-config/URN_INVALID/cases.json +38 -0
  74. package/fixtures/invalid/publication/GRAPHEME_LENGTH_INVALID/cases.json +11 -0
  75. package/fixtures/invalid/publication/REQUEST_FIELD_UNKNOWN/cases.json +23 -0
  76. package/fixtures/invalid/publication/SCHEMA_ENUM_INVALID/cases.json +9 -0
  77. package/fixtures/invalid/publication/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +42 -0
  78. package/fixtures/invalid/publication/SCHEMA_TYPE_INVALID/cases.json +18 -0
  79. package/fixtures/invalid/theme-contract/REQUEST_FIELD_UNKNOWN/cases.json +421 -20
  80. package/fixtures/invalid/theme-contract/SCHEMA_ARRAY_TOO_LONG/cases.json +2 -2
  81. package/fixtures/invalid/theme-contract/SCHEMA_ARRAY_TOO_SHORT/cases.json +1 -1
  82. package/fixtures/invalid/theme-contract/SCHEMA_CONSTANT_INVALID/cases.json +2155 -296
  83. package/fixtures/invalid/theme-contract/SCHEMA_ENUM_INVALID/cases.json +229 -9
  84. package/fixtures/invalid/theme-contract/SCHEMA_PATTERN_INVALID/cases.json +176 -0
  85. package/fixtures/invalid/theme-contract/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +8812 -1517
  86. package/fixtures/invalid/theme-contract/SCHEMA_STRING_TOO_LONG/cases.json +22 -0
  87. package/fixtures/manifest.json +21925 -12282
  88. package/fixtures/s2/empty-modules-placements.json +233 -3
  89. package/fixtures/s2/manifest.json +2 -1
  90. package/fixtures/s2/theme-contracts-digest-cycle.json +888 -36
  91. package/fixtures/unknown-field/artifact-manifest/rules.json +1 -1
  92. package/fixtures/unknown-field/build-input/rules.json +233 -1
  93. package/fixtures/unknown-field/build-provenance/rules.json +1 -1
  94. package/fixtures/unknown-field/interactions-config/root.json +19 -0
  95. package/fixtures/unknown-field/interactions-config/rules.json +227 -0
  96. package/fixtures/unknown-field/publication/rules.json +35 -0
  97. package/fixtures/unknown-field/theme-contract/root.json +355 -19
  98. package/fixtures/unknown-field/theme-contract/rules.json +637 -22
  99. package/generated/browser/validator-core.mjs +4 -3
  100. package/generated/typescript/contracts/artifact-manifest.d.ts +1 -1
  101. package/generated/typescript/contracts/build-input.d.ts +66 -1
  102. package/generated/typescript/contracts/build-provenance.d.ts +1 -1
  103. package/generated/typescript/contracts/interactions-config.d.ts +91 -0
  104. package/generated/typescript/contracts/publication.d.ts +12 -0
  105. package/generated/typescript/contracts/theme-contract.d.ts +529 -9
  106. package/generated/typescript/index.d.ts +4 -0
  107. package/generated/typescript/index.js +14 -0
  108. package/openapi/http-catalog.json +230 -2
  109. package/openapi/openapi.yaml +5941 -1509
  110. package/package.json +2 -1
  111. package/sbom.cdx.json +23 -23
  112. package/schemas/artifact-manifest.schema.json +1 -1
  113. package/schemas/build-input.schema.json +136 -2
  114. package/schemas/build-provenance.schema.json +1 -1
  115. package/schemas/interactions-config.schema.json +222 -0
  116. package/schemas/publication.schema.json +21 -0
  117. package/schemas/theme-contract.schema.json +1178 -83
  118. package/src/internal/schema-validator.js +3 -0
@@ -15,6 +15,7 @@ const SCHEMA_IDS = [
15
15
  'urn:gala:schema:deployment-observation:2.0.0',
16
16
  'urn:gala:schema:deployment-receipt:2.0.0',
17
17
  'urn:gala:schema:event-envelope:2.0.0',
18
+ 'urn:gala:schema:interactions-config:2.0.0',
18
19
  'urn:gala:schema:lock:2.0.0',
19
20
  'urn:gala:schema:navigation:2.0.0',
20
21
  'urn:gala:schema:problem:2.0.0',
@@ -189,6 +190,19 @@ export function isEventEnvelopeDocument(value) {
189
190
  ).valid;
190
191
  }
191
192
 
193
+ /**
194
+ * Test whether a value is a valid InteractionsConfigDocument.
195
+ *
196
+ * @param {unknown} value candidate document
197
+ * @returns {boolean} validation result
198
+ */
199
+ export function isInteractionsConfigDocument(value) {
200
+ return validateGeneratedDocument(
201
+ 'urn:gala:schema:interactions-config:2.0.0',
202
+ value,
203
+ ).valid;
204
+ }
205
+
192
206
  /**
193
207
  * Test whether a value is a valid LockDocument.
194
208
  *
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "2.0.0",
3
3
  "sourceDesignRevision": "a53052955ceb6c1aa10c886289dc832eedfe6de0a00004df07d353ac19c4403a",
4
- "openApiDigest": "sha256:f3d0acf21a5fe89857d94dfa3067bbb59486a3e3a7f263cdd261695238303290",
4
+ "openApiDigest": "sha256:b926672f6094bd397d63ae05f96eff46a47109e12aeca1761bdb3ee7c3957e5e",
5
5
  "operations": [
6
6
  {
7
7
  "operationId": "getInternalHealth",
@@ -634,6 +634,66 @@
634
634
  "actionGrant": "none",
635
635
  "sourceFragment": "organizations"
636
636
  },
637
+ {
638
+ "operationId": "getOrganizationsByOrganizationIdPublicationsByPublicationIdInteractionAggregates",
639
+ "method": "GET",
640
+ "path": "/v2/organizations/{organizationId}/publications/{publicationId}/interaction-aggregates",
641
+ "purpose": "read exact reaction and comment totals per article",
642
+ "capabilityKey": "publication.view",
643
+ "conditionalCapabilityKeys": [],
644
+ "activationGate": "MVP",
645
+ "assuranceClass": "SESSION",
646
+ "actionGrant": "none",
647
+ "sourceFragment": "moderation"
648
+ },
649
+ {
650
+ "operationId": "getOrganizationsByOrganizationIdPublicationsByPublicationIdInteractionSettings",
651
+ "method": "GET",
652
+ "path": "/v2/organizations/{organizationId}/publications/{publicationId}/interaction-settings",
653
+ "purpose": "read this publication's reader interaction settings at the main branch head",
654
+ "capabilityKey": "publication.view",
655
+ "conditionalCapabilityKeys": [],
656
+ "activationGate": "MVP",
657
+ "assuranceClass": "SESSION",
658
+ "actionGrant": "none",
659
+ "sourceFragment": "interaction-settings"
660
+ },
661
+ {
662
+ "operationId": "putOrganizationsByOrganizationIdPublicationsByPublicationIdInteractionSettings",
663
+ "method": "PUT",
664
+ "path": "/v2/organizations/{organizationId}/publications/{publicationId}/interaction-settings",
665
+ "purpose": "save this publication's reader interaction settings as a repository change",
666
+ "capabilityKey": "publication.source.write",
667
+ "conditionalCapabilityKeys": [],
668
+ "activationGate": "MVP",
669
+ "assuranceClass": "SESSION",
670
+ "actionGrant": "none",
671
+ "sourceFragment": "interaction-settings"
672
+ },
673
+ {
674
+ "operationId": "postOrganizationsByOrganizationIdPublicationsByPublicationIdModerationCommentsByCommentIdDecide",
675
+ "method": "POST",
676
+ "path": "/v2/organizations/{organizationId}/publications/{publicationId}/moderation/comments/{commentId}:decide",
677
+ "purpose": "record a moderation decision on one comment",
678
+ "capabilityKey": "publication.moderate",
679
+ "conditionalCapabilityKeys": [],
680
+ "activationGate": "MVP",
681
+ "assuranceClass": "SESSION",
682
+ "actionGrant": "none",
683
+ "sourceFragment": "moderation"
684
+ },
685
+ {
686
+ "operationId": "getOrganizationsByOrganizationIdPublicationsByPublicationIdModerationQueue",
687
+ "method": "GET",
688
+ "path": "/v2/organizations/{organizationId}/publications/{publicationId}/moderation/queue",
689
+ "purpose": "list comments awaiting or carrying a moderation outcome",
690
+ "capabilityKey": "publication.moderate",
691
+ "conditionalCapabilityKeys": [],
692
+ "activationGate": "MVP",
693
+ "assuranceClass": "SESSION",
694
+ "actionGrant": "none",
695
+ "sourceFragment": "moderation"
696
+ },
637
697
  {
638
698
  "operationId": "postOrganizationsByOrganizationIdPublicationsByPublicationIdPublishes",
639
699
  "method": "POST",
@@ -884,6 +944,150 @@
884
944
  "actionGrant": "none",
885
945
  "sourceFragment": "organizations"
886
946
  },
947
+ {
948
+ "operationId": "deletePublicCommentsByCommentId",
949
+ "method": "DELETE",
950
+ "path": "/v2/public/comments/{commentId}",
951
+ "purpose": "delete the reader's own comment",
952
+ "capabilityKey": null,
953
+ "conditionalCapabilityKeys": [],
954
+ "activationGate": "MVP",
955
+ "assuranceClass": "SESSION",
956
+ "actionGrant": "none",
957
+ "sourceFragment": "public-interactions"
958
+ },
959
+ {
960
+ "operationId": "postPublicCommentsByCommentIdReports",
961
+ "method": "POST",
962
+ "path": "/v2/public/comments/{commentId}/reports",
963
+ "purpose": "report a comment as the signed-in reader",
964
+ "capabilityKey": null,
965
+ "conditionalCapabilityKeys": [],
966
+ "activationGate": "MVP",
967
+ "assuranceClass": "SESSION",
968
+ "actionGrant": "none",
969
+ "sourceFragment": "public-interactions"
970
+ },
971
+ {
972
+ "operationId": "postPublicCommentsByCommentIdRevisions",
973
+ "method": "POST",
974
+ "path": "/v2/public/comments/{commentId}/revisions",
975
+ "purpose": "edit the reader's own comment inside the edit window",
976
+ "capabilityKey": null,
977
+ "conditionalCapabilityKeys": [],
978
+ "activationGate": "MVP",
979
+ "assuranceClass": "SESSION",
980
+ "actionGrant": "none",
981
+ "sourceFragment": "public-interactions"
982
+ },
983
+ {
984
+ "operationId": "getPublicPublicationsByPublicationId",
985
+ "method": "GET",
986
+ "path": "/v2/public/publications/{publicationId}",
987
+ "purpose": "read the public identity of a live publication",
988
+ "capabilityKey": null,
989
+ "conditionalCapabilityKeys": [],
990
+ "activationGate": "MVP",
991
+ "assuranceClass": "SESSION",
992
+ "actionGrant": "none",
993
+ "sourceFragment": "public-interactions"
994
+ },
995
+ {
996
+ "operationId": "getPublicPublicationsByPublicationIdContentsByContentIdComments",
997
+ "method": "GET",
998
+ "path": "/v2/public/publications/{publicationId}/contents/{contentId}/comments",
999
+ "purpose": "list the visible comments of one article",
1000
+ "capabilityKey": null,
1001
+ "conditionalCapabilityKeys": [],
1002
+ "activationGate": "MVP",
1003
+ "assuranceClass": "SESSION",
1004
+ "actionGrant": "none",
1005
+ "sourceFragment": "public-interactions"
1006
+ },
1007
+ {
1008
+ "operationId": "postPublicPublicationsByPublicationIdContentsByContentIdComments",
1009
+ "method": "POST",
1010
+ "path": "/v2/public/publications/{publicationId}/contents/{contentId}/comments",
1011
+ "purpose": "post a comment or a reply as the signed-in reader",
1012
+ "capabilityKey": null,
1013
+ "conditionalCapabilityKeys": [],
1014
+ "activationGate": "MVP",
1015
+ "assuranceClass": "SESSION",
1016
+ "actionGrant": "none",
1017
+ "sourceFragment": "public-interactions"
1018
+ },
1019
+ {
1020
+ "operationId": "getPublicPublicationsByPublicationIdContentsByContentIdInteractions",
1021
+ "method": "GET",
1022
+ "path": "/v2/public/publications/{publicationId}/contents/{contentId}/interactions",
1023
+ "purpose": "read the effective reader interactions and counts of one article",
1024
+ "capabilityKey": null,
1025
+ "conditionalCapabilityKeys": [],
1026
+ "activationGate": "MVP",
1027
+ "assuranceClass": "SESSION",
1028
+ "actionGrant": "none",
1029
+ "sourceFragment": "public-interactions"
1030
+ },
1031
+ {
1032
+ "operationId": "deletePublicPublicationsByPublicationIdContentsByContentIdReactionsByReactionKey",
1033
+ "method": "DELETE",
1034
+ "path": "/v2/public/publications/{publicationId}/contents/{contentId}/reactions/{reactionKey}",
1035
+ "purpose": "clear the signed-in reader's reaction on one article",
1036
+ "capabilityKey": null,
1037
+ "conditionalCapabilityKeys": [],
1038
+ "activationGate": "MVP",
1039
+ "assuranceClass": "SESSION",
1040
+ "actionGrant": "none",
1041
+ "sourceFragment": "public-interactions"
1042
+ },
1043
+ {
1044
+ "operationId": "putPublicPublicationsByPublicationIdContentsByContentIdReactionsByReactionKey",
1045
+ "method": "PUT",
1046
+ "path": "/v2/public/publications/{publicationId}/contents/{contentId}/reactions/{reactionKey}",
1047
+ "purpose": "set the signed-in reader's reaction on one article",
1048
+ "capabilityKey": null,
1049
+ "conditionalCapabilityKeys": [],
1050
+ "activationGate": "MVP",
1051
+ "assuranceClass": "SESSION",
1052
+ "actionGrant": "none",
1053
+ "sourceFragment": "public-interactions"
1054
+ },
1055
+ {
1056
+ "operationId": "postReaderAuthorizations",
1057
+ "method": "POST",
1058
+ "path": "/v2/reader/authorizations",
1059
+ "purpose": "authorize a visiting reader for one publication and return the redirect",
1060
+ "capabilityKey": null,
1061
+ "conditionalCapabilityKeys": [],
1062
+ "activationGate": "MVP",
1063
+ "assuranceClass": "SESSION",
1064
+ "actionGrant": "none",
1065
+ "sourceFragment": "reader"
1066
+ },
1067
+ {
1068
+ "operationId": "postReaderTokens",
1069
+ "method": "POST",
1070
+ "path": "/v2/reader/tokens",
1071
+ "purpose": "exchange a one-time authorization code for a publication-scoped reader token",
1072
+ "capabilityKey": null,
1073
+ "conditionalCapabilityKeys": [],
1074
+ "activationGate": "MVP",
1075
+ "assuranceClass": "SESSION",
1076
+ "actionGrant": "none",
1077
+ "sourceFragment": "reader"
1078
+ },
1079
+ {
1080
+ "operationId": "deleteReaderTokensCurrent",
1081
+ "method": "DELETE",
1082
+ "path": "/v2/reader/tokens/current",
1083
+ "purpose": "revoke the reader token that made the request",
1084
+ "capabilityKey": null,
1085
+ "conditionalCapabilityKeys": [],
1086
+ "activationGate": "MVP",
1087
+ "assuranceClass": "SESSION",
1088
+ "actionGrant": "none",
1089
+ "sourceFragment": "reader"
1090
+ },
887
1091
  {
888
1092
  "operationId": "getSelfAuthenticators",
889
1093
  "method": "GET",
@@ -1016,6 +1220,30 @@
1016
1220
  "actionGrant": "none",
1017
1221
  "sourceFragment": "self"
1018
1222
  },
1223
+ {
1224
+ "operationId": "getSelfReaderConnections",
1225
+ "method": "GET",
1226
+ "path": "/v2/self/reader-connections",
1227
+ "purpose": "list the publications this person is connected to as a reader",
1228
+ "capabilityKey": null,
1229
+ "conditionalCapabilityKeys": [],
1230
+ "activationGate": "MVP",
1231
+ "assuranceClass": "SESSION",
1232
+ "actionGrant": "none",
1233
+ "sourceFragment": "self"
1234
+ },
1235
+ {
1236
+ "operationId": "deleteSelfReaderConnectionsByPublicationId",
1237
+ "method": "DELETE",
1238
+ "path": "/v2/self/reader-connections/{publicationId}",
1239
+ "purpose": "revoke every reader token this person holds for one publication",
1240
+ "capabilityKey": null,
1241
+ "conditionalCapabilityKeys": [],
1242
+ "activationGate": "MVP",
1243
+ "assuranceClass": "SESSION",
1244
+ "actionGrant": "none",
1245
+ "sourceFragment": "self"
1246
+ },
1019
1247
  {
1020
1248
  "operationId": "postSelfRecoveryCodeSets",
1021
1249
  "method": "POST",
@@ -1113,5 +1341,5 @@
1113
1341
  "sourceFragment": "workloads"
1114
1342
  }
1115
1343
  ],
1116
- "digest": "sha256:60cc9daaec10eda1f7fdfa827b76a337be99ab1b8498b0205dfc0a10a683b87c"
1344
+ "digest": "sha256:ea81649bfded3f08fa1b7cbe4de25d76c2becfc5899daa2e807b7d8a4870fa25"
1117
1345
  }