@verii/server-credentialagent 1.0.0-pre.1752076816

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 (395) hide show
  1. package/.localdev.e2e.env +40 -0
  2. package/.localdev.env +41 -0
  3. package/.standalone.env +5 -0
  4. package/LICENSE +202 -0
  5. package/NOTICE +1 -0
  6. package/README.md +19 -0
  7. package/docker/compose.yml +33 -0
  8. package/e2e/README.md +12 -0
  9. package/e2e/org-registration-and-issuing.e2e.test.js +624 -0
  10. package/jest.config.js +20 -0
  11. package/migrate-mongo.config.js +36 -0
  12. package/migrations/20210317133137-add-index-to-offers-repo.js +57 -0
  13. package/migrations/20210416145639-add-index-to-revocation-list.js +27 -0
  14. package/migrations/20210719120225-add_unique_did_index_to_tenant.js +45 -0
  15. package/migrations/20230524053029-add-vendorUserIdMappings-index.js +32 -0
  16. package/migrations/20230616111907-add-configuration-type-index.js +32 -0
  17. package/package.json +108 -0
  18. package/src/assets/public/favicon.ico +0 -0
  19. package/src/assets/public/logo192.png +0 -0
  20. package/src/assets/public/logo512.png +0 -0
  21. package/src/assets/public/manifest.json +28 -0
  22. package/src/assets/templates/app-redirect.hbs +16 -0
  23. package/src/config/config.js +44 -0
  24. package/src/config/core-config.js +143 -0
  25. package/src/config/holder-config.js +104 -0
  26. package/src/config/index.js +22 -0
  27. package/src/config/operator-config.js +64 -0
  28. package/src/controllers/autoload-holder-api-controllers.js +30 -0
  29. package/src/controllers/autoload-operator-api-controllers.js +31 -0
  30. package/src/controllers/autoload-root-api-controller.js +30 -0
  31. package/src/controllers/autoload-saasoperator-api-controllers.js +31 -0
  32. package/src/controllers/holder/autohooks.js +55 -0
  33. package/src/controllers/holder/get-exchange-progress/autohooks.js +27 -0
  34. package/src/controllers/holder/get-exchange-progress/controller.js +50 -0
  35. package/src/controllers/holder/inspect/autohooks.js +35 -0
  36. package/src/controllers/holder/inspect/get-presentation-request/controller.js +100 -0
  37. package/src/controllers/holder/inspect/schemas/holder-disclosure.schema.json +73 -0
  38. package/src/controllers/holder/inspect/schemas/index.js +33 -0
  39. package/src/controllers/holder/inspect/schemas/presentation-definition.v1.schema.json +461 -0
  40. package/src/controllers/holder/inspect/schemas/presentation-request.schema.json +279 -0
  41. package/src/controllers/holder/inspect/schemas/presentation-submission.schema.json +41 -0
  42. package/src/controllers/holder/inspect/schemas/siop-presentation-submission.schema.json +74 -0
  43. package/src/controllers/holder/inspect/schemas/velocity-presentation-submission.response.200.schema.json +36 -0
  44. package/src/controllers/holder/inspect/schemas/velocity-presentation-submission.schema.json +34 -0
  45. package/src/controllers/holder/inspect/submit-presentation/controller.js +89 -0
  46. package/src/controllers/holder/issue/autohooks.js +23 -0
  47. package/src/controllers/holder/issue/get-credential-manifest/controller.js +193 -0
  48. package/src/controllers/holder/issue/offers/autohooks.js +35 -0
  49. package/src/controllers/holder/issue/offers/controller.js +164 -0
  50. package/src/controllers/holder/issue/offers/credential-offers/controller.js +460 -0
  51. package/src/controllers/holder/issue/submit-identification/autohooks.js +37 -0
  52. package/src/controllers/holder/issue/submit-identification/controller.js +63 -0
  53. package/src/controllers/holder/oauth/autohooks.js +19 -0
  54. package/src/controllers/holder/oauth/controller.js +140 -0
  55. package/src/controllers/index.js +22 -0
  56. package/src/controllers/operator/tenants/_tenantId/autohooks.js +40 -0
  57. package/src/controllers/operator/tenants/_tenantId/check-credentials/autohooks.js +24 -0
  58. package/src/controllers/operator/tenants/_tenantId/check-credentials/controller-v0.8.js +200 -0
  59. package/src/controllers/operator/tenants/_tenantId/check-credentials/schemas/index.js +19 -0
  60. package/src/controllers/operator/tenants/_tenantId/check-credentials/schemas/vendor-credential.schema.json +244 -0
  61. package/src/controllers/operator/tenants/_tenantId/controller-v0.8.js +221 -0
  62. package/src/controllers/operator/tenants/_tenantId/disclosures/_id/autohooks.js +30 -0
  63. package/src/controllers/operator/tenants/_tenantId/disclosures/_id/controller-v0.8.js +271 -0
  64. package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/autohooks.js +45 -0
  65. package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/controller-v0.8.js +199 -0
  66. package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/add-feed.schema.js +14 -0
  67. package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/feed.schema.json +27 -0
  68. package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/index.js +25 -0
  69. package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/modify-feed-update-body.schema.js +18 -0
  70. package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/modify-feed.schema.json +19 -0
  71. package/src/controllers/operator/tenants/_tenantId/disclosures/autohooks.js +34 -0
  72. package/src/controllers/operator/tenants/_tenantId/disclosures/controller-v0.8.js +100 -0
  73. package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/agent-disclosure-presentation-definition.schema.json +404 -0
  74. package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/agent-disclosure.schema.js +24 -0
  75. package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/index.js +29 -0
  76. package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/new-agent-disclosure.schema.json +166 -0
  77. package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/update-agent-disclosure.schema.js +20 -0
  78. package/src/controllers/operator/tenants/_tenantId/exchanges/_exchangeId/autohooks.js +30 -0
  79. package/src/controllers/operator/tenants/_tenantId/exchanges/_exchangeId/controller-v0.8.js +73 -0
  80. package/src/controllers/operator/tenants/_tenantId/exchanges/autohooks.js +19 -0
  81. package/src/controllers/operator/tenants/_tenantId/exchanges/controller-v0.8.js +150 -0
  82. package/src/controllers/operator/tenants/_tenantId/exchanges/schemas/get-exchange.response.body.json +147 -0
  83. package/src/controllers/operator/tenants/_tenantId/exchanges/schemas/index.js +21 -0
  84. package/src/controllers/operator/tenants/_tenantId/issued-credentials/autohooks.js +27 -0
  85. package/src/controllers/operator/tenants/_tenantId/issued-credentials/controller-v0.8.js +303 -0
  86. package/src/controllers/operator/tenants/_tenantId/issued-credentials/schemas/index.js +23 -0
  87. package/src/controllers/operator/tenants/_tenantId/issued-credentials/schemas/issued-credential.schema.json +115 -0
  88. package/src/controllers/operator/tenants/_tenantId/issued-credentials/schemas/revoke-credentials.schema.json +18 -0
  89. package/src/controllers/operator/tenants/_tenantId/keys/controller-v0.8.js +168 -0
  90. package/src/controllers/operator/tenants/_tenantId/offer-data/controller-v0.8.js +78 -0
  91. package/src/controllers/operator/tenants/_tenantId/offers/autohooks.js +34 -0
  92. package/src/controllers/operator/tenants/_tenantId/offers/controller-v0.8.js +253 -0
  93. package/src/controllers/operator/tenants/_tenantId/offers/schemas/index.js +23 -0
  94. package/src/controllers/operator/tenants/_tenantId/offers/schemas/new-vendor-offer.schema.js +47 -0
  95. package/src/controllers/operator/tenants/_tenantId/offers/schemas/vendor-offer.schema.json +56 -0
  96. package/src/controllers/operator/tenants/_tenantId/users/autohooks.js +24 -0
  97. package/src/controllers/operator/tenants/_tenantId/users/controller-v0.8.js +92 -0
  98. package/src/controllers/operator/tenants/_tenantId/users/schemas/index.js +23 -0
  99. package/src/controllers/operator/tenants/_tenantId/users/schemas/new-user.schema.json +13 -0
  100. package/src/controllers/operator/tenants/_tenantId/users/schemas/user.schema.json +16 -0
  101. package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/autohooks.js +34 -0
  102. package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/controller-v0.8.js +110 -0
  103. package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/Credential.schema.js +18 -0
  104. package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/IssueCredentialOptions.schema.json +42 -0
  105. package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/IssueCredentialRequest.schema.json +13 -0
  106. package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/IssueCredentialResponse.schema.json +19 -0
  107. package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/LinkedDataProof.schema.json +43 -0
  108. package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/VerifiableCredential.schema.js +16 -0
  109. package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/index.js +31 -0
  110. package/src/controllers/operator/tenants/autohooks.js +65 -0
  111. package/src/controllers/operator/tenants/controller-v0.8.js +167 -0
  112. package/src/controllers/operator/tenants/schemas/index.js +41 -0
  113. package/src/controllers/operator/tenants/schemas/modify-secret.schema.json +11 -0
  114. package/src/controllers/operator/tenants/schemas/modify-tenant-v0.8.schema.json +44 -0
  115. package/src/controllers/operator/tenants/schemas/new-tenant-v0.8.schema.json +19 -0
  116. package/src/controllers/operator/tenants/schemas/new-tenant.response.200.schema.json +7 -0
  117. package/src/controllers/operator/tenants/schemas/secret-key-metadata.schema.json +31 -0
  118. package/src/controllers/operator/tenants/schemas/secret-key.schema.json +29 -0
  119. package/src/controllers/operator/tenants/schemas/secret-kid.schema.json +13 -0
  120. package/src/controllers/operator/tenants/schemas/secret-new-tenant-v0.8.schema.json +28 -0
  121. package/src/controllers/operator/tenants/schemas/secret-tenant-key-v0.8.schema.json +13 -0
  122. package/src/controllers/operator/tenants/schemas/tenant-key-v0.8.schema.json +14 -0
  123. package/src/controllers/operator/tenants/schemas/tenant-v0.8.schema.json +62 -0
  124. package/src/controllers/root/autohooks.js +23 -0
  125. package/src/controllers/root/controller.js +173 -0
  126. package/src/controllers/saasoperator/groups/_id/autohooks.js +9 -0
  127. package/src/controllers/saasoperator/groups/_id/controller.js +121 -0
  128. package/src/controllers/saasoperator/groups/autohooks.js +19 -0
  129. package/src/controllers/saasoperator/groups/controller.js +65 -0
  130. package/src/controllers/saasoperator/groups/schemas/group.schema.js +17 -0
  131. package/src/controllers/saasoperator/groups/schemas/index.js +4 -0
  132. package/src/controllers/saasoperator/groups/schemas/new-group.schema.js +13 -0
  133. package/src/entities/common/domains/get-json-at-path.js +28 -0
  134. package/src/entities/common/domains/index.js +17 -0
  135. package/src/entities/common/index.js +17 -0
  136. package/src/entities/credentials/domains/credential-format.js +22 -0
  137. package/src/entities/credentials/domains/index.js +19 -0
  138. package/src/entities/credentials/index.js +17 -0
  139. package/src/entities/deep-links/domains/extract-did.js +11 -0
  140. package/src/entities/deep-links/domains/index.js +20 -0
  141. package/src/entities/deep-links/domains/velocity-protocol-uri-to-http-uri.js +32 -0
  142. package/src/entities/deep-links/index.js +19 -0
  143. package/src/entities/disclosures/domains/assert-disclosure-active.js +21 -0
  144. package/src/entities/disclosures/domains/compute-disclosure-configuration-type.js +29 -0
  145. package/src/entities/disclosures/domains/constants.js +61 -0
  146. package/src/entities/disclosures/domains/errors.js +34 -0
  147. package/src/entities/disclosures/domains/get-disclosure-configuration-type.js +60 -0
  148. package/src/entities/disclosures/domains/index.js +32 -0
  149. package/src/entities/disclosures/domains/is-issuing-disclosure.js +23 -0
  150. package/src/entities/disclosures/domains/parse-body-to-disclosure.js +17 -0
  151. package/src/entities/disclosures/domains/validate-by-identification-method.js +69 -0
  152. package/src/entities/disclosures/domains/validate-commercial-entity.js +26 -0
  153. package/src/entities/disclosures/domains/validate-disclosure-by-configuration-type.js +47 -0
  154. package/src/entities/disclosures/domains/validate-disclosure-default-issuing.js +77 -0
  155. package/src/entities/disclosures/domains/validate-disclosure.js +37 -0
  156. package/src/entities/disclosures/domains/validate-feed.js +16 -0
  157. package/src/entities/disclosures/domains/validate-presentation-definition.js +54 -0
  158. package/src/entities/disclosures/domains/validate-vendor-endpoint.js +22 -0
  159. package/src/entities/disclosures/domains/validate-vendor-webhook.js +18 -0
  160. package/src/entities/disclosures/factories/disclosure-factory.js +94 -0
  161. package/src/entities/disclosures/factories/index.js +19 -0
  162. package/src/entities/disclosures/index.js +22 -0
  163. package/src/entities/disclosures/orchestrators/get-disclosure.js +18 -0
  164. package/src/entities/disclosures/orchestrators/index.js +20 -0
  165. package/src/entities/disclosures/orchestrators/update-disclosure-configuration-type.js +32 -0
  166. package/src/entities/disclosures/repos/index.js +20 -0
  167. package/src/entities/disclosures/repos/repo.js +118 -0
  168. package/src/entities/disclosures/repos/set-configuration-type.js +33 -0
  169. package/src/entities/exchanges/adapters/index.js +17 -0
  170. package/src/entities/exchanges/adapters/sign-exchange-response.js +45 -0
  171. package/src/entities/exchanges/domains/build-exchange-progress.js +56 -0
  172. package/src/entities/exchanges/domains/constants.js +24 -0
  173. package/src/entities/exchanges/domains/ensure-exchange-state-valid.js +35 -0
  174. package/src/entities/exchanges/domains/errors.js +33 -0
  175. package/src/entities/exchanges/domains/index.js +25 -0
  176. package/src/entities/exchanges/domains/states.js +43 -0
  177. package/src/entities/exchanges/domains/types.js +31 -0
  178. package/src/entities/exchanges/factories/disclosure-exchange-factory.js +46 -0
  179. package/src/entities/exchanges/factories/index.js +20 -0
  180. package/src/entities/exchanges/factories/offer-exchange-factory.js +48 -0
  181. package/src/entities/exchanges/index.js +23 -0
  182. package/src/entities/exchanges/orchestrators/build-exchange-request-deep-link.js +50 -0
  183. package/src/entities/exchanges/orchestrators/index.js +19 -0
  184. package/src/entities/exchanges/repos/exchange-repo-projections.js +45 -0
  185. package/src/entities/exchanges/repos/exchange-state-repo-extension.js +76 -0
  186. package/src/entities/exchanges/repos/index.js +20 -0
  187. package/src/entities/exchanges/repos/repo.js +44 -0
  188. package/src/entities/feeds/factories/feed-factory.js +47 -0
  189. package/src/entities/feeds/factories/index.js +19 -0
  190. package/src/entities/feeds/index.js +20 -0
  191. package/src/entities/feeds/repos/index.js +19 -0
  192. package/src/entities/feeds/repos/repo.js +95 -0
  193. package/src/entities/groups/domains/format-group.js +11 -0
  194. package/src/entities/groups/domains/index.js +3 -0
  195. package/src/entities/groups/factories/group-factory.js +40 -0
  196. package/src/entities/groups/factories/index.js +19 -0
  197. package/src/entities/groups/index.js +22 -0
  198. package/src/entities/groups/orchestrators/find-group-or-error.js +16 -0
  199. package/src/entities/groups/orchestrators/index.js +6 -0
  200. package/src/entities/groups/orchestrators/validate-did.js +24 -0
  201. package/src/entities/groups/orchestrators/validate-group-by-user.js +16 -0
  202. package/src/entities/groups/orchestrators/validate-group.js +39 -0
  203. package/src/entities/groups/repos/delete-tenant-extension.js +13 -0
  204. package/src/entities/groups/repos/index.js +19 -0
  205. package/src/entities/groups/repos/repo.js +38 -0
  206. package/src/entities/groups/repos/update-or-error-extension.js +46 -0
  207. package/src/entities/index.js +37 -0
  208. package/src/entities/keys/domains/constants.js +37 -0
  209. package/src/entities/keys/domains/index.js +21 -0
  210. package/src/entities/keys/domains/is-matching-private-key-kid.js +41 -0
  211. package/src/entities/keys/domains/validate-key.js +62 -0
  212. package/src/entities/keys/factories/index.js +19 -0
  213. package/src/entities/keys/factories/key-factory.js +56 -0
  214. package/src/entities/keys/index.js +22 -0
  215. package/src/entities/keys/orchestrators/index.js +3 -0
  216. package/src/entities/keys/orchestrators/validate-did-doc-keys.js +69 -0
  217. package/src/entities/metadata-list-allocations/index.js +19 -0
  218. package/src/entities/metadata-list-allocations/repos/index.js +19 -0
  219. package/src/entities/metadata-list-allocations/repos/repo.js +40 -0
  220. package/src/entities/notifications/domains/index.js +19 -0
  221. package/src/entities/notifications/domains/notification-types.js +25 -0
  222. package/src/entities/notifications/index.js +19 -0
  223. package/src/entities/offers/domains/build-clean-pii-filter.js +35 -0
  224. package/src/entities/offers/domains/build-deeplink-url.js +120 -0
  225. package/src/entities/offers/domains/build-offer.js +88 -0
  226. package/src/entities/offers/domains/build-qr-code-url.js +37 -0
  227. package/src/entities/offers/domains/constants.js +32 -0
  228. package/src/entities/offers/domains/filter-object-ids.js +34 -0
  229. package/src/entities/offers/domains/generate-issuing-challenge.js +26 -0
  230. package/src/entities/offers/domains/generate-link-code.js +35 -0
  231. package/src/entities/offers/domains/index.js +31 -0
  232. package/src/entities/offers/domains/post-validation-offers-handler.js +31 -0
  233. package/src/entities/offers/domains/prepare-linked-credentials-for-holder.js +36 -0
  234. package/src/entities/offers/domains/resolve-subject.js +142 -0
  235. package/src/entities/offers/domains/validate-offer-commercial-entity.js +24 -0
  236. package/src/entities/offers/domains/validate-offer.js +90 -0
  237. package/src/entities/offers/factories/index.js +19 -0
  238. package/src/entities/offers/factories/offer-factory.js +119 -0
  239. package/src/entities/offers/index.js +22 -0
  240. package/src/entities/offers/orchestrators/create-verifiable-credentials.js +131 -0
  241. package/src/entities/offers/orchestrators/finalize-exchange.js +44 -0
  242. package/src/entities/offers/orchestrators/index.js +23 -0
  243. package/src/entities/offers/orchestrators/load-credential-refs.js +57 -0
  244. package/src/entities/offers/orchestrators/load-credential-types-map.js +44 -0
  245. package/src/entities/offers/orchestrators/prepare-offers.js +35 -0
  246. package/src/entities/offers/orchestrators/trigger-issued-credentials-webhook.js +63 -0
  247. package/src/entities/offers/repos/clean-pii-extension.js +85 -0
  248. package/src/entities/offers/repos/index.js +20 -0
  249. package/src/entities/offers/repos/issued-credential-projection.js +44 -0
  250. package/src/entities/offers/repos/repo.js +177 -0
  251. package/src/entities/presentations/domains/build-identity-doc.js +120 -0
  252. package/src/entities/presentations/domains/build-request-response-schema.js +46 -0
  253. package/src/entities/presentations/domains/build-vendor-data.js +31 -0
  254. package/src/entities/presentations/domains/check-payment-requirement.js +30 -0
  255. package/src/entities/presentations/domains/errors.js +28 -0
  256. package/src/entities/presentations/domains/extract-fields-from-id-credential.js +35 -0
  257. package/src/entities/presentations/domains/index.js +26 -0
  258. package/src/entities/presentations/domains/merge-credential-check-results.js +24 -0
  259. package/src/entities/presentations/domains/validate-presentation.js +128 -0
  260. package/src/entities/presentations/index.js +20 -0
  261. package/src/entities/presentations/orchestrators/create-presentation-request.js +148 -0
  262. package/src/entities/presentations/orchestrators/deduplicate-disclosure-exchange.js +52 -0
  263. package/src/entities/presentations/orchestrators/handle-presentation-submission.js +47 -0
  264. package/src/entities/presentations/orchestrators/index.js +20 -0
  265. package/src/entities/presentations/orchestrators/match-identity-on-exchange.js +114 -0
  266. package/src/entities/presentations/orchestrators/share-identification-credentials.js +110 -0
  267. package/src/entities/presentations/orchestrators/share-presentation.js +234 -0
  268. package/src/entities/push-delegate/get-push-delegate.js +37 -0
  269. package/src/entities/push-delegate/index.js +17 -0
  270. package/src/entities/redirect/index.js +3 -0
  271. package/src/entities/redirect/orchestrators/index.js +3 -0
  272. package/src/entities/redirect/orchestrators/load-org-info.js +40 -0
  273. package/src/entities/revocation-list-allocations/index.js +19 -0
  274. package/src/entities/revocation-list-allocations/repos/index.js +19 -0
  275. package/src/entities/revocation-list-allocations/repos/repo.js +40 -0
  276. package/src/entities/schemas/index.js +19 -0
  277. package/src/entities/schemas/orchestrators/index.js +19 -0
  278. package/src/entities/schemas/orchestrators/load-schema-validation.js +73 -0
  279. package/src/entities/tenants/domains/build-service-ids.js +27 -0
  280. package/src/entities/tenants/domains/extract-service.js +27 -0
  281. package/src/entities/tenants/domains/index.js +21 -0
  282. package/src/entities/tenants/domains/validate-service-ids.js +35 -0
  283. package/src/entities/tenants/factories/index.js +19 -0
  284. package/src/entities/tenants/factories/tenant-factory.js +37 -0
  285. package/src/entities/tenants/index.js +22 -0
  286. package/src/entities/tenants/orchestrators/add-primary-address-to-tenant.js +47 -0
  287. package/src/entities/tenants/orchestrators/create-tenant.js +91 -0
  288. package/src/entities/tenants/orchestrators/index.js +22 -0
  289. package/src/entities/tenants/orchestrators/refresh-tenant-dids.js +146 -0
  290. package/src/entities/tenants/orchestrators/set-tenant-default-issuing-disclosure.js +31 -0
  291. package/src/entities/tenants/repos/index.js +20 -0
  292. package/src/entities/tenants/repos/insert-tenant-extension.js +33 -0
  293. package/src/entities/tenants/repos/repo.js +52 -0
  294. package/src/entities/tenants/repos/tenant-default-projection.js +33 -0
  295. package/src/entities/tokens/adapters/access-token.js +49 -0
  296. package/src/entities/tokens/adapters/index.js +19 -0
  297. package/src/entities/tokens/index.js +19 -0
  298. package/src/entities/users/factories/index.js +19 -0
  299. package/src/entities/users/factories/user-factory.js +36 -0
  300. package/src/entities/users/index.js +20 -0
  301. package/src/entities/users/repos/add-anonymous-user-repo-extension.js +23 -0
  302. package/src/entities/users/repos/find-or-insert-vendor-user-repo-extension.js +30 -0
  303. package/src/entities/users/repos/index.js +19 -0
  304. package/src/entities/users/repos/repo.js +50 -0
  305. package/src/fetchers/index.js +20 -0
  306. package/src/fetchers/operator/identify-fetcher.js +36 -0
  307. package/src/fetchers/operator/index.js +21 -0
  308. package/src/fetchers/operator/inspection-fetcher.js +35 -0
  309. package/src/fetchers/operator/issuing-fetcher.js +50 -0
  310. package/src/fetchers/operator/webhook-auth-header.js +45 -0
  311. package/src/fetchers/push-gateway/generate-push-gateway-token.js +40 -0
  312. package/src/fetchers/push-gateway/index.js +19 -0
  313. package/src/fetchers/push-gateway/push-fetcher.js +39 -0
  314. package/src/index.js +19 -0
  315. package/src/init-holder-server.js +108 -0
  316. package/src/init-operator-server.js +101 -0
  317. package/src/init-server.js +120 -0
  318. package/src/main-holder.js +18 -0
  319. package/src/main-operator.js +19 -0
  320. package/src/main.js +18 -0
  321. package/src/plugins/autoload-repos.js +28 -0
  322. package/src/plugins/disclosure-loader-plugin.js +56 -0
  323. package/src/plugins/ensure-disclosure-active-plugin.js +30 -0
  324. package/src/plugins/ensure-disclosure-configuration-type-plugin.js +29 -0
  325. package/src/plugins/ensure-tenant-default-issuing-disclosure-id-plugin.js +60 -0
  326. package/src/plugins/ensure-tenant-primary-address-plugin.js +44 -0
  327. package/src/plugins/exchange-error-handler-plugin.js +51 -0
  328. package/src/plugins/exchange-loader-plugin.js +50 -0
  329. package/src/plugins/group-loader-plugin.js +51 -0
  330. package/src/plugins/index.js +32 -0
  331. package/src/plugins/kms-plugin.js +57 -0
  332. package/src/plugins/tenant-loader-plugin.js +91 -0
  333. package/src/plugins/validate-cao-plugin.js +81 -0
  334. package/src/plugins/vendor-routes-auth-plugin.js +24 -0
  335. package/src/plugins/verify-access-token-plugin.js +88 -0
  336. package/src/standalone.js +24 -0
  337. package/src/start-app-server.js +38 -0
  338. package/test/combined/app-redirect.test.js +199 -0
  339. package/test/combined/helpers/credentialagent-build-fastify.js +29 -0
  340. package/test/combined/helpers/index.js +22 -0
  341. package/test/combined/helpers/nock-registrar-app-schema-name.js +50 -0
  342. package/test/combined/helpers/nock-registrar-get-organization-diddoc.js +26 -0
  343. package/test/combined/helpers/nock-registrar-get-organization-verified-profile.js +33 -0
  344. package/test/combined/manifest.json.test.js +55 -0
  345. package/test/combined/root-controller.test.js +42 -0
  346. package/test/combined/schemas/education-degree.schema.json +166 -0
  347. package/test/combined/schemas/employment-current-v1.1.schema.json +253 -0
  348. package/test/combined/schemas/open-badge-credential.schema.json +1285 -0
  349. package/test/combined/schemas/past-employment-position-with-uri-id.schema.js +22 -0
  350. package/test/combined/schemas/past-employment-position.schema.json +148 -0
  351. package/test/combined/schemas/will-always-validate.json +10 -0
  352. package/test/combined/validate-cao-plugin.test.js +155 -0
  353. package/test/get-push-delegate.test.js +54 -0
  354. package/test/helpers/jwt-vc-expectation.js +109 -0
  355. package/test/holder/build-request-response-schema.test.js +55 -0
  356. package/test/holder/credential-manifest-controller.test.js +3192 -0
  357. package/test/holder/e2e-issuing-controller.test.js +425 -0
  358. package/test/holder/get-exchange-progress-controller.test.js +521 -0
  359. package/test/holder/get-presentation-request.test.js +906 -0
  360. package/test/holder/helpers/credential-type-metadata.js +98 -0
  361. package/test/holder/helpers/credentialagent-holder-build-fastify.js +32 -0
  362. package/test/holder/helpers/generate-presentation.js +441 -0
  363. package/test/holder/helpers/generate-test-access-token.js +54 -0
  364. package/test/holder/helpers/jwt-access-token-expectation.js +32 -0
  365. package/test/holder/helpers/jwt-vc-expectation.js +115 -0
  366. package/test/holder/issuing-controller.test.js +7076 -0
  367. package/test/holder/oauth-token-controller.test.js +412 -0
  368. package/test/holder/presentation-submission.test.js +2365 -0
  369. package/test/holder/submit-identification.test.js +4815 -0
  370. package/test/operator/check-credentials-controller-v0.8.test.js +832 -0
  371. package/test/operator/credentials-revoke.test.js +536 -0
  372. package/test/operator/disclosures-controller-v0.8.test.js +4157 -0
  373. package/test/operator/exchanges-controller-v0.8.test.js +414 -0
  374. package/test/operator/exchanges-id-controller-v0.8.test.js +162 -0
  375. package/test/operator/feeds-controller-v0.8.test.js +659 -0
  376. package/test/operator/generate-push-gateway-token.test.js +116 -0
  377. package/test/operator/groups-controller.test.js +145 -0
  378. package/test/operator/groups-id-controller.test.js +287 -0
  379. package/test/operator/helpers/create-test-org-doc.js +60 -0
  380. package/test/operator/helpers/credentialagent-operator-build-fastify.js +32 -0
  381. package/test/operator/helpers/find-kms-key.js +31 -0
  382. package/test/operator/helpers/generate-primary-and-add-operator-to-primary.js +63 -0
  383. package/test/operator/helpers/init-agent-kms.js +22 -0
  384. package/test/operator/issued-credentials-controller-v0.8.test.js +398 -0
  385. package/test/operator/keys-controller-v0.8.test.js +1130 -0
  386. package/test/operator/offer-data-controller-v0.8.test.js +253 -0
  387. package/test/operator/offers-controller-v0.8.test.js +3026 -0
  388. package/test/operator/set-configuration-type-modifier.test.js +75 -0
  389. package/test/operator/swagger.test.js +37 -0
  390. package/test/operator/tenant-controller-v0.8.test.js +730 -0
  391. package/test/operator/tenant-loader-plugin.test.js +96 -0
  392. package/test/operator/tenants-controller-v0.8.test.js +2093 -0
  393. package/test/operator/users-controller-v0.8.test.js +137 -0
  394. package/test/operator/vc-api-credentials.test.js +963 -0
  395. package/verification.env +28 -0
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright 2023 Velocity Team
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ const nock = require('nock');
18
+
19
+ const nockRegistrarAppSchemaName = ({
20
+ nockInstance,
21
+ basePath = 'http://oracle.localhost.test',
22
+ schemaName = 'past-employment-position',
23
+ credentialType = 'PastEmploymentPosition',
24
+ repeatCount = 1,
25
+ statusCode = 200,
26
+ responseJson,
27
+ } = {}) => {
28
+ (nockInstance ?? nock(basePath))
29
+ .get('/api/v0.6/credential-types')
30
+ .query({ credentialType })
31
+ .times(repeatCount)
32
+ .reply(200, [
33
+ {
34
+ credentialType,
35
+ schemaUrl: `http://mock.com/schemas/${schemaName}`,
36
+ },
37
+ ]);
38
+
39
+ return nock('http://mock.com')
40
+ .get(`/schemas/${schemaName}`)
41
+ .times(repeatCount)
42
+ .reply(
43
+ statusCode,
44
+ // eslint-disable-next-line import/no-dynamic-require
45
+ responseJson ?? require(`../schemas/${schemaName}.schema.json`)
46
+ );
47
+ };
48
+ module.exports = {
49
+ nockRegistrarAppSchemaName,
50
+ };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright 2023 Velocity Team
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ const nock = require('nock');
18
+
19
+ const nockRegistrarGetOrganizationDidDoc = (tenantDid, orgDoc) =>
20
+ nock('http://oracle.localhost.test')
21
+ .get(`/api/v0.6/resolve-did/${encodeURIComponent(tenantDid)}`)
22
+ .reply(200, orgDoc);
23
+
24
+ module.exports = {
25
+ nockRegistrarGetOrganizationDidDoc,
26
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Copyright 2023 Velocity Team
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ const nock = require('nock');
18
+
19
+ const nockRegistrarGetOrganizationVerifiedProfile = (
20
+ tenantDid,
21
+ verifiedProfile
22
+ ) => {
23
+ nock('http://oracle.localhost.test')
24
+ .get(
25
+ `/api/v0.6/organizations/${encodeURIComponent(
26
+ tenantDid
27
+ )}/verified-profile`
28
+ )
29
+ .reply(200, verifiedProfile);
30
+ };
31
+ module.exports = {
32
+ nockRegistrarGetOrganizationVerifiedProfile,
33
+ };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Copyright 2023 Velocity Team
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ const buildFastify = require('./helpers/credentialagent-build-fastify');
18
+
19
+ describe('Android manifest.json and related files test suite', () => {
20
+ let fastify;
21
+ beforeAll(async () => {
22
+ fastify = buildFastify();
23
+ });
24
+
25
+ afterAll(async () => {
26
+ await fastify.close();
27
+ });
28
+
29
+ it('should load the manifest.json', async () => {
30
+ const result = await fastify.injectJson({
31
+ method: 'GET',
32
+ url: 'public/manifest.json',
33
+ });
34
+ expect(result.statusCode).toEqual(200);
35
+ expect(result.json).not.toBe(null);
36
+ });
37
+
38
+ it('should load the favicon', async () => {
39
+ const result = await fastify.injectJson({
40
+ method: 'GET',
41
+ url: 'public/favicon.ico',
42
+ });
43
+ expect(result.statusCode).toEqual(200);
44
+ expect(result.json).not.toBe(null);
45
+ });
46
+
47
+ it('should load a logo', async () => {
48
+ const result = await fastify.injectJson({
49
+ method: 'GET',
50
+ url: 'public/logo192.png',
51
+ });
52
+ expect(result.statusCode).toEqual(200);
53
+ expect(result.json).not.toBe(null);
54
+ });
55
+ });
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Copyright 2023 Velocity Team
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ const nock = require('nock');
18
+ const buildFastify = require('./helpers/credentialagent-build-fastify');
19
+
20
+ describe('root controller test', () => {
21
+ let fastify;
22
+
23
+ beforeAll(async () => {
24
+ fastify = buildFastify();
25
+ await fastify.ready();
26
+ });
27
+
28
+ afterEach(() => {
29
+ nock.cleanAll();
30
+ });
31
+
32
+ afterAll(async () => {
33
+ await fastify.close();
34
+ nock.cleanAll();
35
+ nock.restore();
36
+ });
37
+
38
+ it('should ping', async () => {
39
+ const response = await fastify.injectJson({ method: 'GET', url: '/' });
40
+ expect(response.statusCode).toEqual(200);
41
+ });
42
+ });
@@ -0,0 +1,166 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "description": "EducationDegree",
4
+ "$id": "education-degree",
5
+ "type": "object",
6
+ "definitions": {
7
+ "DID": {
8
+ "type": "string",
9
+ "pattern": "^did:[a-z0-9]+:[A-Za-z0-9._:?=&%;-]+$"
10
+ },
11
+ "MultiLingualString": {
12
+ "type": "object",
13
+ "properties": {
14
+ "localized": {
15
+ "type": "object",
16
+ "propertyNames": {
17
+ "pattern": "^[a-z]{2}(_[A-Z]{2})?$"
18
+ },
19
+ "additionalProperties": {
20
+ "type": "string"
21
+ }
22
+ },
23
+ "preferredLocale": {
24
+ "type": "object",
25
+ "properties": {
26
+ "country": {
27
+ "type": "string",
28
+ "pattern": "^[A-Z]{2}$"
29
+ },
30
+ "language": {
31
+ "type": "string",
32
+ "pattern": "^[a-z]{2}$"
33
+ }
34
+ }
35
+ }
36
+ },
37
+ "additionalProperties": false,
38
+ "required": [
39
+ "localized"
40
+ ]
41
+ },
42
+ "Date": {
43
+ "type": "object",
44
+ "properties": {
45
+ "day": {
46
+ "type": "integer",
47
+ "minimum": 1,
48
+ "maximum": 31
49
+ },
50
+ "month": {
51
+ "type": "integer",
52
+ "minimum": 1,
53
+ "maximum": 12
54
+ },
55
+ "year": {
56
+ "type": "integer",
57
+ "minimum": 1950
58
+ }
59
+ },
60
+ "additionalProperties": false
61
+ },
62
+ "Location": {
63
+ "type": "object",
64
+ "properties": {
65
+ "countryCode": {
66
+ "type": "string",
67
+ "pattern": "^[A-Z]{2}$",
68
+ "description": "An uppercase two-letter country code as defined by [ISO-3166-1](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)"
69
+ },
70
+ "regionCode": {
71
+ "type": "string",
72
+ "pattern": "^[A-Za-z0-9]{1,3}$",
73
+ "description": "An uppercase region code as defined by [ISO-3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)"
74
+ }
75
+ }
76
+ },
77
+ "Alignment": {
78
+ "type": "object",
79
+ "properties": {
80
+ "targetName": {
81
+ "type": "string",
82
+ "description": "CCSS.ELA-Literacy.RST.11-12.3"
83
+ },
84
+ "targetUrl": {
85
+ "type": "string",
86
+ "format": "uri",
87
+ "description": "http://www.corestandards.org/ELA-Literacy/RST/11-12/3"
88
+ },
89
+ "targetDescription": {
90
+ "type": "string",
91
+ "description": "A description of the ELA ltieracy certification."
92
+ },
93
+ "targetCode": {
94
+ "type": "string",
95
+ "description": "CCSS.ELA-Literacy.RST.11-12.3"
96
+ },
97
+ "targetFramework": {
98
+ "type": "string",
99
+ "description": "Mozilla 21st Century Skills"
100
+ }
101
+ },
102
+ "required": [
103
+ "targetName",
104
+ "targetUrl"
105
+ ],
106
+ "additionalProperties": false
107
+ }
108
+ },
109
+ "properties": {
110
+ "type": {
111
+ "type": "string",
112
+ "default": "EducationDegree"
113
+ },
114
+ "school": {
115
+ "$ref": "#/definitions/DID",
116
+ "description": "Standardized referenced Organization DID."
117
+ },
118
+ "schoolName": {
119
+ "$ref": "#/definitions/MultiLingualString",
120
+ "description": "School name."
121
+ },
122
+ "degreeName": {
123
+ "$ref": "#/definitions/MultiLingualString",
124
+ "description": "Degree attained at this school."
125
+ },
126
+ "program": {
127
+ "$ref": "#/definitions/MultiLingualString",
128
+ "description": "School program string"
129
+ },
130
+ "grade": {
131
+ "$ref": "#/definitions/MultiLingualString",
132
+ "description": "Grade attained in the area of study."
133
+ },
134
+ "notes": {
135
+ "$ref": "#/definitions/MultiLingualString",
136
+ "description": "Description for additional details about this education."
137
+ },
138
+ "fieldsOfStudy": {
139
+ "$ref": "#/definitions/MultiLingualString",
140
+ "description": "Degrees achieved in respective fields of study."
141
+ },
142
+ "startMonthYear": {
143
+ "$ref": "#/definitions/Date",
144
+ "description": "Start date of the education. It is a Date. Does not support the 'month' field."
145
+ },
146
+ "endMonthYear": {
147
+ "$ref": "#/definitions/Date",
148
+ "description": "End date of the education. Does not support 'day' field. Missing value means the position is current."
149
+ },
150
+ "alignment": {
151
+ "type": "array",
152
+ "minItems": 1,
153
+ "items": {
154
+ "$ref": "#/definitions/Alignment"
155
+ }
156
+ }
157
+ },
158
+ "required": [
159
+ "school",
160
+ "schoolName",
161
+ "degreeName",
162
+ "program",
163
+ "startMonthYear",
164
+ "endMonthYear"
165
+ ]
166
+ }
@@ -0,0 +1,253 @@
1
+ {
2
+ "title": "Current employment position",
3
+ "$id": "https://velocitynetwork.foundation/schemas/employment-current-v1.1",
4
+ "allOf": [
5
+ {
6
+ "$ref": "#/definitions/Employment-base_Schema"
7
+ },
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "type": {
12
+ "type": "string",
13
+ "default": "Employment"
14
+ },
15
+ "startDate": {
16
+ "$ref": "#/definitions/Date_Schema"
17
+ }
18
+ }
19
+ }
20
+ ],
21
+ "required": [
22
+ "legalEmployer",
23
+ "role",
24
+ "startDate",
25
+ "recipient"
26
+ ],
27
+ "definitions": {
28
+ "Employment-base_Schema": {
29
+ "title": "Employment-base",
30
+ "type": "object",
31
+ "properties": {
32
+ "@context": {
33
+ "$ref": "#/definitions/Json-ld-context_Schema"
34
+ },
35
+ "legalEmployer": {
36
+ "$ref": "#/definitions/Organization_Schema"
37
+ },
38
+ "role": {
39
+ "type": "string",
40
+ "description": "The role the person has in the organization.",
41
+ "maxLength": 256
42
+ },
43
+ "description": {
44
+ "type": "string",
45
+ "description": "A detailed description of the position.",
46
+ "maxLength": 2048
47
+ },
48
+ "employmentType": {
49
+ "type": "array",
50
+ "minItems": 1,
51
+ "items": {
52
+ "type": "string",
53
+ "enum": [
54
+ "contract",
55
+ "temporary",
56
+ "permanent",
57
+ "internship",
58
+ "full-time",
59
+ "part-time",
60
+ "other"
61
+ ]
62
+ },
63
+ "description": "Any of: full-time, part-time, contract, temporary, permanent, internship. "
64
+ },
65
+ "place": {
66
+ "$ref": "#/definitions/Place_Schema"
67
+ },
68
+ "recipient": {
69
+ "$ref": "#/definitions/PersonName_Schema"
70
+ },
71
+ "alignment": {
72
+ "type": "array",
73
+ "description": "A public resource to which the employment position is aligned.",
74
+ "minItems": 1,
75
+ "items": {
76
+ "$ref": "#/definitions/Alignment_Schema"
77
+ }
78
+ }
79
+ }
80
+ },
81
+ "Json-ld-context_Schema": {
82
+ "title": "json-ld-context",
83
+ "oneOf": [
84
+ {
85
+ "type": "string",
86
+ "maxLength": 2048
87
+ },
88
+ {
89
+ "type": "array",
90
+ "minItems": 1,
91
+ "items": {
92
+ "type": "string",
93
+ "maxLength": 2048
94
+ }
95
+ }
96
+ ],
97
+ "description": "Simplified context for Velocity Publishers to Use"
98
+ },
99
+ "Alignment_Schema": {
100
+ "title": "Alignment",
101
+ "type": "object",
102
+ "additionalProperties": false,
103
+ "properties": {
104
+ "type": {
105
+ "type": "string",
106
+ "default": "AlignmentObject"
107
+ },
108
+ "targetName": {
109
+ "type": "string",
110
+ "description": "Name of the target alignment.",
111
+ "maxLength": 256
112
+ },
113
+ "targetUrl": {
114
+ "type": "string",
115
+ "format": "uri",
116
+ "description": "URL of the target alignment. ",
117
+ "maxLength": 2048
118
+ },
119
+ "targetDescription": {
120
+ "type": "string",
121
+ "description": "Detailed description of the target alignment. ",
122
+ "maxLength": 2048
123
+ },
124
+ "targetCode": {
125
+ "type": "string",
126
+ "description": "Code of the target alignment. ",
127
+ "maxLength": 256
128
+ },
129
+ "targetFramework": {
130
+ "type": "string",
131
+ "description": "The framework to which the target belongs. ",
132
+ "maxLength": 256
133
+ }
134
+ },
135
+ "required": [
136
+ "targetName",
137
+ "targetUrl"
138
+ ]
139
+ },
140
+ "Date_Schema": {
141
+ "title": "Calendar date",
142
+ "type": "string",
143
+ "pattern": "^[1,2]\\d\\d\\d(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\\d|30|31))?)?$"
144
+ },
145
+ "Did_Schema": {
146
+ "title": "DID",
147
+ "type": "string",
148
+ "pattern": "^did:[a-z0-9]+:[A-Za-z0-9._:?=&%;-]+$"
149
+ },
150
+ "Organization_Schema": {
151
+ "title": "Organization",
152
+ "type": "object",
153
+ "additionalProperties": false,
154
+ "properties": {
155
+ "type": {
156
+ "type": "string",
157
+ "default": "Organization"
158
+ },
159
+ "name": {
160
+ "type": "string",
161
+ "description": "The name of the organization.",
162
+ "maxLength": 256
163
+ },
164
+ "identifier": {
165
+ "$ref": "#/definitions/Did_Schema"
166
+ },
167
+ "place": {
168
+ "$ref": "#/definitions/Place_Schema"
169
+ }
170
+ },
171
+ "required": [
172
+ "name",
173
+ "place"
174
+ ]
175
+ },
176
+ "PersonName_Schema": {
177
+ "title": "Person name",
178
+ "type": "object",
179
+ "additionalProperties": false,
180
+ "properties": {
181
+ "type": {
182
+ "type": "string",
183
+ "default": "PersonName"
184
+ },
185
+ "givenName": {
186
+ "type": "string",
187
+ "description": "The given name or first name of the person.",
188
+ "maxLength": 64
189
+ },
190
+ "familyName": {
191
+ "type": "string",
192
+ "description": "The family name or surname of the person.",
193
+ "maxLength": 64
194
+ },
195
+ "middleName": {
196
+ "type": "string",
197
+ "description": "The middle name of the person.",
198
+ "maxLength": 256
199
+ },
200
+ "namePrefix": {
201
+ "type": "string",
202
+ "description": "A prefix to the name such as Dr or Sir.",
203
+ "maxLength": 8
204
+ },
205
+ "nameSuffix": {
206
+ "type": "string",
207
+ "description": "A suffix to the name such as Jr. or Sr.",
208
+ "maxLength": 16
209
+ }
210
+ },
211
+ "required": [
212
+ "givenName",
213
+ "familyName"
214
+ ]
215
+ },
216
+ "Place_Schema": {
217
+ "title": "Place",
218
+ "type": "object",
219
+ "additionalProperties": false,
220
+ "properties": {
221
+ "type": {
222
+ "type": "string",
223
+ "default": "Place"
224
+ },
225
+ "name": {
226
+ "type": "string",
227
+ "description": "The name of the place, e.g., building name, branch name, etc.",
228
+ "maxLength": 256
229
+ },
230
+ "addressLocality": {
231
+ "type": "string",
232
+ "description": "The locality where the place is, e.g., town or city name.",
233
+ "maxLength": 256
234
+ },
235
+ "addressRegion": {
236
+ "type": "string",
237
+ "pattern": "^[A-Z]{2}(-[A-Z0-9]{1,3})?$",
238
+ "description": "The region where the place is. These are states, provinces, etc. Must be an [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2)",
239
+ "maxLength": 6
240
+ },
241
+ "addressCountry": {
242
+ "type": "string",
243
+ "description": "The country where the place is. Must be an [ISO 3166 2 letter country code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)",
244
+ "pattern": "^[A-Z]{2}$",
245
+ "maxLength": 2
246
+ }
247
+ },
248
+ "required": [
249
+ "addressCountry"
250
+ ]
251
+ }
252
+ }
253
+ }